summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.document1
-rw-r--r--.github/workflows/baseruby.yml1
-rw-r--r--.github/workflows/check_dependencies.yml4
-rw-r--r--.github/workflows/codeql-analysis.yml2
-rw-r--r--.github/workflows/compilers.yml2
-rw-r--r--.github/workflows/macos.yml4
-rw-r--r--.github/workflows/mingw.yml2
-rw-r--r--.github/workflows/mjit.yml4
-rw-r--r--.github/workflows/spec_guards.yml2
-rw-r--r--.github/workflows/ubuntu.yml24
-rw-r--r--.github/workflows/windows.yml6
-rw-r--r--.travis.yml226
-rw-r--r--NEWS.md74
-rw-r--r--README.ja.md7
-rw-r--r--README.md21
-rw-r--r--addr2line.c2
-rw-r--r--appveyor.yml4
-rw-r--r--array.c28
-rw-r--r--ast.c82
-rw-r--r--ast.rb268
-rw-r--r--benchmark/mjit_integer.yml2
-rw-r--r--benchmark/nilclass.yml6
-rw-r--r--benchmark/vm_case_classes.yml9
-rw-r--r--benchmark/vm_cvar.yml20
-rw-r--r--benchmark/vm_thread_condvar1.rb8
-rw-r--r--benchmark/vm_thread_condvar2.rb10
-rw-r--r--bootstraptest/test_fiber.rb4
-rw-r--r--bootstraptest/test_insns.rb2
-rw-r--r--bootstraptest/test_ractor.rb18
-rw-r--r--class.c6
-rw-r--r--common.mk260
-rw-r--r--compar.c16
-rw-r--r--compile.c136
-rw-r--r--complex.c4
-rw-r--r--configure.ac156
-rw-r--r--cont.c161
-rw-r--r--coroutine/Stack.h21
-rw-r--r--coroutine/amd64/Context.h1
-rw-r--r--coroutine/arm32/Context.h1
-rw-r--r--coroutine/arm64/Context.h1
-rw-r--r--coroutine/copy/Context.c162
-rw-r--r--coroutine/copy/Context.h98
-rw-r--r--coroutine/emscripten/Context.h1
-rw-r--r--coroutine/ppc64le/Context.h1
-rw-r--r--coroutine/pthread/Context.c272
-rw-r--r--coroutine/pthread/Context.h63
-rw-r--r--coroutine/riscv64/Context.h1
-rw-r--r--coroutine/ucontext/Context.c1
-rw-r--r--coroutine/ucontext/Context.h1
-rw-r--r--coroutine/win32/Context.h1
-rw-r--r--coroutine/win64/Context.h1
-rw-r--r--coroutine/x86/Context.h1
-rw-r--r--coverage/README2
-rw-r--r--debug_counter.h6
-rw-r--r--defs/gmake.mk1
-rw-r--r--dir.c176
-rw-r--r--dir.rb172
-rw-r--r--doc/documentation_guide.rdoc281
-rw-r--r--doc/fiber.md7
-rw-r--r--doc/irb/irb.rd.ja4
-rw-r--r--doc/maintainers.rdoc50
-rw-r--r--doc/method_documentation.rdoc211
-rw-r--r--doc/regexp.rdoc4
-rw-r--r--doc/standard_library.rdoc15
-rw-r--r--doc/syntax/literals.rdoc2
-rw-r--r--doc/syntax/pattern_matching.rdoc34
-rw-r--r--enc/depend18
-rw-r--r--enc/unicode/13.0.0/casefold.h (renamed from enc/unicode/12.1.0/casefold.h)4402
-rw-r--r--enc/unicode/13.0.0/name2ctype.h (renamed from enc/unicode/12.1.0/name2ctype.h)5473
-rw-r--r--enumerator.c11
-rw-r--r--error.c53
-rw-r--r--eval.c5
-rw-r--r--eval_intern.h4
-rw-r--r--ext/-test-/cxxanyargs/extconf.rb4
-rw-r--r--ext/-test-/memory_view/extconf.rb2
-rw-r--r--ext/-test-/memory_view/memory_view.c7
-rw-r--r--ext/-test-/string/enc_str_buf_cat.c14
-rw-r--r--ext/-test-/wait/depend (renamed from ext/-test-/wait_for_single_fd/depend)191
-rw-r--r--ext/-test-/wait/extconf.rb2
-rw-r--r--ext/-test-/wait/wait.c39
-rw-r--r--ext/-test-/wait_for_single_fd/extconf.rb8
-rw-r--r--ext/-test-/wait_for_single_fd/wait_for_single_fd.c94
-rw-r--r--ext/bigdecimal/bigdecimal.c4
-rw-r--r--ext/date/date_core.c6
-rw-r--r--ext/date/lib/date.rb2
-rw-r--r--ext/dbm/dbm.c1156
-rw-r--r--ext/dbm/dbm.gemspec21
-rw-r--r--ext/dbm/depend162
-rw-r--r--ext/dbm/extconf.rb292
-rw-r--r--ext/digest/sha2/sha2.c12
-rw-r--r--ext/fiddle/closure.c26
-rw-r--r--ext/fiddle/conversions.h1
-rw-r--r--ext/fiddle/depend3
-rw-r--r--ext/fiddle/extconf.rb52
-rw-r--r--ext/fiddle/fiddle.c4
-rw-r--r--ext/fiddle/fiddle.gemspec2
-rw-r--r--ext/fiddle/fiddle.h11
-rw-r--r--ext/fiddle/function.c12
-rw-r--r--ext/fiddle/handle.c60
-rw-r--r--ext/fiddle/lib/fiddle.rb12
-rw-r--r--ext/fiddle/lib/fiddle/cparser.rb6
-rw-r--r--ext/fiddle/lib/fiddle/struct.rb43
-rw-r--r--ext/fiddle/lib/fiddle/types.rb35
-rw-r--r--ext/fiddle/lib/fiddle/version.rb2
-rw-r--r--ext/fiddle/memory_view.c89
-rw-r--r--ext/fiddle/pointer.c27
-rw-r--r--ext/gdbm/README1
-rw-r--r--ext/gdbm/depend162
-rw-r--r--ext/gdbm/extconf.rb19
-rw-r--r--ext/gdbm/gdbm.c1306
-rw-r--r--ext/gdbm/gdbm.gemspec22
-rw-r--r--ext/json/json.gemspec2
-rw-r--r--ext/json/lib/json.rb2
-rw-r--r--ext/json/parser/extconf.rb1
-rw-r--r--ext/json/parser/parser.c4785
-rw-r--r--ext/json/parser/parser.h6
-rw-r--r--ext/json/parser/parser.rl94
-rw-r--r--ext/json/parser/prereq.mk5
-rw-r--r--ext/objspace/lib/objspace/trace.rb45
-rw-r--r--ext/openssl/extconf.rb64
-rw-r--r--ext/openssl/lib/openssl/buffering.rb19
-rw-r--r--ext/openssl/lib/openssl/pkey.rb354
-rw-r--r--ext/openssl/lib/openssl/x509.rb4
-rw-r--r--ext/openssl/openssl.gemspec5
-rw-r--r--ext/openssl/openssl_missing.c37
-rw-r--r--ext/openssl/openssl_missing.h36
-rw-r--r--ext/openssl/ossl.c10
-rw-r--r--ext/openssl/ossl_bn.c134
-rw-r--r--ext/openssl/ossl_kdf.c8
-rw-r--r--ext/openssl/ossl_ocsp.c50
-rw-r--r--ext/openssl/ossl_pkcs7.c20
-rw-r--r--ext/openssl/ossl_pkey.c645
-rw-r--r--ext/openssl/ossl_pkey.h63
-rw-r--r--ext/openssl/ossl_pkey_dh.c305
-rw-r--r--ext/openssl/ossl_pkey_dsa.c299
-rw-r--r--ext/openssl/ossl_pkey_ec.c105
-rw-r--r--ext/openssl/ossl_pkey_rsa.c362
-rw-r--r--ext/openssl/ossl_ssl.c212
-rw-r--r--ext/openssl/ossl_ssl_session.c53
-rw-r--r--ext/openssl/ossl_ts.c9
-rw-r--r--ext/openssl/ossl_x509.c6
-rw-r--r--ext/openssl/ossl_x509cert.c170
-rw-r--r--ext/openssl/ossl_x509crl.c17
-rw-r--r--ext/openssl/ossl_x509req.c17
-rw-r--r--ext/psych/lib/psych.rb204
-rw-r--r--ext/psych/lib/psych/class_loader.rb4
-rw-r--r--ext/psych/lib/psych/exception.rb4
-rw-r--r--ext/psych/lib/psych/versions.rb4
-rw-r--r--ext/psych/lib/psych/visitors/to_ruby.rb2
-rw-r--r--ext/psych/lib/psych/visitors/yaml_tree.rb50
-rw-r--r--ext/racc/cparse/extconf.rb1
-rw-r--r--ext/readline/readline-ext.gemspec2
-rw-r--r--ext/readline/readline.c3
-rw-r--r--ext/socket/ancdata.c4
-rw-r--r--ext/socket/basicsocket.c75
-rw-r--r--ext/socket/depend435
-rw-r--r--ext/socket/init.c120
-rw-r--r--ext/socket/raddrinfo.c125
-rw-r--r--ext/socket/rubysocket.h27
-rw-r--r--ext/socket/socket.c59
-rw-r--r--ext/socket/tcpserver.c22
-rw-r--r--ext/socket/udpsocket.c27
-rw-r--r--ext/socket/unixserver.c23
-rw-r--r--ext/stringio/stringio.c2
-rw-r--r--ext/win32ole/win32ole.c16
-rw-r--r--ext/win32ole/win32ole_variant.c4
-rw-r--r--ext/win32ole/win32ole_variant_m.c2
-rw-r--r--ext/zlib/extconf.rb7
-rw-r--r--file.c9
-rw-r--r--gc.c1110
-rw-r--r--gem_prelude.rb6
-rw-r--r--gems/bundled_gems14
-rw-r--r--goruby.c6
-rw-r--r--hash.c118
-rw-r--r--id_table.c6
-rw-r--r--include/ruby/encoding.h2
-rw-r--r--include/ruby/fiber/scheduler.h2
-rw-r--r--include/ruby/internal/attr/deprecated.h6
-rw-r--r--include/ruby/internal/core/rbignum.h6
-rw-r--r--include/ruby/internal/intern/cont.h14
-rw-r--r--include/ruby/internal/intern/thread.h4
-rw-r--r--include/ruby/internal/intern/variable.h1
-rw-r--r--include/ruby/internal/iterator.h1
-rw-r--r--include/ruby/internal/memory.h2
-rw-r--r--include/ruby/io.h8
-rw-r--r--inits.c1
-rw-r--r--insns.def11
-rw-r--r--internal/array.h1
-rw-r--r--internal/class.h8
-rw-r--r--internal/compile.h3
-rw-r--r--internal/cont.h1
-rw-r--r--internal/error.h46
-rw-r--r--internal/gc.h6
-rw-r--r--internal/numeric.h1
-rw-r--r--internal/object.h1
-rw-r--r--internal/parse.h1
-rw-r--r--internal/re.h2
-rw-r--r--internal/string.h2
-rw-r--r--internal/vm.h2
-rw-r--r--io.c274
-rw-r--r--iseq.c40
-rw-r--r--iseq.h8
-rw-r--r--lib/bundler.rb12
-rw-r--r--lib/bundler/cli.rb47
-rw-r--r--lib/bundler/cli/check.rb6
-rw-r--r--lib/bundler/cli/doctor.rb12
-rw-r--r--lib/bundler/cli/install.rb7
-rw-r--r--lib/bundler/cli/lock.rb6
-rw-r--r--lib/bundler/cli/outdated.rb19
-rw-r--r--lib/bundler/cli/update.rb11
-rw-r--r--lib/bundler/compact_index_client.rb4
-rw-r--r--lib/bundler/current_ruby.rb8
-rw-r--r--lib/bundler/definition.rb220
-rw-r--r--lib/bundler/dsl.rb33
-rw-r--r--lib/bundler/feature_flag.rb2
-rw-r--r--lib/bundler/fetcher/compact_index.rb2
-rw-r--r--lib/bundler/fetcher/downloader.rb3
-rw-r--r--lib/bundler/fetcher/index.rb1
-rw-r--r--lib/bundler/friendly_errors.rb6
-rw-r--r--lib/bundler/index.rb9
-rw-r--r--lib/bundler/installer.rb17
-rw-r--r--lib/bundler/installer/standalone.rb2
-rw-r--r--lib/bundler/lockfile_parser.rb22
-rw-r--r--lib/bundler/man/bundle-add.12
-rw-r--r--lib/bundler/man/bundle-binstubs.12
-rw-r--r--lib/bundler/man/bundle-cache.12
-rw-r--r--lib/bundler/man/bundle-check.12
-rw-r--r--lib/bundler/man/bundle-clean.12
-rw-r--r--lib/bundler/man/bundle-config.111
-rw-r--r--lib/bundler/man/bundle-config.1.ronn11
-rw-r--r--lib/bundler/man/bundle-doctor.12
-rw-r--r--lib/bundler/man/bundle-exec.12
-rw-r--r--lib/bundler/man/bundle-gem.12
-rw-r--r--lib/bundler/man/bundle-info.12
-rw-r--r--lib/bundler/man/bundle-init.12
-rw-r--r--lib/bundler/man/bundle-inject.12
-rw-r--r--lib/bundler/man/bundle-install.12
-rw-r--r--lib/bundler/man/bundle-list.12
-rw-r--r--lib/bundler/man/bundle-lock.12
-rw-r--r--lib/bundler/man/bundle-open.12
-rw-r--r--lib/bundler/man/bundle-outdated.12
-rw-r--r--lib/bundler/man/bundle-platform.12
-rw-r--r--lib/bundler/man/bundle-pristine.12
-rw-r--r--lib/bundler/man/bundle-remove.12
-rw-r--r--lib/bundler/man/bundle-show.12
-rw-r--r--lib/bundler/man/bundle-update.18
-rw-r--r--lib/bundler/man/bundle-update.1.ronn6
-rw-r--r--lib/bundler/man/bundle-viz.12
-rw-r--r--lib/bundler/man/bundle.12
-rw-r--r--lib/bundler/man/gemfile.52
-rw-r--r--lib/bundler/plugin.rb2
-rw-r--r--lib/bundler/plugin/api/source.rb14
-rw-r--r--lib/bundler/plugin/index.rb5
-rw-r--r--lib/bundler/plugin/installer.rb2
-rw-r--r--lib/bundler/resolver.rb78
-rw-r--r--lib/bundler/rubygems_ext.rb34
-rw-r--r--lib/bundler/rubygems_integration.rb7
-rw-r--r--lib/bundler/runtime.rb4
-rw-r--r--lib/bundler/settings.rb32
-rw-r--r--lib/bundler/source.rb11
-rw-r--r--lib/bundler/source/rubygems.rb44
-rw-r--r--lib/bundler/source/rubygems_aggregate.rb64
-rw-r--r--lib/bundler/source_list.rb96
-rw-r--r--lib/bundler/source_map.rb58
-rw-r--r--lib/bundler/spec_set.rb15
-rw-r--r--lib/bundler/templates/newgem/newgem.gemspec.tt4
-rw-r--r--lib/bundler/vendor/connection_pool/lib/connection_pool.rb113
-rw-r--r--lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb66
-rw-r--r--lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb40
-rw-r--r--lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb2
-rw-r--r--lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb57
-rw-r--r--lib/bundler/vendor/uri/lib/uri.rb1
-rw-r--r--lib/bundler/vendor/uri/lib/uri/common.rb97
-rw-r--r--lib/bundler/vendor/uri/lib/uri/ftp.rb1
-rw-r--r--lib/bundler/vendor/uri/lib/uri/generic.rb11
-rw-r--r--lib/bundler/vendor/uri/lib/uri/http.rb1
-rw-r--r--lib/bundler/vendor/uri/lib/uri/https.rb1
-rw-r--r--lib/bundler/vendor/uri/lib/uri/ldap.rb2
-rw-r--r--lib/bundler/vendor/uri/lib/uri/mailto.rb1
-rw-r--r--lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb15
-rw-r--r--lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb13
-rw-r--r--lib/bundler/vendor/uri/lib/uri/version.rb2
-rw-r--r--lib/bundler/vendor/uri/lib/uri/ws.rb84
-rw-r--r--lib/bundler/vendor/uri/lib/uri/wss.rb22
-rw-r--r--lib/bundler/worker.rb4
-rw-r--r--lib/did_you_mean/core_ext/name_error.rb11
-rw-r--r--lib/did_you_mean/spell_checkers/require_path_checker.rb1
-rw-r--r--lib/did_you_mean/version.rb2
-rw-r--r--lib/error_highlight.rb2
-rw-r--r--lib/error_highlight/base.rb461
-rw-r--r--lib/error_highlight/core_ext.rb50
-rw-r--r--lib/error_highlight/error_highlight.gemspec27
-rw-r--r--lib/error_highlight/formatter.rb25
-rw-r--r--lib/error_highlight/version.rb3
-rw-r--r--lib/forwardable.rb2
-rw-r--r--lib/irb.rb2
-rw-r--r--lib/irb/cmd/info.rb6
-rw-r--r--lib/irb/cmd/ls.rb24
-rw-r--r--lib/irb/cmd/measure.rb3
-rw-r--r--lib/irb/cmd/show_source.rb16
-rw-r--r--lib/irb/init.rb20
-rw-r--r--lib/irb/irb.gemspec2
-rw-r--r--lib/irb/ruby-lex.rb51
-rw-r--r--lib/irb/version.rb4
-rw-r--r--lib/matrix.rb2493
-rw-r--r--lib/matrix/eigenvalue_decomposition.rb882
-rw-r--r--lib/matrix/lup_decomposition.rb219
-rw-r--r--lib/matrix/matrix.gemspec26
-rw-r--r--lib/matrix/version.rb5
-rw-r--r--lib/mkmf.rb19
-rw-r--r--lib/mutex_m.rb12
-rw-r--r--lib/net/ftp.rb1544
-rw-r--r--lib/net/imap.rb1573
-rw-r--r--lib/net/imap/authenticators.rb44
-rw-r--r--lib/net/imap/authenticators/cram_md5.rb49
-rw-r--r--lib/net/imap/authenticators/digest_md5.rb111
-rw-r--r--lib/net/imap/authenticators/login.rb43
-rw-r--r--lib/net/imap/authenticators/plain.rb41
-rw-r--r--lib/net/imap/command_data.rb301
-rw-r--r--lib/net/imap/data_encoding.rb47
-rw-r--r--lib/net/imap/flags.rb76
-rw-r--r--lib/net/imap/net-imap.gemspec37
-rw-r--r--lib/net/imap/response_data.rb527
-rw-r--r--lib/net/imap/response_parser.rb1530
-rw-r--r--lib/net/net-ftp.gemspec36
-rw-r--r--lib/net/net-pop.gemspec34
-rw-r--r--lib/net/net-smtp.gemspec37
-rw-r--r--lib/net/pop.rb1022
-rw-r--r--lib/net/protocol.rb13
-rw-r--r--lib/net/smtp.rb1128
-rw-r--r--lib/open-uri.rb7
-rw-r--r--lib/ostruct.rb18
-rw-r--r--lib/prime.gemspec28
-rw-r--r--lib/prime.rb561
-rw-r--r--lib/racc/parser-text.rb2
-rw-r--r--lib/racc/parserfilegenerator.rb44
-rw-r--r--lib/racc/pre-setup13
-rw-r--r--lib/racc/racc.gemspec73
-rw-r--r--lib/racc/rdoc/grammar.en.rdoc219
-rw-r--r--lib/racc/statetransitiontable.rb10
-rw-r--r--lib/rdoc/markup/to_html.rb4
-rw-r--r--lib/rdoc/parser/ruby.rb18
-rw-r--r--lib/rdoc/rdoc.gemspec6
-rw-r--r--lib/rdoc/rdoc.rb7
-rw-r--r--lib/rdoc/ri/driver.rb15
-rw-r--r--lib/rdoc/rubygems_hook.rb4
-rw-r--r--lib/rdoc/version.rb2
-rw-r--r--lib/reline.rb31
-rw-r--r--lib/reline/ansi.rb81
-rw-r--r--lib/reline/config.rb17
-rw-r--r--lib/reline/general_io.rb11
-rw-r--r--lib/reline/line_editor.rb2
-rw-r--r--lib/reline/terminfo.rb93
-rw-r--r--lib/reline/version.rb2
-rw-r--r--lib/reline/windows.rb145
-rw-r--r--lib/ruby2_keywords.gemspec19
-rw-r--r--lib/rubygems.rb2
-rw-r--r--lib/rubygems/command.rb2
-rw-r--r--lib/rubygems/commands/build_command.rb2
-rw-r--r--lib/rubygems/commands/cert_command.rb80
-rw-r--r--lib/rubygems/config_file.rb8
-rw-r--r--lib/rubygems/core_ext/tcpsocket_init.rb4
-rw-r--r--lib/rubygems/deprecate.rb59
-rw-r--r--lib/rubygems/exceptions.rb2
-rw-r--r--lib/rubygems/ext/ext_conf_builder.rb8
-rw-r--r--lib/rubygems/gemcutter_utilities.rb16
-rw-r--r--lib/rubygems/installer.rb6
-rw-r--r--lib/rubygems/package/io_source.rb4
-rw-r--r--lib/rubygems/remote_fetcher.rb15
-rw-r--r--lib/rubygems/request.rb2
-rw-r--r--lib/rubygems/request/connection_pools.rb2
-rw-r--r--lib/rubygems/request/http_pool.rb2
-rw-r--r--lib/rubygems/request_set.rb2
-rw-r--r--lib/rubygems/specification.rb10
-rw-r--r--lib/rubygems/specification_policy.rb9
-rw-r--r--lib/rubygems/uninstaller.rb46
-rw-r--r--lib/rubygems/uri_parser.rb8
-rw-r--r--lib/rubygems/uri_parsing.rb23
-rw-r--r--lib/rubygems/user_interaction.rb2
-rw-r--r--lib/rubygems/util/licenses.rb109
-rw-r--r--lib/tracer.rb292
-rw-r--r--lib/tracer/tracer.gemspec25
-rw-r--r--lib/unicode_normalize/tables.rb36
-rw-r--r--lib/yaml/store.rb2
-rw-r--r--load.c29
-rw-r--r--math.c32
-rw-r--r--memory_view.c6
-rw-r--r--mini_builtin.c15
-rwxr-xr-xmisc/expand_tabs.rb59
-rwxr-xr-xmisc/lldb_cruby.py50
-rw-r--r--mjit.c79
-rw-r--r--mjit.h6
-rw-r--r--mjit_compile.c51
-rw-r--r--mjit_worker.c86
-rw-r--r--nilclass.rb25
-rw-r--r--node.c5
-rw-r--r--node.h5
-rw-r--r--numeric.c133
-rw-r--r--numeric.rb20
-rw-r--r--object.c331
-rw-r--r--parse.y208
-rw-r--r--proc.c29
-rw-r--r--process.c35
-rw-r--r--ractor.c15
-rw-r--r--ractor_core.h5
-rw-r--r--random.c2
-rw-r--r--range.c3
-rw-r--r--re.c8
-rw-r--r--ruby.c11
-rw-r--r--sample/drb/dchats.rb2
-rw-r--r--scheduler.c41
-rw-r--r--spec/bundler/bundler/bundler_spec.rb21
-rw-r--r--spec/bundler/bundler/cli_spec.rb34
-rw-r--r--spec/bundler/bundler/definition_spec.rb31
-rw-r--r--spec/bundler/bundler/fetcher/downloader_spec.rb11
-rw-r--r--spec/bundler/bundler/fetcher/index_spec.rb2
-rw-r--r--spec/bundler/bundler/plugin/index_spec.rb8
-rw-r--r--spec/bundler/bundler/plugin_spec.rb2
-rw-r--r--spec/bundler/bundler/settings_spec.rb23
-rw-r--r--spec/bundler/bundler/source_list_spec.rb42
-rw-r--r--spec/bundler/commands/cache_spec.rb44
-rw-r--r--spec/bundler/commands/check_spec.rb88
-rw-r--r--spec/bundler/commands/doctor_spec.rb24
-rw-r--r--spec/bundler/commands/exec_spec.rb10
-rw-r--r--spec/bundler/commands/install_spec.rb97
-rw-r--r--spec/bundler/commands/lock_spec.rb2
-rw-r--r--spec/bundler/commands/newgem_spec.rb12
-rw-r--r--spec/bundler/commands/outdated_spec.rb53
-rw-r--r--spec/bundler/commands/update_spec.rb191
-rw-r--r--spec/bundler/install/gemfile/eval_gemfile_spec.rb32
-rw-r--r--spec/bundler/install/gemfile/groups_spec.rb2
-rw-r--r--spec/bundler/install/gemfile/sources_spec.rb1020
-rw-r--r--spec/bundler/install/gemfile/specific_platform_spec.rb36
-rw-r--r--spec/bundler/install/gems/compact_index_spec.rb35
-rw-r--r--spec/bundler/install/gems/dependency_api_spec.rb36
-rw-r--r--spec/bundler/install/global_cache_spec.rb11
-rw-r--r--spec/bundler/lock/lockfile_spec.rb84
-rw-r--r--spec/bundler/other/major_deprecation_spec.rb96
-rw-r--r--spec/bundler/plugins/install_spec.rb13
-rw-r--r--spec/bundler/realworld/double_check_spec.rb4
-rw-r--r--spec/bundler/realworld/edgecases_spec.rb154
-rw-r--r--spec/bundler/realworld/slow_perf_spec.rb10
-rw-r--r--spec/bundler/runtime/inline_spec.rb10
-rw-r--r--spec/bundler/runtime/load_spec.rb2
-rw-r--r--spec/bundler/runtime/platform_spec.rb2
-rw-r--r--spec/bundler/runtime/require_spec.rb2
-rw-r--r--spec/bundler/runtime/setup_spec.rb56
-rw-r--r--spec/bundler/spec_helper.rb2
-rw-r--r--spec/bundler/support/api_request_limit_hax.rb16
-rw-r--r--spec/bundler/support/artifice/compact_index_rate_limited.rb2
-rw-r--r--spec/bundler/support/artifice/endpoint.rb6
-rw-r--r--spec/bundler/support/artifice/vcr.rb13
-rw-r--r--spec/bundler/support/hax.rb29
-rw-r--r--spec/bundler/support/helpers.rb18
-rw-r--r--spec/bundler/support/indexes.rb3
-rw-r--r--spec/bundler/support/matchers.rb10
-rw-r--r--spec/bundler/support/path.rb11
-rw-r--r--spec/mspec/.rspec1
-rw-r--r--spec/mspec/lib/mspec/helpers/ruby_exe.rb23
-rw-r--r--spec/mspec/lib/mspec/matchers/match_yaml.rb6
-rw-r--r--spec/mspec/spec/helpers/ruby_exe_spec.rb56
-rw-r--r--spec/ruby/README.md2
-rw-r--r--spec/ruby/command_line/dash_encoding_spec.rb8
-rw-r--r--spec/ruby/command_line/dash_r_spec.rb2
-rw-r--r--spec/ruby/command_line/dash_upper_e_spec.rb3
-rw-r--r--spec/ruby/command_line/dash_upper_s_spec.rb2
-rw-r--r--spec/ruby/command_line/dash_upper_u_spec.rb6
-rw-r--r--spec/ruby/command_line/dash_upper_w_spec.rb2
-rw-r--r--spec/ruby/command_line/dash_x_spec.rb2
-rw-r--r--spec/ruby/command_line/error_message_spec.rb4
-rw-r--r--spec/ruby/command_line/rubyopt_spec.rb40
-rw-r--r--spec/ruby/command_line/syntax_error_spec.rb4
-rw-r--r--spec/ruby/core/array/element_set_spec.rb8
-rw-r--r--spec/ruby/core/encoding/replicate_spec.rb21
-rw-r--r--spec/ruby/core/enumerator/lazy/filter_map_spec.rb16
-rw-r--r--spec/ruby/core/exception/no_method_error_spec.rb4
-rw-r--r--spec/ruby/core/exception/signal_exception_spec.rb6
-rw-r--r--spec/ruby/core/exception/system_exit_spec.rb4
-rw-r--r--spec/ruby/core/exception/top_level_spec.rb6
-rw-r--r--spec/ruby/core/fiber/raise_spec.rb20
-rw-r--r--spec/ruby/core/file/atime_spec.rb20
-rw-r--r--spec/ruby/core/file/basename_spec.rb15
-rw-r--r--spec/ruby/core/hash/rehash_spec.rb18
-rw-r--r--spec/ruby/core/integer/try_convert_spec.rb40
-rw-r--r--spec/ruby/core/io/binmode_spec.rb4
-rw-r--r--spec/ruby/core/io/close_on_exec_spec.rb4
-rw-r--r--spec/ruby/core/io/dup_spec.rb19
-rw-r--r--spec/ruby/core/io/external_encoding_spec.rb5
-rw-r--r--spec/ruby/core/io/internal_encoding_spec.rb5
-rw-r--r--spec/ruby/core/io/lineno_spec.rb36
-rw-r--r--spec/ruby/core/io/set_encoding_by_bom_spec.rb14
-rw-r--r--spec/ruby/core/io/sysread_spec.rb5
-rw-r--r--spec/ruby/core/io/sysseek_spec.rb5
-rw-r--r--spec/ruby/core/kernel/at_exit_spec.rb11
-rw-r--r--spec/ruby/core/kernel/eval_spec.rb65
-rw-r--r--spec/ruby/core/kernel/format_spec.rb1
-rw-r--r--spec/ruby/core/kernel/inspect_spec.rb8
-rw-r--r--spec/ruby/core/kernel/shared/sprintf.rb17
-rw-r--r--spec/ruby/core/module/define_method_spec.rb46
-rw-r--r--spec/ruby/core/module/include_spec.rb142
-rw-r--r--spec/ruby/core/module/prepend_spec.rb186
-rw-r--r--spec/ruby/core/module/remove_method_spec.rb22
-rw-r--r--spec/ruby/core/objectspace/_id2ref_spec.rb41
-rw-r--r--spec/ruby/core/objectspace/define_finalizer_spec.rb2
-rw-r--r--spec/ruby/core/process/status/equal_value_spec.rb4
-rw-r--r--spec/ruby/core/process/status/exited_spec.rb7
-rw-r--r--spec/ruby/core/process/status/exitstatus_spec.rb4
-rw-r--r--spec/ruby/core/process/status/signaled_spec.rb6
-rw-r--r--spec/ruby/core/process/status/success_spec.rb14
-rw-r--r--spec/ruby/core/process/status/termsig_spec.rb4
-rw-r--r--spec/ruby/core/process/status/to_i_spec.rb4
-rw-r--r--spec/ruby/core/range/step_spec.rb13
-rw-r--r--spec/ruby/core/signal/trap_spec.rb2
-rw-r--r--spec/ruby/core/string/inspect_spec.rb6
-rw-r--r--spec/ruby/core/string/rpartition_spec.rb13
-rw-r--r--spec/ruby/core/string/split_spec.rb10
-rw-r--r--spec/ruby/core/struct/dig_spec.rb10
-rw-r--r--spec/ruby/core/warning/element_set_spec.rb2
-rw-r--r--spec/ruby/language/fixtures/return.rb8
-rw-r--r--spec/ruby/language/hash_spec.rb15
-rw-r--r--spec/ruby/language/pattern_matching_spec.rb30
-rw-r--r--spec/ruby/language/regexp/interpolation_spec.rb2
-rw-r--r--spec/ruby/language/source_encoding_spec.rb4
-rw-r--r--spec/ruby/library/datetime/strftime_spec.rb1
-rw-r--r--spec/ruby/library/matrix/I_spec.rb9
-rw-r--r--spec/ruby/library/matrix/antisymmetric_spec.rb57
-rw-r--r--spec/ruby/library/matrix/build_spec.rb117
-rw-r--r--spec/ruby/library/matrix/clone_spec.rb37
-rw-r--r--spec/ruby/library/matrix/coerce_spec.rb11
-rw-r--r--spec/ruby/library/matrix/collect_spec.rb9
-rw-r--r--spec/ruby/library/matrix/column_size_spec.rb19
-rw-r--r--spec/ruby/library/matrix/column_spec.rb53
-rw-r--r--spec/ruby/library/matrix/column_vector_spec.rb37
-rw-r--r--spec/ruby/library/matrix/column_vectors_spec.rb37
-rw-r--r--spec/ruby/library/matrix/columns_spec.rb67
-rw-r--r--spec/ruby/library/matrix/conj_spec.rb9
-rw-r--r--spec/ruby/library/matrix/conjugate_spec.rb9
-rw-r--r--spec/ruby/library/matrix/constructor_spec.rb103
-rw-r--r--spec/ruby/library/matrix/det_spec.rb11
-rw-r--r--spec/ruby/library/matrix/determinant_spec.rb11
-rw-r--r--spec/ruby/library/matrix/diagonal_spec.rb105
-rw-r--r--spec/ruby/library/matrix/divide_spec.rb83
-rw-r--r--spec/ruby/library/matrix/each_spec.rb119
-rw-r--r--spec/ruby/library/matrix/each_with_index_spec.rb133
-rw-r--r--spec/ruby/library/matrix/eigenvalue_decomposition/eigenvalue_matrix_spec.rb13
-rw-r--r--spec/ruby/library/matrix/eigenvalue_decomposition/eigenvalues_spec.rb35
-rw-r--r--spec/ruby/library/matrix/eigenvalue_decomposition/eigenvector_matrix_spec.rb33
-rw-r--r--spec/ruby/library/matrix/eigenvalue_decomposition/eigenvectors_spec.rb37
-rw-r--r--spec/ruby/library/matrix/eigenvalue_decomposition/initialize_spec.rb39
-rw-r--r--spec/ruby/library/matrix/eigenvalue_decomposition/to_a_spec.rb27
-rw-r--r--spec/ruby/library/matrix/element_reference_spec.rb31
-rw-r--r--spec/ruby/library/matrix/empty_spec.rb107
-rw-r--r--spec/ruby/library/matrix/eql_spec.rb15
-rw-r--r--spec/ruby/library/matrix/equal_value_spec.rb15
-rw-r--r--spec/ruby/library/matrix/exponent_spec.rb93
-rw-r--r--spec/ruby/library/matrix/find_index_spec.rb221
-rw-r--r--spec/ruby/library/matrix/hash_spec.rb21
-rw-r--r--spec/ruby/library/matrix/hermitian_spec.rb53
-rw-r--r--spec/ruby/library/matrix/identity_spec.rb9
-rw-r--r--spec/ruby/library/matrix/imag_spec.rb9
-rw-r--r--spec/ruby/library/matrix/imaginary_spec.rb9
-rw-r--r--spec/ruby/library/matrix/inspect_spec.rb39
-rw-r--r--spec/ruby/library/matrix/inv_spec.rb11
-rw-r--r--spec/ruby/library/matrix/inverse_from_spec.rb9
-rw-r--r--spec/ruby/library/matrix/inverse_spec.rb11
-rw-r--r--spec/ruby/library/matrix/lower_triangular_spec.rb39
-rw-r--r--spec/ruby/library/matrix/lup_decomposition/determinant_spec.rb33
-rw-r--r--spec/ruby/library/matrix/lup_decomposition/initialize_spec.rb21
-rw-r--r--spec/ruby/library/matrix/lup_decomposition/l_spec.rb27
-rw-r--r--spec/ruby/library/matrix/lup_decomposition/p_spec.rb27
-rw-r--r--spec/ruby/library/matrix/lup_decomposition/solve_spec.rb85
-rw-r--r--spec/ruby/library/matrix/lup_decomposition/to_a_spec.rb53
-rw-r--r--spec/ruby/library/matrix/lup_decomposition/u_spec.rb27
-rw-r--r--spec/ruby/library/matrix/map_spec.rb9
-rw-r--r--spec/ruby/library/matrix/minor_spec.rb135
-rw-r--r--spec/ruby/library/matrix/minus_spec.rb65
-rw-r--r--spec/ruby/library/matrix/multiply_spec.rb105
-rw-r--r--spec/ruby/library/matrix/new_spec.rb11
-rw-r--r--spec/ruby/library/matrix/normal_spec.rb41
-rw-r--r--spec/ruby/library/matrix/orthogonal_spec.rb41
-rw-r--r--spec/ruby/library/matrix/permutation_spec.rb51
-rw-r--r--spec/ruby/library/matrix/plus_spec.rb65
-rw-r--r--spec/ruby/library/matrix/rank_spec.rb29
-rw-r--r--spec/ruby/library/matrix/real_spec.rb63
-rw-r--r--spec/ruby/library/matrix/rect_spec.rb9
-rw-r--r--spec/ruby/library/matrix/rectangular_spec.rb9
-rw-r--r--spec/ruby/library/matrix/regular_spec.rb45
-rw-r--r--spec/ruby/library/matrix/round_spec.rb31
-rw-r--r--spec/ruby/library/matrix/row_size_spec.rb19
-rw-r--r--spec/ruby/library/matrix/row_spec.rb55
-rw-r--r--spec/ruby/library/matrix/row_vector_spec.rb33
-rw-r--r--spec/ruby/library/matrix/row_vectors_spec.rb37
-rw-r--r--spec/ruby/library/matrix/rows_spec.rb65
-rw-r--r--spec/ruby/library/matrix/scalar/Fail_spec.rb9
-rw-r--r--spec/ruby/library/matrix/scalar/Raise_spec.rb9
-rw-r--r--spec/ruby/library/matrix/scalar/divide_spec.rb9
-rw-r--r--spec/ruby/library/matrix/scalar/exponent_spec.rb9
-rw-r--r--spec/ruby/library/matrix/scalar/included_spec.rb9
-rw-r--r--spec/ruby/library/matrix/scalar/initialize_spec.rb9
-rw-r--r--spec/ruby/library/matrix/scalar/minus_spec.rb9
-rw-r--r--spec/ruby/library/matrix/scalar/multiply_spec.rb9
-rw-r--r--spec/ruby/library/matrix/scalar/plus_spec.rb9
-rw-r--r--spec/ruby/library/matrix/scalar_spec.rb93
-rw-r--r--spec/ruby/library/matrix/singular_spec.rb47
-rw-r--r--spec/ruby/library/matrix/square_spec.rb41
-rw-r--r--spec/ruby/library/matrix/symmetric_spec.rb45
-rw-r--r--spec/ruby/library/matrix/t_spec.rb9
-rw-r--r--spec/ruby/library/matrix/to_a_spec.rb17
-rw-r--r--spec/ruby/library/matrix/to_s_spec.rb9
-rw-r--r--spec/ruby/library/matrix/tr_spec.rb11
-rw-r--r--spec/ruby/library/matrix/trace_spec.rb11
-rw-r--r--spec/ruby/library/matrix/transpose_spec.rb9
-rw-r--r--spec/ruby/library/matrix/unit_spec.rb9
-rw-r--r--spec/ruby/library/matrix/unitary_spec.rb51
-rw-r--r--spec/ruby/library/matrix/upper_triangular_spec.rb39
-rw-r--r--spec/ruby/library/matrix/vector/cross_product_spec.rb21
-rw-r--r--spec/ruby/library/matrix/vector/each2_spec.rb81
-rw-r--r--spec/ruby/library/matrix/vector/eql_spec.rb23
-rw-r--r--spec/ruby/library/matrix/vector/inner_product_spec.rb33
-rw-r--r--spec/ruby/library/matrix/vector/normalize_spec.rb29
-rw-r--r--spec/ruby/library/matrix/zero_spec.rb75
-rw-r--r--spec/ruby/library/net/FTPError_spec.rb11
-rw-r--r--spec/ruby/library/net/FTPPermError_spec.rb17
-rw-r--r--spec/ruby/library/net/FTPProtoError_spec.rb17
-rw-r--r--spec/ruby/library/net/FTPReplyError_spec.rb17
-rw-r--r--spec/ruby/library/net/FTPTempError_spec.rb17
-rw-r--r--spec/ruby/library/net/ftp/abort_spec.rb97
-rw-r--r--spec/ruby/library/net/ftp/acct_spec.rb111
-rw-r--r--spec/ruby/library/net/ftp/binary_spec.rb33
-rw-r--r--spec/ruby/library/net/ftp/chdir_spec.rb145
-rw-r--r--spec/ruby/library/net/ftp/close_spec.rb47
-rw-r--r--spec/ruby/library/net/ftp/closed_spec.rb31
-rw-r--r--spec/ruby/library/net/ftp/connect_spec.rb93
-rw-r--r--spec/ruby/library/net/ftp/debug_mode_spec.rb33
-rw-r--r--spec/ruby/library/net/ftp/default_passive_spec.rb11
-rw-r--r--spec/ruby/library/net/ftp/delete_spec.rb113
-rw-r--r--spec/ruby/library/net/ftp/dir_spec.rb13
-rw-r--r--spec/ruby/library/net/ftp/get_spec.rb31
-rw-r--r--spec/ruby/library/net/ftp/getbinaryfile_spec.rb13
-rw-r--r--spec/ruby/library/net/ftp/getdir_spec.rb11
-rw-r--r--spec/ruby/library/net/ftp/gettextfile_spec.rb13
-rw-r--r--spec/ruby/library/net/ftp/help_spec.rb103
-rw-r--r--spec/ruby/library/net/ftp/initialize_spec.rb557
-rw-r--r--spec/ruby/library/net/ftp/last_response_code_spec.rb13
-rw-r--r--spec/ruby/library/net/ftp/last_response_spec.rb39
-rw-r--r--spec/ruby/library/net/ftp/lastresp_spec.rb13
-rw-r--r--spec/ruby/library/net/ftp/list_spec.rb13
-rw-r--r--spec/ruby/library/net/ftp/login_spec.rb379
-rw-r--r--spec/ruby/library/net/ftp/ls_spec.rb13
-rw-r--r--spec/ruby/library/net/ftp/mdtm_spec.rb59
-rw-r--r--spec/ruby/library/net/ftp/mkdir_spec.rb97
-rw-r--r--spec/ruby/library/net/ftp/mtime_spec.rb73
-rw-r--r--spec/ruby/library/net/ftp/nlst_spec.rb141
-rw-r--r--spec/ruby/library/net/ftp/noop_spec.rb59
-rw-r--r--spec/ruby/library/net/ftp/open_spec.rb73
-rw-r--r--spec/ruby/library/net/ftp/passive_spec.rb39
-rw-r--r--spec/ruby/library/net/ftp/put_spec.rb31
-rw-r--r--spec/ruby/library/net/ftp/putbinaryfile_spec.rb13
-rw-r--r--spec/ruby/library/net/ftp/puttextfile_spec.rb13
-rw-r--r--spec/ruby/library/net/ftp/pwd_spec.rb101
-rw-r--r--spec/ruby/library/net/ftp/quit_spec.rb51
-rw-r--r--spec/ruby/library/net/ftp/rename_spec.rb159
-rw-r--r--spec/ruby/library/net/ftp/resume_spec.rb33
-rw-r--r--spec/ruby/library/net/ftp/retrbinary_spec.rb47
-rw-r--r--spec/ruby/library/net/ftp/retrlines_spec.rb55
-rw-r--r--spec/ruby/library/net/ftp/return_code_spec.rb35
-rw-r--r--spec/ruby/library/net/ftp/rmdir_spec.rb111
-rw-r--r--spec/ruby/library/net/ftp/sendcmd_spec.rb103
-rw-r--r--spec/ruby/library/net/ftp/set_socket_spec.rb13
-rw-r--r--spec/ruby/library/net/ftp/site_spec.rb101
-rw-r--r--spec/ruby/library/net/ftp/size_spec.rb91
-rw-r--r--spec/ruby/library/net/ftp/status_spec.rb105
-rw-r--r--spec/ruby/library/net/ftp/storbinary_spec.rb73
-rw-r--r--spec/ruby/library/net/ftp/storlines_spec.rb65
-rw-r--r--spec/ruby/library/net/ftp/system_spec.rb91
-rw-r--r--spec/ruby/library/net/ftp/voidcmd_spec.rb103
-rw-r--r--spec/ruby/library/net/ftp/welcome_spec.rb39
-rw-r--r--spec/ruby/library/prime/each_spec.rb247
-rw-r--r--spec/ruby/library/prime/instance_spec.rb31
-rw-r--r--spec/ruby/library/prime/int_from_prime_division_spec.rb19
-rw-r--r--spec/ruby/library/prime/integer/each_prime_spec.rb19
-rw-r--r--spec/ruby/library/prime/integer/from_prime_division_spec.rb19
-rw-r--r--spec/ruby/library/prime/integer/prime_division_spec.rb31
-rw-r--r--spec/ruby/library/prime/integer/prime_spec.rb27
-rw-r--r--spec/ruby/library/prime/next_spec.rb11
-rw-r--r--spec/ruby/library/prime/prime_division_spec.rb37
-rw-r--r--spec/ruby/library/prime/prime_spec.rb27
-rw-r--r--spec/ruby/library/prime/succ_spec.rb11
-rw-r--r--spec/ruby/library/rbconfig/rbconfig_spec.rb8
-rw-r--r--spec/ruby/library/rbconfig/unicode_emoji_version_spec.rb10
-rw-r--r--spec/ruby/library/rbconfig/unicode_version_spec.rb10
-rw-r--r--spec/ruby/library/rubygems/gem/load_path_insert_index_spec.rb10
-rw-r--r--spec/ruby/library/yaml/fixtures/common.rb6
-rw-r--r--spec/ruby/library/yaml/load_spec.rb135
-rw-r--r--spec/ruby/library/yaml/shared/load.rb136
-rw-r--r--spec/ruby/library/yaml/unsafe_load_spec.rb9
-rw-r--r--spec/ruby/optional/capi/array_spec.rb8
-rw-r--r--spec/ruby/optional/capi/data_spec.rb7
-rw-r--r--spec/ruby/optional/capi/ext/array_spec.c22
-rw-r--r--spec/ruby/optional/capi/ext/data_spec.c6
-rw-r--r--spec/ruby/optional/capi/ext/object_spec.c6
-rw-r--r--spec/ruby/optional/capi/ext/typed_data_spec.c6
-rw-r--r--spec/ruby/optional/capi/object_spec.rb33
-rw-r--r--spec/ruby/optional/capi/typed_data_spec.rb11
-rw-r--r--spec/ruby/shared/process/exit.rb10
-rw-r--r--spec/ruby/shared/time/strftime_for_time.rb8
-rw-r--r--sprintf.c12
-rw-r--r--st.c8
-rw-r--r--string.c53
-rw-r--r--struct.c23
-rw-r--r--template/Makefile.in4
-rw-r--r--template/encdb.h.tmpl17
-rw-r--r--template/prelude.c.tmpl27
-rw-r--r--test/-ext-/string/test_enc_str_buf_cat.rb9
-rw-r--r--test/-ext-/wait/test_wait.rb32
-rw-r--r--test/-ext-/wait_for_single_fd/test_wait_for_single_fd.rb49
-rw-r--r--test/coverage/test_coverage.rb14
-rw-r--r--test/date/test_date.rb12
-rw-r--r--test/dbm/test_dbm.rb634
-rw-r--r--test/did_you_mean/spell_checking/test_uncorrectable_name_check.rb2
-rw-r--r--test/error_highlight/test_error_highlight.rb1037
-rw-r--r--test/fiber/scheduler.rb24
-rw-r--r--test/fiber/test_address_resolve.rb278
-rw-r--r--test/fiber/test_mutex.rb18
-rw-r--r--test/fiber/test_scheduler.rb18
-rw-r--r--test/fiber/test_sleep.rb25
-rw-r--r--test/fiber/test_thread.rb24
-rw-r--r--test/fiddle/helper.rb4
-rw-r--r--test/fiddle/test_c_struct_builder.rb36
-rw-r--r--test/fiddle/test_closure.rb25
-rw-r--r--test/fiddle/test_cparser.rb56
-rw-r--r--test/fiddle/test_function.rb28
-rw-r--r--test/fiddle/test_handle.rb24
-rw-r--r--test/fiddle/test_memory_view.rb28
-rw-r--r--test/fiddle/test_pinned.rb1
-rw-r--r--test/gdbm/test_gdbm.rb734
-rw-r--r--test/irb/test_cmd.rb123
-rw-r--r--test/irb/test_init.rb19
-rw-r--r--test/irb/test_raise_no_backtrace_exception.rb6
-rw-r--r--test/matrix/test_matrix.rb888
-rw-r--r--test/matrix/test_vector.rb335
-rw-r--r--test/mkmf/test_have_var.rb17
-rw-r--r--test/mkmf/test_libs.rb9
-rw-r--r--test/monitor/test_monitor.rb22
-rw-r--r--test/net/ftp/test_buffered_socket.rb48
-rw-r--r--test/net/ftp/test_ftp.rb2636
-rw-r--r--test/net/ftp/test_mlsx_entry.rb98
-rw-r--r--test/net/imap/test_imap.rb856
-rw-r--r--test/net/imap/test_imap_authenticators.rb23
-rw-r--r--test/net/imap/test_imap_data_encoding.rb46
-rw-r--r--test/net/imap/test_imap_response_parser.rb389
-rw-r--r--test/net/pop/test_pop.rb166
-rw-r--r--test/net/smtp/test_response.rb100
-rw-r--r--test/net/smtp/test_smtp.rb302
-rw-r--r--test/net/smtp/test_ssl_socket.rb99
-rw-r--r--test/net/smtp/test_sslcontext.rb129
-rw-r--r--test/net/smtp/test_starttls.rb122
-rw-r--r--test/objspace/test_objspace.rb18
-rw-r--r--test/open-uri/test_open-uri.rb250
-rw-r--r--test/openssl/fixtures/pkey/certificate.derbin0 -> 1325 bytes
-rw-r--r--test/openssl/fixtures/pkey/empty.der0
-rw-r--r--test/openssl/fixtures/pkey/empty.pem0
-rw-r--r--test/openssl/fixtures/pkey/fullchain.pem56
-rw-r--r--test/openssl/fixtures/pkey/garbage.txt1
-rw-r--r--test/openssl/test_asn1.rb7
-rw-r--r--test/openssl/test_bn.rb85
-rw-r--r--test/openssl/test_ocsp.rb9
-rw-r--r--test/openssl/test_pkey.rb5
-rw-r--r--test/openssl/test_pkey_dh.rb31
-rw-r--r--test/openssl/test_pkey_dsa.rb48
-rw-r--r--test/openssl/test_pkey_ec.rb21
-rw-r--r--test/openssl/test_pkey_rsa.rb179
-rw-r--r--test/openssl/test_ssl.rb128
-rw-r--r--test/openssl/test_x509cert.rb44
-rw-r--r--test/openssl/ut_eof.rb4
-rw-r--r--test/ostruct/test_ostruct.rb21
-rw-r--r--test/psych/helper.rb30
-rw-r--r--test/psych/test_alias_and_anchor.rb12
-rw-r--r--test/psych/test_array.rb6
-rw-r--r--test/psych/test_coder.rb135
-rw-r--r--test/psych/test_date_time.rb4
-rw-r--r--test/psych/test_deprecated.rb4
-rw-r--r--test/psych/test_exception.rb24
-rw-r--r--test/psych/test_hash.rb16
-rw-r--r--test/psych/test_marshalable.rb6
-rw-r--r--test/psych/test_merge_keys.rb22
-rw-r--r--test/psych/test_numeric.rb1
-rw-r--r--test/psych/test_object.rb4
-rw-r--r--test/psych/test_object_references.rb12
-rw-r--r--test/psych/test_omap.rb4
-rw-r--r--test/psych/test_psych.rb90
-rw-r--r--test/psych/test_ractor.rb2
-rw-r--r--test/psych/test_safe_load.rb44
-rw-r--r--test/psych/test_serialize_subclasses.rb4
-rw-r--r--test/psych/test_set.rb6
-rw-r--r--test/psych/test_string.rb14
-rw-r--r--test/psych/test_struct.rb6
-rw-r--r--test/psych/test_yaml.rb12
-rw-r--r--test/psych/test_yaml_special_cases.rb2
-rw-r--r--test/psych/test_yamlstore.rb45
-rw-r--r--test/psych/visitors/test_to_ruby.rb4
-rw-r--r--test/psych/visitors/test_yaml_tree.rb8
-rw-r--r--test/racc/regress/cast1223
-rw-r--r--test/racc/regress/huia619
-rw-r--r--test/racc/regress/nasl1122
-rw-r--r--test/racc/regress/opal7426
-rw-r--r--test/racc/regress/riml1922
-rw-r--r--test/racc/regress/ruby187193
-rw-r--r--test/racc/regress/ruby227654
-rw-r--r--test/rdoc/test_rdoc_markup_to_html.rb24
-rw-r--r--test/rdoc/test_rdoc_options.rb6
-rw-r--r--test/rdoc/test_rdoc_parser_ruby.rb48
-rw-r--r--test/rdoc/test_rdoc_rdoc.rb13
-rw-r--r--test/rdoc/test_rdoc_ri_driver.rb24
-rw-r--r--test/rdoc/test_rdoc_rubygems_hook.rb77
-rw-r--r--test/rdoc/test_rdoc_task.rb4
-rw-r--r--test/readline/helper.rb5
-rw-r--r--test/readline/test_readline.rb7
-rw-r--r--test/readline/test_readline_history.rb7
-rw-r--r--test/reline/helper.rb14
-rw-r--r--test/reline/test_config.rb25
-rw-r--r--test/reline/test_history.rb11
-rw-r--r--test/reline/test_key_actor_emacs.rb149
-rw-r--r--test/reline/test_key_actor_vi.rb6
-rw-r--r--test/reline/test_macro.rb4
-rw-r--r--test/reline/test_reline.rb8
-rw-r--r--test/reline/test_string_processing.rb6
-rw-r--r--test/reline/test_unicode.rb4
-rw-r--r--test/reline/test_within_pipe.rb7
-rw-r--r--test/reline/yamatanooroti/test_rendering.rb66
-rw-r--r--test/resolv/test_dns.rb31
-rw-r--r--test/ripper/test_parser_events.rb30
-rw-r--r--test/ruby/enc/test_emoji_breaks.rb39
-rw-r--r--test/ruby/marshaltestlib.rb2
-rw-r--r--test/ruby/test_array.rb31
-rw-r--r--test/ruby/test_ast.rb50
-rw-r--r--test/ruby/test_bignum.rb2
-rw-r--r--test/ruby/test_case.rb12
-rw-r--r--test/ruby/test_dir.rb13
-rw-r--r--test/ruby/test_env.rb40
-rw-r--r--test/ruby/test_exception.rb13
-rw-r--r--test/ruby/test_fiber.rb5
-rw-r--r--test/ruby/test_float.rb11
-rw-r--r--test/ruby/test_gc.rb4
-rw-r--r--test/ruby/test_gc_compact.rb41
-rw-r--r--test/ruby/test_hash.rb181
-rw-r--r--test/ruby/test_insns_leaf.rb46
-rw-r--r--test/ruby/test_integer.rb17
-rw-r--r--test/ruby/test_io.rb50
-rw-r--r--test/ruby/test_iseq.rb13
-rw-r--r--test/ruby/test_jit.rb2
-rw-r--r--test/ruby/test_lazy_enumerator.rb4
-rw-r--r--test/ruby/test_literal.rb22
-rw-r--r--test/ruby/test_marshal.rb2
-rw-r--r--test/ruby/test_math.rb53
-rw-r--r--test/ruby/test_module.rb57
-rw-r--r--test/ruby/test_name_error.rb2
-rw-r--r--test/ruby/test_nomethod_error.rb2
-rw-r--r--test/ruby/test_object.rb2
-rw-r--r--test/ruby/test_objectspace.rb7
-rw-r--r--test/ruby/test_parse.rb41
-rw-r--r--test/ruby/test_pattern_matching.rb26
-rw-r--r--test/ruby/test_proc.rb9
-rw-r--r--test/ruby/test_process.rb3
-rw-r--r--test/ruby/test_refinement.rb24
-rw-r--r--test/ruby/test_regexp.rb18
-rw-r--r--test/ruby/test_require_lib.rb3
-rw-r--r--test/ruby/test_settracefunc.rb23
-rw-r--r--test/ruby/test_struct.rb11
-rw-r--r--test/ruby/test_syntax.rb25
-rw-r--r--test/ruby/test_thread.rb39
-rw-r--r--test/ruby/test_thread_cv.rb52
-rw-r--r--test/ruby/test_thread_queue.rb80
-rw-r--r--test/ruby/test_time.rb10
-rw-r--r--test/ruby/test_transcode.rb22
-rw-r--r--test/rubygems/helper.rb (renamed from lib/rubygems/test_case.rb)65
-rw-r--r--test/rubygems/installer_test_case.rb (renamed from lib/rubygems/installer_test_case.rb)2
-rw-r--r--test/rubygems/package/tar_test_case.rb (renamed from lib/rubygems/package/tar_test_case.rb)2
-rw-r--r--test/rubygems/packages/ill-formatted-platform-1.0.0.10.gembin0 -> 10240 bytes
-rw-r--r--test/rubygems/test_bundled_ca.rb4
-rw-r--r--test/rubygems/test_config.rb2
-rw-r--r--test/rubygems/test_deprecate.rb2
-rw-r--r--test/rubygems/test_exit.rb11
-rw-r--r--test/rubygems/test_gem.rb8
-rw-r--r--test/rubygems/test_gem_available_set.rb2
-rw-r--r--test/rubygems/test_gem_bundler_version_finder.rb10
-rw-r--r--test/rubygems/test_gem_command.rb14
-rw-r--r--test/rubygems/test_gem_command_manager.rb2
-rw-r--r--test/rubygems/test_gem_commands_build_command.rb8
-rw-r--r--test/rubygems/test_gem_commands_cert_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_check_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_cleanup_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_contents_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_dependency_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_environment_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_fetch_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_generate_index_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_help_command.rb9
-rw-r--r--test/rubygems/test_gem_commands_info_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_install_command.rb6
-rw-r--r--test/rubygems/test_gem_commands_list_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_lock_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_mirror.rb2
-rw-r--r--test/rubygems/test_gem_commands_open_command.rb4
-rw-r--r--test/rubygems/test_gem_commands_outdated_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_owner_command.rb4
-rw-r--r--test/rubygems/test_gem_commands_pristine_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_push_command.rb7
-rw-r--r--test/rubygems/test_gem_commands_query_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_search_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_server_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_setup_command.rb10
-rw-r--r--test/rubygems/test_gem_commands_signin_command.rb21
-rw-r--r--test/rubygems/test_gem_commands_signout_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_sources_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_specification_command.rb8
-rw-r--r--test/rubygems/test_gem_commands_stale_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_uninstall_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_unpack_command.rb4
-rw-r--r--test/rubygems/test_gem_commands_update_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_which_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_yank_command.rb2
-rw-r--r--test/rubygems/test_gem_config_file.rb12
-rw-r--r--test/rubygems/test_gem_dependency.rb8
-rw-r--r--test/rubygems/test_gem_dependency_installer.rb2
-rw-r--r--test/rubygems/test_gem_dependency_list.rb2
-rw-r--r--test/rubygems/test_gem_dependency_resolution_error.rb2
-rw-r--r--test/rubygems/test_gem_doctor.rb2
-rw-r--r--test/rubygems/test_gem_ext_builder.rb8
-rw-r--r--test/rubygems/test_gem_ext_cmake_builder.rb8
-rw-r--r--test/rubygems/test_gem_ext_configure_builder.rb2
-rw-r--r--test/rubygems/test_gem_ext_ext_conf_builder.rb3
-rw-r--r--test/rubygems/test_gem_ext_rake_builder.rb4
-rw-r--r--test/rubygems/test_gem_gem_runner.rb2
-rw-r--r--test/rubygems/test_gem_gemcutter_utilities.rb30
-rw-r--r--test/rubygems/test_gem_impossible_dependencies_error.rb2
-rw-r--r--test/rubygems/test_gem_indexer.rb2
-rw-r--r--test/rubygems/test_gem_install_update_options.rb6
-rw-r--r--test/rubygems/test_gem_installer.rb47
-rw-r--r--test/rubygems/test_gem_local_remote_options.rb2
-rw-r--r--test/rubygems/test_gem_name_tuple.rb2
-rw-r--r--test/rubygems/test_gem_package.rb39
-rw-r--r--test/rubygems/test_gem_package_old.rb10
-rw-r--r--test/rubygems/test_gem_package_tar_header.rb2
-rw-r--r--test/rubygems/test_gem_package_tar_reader.rb2
-rw-r--r--test/rubygems/test_gem_package_tar_reader_entry.rb4
-rw-r--r--test/rubygems/test_gem_package_tar_writer.rb184
-rw-r--r--test/rubygems/test_gem_package_task.rb2
-rw-r--r--test/rubygems/test_gem_path_support.rb4
-rw-r--r--test/rubygems/test_gem_platform.rb2
-rw-r--r--test/rubygems/test_gem_rdoc.rb12
-rw-r--r--test/rubygems/test_gem_remote_fetcher.rb4
-rw-r--r--test/rubygems/test_gem_request.rb6
-rw-r--r--test/rubygems/test_gem_request_connection_pools.rb2
-rw-r--r--test/rubygems/test_gem_request_set.rb2
-rw-r--r--test/rubygems/test_gem_request_set_gem_dependency_api.rb2
-rw-r--r--test/rubygems/test_gem_request_set_lockfile.rb2
-rw-r--r--test/rubygems/test_gem_request_set_lockfile_parser.rb2
-rw-r--r--test/rubygems/test_gem_request_set_lockfile_tokenizer.rb2
-rw-r--r--test/rubygems/test_gem_requirement.rb2
-rw-r--r--test/rubygems/test_gem_resolver.rb2
-rw-r--r--test/rubygems/test_gem_resolver_activation_request.rb2
-rw-r--r--test/rubygems/test_gem_resolver_api_set.rb2
-rw-r--r--test/rubygems/test_gem_resolver_api_specification.rb2
-rw-r--r--test/rubygems/test_gem_resolver_best_set.rb2
-rw-r--r--test/rubygems/test_gem_resolver_composed_set.rb2
-rw-r--r--test/rubygems/test_gem_resolver_conflict.rb2
-rw-r--r--test/rubygems/test_gem_resolver_dependency_request.rb2
-rw-r--r--test/rubygems/test_gem_resolver_git_set.rb2
-rw-r--r--test/rubygems/test_gem_resolver_git_specification.rb6
-rw-r--r--test/rubygems/test_gem_resolver_index_set.rb2
-rw-r--r--test/rubygems/test_gem_resolver_index_specification.rb2
-rw-r--r--test/rubygems/test_gem_resolver_installed_specification.rb2
-rw-r--r--test/rubygems/test_gem_resolver_installer_set.rb2
-rw-r--r--test/rubygems/test_gem_resolver_local_specification.rb2
-rw-r--r--test/rubygems/test_gem_resolver_lock_set.rb2
-rw-r--r--test/rubygems/test_gem_resolver_lock_specification.rb2
-rw-r--r--test/rubygems/test_gem_resolver_requirement_list.rb2
-rw-r--r--test/rubygems/test_gem_resolver_specification.rb2
-rw-r--r--test/rubygems/test_gem_resolver_vendor_set.rb2
-rw-r--r--test/rubygems/test_gem_resolver_vendor_specification.rb2
-rw-r--r--test/rubygems/test_gem_security.rb2
-rw-r--r--test/rubygems/test_gem_security_policy.rb2
-rw-r--r--test/rubygems/test_gem_security_signer.rb4
-rw-r--r--test/rubygems/test_gem_security_trust_dir.rb2
-rw-r--r--test/rubygems/test_gem_server.rb2
-rw-r--r--test/rubygems/test_gem_silent_ui.rb2
-rw-r--r--test/rubygems/test_gem_source.rb2
-rw-r--r--test/rubygems/test_gem_source_fetch_problem.rb2
-rw-r--r--test/rubygems/test_gem_source_git.rb2
-rw-r--r--test/rubygems/test_gem_source_installed.rb2
-rw-r--r--test/rubygems/test_gem_source_list.rb2
-rw-r--r--test/rubygems/test_gem_source_local.rb2
-rw-r--r--test/rubygems/test_gem_source_lock.rb2
-rw-r--r--test/rubygems/test_gem_source_specific_file.rb2
-rw-r--r--test/rubygems/test_gem_source_subpath_problem.rb2
-rw-r--r--test/rubygems/test_gem_source_vendor.rb2
-rw-r--r--test/rubygems/test_gem_spec_fetcher.rb4
-rw-r--r--test/rubygems/test_gem_specification.rb50
-rw-r--r--test/rubygems/test_gem_stream_ui.rb2
-rw-r--r--test/rubygems/test_gem_stub_specification.rb6
-rw-r--r--test/rubygems/test_gem_text.rb2
-rw-r--r--test/rubygems/test_gem_uninstaller.rb15
-rw-r--r--test/rubygems/test_gem_unsatisfiable_dependency_error.rb2
-rw-r--r--test/rubygems/test_gem_uri_formatter.rb2
-rw-r--r--test/rubygems/test_gem_util.rb10
-rw-r--r--test/rubygems/test_gem_validator.rb2
-rw-r--r--test/rubygems/test_gem_version.rb2
-rw-r--r--test/rubygems/test_gem_version_option.rb2
-rw-r--r--test/rubygems/test_kernel.rb4
-rw-r--r--test/rubygems/test_project_sanity.rb4
-rw-r--r--test/rubygems/test_remote_fetch_error.rb2
-rw-r--r--test/rubygems/test_require.rb16
-rw-r--r--test/rubygems/utilities.rb (renamed from lib/rubygems/test_utilities.rb)2
-rw-r--r--test/socket/test_addrinfo.rb7
-rw-r--r--test/socket/test_socket.rb12
-rw-r--r--test/test_prime.rb298
-rw-r--r--test/test_pstore.rb4
-rw-r--r--test/test_tracer.rb234
-rw-r--r--test/yaml/test_store.rb4
-rw-r--r--thread.c284
-rw-r--r--thread_pthread.c43
-rw-r--r--thread_sync.c207
-rw-r--r--thread_win32.c13
-rw-r--r--time.c250
-rw-r--r--timev.rb208
-rw-r--r--tool/bundler/rubocop_gems.rb.lock1
-rw-r--r--tool/bundler/standard_gems.rb.lock1
-rw-r--r--tool/ci_functions.sh29
-rwxr-xr-xtool/enc-unicode.rb6
-rwxr-xr-xtool/extlibs.rb2
-rw-r--r--tool/lib/colorize.rb2
-rw-r--r--tool/lib/core_assertions.rb (renamed from tool/lib/test/unit/core_assertions.rb)12
-rw-r--r--tool/lib/leakchecker.rb2
-rw-r--r--tool/lib/minitest/autorun.rb14
-rw-r--r--tool/lib/minitest/benchmark.rb418
-rw-r--r--tool/lib/minitest/mock.rb196
-rw-r--r--tool/lib/minitest/unit.rb52
-rw-r--r--tool/lib/test/unit.rb12
-rw-r--r--tool/lib/test/unit/assertions.rb12
-rw-r--r--tool/m4/_colorize_result_prepare.m41
-rwxr-xr-xtool/make-snapshot6
-rw-r--r--tool/mjit_tabs.rb8
-rwxr-xr-xtool/rbinstall.rb59
-rw-r--r--tool/ruby_vm/views/_mjit_compile_send.erb4
-rw-r--r--tool/sync_default_gems.rb60
-rw-r--r--tool/test-bundled-gems.rb6
-rw-r--r--tool/test/minitest/metametameta.rb1
-rw-r--r--tool/test/minitest/test_minitest_benchmark.rb131
-rw-r--r--tool/test/minitest/test_minitest_mock.rb404
-rw-r--r--tool/test/webrick/test_httpresponse.rb8
-rwxr-xr-xtool/travis_wait.sh18
-rwxr-xr-x[-rw-r--r--]tool/update-bundled_gems.rb8
-rw-r--r--trace_point.rb2
-rw-r--r--transcode.c6
-rw-r--r--util.c15
-rw-r--r--variable.c191
-rw-r--r--version.h4
-rw-r--r--vm.c15
-rw-r--r--vm_backtrace.c133
-rw-r--r--vm_core.h53
-rw-r--r--vm_dump.c66
-rw-r--r--vm_eval.c32
-rw-r--r--vm_insnhelper.c67
-rw-r--r--vm_insnhelper.h7
-rw-r--r--vm_method.c22
-rw-r--r--vm_trace.c2
-rw-r--r--win32/Makefile.sub11
-rwxr-xr-xwin32/resource.rb2
-rw-r--r--win32/ruby.manifest8
-rw-r--r--win32/setup.mak10
-rw-r--r--win32/win32.c2
1072 files changed, 50741 insertions, 51609 deletions
diff --git a/.document b/.document
index 8b4938f..2c68af2 100644
--- a/.document
+++ b/.document
@@ -18,6 +18,7 @@ gc.rb
io.rb
kernel.rb
numeric.rb
+nilclass.rb
pack.rb
ractor.rb
timev.rb
diff --git a/.github/workflows/baseruby.yml b/.github/workflows/baseruby.yml
index 52099b6..11f71e0 100644
--- a/.github/workflows/baseruby.yml
+++ b/.github/workflows/baseruby.yml
@@ -26,7 +26,6 @@ jobs:
- run: sudo apt-get install build-essential autoconf bison
- run: ./autogen.sh
- run: ./configure --disable-install-doc
- - run: $make update-unicode
- run: $make common-srcs
- run: $make incs
- run: $make all
diff --git a/.github/workflows/check_dependencies.yml b/.github/workflows/check_dependencies.yml
index d207378..77227bb 100644
--- a/.github/workflows/check_dependencies.yml
+++ b/.github/workflows/check_dependencies.yml
@@ -12,12 +12,12 @@ jobs:
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 libgdbm-dev bison autoconf ruby
+ 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 gdbm gmp libffi openssl@1.1 zlib autoconf automake libtool readline
+ brew install gmp libffi openssl@1.1 zlib autoconf automake libtool readline
if: "contains(matrix.os, 'macos')"
- name: git config
run: |
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 22c5cc0..cffb12b 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -17,7 +17,7 @@ jobs:
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 libgdbm-dev bison autoconf ruby
+ 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
diff --git a/.github/workflows/compilers.yml b/.github/workflows/compilers.yml
index 3bd7bab..ea19c01 100644
--- a/.github/workflows/compilers.yml
+++ b/.github/workflows/compilers.yml
@@ -93,7 +93,7 @@ jobs:
- { 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=copy', value: '--with-coroutine=copy' }
+ - { 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' }
diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml
index 6f5d435..b69b0fb 100644
--- a/.github/workflows/macos.yml
+++ b/.github/workflows/macos.yml
@@ -5,7 +5,7 @@ jobs:
runs-on: macos-latest
strategy:
matrix:
- test_task: [ "check", "test-bundler-parallel", "test-bundled-gems" ]
+ test_task: [ "check", "test-bundler-parallel" ] #, "test-bundled-gems" ] matrix tests has unknown issues
fail-fast: false
env:
GITPULLOPTIONS: --no-tags origin ${{github.ref}}
@@ -22,7 +22,7 @@ jobs:
- name: Install libraries
run: |
brew upgrade
- brew install gdbm gmp libffi openssl@1.1 zlib autoconf automake libtool readline
+ brew install gmp libffi openssl@1.1 zlib autoconf automake libtool readline
working-directory: src
- name: Set ENV
run: |
diff --git a/.github/workflows/mingw.yml b/.github/workflows/mingw.yml
index f807a2e..6787f96 100644
--- a/.github/workflows/mingw.yml
+++ b/.github/workflows/mingw.yml
@@ -38,7 +38,7 @@ jobs:
uses: MSP-Greg/setup-ruby-pkgs@v1
with:
ruby-version: 2.6
- mingw: _upgrade_ gdbm gmp libffi libyaml openssl ragel readline
+ mingw: _upgrade_ gmp libffi libyaml openssl ragel readline
msys2: automake1.16 bison
- name: where check
run: |
diff --git a/.github/workflows/mjit.yml b/.github/workflows/mjit.yml
index c2a6ed2..99282cf 100644
--- a/.github/workflows/mjit.yml
+++ b/.github/workflows/mjit.yml
@@ -19,7 +19,7 @@ jobs:
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 libgdbm-dev bison autoconf ruby
+ 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
@@ -38,7 +38,7 @@ jobs:
- run: ./autogen.sh
working-directory: src
- name: Run configure
- run: ../src/configure -C --disable-install-doc
+ run: ../src/configure -C --disable-install-doc cppflags=-DVM_CHECK_MODE
- run: make $JOBS incs
- run: make $JOBS
- run: sudo make $JOBS -s install
diff --git a/.github/workflows/spec_guards.yml b/.github/workflows/spec_guards.yml
index 9414984..f921d66 100644
--- a/.github/workflows/spec_guards.yml
+++ b/.github/workflows/spec_guards.yml
@@ -11,8 +11,6 @@ jobs:
# 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.5
-# - ruby-2.6
- ruby-2.7
- ruby-3.0
diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml
index c7840f1..f7b07ca 100644
--- a/.github/workflows/ubuntu.yml
+++ b/.github/workflows/ubuntu.yml
@@ -4,23 +4,15 @@ jobs:
make:
strategy:
matrix:
- test_task: [ "check", "test-bundler-parallel", "test-bundled-gems", "test-all TESTS=--repeat-count=2" ]
+ test_task: ["check", "test-bundler-parallel", "test-bundled-gems"]
os:
- ubuntu-20.04
# - ubuntu-18.04
-# - ubuntu-16.04
- debug: ["", "-DRUBY_DEBUG"]
- exclude:
- - test_task: test-bundler-parallel
- os: ubuntu-16.04
- - test_task: test-bundled-gems
- os: ubuntu-16.04
+ configure: ["", "cppflags=-DRUBY_DEBUG"]
+ include:
- test_task: "test-all TESTS=--repeat-count=2"
- os: ubuntu-16.04
- - os: ubuntu-16.04
- debug: -DRUBY_DEBUG
- - test_task: "test-all TESTS=--repeat-count=2"
- debug: -DRUBY_DEBUG
+ os: ubuntu-20.04
+ configure: ""
fail-fast: false
env:
GITPULLOPTIONS: --no-tags origin ${{github.ref}}
@@ -33,7 +25,7 @@ jobs:
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 libgdbm-dev bison autoconf ruby
+ 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
@@ -52,7 +44,7 @@ jobs:
- run: ./autogen.sh
working-directory: src
- name: Run configure
- run: ../src/configure -C --disable-install-doc cppflags=${{ matrix.debug }}
+ run: ../src/configure -C --disable-install-doc ${{ matrix.configure }}
- run: make $JOBS incs
- run: make $JOBS
- run: make leaked-globals
@@ -73,7 +65,7 @@ jobs:
payload: |
{
"ci": "GitHub Actions",
- "env": "${{ matrix.os }} / ${{ matrix.test_task }}${{ matrix.debug }}",
+ "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]
diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml
index a8dd64e..fdcccff 100644
--- a/.github/workflows/windows.yml
+++ b/.github/workflows/windows.yml
@@ -52,7 +52,7 @@ jobs:
- name: Configure
run: |
call "%VCVARS%"
- ../src/win32/configure.bat --disable-install-doc --without-ext=+,dbm,gdbm --enable-bundled-libffi --with-opt-dir=C:/vcpkg/installed/x64-windows --with-openssl-dir="C:/Program Files/OpenSSL-Win64"
+ ../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"
- name: nmake
run: |
call "%VCVARS%"
@@ -70,8 +70,8 @@ jobs:
timeout-minutes: 60
run: |
call "%VCVARS%"
- # %TEMP% is inconsistent with %TMP% and test-all expects they are consistent.
- # https://github.com/actions/virtual-environments/issues/712#issuecomment-613004302
+ ::- %TEMP% is inconsistent with %TMP% and test-all expects they are consistent.
+ ::- https://github.com/actions/virtual-environments/issues/712#issuecomment-613004302
set TMP=%USERPROFILE%\AppData\Local\Temp
set TEMP=%USERPROFILE%\AppData\Local\Temp
nmake test-all
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..ff0ce69
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,226 @@
+# -*- YAML -*-
+# Copyright (C) 2011 Urabe, Shyouhei. All rights reserved.
+#
+# This file is a part of the programming language Ruby. Permission is hereby
+# granted, to either redistribute or modify this file, provided that the
+# conditions mentioned in the file COPYING are met. Consult the file for
+# details.
+
+# We only manage non-amd64 free pipelines.
+# https://docs.travis-ci.com/user/billing-overview/
+
+language: c
+
+os: linux
+
+dist: focal
+
+git:
+ quiet: true
+
+cache:
+ ccache: true
+ directories:
+ - $HOME/config_2nd
+ - $HOME/.downloaded-cache
+
+env:
+ global:
+ # Reset timestamps early
+ - _=$(touch NEWS && find . -type f -exec touch -r NEWS {} +)
+ - CONFIGURE_TTY=no
+ - CCACHE_COMPILERCHECK=none
+ - CCACHE_NOCOMPRESS=1
+ - CCACHE_MAXSIZE=512Mi
+ - NPROC="`nproc`"
+ # JOBS and SETARCH are overridden when necessary; see below.
+ - JOBS=-j$((1+${NPROC}))
+ - SETARCH=
+ - RUBY_PREFIX=/tmp/ruby-prefix
+ - GEMS_FOR_TEST='timezone tzinfo'
+ # The tests skipped in `make test-all`.
+ - TEST_ALL_SKIPPED_TESTS=
+ # Run the separated tests with allowing failures.
+ - RUN_SEPARATED_TESTS=true
+ # The tests executed separately by `make test-all`.
+ - TEST_ALL_SEPARATED_TESTS=
+ # 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:
+
+ - &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
+ ccache
+ gcc-10
+ g++-10
+ libffi-dev
+ libgdbm-dev
+ libncurses-dev
+ libncursesw5-dev
+ libreadline-dev
+ libssl-dev
+ libyaml-dev
+ openssl
+ zlib1g-dev
+
+ # --------
+
+ - &arm64-linux
+ name: arm64-linux
+ arch: arm64
+ <<: *gcc-10
+
+ - &ppc64le-linux
+ name: ppc64le-linux
+ arch: ppc64le
+ <<: *gcc-10
+
+ - &s390x-linux
+ name: s390x-linux
+ arch: s390x
+ <<: *gcc-10
+
+ - &arm32-linux
+ name: arm32-linux
+ arch: arm64
+ # https://packages.ubuntu.com/focal/crossbuild-essential-armhf
+ compiler: arm-linux-gnueabihf-gcc
+ env:
+ - SETARCH='setarch linux32 --verbose --32bit'
+ 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++-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 (Allowed Failures):
+ - <<: *arm32-linux
+ - <<: *arm64-linux
+ - <<: *ppc64le-linux
+ - <<: *s390x-linux
+ allow_failures:
+ # An arm64 job sometimes does not start right now.
+ # https://travis-ci.community/t/11629
+ - name: arm32-linux
+ - name: arm64-linux
+ # - name: ppc64le-linux
+ # - name: s390x-linux
+ fast_finish: true
+
+before_script:
+ - . 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
+ - |-
+ [ -d ~/.downloaded-cache ] ||
+ mkdir ~/.downloaded-cache
+ - ln -s ~/.downloaded-cache
+ - "> config.status"
+ - "> .rbconfig.time"
+ - sed -f tool/prereq.status template/Makefile.in common.mk > Makefile
+ - make -s $JOBS up
+ - make -s $JOBS srcs
+ - rm -f config.status Makefile rbconfig.rb .rbconfig.time
+ - |-
+ if [ -d ~/config_2nd ]; then
+ cp -pr ~/config_2nd build
+ else
+ mkdir build
+ fi
+ - mkdir config_1st config_2nd
+ - chmod -R a-w .
+ - chmod -R u+w build config_1st config_2nd
+ - cd build
+ - |-
+ case "$CC" in
+ gcc*) CC="ccache $CC${GCC_FLAGS:+ }$GCC_FLAGS -fno-diagnostics-color";;
+ clang*) CC="ccache $CC${GCC_FLAGS:+ }$GCC_FLAGS -fno-color-diagnostics";;
+ esac
+ - |-
+ [ ! -f config.cache ] ||
+ [ "$CC" = "`sed -n s/^ac_cv_prog_CC=//p config.cache`" ] ||
+ (set -x; exec rm config.cache)
+ - $SETARCH ../configure -C --disable-install-doc --prefix=$RUBY_PREFIX $CONFIG_FLAG
+ - cp -pr config.cache config.status .ext/include ../config_1st
+ - $SETARCH make reconfig
+ - cp -pr config.cache config.status .ext/include ../config_2nd
+ - (cd .. && exec diff -ru config_1st config_2nd)
+ - chmod u+w ..
+ - rm -rf ~/config_2nd
+ - mv ../config_2nd ~
+ - chmod u-w ..
+ - $SETARCH make -s $JOBS
+ - make -s install
+ - |-
+ [ -z "${GEMS_FOR_TEST}" ] ||
+ $RUBY_PREFIX/bin/gem install --no-document $GEMS_FOR_TEST
+ - echo "raise 'do not load ~/.irbrc in test'" > ~/.irbrc
+
+script:
+ - $SETARCH make -s test -o showflags TESTOPTS="${TESTOPTS=$JOBS -q --tty=no}"
+ - ../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 [ "${RUN_SEPARATED_TESTS}" = true -a -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
+
+# 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:
+ irc:
+ channels:
+ - "chat.freenode.net#ruby-core"
+ on_success: change # [always|never|change] # default: always
+ on_failure: always # [always|never|change] # default: always
+ template:
+ - "%{message} by @%{author}: See %{build_url}"
+
+ webhooks:
+ urls:
+ - secure: mRsoS/UbqDkKkW5p3AEqM27d4SZnV6Gsylo3bm8T/deltQzTsGzZwrm7OIBXZv0UFZdE68XmPlyHfZFLSP2V9QZ7apXMf9/vw0GtcSe1gchtnjpAPF6lYBn7nMCbVPPx9cS0dwL927fjdRM1vj7IKZ2bk4F0lAJ25R25S6teqdk= # ruby-lang slack: ruby/simpler-alerts-bot (travis)
+ on_success: never
+ on_failure: always
+
+ email:
+ - jaruga@ruby-lang.org
diff --git a/NEWS.md b/NEWS.md
index a41cf0b..7d80895 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -14,6 +14,17 @@ Note that each entry is kept to a minimum, see links for details.
#=> [[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.
+
* 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:
@@ -83,6 +94,10 @@ Outstanding ones only.
* File.dirname now accepts an optional argument for the level to
strip path components. [[Feature #12194]]
+* Integer
+
+ * Integer.try_convert is added. [[Feature #15211]]
+
* Module
* Module#prepend now modifies the ancestor chain if the receiver
@@ -96,21 +111,42 @@ Outstanding ones only.
You need to use a Hash literal to set a Hash to a first member.
[[Feature #16806]]
+ * StructClass#keyword_init? is added [[Feature #18008]]
+
* Queue
* Queue#initialize now accepts an Enumerable of initial values.
[[Feature #17327]]
+* Thread
+
+ * Thread#native_thread_id is added. [[Feature #17853]]
+
* Thread::Backtrace
* Thread::Backtrace.limit, which returns the value to limit backtrace
- length set by `--backtracse-limit` command line option, is added.
+ length set by `--backtrace-limit` command line option, is added.
[[Feature #17479]]
* $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]]
+
+ * 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]]
+
## Stdlib updates
Outstanding ones only.
@@ -119,6 +155,11 @@ Outstanding ones only.
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.
@@ -130,7 +171,12 @@ Excluding feature bug fixes.
### JIT
-* `RubyVM::MJIT` is renamed to `RubyVM::JIT`.
+* The default `--jit-max-cache` is changed from 100 to 10000.
+
+* The JIT compiler no longer skips compilation of methods longer than
+ 1000 instructions.
+
+* `RubyVM::MJIT` is renamed to `RubyVM::JIT`. [[Feature #17490]]
## Static analysis
@@ -140,16 +186,36 @@ Excluding feature bug fixes.
## 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 purpose. Do not use this in production.
+ [[Feature #17762]]
+
+* Now exceptions raised in finalizers will be printed to `STDERR`, unless
+ `$VERBOSE` is `nil`. [[Feature #17798]]
-[Bug #4443]: https://bugs.ruby-lang.org/issues/4443
+[Bug #4443]: https://bugs.ruby-lang.org/issues/4443
[Feature #12194]: https://bugs.ruby-lang.org/issues/12194
[Feature #14256]: https://bugs.ruby-lang.org/issues/14256
[Feature #15198]: https://bugs.ruby-lang.org/issues/15198
+[Feature #15211]: https://bugs.ruby-lang.org/issues/15211
[Feature #16043]: https://bugs.ruby-lang.org/issues/16043
[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 #17411]: https://bugs.ruby-lang.org/issues/17411
-[Bug #17423]: https://bugs.ruby-lang.org/issues/17423
+[Bug #17423]: https://bugs.ruby-lang.org/issues/17423
[Feature #17479]: https://bugs.ruby-lang.org/issues/17479
+[Feature #17490]: https://bugs.ruby-lang.org/issues/17490
+[Feature #17724]: https://bugs.ruby-lang.org/issues/17724
[Feature #17744]: https://bugs.ruby-lang.org/issues/17744
+[Feature #17762]: https://bugs.ruby-lang.org/issues/17762
+[Feature #17798]: https://bugs.ruby-lang.org/issues/17798
+[Bug #18003]: https://bugs.ruby-lang.org/issues/18003
+[Feature #17370]: https://bugs.ruby-lang.org/issues/17370
+[Feature #17470]: https://bugs.ruby-lang.org/issues/17470
+[Feature #17853]: https://bugs.ruby-lang.org/issues/17853
+[Bug #17827]: https://bugs.ruby-lang.org/issues/17827
+[Feature #18015]: https://bugs.ruby-lang.org/issues/18015
diff --git a/README.ja.md b/README.ja.md
index 095c8fd..4516c71 100644
--- a/README.ja.md
+++ b/README.ja.md
@@ -167,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/README.md b/README.md
index b1ee611..5d225fd 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,10 @@
-[![Build status](https://ci.appveyor.com/api/projects/status/0sy8rrxut4o0k960/branch/master?svg=true)](https://ci.appveyor.com/project/ruby/ruby/branch/master)
[![Actions Status: macOS](https://github.com/ruby/ruby/workflows/macOS/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"macOS")
[![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://www.travis-ci.com/ruby/ruby.svg?branch=master)](https://www.travis-ci.com/ruby/ruby)
# What's Ruby
@@ -75,6 +76,18 @@ 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
@@ -154,12 +167,12 @@ See the file [COPYING](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
diff --git a/addr2line.c b/addr2line.c
index cf0a379..8ee4416 100644
--- a/addr2line.c
+++ b/addr2line.c
@@ -1699,6 +1699,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;
@@ -1719,6 +1720,7 @@ uncompress_debug_section(ElfW(Shdr) *shdr, char *file, char **ptr)
fail:
free(*ptr);
+ *ptr = NULL;
#endif
return 0;
}
diff --git a/appveyor.yml b/appveyor.yml
index 6b9e6e9..351b7c7 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -24,7 +24,6 @@ environment:
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:
@@ -49,8 +48,7 @@ for:
- echo>> Makefile RT_VER=0
- echo>> Makefile BUILTIN_ENCOBJS=nul
- type win32\Makefile.sub >> Makefile
- - nmake %mflags% touch-unicode-files
- - nmake %mflags% %UPDATE_UNICODE% incs
+ - nmake %mflags% up
- nmake %mflags% extract-extlibs
- del Makefile
- mkdir \usr\local\bin
diff --git a/array.c b/array.c
index 881270b..3cb57a0 100644
--- a/array.c
+++ b/array.c
@@ -3074,11 +3074,13 @@ ary_rotate_ptr(VALUE *ptr, long len, long cnt)
VALUE tmp = *ptr;
memmove(ptr, ptr + 1, sizeof(VALUE)*(len - 1));
*(ptr + len - 1) = tmp;
- } else if (cnt == len - 1) {
+ }
+ else if (cnt == len - 1) {
VALUE tmp = *(ptr + len - 1);
memmove(ptr + 1, ptr, sizeof(VALUE)*(len - 1));
*ptr = tmp;
- } else {
+ }
+ else {
--len;
if (cnt < len) ary_reverse(ptr + cnt, ptr + len);
if (--cnt > 0) ary_reverse(ptr, ptr + cnt);
@@ -3213,6 +3215,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;
};
@@ -3225,6 +3228,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)
{
@@ -3238,7 +3250,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;
}
@@ -3264,7 +3276,7 @@ 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;
}
@@ -3316,6 +3328,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, {
@@ -8147,8 +8160,11 @@ rb_ary_deconstruct(VALUE ary)
*
* == What's Here
*
- * First, what's elsewhere. \Array includes the module Enumerable,
- * which provides dozens of additional methods.
+ * 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:
*
diff --git a/ast.c b/ast.c
index b7416ad..32d8ab9 100644
--- a/ast.c
+++ b/ast.c
@@ -64,8 +64,8 @@ ast_new_internal(rb_ast_t *ast, const 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_str(VALUE str, VALUE save_script_lines);
+static VALUE rb_ast_parse_file(VALUE path, VALUE save_script_lines);
static VALUE
ast_parse_new(void)
@@ -85,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 save_script_lines)
{
- return rb_ast_parse_str(str);
+ return rb_ast_parse_str(str, save_script_lines);
}
static VALUE
-rb_ast_parse_str(VALUE str)
+rb_ast_parse_str(VALUE str, VALUE save_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(save_script_lines)) rb_parser_save_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 save_script_lines)
{
- return rb_ast_parse_file(path);
+ return rb_ast_parse_file(path, save_script_lines);
}
static VALUE
-rb_ast_parse_file(VALUE path)
+rb_ast_parse_file(VALUE path, VALUE save_script_lines)
{
VALUE f;
rb_ast_t *ast = 0;
@@ -116,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(save_script_lines)) rb_parser_save_script_lines(vparser);
+ ast = rb_parser_compile_file_path(vparser, Qnil, f, 1);
rb_io_close(f);
return ast_parse_done(ast);
}
@@ -135,12 +139,14 @@ lex_array(VALUE array, int index)
}
static VALUE
-rb_ast_parse_array(VALUE array)
+rb_ast_parse_array(VALUE array, VALUE save_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(save_script_lines)) rb_parser_save_script_lines(vparser);
+ ast = rb_parser_compile_generic(vparser, lex_array, Qnil, array, 1);
return ast_parse_done(ast);
}
@@ -187,35 +193,38 @@ 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 save_script_lines)
{
VALUE path, node, lines;
int node_id;
- const rb_iseq_t *iseq = NULL;
- if (rb_obj_is_proc(body)) {
- iseq = vm_proc_iseq(body);
-
- if (!rb_obj_is_iseq((VALUE)iseq)) {
- iseq = NULL;
- }
+ if (rb_frame_info_p(body)) {
+ rb_frame_info_get(body, &path, &node_id);
+ if (NIL_P(path)) return Qnil;
}
else {
- iseq = rb_method_iseq(body);
- }
+ const rb_iseq_t *iseq = NULL;
+
+ if (rb_obj_is_proc(body)) {
+ iseq = vm_proc_iseq(body);
- if (!iseq) return Qnil;
+ if (!rb_obj_is_iseq((VALUE)iseq)) return Qnil;
+ }
+ else {
+ iseq = rb_method_iseq(body);
+ }
+ path = rb_iseq_path(iseq);
+ node_id = iseq->body->location.node_id;
+ }
- 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);
+ node = rb_ast_parse_array(lines, save_script_lines);
}
else if (RSTRING_LEN(path) == 2 && memcmp(RSTRING_PTR(path), "-e", 2) == 0) {
- node = rb_ast_parse_str(rb_e_script);
+ node = rb_ast_parse_str(rb_e_script, save_script_lines);
}
else {
- node = rb_ast_parse_file(path);
+ node = rb_ast_parse_file(path, save_script_lines);
}
return node_find(node, node_id);
@@ -245,16 +254,14 @@ ast_node_type(rb_execution_context_t *ec, VALUE self)
return rb_sym_intern_ascii_cstr(node_type_to_str(data->node));
}
-#ifdef EXPERIMENTAL_ISEQ_NODE_ID
static VALUE
-ast_node_node_id(VALUE self)
+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));
}
-#endif
#define NEW_CHILD(ast, node) node ? ast_new_internal(ast, node) : Qnil
@@ -698,6 +705,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
@@ -706,7 +723,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);
-#ifdef EXPERIMENTAL_ISEQ_NODE_ID
- rb_define_method(rb_cNode, "node_id", ast_node_node_id, 0);
-#endif
}
diff --git a/ast.rb b/ast.rb
index 34fa645..34dd3f1 100644
--- a/ast.rb
+++ b/ast.rb
@@ -1,145 +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 module 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 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.
+ # 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")
+ # # => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:0-1:9>
+ def self.parse string, save_script_lines: false
+ Primitive.ast_s_parse string, save_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")
+ # # => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:0-31:3>
+ def self.parse_file pathname, save_script_lines: false
+ Primitive.ast_s_parse_file pathname, save_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})
+ # # => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:35-1:42>
+ #
+ # def hello
+ # puts "hello, world"
+ # end
+ #
+ # RubyVM::AbstractSyntaxTree.of(method(:hello))
+ # # => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:0-3:3>
+ def self.of body, save_script_lines: false
+ Primitive.ast_s_of body, save_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")
- # # => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:0-1:9>
- def self.parse string
- Primitive.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")
- # # => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:0-31:3>
- def self.parse_file pathname
- Primitive.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})
- # # => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:35-1:42>
+ # The returned array may contain other nodes or <code>nil</code>.
+ 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))
- # # => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:0-3:3>
- def self.of body
- Primitive.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
- # lasgn = root.children[2]
- # lasgn.type # => :LASGN
- # call = lasgn.children[1]
- # call.type # => :OPCALL
- def type
- Primitive.ast_node_type
- end
-
- # call-seq:
- # node.first_lineno -> integer
- #
- # The line number in the source code where this AST's text began.
- def first_lineno
- Primitive.ast_node_first_lineno
- end
-
- # call-seq:
- # node.first_column -> integer
- #
- # The column number in the source code where this AST's text began.
- def first_column
- Primitive.ast_node_first_column
- end
-
- # call-seq:
- # node.last_lineno -> integer
- #
- # The line number in the source code where this AST's text ended.
- def last_lineno
- Primitive.ast_node_last_lineno
- end
-
- # call-seq:
- # node.last_column -> integer
- #
- # The column number in the source code where this AST's text ended.
- def last_column
- Primitive.ast_node_last_column
- end
-
- # call-seq:
- # node.children -> array
- #
- # Returns AST nodes under this one. Each kind of node
- # has different children, depending on what kind of node it is.
- #
- # The returned array may contain other nodes or <code>nil</code>.
- def children
- Primitive.ast_node_children
- end
+ # 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
- Primitive.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/benchmark/mjit_integer.yml b/benchmark/mjit_integer.yml
index edc3556..a6b5c9e 100644
--- a/benchmark/mjit_integer.yml
+++ b/benchmark/mjit_integer.yml
@@ -8,6 +8,7 @@ prelude: |
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
@@ -22,6 +23,7 @@ benchmark:
- mjit_magnitude(-1)
- mjit_odd?(1)
- mjit_ord(1)
+ - mjit_size(1)
- mjit_to_i(1)
- mjit_to_int(1)
- mjit_uminus(1)
diff --git a/benchmark/nilclass.yml b/benchmark/nilclass.yml
new file mode 100644
index 0000000..fba67a5
--- /dev/null
+++ b/benchmark/nilclass.yml
@@ -0,0 +1,6 @@
+benchmark:
+ to_i: |
+ nil.to_i
+ to_f: |
+ nil.to_f
+loop_count: 100000
diff --git a/benchmark/vm_case_classes.yml b/benchmark/vm_case_classes.yml
new file mode 100644
index 0000000..cacc4f0
--- /dev/null
+++ b/benchmark/vm_case_classes.yml
@@ -0,0 +1,9 @@
+benchmark:
+ vm_case_classes: |
+ case :foo
+ when Hash
+ raise
+ when Array
+ raise
+ end
+loop_count: 6000000
diff --git a/benchmark/vm_cvar.yml b/benchmark/vm_cvar.yml
new file mode 100644
index 0000000..1d0e161
--- /dev/null
+++ b/benchmark/vm_cvar.yml
@@ -0,0 +1,20 @@
+prelude: |
+ class A
+ @@foo = 1
+
+ def self.foo
+ @@foo
+ end
+
+ ("A".."Z").each do |module_name|
+ eval <<-EOM
+ module #{module_name}
+ end
+
+ include #{module_name}
+ EOM
+ end
+ end
+benchmark:
+ vm_cvar: A.foo
+loop_count: 600000
diff --git a/benchmark/vm_thread_condvar1.rb b/benchmark/vm_thread_condvar1.rb
index cf5706b..feed27c 100644
--- a/benchmark/vm_thread_condvar1.rb
+++ b/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/benchmark/vm_thread_condvar2.rb b/benchmark/vm_thread_condvar2.rb
index 7c8dc19..6590c41 100644
--- a/benchmark/vm_thread_condvar2.rb
+++ b/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/bootstraptest/test_fiber.rb b/bootstraptest/test_fiber.rb
index 35e1bf6..2614dd1 100644
--- a/bootstraptest/test_fiber.rb
+++ b/bootstraptest/test_fiber.rb
@@ -19,12 +19,12 @@ assert_equal %q{ok}, %q{
}
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/bootstraptest/test_insns.rb b/bootstraptest/test_insns.rb
index 9052cad..31fdc29 100644
--- a/bootstraptest/test_insns.rb
+++ b/bootstraptest/test_insns.rb
@@ -384,7 +384,7 @@ tests = [
[ '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
diff --git a/bootstraptest/test_ractor.rb b/bootstraptest/test_ractor.rb
index 6299b50..28c9e6d 100644
--- a/bootstraptest/test_ractor.rb
+++ b/bootstraptest/test_ractor.rb
@@ -248,7 +248,8 @@ assert_equal 30.times.map { 'ok' }.to_s, %q{
30.times.map{|i|
test i
}
-} unless ENV['RUN_OPTS'] =~ /--jit-min-calls=5/ # This always fails with --jit-wait --jit-min-calls=5
+} 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{
@@ -532,7 +533,7 @@ assert_equal '[RuntimeError, "ok", true]', %q{
# threads in a ractor will killed
assert_equal '{:ok=>3}', %q{
Ractor.new Ractor.current do |main|
- q = Queue.new
+ q = Thread::Queue.new
Thread.new do
q << true
loop{}
@@ -1404,4 +1405,17 @@ assert_equal "ok", %q{
end
}
+assert_equal "ok", %q{
+ GC.disable
+ Ractor.new {}
+ raise "not ok" unless GC.disable
+
+ foo = []
+ 10.times { foo << 1 }
+
+ GC.start
+
+ 'ok'
+}
+
end # if !ENV['GITHUB_WORKFLOW']
diff --git a/class.c b/class.c
index 9ac2b3f..ef3db6d 100644
--- a/class.c
+++ b/class.c
@@ -27,6 +27,7 @@
#include <ctype.h>
#include "constant.h"
+#include "debug_counter.h"
#include "id_table.h"
#include "internal.h"
#include "internal/class.h"
@@ -43,6 +44,8 @@
#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;
+
void
rb_class_subclass_add(VALUE super, VALUE klass)
{
@@ -957,6 +960,7 @@ 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);
@@ -1085,6 +1089,8 @@ do_include_modules_at(const VALUE klass, VALUE c, VALUE module, int search_super
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
diff --git a/common.mk b/common.mk
index 5310173..6205e0e 100644
--- a/common.mk
+++ b/common.mk
@@ -18,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.0
UNICODE_BETA = NO
### set the following environment variable or uncomment the line if
@@ -164,7 +164,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)
@@ -213,7 +213,7 @@ MAKE_LINK = $(MINIRUBY) -rfileutils -e "include FileUtils::Verbose" \
all: $(SHOWFLAGS) main docs
-main: $(SHOWFLAGS) exts $(ENCSTATIC:static=lib)encs programs
+main: $(SHOWFLAGS) exts $(ENCSTATIC:static=lib)encs
@$(NULLCMD)
mjit-headers: $(MJIT_SUPPORT)-mjit-headers
@@ -306,6 +306,7 @@ exts-note: $(EXTS_MK)
$(Q)$(MAKE) $(EXTS_NOTE)
ext/extinit.c: $(srcdir)/template/extinit.c.tmpl $(PREP)
+ $(MAKEDIRS) $(@D)
$(Q)$(MINIRUBY) $(tooldir)/generic_erb.rb -o $@ -c \
$(srcdir)/template/extinit.c.tmpl $(EXTINITS)
@@ -325,7 +326,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
@@ -471,7 +471,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
@@ -1031,6 +1031,7 @@ BUILTIN_RB_SRCS = \
$(srcdir)/kernel.rb \
$(srcdir)/ractor.rb \
$(srcdir)/timev.rb \
+ $(srcdir)/nilclass.rb \
$(srcdir)/prelude.rb \
$(srcdir)/gem_prelude.rb \
$(empty)
@@ -1336,7 +1337,7 @@ update-bundled_gems: PHONY
$(Q) $(RUNRUBY) -rrubygems \
$(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
@@ -1424,16 +1425,19 @@ 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 = \
@@ -1450,6 +1454,13 @@ UNICODE_AUXILIARY_DOWNLOAD = \
-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) $(tooldir)/downloader.rb \
--cache-dir=$(CACHE_DIR) \
@@ -1470,6 +1481,12 @@ 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...
@@ -1481,7 +1498,7 @@ $(srcdir)/lib/unicode_normalize/$(ALWAYS_UPDATE_UNICODE:yes=tables.rb): \
$(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)
@@ -2458,6 +2475,7 @@ class.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
class.$(OBJEXT): {$(VPATH)}class.c
class.$(OBJEXT): {$(VPATH)}config.h
class.$(OBJEXT): {$(VPATH)}constant.h
+class.$(OBJEXT): {$(VPATH)}debug_counter.h
class.$(OBJEXT): {$(VPATH)}defines.h
class.$(OBJEXT): {$(VPATH)}encoding.h
class.$(OBJEXT): {$(VPATH)}id.h
@@ -5841,192 +5859,22 @@ gc.$(OBJEXT): {$(VPATH)}vm_core.h
gc.$(OBJEXT): {$(VPATH)}vm_debug.h
gc.$(OBJEXT): {$(VPATH)}vm_opts.h
gc.$(OBJEXT): {$(VPATH)}vm_sync.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): $(top_srcdir)/internal/array.h
-golf_prelude.$(OBJEXT): $(top_srcdir)/internal/compilers.h
-golf_prelude.$(OBJEXT): $(top_srcdir)/internal/gc.h
-golf_prelude.$(OBJEXT): $(top_srcdir)/internal/imemo.h
-golf_prelude.$(OBJEXT): $(top_srcdir)/internal/serial.h
-golf_prelude.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
-golf_prelude.$(OBJEXT): $(top_srcdir)/internal/vm.h
-golf_prelude.$(OBJEXT): $(top_srcdir)/internal/warnings.h
-golf_prelude.$(OBJEXT): {$(VPATH)}assert.h
-golf_prelude.$(OBJEXT): {$(VPATH)}atomic.h
-golf_prelude.$(OBJEXT): {$(VPATH)}backward/2/assume.h
-golf_prelude.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
-golf_prelude.$(OBJEXT): {$(VPATH)}backward/2/bool.h
-golf_prelude.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
-golf_prelude.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
-golf_prelude.$(OBJEXT): {$(VPATH)}backward/2/limits.h
-golf_prelude.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
-golf_prelude.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
-golf_prelude.$(OBJEXT): {$(VPATH)}backward/2/stdarg.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)}internal/anyargs.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/assume.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/const.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/error.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/format.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/cast.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/config.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/constant_p.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/core.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/core/robject.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/ctype.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/dllexport.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/dosish.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/error.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/eval.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/event.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/fl_type.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/gc.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/glob.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/globals.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/has/extension.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/has/feature.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/has/warning.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/array.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/class.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/error.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/file.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/gc.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/io.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/load.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/object.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/process.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/random.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/range.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/re.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/select.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/string.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/time.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/interpreter.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/iterator.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/memory.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/method.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/module.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/newobj.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/rgengc.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/scan_args.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/special_consts.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/static_assert.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/stdalign.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/stdbool.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/symbol.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/value.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/value_type.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/variable.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/warning_push.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal/xmalloc.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
+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
@@ -6039,8 +5887,12 @@ goruby.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
goruby.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
goruby.$(OBJEXT): {$(VPATH)}config.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
@@ -6180,12 +6032,20 @@ 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
+goruby.$(OBJEXT): {$(VPATH)}vm_opts.h
hash.$(OBJEXT): $(hdrdir)/ruby.h
hash.$(OBJEXT): $(hdrdir)/ruby/ruby.h
hash.$(OBJEXT): $(top_srcdir)/internal/array.h
@@ -8349,6 +8209,7 @@ 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
@@ -8408,6 +8269,7 @@ 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
@@ -8429,6 +8291,7 @@ 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)}debug.h
@@ -8439,6 +8302,9 @@ 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
@@ -8580,6 +8446,7 @@ 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
@@ -8599,7 +8466,9 @@ 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_build_dir.$(OBJEXT): {$(VPATH)}config.h
mjit_build_dir.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
mjit_build_dir.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
@@ -9368,6 +9237,8 @@ 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.rb
+object.$(OBJEXT): {$(VPATH)}nilclass.rbinc
object.$(OBJEXT): {$(VPATH)}object.c
object.$(OBJEXT): {$(VPATH)}onigmo.h
object.$(OBJEXT): {$(VPATH)}oniguruma.h
@@ -15335,6 +15206,7 @@ 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/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
diff --git a/compar.c b/compar.c
index 04d4ff8..0de3185 100644
--- a/compar.c
+++ b/compar.c
@@ -289,6 +289,22 @@ 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 <tt><=></tt>:
+ *
+ * - {<}[#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 <tt>(min..max)</tt>, returns:
+ * - +min+ if <tt>(self <=> min) < 0</tt>.
+ * - +max+ if <tt>(self <=> max) > 0</tt>.
+ * - +self+ otherwise.
*/
void
diff --git a/compile.c b/compile.c
index 2e10659..38a96f1 100644
--- a/compile.c
+++ b/compile.c
@@ -1328,7 +1328,7 @@ 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 = INT2FIX(-1);
debugs("[new_child_iseq]> ---------------------------------------\n");
int isolated_depth = ISEQ_COMPILE_DATA(iseq)->isolated_depth;
@@ -1383,11 +1383,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;
@@ -1971,8 +1967,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;
@@ -2008,20 +2004,23 @@ cdhash_cmp(VALUE val, VALUE lit)
else if (tlit == T_RATIONAL) {
const struct RRational *rat1 = RRATIONAL(val);
const struct RRational *rat2 = RRATIONAL(lit);
- return cdhash_cmp(rat1->num, rat2->num) || cdhash_cmp(rat1->den, rat2->den);
+ 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 cdhash_cmp(comp1->real, comp2->real) || cdhash_cmp(comp1->imag, comp2->imag);
+ 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:
@@ -2037,14 +2036,16 @@ cdhash_hash(VALUE a)
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 {
@@ -2154,7 +2155,8 @@ fix_sp_depth(rb_iseq_t *iseq, LINK_ANCHOR *const anchor)
}
if (lobj->sp == -1) {
lobj->sp = sp;
- } else if (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);
@@ -2214,12 +2216,12 @@ 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 EXPERIMENTAL_ISEQ_NODE_ID
+#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 EXPERIMENTAL_ISEQ_NODE_ID
+#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;
@@ -2926,7 +2928,8 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal
}
else if (iobj != diobj && IS_INSN(&diobj->link) &&
IS_INSN_ID(diobj, jump) &&
- OPERAND_AT(iobj, 0) != OPERAND_AT(diobj, 0)) {
+ OPERAND_AT(iobj, 0) != OPERAND_AT(diobj, 0) &&
+ diobj->insn_info.events == 0) {
/*
* useless jump elimination:
* jump LABEL1
@@ -3026,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)) {
@@ -3086,6 +3088,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;
@@ -4537,6 +4540,9 @@ rb_node_case_when_optimizable_literal(const NODE *const node)
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;
}
@@ -4569,8 +4575,6 @@ 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, val, dup); /* dup target */
-
if (nd_type(val) == NODE_STR) {
debugp_param("nd_lit", val->nd_lit);
lit = rb_fstring(val->nd_lit);
@@ -4581,7 +4585,9 @@ when_vals(rb_iseq_t *iseq, LINK_ANCHOR *const cond_seq, const NODE *vals,
if (!COMPILE(cond_seq, "when cond", val)) return -1;
}
- ADD_INSN1(cond_seq, vals, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_CASE));
+ // 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;
}
@@ -4993,7 +4999,7 @@ compile_massign(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node,
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++) {
+ 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;
@@ -5207,7 +5213,7 @@ defined_expr0(rb_iseq_t *iseq, LINK_ANCHOR *const ret,
}
if (explicit_receiver) {
defined_expr0(iseq, ret, node->nd_recv, lfinish, Qfalse, true);
- switch(nd_type(node->nd_recv)) {
+ switch (nd_type(node->nd_recv)) {
case NODE_CALL:
case NODE_OPCALL:
case NODE_VCALL:
@@ -5405,12 +5411,14 @@ add_ensure_range(rb_iseq_t *iseq, struct ensure_range *erange,
static bool
can_add_ensure_iseq(const rb_iseq_t *iseq)
{
- if (ISEQ_COMPILE_DATA(iseq)->in_rescue && ISEQ_COMPILE_DATA(iseq)->ensure_node_stack) {
- return false;
- }
- else {
- return true;
+ 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
@@ -6454,6 +6462,9 @@ 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:
@@ -8059,8 +8070,9 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, in
if (!popped) {
ADD_INSN(ret, line_node, dup);
}
- ADD_INSN1(ret, line_node, setclassvariable,
- ID2SYM(node->nd_vid));
+ ADD_INSN2(ret, line_node, setclassvariable,
+ ID2SYM(node->nd_vid),
+ get_ivar_ic_value(iseq,node->nd_vid));
break;
}
case NODE_OP_ASGN1: {
@@ -8683,8 +8695,9 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, in
}
case NODE_CVAR:{
if (!popped) {
- ADD_INSN1(ret, line_node, getclassvariable,
- ID2SYM(node->nd_vid));
+ ADD_INSN2(ret, line_node, getclassvariable,
+ ID2SYM(node->nd_vid),
+ get_ivar_ic_value(iseq,node->nd_vid));
}
break;
}
@@ -9697,13 +9710,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;
/*
@@ -9737,6 +9750,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 */
@@ -9757,7 +9774,7 @@ iseq_build_from_ary_body(rb_iseq_t *iseq, LINK_ANCHOR *const anchor,
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, -1);
+ 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));
@@ -9841,7 +9858,7 @@ iseq_build_from_ary_body(rb_iseq_t *iseq, LINK_ANCHOR *const anchor,
}
}
else {
- NODE dummy_line_node = generate_dummy_line_node(line_no, -1);
+ 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));
@@ -10047,6 +10064,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);
@@ -10096,7 +10121,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;
@@ -10755,7 +10780,6 @@ ibf_load_code(const struct ibf_load *load, rb_iseq_t *iseq, ibf_offset_t bytecod
/* operands */
for (op_index=0; types[op_index]; op_index++, code_index++) {
switch (types[op_index]) {
- case TS_CDHASH:
case TS_VALUE:
{
VALUE op = ibf_load_small_value(load, &reading_pos);
@@ -10767,6 +10791,25 @@ ibf_load_code(const struct ibf_load *load, rb_iseq_t *iseq, ibf_offset_t bytecod
}
break;
}
+ case TS_CDHASH:
+ {
+ VALUE op = ibf_load_small_value(load, &reading_pos);
+ VALUE v = ibf_load_object(load, op);
+ v = rb_hash_dup(v); // hash dumped as frozen
+ RHASH_TBL_RAW(v)->type = &cdhash_type;
+ rb_hash_rehash(v); // hash function changed
+ 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);
@@ -10908,6 +10951,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);
}
@@ -10923,6 +10969,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);
}
@@ -11677,7 +11726,8 @@ ibf_load_object_string(const struct ibf_load *load, const struct ibf_object_head
VALUE str;
if (header->frozen && !header->internal) {
str = rb_enc_interned_str(ptr, len, rb_enc_from_index(encindex));
- } else {
+ }
+ else {
str = rb_enc_str_new(ptr, len, rb_enc_from_index(encindex));
if (header->internal) rb_obj_hide(str);
diff --git a/complex.c b/complex.c
index 66d9754..09e47f8 100644
--- a/complex.c
+++ b/complex.c
@@ -1272,7 +1272,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;
}
@@ -2385,7 +2385,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);
diff --git a/configure.ac b/configure.ac
index a1a0872..d018e8a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -135,8 +135,15 @@ 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))
])
-AS_CASE(["${build_os}"], [linux*|cygwin*|msys*], [
+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
@@ -955,6 +962,8 @@ AS_CASE(["$target_os"], [*android*], [
AS_UNSET(ORIG_LIBS)
POSTLINK=:
AC_SUBST(POSTLINK)
+cleanlibs=
+AC_SUBST(cleanlibs)
AS_CASE(["$target_os"],
[nextstep*], [ ],
[openstep*], [ ],
@@ -1053,6 +1062,7 @@ main()
AC_CHECK_HEADERS(crt_externs.h, [], [], [
#include <crt_externs.h>
])
+ cleanlibs='$(TARGET_SO).dSYM'
],
[hpux*], [ LIBS="-lm $LIBS"
ac_cv_c_inline=no],
@@ -1287,42 +1297,53 @@ 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, [<jemalloc/jemalloc.h>])
- ],
- [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 <jemalloc.h>
- @%:@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 <stdio.h>
+ @%:@ifdef RUBY_ALTERNATIVE_MALLOC_HEADER
+ @%:@include RUBY_ALTERNATIVE_MALLOC_HEADER
+ @%:@else
+ extern const char *malloc_conf;
+ @%:@endif],
+ [/* access at runtime not to be optimized away */
+ if (malloc_conf) printf("malloc_conf=%s\n", malloc_conf);])],
+ [rb_cv_jemalloc_library="${lib:-none required}${mangle:+ with mangle}"])
+ LIBS="$save_LIBS"
+ test "${rb_cv_jemalloc_library}" = no || break 2
+ done
+ done
+ ])
+ 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"
])
-])
+ 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
@@ -2476,7 +2497,6 @@ AC_ARG_WITH(coroutine,
AS_HELP_STRING([--with-coroutine=IMPLEMENTATION], [specify the coroutine implementation to use]),
[coroutine_type=$withval], [coroutine_type=])
AS_CASE([$coroutine_type], [yes|''], [
- AC_MSG_CHECKING(native coroutine implementation for ${target_cpu}-${target_os})
coroutine_type=
AS_CASE(["$target_cpu-$target_os"],
[universal-darwin*], [
@@ -2523,10 +2543,10 @@ AS_CASE([$coroutine_type], [yes|''], [
coroutine_type=x86
],
[*-openbsd*], [
- coroutine_type=copy
+ coroutine_type=pthread
],
[*-haiku*], [
- coroutine_type=copy
+ coroutine_type=pthread
],
[*-emscripten*], [
coroutine_type=emscripten
@@ -2534,17 +2554,18 @@ AS_CASE([$coroutine_type], [yes|''], [
[
AC_CHECK_FUNCS([getcontext swapcontext makecontext],
[coroutine_type=ucontext],
- [coroutine_type=copy; break]
+ [coroutine_type=pthread; break]
)
]
)
+ AC_MSG_CHECKING(native coroutine implementation for ${target_cpu}-${target_os})
AC_MSG_RESULT(${coroutine_type})
])
COROUTINE_H=coroutine/$coroutine_type/Context.h
AS_IF([test ! -f "$srcdir/$COROUTINE_H"],
[AC_MSG_ERROR('$coroutine_type' is not supported as coroutine)])
AS_CASE([$coroutine_type],
- [copy|ucontext], [
+ [ucontext|pthread], [
COROUTINE_SRC=coroutine/$coroutine_type/Context.c
],
[
@@ -2732,14 +2753,11 @@ main(int argc, char *argv[])
test x$rb_cv_fork_with_pthread = xyes || AC_DEFINE(CANNOT_FORK_WITH_PTHREAD)
])
-AS_CASE([$target_os],
- [darwin*], [ac_cv_header_sys_user_h=yes], dnl LIST_HEAD conflicts with sys/queue.h
- [AC_CHECK_HEADERS([sys/user.h])]
-)
-AS_IF([test "x$ac_cv_func_mmap:$ac_cv_header_sys_user_h" = xyes:yes], [
+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,
- [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
- @%:@include <sys/user.h>
+ [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],
@@ -2749,6 +2767,36 @@ AS_IF([test "x$rb_cv_const_page_size" = xyes],
[AC_DEFINE(HAVE_CONST_PAGE_SIZE, 1)],
[AC_DEFINE(HAVE_CONST_PAGE_SIZE, 0)]
)
+
+AS_IF([test "x$ac_cv_func_ioctl" = xyes], [
+ AC_CACHE_CHECK([ioctl request type], rb_cv_ioctl_request_type,
+ [rb_cv_ioctl_request_type=no
+ dnl corresponding NUM2IOCTLREQ needs to be defined
+ for type in "unsigned long:ULONG_MAX" int:INT_MAX; do
+ max=`echo $type | sed 's/.*://'`
+ type=`echo $type | sed 's/:.*//'`
+ RUBY_WERROR_FLAG([
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ @%:@include <limits.h>
+ @%:@include <sys/types.h>
+ @%:@if defined(HAVE_SYS_IOCTL_H) && !defined(_WIN32)
+ @%:@include <sys/ioctl.h>
+ @%:@endif
+ ]], [[
+ $type req = $max;
+ if (ioctl(0, req)) {/* do nothing*/};
+ ]])],
+ [rb_cv_ioctl_request_type="$type"])
+ ])
+ test "x$rb_cv_ioctl_request_type" = xno || break
+ done])
+ AS_CASE(["$rb_cv_ioctl_request_type"], [no|int], [],
+ ["unsigned long"], [
+ AC_DEFINE_UNQUOTED(IOCTL_REQ_TYPE, [$rb_cv_ioctl_request_type])
+ AC_DEFINE_UNQUOTED(NUM2IOCTLREQ(num), [NUM2ULONG(num)])
+ ])
+])
+
}
: "runtime section" && {
@@ -3343,6 +3391,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*], [],
[
@@ -3373,6 +3432,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*], [
@@ -3806,6 +3869,7 @@ AS_IF([test -n "${LIBS}"], [
MAINFLAGS=`echo " $MAINLIBS " | sed "s|$libspat"'||;s/^ *//;s/ *$//'`
])
LIBRUBYARG_STATIC="${LIBRUBYARG_STATIC} \$(MAINLIBS)"
+LIBRUBYARG_SHARED="${LIBRUBYARG_SHARED} \$(MAINLIBS)"
CPPFLAGS="$CPPFLAGS "'$(DEFS)'
test -z "$CPPFLAGS" || CPPFLAGS="$CPPFLAGS "; CPPFLAGS="$CPPFLAGS"'${cppflags}'
AS_IF([test -n "${cflags+set}"], [
@@ -4110,7 +4174,7 @@ guard=INCLUDE_RUBY_CONFIG_H
} | tr -d '\015' |
(
AS_IF([test "x$CONFIGURE_TTY" = xyes], [color=--color], [color=])
- exec ${tooldir}/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
diff --git a/cont.c b/cont.c
index 35007ca..22c5ce5 100644
--- a/cont.c
+++ b/cont.c
@@ -711,10 +711,51 @@ fiber_pool_stack_release(struct fiber_pool_stack * stack)
#endif
}
+void rb_fiber_start(rb_fiber_t*);
+
+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.
@@ -731,22 +772,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;
}
@@ -815,25 +847,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;
- 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 rb_context_t *
cont_ptr(VALUE obj)
{
@@ -1041,7 +1054,7 @@ 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", fiber, fiber->stack.base);
if (fiber->cont.saved_ec.local_storage) {
rb_id_table_free(fiber->cont.saved_ec.local_storage);
@@ -1163,12 +1176,14 @@ cont_new(VALUE klass)
return cont;
}
-VALUE rb_fiberptr_self(struct rb_fiber_struct *fiber)
+VALUE
+rb_fiberptr_self(struct rb_fiber_struct *fiber)
{
return fiber->cont.self;
}
-unsigned int rb_fiberptr_blocking(struct rb_fiber_struct *fiber)
+unsigned int
+rb_fiberptr_blocking(struct rb_fiber_struct *fiber)
{
return fiber->blocking;
}
@@ -1278,13 +1293,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)
{
rb_thread_t *th = GET_THREAD();
@@ -1326,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;
@@ -1367,13 +1374,17 @@ 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);
/* 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);
@@ -1670,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");
@@ -1757,8 +1765,8 @@ rb_cont_call(int argc, VALUE *argv, VALUE contval)
* The concept of <em>non-blocking fiber</em> was introduced in Ruby 3.0.
* A non-blocking fiber, when reaching a operation that would normally block
* the fiber (like <code>sleep</code>, or wait for another process or I/O)
- # will yield control to other fibers and allow the <em>scheduler</em> to
- # handle blocking and waking up (resuming) this fiber when it can proceed.
+ * will yield control to other fibers and allow the <em>scheduler</em> to
+ * handle blocking and waking up (resuming) this fiber when it can proceed.
*
* For a Fiber to behave as non-blocking, it need to be created in Fiber.new with
* <tt>blocking: false</tt> (which is the default), and Fiber.scheduler
@@ -2000,7 +2008,7 @@ rb_fiber_s_scheduler(VALUE klass)
* Fiber.current_scheduler -> obj or nil
*
* Returns the Fiber scheduler, that was last set for the current thread with Fiber.set_scheduler
- * iff the current fiber is non-blocking.
+ * if and only if the current fiber is non-blocking.
*
*/
static VALUE
@@ -2031,17 +2039,16 @@ rb_fiber_set_scheduler(VALUE klass, VALUE scheduler)
return rb_fiber_scheduler_set(scheduler);
}
-NORETURN(static void rb_fiber_terminate(rb_fiber_t *fiber, int need_interrupt, VALUE err));
+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;
- VALUE err = Qfalse;
VM_ASSERT(th->ec == GET_EC());
VM_ASSERT(FIBER_RESUMED_P(fiber));
@@ -2067,6 +2074,7 @@ rb_fiber_start(void)
}
EC_POP_TAG();
+ VALUE err = Qfalse;
if (state) {
err = th->ec->errinfo;
VM_ASSERT(FIBER_RESUMED_P(fiber));
@@ -2084,7 +2092,6 @@ rb_fiber_start(void)
}
rb_fiber_terminate(fiber, need_interrupt, err);
- VM_UNREACHABLE(rb_fiber_start);
}
static rb_fiber_t *
@@ -2101,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;
}
@@ -2255,10 +2257,8 @@ fiber_switch(rb_fiber_t *fiber, int argc, const VALUE *argv, int kw_splat, VALUE
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)) {
@@ -2307,9 +2307,12 @@ fiber_switch(rb_fiber_t *fiber, int argc, const VALUE *argv, int kw_splat, VALUE
fiber_store(fiber, th);
+ // We cannot free the stack until the pthread is joined:
+#ifndef COROUTINE_PTHREAD_CONTEXT
if (RTEST(resuming_fiber) && FIBER_TERMINATED_P(fiber)) {
fiber_stack_release(fiber);
}
+#endif
if (fiber_current()->blocking) {
th->blocking += 1;
@@ -2388,26 +2391,24 @@ rb_fiber_close(rb_fiber_t *fiber)
}
static void
-rb_fiber_terminate(rb_fiber_t *fiber, int need_interrupt, VALUE err)
+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(true);
+ rb_fiber_t *next_fiber = return_fiber(true);
+
if (need_interrupt) RUBY_VM_SET_INTERRUPT(&next_fiber->cont.saved_ec);
- if (RTEST(err))
- fiber_switch(next_fiber, -1, &err, RB_NO_KEYWORDS, Qfalse, false);
+
+ if (RTEST(error))
+ fiber_switch(next_fiber, -1, &error, RB_NO_KEYWORDS, Qfalse, false);
else
fiber_switch(next_fiber, 1, &value, RB_NO_KEYWORDS, Qfalse, false);
- VM_UNREACHABLE(rb_fiber_terminate);
}
VALUE
@@ -2436,7 +2437,9 @@ rb_fiber_resume_kw(VALUE fiber_value, int argc, const VALUE *argv, int kw_splat)
rb_raise(rb_eFiberError, "attempt to resume a transferring fiber");
}
- return fiber_switch(fiber, argc, argv, kw_splat, fiber_value, false);
+ VALUE result = fiber_switch(fiber, argc, argv, kw_splat, fiber_value, false);
+
+ return result;
}
VALUE
@@ -2500,7 +2503,7 @@ rb_fiber_m_resume(int argc, VALUE *argv, VALUE fiber)
return rb_fiber_resume_kw(fiber, argc, argv, rb_keyword_given_p());
}
-static VALUE rb_fiber_transfer_kw(VALUE fiber_value, int argc, VALUE *argv, int kw_splat);
+VALUE rb_fiber_transfer_kw(VALUE fiber_value, int argc, const VALUE *argv, int kw_splat);
/*
* call-seq:
@@ -2704,8 +2707,8 @@ rb_fiber_m_transfer(int argc, VALUE *argv, VALUE fiber_value)
return rb_fiber_transfer_kw(fiber_value, argc, argv, rb_keyword_given_p());
}
-static VALUE
-rb_fiber_transfer_kw(VALUE fiber_value, int argc, VALUE *argv, int kw_splat)
+VALUE
+rb_fiber_transfer_kw(VALUE fiber_value, int argc, const VALUE *argv, int kw_splat)
{
rb_fiber_t *fiber = fiber_ptr(fiber_value);
if (RTEST(fiber->resuming_fiber)) {
diff --git a/coroutine/Stack.h b/coroutine/Stack.h
deleted file mode 100644
index b3f57dc..0000000
--- a/coroutine/Stack.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef COROUTINE_STACK_H
-#define COROUTINE_STACK_H 1
-
-/*
- * This file is part of the "Coroutine" project and released under the MIT License.
- *
- * Created by Samuel Williams on 10/11/2020.
- * Copyright, 2020, by Samuel Williams.
-*/
-
-#include COROUTINE_H
-
-#ifdef COROUTINE_PRIVATE_STACK
-#define COROUTINE_STACK_LOCAL(type, name) type *name = ruby_xmalloc(sizeof(type))
-#define COROUTINE_STACK_FREE(name) ruby_xfree(name)
-#else
-#define COROUTINE_STACK_LOCAL(type, name) type name##_local; type * name = &name##_local
-#define COROUTINE_STACK_FREE(name)
-#endif
-
-#endif /* COROUTINE_STACK_H */
diff --git a/coroutine/amd64/Context.h b/coroutine/amd64/Context.h
index 676975f..f626a47 100644
--- a/coroutine/amd64/Context.h
+++ b/coroutine/amd64/Context.h
@@ -22,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);
diff --git a/coroutine/arm32/Context.h b/coroutine/arm32/Context.h
index a1c5e03..09410eb 100644
--- a/coroutine/arm32/Context.h
+++ b/coroutine/arm32/Context.h
@@ -23,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);
diff --git a/coroutine/arm64/Context.h b/coroutine/arm64/Context.h
index 0ba7354..dbc6ac9 100644
--- a/coroutine/arm64/Context.h
+++ b/coroutine/arm64/Context.h
@@ -22,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);
diff --git a/coroutine/copy/Context.c b/coroutine/copy/Context.c
deleted file mode 100644
index aa8bb2f..0000000
--- a/coroutine/copy/Context.c
+++ /dev/null
@@ -1,162 +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.
-*/
-
-#include "Context.h"
-
-#include <stdint.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(void) {
- __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(void) {}
-#endif
-
-__attribute__((noinline))
-void *coroutine_stack_pointer(void) {
- return (void*)(
- (char*)__builtin_frame_address(0)
- );
-}
-
-// Save the current stack to a private area. It is likely that when restoring the stack, this stack frame will be incomplete. But that is acceptable since the previous stack frame which called `setjmp` should be correctly restored.
-__attribute__((noinline))
-int coroutine_save_stack_1(struct coroutine_context * context) {
- assert(context->stack);
- assert(context->base);
-
- void *stack_pointer = coroutine_stack_pointer();
-
- // At this point, you may need to ensure on architectures that use register windows, that all registers are flushed to the stack, otherwise the copy of the stack will not contain the valid registers:
- 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;
- }
-
- // Initialized:
- return 0;
-}
-
-// Copy the current stack to a private memory buffer.
-int coroutine_save_stack(struct coroutine_context * context) {
- if (_setjmp(context->state)) {
- // Restored.
- return 1;
- }
-
- // We need to invoke the memory copy from one stack frame deeper than the one that calls setjmp. That is because if you don't do this, the setjmp might be restored into an invalid stack frame (truncated, etc):
- return coroutine_save_stack_1(context);
-}
-
-__attribute__((noreturn, noinline))
-void coroutine_restore_stack_padded(struct coroutine_context *context, void * buffer) {
- void *stack_pointer = coroutine_stack_pointer();
-
- 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, otherwise when we copy in the new stack, the registers would not be updated:
- coroutine_flush_register_windows();
-
- // 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 `buffer` is to force the compiler NOT to elide he buffer and `alloca`:
- _longjmp(context->state, (int)(1 | (intptr_t)buffer));
-}
-
-// 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 = coroutine_stack_pointer();
- void *buffer = NULL;
-
- // We must ensure that the next stack frame is BEYOND the stack we are restoring:
- if (stack_pointer < context->base) {
- intptr_t offset = (intptr_t)stack_pointer - ((intptr_t)context->base - context->used);
- if (offset > 0) buffer = alloca(offset);
- } else {
- intptr_t offset = ((intptr_t)context->base + context->used) - (intptr_t)stack_pointer;
- 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/coroutine/copy/Context.h b/coroutine/copy/Context.h
deleted file mode 100644
index 2cb2bc1..0000000
--- a/coroutine/copy/Context.h
+++ /dev/null
@@ -1,98 +0,0 @@
-#ifndef COROUTINE_COPY_CONTEXT_H
-#define COROUTINE_COPY_CONTEXT_H 1
-
-/*
- * 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.
-*/
-
-#pragma once
-
-#include <assert.h>
-#include <stddef.h>
-#include <setjmp.h>
-#include <string.h>
-#include <stdlib.h>
-
-/* OpenBSD supports alloca, but does not include alloca.h */
-#ifndef __OpenBSD__
-#include <alloca.h>
-#endif
-
-#define COROUTINE __attribute__((noreturn)) void
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#if INTPTR_MAX <= INT32_MAX
-#define COROUTINE_LIMITED_ADDRESS_SPACE
-#endif
-#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;
-}
-
-#endif /* COROUTINE_COPY_CONTEXT_H */
diff --git a/coroutine/emscripten/Context.h b/coroutine/emscripten/Context.h
index aefbb92..361e241 100644
--- a/coroutine/emscripten/Context.h
+++ b/coroutine/emscripten/Context.h
@@ -26,6 +26,7 @@ struct coroutine_context
emscripten_fiber_t state;
coroutine_start entry_func;
struct coroutine_context * from;
+ void *argument;
};
COROUTINE coroutine_trampoline(void * _context);
diff --git a/coroutine/ppc64le/Context.h b/coroutine/ppc64le/Context.h
index 7a7d9fe..fbfaa2e 100644
--- a/coroutine/ppc64le/Context.h
+++ b/coroutine/ppc64le/Context.h
@@ -19,6 +19,7 @@ enum {
struct coroutine_context
{
void **stack_pointer;
+ void *argument;
};
typedef COROUTINE(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self);
diff --git a/coroutine/pthread/Context.c b/coroutine/pthread/Context.c
new file mode 100644
index 0000000..38774cd
--- /dev/null
+++ b/coroutine/pthread/Context.c
@@ -0,0 +1,272 @@
+/*
+ * This file is part of the "Coroutine" project and released under the MIT License.
+ *
+ * Created by Samuel Williams on 24/6/2021.
+ * Copyright, 2021, by Samuel Williams.
+*/
+
+#include "Context.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+
+static const int DEBUG = 0;
+
+static
+int check(const char * message, int result) {
+ if (result) {
+ switch (result) {
+ case EDEADLK:
+ if (DEBUG) fprintf(stderr, "deadlock detected result=%d errno=%d\n", result, errno);
+ break;
+ default:
+ if (DEBUG) fprintf(stderr, "error detected result=%d errno=%d\n", result, errno);
+ perror(message);
+ }
+ }
+
+ assert(result == 0);
+
+ return result;
+}
+
+void coroutine_initialize_main(struct coroutine_context * context) {
+ context->id = pthread_self();
+
+ check("coroutine_initialize_main:pthread_cond_init",
+ pthread_cond_init(&context->schedule, NULL)
+ );
+
+ context->shared = (struct coroutine_shared*)malloc(sizeof(struct coroutine_shared));
+ assert(context->shared);
+
+ context->shared->main = context;
+ context->shared->count = 1;
+
+ if (DEBUG) {
+ pthread_mutexattr_t attr;
+ pthread_mutexattr_init(&attr);
+ pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK);
+
+ check("coroutine_initialize_main:pthread_mutex_init",
+ pthread_mutex_init(&context->shared->guard, &attr)
+ );
+ } else {
+ check("coroutine_initialize_main:pthread_mutex_init",
+ pthread_mutex_init(&context->shared->guard, NULL)
+ );
+ }
+}
+
+static
+void coroutine_release(struct coroutine_context *context) {
+ if (context->shared) {
+ size_t count = (context->shared->count -= 1);
+
+ if (count == 0) {
+ if (DEBUG) fprintf(stderr, "coroutine_release:pthread_mutex_destroy(%p)\n", &context->shared->guard);
+ pthread_mutex_destroy(&context->shared->guard);
+ free(context->shared);
+ }
+
+ context->shared = NULL;
+
+ if (DEBUG) fprintf(stderr, "coroutine_release:pthread_cond_destroy(%p)\n", &context->schedule);
+ pthread_cond_destroy(&context->schedule);
+ }
+}
+
+void coroutine_initialize(
+ struct coroutine_context *context,
+ coroutine_start start,
+ void *stack,
+ size_t size
+) {
+ assert(start && stack && size >= 1024);
+
+ // We will create the thread when we first transfer, but save the details now:
+ context->shared = NULL;
+ context->start = start;
+ context->stack = stack;
+ context->size = size;
+}
+
+static
+int is_locked(pthread_mutex_t * mutex) {
+ int result = pthread_mutex_trylock(mutex);
+
+ // If we could successfully lock the mutex:
+ if (result == 0) {
+ pthread_mutex_unlock(mutex);
+ // We could lock the mutex, so it wasn't locked:
+ return 0;
+ } else {
+ // Otherwise we couldn't lock it because it's already locked:
+ return 1;
+ }
+}
+
+static
+void coroutine_guard_unlock(void * _context)
+{
+ struct coroutine_context * context = _context;
+
+ if (DEBUG) fprintf(stderr, "coroutine_guard_unlock:pthread_mutex_unlock\n");
+
+ check("coroutine_guard_unlock:pthread_mutex_unlock",
+ pthread_mutex_unlock(&context->shared->guard)
+ );
+}
+
+static
+void coroutine_wait(struct coroutine_context *context)
+{
+ if (DEBUG) fprintf(stderr, "coroutine_wait:pthread_mutex_lock(guard=%p is_locked=%d)\n", &context->shared->guard, is_locked(&context->shared->guard));
+ check("coroutine_wait:pthread_mutex_lock",
+ pthread_mutex_lock(&context->shared->guard)
+ );
+
+ if (DEBUG) fprintf(stderr, "coroutine_wait:pthread_mutex_unlock(guard)\n");
+ pthread_mutex_unlock(&context->shared->guard);
+}
+
+static
+void coroutine_trampoline_cleanup(void *_context) {
+ struct coroutine_context * context = _context;
+ coroutine_release(context);
+}
+
+void * coroutine_trampoline(void * _context)
+{
+ struct coroutine_context * context = _context;
+ assert(context->shared);
+
+ pthread_cleanup_push(coroutine_trampoline_cleanup, context);
+
+ coroutine_wait(context);
+
+ context->start(context->from, context);
+
+ pthread_cleanup_pop(1);
+
+ return NULL;
+}
+
+static
+int coroutine_create_thread(struct coroutine_context *context)
+{
+ int result;
+
+ pthread_attr_t attr;
+ result = pthread_attr_init(&attr);
+ if (result != 0) {
+ return result;
+ }
+
+ result = pthread_attr_setstack(&attr, context->stack, (size_t)context->size);
+ if (result != 0) {
+ pthread_attr_destroy(&attr);
+ return result;
+ }
+
+ result = pthread_cond_init(&context->schedule, NULL);
+ if (result != 0) {
+ pthread_attr_destroy(&attr);
+ return result;
+ }
+
+ result = pthread_create(&context->id, &attr, coroutine_trampoline, context);
+ if (result != 0) {
+ pthread_attr_destroy(&attr);
+ if (DEBUG) fprintf(stderr, "coroutine_create_thread:pthread_cond_destroy(%p)\n", &context->schedule);
+ pthread_cond_destroy(&context->schedule);
+ return result;
+ }
+
+ context->shared->count += 1;
+
+ return result;
+}
+
+struct coroutine_context * coroutine_transfer(struct coroutine_context * current, struct coroutine_context * target)
+{
+ assert(current->shared);
+
+ struct coroutine_context * previous = target->from;
+ target->from = current;
+
+ if (DEBUG) fprintf(stderr, "coroutine_transfer:pthread_mutex_lock(guard=%p is_locked=%d)\n", &current->shared->guard, is_locked(&current->shared->guard));
+ pthread_mutex_lock(&current->shared->guard);
+ pthread_cleanup_push(coroutine_guard_unlock, current);
+
+ // First transfer:
+ if (target->shared == NULL) {
+ target->shared = current->shared;
+
+ if (DEBUG) fprintf(stderr, "coroutine_transfer:coroutine_create_thread...\n");
+ if (coroutine_create_thread(target)) {
+ if (DEBUG) fprintf(stderr, "coroutine_transfer:coroutine_create_thread failed\n");
+ target->shared = NULL;
+ target->from = previous;
+ return NULL;
+ }
+ } else {
+ if (DEBUG) fprintf(stderr, "coroutine_transfer:pthread_cond_signal(target)\n");
+ pthread_cond_signal(&target->schedule);
+ }
+
+ // A side effect of acting upon a cancellation request while in a condition wait is that the mutex is (in effect) re-acquired before calling the first cancellation cleanup handler. If cancelled, pthread_cond_wait immediately invokes cleanup handlers.
+ if (DEBUG) fprintf(stderr, "coroutine_transfer:pthread_cond_wait(schedule=%p, guard=%p, is_locked=%d)\n", &current->schedule, &current->shared->guard, is_locked(&current->shared->guard));
+ check("coroutine_transfer:pthread_cond_wait",
+ pthread_cond_wait(&current->schedule, &current->shared->guard)
+ );
+
+ if (DEBUG) fprintf(stderr, "coroutine_transfer:pthread_cleanup_pop\n");
+ pthread_cleanup_pop(1);
+
+#ifdef __FreeBSD__
+ // Apparently required for FreeBSD:
+ pthread_testcancel();
+#endif
+
+ target->from = previous;
+
+ return target;
+}
+
+static
+void coroutine_join(struct coroutine_context * context) {
+ if (DEBUG) fprintf(stderr, "coroutine_join:pthread_cancel\n");
+ int result = pthread_cancel(context->id);
+ if (result == -1 && errno == ESRCH) {
+ // The thread may be dead due to fork, so it cannot be joined and this doesn't represent a real error:
+ return;
+ }
+
+ check("coroutine_join:pthread_cancel", result);
+
+ if (DEBUG) fprintf(stderr, "coroutine_join:pthread_join\n");
+ check("coroutine_join:pthread_join",
+ pthread_join(context->id, NULL)
+ );
+
+ if (DEBUG) fprintf(stderr, "coroutine_join:pthread_join done\n");
+}
+
+void coroutine_destroy(struct coroutine_context * context)
+{
+ if (DEBUG) fprintf(stderr, "coroutine_destroy\n");
+
+ assert(context);
+
+ // We are already destroyed or never created:
+ if (context->shared == NULL) return;
+
+ if (context == context->shared->main) {
+ context->shared->main = NULL;
+ coroutine_release(context);
+ } else {
+ coroutine_join(context);
+ assert(context->shared == NULL);
+ }
+}
diff --git a/coroutine/pthread/Context.h b/coroutine/pthread/Context.h
new file mode 100644
index 0000000..6d551ee
--- /dev/null
+++ b/coroutine/pthread/Context.h
@@ -0,0 +1,63 @@
+/*
+ * This file is part of the "Coroutine" project and released under the MIT License.
+ *
+ * Created by Samuel Williams on 24/6/2021.
+ * Copyright, 2021, by Samuel Williams.
+*/
+
+#pragma once
+
+#include <assert.h>
+#include <stddef.h>
+#include <pthread.h>
+
+#define COROUTINE void
+
+#define COROUTINE_PTHREAD_CONTEXT
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#if INTPTR_MAX <= INT32_MAX
+#define COROUTINE_LIMITED_ADDRESS_SPACE
+#endif
+#endif
+
+struct coroutine_context;
+
+struct coroutine_shared
+{
+ pthread_mutex_t guard;
+ struct coroutine_context * main;
+
+ size_t count;
+};
+
+typedef COROUTINE(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self);
+
+struct coroutine_context
+{
+ struct coroutine_shared * shared;
+
+ coroutine_start start;
+ void *argument;
+
+ void *stack;
+ size_t size;
+
+ pthread_t id;
+ pthread_cond_t schedule;
+ struct coroutine_context * from;
+};
+
+void coroutine_initialize_main(struct coroutine_context * context);
+
+void coroutine_initialize(
+ struct coroutine_context *context,
+ coroutine_start start,
+ void *stack,
+ size_t size
+);
+
+struct coroutine_context * coroutine_transfer(struct coroutine_context * current, struct coroutine_context * target);
+
+void coroutine_destroy(struct coroutine_context * context);
diff --git a/coroutine/riscv64/Context.h b/coroutine/riscv64/Context.h
index 5ec0326..9ce1140 100644
--- a/coroutine/riscv64/Context.h
+++ b/coroutine/riscv64/Context.h
@@ -12,6 +12,7 @@ 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);
diff --git a/coroutine/ucontext/Context.c b/coroutine/ucontext/Context.c
index 9ba76ee..5d728d5 100644
--- a/coroutine/ucontext/Context.c
+++ b/coroutine/ucontext/Context.c
@@ -11,6 +11,7 @@
#if defined(__sun) && !defined(__EXTENSIONS__)
#define __EXTENSIONS__
#endif
+
#include "Context.h"
void coroutine_trampoline(void * _start, void * _context)
diff --git a/coroutine/ucontext/Context.h b/coroutine/ucontext/Context.h
index 39d7ca7..d338d8d 100644
--- a/coroutine/ucontext/Context.h
+++ b/coroutine/ucontext/Context.h
@@ -27,6 +27,7 @@ struct coroutine_context
{
ucontext_t state;
struct coroutine_context * from;
+ void *argument;
};
typedef COROUTINE(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self);
diff --git a/coroutine/win32/Context.h b/coroutine/win32/Context.h
index dd12da6..902fd12 100644
--- a/coroutine/win32/Context.h
+++ b/coroutine/win32/Context.h
@@ -24,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);
diff --git a/coroutine/win64/Context.h b/coroutine/win64/Context.h
index d5834cf..aaa4cae 100644
--- a/coroutine/win64/Context.h
+++ b/coroutine/win64/Context.h
@@ -25,6 +25,7 @@ enum {
struct coroutine_context
{
void **stack_pointer;
+ void *argument;
};
typedef void(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self);
diff --git a/coroutine/x86/Context.h b/coroutine/x86/Context.h
index 1d709fa..d98eaf6 100644
--- a/coroutine/x86/Context.h
+++ b/coroutine/x86/Context.h
@@ -23,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));
diff --git a/coverage/README b/coverage/README
index 78a0182..a4c3dfc 100644
--- a/coverage/README
+++ b/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/debug_counter.h b/debug_counter.h
index 9452f4c..3cf80cc 100644
--- a/debug_counter.h
+++ b/debug_counter.h
@@ -24,6 +24,12 @@ 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
diff --git a/defs/gmake.mk b/defs/gmake.mk
index 316ff18..dc749b8 100644
--- a/defs/gmake.mk
+++ b/defs/gmake.mk
@@ -9,6 +9,7 @@ nproc = $(subst -j,,$(filter -j%,$(MFLAGS)))
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
diff --git a/dir.c b/dir.c
index 812cb7c..8ac10d2 100644
--- a/dir.c
+++ b/dir.c
@@ -2955,7 +2955,7 @@ static VALUE
dir_s_glob(rb_execution_context_t *ec, VALUE obj, VALUE str, VALUE rflags, VALUE base, VALUE sort)
{
VALUE ary = rb_check_array_type(str);
- const int flags = NUM2INT(rflags) | dir_glob_option_sort(sort);
+ 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);
@@ -3180,100 +3180,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:
- *
- * <code>*</code>::
- * Matches any file. Can be restricted by other values in the glob.
- * Equivalent to <code>/ .* /x</code> in regexp.
- *
- * <code>*</code>:: Matches all files regular files
- * <code>c*</code>:: Matches all files beginning with <code>c</code>
- * <code>*c</code>:: Matches all files ending with <code>c</code>
- * <code>\*c*</code>:: Matches all files that have <code>c</code> in them
- * (including at the beginning or end).
- *
- * To match hidden files (that start with a <code>.</code> set the
- * File::FNM_DOTMATCH flag.
- *
- * <code>**</code>::
- * Matches directories recursively or files expansively.
- *
- * <code>?</code>::
- * Matches any one character. Equivalent to <code>/.{1}/</code> in regexp.
- *
- * <code>[set]</code>::
- * Matches any one character in +set+. Behaves exactly like character sets
- * in Regexp, including set negation (<code>[^a-z]</code>).
- *
- * <code> \ </code>::
- * Escapes the next metacharacter.
- *
- * <code>{a,b}</code>::
- * Matches pattern a and pattern b if File::FNM_EXTGLOB flag is enabled.
- * Behaves like a Regexp union (<code>(?:a|b)</code>).
- *
- * +flags+ is a bitwise OR of the <code>FNM_XXX</code> constants. The same
- * glob pattern and flags are used by Dir::glob.
- *
- * Examples:
- *
- * File.fnmatch('cat', 'cat') #=> true # match entire string
- * File.fnmatch('cat', 'category') #=> false # only match partial string
- *
- * File.fnmatch('c{at,ub}s', 'cats') #=> false # { } isn't supported by default
- * File.fnmatch('c{at,ub}s', 'cats', File::FNM_EXTGLOB) #=> true # { } is supported on FNM_EXTGLOB
- *
- * File.fnmatch('c?t', 'cat') #=> true # '?' match only 1 character
- * File.fnmatch('c??t', 'cat') #=> false # ditto
- * File.fnmatch('c*', 'cats') #=> true # '*' match 0 or more characters
- * File.fnmatch('c*t', 'c/a/b/t') #=> true # ditto
- * File.fnmatch('ca[a-z]', 'cat') #=> true # inclusive bracket expression
- * File.fnmatch('ca[^t]', 'cat') #=> false # exclusive bracket expression ('^' or '!')
- *
- * File.fnmatch('cat', 'CAT') #=> false # case sensitive
- * File.fnmatch('cat', 'CAT', File::FNM_CASEFOLD) #=> true # case insensitive
- * File.fnmatch('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)
{
@@ -3439,85 +3346,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
- * (<code>config.h</code> and <code>main.rb</code>), the parent
- * directory (<code>..</code>), and the directory itself
- * (<code>.</code>).
- *
- * == What's 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 <tt>.</tt> or <tt>..</tt>.
- * - ::empty?:: Returns whether the given path is an empty directory.
- * - ::entries:: Returns an array of names of the children
- * (both files and directories) of the given directory,
- * including <tt>.</tt> and <tt>..</tt>.
- * - ::exist?:: Returns whether the given path is a directory.
- * - ::getwd (aliased as #pwd):: Returns the path to the current working directory.
- * - ::glob:: Returns an array of file paths matching the given pattern and flags.
- * - ::home:: Returns the home directory path for a given user or the current user.
- * - #children:: Returns an array of names of the children
- * (both files and directories) of +self+,
- * but not including <tt>.</tt> or <tt>..</tt>.
- * - #fileno:: Returns the integer file descriptor for +self+.
- * - #path (aliased as #to_path):: Returns the path used to create +self+.
- * - #tell (aliased as #pos):: Returns the integer position
- * in the directory stream for +self+.
- *
- * === Iterating
- *
- * - ::each_child:: Calls the given block with each entry in the given directory,
- * but not including <tt>.</tt> or <tt>..</tt>.
- * - ::foreach:: Calls the given block with each entryin the given directory,
- * including <tt>.</tt> and <tt>..</tt>.
- * - #each:: Calls the given block with each entry in +self+,
- * including <tt>.</tt> and <tt>..</tt>.
- * - #each_child:: Calls the given block with each entry in +self+,
- * but not including <tt>.</tt> or <tt>..</tt>.
- *
- * === Other
- *
- * - ::mkdir:: Creates a directory at the given path, with optional permissions.
- * - ::new:: Returns a new \Dir for the given path, with optional encoding.
- * - ::open:: Same as ::new, but if a block is given, yields the \Dir to the block,
- * closing it upon block exit.
- * - ::unlink (aliased as ::delete and ::rmdir):: Removes the given directory.
- * - #inspect:: Returns a string description of +self+.
- *
- */
void
Init_Dir(void)
{
diff --git a/dir.rb b/dir.rb
index eb46305..4d27b00 100644
--- a/dir.rb
+++ b/dir.rb
@@ -1,3 +1,79 @@
+# 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
+# (<code>config.h</code> and <code>main.rb</code>), the parent
+# directory (<code>..</code>), and the directory itself
+# (<code>.</code>).
+#
+# == What's 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 <tt>.</tt> or <tt>..</tt>.
+# - ::empty?:: Returns whether the given path is an empty directory.
+# - ::entries:: Returns an array of names of the children
+# (both files and directories) of the given directory,
+# including <tt>.</tt> and <tt>..</tt>.
+# - ::exist?:: Returns whether the given path is a directory.
+# - ::getwd (aliased as #pwd):: Returns the path to the current working directory.
+# - ::glob:: Returns an array of file paths matching the given pattern and flags.
+# - ::home:: Returns the home directory path for a given user or the current user.
+# - #children:: Returns an array of names of the children
+# (both files and directories) of +self+,
+# but not including <tt>.</tt> or <tt>..</tt>.
+# - #fileno:: Returns the integer file descriptor for +self+.
+# - #path (aliased as #to_path):: Returns the path used to create +self+.
+# - #tell (aliased as #pos):: Returns the integer position
+# in the directory stream for +self+.
+#
+# === Iterating
+#
+# - ::each_child:: Calls the given block with each entry in the given directory,
+# but not including <tt>.</tt> or <tt>..</tt>.
+# - ::foreach:: Calls the given block with each entryin the given directory,
+# including <tt>.</tt> and <tt>..</tt>.
+# - #each:: Calls the given block with each entry in +self+,
+# including <tt>.</tt> and <tt>..</tt>.
+# - #each_child:: Calls the given block with each entry in +self+,
+# but not including <tt>.</tt> or <tt>..</tt>.
+#
+# === Other
+#
+# - ::mkdir:: Creates a directory at the given path, with optional permissions.
+# - ::new:: Returns a new \Dir for the given path, with optional encoding.
+# - ::open:: Same as ::new, but if a block is given, yields the \Dir to the block,
+# closing it upon block exit.
+# - ::unlink (aliased as ::delete and ::rmdir):: Removes the given directory.
+# - #inspect:: Returns a string description of +self+.
class Dir
# Dir.open( string ) -> aDir
# Dir.open( string, encoding: enc ) -> aDir
@@ -68,7 +144,7 @@ class Dir
#
# <code>*</code>::
# Matches any file. Can be restricted by other values in the glob.
- # Equivalent to <code>/ .* /mx</code> in regexp.
+ # Equivalent to <code>/.*/mx</code> in regexp.
#
# <code>*</code>:: Matches all files
# <code>c*</code>:: Matches all files beginning with <code>c</code>
@@ -99,7 +175,7 @@ class Dir
# Matching literals may be more than one character in length. More than
# two literals may be specified.
#
- # <code> \\ </code>::
+ # <code>\\</code>::
# Escapes the next metacharacter.
#
# Note that this means you cannot use backslash on windows as part of a
@@ -134,3 +210,95 @@ class Dir
Primitive.dir_s_glob(pattern, flags, base, sort)
end
end
+
+class << File
+ # call-seq:
+ # File.fnmatch( pattern, path, [flags] ) -> (true or false)
+ # File.fnmatch?( pattern, path, [flags] ) -> (true or false)
+ #
+ # Returns true if +path+ matches against +pattern+. The pattern is not a
+ # regular expression; instead it follows rules similar to shell filename
+ # globbing. It may contain the following metacharacters:
+ #
+ # <code>*</code>::
+ # Matches any file. Can be restricted by other values in the glob.
+ # Equivalent to <code>/.*/x</code> in regexp.
+ #
+ # <code>*</code>:: Matches all files regular files
+ # <code>c*</code>:: Matches all files beginning with <code>c</code>
+ # <code>*c</code>:: Matches all files ending with <code>c</code>
+ # <code>\*c*</code>:: Matches all files that have <code>c</code> in them
+ # (including at the beginning or end).
+ #
+ # To match hidden files (that start with a <code>.</code> set the
+ # File::FNM_DOTMATCH flag.
+ #
+ # <code>**</code>::
+ # Matches directories recursively or files expansively.
+ #
+ # <code>?</code>::
+ # Matches any one character. Equivalent to <code>/.{1}/</code> in regexp.
+ #
+ # <code>[set]</code>::
+ # Matches any one character in +set+. Behaves exactly like character sets
+ # in Regexp, including set negation (<code>[^a-z]</code>).
+ #
+ # <code>\\</code>::
+ # Escapes the next metacharacter.
+ #
+ # <code>{a,b}</code>::
+ # Matches pattern a and pattern b if File::FNM_EXTGLOB flag is enabled.
+ # Behaves like a Regexp union (<code>(?:a|b)</code>).
+ #
+ # +flags+ is a bitwise OR of the <code>FNM_XXX</code> constants. The same
+ # glob pattern and flags are used by Dir::glob.
+ #
+ # Examples:
+ #
+ # File.fnmatch('cat', 'cat') #=> true # match entire string
+ # File.fnmatch('cat', 'category') #=> false # only match partial string
+ #
+ # File.fnmatch('c{at,ub}s', 'cats') #=> false # { } isn't supported by default
+ # File.fnmatch('c{at,ub}s', 'cats', File::FNM_EXTGLOB) #=> true # { } is supported on FNM_EXTGLOB
+ #
+ # File.fnmatch('c?t', 'cat') #=> true # '?' match only 1 character
+ # File.fnmatch('c??t', 'cat') #=> false # ditto
+ # File.fnmatch('c*', 'cats') #=> true # '*' match 0 or more characters
+ # File.fnmatch('c*t', 'c/a/b/t') #=> true # ditto
+ # File.fnmatch('ca[a-z]', 'cat') #=> true # inclusive bracket expression
+ # File.fnmatch('ca[^t]', 'cat') #=> false # exclusive bracket expression ('^' or '!')
+ #
+ # File.fnmatch('cat', 'CAT') #=> false # case sensitive
+ # File.fnmatch('cat', 'CAT', File::FNM_CASEFOLD) #=> true # case insensitive
+ # File.fnmatch('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/doc/documentation_guide.rdoc b/doc/documentation_guide.rdoc
new file mode 100644
index 0000000..38438e9
--- /dev/null
+++ b/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 <tt>irb</tt>
+
+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 <tt># => ...</tt> 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 <tt>\Array</tt>.
+
+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 <tt>What's Here</tt>.
+- 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 <tt>call-seq</tt>, 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 <tt>call-seq</tt>
+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 <tt>Array#count</tt>, 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 <tt>{|x| ... }</tt>, not <tt>{|x| block }</tt> or <tt>{|x| code }</tt>.
+
+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 <tt>Array#count</tt>, 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/doc/fiber.md b/doc/fiber.md
index 840bebd..9baab4e 100644
--- a/doc/fiber.md
+++ b/doc/fiber.md
@@ -90,6 +90,13 @@ class Scheduler
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.
diff --git a/doc/irb/irb.rd.ja b/doc/irb/irb.rd.ja
index fd03b35..9d03651 100644
--- a/doc/irb/irb.rd.ja
+++ b/doc/irb/irb.rd.ja
@@ -144,12 +144,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"
}
となっています.
diff --git a/doc/maintainers.rdoc b/doc/maintainers.rdoc
index fbd0ed8..dc893ec 100644
--- a/doc/maintainers.rdoc
+++ b/doc/maintainers.rdoc
@@ -85,7 +85,7 @@ Yukihiro Matsumoto (matz)
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]
@@ -150,34 +150,14 @@ Yukihiro Matsumoto (matz)
Naotoshi Seo (sonots)
https://github.com/ruby/logger
https://rubygems.org/gems/logger
-[lib/matrix.rb]
- Marc-André 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/ftp.rb]
- Shugo Maeda (shugo)
- https://github.com/ruby/net-ftp
- https://rubygems.org/gems/net-ftp
[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/imap.rb]
- Shugo Maeda (shugo)
- https://github.com/ruby/net-imap
- https://rubygems.org/gems/net-imap
-[lib/net/pop.rb]
- _unmaintained_
- https://github.com/ruby/net-pop
- https://rubygems.org/gems/net-pop
-[lib/net/smtp.rb]
- TOMITA Masahiro (tmtm)
- https://github.com/ruby/net-smtp
- https://rubygems.org/gems/net-smtp
[lib/net/protocol.rb]
_unmaintained_
https://github.com/ruby/net-protocol
@@ -205,10 +185,6 @@ Yukihiro Matsumoto (matz)
Tanaka Akira (akr)
https://github.com/ruby/prettyprint
https://rubygems.org/gems/prettyprint
-[lib/prime.rb]
- Marc-André Lafortune (marcandre)
- https://github.com/ruby/prime
- https://rubygems.org/gems/prime
[lib/pstore.rb]
_unmaintained_
https://github.com/ruby/pstore
@@ -277,10 +253,6 @@ Yukihiro Matsumoto (matz)
_unmaintained_
https://github.com/ruby/tmpdir
https://rubygems.org/gems/tmpdir
-[lib/tracer.rb]
- Keiju ISHITSUKA (keiju)
- https://github.com/ruby/tracer
- https://rubygems.org/gems/tracer
[lib/tsort.rb]
Tanaka Akira (akr)
https://github.com/ruby/tsort
@@ -316,10 +288,6 @@ Yukihiro Matsumoto (matz)
_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
@@ -332,10 +300,6 @@ Yukihiro Matsumoto (matz)
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
@@ -411,6 +375,18 @@ Yukihiro Matsumoto (matz)
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]
diff --git a/doc/method_documentation.rdoc b/doc/method_documentation.rdoc
deleted file mode 100644
index 83cd1ad..0000000
--- a/doc/method_documentation.rdoc
+++ /dev/null
@@ -1,211 +0,0 @@
-= Method Documentation Guide
-
-This guide discusses recommendations for documenting methods for Ruby core
-classes and classes in the standard library.
-
-== Goal
-
-The goal when documenting a method is to impart the most important
-information about the method in the least amount of time. A reader
-of the method documentation should be able to quickly understand
-the purpose of the method and how to use it. Providing too little
-information about the method is not good, but providing unimportant
-information or unnecessary examples is not good either. Use your
-judgment about what the user of the method needs to know to use the
-method correctly.
-
-== General Structure
-
-The general structure of the method documentation should be:
-
-* call-seq (for methods written in C)
-* Synopsis (Short Description)
-* Details and Examples
-* Argument Description (if necessary)
-* Corner Cases and Exceptions
-* Aliases
-* Related Methods (optional)
-
-== call-seq (for methods written in C)
-
-For methods written in C, RDoc cannot determine what arguments
-the method accepts, so those need to be documented using a
-<tt>call-seq</tt>. Here's an example <tt>call-seq</tt>:
-
- * call-seq:
- * array.count -> integer
- * array.count(obj) -> integer
- * array.count {|element| ... } -> integer
-
-When creating the <tt>call-seq</tt>, 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 <tt>call-seq</tt>
-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 <tt>Array#count</tt>, use separate lines if the
-behavior is different if the argument is omitted.
-
-Omit aliases from the call-seq.
-
-== 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 <tt>Array#count</tt>, 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 an RDoc
-definition list:
-
-argument_name1 :: type and description
-argument_name2 :: type and description
-
-== 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 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
-#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.
-
-== Use of \English
-
-Readers of this documentation may not be native speakers of \English.
-Documentation should be written with this in mind.
-
-Use short sentences and group them into paragraphs that cover a single
-topic. Avoid complex verb tenses, excessive comma-separated phrases,
-and idioms.
-
-When writing documentation, define unusual or critical concepts in
-simple language. Provide links to authoritative sources, or add a
-general description to the top-level documentation for the class or
-module.
-
-== Formatting
-
-Extraneous formatting such as headings and horizontal lines should be
-avoided in general. It is best to keep the formatting as simple as
-possible. Only use headings and other formatting for the most complex
-cases where the method documentation is very long due to the complexity
-of the method.
-
-Methods are documented using RDoc syntax. See the
-{RDoc Markup Reference}[https://docs.ruby-lang.org/en/master/RDoc/Markup.html#class-RDoc::Markup-label-RDoc+Markup+Reference]
-for more information on formatting with RDoc syntax.
-
-=== Output from irb
-
-Consider whether <tt># => ...</tt> in successive codeblock lines should be aligned.
-Alignment may sometimes aid readability.
-
-=== Lists
-
-A list should be preceded by and followed by a blank line.
-This is unnecessary for the HTML output, but helps in the +ri+ output.
-
-=== Call-Seq
-
-A +call-seq+ block should have <tt>{|x| ... }</tt>, not <tt>{|x| block }</tt> or <tt>{|x| code }</tt>.
-
-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+.
-
-=== Auto-Links
-
-In general, RDoc's auto-linking should not be suppressed.
-For example, we should write +Array+, not <tt>\Array</tt>.
-
-We might consider whether to suppress when:
-- The word in question does not refer to a Ruby class (e.g., some uses of _Class_ or _English_).
-- The reference is to the current class (e.g., _Array_ in the documentation for class +Array+)..
diff --git a/doc/regexp.rdoc b/doc/regexp.rdoc
index e25f10f..5ec6490 100644
--- a/doc/regexp.rdoc
+++ b/doc/regexp.rdoc
@@ -372,8 +372,8 @@ then matches a literal <i>)</i>:
== Alternation
-The vertical bar metacharacter (<tt>|</tt>) combines two expressions into
-a single one that matches either of the expressions. Each expression is an
+The vertical bar metacharacter (<tt>|</tt>) combines several expressions into
+a single one that matches any of the expressions. Each expression is an
<i>alternative</i>.
/\w(and|or)\w/.match("Feliformia") #=> #<MatchData "form" 1:"or">
diff --git a/doc/standard_library.rdoc b/doc/standard_library.rdoc
index e4418ae..1d35801 100644
--- a/doc/standard_library.rdoc
+++ b/doc/standard_library.rdoc
@@ -45,20 +45,14 @@ 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::FTP:: Support for the File Transfer Protocol
Net::HTTP:: HTTP client api for Ruby
-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
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
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
-Prime:: Prime numbers and factorization library
PStore:: Implements a file based persistence mechanism based on a Hash
Resolv:: Thread-aware DNS resolver library in Ruby
resolv-replace.rb:: Replace Socket DNS with Resolv
@@ -72,7 +66,6 @@ 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
tmpdir.rb:: Extends the Dir class to manage the OS temporary file path
-Tracer:: Outputs a source level execution trace of a Ruby program
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
@@ -84,12 +77,10 @@ WeakRef:: Allows a referenced object to be garbage-collected
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:: Extensions for Ruby IO class, including #wait, #nonblock and ::console
JSON:: Implements Javascript Object Notation for Ruby
NKF:: Ruby extension for Network Kanji Filter
@@ -114,5 +105,11 @@ Rake:: Ruby build program with capabilities similar to make
Test::Unit:: A compatibility layer for MiniTest
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/doc/syntax/literals.rdoc b/doc/syntax/literals.rdoc
index d6d6778..cfdbb71 100644
--- a/doc/syntax/literals.rdoc
+++ b/doc/syntax/literals.rdoc
@@ -220,7 +220,7 @@ You may indent the ending identifier if you place a "-" after <tt><<</tt>:
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.
diff --git a/doc/syntax/pattern_matching.rdoc b/doc/syntax/pattern_matching.rdoc
index 6975636..f80703d 100644
--- a/doc/syntax/pattern_matching.rdoc
+++ b/doc/syntax/pattern_matching.rdoc
@@ -312,6 +312,33 @@ One important usage of variable pinning is specifying that the same value should
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).
@@ -414,7 +441,7 @@ Additionally, when matching custom classes, the expected class can be specified
== Current feature status
-As of Ruby 3.0, one-line pattern matching and 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:
+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!
@@ -449,7 +476,10 @@ Approximate syntax is:
value_pattern: literal
| Constant
- | ^variable
+ | ^local_variable
+ | ^instance_variable
+ | ^class_variable
+ | ^global_variable
| ^(expression)
variable_pattern: variable
diff --git a/enc/depend b/enc/depend
index 892e961..7034d9c 100644
--- a/enc/depend
+++ b/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
@@ -156,24 +157,23 @@ 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 : -%>
diff --git a/enc/unicode/12.1.0/casefold.h b/enc/unicode/13.0.0/casefold.h
index 4c62f0f..39f2260 100644
--- a/enc/unicode/12.1.0/casefold.h
+++ b/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,
- /*0x2c24*/ 947,
- /*0x1ea6*/ 670,
- /*0x037f*/ 233,
- -1, -1, -1, -1, -1,
- /*0x1ca6*/ 561,
- /*0x10ca6*/ 1374,
- /*0x1f08*/ 715,
- /*0x13fb*/ 527,
- /*0x1e00*/ 585,
- /*0x2ca4*/ 991,
- /*0x0508*/ 425,
- /*0x1f6d*/ 764,
- /*0x1f09*/ 716,
- /*0xfb04*/ 1226,
- /*0x1041a*/ 1286,
- /*0x1f9a*/ 793,
- /*0x041a*/ 323,
- /*0x021a*/ 203,
- /*0x011a*/ 70,
- /*0xab9a*/ 1184,
- -1, -1,
- /*0xa7a4*/ 1120,
- /*0x039a*/ 251,
- /*0x1ea4*/ 669,
- /*0x1f0a*/ 717,
- /*0x2c1a*/ 937,
- /*0xfb02*/ 1224,
- /*0x048a*/ 362,
- /*0x050a*/ 426,
- -1,
- /*0x1ca4*/ 559,
- /*0x10ca4*/ 1372,
- /*0x017d*/ 119,
- /*0x10c7*/ 522,
- /*0x1e18*/ 597,
- -1, -1,
- /*0x03fd*/ 294,
- /*0x2c9a*/ 986,
- -1, -1,
- /*0x0480*/ 361,
- /*0x0500*/ 421,
- /*0x1fd3*/ 837,
- -1,
- /*0x1f6f*/ 766,
+ /*0x10424*/ 1299,
+ /*0x2ca6*/ 992,
+ /*0xaba4*/ 1197,
+ /*0x051a*/ 434,
+ /*0x0208*/ 194,
/*0x1feb*/ 852,
- /*0x0053*/ 17,
- /*0x1e16*/ 596,
- -1,
- /*0x01d3*/ 166,
- /*0xa79a*/ 1115,
-1,
- /*0x1e9a*/ 664,
- -1, -1,
- /*0x13fd*/ 529,
+ /*0x2c24*/ 947,
+ /*0xa7a6*/ 1121,
+ /*0x1ea4*/ 669,
+ /*0x1e24*/ 603,
+ /*0x10ca6*/ 1377,
+ -1, -1, -1,
/*0x2c6b*/ 964,
-1,
- /*0x10a7*/ 491,
- /*0x1c9a*/ 549,
- /*0x10c9a*/ 1362,
+ /*0x1c80*/ 530,
+ /*0x2ca4*/ 991,
+ /*0x2c6d*/ 965,
+ /*0x0516*/ 432,
+ /*0x020a*/ 195,
-1,
- /*0x00df*/ 56,
- /*0x1e91a*/ 1477,
- /*0x1f18*/ 723,
- /*0x1ff7*/ 858,
+ /*0x03ff*/ 296,
-1,
- /*0x0498*/ 369,
- /*0x0518*/ 433,
+ /*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,
- /*0x01f7*/ 185,
- /*0x03f7*/ 291,
- /*0x1e06*/ 588,
- /*0x1f5f*/ 758,
+ /*0x0506*/ 424,
-1,
- /*0x00dd*/ 54,
+ /*0x037f*/ 233,
+ -1, -1, -1, -1,
+ /*0x021a*/ 203,
+ /*0x1f9e*/ 797,
+ /*0x041e*/ 327,
+ /*0x011e*/ 72,
+ /*0x1041e*/ 1293,
+ /*0x10c83*/ 1342,
+ /*0xab9e*/ 1191,
+ /*0x1c96*/ 545,
-1, -1,
- /*0x00c7*/ 33,
- /*0x0496*/ 368,
- /*0x0516*/ 432,
- /*0x10412*/ 1278,
- /*0x1f92*/ 785,
- /*0x0412*/ 315,
- /*0x0212*/ 199,
- /*0x0112*/ 66,
- /*0xab92*/ 1176,
- /*0x24c7*/ 902,
- /*0x1f5d*/ 757,
- -1,
- /*0x0392*/ 243,
- -1,
- /*0x104c7*/ 1323,
- /*0x2c12*/ 929,
- /*0x04c7*/ 393,
- /*0x0547*/ 467,
+ /*0x0512*/ 430,
+ /*0x2c1e*/ 941,
+ /*0x10a0*/ 484,
+ /*0x1e9e*/ 666,
+ /*0x1e1e*/ 600,
-1, -1,
- /*0x1fb2*/ 815,
+ /*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,
- /*0x0232*/ 215,
- /*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,
+ /*0x10c9e*/ 1369,
-1,
- /*0x1e92*/ 658,
- /*0x2cb2*/ 998,
- /*0x1faf*/ 814,
- /*0x042f*/ 344,
+ /*0x0210*/ 198,
+ -1,
+ /*0x1e908*/ 1462,
+ -1, -1,
+ /*0x2c94*/ 983,
+ /*0x1f08*/ 715,
+ /*0x1c86*/ 536,
+ /*0x1e909*/ 1463,
+ /*0x2165*/ 873,
+ /*0x1f69*/ 760,
+ /*0x10a6*/ 490,
+ /*0x1f09*/ 716,
+ /*0x2169*/ 877,
+ /*0x048a*/ 362,
+ /*0x10c94*/ 1359,
+ /*0x039e*/ 255,
+ /*0x0206*/ 193,
+ /*0x2161*/ 869,
+ /*0x1e90a*/ 1464,
+ /*0x0480*/ 361,
-1, -1,
- /*0xabaf*/ 1205,
+ /*0x1f0a*/ 717,
/*0x1c92*/ 541,
- /*0x10c92*/ 1354,
- /*0x01af*/ 149,
- -1,
- /*0x1e912*/ 1469,
- /*0x0494*/ 367,
- /*0x0514*/ 431,
- /*0xa7b2*/ 1130,
- -1,
- /*0x1eb2*/ 676,
+ /*0x1e900*/ 1454,
+ /*0x0526*/ 440,
-1,
- /*0x1fe9*/ 850,
- /*0x1e04*/ 587,
+ /*0x10a4*/ 488,
-1, -1, -1,
- /*0x1cb2*/ 573,
- /*0x10cb2*/ 1386,
- -1,
- /*0x0490*/ 365,
- /*0x0510*/ 429,
+ /*0x1f5f*/ 758,
+ /*0x0394*/ 245,
+ /*0x0212*/ 199,
+ -1, -1,
+ /*0x0498*/ 369,
+ /*0x1ffb*/ 862,
-1,
- /*0x2c69*/ 963,
- /*0x10a0*/ 484,
+ /*0x017b*/ 118,
+ /*0x1ca0*/ 555,
+ /*0x1e918*/ 1478,
+ /*0x0524*/ 439,
-1, -1,
- /*0x1e02*/ 586,
- /*0x1041c*/ 1288,
+ /*0x1f18*/ 723,
/*0x1f9c*/ 795,
/*0x041c*/ 325,
- /*0x021c*/ 204,
/*0x011c*/ 71,
- /*0xab9c*/ 1186,
- -1, -1,
- /*0x019c*/ 138,
- /*0x039c*/ 253,
- -1, -1,
+ /*0x1041c*/ 1291,
+ /*0x0220*/ 206,
+ /*0xab9c*/ 1189,
+ /*0x017d*/ 119,
+ /*0x049a*/ 370,
+ -1,
+ /*0x13fb*/ 527,
/*0x2c1c*/ 939,
-1,
- /*0x1caf*/ 570,
- /*0x10caf*/ 1383,
- -1, -1, -1, -1,
- /*0x0504*/ 423,
- -1, -1,
- /*0x10a6*/ 490,
+ /*0x1e91a*/ 1480,
+ /*0x1e1c*/ 599,
+ /*0x1f6f*/ 766,
-1,
+ /*0x1f1a*/ 725,
+ /*0x216f*/ 883,
+ -1, -1, -1,
/*0x2c9c*/ 987,
- /*0x1e20*/ 601,
- /*0x1041e*/ 1290,
- /*0x1f9e*/ 797,
- /*0x041e*/ 327,
- /*0x021e*/ 205,
- /*0x011e*/ 72,
- /*0xab9e*/ 1188,
+ /*0x13fd*/ 529,
-1,
- /*0x0502*/ 422,
- /*0x0470*/ 353,
- /*0x039e*/ 255,
- /*0x0170*/ 112,
- /*0xa79c*/ 1116,
- /*0x2c1e*/ 941,
+ /*0x0496*/ 368,
+ /*0x2167*/ 875,
-1,
- /*0x01f0*/ 180,
- /*0x03f0*/ 287,
+ /*0x1ca6*/ 561,
+ /*0xa79c*/ 1116,
+ /*0x1e916*/ 1476,
+ /*0x1fdb*/ 843,
+ /*0x10c9c*/ 1367,
-1, -1,
- /*0x2c70*/ 968,
+ /*0x2163*/ 871,
-1,
- /*0x1c9c*/ 551,
- /*0x10c9c*/ 1364,
+ /*0x00db*/ 52,
+ /*0x0226*/ 209,
+ /*0x1faa*/ 809,
+ /*0x042a*/ 339,
+ /*0x012a*/ 78,
+ /*0x0490*/ 365,
-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,
- -1, -1,
- /*0x1e91e*/ 1481,
- /*0x2ca2*/ 990,
- /*0x1e24*/ 603,
- /*0x1040e*/ 1274,
+ /*0xabaa*/ 1203,
+ /*0x1ca4*/ 559,
+ -1,
+ /*0x1e910*/ 1470,
+ -1,
+ /*0x2c2a*/ 953,
+ /*0x039c*/ 253,
+ /*0x1eaa*/ 672,
+ /*0x1e2a*/ 606,
+ /*0x1f5d*/ 757,
+ /*0x03fd*/ 294,
+ /*0x0224*/ 208,
/*0x1f8e*/ 781,
/*0x040e*/ 311,
- /*0x020e*/ 197,
/*0x010e*/ 64,
- /*0xab8e*/ 1172,
- /*0x04a6*/ 376,
- /*0x0526*/ 440,
- /*0x018e*/ 129,
- /*0x038e*/ 239,
- /*0xff27*/ 1240,
- /*0xa7a2*/ 1119,
+ /*0x1040e*/ 1277,
+ /*0x2caa*/ 994,
+ /*0xab8e*/ 1175,
+ /*0x051e*/ 436,
+ -1,
+ /*0x1e906*/ 1460,
+ -1,
/*0x2c0e*/ 925,
- /*0x1ea2*/ 668,
+ /*0xa7aa*/ 1123,
+ /*0x1e8e*/ 656,
+ /*0x1e0e*/ 592,
+ /*0x10caa*/ 1381,
+ -1, -1, -1, -1, -1,
+ /*0x0492*/ 366,
+ /*0x2c8e*/ 980,
-1,
- /*0x1faa*/ 809,
- /*0x042a*/ 339,
- /*0x022a*/ 211,
- /*0x012a*/ 78,
- /*0xabaa*/ 1200,
- /*0x1ca2*/ 557,
- /*0x10ca2*/ 1370,
+ /*0x0514*/ 431,
+ -1,
+ /*0x1e912*/ 1472,
+ -1,
+ /*0x1c83*/ 533,
-1,
+ /*0x0189*/ 126,
+ /*0x01f1*/ 181,
+ /*0x10c8e*/ 1353,
/*0x03aa*/ 266,
-1,
- /*0x2c8e*/ 980,
- /*0x2c2a*/ 953,
+ /*0x1faf*/ 814,
+ /*0x042f*/ 344,
+ /*0xa779*/ 1101,
+ /*0x04a0*/ 373,
+ -1,
+ /*0xabaf*/ 1208,
+ /*0x018a*/ 127,
+ -1,
+ /*0x1e920*/ 1486,
-1, -1,
- /*0x1e1a*/ 598,
- -1, -1, -1,
- /*0x04a4*/ 375,
- /*0x0524*/ 439,
+ /*0x1f84*/ 771,
+ /*0x0404*/ 301,
+ /*0x0104*/ 59,
+ /*0x10404*/ 1267,
+ /*0x038e*/ 239,
+ /*0xab84*/ 1165,
-1, -1, -1,
- /*0x0370*/ 230,
- /*0x2caa*/ 994,
- /*0x1e8e*/ 656,
+ /*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,
- /*0x022e*/ 213,
/*0x012e*/ 80,
- /*0xabae*/ 1204,
- -1,
- /*0x10c8e*/ 1350,
- /*0x01ae*/ 148,
- -1,
- /*0x1e90e*/ 1465,
- /*0xa7aa*/ 1123,
+ /*0x04a6*/ 376,
+ /*0x1c94*/ 543,
+ /*0xabae*/ 1207,
+ /*0xa784*/ 1107,
+ -1, -1,
+ /*0x10c84*/ 1343,
/*0x2c2e*/ 957,
- /*0x1eaa*/ 672,
- -1, -1, -1, -1, -1,
- /*0x1f1a*/ 725,
- /*0x1caa*/ 565,
- /*0x10caa*/ 1378,
- /*0x049a*/ 370,
- /*0x051a*/ 434,
-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,
+ /*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,
+ /*0xaba7*/ 1200,
+ -1, -1,
+ /*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,
- /*0x022c*/ 212,
/*0x012c*/ 79,
- /*0xabac*/ 1202,
- -1, -1,
- /*0x01ac*/ 147,
- /*0x2165*/ 873,
- /*0x00d3*/ 45,
- /*0x2167*/ 875,
+ /*0x049e*/ 372,
+ /*0x10ca7*/ 1378,
+ /*0xabac*/ 1205,
+ /*0xfb00*/ 1225,
+ /*0x2ca2*/ 990,
+ /*0x1e91e*/ 1484,
+ -1,
/*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,
+ /*0x10af*/ 499,
+ /*0x1eac*/ 673,
+ /*0x1e2c*/ 607,
+ /*0xa7a2*/ 1119,
+ -1,
+ /*0x01a0*/ 141,
+ /*0x10ca2*/ 1373,
+ -1, -1,
+ /*0x0494*/ 367,
/*0x2cac*/ 995,
- /*0x1f6b*/ 762,
- /*0x0553*/ 479,
+ /*0x03a7*/ 263,
+ /*0x1caa*/ 565,
+ -1,
+ /*0x1e914*/ 1474,
+ -1,
+ /*0x1fb2*/ 815,
+ /*0xa7ac*/ 1125,
+ /*0x0132*/ 81,
+ -1,
+ /*0x10cac*/ 1383,
+ /*0xabb2*/ 1211,
+ /*0x022a*/ 211,
+ -1, -1, -1,
+ /*0x0504*/ 423,
+ -1,
+ /*0x1eb2*/ 676,
+ /*0x1e32*/ 610,
/*0x1fa8*/ 807,
/*0x0428*/ 337,
- /*0x0228*/ 210,
/*0x0128*/ 77,
- /*0xaba8*/ 1198,
- -1,
- /*0x1e12*/ 594,
+ /*0x10ae*/ 498,
-1,
- /*0x03a8*/ 264,
+ /*0xaba8*/ 1201,
-1,
- /*0xa7ac*/ 1125,
+ /*0x2cb2*/ 998,
+ /*0x01a6*/ 144,
+ /*0x020e*/ 197,
/*0x2c28*/ 951,
- /*0x1eac*/ 673,
- /*0x2cba*/ 1002,
- -1,
- /*0x118a6*/ 1393,
-1,
- /*0x10af*/ 499,
+ /*0x1ea8*/ 671,
+ /*0x1e28*/ 605,
+ /*0xa7b2*/ 1130,
-1,
- /*0x1cac*/ 567,
- /*0x10cac*/ 1380,
+ /*0xfb16*/ 1235,
+ /*0x10cb2*/ 1389,
+ /*0x052e*/ 444,
-1,
- /*0x1e32*/ 610,
- /*0x2163*/ 871,
+ /*0x118a0*/ 1390,
/*0x2ca8*/ 993,
- /*0x216f*/ 883,
- /*0xa7ba*/ 1135,
+ -1, -1,
+ /*0xa726*/ 1065,
+ /*0x01a4*/ 143,
+ -1, -1,
+ /*0xa7a8*/ 1122,
+ /*0xff26*/ 1242,
+ -1,
+ /*0x10ca8*/ 1379,
+ -1,
+ /*0x1caf*/ 570,
+ -1, -1, -1, -1, -1, -1,
+ /*0x0502*/ 422,
+ /*0xa724*/ 1064,
+ /*0x049c*/ 371,
+ -1,
+ /*0x1c84*/ 534,
+ -1,
+ /*0xff24*/ 1240,
+ /*0x1e91c*/ 1482,
+ -1,
+ /*0x03a8*/ 264,
+ /*0xfb06*/ 1231,
+ /*0x1f1c*/ 727,
+ -1,
+ /*0x118a6*/ 1396,
+ /*0x0204*/ 192,
-1,
- /*0x1eba*/ 680,
/*0x1fb8*/ 820,
- -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,
+ /*0x10a7*/ 491,
-1, -1,
- /*0xa688*/ 1053,
- /*0x2cb8*/ 1001,
- /*0x104b2*/ 1302,
- -1,
- /*0x04b2*/ 382,
- /*0x0532*/ 446,
- /*0x1040c*/ 1272,
+ /*0xabb8*/ 1217,
/*0x1f8c*/ 779,
/*0x040c*/ 309,
- /*0x020c*/ 196,
/*0x010c*/ 63,
- /*0xab8c*/ 1170,
+ /*0x1040c*/ 1275,
+ /*0x1cae*/ 569,
+ /*0xab8c*/ 1173,
+ /*0x1eb8*/ 679,
+ /*0x1e38*/ 613,
+ /*0x118a4*/ 1394,
+ /*0x10a2*/ 486,
+ /*0x2c0c*/ 923,
-1,
- /*0xff24*/ 1237,
+ /*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,
+ /*0x052c*/ 443,
+ -1,
+ /*0x1e90e*/ 1468,
+ /*0x2cba*/ 1002,
+ -1, -1,
+ /*0x1f0e*/ 721,
+ /*0x0194*/ 134,
+ -1, -1,
+ /*0xa7ba*/ 1135,
/*0x038c*/ 238,
- /*0x1eb8*/ 679,
- /*0x2cb6*/ 1000,
- /*0x2c0c*/ 923,
- /*0xa68a*/ 1054,
+ /*0x10b2*/ 502,
+ /*0x0130*/ 1489,
+ /*0x01d7*/ 168,
+ -1,
+ /*0xabb0*/ 1209,
+ /*0x1fbe*/ 825,
-1, -1, -1,
- /*0x1cb8*/ 579,
- -1, -1,
+ /*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,
+ /*0x2cbe*/ 1004,
+ /*0xa7b0*/ 1128,
/*0x1f2f*/ 736,
+ /*0x0528*/ 441,
+ /*0x10cb0*/ 1387,
-1,
- /*0x1e1c*/ 599,
- /*0xa779*/ 1101,
- /*0xa7b6*/ 1133,
- /*0x2c8c*/ 979,
- /*0x1eb6*/ 678,
- /*0xa680*/ 1049,
- /*0x0230*/ 214,
- /*0x0130*/ 1486,
- /*0xabb0*/ 1206,
- -1, -1,
- /*0x1cb6*/ 577,
- /*0x03b0*/ 268,
+ /*0x0222*/ 207,
+ /*0xa7be*/ 1137,
-1,
- /*0x1f69*/ 760,
- /*0xa726*/ 1065,
- /*0x1fbc*/ 824,
+ /*0x1e904*/ 1458,
+ /*0x1cac*/ 567,
-1,
- /*0x1e8c*/ 655,
+ /*0x1fb6*/ 818,
-1,
- /*0xabbc*/ 1218,
+ /*0x0136*/ 83,
-1, -1,
- /*0x01bc*/ 156,
- /*0x10a2*/ 486,
+ /*0xabb6*/ 1215,
+ /*0x1f8d*/ 780,
+ /*0x040d*/ 310,
+ /*0x022c*/ 212,
+ /*0x1040d*/ 1276,
+ /*0x03b0*/ 268,
+ /*0xab8d*/ 1174,
+ /*0x1eb6*/ 678,
+ /*0x1e36*/ 612,
+ /*0x04ae*/ 380,
-1,
- /*0x10c8c*/ 1348,
- /*0x1e1e*/ 600,
- /*0x2cb0*/ 997,
- /*0x1e90c*/ 1463,
+ /*0x2c0d*/ 924,
+ -1, -1, -1,
+ /*0x019c*/ 138,
+ /*0x2cb6*/ 1000,
+ /*0xfb03*/ 1228,
+ /*0x1f2e*/ 735,
-1,
- /*0x1f1c*/ 727,
- /*0xa698*/ 1061,
- /*0x1e70*/ 641,
- /*0x049c*/ 371,
- /*0x051c*/ 435,
+ /*0x1cb2*/ 573,
-1,
/*0xa77b*/ 1102,
+ /*0xa7b6*/ 1133,
-1, -1,
- /*0x2cbc*/ 1003,
- /*0xa7b0*/ 1128,
- /*0xa724*/ 1064,
- /*0x1eb0*/ 675,
+ /*0x1fb4*/ 817,
+ /*0x10b8*/ 508,
+ /*0x0134*/ 82,
+ /*0xa78d*/ 1110,
+ /*0x0232*/ 215,
+ /*0xabb4*/ 1213,
+ /*0x10c8d*/ 1352,
+ -1,
+ /*0x1ca8*/ 563,
+ /*0xa77d*/ 1103,
+ /*0x1e902*/ 1456,
+ -1,
+ /*0x1eb4*/ 677,
+ /*0x1e34*/ 611,
-1, -1,
- /*0xa696*/ 1060,
- -1, -1, -1,
- /*0x1cb0*/ 571,
- /*0x10cb0*/ 1384,
+ /*0x0538*/ 452,
-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,
+ /*0x0228*/ 210,
+ /*0x01db*/ 170,
-1,
- /*0x1fbe*/ 825,
- /*0xa686*/ 1052,
- /*0x023e*/ 219,
+ /*0x2cb4*/ 999,
+ /*0x050c*/ 427,
+ -1, -1, -1,
+ /*0x1fbc*/ 824,
+ /*0x10ba*/ 510,
+ /*0xa7b4*/ 1132,
+ /*0xa688*/ 1053,
-1,
- /*0xabbe*/ 1220,
+ /*0xabbc*/ 1221,
+ -1, -1, -1,
+ /*0xfb14*/ 1233,
-1, -1,
- /*0x118b2*/ 1405,
+ /*0x1ebc*/ 681,
+ /*0x1e3c*/ 615,
+ /*0x1f59*/ 755,
-1,
- /*0x1e0e*/ 592,
- /*0x1fb4*/ 817,
+ /*0x053a*/ 454,
+ /*0xa72a*/ 1067,
+ /*0x018e*/ 129,
+ /*0x0055*/ 19,
+ /*0xa68a*/ 1054,
+ /*0x2cbc*/ 1003,
+ /*0xff2a*/ 1246,
-1,
- /*0x2cd2*/ 1014,
- /*0x0134*/ 82,
- /*0xabb4*/ 1210,
- /*0xa77d*/ 1103,
+ /*0x00d5*/ 47,
/*0x04a2*/ 374,
- /*0x0522*/ 438,
- /*0x2ccc*/ 1011,
+ /*0xa680*/ 1049,
+ /*0x24b8*/ 887,
+ /*0xa7bc*/ 1136,
-1,
- /*0x10ae*/ 498,
+ /*0x10b0*/ 500,
+ -1, -1, -1, -1, -1,
+ /*0x10be*/ 514,
+ -1,
+ /*0x1cb8*/ 579,
+ /*0x04ac*/ 379,
+ -1, -1, -1,
+ /*0xa698*/ 1061,
-1, -1,
- /*0x1e2a*/ 606,
- /*0x2cbe*/ 1004,
+ /*0x118aa*/ 1400,
+ -1,
+ /*0x1f2c*/ 733,
-1, -1,
- /*0x1ed2*/ 692,
- /*0xa694*/ 1059,
+ /*0x053e*/ 458,
+ /*0x01af*/ 149,
+ /*0x24ba*/ 889,
+ /*0x020c*/ 196,
+ -1, -1, -1, -1, -1,
+ /*0xa69a*/ 1062,
+ -1, -1,
+ /*0x0184*/ 123,
+ /*0x1cba*/ 581,
-1,
- /*0xff32*/ 1251,
+ /*0x04b2*/ 382,
+ /*0x03d5*/ 273,
+ /*0x104b2*/ 1305,
+ /*0x10b6*/ 506,
+ /*0x1fca*/ 833,
+ /*0x004a*/ 8,
+ /*0x014a*/ 93,
+ /*0xff2f*/ 1251,
+ /*0x023a*/ 216,
-1,
- /*0x118af*/ 1402,
- /*0x1ecc*/ 689,
- /*0x2cb4*/ 999,
+ /*0x00ca*/ 36,
+ /*0xa696*/ 1060,
+ /*0x2132*/ 867,
+ -1,
+ /*0x04a8*/ 377,
+ -1,
+ /*0x1eca*/ 688,
+ /*0x1e4a*/ 622,
+ /*0x0536*/ 450,
+ /*0x01ae*/ 148,
-1, -1,
- /*0xa7be*/ 1137,
+ /*0x24be*/ 893,
+ /*0x1f28*/ 729,
-1,
- /*0x1ebe*/ 682,
- /*0x1f0e*/ 721,
+ /*0x2cca*/ 1010,
-1,
+ /*0x1cb0*/ 571,
/*0xa690*/ 1057,
- /*0x048e*/ 364,
- /*0x050e*/ 428,
- /*0x10ac*/ 496,
+ -1, -1,
+ /*0x118af*/ 1405,
+ -1,
/*0x1cbe*/ 583,
- /*0xa7b4*/ 1132,
+ /*0x10b4*/ 504,
+ /*0xa72e*/ 1069,
-1,
- /*0x1eb4*/ 677,
- /*0x1e2e*/ 608,
- -1, -1, -1,
- /*0x1f2a*/ 731,
- /*0xff2f*/ 1248,
- /*0x1cb4*/ 575,
- /*0x04aa*/ 378,
- /*0x052a*/ 442,
- -1, -1,
- /*0x10ba*/ 510,
+ /*0x0230*/ 214,
-1, -1,
- /*0x1fca*/ 833,
+ /*0xff2e*/ 1250,
+ /*0x0182*/ 122,
-1,
- /*0x024a*/ 226,
- /*0x014a*/ 93,
- /*0x004a*/ 8,
- /*0xa684*/ 1051,
- /*0x2126*/ 864,
- /*0x01ca*/ 161,
- /*0x10a8*/ 492,
- -1, -1,
- /*0x1e2c*/ 607,
+ /*0x023e*/ 219,
+ -1,
+ /*0xa686*/ 1052,
+ -1, -1, -1,
+ /*0x0534*/ 448,
-1, -1, -1, -1, -1,
- /*0x1f2e*/ 735,
+ /*0x24b6*/ 885,
+ /*0x1ff6*/ 857,
+ /*0x0476*/ 356,
+ /*0x0176*/ 115,
-1,
- /*0xa682*/ 1050,
- /*0x04ae*/ 380,
- /*0x052e*/ 444,
+ /*0x10bc*/ 512,
-1,
- /*0xa732*/ 1070,
- /*0x2cca*/ 1010,
+ /*0xa692*/ 1058,
-1,
- /*0x1fc4*/ 828,
- /*0x1e3a*/ 614,
- /*0x0244*/ 222,
+ /*0x118ae*/ 1404,
-1,
- /*0x0044*/ 3,
- /*0x004f*/ 13,
+ /*0x1cb6*/ 577,
+ /*0x01d9*/ 169,
+ /*0x1ef6*/ 710,
+ /*0x1e76*/ 644,
+ /*0x04b8*/ 385,
-1,
- /*0x01c4*/ 157,
- /*0x01cf*/ 164,
- /*0x03cf*/ 270,
+ /*0x104b8*/ 1311,
-1,
- /*0x10b8*/ 508,
- /*0x1e28*/ 605,
- /*0x1eca*/ 688,
- /*0x1fab*/ 810,
- /*0x042b*/ 340,
- /*0x1f2c*/ 733,
+ /*0x01a7*/ 145,
+ /*0x053c*/ 456,
+ /*0x048c*/ 363,
+ -1, -1,
+ /*0x1f38*/ 737,
-1,
- /*0xabab*/ 1201,
- /*0x04ac*/ 379,
- /*0x052c*/ 443,
+ /*0x1e90c*/ 1466,
+ -1, -1, -1,
+ /*0x1f0c*/ 719,
-1,
- /*0x03ab*/ 267,
+ /*0x01a2*/ 142,
+ /*0x1fc9*/ 832,
+ /*0x0049*/ 1488,
+ /*0x0149*/ 92,
-1,
- /*0x2cc4*/ 1007,
- /*0x2c2b*/ 954,
- /*0x1fc2*/ 826,
- /*0x10b6*/ 506,
- /*0x24ba*/ 889,
- /*0x118a2*/ 1389,
- /*0x0042*/ 1,
+ /*0x04fc*/ 419,
+ /*0x0555*/ 481,
+ /*0x00c9*/ 35,
+ /*0xff27*/ 1243,
+ /*0x04ba*/ 386,
+ /*0x1cb4*/ 575,
+ /*0x104ba*/ 1313,
+ -1, -1,
+ /*0x01ac*/ 147,
+ -1,
+ /*0xa722*/ 1063,
-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,
+ /*0xfb04*/ 1229,
-1,
- /*0x01c8*/ 160,
- /*0x04a8*/ 377,
- /*0x0528*/ 441,
+ /*0xff22*/ 1238,
+ -1, -1, -1,
+ /*0x24bc*/ 891,
+ -1, -1, -1,
+ /*0xa7c9*/ 1143,
+ /*0xa72c*/ 1068,
+ -1,
+ /*0x118a7*/ 1397,
-1, -1,
- /*0x2cc2*/ 1006,
- /*0xa7ab*/ 1124,
- /*0xff22*/ 1235,
+ /*0xff2c*/ 1248,
+ -1, -1,
+ /*0x04b0*/ 381,
+ -1,
+ /*0x104b0*/ 1303,
+ /*0x01b2*/ 151,
+ -1, -1,
+ /*0x04be*/ 388,
+ /*0x118a2*/ 1392,
+ /*0x104be*/ 1317,
-1, -1, -1, -1,
- /*0x1e36*/ 612,
+ /*0x0376*/ 232,
+ -1,
+ /*0x1f3e*/ 743,
+ /*0x1fc4*/ 828,
+ /*0x0044*/ 3,
+ /*0x0051*/ 15,
+ /*0xa732*/ 1070,
+ /*0x054a*/ 470,
+ /*0x118ac*/ 1402,
+ /*0x00c4*/ 30,
+ /*0x00d1*/ 43,
+ /*0xff32*/ 1254,
+ /*0xfb02*/ 1227,
-1, -1,
- /*0x1cab*/ 566,
- /*0x10cab*/ 1379,
- /*0x2cc8*/ 1009,
- /*0xa7c2*/ 1138,
+ /*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,
- /*0x1ec2*/ 684,
- /*0x10b0*/ 500,
+ /*0x104b6*/ 1309,
+ /*0x1ecc*/ 689,
+ /*0x1e4c*/ 623,
+ /*0xa7c4*/ 1139,
-1,
- /*0x24b8*/ 887,
- /*0x216b*/ 879,
- /*0x118aa*/ 1397,
- /*0x1e0c*/ 591,
- /*0x1f38*/ 737,
- /*0x104b8*/ 1308,
+ /*0x1efa*/ 712,
+ /*0x1e7a*/ 646,
+ /*0x118b2*/ 1408,
-1,
- /*0x04b8*/ 385,
- /*0x0538*/ 452,
- /*0x1ec8*/ 687,
- /*0x10bc*/ 512,
- /*0x1fd6*/ 838,
- /*0x0150*/ 96,
- /*0x0050*/ 14,
- /*0x0156*/ 99,
- /*0x0056*/ 20,
- /*0x24b6*/ 885,
- /*0x03d0*/ 271,
+ /*0x1e90d*/ 1467,
+ /*0x2ccc*/ 1011,
+ /*0x13fa*/ 526,
-1,
- /*0x03d6*/ 274,
- /*0x1fdb*/ 843,
- /*0x104b6*/ 1306,
+ /*0x1f0d*/ 720,
+ /*0x1fc8*/ 831,
+ /*0x0048*/ 7,
+ /*0x24ca*/ 905,
-1,
- /*0x04b6*/ 384,
- /*0x0536*/ 450,
- /*0xff2a*/ 1243,
+ /*0x1fab*/ 810,
+ /*0x042b*/ 340,
+ /*0x00c8*/ 34,
+ /*0x118a8*/ 1398,
-1,
- /*0x01db*/ 170,
- /*0x1e30*/ 609,
- /*0x118ae*/ 1401,
- -1, -1, -1,
- /*0x2cd0*/ 1013,
- /*0x1f0c*/ 719,
- /*0x2cd6*/ 1016,
- /*0xa69a*/ 1062,
- /*0x048c*/ 363,
- /*0x050c*/ 427,
+ /*0xabab*/ 1204,
-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,
+ /*0x03d1*/ 272,
+ /*0x1ec8*/ 687,
+ /*0x1e48*/ 621,
+ /*0x2c2b*/ 954,
+ /*0x04b4*/ 383,
-1,
- /*0x2132*/ 867,
- /*0x024e*/ 228,
- /*0x014e*/ 95,
- /*0x004e*/ 12,
- /*0x104b0*/ 1300,
- /*0x1fda*/ 842,
- /*0x04b0*/ 381,
+ /*0x104b4*/ 1307,
+ /*0x01b8*/ 155,
+ -1, -1,
+ /*0x2cc8*/ 1009,
-1,
- /*0x015a*/ 101,
- /*0x005a*/ 24,
- /*0x10be*/ 514,
- /*0x24bc*/ 891,
+ /*0x024a*/ 226,
+ /*0x1fc2*/ 826,
+ /*0x0042*/ 1,
+ -1, -1,
+ /*0x03fa*/ 293,
+ /*0xa64a*/ 1031,
+ /*0x00c2*/ 28,
+ /*0xa694*/ 1059,
+ /*0xa7ab*/ 1124,
-1,
- /*0x03da*/ 276,
- /*0x118ba*/ 1413,
- /*0x1f3c*/ 741,
- /*0x104bc*/ 1312,
- /*0x2cc6*/ 1008,
- /*0x04bc*/ 387,
- /*0x053c*/ 456,
- /*0x10b4*/ 504,
- /*0xff2c*/ 1245,
+ /*0xa738*/ 1073,
+ /*0x10cab*/ 1382,
+ /*0x1ec2*/ 684,
+ /*0x1e42*/ 618,
-1,
- /*0x2cce*/ 1012,
+ /*0xff38*/ 1260,
+ /*0x01fc*/ 188,
+ /*0x04bc*/ 387,
-1,
- /*0x118a8*/ 1395,
- /*0xa72a*/ 1067,
+ /*0x104bc*/ 1315,
-1,
- /*0x1e52*/ 626,
- /*0x2cda*/ 1018,
- /*0xa7c6*/ 1141,
+ /*0x2cc2*/ 1006,
+ -1, -1, -1,
+ /*0x0549*/ 469,
+ /*0x1f3c*/ 741,
-1,
- /*0x1ec6*/ 686,
+ /*0xa7c2*/ 1138,
+ /*0x03ab*/ 267,
-1,
- /*0x1e4c*/ 623,
- -1, -1,
- /*0xff3a*/ 1259,
- /*0x1ece*/ 690,
- /*0xa652*/ 1035,
- /*0x1e3e*/ 616,
- /*0x2169*/ 877,
+ /*0x1fd6*/ 838,
+ /*0x0056*/ 20,
+ /*0x0156*/ 99,
-1, -1,
- /*0x1eda*/ 696,
- /*0xa64c*/ 1032,
- /*0x00d2*/ 44,
+ /*0xa73a*/ 1074,
+ /*0x00d6*/ 48,
-1,
- /*0xff28*/ 1241,
+ /*0x118b8*/ 1414,
-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,
+ /*0xff3a*/ 1262,
-1,
- /*0x1f4c*/ 749,
- /*0x104cc*/ 1328,
- /*0x24be*/ 893,
- /*0x2cc0*/ 1005,
- /*0x054c*/ 472,
- /*0x118b6*/ 1409,
- /*0x1f3e*/ 743,
- /*0x104be*/ 1314,
+ /*0x1ed6*/ 694,
+ /*0x1e56*/ 628,
+ /*0x1fd2*/ 836,
+ /*0x0052*/ 16,
+ /*0x0152*/ 97,
-1,
- /*0x04be*/ 388,
- /*0x053e*/ 458,
+ /*0x03c2*/ 269,
-1,
- /*0xff38*/ 1257,
- /*0xa72c*/ 1068,
- -1, -1, -1,
- /*0x104b4*/ 1304,
- /*0x1ec0*/ 683,
- /*0x04b4*/ 383,
- /*0x0534*/ 448,
+ /*0x00d2*/ 44,
+ /*0x2cd6*/ 1016,
+ -1, -1,
+ /*0x1fc6*/ 829,
+ /*0x0046*/ 5,
+ /*0x1ed2*/ 692,
+ /*0x1e52*/ 626,
-1, -1,
+ /*0x00c6*/ 32,
+ /*0x24c9*/ 904,
+ /*0x10c4*/ 520,
+ -1,
+ /*0x118ba*/ 1416,
+ /*0x2cd2*/ 1014,
+ /*0x1ec6*/ 686,
+ /*0x1e46*/ 620,
+ -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,
+ /*0x2cc6*/ 1008,
+ -1,
+ /*0x0544*/ 464,
+ /*0x0551*/ 477,
+ /*0x03d6*/ 274,
+ -1,
/*0x2c62*/ 959,
- /*0x10c4*/ 520,
- -1, -1, -1,
- /*0x1e4a*/ 622,
- /*0xa728*/ 1066,
+ /*0xa7c6*/ 1141,
+ /*0x1ee2*/ 700,
+ /*0x1e62*/ 634,
-1, -1, -1,
- /*0x118b0*/ 1403,
- -1, -1,
+ /*0x104ca*/ 1329,
+ /*0x0050*/ 14,
+ /*0x0150*/ 96,
+ /*0x054c*/ 472,
/*0x2ce2*/ 1022,
+ /*0x118b0*/ 1406,
+ /*0x00d0*/ 42,
+ /*0x1f4a*/ 747,
+ -1, -1, -1,
+ /*0x118be*/ 1420,
+ /*0x1ed0*/ 691,
+ /*0x1e50*/ 625,
-1,
- /*0x10ab*/ 495,
- /*0xa64a*/ 1031,
- /*0x1fd8*/ 840,
- -1,
- /*0x2cd4*/ 1015,
- /*0x0158*/ 100,
- /*0x0058*/ 22,
- /*0x118bc*/ 1415,
- /*0x00ca*/ 36,
- -1,
- /*0x03d8*/ 275,
+ /*0xa736*/ 1072,
-1,
- /*0x10c2*/ 518,
- /*0x1ee2*/ 700,
- -1, -1,
- /*0x1e44*/ 619,
- /*0x24ca*/ 905,
- /*0xff30*/ 1249,
- /*0x1ed4*/ 693,
- /*0xa738*/ 1073,
- /*0x1f4a*/ 747,
- /*0x104ca*/ 1326,
- -1, -1,
- /*0x054a*/ 470,
- /*0x2cd8*/ 1017,
- /*0xa644*/ 1028,
- /*0x1040d*/ 1273,
- /*0x1f8d*/ 780,
- /*0x040d*/ 310,
+ /*0x10ab*/ 495,
-1, -1,
- /*0xab8d*/ 1171,
- /*0x00c4*/ 30,
- /*0x00cf*/ 41,
- /*0xa736*/ 1072,
+ /*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,
- /*0x1e90d*/ 1464,
+ /*0x024c*/ 227,
+ -1,
+ /*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,
- -1, -1,
- /*0xaba9*/ 1199,
- /*0xff2b*/ 1244,
- -1,
- /*0x01a9*/ 146,
- /*0x03a9*/ 265,
+ /*0x2cc0*/ 1005,
+ /*0xa7c7*/ 1142,
+ /*0x1f48*/ 745,
+ /*0xaba9*/ 1202,
-1,
- /*0xa640*/ 1026,
+ /*0x004d*/ 11,
+ /*0x1f2b*/ 732,
+ /*0xa662*/ 1043,
/*0x2c29*/ 952,
- /*0x1fc3*/ 827,
+ /*0x212b*/ 866,
+ /*0x00cd*/ 39,
+ /*0x1f97*/ 790,
+ /*0x0417*/ 320,
-1,
- /*0x0243*/ 221,
- /*0x0143*/ 89,
- /*0x0043*/ 2,
- /*0x00c0*/ 26,
- /*0x10421*/ 1293,
+ /*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,
+ /*0x10ca9*/ 1380,
/*0x1fa1*/ 800,
/*0x0421*/ 330,
+ /*0x047e*/ 360,
+ /*0x10421*/ 1296,
+ /*0x2c6e*/ 966,
+ /*0xaba1*/ 1194,
+ /*0x1eee*/ 706,
+ /*0x1e6e*/ 640,
-1,
- /*0xa74a*/ 1082,
- /*0xaba1*/ 1191,
+ /*0x024e*/ 228,
+ /*0x2c21*/ 944,
+ /*0x2c7e*/ 971,
+ /*0x10c97*/ 1362,
+ /*0x1efe*/ 714,
+ /*0x1e7e*/ 648,
+ /*0xa64e*/ 1033,
+ -1,
+ /*0x03a9*/ 265,
+ /*0x04d6*/ 400,
+ -1, -1, -1,
+ /*0x0554*/ 480,
+ /*0x1fec*/ 853,
+ /*0x046c*/ 351,
+ /*0x016c*/ 110,
+ -1,
+ /*0x1f56*/ 754,
-1, -1,
- /*0x24c0*/ 895,
+ /*0x0397*/ 248,
+ /*0x10ca1*/ 1372,
+ /*0x04d2*/ 398,
+ -1,
+ /*0x104d2*/ 1337,
+ /*0x1eec*/ 705,
+ /*0x1e6c*/ 639,
+ -1, -1,
+ /*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,
- -1, -1,
- /*0x0395*/ 246,
- -1, -1,
- /*0x2c15*/ 932,
+ /*0x104c1*/ 1320,
-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,
- -1, -1, -1, -1,
- /*0x16e50*/ 1435,
+ /*0xff23*/ 1239,
-1,
- /*0x16e56*/ 1441,
+ /*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,
- /*0x1c81*/ 531,
- /*0x10c81*/ 1337,
+ /*0x104bb*/ 1314,
+ -1, -1,
+ /*0x118a3*/ 1393,
+ -1, -1, -1,
+ /*0x1f3b*/ 740,
-1,
- /*0x104b3*/ 1303,
- /*0x1e901*/ 1452,
+ /*0x16e49*/ 1431,
+ -1, -1, -1, -1,
+ /*0x104bf*/ 1318,
-1,
- /*0x0533*/ 447,
- /*0x16e5b*/ 1446,
+ /*0x01cb*/ 162,
+ -1, -1, -1,
+ /*0x01b1*/ 150,
+ /*0x1f3f*/ 744,
+ -1, -1, -1,
+ /*0x04f0*/ 413,
-1,
- /*0x1e78*/ 645,
+ /*0x24cf*/ 910,
+ /*0x1c81*/ 531,
-1, -1, -1, -1, -1, -1,
- -1, -1,
- /*0x118b1*/ 1404,
-1, -1, -1, -1, -1, -1,
+ /*0xff31*/ 1253,
-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,
+ /*0x1c91*/ 540,
+ -1,
+ /*0x1e91f*/ 1485,
+ /*0x01b7*/ 154,
-1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1,
- /*0xfb05*/ 1227,
+ -1,
+ /*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,
- /*0xff37*/ 1256,
- /*0x1e7e*/ 648,
+ /*0x104b5*/ 1308,
-1, -1, -1, -1, -1, -1,
+ -1, -1, -1,
+ /*0x1e915*/ 1475,
-1, -1,
- /*0xfb01*/ 1223,
+ /*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,
- /*0x16e40*/ 1419,
+ /*0x1c85*/ 535,
+ -1,
+ /*0x16e42*/ 1424,
-1, -1, -1, -1, -1,
- /*0x118b5*/ 1408,
+ /*0x1e901*/ 1455,
+ -1, -1, -1, -1, -1, -1,
+ /*0x104cf*/ 1334,
+ -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1,
-1, -1,
- /*0x04fe*/ 420,
- -1, -1, -1, -1, -1,
- /*0x118b3*/ 1406,
+ /*0x01f0*/ 180,
+ /*0x1e911*/ 1471,
+ -1,
+ /*0x16e56*/ 1444,
+ -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1,
-1,
- /*0xff35*/ 1254,
+ /*0x16e52*/ 1440,
+ /*0x118bb*/ 1417,
+ -1,
+ /*0xfb13*/ 1232,
+ -1, -1,
+ /*0x019f*/ 140,
+ -1, -1, -1,
+ /*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,
- /*0xff33*/ 1252,
+ /*0x04f4*/ 415,
+ -1, -1, -1, -1, -1,
+ /*0x01b5*/ 153,
+ -1,
+ /*0x16e50*/ 1438,
+ -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1,
- /*0x16e54*/ 1439,
+ /*0x1e905*/ 1459,
+ -1, -1, -1, -1, -1,
+ /*0xab7c*/ 1157,
+ /*0xff35*/ 1257,
+ -1,
+ /*0x16e4e*/ 1436,
-1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1,
- -1, -1, -1,
- /*0x16e58*/ 1443,
- -1, -1, -1, -1, -1,
- /*0x1f0f*/ 722,
+ /*0x0181*/ 121,
+ -1, -1,
+ /*0x118b5*/ 1411,
-1, -1, -1, -1, -1, -1,
+ /*0x01cf*/ 164,
-1, -1, -1, -1, -1, -1,
- -1, -1, -1,
- /*0x1f0b*/ 718,
+ /*0x16e5a*/ 1448,
+ -1, -1, -1, -1, -1,
+ /*0x0191*/ 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,
+ -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,
- /*0x16e55*/ 1440,
+ /*0xfb15*/ 1234,
+ -1, -1, -1, -1, -1,
+ /*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,
+ /*0xa7c8*/ 1100,
+ /*0x10434*/ 1142,
+ -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,
+ /*0x16e7d*/ 1318,
+ /*0x118da*/ 1283,
-1, -1,
- /*0xa68f*/ 1027,
+ /*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,
-