Diff of the two buildlogs: -- --- b1/build.log 2025-02-16 07:28:21.025695536 +0000 +++ b2/build.log 2025-02-16 11:09:08.028419129 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Fri Mar 20 22:59:23 -12 2026 -I: pbuilder-time-stamp: 1774090763 +I: Current time: Sun Feb 16 21:28:24 +14 2025 +I: pbuilder-time-stamp: 1739690904 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/unstable-reproducible-base.tgz] I: copying local configuration @@ -26,52 +26,84 @@ dpkg-source: info: applying update-packaged-javascript-links.patch I: Not using root during the build. I: Installing the build-deps -I: user script /srv/workspace/pbuilder/3553977/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/2461830/tmp/hooks/D01_modify_environment starting +debug: Running on ionos11-amd64. +I: Changing host+domainname to test build reproducibility +I: Adding a custom variable just for the fun of it... +I: Changing /bin/sh to bash +'/bin/sh' -> '/bin/bash' +lrwxrwxrwx 1 root root 9 Feb 16 07:28 /bin/sh -> /bin/bash +I: Setting pbuilder2's login shell to /bin/bash +I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other +I: user script /srv/workspace/pbuilder/2461830/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/2461830/tmp/hooks/D02_print_environment starting I: set - BUILDDIR='/build/reproducible-path' - BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' - BUILDUSERNAME='pbuilder1' - BUILD_ARCH='amd64' - DEBIAN_FRONTEND='noninteractive' - DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=42 ' - DISTRIBUTION='unstable' - HOME='/root' - HOST_ARCH='amd64' + BASH=/bin/sh + BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath + BASH_ALIASES=() + BASH_ARGC=() + BASH_ARGV=() + BASH_CMDS=() + BASH_LINENO=([0]="12" [1]="0") + BASH_LOADABLES_PATH=/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:. + BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment") + BASH_VERSINFO=([0]="5" [1]="2" [2]="37" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu") + BASH_VERSION='5.2.37(1)-release' + BUILDDIR=/build/reproducible-path + BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other' + BUILDUSERNAME=pbuilder2 + BUILD_ARCH=amd64 + DEBIAN_FRONTEND=noninteractive + DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=20 ' + DIRSTACK=() + DISTRIBUTION=unstable + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=x86_64 + HOST_ARCH=amd64 IFS=' ' - INVOCATION_ID='6bf631419cfc4fbd88102821c92ef5a1' - LANG='C' - LANGUAGE='en_US:en' - LC_ALL='C' - MAIL='/var/mail/root' - OPTIND='1' - PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' - PBCURRENTCOMMANDLINEOPERATION='build' - PBUILDER_OPERATION='build' - PBUILDER_PKGDATADIR='/usr/share/pbuilder' - PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' - PBUILDER_SYSCONFDIR='/etc' - PPID='3553977' - PS1='# ' - PS2='> ' + INVOCATION_ID=8630b33601374133a70c174dfd4e27fa + LANG=C + LANGUAGE=et_EE:et + LC_ALL=C + MACHTYPE=x86_64-pc-linux-gnu + MAIL=/var/mail/root + OPTERR=1 + OPTIND=1 + OSTYPE=linux-gnu + PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path + PBCURRENTCOMMANDLINEOPERATION=build + PBUILDER_OPERATION=build + PBUILDER_PKGDATADIR=/usr/share/pbuilder + PBUILDER_PKGLIBDIR=/usr/lib/pbuilder + PBUILDER_SYSCONFDIR=/etc + PIPESTATUS=([0]="0") + POSIXLY_CORRECT=y + PPID=2461830 PS4='+ ' - PWD='/' - SHELL='/bin/bash' - SHLVL='2' - SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.Z15QMKHg/pbuilderrc_U6fU --distribution unstable --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.Z15QMKHg/b1 --logfile b1/build.log crystal_1.14.0+dfsg-1.dsc' - SUDO_GID='110' - SUDO_UID='105' - SUDO_USER='jenkins' - TERM='unknown' - TZ='/usr/share/zoneinfo/Etc/GMT+12' - USER='root' - _='/usr/bin/systemd-run' - http_proxy='http://213.165.73.152:3128' + PWD=/ + SHELL=/bin/bash + SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix + SHLVL=3 + SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.Z15QMKHg/pbuilderrc_O8EH --distribution unstable --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.Z15QMKHg/b2 --logfile b2/build.log crystal_1.14.0+dfsg-1.dsc' + SUDO_GID=111 + SUDO_UID=106 + SUDO_USER=jenkins + TERM=unknown + TZ=/usr/share/zoneinfo/Etc/GMT-14 + UID=0 + USER=root + _='I: set' + http_proxy=http://46.16.76.132:3128 I: uname -a - Linux ionos5-amd64 6.12.9+bpo-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.9-1~bpo12+1 (2025-01-19) x86_64 GNU/Linux + Linux i-capture-the-hostname 6.1.0-31-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.128-1 (2025-02-07) x86_64 GNU/Linux I: ls -l /bin - lrwxrwxrwx 1 root root 7 Nov 22 2024 /bin -> usr/bin -I: user script /srv/workspace/pbuilder/3553977/tmp/hooks/D02_print_environment finished + lrwxrwxrwx 1 root root 7 Nov 22 14:40 /bin -> usr/bin +I: user script /srv/workspace/pbuilder/2461830/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy @@ -256,7 +288,7 @@ Get: 115 http://deb.debian.org/debian unstable/main amd64 llvm-19-tools amd64 1:19.1.7-1+b1 [511 kB] Get: 116 http://deb.debian.org/debian unstable/main amd64 llvm-19-dev amd64 1:19.1.7-1+b1 [43.2 MB] Get: 117 http://deb.debian.org/debian unstable/main amd64 zlib1g-dev amd64 1:1.3.dfsg+really1.3.1-1+b1 [920 kB] -Fetched 181 MB in 26s (6897 kB/s) +Fetched 181 MB in 14s (12.5 MB/s) Preconfiguring packages ... Selecting previously unselected package libpython3.13-minimal:amd64. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 19808 files and directories currently installed.) @@ -645,8 +677,8 @@ Setting up tzdata (2025a-2) ... Current default time zone: 'Etc/UTC' -Local time is now: Sat Mar 21 11:01:33 UTC 2026. -Universal Time is now: Sat Mar 21 11:01:33 UTC 2026. +Local time is now: Sun Feb 16 07:32:41 UTC 2025. +Universal Time is now: Sun Feb 16 07:32:41 UTC 2025. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up liberror-perl (0.17029-2) ... @@ -751,7 +783,11 @@ Building tag database... -> Finished parsing the build-deps I: Building the package -I: Running cd /build/reproducible-path/crystal-1.14.0+dfsg/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../crystal_1.14.0+dfsg-1_source.changes +I: user script /srv/workspace/pbuilder/2461830/tmp/hooks/A99_set_merged_usr starting +Not re-configuring usrmerge for unstable +I: user script /srv/workspace/pbuilder/2461830/tmp/hooks/A99_set_merged_usr finished +hostname: Name or service not known +I: Running cd /build/reproducible-path/crystal-1.14.0+dfsg/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-genchanges -S > ../crystal_1.14.0+dfsg-1_source.changes dpkg-buildpackage: info: source package crystal dpkg-buildpackage: info: source version 1.14.0+dfsg-1 dpkg-buildpackage: info: source distribution unstable @@ -761,7 +797,7 @@ debian/rules clean dh clean dh_auto_clean - make -j42 clean + make -j20 clean make[1]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg' rm -rf .build rm -rf ./docs @@ -780,19 +816,19 @@ dh_auto_configure debian/rules override_dh_auto_build make[1]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg' -dh_auto_build -- release=1 verbose=1 progress=1 threads=42 CRYSTAL_CONFIG_PATH="lib:/usr/lib/crystal/lib" CRYSTAL_CACHE_DIR="/tmp/crystal" interpreter=1 - make -j42 "INSTALL=install --strip-program=true" release=1 verbose=1 progress=1 threads=42 CRYSTAL_CONFIG_PATH=lib:/usr/lib/crystal/lib CRYSTAL_CACHE_DIR=/tmp/crystal interpreter=1 +dh_auto_build -- release=1 verbose=1 progress=1 threads=20 CRYSTAL_CONFIG_PATH="lib:/usr/lib/crystal/lib" CRYSTAL_CACHE_DIR="/tmp/crystal" interpreter=1 + make -j20 "INSTALL=install --strip-program=true" release=1 verbose=1 progress=1 threads=20 CRYSTAL_CONFIG_PATH=lib:/usr/lib/crystal/lib CRYSTAL_CACHE_DIR=/tmp/crystal interpreter=1 make[2]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg' [33mUsing /usr/bin/llvm-config-19 [version=19.1.7][0m -CRYSTAL_CONFIG_BUILD_COMMIT="" CRYSTAL_CONFIG_PATH=lib:/usr/lib/crystal/lib SOURCE_DATE_EPOCH="1734712509" CRYSTAL_CONFIG_LIBRARY_PATH='$ORIGIN/../lib/crystal' ./bin/crystal build -D strict_multi_assign -D preview_overload_order --release --progress --threads 42 --link-flags="-Wl,-z,relro" -o .build/crystal src/compiler/crystal.cr -D without_openssl -D without_zlib -D use_pcre2 +CRYSTAL_CONFIG_BUILD_COMMIT="" CRYSTAL_CONFIG_PATH=lib:/usr/lib/crystal/lib SOURCE_DATE_EPOCH="1734712509" CRYSTAL_CONFIG_LIBRARY_PATH='$ORIGIN/../lib/crystal' ./bin/crystal build -D strict_multi_assign -D preview_overload_order --release --progress --threads 20 --link-flags="-Wl,-z,relro" -o .build/crystal src/compiler/crystal.cr -D without_openssl -D without_zlib -D use_pcre2 [1/13] Parse [1/13] Parse [2/13] Semantic (top level) [2/13] Semantic (top level) [3/13] Semantic (new) [3/13] Semantic (new) [4/13] Semantic (type declarations) [4/13] Semantic (type declarations) [5/13] Semantic (abstract def check) [5/13] Semantic (abstract def check) [6/13] Semantic (restrictions augmenter) [6/13] Semantic (restrictions augmenter) [7/13] Semantic (ivars initializers) [7/13] Semantic (ivars initializers) [8/13] Semantic (cvars initializers) [8/13] Semantic (cvars initializers) [9/13] Semantic (main) [9/13] Semantic (main) [10/13] Semantic (cleanup) [10/13] Semantic (cleanup) [11/13] Semantic (recursive struct check) [11/13] Semantic (recursive struct check) [12/13] Codegen (crystal) [12/13] Codegen (crystal) [13/13] Codegen (bc+obj) [13/13] [0/1] Codegen (bc+obj) [13/13] [1/1] Codegen (bc+obj) [13/13] [1/1] Codegen (bc+obj) [14/13] Codegen (linking) [14/13] Codegen (linking) make[2]: Leaving directory '/build/reproducible-path/crystal-1.14.0+dfsg' make[1]: Leaving directory '/build/reproducible-path/crystal-1.14.0+dfsg' debian/rules override_dh_auto_test make[1]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg' -make release=1 verbose=1 progress=1 threads=42 CRYSTAL_CONFIG_PATH="lib:/usr/lib/crystal/lib" CRYSTAL_CACHE_DIR="/tmp/crystal" interpreter=1 compiler_spec +make release=1 verbose=1 progress=1 threads=20 CRYSTAL_CONFIG_PATH="lib:/usr/lib/crystal/lib" CRYSTAL_CACHE_DIR="/tmp/crystal" interpreter=1 compiler_spec make[2]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg' [33mUsing /usr/bin/llvm-config-19 [version=19.1.7][0m -CRYSTAL_CONFIG_BUILD_COMMIT="" CRYSTAL_CONFIG_PATH=lib:/usr/lib/crystal/lib SOURCE_DATE_EPOCH="1734712509" ./bin/crystal build -D strict_multi_assign -D preview_overload_order --release --progress --threads 42 --link-flags="-Wl,-z,relro" --exclude-warnings spec/std --exclude-warnings spec/compiler --exclude-warnings spec/primitives -o .build/compiler_spec spec/compiler_spec.cr --release +CRYSTAL_CONFIG_BUILD_COMMIT="" CRYSTAL_CONFIG_PATH=lib:/usr/lib/crystal/lib SOURCE_DATE_EPOCH="1734712509" ./bin/crystal build -D strict_multi_assign -D preview_overload_order --release --progress --threads 20 --link-flags="-Wl,-z,relro" --exclude-warnings spec/std --exclude-warnings spec/compiler --exclude-warnings spec/primitives -o .build/compiler_spec spec/compiler_spec.cr --release Using compiled compiler at .build/crystal In lib/markd/src/markd/renderers/html_renderer.cr:238:7 @@ -801,7 +837,7 @@ Warning: expanding macro -There was a problem expanding macro 'macro_140549799628400' +There was a problem expanding macro 'macro_140300317817808' Called macro defined in lib/markd/src/markd/renderers/html_renderer.cr:238:7 @@ -817,15232 +853,13243 @@ A total of 1 warnings were found. [1/13] Parse [1/13] Parse [2/13] Semantic (top level) [2/13] Semantic (top level) [3/13] Semantic (new) [3/13] Semantic (new) [4/13] Semantic (type declarations) [4/13] Semantic (type declarations) [5/13] Semantic (abstract def check) [5/13] Semantic (abstract def check) [6/13] Semantic (restrictions augmenter) [6/13] Semantic (restrictions augmenter) [7/13] Semantic (ivars initializers) [7/13] Semantic (ivars initializers) [8/13] Semantic (cvars initializers) [8/13] Semantic (cvars initializers) [9/13] Semantic (main) [9/13] Semantic (main) [10/13] Semantic (cleanup) [10/13] Semantic (cleanup) [11/13] Semantic (recursive struct check) [11/13] Semantic (recursive struct check) [12/13] Codegen (crystal) [12/13] Codegen (crystal) [13/13] Codegen (bc+obj) [13/13] [0/1] Codegen (bc+obj) [13/13] [1/1] Codegen (bc+obj) [13/13] [1/1] Codegen (bc+obj) [14/13] Codegen (linking) [14/13] Codegen (linking) .build/compiler_spec -v --order=random -Randomized with seed: 68465 -Crystal::Repl::Interpreter - casts - upcasts between named tuple types, different order upcasts between named tuple types, different order - upcasts between named tuple types, respects alignment (#14036) upcasts between named tuple types, respects alignment (#14036) - casts from nilable type to mixed union type (2) casts from nilable type to mixed union type (2) - discards cast discards cast - does as? with a type that can't match (#12346) does as? with a type that can't match (#12346) - casts from mixed union type to another mixed union type for caller casts from mixed union type to another mixed union type for caller - casts from mixed union type to primitive type casts from mixed union type to primitive type - upcasts to module type upcasts to module type - casts from reference to nilable reference casts from reference to nilable reference - raises when as fails raises when as fails - upcasts in nilable cast (#12532) upcasts in nilable cast (#12532) - upcasts GenericClassInstanceMetaclassType to VirtualMetaclassType upcasts GenericClassInstanceMetaclassType to VirtualMetaclassType - casts nilable from mixed union type to primitive type (nil case) casts nilable from mixed union type to primitive type (nil case) - does is_a? with virtual metaclass does is_a? with virtual metaclass - casts to filtered type, not type in as(...) casts to filtered type, not type in as(...) - upcasts virtual type to union upcasts virtual type to union - casts from mixed union type to nilable proc type (#12283) casts from mixed union type to nilable proc type (#12283) - casts nilable from mixed union type to primitive type (non-nil case) casts nilable from mixed union type to primitive type (non-nil case) - puts named tuple type inside union of different named tuple type (#12243) puts named tuple type inside union of different named tuple type (#12243) - does as? with no resulting type (#12327) does as? with no resulting type (#12327) - upcasts mixed union with tuple to mixed union with compatible tuple (3) (#12331) upcasts mixed union with tuple to mixed union with compatible tuple (3) (#12331) - casts from nilable type to mixed union type casts from nilable type to mixed union type - puts tuple type inside union of different tuple type (#12243) puts tuple type inside union of different tuple type (#12243) - upcasts between tuple types, respects alignment (#14036) upcasts between tuple types, respects alignment (#14036) - upcasts between tuple types upcasts between tuple types - casts nil to Void* casts nil to Void* - casts from reference to pointer and back casts from reference to pointer and back - upcasts mixed union with tuple to mixed union with compatible tuple (2) (#12331) upcasts mixed union with tuple to mixed union with compatible tuple (2) (#12331) - upcasts between named tuple types, same order upcasts between named tuple types, same order - puts virtual metaclass into union (#12162) puts virtual metaclass into union (#12162) - does as? with no resulting type, not from nil (#12327) does as? with no resulting type, not from nil (#12327) - does is_a? with virtual type (struct) does is_a? with virtual type (struct) - upcasts mixed union with tuple to mixed union with compatible tuple (1) (#12331) upcasts mixed union with tuple to mixed union with compatible tuple (1) (#12331) -Crystal::Repl::Interpreter - blocks - interprets block with args that conflict with a local var interprets block with args that conflict with a local var - interprets simplest block interprets simplest block - interprets yield with splat, less block arguments interprets yield with splat, less block arguments - interprets yield with splat, block with splat interprets yield with splat, block with splat - interprets block with args that conflict with a local var interprets block with args that conflict with a local var - clears block local variables when calling block clears block local variables when calling block - interprets break inside block (union, through break) interprets break inside block (union, through break) - interprets break inside block (union, through normal flow) interprets break inside block (union, through normal flow) - interprets yield inside def with arguments interprets yield inside def with arguments - interprets next inside block interprets next inside block - considers block arg without type as having NoReturn type (2) (#12270) considers block arg without type as having NoReturn type (2) (#12270) - discards yield expression discards yield expression - interprets break inside block (union, through return) interprets break inside block (union, through return) - interprets next inside block (union, through normal exit) interprets next inside block (union, through normal exit) - interprets yield with splat (2) interprets yield with splat (2) - interprets yield with splat (1) interprets yield with splat (1) - interprets yield inside another block interprets yield inside another block - clears block local variables when calling block (2) clears block local variables when calling block (2) - returns from block returns from block - interprets break inside block interprets break inside block - interprets next inside block (union, through next) interprets next inside block (union, through next) - interprets yield expressions interprets yield expressions - yields different values to form a union yields different values to form a union - interprets block with splat interprets block with splat - interprets yield expression interprets yield expression - interprets block with multiple yields interprets block with multiple yields - considers block arg without type as having NoReturn type (#12270) considers block arg without type as having NoReturn type (#12270) - caches method with captured block (#12276) caches method with captured block (#12276) - counts with ... yield scope in block args bytesize (#12316) counts with ... yield scope in block args bytesize (#12316) - casts yield expression to block var type (not block arg type) casts yield expression to block var type (not block arg type) - interprets with ... yield with extra arguments (#12296) interprets with ... yield with extra arguments (#12296) - interprets with ... yield with struct interprets with ... yield with struct - interprets with ... yield interprets with ... yield - interprets yield with splat, block with splat (#12227) interprets yield with splat, block with splat (#12227) - interprets yield return value interprets yield return value - captures non-closure block captures non-closure block -Semantic: alias - errors if declares alias inside if errors if declares alias inside if - overloads union type through alias overloads union type through alias - declares alias inside type declares alias inside type - includes module through alias includes module through alias - doesn't find type parameter in alias (#3502) doesn't find type parameter in alias (#3502) - uses constant in alias with math (#3259) uses constant in alias with math (#3259) - reopens module through alias reopens module through alias - resolves alias type resolves alias type - works with alias type as restriction works with alias type as restriction - doesn't crash by infinite recursion against type alias and generics (#5329) doesn't crash by infinite recursion against type alias and generics (#5329) - reopens class through alias within itself reopens class through alias within itself - inherits struct through alias inherits struct through alias - errors if alias already defined errors if alias already defined - allows using generic type of recursive alias as restriction (#488) allows using generic type of recursive alias as restriction (#488) - finds type through alias (#4645) finds type through alias (#4645) - inherits class through alias inherits class through alias - can pass recursive alias to proc can pass recursive alias to proc - errors if alias is already defined as another type errors if alias is already defined as another type - errors if defining infinite recursive alias in union errors if defining infinite recursive alias in union - resolves type through alias (#563) resolves type through alias (#563) - reopens struct through alias reopens struct through alias - errors if trying to use typeof in alias errors if trying to use typeof in alias - reopens struct through alias within itself reopens struct through alias within itself - errors if defining infinite recursive alias errors if defining infinite recursive alias - looks up alias for macro resolution (#3548) looks up alias for macro resolution (#3548) - allows recursive array with alias allows recursive array with alias - errors if trying to resolve type of recursive alias errors if trying to resolve type of recursive alias - can use .class in alias (#2835) can use .class in alias (#2835) - reopens module through alias within itself reopens module through alias within itself - allows defining recursive aliases allows defining recursive aliases - allows using alias type as generic type allows using alias type as generic type - uses constant in alias (#3259) uses constant in alias (#3259) - allows defining recursive fun aliases allows defining recursive fun aliases - reopens class through alias reopens class through alias -Semantic: yield with scope - passes #229 passes #229 - mentions with yield scope and current scope in error mentions with yield scope and current scope in error - errors if using instance variable at top level errors if using instance variable at top level - uses instance variable of enclosing scope uses instance variable of enclosing scope - infer type of empty block body infer type of empty block body - uses method of enclosing scope uses method of enclosing scope - infer type of block body infer type of block body - finds macro finds macro - infer type of block body with yield scope and arguments infer type of block body with yield scope and arguments - infer type of block body with yield scope infer type of block body with yield scope - invokes nested calls invokes nested calls -Code gen: void - codegens no return assignment codegens no return assignment - codegens void assignment in case with local variable codegens void assignment in case with local variable codegens void assignment in case with local variable codegens void assignment in case with local variable codegens void assignment in case with local variable codegens void assignment in case with local variable codegens void assignment in case with local variable codegens void assignment in case with local variable codegens void assignment in case with local variable codegens void assignment in case with local variable - returns void from nil functions, doesn't crash when passing value returns void from nil functions, doesn't crash when passing value - codegens unreachable code codegens unreachable code - codegens void assignment codegens void assignment - codegens void assignment in case codegens void assignment in case codegens void assignment in case codegens void assignment in case codegens void assignment in case codegens void assignment in case codegens void assignment in case codegens void assignment in case codegens void assignment in case codegens void assignment in case - allows passing void as argument to method allows passing void as argument to method +Randomized with seed: 76473 +Code gen: C ABI x86_64 + passes struct less than 64 bits as { i64 } passes struct less than 64 bits as { i64 } + passes struct between 64 and 128 bits as { i64, i64 } passes struct between 64 and 128 bits as { i64, i64 } + passes struct between 64 and 128 bits as { i64, i64 } (with multiple modules/contexts) passes struct between 64 and 128 bits as { i64, i64 } (with multiple modules/contexts) + returns struct less than 64 bits as { i64 } returns struct less than 64 bits as { i64 } + passes struct less than 64 bits as { i64 } in varargs passes struct less than 64 bits as { i64 } in varargs + passes struct bigger than128 bits with byval passes struct bigger than128 bits with byval + returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret + returns struct between 64 and 128 bits as { i64, i64 } returns struct between 64 and 128 bits as { i64, i64 } +Codegen: class var + initializes class var with array literal initializes class var with array literal initializes class var with array literal initializes class var with array literal initializes class var with array literal initializes class var with array literal initializes class var with array literal initializes class var with array literal initializes class var with array literal initializes class var with array literal + doesn't crash with pointerof from another module doesn't crash with pointerof from another module doesn't crash with pointerof from another module doesn't crash with pointerof from another module doesn't crash with pointerof from another module doesn't crash with pointerof from another module doesn't crash with pointerof from another module doesn't crash with pointerof from another module doesn't crash with pointerof from another module doesn't crash with pointerof from another module + declares var as uninitialized and initializes it unsafely declares var as uninitialized and initializes it unsafely + accesses class var from proc literal accesses class var from proc literal + codegens class var inside module codegens class var inside module + reads class var before initializing it (hoisting) reads class var before initializing it (hoisting) + reads class var from virtual type metaclass reads class var from virtual type metaclass + codegens class var with begin and vars codegens class var with begin and vars + doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) + codegens class var inside instance method codegens class var inside instance method + codegens generic class with class var codegens generic class with class var + inline initialization of simple class var inline initialization of simple class var + codegens second class var initializer codegens second class var initializer + initializes class var the moment it reaches it initializes class var the moment it reaches it initializes class var the moment it reaches it initializes class var the moment it reaches it initializes class var the moment it reaches it initializes class var the moment it reaches it initializes class var the moment it reaches it initializes class var the moment it reaches it initializes class var the moment it reaches it initializes class var the moment it reaches it + declares and initializes declares and initializes + catch infinite loop in class var initializer catch infinite loop in class var initializer catch infinite loop in class var initializer catch infinite loop in class var initializer catch infinite loop in class var initializer catch infinite loop in class var initializer catch infinite loop in class var initializer catch infinite loop in class var initializer catch infinite loop in class var initializer catch infinite loop in class var initializer + initializes class var of union with single type initializes class var of union with single type + doesn't inherit class var value in subclass doesn't inherit class var value in subclass + codegens class var with nilable reference type codegens class var with nilable reference type + writes class var from virtual type writes class var from virtual type + codegens class var codegens class var + codegens class var with type declaration begin and vars codegens class var with type declaration begin and vars + runs class var side effects (#8862) runs class var side effects (#8862) runs class var side effects (#8862) runs class var side effects (#8862) runs class var side effects (#8862) runs class var side effects (#8862) runs class var side effects (#8862) runs class var side effects (#8862) runs class var side effects (#8862) runs class var side effects (#8862) + codegens class var as nil codegens class var as nil + initializes dependent constant before class var initializes dependent constant before class var initializes dependent constant before class var initializes dependent constant before class var initializes dependent constant before class var initializes dependent constant before class var initializes dependent constant before class var initializes dependent constant before class var initializes dependent constant before class var initializes dependent constant before class var + doesn't use nilable type for initializer doesn't use nilable type for initializer + gets pointerof class var complex constant gets pointerof class var complex constant + codegens class var as nil if assigned for the first time inside method codegens class var as nil if assigned for the first time inside method + gets pointerof class var gets pointerof class var + uses var in class var initializer uses var in class var initializer + doesn't inherit class var value in module doesn't inherit class var value in module + reads simple class var before another complex one reads simple class var before another complex one + reads class var from virtual type reads class var from virtual type +Semantic: method_missing + doesn't look up method_missing in with_yield_scope if call has a receiver (#12097) doesn't look up method_missing in with_yield_scope if call has a receiver (#12097) + finds method_missing with 'with ... yield' finds method_missing with 'with ... yield' + errors if method_missing expands to multiple methods errors if method_missing expands to multiple methods + does method missing for generic type does method missing for generic type + errors if method_missing expands to an incorrect method errors if method_missing expands to an incorrect method + does error in method_missing macro with virtual type does error in method_missing macro with virtual type + does error in method_missing if wrong number of params does error in method_missing if wrong number of params +Code gen: alias + invokes methods on empty array of recursive alias (2) invokes methods on empty array of recursive alias (2) invokes methods on empty array of recursive alias (2) invokes methods on empty array of recursive alias (2) invokes methods on empty array of recursive alias (2) invokes methods on empty array of recursive alias (2) invokes methods on empty array of recursive alias (2) invokes methods on empty array of recursive alias (2) invokes methods on empty array of recursive alias (2) invokes methods on empty array of recursive alias (2) + invokes methods on empty array of recursive alias (3) invokes methods on empty array of recursive alias (3) invokes methods on empty array of recursive alias (3) invokes methods on empty array of recursive alias (3) invokes methods on empty array of recursive alias (3) invokes methods on empty array of recursive alias (3) invokes methods on empty array of recursive alias (3) invokes methods on empty array of recursive alias (3) invokes methods on empty array of recursive alias (3) invokes methods on empty array of recursive alias (3) + codegens cast to alias that includes bool codegens cast to alias that includes bool + overloads alias against generic (1) (#3261) overloads alias against generic (1) (#3261) + doesn't crash on cast to as recursive alias (#639) doesn't crash on cast to as recursive alias (#639) + casts to recursive alias casts to recursive alias casts to recursive alias casts to recursive alias casts to recursive alias casts to recursive alias casts to recursive alias casts to recursive alias casts to recursive alias casts to recursive alias + invokes methods on empty array of recursive alias (1) invokes methods on empty array of recursive alias (1) invokes methods on empty array of recursive alias (1) invokes methods on empty array of recursive alias (1) invokes methods on empty array of recursive alias (1) invokes methods on empty array of recursive alias (1) invokes methods on empty array of recursive alias (1) invokes methods on empty array of recursive alias (1) invokes methods on empty array of recursive alias (1) invokes methods on empty array of recursive alias (1) + casts to recursive alias casts to recursive alias + doesn't break with alias for link attributes doesn't break with alias for link attributes + lazily solves aliases (#1346) lazily solves aliases (#1346) + overloads alias against generic (2) (#3261) overloads alias against generic (2) (#3261) +Semantic: fun + errors if defining class inside fun through macro (#6874) errors if defining class inside fun through macro (#6874) +Code gen: var + codegens bug with var, while, if, break and ssa codegens bug with var, while, if, break and ssa + works with typeof with assignment (#828) works with typeof with assignment (#828) + codegens assignment that can never be reached codegens assignment that can never be reached + codegens ivar assignment when not-nil type filter applies codegens ivar assignment when not-nil type filter applies + codegens bug with union of int, nil and string (1): assigning nil to union must fill all zeros codegens bug with union of int, nil and string (1): assigning nil to union must fill all zeros + codegens bug with union of int, nil and string (2): assigning nil to union must fill all zeros codegens bug with union of int, nil and string (2): assigning nil to union must fill all zeros + codegens bug with instance vars and ssa codegens bug with instance vars and ssa + codegens var codegens var + codegens var with type declaration codegens var with type declaration + assigns to underscore assigns to underscore +Semantic: require + file not found + require require + relative wildcard relative wildcard + wildcard wildcard + relative require relative require +Code gen: ssa + codegens a var that is declared in a block (1) codegens a var that is declared in a block (1) + codegens ssa bug with if/else on var codegens ssa bug with if/else on var + codegens a redefined var codegens a redefined var + codegens declaration of var inside then when false codegens declaration of var inside then when false + codegens declaration of var inside then when true codegens declaration of var inside then when true + codegens a var that is re-assigned in a block (1) codegens a var that is re-assigned in a block (1) + codegens ssa bug (2) codegens ssa bug (2) + codegens ssa bug (1) codegens ssa bug (1) + codegens a var that is declared in a block (2) codegens a var that is declared in a block (2) + codegens a redefined var inside method with argument codegens a redefined var inside method with argument + codegens a redefined var inside method codegens a redefined var inside method + codegens a var that is re-assigned in a block (2) codegens a var that is re-assigned in a block (2) + codegens a var that is re-assigned in a block codegens a var that is re-assigned in a block Normalize: block - normalizes nested unpacking normalizes nested unpacking + normalizes unpacking with underscore normalizes unpacking with underscore normalizes unpacking with splat normalizes unpacking with splat normalizes unpacking with multiple body expressions normalizes unpacking with multiple body expressions - normalizes multiple nested unpackings normalizes multiple nested unpackings normalizes unpacking with single expression body normalizes unpacking with single expression body + normalizes multiple nested unpackings normalizes multiple nested unpackings normalizes unpacking with empty body normalizes unpacking with empty body - normalizes unpacking with underscore normalizes unpacking with underscore + normalizes nested unpacking normalizes nested unpacking +Semantic: private + finds private macro in same file finds private macro in same file + doesn't find private alias in another file doesn't find private alias in another file + can use types in private type can use types in private type + gives private constant error in macro gives private constant error in macro + doesn't find private macro in another file doesn't find private macro in another file + doesn't find private enum from outside namespace, long name (#8831) doesn't find private enum from outside namespace, long name (#8831) + doesn't define incorrect type in top-level namespace (#13511) doesn't define incorrect type in top-level namespace (#13511) + doesn't find private def defined in macro in another file (#7681) doesn't find private def defined in macro in another file (#7681) + doesn't define incorrect type in top-level namespace (#13511) doesn't define incorrect type in top-level namespace (#13511) + finds private def in same file finds private def in same file + finds private type in same file finds private type in same file + doesn't find private class defined through macro (#8715) doesn't find private class defined through macro (#8715) + doesn't find private class from outside namespace, long name (#8831) doesn't find private class from outside namespace, long name (#8831) + doesn't inherit visibility from class node in macro hook (#8794) doesn't inherit visibility from class node in macro hook (#8794) + find module private macro inside a module, which is inherited by the module find module private macro inside a module, which is inherited by the module + find module private macro inside the module find module private macro inside the module + doesn't find private class from outside namespace doesn't find private class from outside namespace + doesn't find private constant in another file (#7850) doesn't find private constant in another file (#7850) + doesn't define private constant with global type name doesn't define private constant with global type name + doesn't find private alias from outside namespace, long name (#8831) doesn't find private alias from outside namespace, long name (#8831) + doesn't define incorrect type in top-level namespace (#13511) doesn't define incorrect type in top-level namespace (#13511) + doesn't find module private macro outside the module doesn't find module private macro outside the module + doesn't define private class with global type name doesn't define private class with global type name + doesn't find private enum from outside namespace doesn't find private enum from outside namespace + doesn't find private macro defined through macro (#8715) doesn't find private macro defined through macro (#8715) + doesn't define incorrect type in top-level namespace (#13511) doesn't define incorrect type in top-level namespace (#13511) + doesn't define private alias with global type name doesn't define private alias with global type name + types private def correctly types private def correctly + doesn't define private module with global type name doesn't define private module with global type name + doesn't find private module from outside namespace, long name (#8831) doesn't find private module from outside namespace, long name (#8831) + can use instance var initializer in private type can use instance var initializer in private type + doesn't define private lib with global type name doesn't define private lib with global type name + finds private type from inside namespace in subclass finds private type from inside namespace in subclass + doesn't find private thing defined through recursive macro (#8715) doesn't find private thing defined through recursive macro (#8715) + finds private class in macro expansion finds private class in macro expansion + doesn't find private lib from outside namespace doesn't find private lib from outside namespace + doesn't define incorrect type in top-level namespace (#13511) doesn't define incorrect type in top-level namespace (#13511) + finds private macro in same file, invoking from another macro (#1265) finds private macro in same file, invoking from another macro (#1265) + finds private def when invoking from inside macro (#2082) finds private def when invoking from inside macro (#2082) + doesn't find private def in another file doesn't find private def in another file + finds private type from inside namespace finds private type from inside namespace + finds private def in same file that invokes another def finds private def in same file that invokes another def + doesn't find private module from outside namespace doesn't find private module from outside namespace + doesn't find private class in another file doesn't find private class in another file + doesn't find private constant from outside namespace, long name (#8831) doesn't find private constant from outside namespace, long name (#8831) + doesn't find private alias from outside namespace doesn't find private alias from outside namespace + doesn't define private enum with global type name doesn't define private enum with global type name + doesn't find private lib from outside namespace, long name (#8831) doesn't find private lib from outside namespace, long name (#8831) + doesn't find private module defined through macro (#8715) doesn't find private module defined through macro (#8715) + doesn't define incorrect type in top-level namespace (#13511) doesn't define incorrect type in top-level namespace (#13511) + can use class var initializer in private type can use class var initializer in private type + doesn't find private constant from outside namespace doesn't find private constant from outside namespace +Init invocation + errors if files will be overwritten by a generated file errors if files will be overwritten by a generated file + prints error if a file is already present prints error if a file is already present + honors the custom set directory name honors the custom set directory name + doesn't error when asked to skip existing files doesn't error when asked to skip existing files + doesn't error if files will be overwritten by a generated file and --force is used doesn't error if files will be overwritten by a generated file and --force is used + produces valid yaml file produces valid yaml file +Semantic: initialize + doesn't type instance var as nilable if out doesn't type instance var as nilable if out + doesn't type instance var as nilable if not used in method call doesn't type instance var as nilable if not used in method call + doesn't type instance var as nilable if used after method call that doesn't read var doesn't type instance var as nilable if used after method call that doesn't read var + marks instance variable as nilable in initialize if using self in method marks instance variable as nilable in initialize if using self in method + types instance var as nilable if not always assigned types instance var as nilable if not always assigned + marks instance variable as nilable when using self in super marks instance variable as nilable when using self in super + finishes when analyzing recursive calls finishes when analyzing recursive calls + types instance var as nilable if assigned in block types instance var as nilable if assigned in block + types instance var as non-nilable if calls super and super defines it, with one level of indirection types instance var as non-nilable if calls super and super defines it, with one level of indirection + doesn't type ivar having initializer as nilable even if it is used before assigned inside initialize (#5112) doesn't type ivar having initializer as nilable even if it is used before assigned inside initialize (#5112) + doesn't type ivar as nilable if super call present and parent has already typed ivar (#4764) doesn't type ivar as nilable if super call present and parent has already typed ivar (#4764) + types instance var as nilable if used before assignment types instance var as nilable if used before assignment + types initializer of recursive generic type types initializer of recursive generic type + doesn't type instance var as nilable if assigned before method call doesn't type instance var as nilable if assigned before method call + types instance vars as nilable if doesn't invoke super with default arguments types instance vars as nilable if doesn't invoke super with default arguments + types instance var as non-nilable if calls super and super defines it types instance var as non-nilable if calls super and super defines it + doesn't type instance var as nilable if used after method call inside typeof doesn't type instance var as nilable if used after method call inside typeof + doesn't type instance var as nilable if used after global method call doesn't type instance var as nilable if used after global method call + doesn't type instance var as nilable if used after method call that assigns var doesn't type instance var as nilable if used after method call that assigns var + marks instance variable as nilable in initialize if using self marks instance variable as nilable in initialize if using self + types instance var as nilable if used after method call that reads var (2) types instance var as nilable if used after method call that reads var (2) + doesn't mark instance variable as nilable when using self.class doesn't mark instance variable as nilable when using self.class + types instance var as nilable if used after method call that reads var through other calls types instance var as nilable if used after method call that reads var through other calls + checks instance vars of included modules checks instance vars of included modules + types initializer of generic type after instantiated types initializer of generic type after instantiated + types instance var as not-nilable if assigned in block but previously assigned types instance var as not-nilable if assigned in block but previously assigned + marks instance variable as nilable in initialize if assigning self marks instance variable as nilable in initialize if assigning self + types instance vars as nilable if doesn't invoke super in initialize types instance vars as nilable if doesn't invoke super in initialize + doesn't mark instance variable as nilable when using self.class in method doesn't mark instance variable as nilable when using self.class in method + types instance var as nilable if used after method call that reads var types instance var as nilable if used after method call that reads var + errors on default new when using named arguments (#2245) errors on default new when using named arguments (#2245) + types instance vars as nilable if doesn't invoke super in initialize with deep subclass types instance vars as nilable if doesn't invoke super in initialize with deep subclass + errors if found matches for initialize but doesn't cover all (bug #204) errors if found matches for initialize but doesn't cover all (bug #204) + types instance var as nilable if used in first of two method calls types instance var as nilable if used in first of two method calls +Semantic: metaclass + types generic module metaclass types generic module metaclass + types Object class types Object class + can't reopen as struct can't reopen as struct + types Object and Class metaclasses types Object and Class metaclasses + types metaclass superclass types metaclass superclass + can't reopen as module can't reopen as module + types generic instance metaclass superclass types generic instance metaclass superclass + subtyping relations between metaclasses + non-generic classes non-generic classes + non-generic modules non-generic modules + generic modules (2) generic modules (2) + generic classes (1) generic classes (1) + generic modules (1) generic modules (1) + generic classes (3) generic classes (3) + generic modules (3) generic modules (3) + virtual metaclass type with virtual type (#12628) virtual metaclass type with virtual type (#12628) + generic classes (2) generic classes (2) + types Class class types Class class + types generic class metaclass types generic class metaclass + types generic metaclass superclass types generic metaclass superclass + types Reference metaclass types Reference metaclass +Semantic: is_a? + checks simple type with union checks simple type with union + restricts type inside if scope 1 restricts type inside if scope 1 + does is_a? from virtual metaclass to generic metaclass (#12302) does is_a? from virtual metaclass to generic metaclass (#12302) + restricts other types inside if else restricts other types inside if else + restricts type in else but lazily restricts type in else but lazily + doesn't fail on untyped is_a (#10317) doesn't fail on untyped is_a (#10317) + types if is_a? preceded by return if (preserves nops) types if is_a? preceded by return if (preserves nops) + applies filter inside block applies filter inside block + is bool is bool + restricts type inside if else when used with module type restricts type inside if else when used with module type + restricts type inside if scope 3 restricts type inside if scope 3 + restricts type inside if scope 2 restricts type inside if scope 2 + restricts in assignment restricts in assignment + applies negative condition filter if then is no return applies negative condition filter if then is no return + checks union with union checks union with union +.system + failing command failing command + successful command successful command +sh: line 1: commanddoesnotexist: command not found + command does not exist command does not exist + successful command with output successful command with output +Semantic: array + types array literal of int with splats types array literal of int with splats + types non-empty typed array literal of int types non-empty typed array literal of int + types array literal of union types array literal of union + types non-empty typed array literal of int types non-empty typed array literal of int + types array literal size correctly types array literal size correctly + types empty typed array literal of int32 types empty typed array literal of int32 + assignment in array literal works (#3195) assignment in array literal works (#3195) + types array literal with splats (2) types array literal with splats (2) + types array literal with splats types array literal with splats + types array literal of int types array literal of int +Code gen: proc + codegens proc to implicit self in constant (#647) codegens proc to implicit self in constant (#647) codegens proc to implicit self in constant (#647) codegens proc to implicit self in constant (#647) codegens proc to implicit self in constant (#647) codegens proc to implicit self in constant (#647) codegens proc to implicit self in constant (#647) codegens proc to implicit self in constant (#647) codegens proc to implicit self in constant (#647) codegens proc to implicit self in constant (#647) + builds proc type from fun builds proc type from fun + call proc pointer of instance method that raises call proc pointer of instance method that raises call proc pointer of instance method that raises call proc pointer of instance method that raises call proc pointer of instance method that raises call proc pointer of instance method that raises call proc pointer of instance method that raises call proc pointer of instance method that raises call proc pointer of instance method that raises call proc pointer of instance method that raises + accesses T in macros as a TupleLiteral accesses T in macros as a TupleLiteral + doesn't crash when taking a proc pointer that multidispatches on the top-level (#3822) doesn't crash when taking a proc pointer that multidispatches on the top-level (#3822) + call proc pointer of instance method call proc pointer of instance method + codegens nilable proc type (2) codegens nilable proc type (2) + calls proc pointer with union (passed by value) arg calls proc pointer with union (passed by value) arg + call simple proc literal with return call simple proc literal with return + saves receiver value of proc pointer `->var.foo` saves receiver value of proc pointer `->var.foo` + saves receiver value of proc pointer `->@ivar.foo` saves receiver value of proc pointer `->@ivar.foo` + codegens proc with another var codegens proc with another var + passes proc as &->expr to method that yields passes proc as &->expr to method that yields + call simple proc literal call simple proc literal + allows using proc arg name shadowing local variable allows using proc arg name shadowing local variable + allows proc type of enum type with base type allows proc type of enum type with base type + allows invoking a function with a subtype when defined as block spec allows invoking a function with a subtype when defined as block spec + codegens proc that references struct (bug) codegens proc that references struct (bug) + allows invoking proc literal with smaller type allows invoking proc literal with smaller type + takes pointerof function pointer takes pointerof function pointer + calls function pointer calls function pointer calls function pointer calls function pointer calls function pointer calls function pointer calls function pointer calls function pointer calls function pointer calls function pointer + allows proc type of enum type allows proc type of enum type + codegens proc with union type that returns itself codegens proc with union type that returns itself + can assign proc that returns anything to proc that returns nil, using union type (#3655) can assign proc that returns anything to proc that returns nil, using union type (#3655) + codegens proc that accepts array of type codegens proc that accepts array of type codegens proc that accepts array of type codegens proc that accepts array of type codegens proc that accepts array of type codegens proc that accepts array of type codegens proc that accepts array of type codegens proc that accepts array of type codegens proc that accepts array of type codegens proc that accepts array of type + doesn't crash when taking a proc pointer that multidispatches on a module (#3822) doesn't crash when taking a proc pointer that multidispatches on a module (#3822) + codegens nilable proc type dispatch (1) codegens nilable proc type dispatch (1) + codegens proc literal hard type inference (1) codegens proc literal hard type inference (1) codegens proc literal hard type inference (1) codegens proc literal hard type inference (1) codegens proc literal hard type inference (1) codegens proc literal hard type inference (1) codegens proc literal hard type inference (1) codegens proc literal hard type inference (1) codegens proc literal hard type inference (1) codegens proc literal hard type inference (1) + codegens proc of generic type codegens proc of generic type + doesn't crash on #2196 doesn't crash on #2196 + builds nilable proc type from fun builds nilable proc type from fun + call proc literal with arguments call proc literal with arguments + executes proc pointer on primitive executes proc pointer on primitive + codegens nilable proc type (1) codegens nilable proc type (1) + makes sure that proc pointer is transformed after type inference makes sure that proc pointer is transformed after type inference makes sure that proc pointer is transformed after type inference makes sure that proc pointer is transformed after type inference makes sure that proc pointer is transformed after type inference makes sure that proc pointer is transformed after type inference makes sure that proc pointer is transformed after type inference makes sure that proc pointer is transformed after type inference makes sure that proc pointer is transformed after type inference makes sure that proc pointer is transformed after type inference + closures var on ->var.call (#8584) closures var on ->var.call (#8584) + uses alias of proc with virtual type (#1347) uses alias of proc with virtual type (#1347) uses alias of proc with virtual type (#1347) uses alias of proc with virtual type (#1347) uses alias of proc with virtual type (#1347) uses alias of proc with virtual type (#1347) uses alias of proc with virtual type (#1347) uses alias of proc with virtual type (#1347) uses alias of proc with virtual type (#1347) uses alias of proc with virtual type (#1347) + codegens proc that accepts a union and is called with a single type codegens proc that accepts a union and is called with a single type + allows redefining fun allows redefining fun + raises if returning closure from top-level fun (#14691) raises if returning closure from top-level fun (#14691) raises if returning closure from top-level fun (#14691) raises if returning closure from top-level fun (#14691) raises if returning closure from top-level fun (#14691) raises if returning closure from top-level fun (#14691) raises if returning closure from top-level fun (#14691) raises if returning closure from top-level fun (#14691) raises if returning closure from top-level fun (#14691) raises if returning closure from top-level fun (#14691) + mangles strings in such a way they don't conflict with funs (#1006) mangles strings in such a way they don't conflict with funs (#1006) + gets proc pointer using virtual type (#1337) gets proc pointer using virtual type (#1337) + returns ProcPointer inside top-level fun (#14691) returns ProcPointer inside top-level fun (#14691) + casts from function pointer to proc casts from function pointer to proc + assigns nil and proc to nilable proc type assigns nil and proc to nilable proc type + call proc literal with return type call proc literal with return type + codegens proc that returns a virtual type codegens proc that returns a virtual type + passes block to another function (bug: mangling of both methods was the same) passes block to another function (bug: mangling of both methods was the same) + call proc pointer with args call proc pointer with args + codegens captured block that returns tuple codegens captured block that returns tuple + codegens nilable proc type dispatch (2) codegens nilable proc type dispatch (2) + codegens proc in instance var initialize (#3016) codegens proc in instance var initialize (#3016) + binds function pointer to associated call binds function pointer to associated call + allows invoking a function with a subtype allows invoking a function with a subtype + codegens issue with missing byval in proc literal inside struct codegens issue with missing byval in proc literal inside struct codegens issue with missing byval in proc literal inside struct codegens issue with missing byval in proc literal inside struct codegens issue with missing byval in proc literal inside struct codegens issue with missing byval in proc literal inside struct codegens issue with missing byval in proc literal inside struct codegens issue with missing byval in proc literal inside struct codegens issue with missing byval in proc literal inside struct codegens issue with missing byval in proc literal inside struct + automatically casts proc that returns something to proc that returns void automatically casts proc that returns something to proc that returns void + allows proc pointer where self is a class allows proc pointer where self is a class + call proc pointer call proc pointer + saves receiver value of proc pointer `->@@cvar.foo` saves receiver value of proc pointer `->@@cvar.foo` saves receiver value of proc pointer `->@@cvar.foo` saves receiver value of proc pointer `->@@cvar.foo` saves receiver value of proc pointer `->@@cvar.foo` saves receiver value of proc pointer `->@@cvar.foo` saves receiver value of proc pointer `->@@cvar.foo` saves receiver value of proc pointer `->@@cvar.foo` saves receiver value of proc pointer `->@@cvar.foo` saves receiver value of proc pointer `->@@cvar.foo` + doesn't crash when taking a proc pointer to a virtual type (#9823) doesn't crash when taking a proc pointer to a virtual type (#9823) + does new on proc type does new on proc type + gets proc to lib fun (#504) gets proc to lib fun (#504) + can assign proc that returns anything to proc that returns nil (#3655) can assign proc that returns anything to proc that returns nil (#3655) + can pass Proc(T) to Proc(Nil) in type restriction (#8964) can pass Proc(T) to Proc(Nil) in type restriction (#8964) + returns proc as function pointer inside top-level fun (#14691) returns proc as function pointer inside top-level fun (#14691) + allows passing proc type to C automatically allows passing proc type to C automatically allows passing proc type to C automatically allows passing proc type to C automatically allows passing proc type to C automatically allows passing proc type to C automatically allows passing proc type to C automatically allows passing proc type to C automatically allows passing proc type to C automatically allows passing proc type to C automatically +Lexer string + lexes double numeral lexes double numeral + says syntax error on "\"\\uD800\"" says syntax error on "\"\\uD800\"" + raises when identifier doesn't start with a letter or number raises when identifier doesn't start with a letter or number + lexes string with unicode codepoint in curly multiple times lexes string with unicode codepoint in curly multiple times + lexes heredoc with spaces before close tag lexes heredoc with spaces before close tag + says syntax error on "\"\\u{}\"" says syntax error on "\"\\u{}\"" + lexes interpolations in heredocs lexes interpolations in heredocs + says syntax error on "\"\\u{DFFF}\"" says syntax error on "\"\\u{DFFF}\"" + lexes simple string with nested %( lexes simple string with nested %( + lexes string with slash lexes string with slash + lexes string with only newline lexes string with only newline + lexes regex string with escaped slash with %r(...) lexes regex string with escaped slash with %r(...) + lexes regex string with escaped space with /.../ lexes regex string with escaped space with /.../ + lexes simple string with nested %{ lexes simple string with nested %{ + says syntax error on "\"\\u{D800}\"" says syntax error on "\"\\u{D800}\"" + lexes string with interpolation lexes string with interpolation + lexes string with slash t lexes string with slash t + lexes string with newline lexes string with newline + assigns correct location after heredoc (#346) assigns correct location after heredoc (#346) + lexes simple string lexes simple string + lexes string with unicode codepoint lexes string with unicode codepoint + lexes slash with no-escape char lexes slash with no-escape char + lexes simple string with %( lexes simple string with %( + says syntax error on "\"\\uDFFF\"" says syntax error on "\"\\uDFFF\"" + says syntax error on "\"\\u{110000}\"" says syntax error on "\"\\u{110000}\"" + lexes string with backslash lexes string with backslash + lexes heredoc lexes heredoc + lexes simple string with nested %< lexes simple string with nested %< + lexes string with interpolation with double numeral lexes string with interpolation with double numeral + lexes regex string with escaped slash with /.../ lexes regex string with escaped slash with /.../ + lexes heredoc with empty line lexes heredoc with empty line + raises on unexpected EOF while lexing heredoc raises on unexpected EOF while lexing heredoc + lexes heredoc with \r\n lexes heredoc with \r\n + lexes backtick string lexes backtick string + lexes string with slash quote lexes string with slash quote + lexes regex string with special chars with /.../ lexes regex string with special chars with /.../ + raises on unterminated heredoc raises on unterminated heredoc + lexes simple string with nested %[ lexes simple string with nested %[ + lexes string with numeral lexes string with numeral + lexes regex string lexes regex string + lexes string with unicode codepoint in curly lexes string with unicode codepoint in curly + lexes regex string with escaped space with %r(...) lexes regex string with escaped space with %r(...) + lexes simple string with %| lexes simple string with %| + lexes regex string with special chars with %r(...) lexes regex string with special chars with %r(...) + lexes string with literal newline lexes string with literal newline + says syntax error on "\"\\uFEDZ\"" says syntax error on "\"\\uFEDZ\"" +Lexer string array + using [ as delimiter + lexes simple string array lexes simple string array + using | as delimiter + lexes simple string array lexes simple string array + lexes simple string array lexes simple string array + using < as delimiter + lexes simple string array lexes simple string array + using { as delimiter + lexes simple string array lexes simple string array + lexes string array with new line gives correct column for next token lexes string array with new line gives correct column for next token + lexes string array with new line lexes string array with new line +Normalize: unless + normalizes unless normalizes unless +Code gen: C ABI + passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) + promotes variadic args (float to double) promotes variadic args (float to double) promotes variadic args (float to double) promotes variadic args (float to double) promotes variadic args (float to double) promotes variadic args (float to double) promotes variadic args (float to double) promotes variadic args (float to double) promotes variadic args (float to double) promotes variadic args (float to double) + returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) + promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) + passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) + passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) + passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) + accepts large struct in a callback (for real) accepts large struct in a callback (for real) accepts large struct in a callback (for real) accepts large struct in a callback (for real) accepts large struct in a callback (for real) accepts large struct in a callback (for real) accepts large struct in a callback (for real) accepts large struct in a callback (for real) accepts large struct in a callback (for real) accepts large struct in a callback (for real) + returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret + promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) + passes struct after many other args (for real) passes struct after many other args (for real) passes struct after many other args (for real) passes struct after many other args (for real) passes struct after many other args (for real) passes struct after many other args (for real) passes struct after many other args (for real) passes struct after many other args (for real) passes struct after many other args (for real) passes struct after many other args (for real) + promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) + promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) + returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) +Code gen: class + reads a virtual type instance var reads a virtual type instance var + codegens class method codegens class method + calls class method without self calls class method without self + assigns type to reference union type assigns type to reference union type + resolves type declaration when accessing instance var (#348) resolves type declaration when accessing instance var (#348) + never considers read instance var as closure (#12181) never considers read instance var as closure (#12181) + doesn't crash on abstract class never instantiated (#2840) doesn't crash on abstract class never instantiated (#2840) + works with array in variable initializer in non-generic type (#855) works with array in variable initializer in non-generic type (#855) works with array in variable initializer in non-generic type (#855) works with array in variable initializer in non-generic type (#855) works with array in variable initializer in non-generic type (#855) works with array in variable initializer in non-generic type (#855) works with array in variable initializer in non-generic type (#855) works with array in variable initializer in non-generic type (#855) works with array in variable initializer in non-generic type (#855) works with array in variable initializer in non-generic type (#855) + codegens method of class union including Int (#1476) codegens method of class union including Int (#1476) + allows fixing an instance variable's type allows fixing an instance variable's type + doesn't crash on #1216 with pointerof doesn't crash on #1216 with pointerof + codegens new which calls initialize codegens new which calls initialize + invokes class method inside instance method (#1119) invokes class method inside instance method (#1119) + does to_s for virtual metaclass type (3) does to_s for virtual metaclass type (3) does to_s for virtual metaclass type (3) does to_s for virtual metaclass type (3) does to_s for virtual metaclass type (3) does to_s for virtual metaclass type (3) does to_s for virtual metaclass type (3) does to_s for virtual metaclass type (3) does to_s for virtual metaclass type (3) does to_s for virtual metaclass type (3) + doesn't crash on #1216 doesn't crash on #1216 + runs instance variable initializer at the class level runs instance variable initializer at the class level + does to_s for virtual metaclass type (2) does to_s for virtual metaclass type (2) does to_s for virtual metaclass type (2) does to_s for virtual metaclass type (2) does to_s for virtual metaclass type (2) does to_s for virtual metaclass type (2) does to_s for virtual metaclass type (2) does to_s for virtual metaclass type (2) does to_s for virtual metaclass type (2) does to_s for virtual metaclass type (2) + codegens assignment of generic metaclasses (2) (#10394) codegens assignment of generic metaclasses (2) (#10394) + makes .class always be a virtual type even if no subclasses makes .class always be a virtual type even if no subclasses + does to_s for class does to_s for class does to_s for class does to_s for class does to_s for class does to_s for class does to_s for class does to_s for class does to_s for class does to_s for class + reads a union type instance var (reference union, first type) reads a union type instance var (reference union, first type) + codegens virtual metaclass union bug (#2597) codegens virtual metaclass union bug (#2597) + runs instance variable initializer at the class level, for generic type runs instance variable initializer at the class level, for generic type + codegens virtual generic class instance metaclass (#3819) codegens virtual generic class instance metaclass (#3819) + transfers initializer from module to generic class transfers initializer from module to generic class + calls method on Class class calls method on Class class + codegens singleton (#718) codegens singleton (#718) + does to_s on class does to_s on class does to_s on class does to_s on class does to_s on class does to_s on class does to_s on class does to_s on class does to_s on class does to_s on class + codegens bug #168 codegens bug #168 + codegens assignment of generic metaclasses (4) (#10394) codegens assignment of generic metaclasses (4) (#10394) + codegens recursive type codegens recursive type + doesn't skip zero initializers (#3272) doesn't skip zero initializers (#3272) + codegens assignment of generic metaclasses, base is non-generic (2) (#10394) codegens assignment of generic metaclasses, base is non-generic (2) (#10394) + doesn't crash if not using undefined instance variable in superclass doesn't crash if not using undefined instance variable in superclass + does to_s for virtual metaclass type (1) does to_s for virtual metaclass type (1) does to_s for virtual metaclass type (1) does to_s for virtual metaclass type (1) does to_s for virtual metaclass type (1) does to_s for virtual metaclass type (1) does to_s for virtual metaclass type (1) does to_s for virtual metaclass type (1) does to_s for virtual metaclass type (1) does to_s for virtual metaclass type (1) + codegens call to same instance codegens call to same instance + codegens method call of instance var codegens method call of instance var + codegens instance var codegens instance var + codegens assignment of generic metaclasses (3) (#10394) codegens assignment of generic metaclasses (3) (#10394) + allows using self in class scope allows using self in class scope + gets class of virtual type gets class of virtual type + uses number type var uses number type var + codegens class with recursive tuple to class (#4520) codegens class with recursive tuple to class (#4520) + codegens assignment of generic metaclasses, base is non-generic (1) (#10394) codegens assignment of generic metaclasses, base is non-generic (1) (#10394) + codegens initialize with instance var codegens initialize with instance var + reads other instance var reads other instance var + calls class method without self (2) calls class method without self (2) + codegens virtual call that calls another method codegens virtual call that calls another method + reads a union type instance var (reference union, second type) reads a union type instance var (reference union, second type) + transfers initializer from generic module to generic class transfers initializer from generic module to generic class + builds generic class bug builds generic class bug + codegens method from another method without obj and accesses instance vars codegens method from another method without obj and accesses instance vars + changes instance variable in method (ssa bug) changes instance variable in method (ssa bug) + reads a union type instance var (mixed union, second type) reads a union type instance var (mixed union, second type) + reads a union type instance var (mixed union, first type) reads a union type instance var (mixed union, first type) + codegens virtual method of generic class codegens virtual method of generic class + can assign virtual metaclass to virtual metaclass (#3007) can assign virtual metaclass to virtual metaclass (#3007) + allows using self in class scope allows using self in class scope allows using self in class scope allows using self in class scope allows using self in class scope allows using self in class scope allows using self in class scope allows using self in class scope allows using self in class scope allows using self in class scope + doesn't crash on #1216 (reduced) doesn't crash on #1216 (reduced) + codegens assignment of generic metaclasses (1) (#10394) codegens assignment of generic metaclasses (1) (#10394) + transfers initializer from generic module to non-generic class transfers initializer from generic module to non-generic class + runs with nilable instance var runs with nilable instance var + codegens virtual class method codegens virtual class method + doesn't skip false initializers (#3272) doesn't skip false initializers (#3272) + allows initializing var with constant allows initializing var with constant + doesn't crash on instance variable assigned a proc, and never instantiated (#923) doesn't crash on instance variable assigned a proc, and never instantiated (#923) + runs with nil instance var when inheriting runs with nil instance var when inheriting + notifies superclass recursively on inheritance (#576) notifies superclass recursively on inheritance (#576) + works with array in variable initializer in generic type (#855) works with array in variable initializer in generic type (#855) works with array in variable initializer in generic type (#855) works with array in variable initializer in generic type (#855) works with array in variable initializer in generic type (#855) works with array in variable initializer in generic type (#855) works with array in variable initializer in generic type (#855) works with array in variable initializer in generic type (#855) works with array in variable initializer in generic type (#855) works with array in variable initializer in generic type (#855) + can use a Main class (#1628) can use a Main class (#1628) can use a Main class (#1628) can use a Main class (#1628) can use a Main class (#1628) can use a Main class (#1628) can use a Main class (#1628) can use a Main class (#1628) can use a Main class (#1628) can use a Main class (#1628) +Code gen: multi assign + supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) + without strict_multi_assign + supports 1 to n assignment supports 1 to n assignment + doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count + supports m to n assignment, with splat on left-hand side (2) supports m to n assignment, with splat on left-hand side (2) + supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) + supports 1 to n assignment, with splat on left-hand side (2) supports 1 to n assignment, with splat on left-hand side (2) + strict_multi_assign + raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count + supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment + supports n to n assignment supports n to n assignment + supports m to n assignment, splat is empty tuple (3) supports m to n assignment, splat is empty tuple (3) + supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) + supports 1 to n assignment, with splat on left-hand side (3) supports 1 to n assignment, with splat on left-hand side (3) + supports m to n assignment, splat is empty tuple (1) supports m to n assignment, splat is empty tuple (1) + supports m to n assignment, with splat on left-hand side (1) supports m to n assignment, with splat on left-hand side (1) + supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) + supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short + supports 1 to n assignment, splat is empty (3) supports 1 to n assignment, splat is empty (3) + supports m to n assignment, splat is empty tuple (2) supports m to n assignment, splat is empty tuple (2) + supports m to n assignment, with splat on left-hand side (3) supports m to n assignment, with splat on left-hand side (3) + supports 1 to n assignment, splat is empty (2) supports 1 to n assignment, splat is empty (2) +Crystal::JSONHierarchyPrinter + works works +Code gen: tuple + passes empty tuple and empty named tuple to a method (#2852) passes empty tuple and empty named tuple to a method (#2852) + codegens tuple [2]? codegens tuple [2]? + codegens tuple metaclass [0..0] codegens tuple metaclass [0..0] + codegens tuple metaclass [3..2]? codegens tuple metaclass [3..2]? + codegens tuple [0] codegens tuple [0] + codegens tuple union (bug because union size was computed incorrectly) codegens tuple union (bug because union size was computed incorrectly) codegens tuple union (bug because union size was computed incorrectly) codegens tuple union (bug because union size was computed incorrectly) codegens tuple union (bug because union size was computed incorrectly) codegens tuple union (bug because union size was computed incorrectly) codegens tuple union (bug because union size was computed incorrectly) codegens tuple union (bug because union size was computed incorrectly) codegens tuple union (bug because union size was computed incorrectly) codegens tuple union (bug because union size was computed incorrectly) + downcasts union to mixed union with mixed tuple types downcasts union to mixed union with mixed tuple types downcasts union to mixed union with mixed tuple types downcasts union to mixed union with mixed tuple types downcasts union to mixed union with mixed tuple types downcasts union to mixed union with mixed tuple types downcasts union to mixed union with mixed tuple types downcasts union to mixed union with mixed tuple types downcasts union to mixed union with mixed tuple types downcasts union to mixed union with mixed tuple types + assigns tuple to compatible tuple assigns tuple to compatible tuple + merges two tuple types of same size (1) merges two tuple types of same size (1) + codegens tuple metaclass [2]? codegens tuple metaclass [2]? + codegens tuple [0..1] codegens tuple [0..1] + upcasts tuple inside union to union with compatible tuple upcasts tuple inside union to union with compatible tuple + upcasts tuple union to compatible tuple upcasts tuple union to compatible tuple + assigns tuple union to compatible tuple assigns tuple union to compatible tuple + assigns two same-size tuple types to a same var (#3132) assigns two same-size tuple types to a same var (#3132) + accesses T and creates instance from it accesses T and creates instance from it + codegens tuple [0..2] codegens tuple [0..2] + codegens tuple [0..0]? codegens tuple [0..0]? + codegens tuple [0..1]? codegens tuple [0..1]? + allows tuple covariance allows tuple covariance + allows malloc pointer of tuple allows malloc pointer of tuple + codegens tuple [1] (2) codegens tuple [1] (2) + codegens tuple [2..2]? codegens tuple [2..2]? + codegens tuple class codegens tuple class + codegens tuple metaclass [1] codegens tuple metaclass [1] + assigns tuple inside union to union with compatible tuple assigns tuple inside union to union with compatible tuple + merges two tuple types of same size (2) merges two tuple types of same size (2) + codegens tuple metaclass [0] codegens tuple metaclass [0] + codegens tuple [1..1] codegens tuple [1..1] + codegens tuple [1..0]? codegens tuple [1..0]? + codegens tuple [1] codegens tuple [1] + gets size at compile time gets size at compile time + upcasts tuple inside compatible tuple upcasts tuple inside compatible tuple + provides T as a tuple literal provides T as a tuple literal + codegens tuple [0..0] codegens tuple [0..0] + downcasts union inside tuple to value (#3907) downcasts union inside tuple to value (#3907) + codegens splats inside tuples codegens splats inside tuples + codegens tuple [0]? codegens tuple [0]? + codegens tuple [3..2]? codegens tuple [3..2]? + codegens tuple [1]? codegens tuple [1]? + codegens tuple [1..0] codegens tuple [1..0] + codegens tuple metaclass [0..1] codegens tuple metaclass [0..1] + downcasts union to mixed tuple type downcasts union to mixed tuple type + codegens tuple [-3..2]? codegens tuple [-3..2]? + codegens tuple [0..2]? codegens tuple [0..2]? + codegens tuple [1..1]? codegens tuple [1..1]? + codegens tuple [2..2] codegens tuple [2..2] + codegens union of tuple of float with tuple of tuple of float codegens union of tuple of float with tuple of tuple of float + codegens tuple metaclass [1..0] codegens tuple metaclass [1..0] + passed tuple to def passed tuple to def Crystal::Repl::Interpreter special vars - sets special var inside call inside block (#12250) sets special var inside call inside block (#12250) does special var that's a reference inside block does special var that's a reference inside block - does special var that's a reference for multidispatch does special var that's a reference for multidispatch + does special var that's a struct does special var that's a struct does special var that's a reference does special var that's a reference + sets special var inside call inside block (#12250) sets special var inside call inside block (#12250) + does special var that's a reference for multidispatch does special var that's a reference for multidispatch does special var that's a reference when there are optional arguments does special var that's a reference when there are optional arguments - does special var that's a struct does special var that's a struct +Code gen: sizeof + gets sizeof int gets sizeof int + can use instance_sizeof of virtual type can use instance_sizeof of virtual type + doesn't precompute sizeof of module (#7741) doesn't precompute sizeof of module (#7741) + can use instance_sizeof in type argument can use instance_sizeof in type argument + gets sizeof union gets sizeof union + gets instance_sizeof a generic type with type vars gets instance_sizeof a generic type with type vars + gets sizeof NoReturn gets sizeof NoReturn + alignof + gets alignof struct gets alignof struct + gets alignof union gets alignof union + alignof mixed union is not less than alignof its variant types alignof mixed union is not less than alignof its variant types + gets alignof class gets alignof class + gets alignof primitive types gets alignof primitive types + instance_alignof + gets instance_alignof a generic type with type vars gets instance_alignof a generic type with type vars + gets instance_alignof class gets instance_alignof class + doesn't precompute sizeof of abstract struct (#7741) doesn't precompute sizeof of abstract struct (#7741) + can use sizeof in type argument (2) can use sizeof in type argument (2) + can use sizeof of virtual type can use sizeof of virtual type + gets sizeof Bool (#8272) gets sizeof Bool (#8272) + returns correct sizeof for abstract struct (#4319) returns correct sizeof for abstract struct (#4319) + gets sizeof struct gets sizeof struct + gets sizeof Void gets sizeof Void + gets instance_sizeof class gets instance_sizeof class + gets sizeof Nil (#7644) gets sizeof Nil (#7644) + can use sizeof in type argument (1) can use sizeof in type argument (1) + gets sizeof class gets sizeof class +Crystal::Doc::Method + doc + gets doc from underlying method gets doc from underlying method + inherits doc from ancestor (no extra comment) inherits doc from ancestor (no extra comment) + inherits doc from ancestor (use :inherit:) inherits doc from ancestor (use :inherit:) + trailing comment is not part of a doc comment trailing comment is not part of a doc comment + inherits doc from previous def (no extra comment) inherits doc from previous def (no extra comment) + inherits doc from ancestor (use :inherit: plus more content) inherits doc from ancestor (use :inherit: plus more content) + trailing comment is not a doc comment trailing comment is not a doc comment + args_to_s + shows simple args shows simple args + shows underscore restriction shows underscore restriction + shows double splat args shows double splat args + shows return type restriction shows return type restriction + shows args and return type restriction shows args and return type restriction + shows block args with underscore shows block args with underscore + shows splat args shows splat args + shows external name of arg shows external name of arg + shows block args if a def has `yield` shows block args if a def has `yield` + shows external name of arg with quotes and escaping shows external name of arg with quotes and escaping + shows typeof restriction of arg with highlighting shows typeof restriction of arg with highlighting + shows default value of arg with highlighting shows default value of arg with highlighting + shows block args shows block args +Semantic: offsetof + can be used with generic types can be used with generic types + errors on undefined instance variable errors on undefined instance variable + errors on offsetof element of uninstantiated generic type errors on offsetof element of uninstantiated generic type + gives error if using offsetof on Tuples with instance variables gives error if using offsetof on Tuples with instance variables + gives error if using offsetof on something that's neither a class, a struct nor a Tuple gives error if using offsetof on something that's neither a class, a struct nor a Tuple + gives error if using offsetof on something that can't have instance variables gives error if using offsetof on something that can't have instance variables + gives error if using offsetof on Tuples with indexes greater than tuple size gives error if using offsetof on Tuples with indexes greater than tuple size + types offsetof types offsetof + gives error if using offsetof on non-Tuples with an index gives error if using offsetof on non-Tuples with an index + can be used with classes can be used with classes + gives error if using offsetof on Tuples with negative indexes gives error if using offsetof on Tuples with negative indexes + errors on typeof inside offsetof expression errors on typeof inside offsetof expression +Crystal::TextHierarchyPrinter + shows correct total size of generic class if known shows correct total size of generic class if known + works works + shows correct size for Bool member shows correct size for Bool member + shows correct size for Proc inside extern struct shows correct size for Proc inside extern struct + shows correct size for members with bound types shows correct size for members with bound types +Code gen: method_missing + does method_missing macro without args (with call) does method_missing macro without args (with call) + works with named arguments (#3654) works with named arguments (#3654) + does method_missing with assignment (bug) does method_missing with assignment (bug) + does method_missing macro with top level method involved does method_missing macro with top level method involved + does method_missing macro with block does method_missing macro with block + does method_missing macro with virtual type (3) does method_missing macro with virtual type (3) + does method_missing macro with args (with call) does method_missing macro with args (with call) + does method_missing macro with virtual type (7) does method_missing macro with virtual type (7) + does method_missing macro with virtual type (2) does method_missing macro with virtual type (2) + does method_missing macro without args does method_missing macro without args + finds method_missing with 'with ... yield' finds method_missing with 'with ... yield' + does method_missing macro with block but not using it does method_missing macro with block but not using it + does method_missing macro with virtual type (1) does method_missing macro with virtual type (1) + works with named arguments that aren't legal variable names (#10381) works with named arguments that aren't legal variable names (#10381) + does method_missing macro with included module does method_missing macro with included module + does method_missing with assignment (2) (bug) does method_missing with assignment (2) (bug) + does method_missing macro with virtual type (5) does method_missing macro with virtual type (5) + does method_missing macro with virtual type (8) does method_missing macro with virtual type (8) + does method_missing generating method does method_missing generating method + does method_missing macro with virtual type (4) does method_missing macro with virtual type (4) + does method_missing macro with virtual type (6) does method_missing macro with virtual type (6) + forwards forwards + does method_missing macro with module involved does method_missing macro with module involved + does method_missing macro with args does method_missing macro with args +Semantic: macro overload + doesn't overwrite last macro definition if named args differs doesn't overwrite last macro definition if named args differs +Semantic: not + filters types inside if/else filters types inside if/else + filters types inside if filters types inside if + doesn't restrict and in while (#4243) doesn't restrict and in while (#4243) + doesn't restrict and doesn't restrict and + types not types not + types not as NoReturn if exp is NoReturn types not as NoReturn if exp is NoReturn + filters types with !is_a? filters types with !is_a? +Code gen: virtual type + codegens new for virtual class with two types codegens new for virtual class with two types codegens new for virtual class with two types codegens new for virtual class with two types codegens new for virtual class with two types codegens new for virtual class with two types codegens new for virtual class with two types codegens new for virtual class with two types codegens new for virtual class with two types codegens new for virtual class with two types + returns type with virtual type def type returns type with virtual type def type + codegens virtual call with explicit self codegens virtual call with explicit self + correctly dispatch call with block when the obj is a virtual type correctly dispatch call with block when the obj is a virtual type + dispatches on virtual metaclass (1) dispatches on virtual metaclass (1) + calls class method 3 calls class method 3 + codegens virtual call with explicit self and nilable type codegens virtual call with explicit self and nilable type + call base overwritten method call base overwritten method + initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated + codegens new for virtual class with one type codegens new for virtual class with one type codegens new for virtual class with one type codegens new for virtual class with one type codegens new for virtual class with one type codegens new for virtual class with one type codegens new for virtual class with one type codegens new for virtual class with one type codegens new for virtual class with one type codegens new for virtual class with one type + codegens allocate for virtual type with custom new codegens allocate for virtual type with custom new + codegens virtual method of abstract metaclass codegens virtual method of abstract metaclass + dispatch call with nilable virtual arg dispatch call with nilable virtual arg + dispatches on virtual metaclass (3) dispatches on virtual metaclass (3) + lookup instance variables in parent types lookup instance variables in parent types + doesn't lookup in Value+ when virtual type is Object+ doesn't lookup in Value+ when virtual type is Object+ + call overwritten method call overwritten method + call base method call base method + codegens new for new on virtual abstract class (#3835) codegens new for new on virtual abstract class (#3835) codegens new for new on virtual abstract class (#3835) codegens new for new on virtual abstract class (#3835) codegens new for new on virtual abstract class (#3835) codegens new for new on virtual abstract class (#3835) codegens new for new on virtual abstract class (#3835) codegens new for new on virtual abstract class (#3835) codegens new for new on virtual abstract class (#3835) codegens new for new on virtual abstract class (#3835) + calls class method 1 calls class method 1 + dispatches on virtual metaclass (2) dispatches on virtual metaclass (2) + codegens call to Object#to_s from nilable type codegens call to Object#to_s from nilable type codegens call to Object#to_s from nilable type codegens call to Object#to_s from nilable type codegens call to Object#to_s from nilable type codegens call to Object#to_s from nilable type codegens call to Object#to_s from nilable type codegens call to Object#to_s from nilable type codegens call to Object#to_s from nilable type codegens call to Object#to_s from nilable type + assign instance variable in virtual type assign instance variable in virtual type + casts virtual type to union casts virtual type to union + calls class method 2 calls class method 2 + casts union to virtual casts union to virtual + codegens new twice for virtual codegens new twice for virtual + codegens call to Object#to_s from virtual type codegens call to Object#to_s from virtual type codegens call to Object#to_s from virtual type codegens call to Object#to_s from virtual type codegens call to Object#to_s from virtual type codegens call to Object#to_s from virtual type codegens call to Object#to_s from virtual type codegens call to Object#to_s from virtual type codegens call to Object#to_s from virtual type codegens call to Object#to_s from virtual type + casts virtual type to base virtual type casts virtual type to base virtual type + casts metaclass union type to virtual metaclass type (#6298) casts metaclass union type to virtual metaclass type (#6298) + dispatch call with virtual type argument dispatch call with virtual type argument + can belong to union can belong to union + codegens new for simple type, then for virtual codegens new for simple type, then for virtual + codegens non-virtual call that calls virtual call to another virtual call codegens non-virtual call that calls virtual call to another virtual call +Crystal::TablePrint + rows with horizontal separators rows with horizontal separators + single row with separator single row with separator + single cell single cell + multiple rows with separator multiple rows with separator + aligns cell content aligns cell content + colspan a cell that fits the available size colspan a cell that fits the available size + aligns columns borders aligns columns borders +Code gen: case + codegens case with one condition codegens case with one condition codegens case with one condition codegens case with one condition codegens case with one condition codegens case with one condition codegens case with one condition codegens case with one condition codegens case with one condition codegens case with one condition + codegens case when cond is a call codegens case when cond is a call codegens case when cond is a call codegens case when cond is a call codegens case when cond is a call codegens case when cond is a call codegens case when cond is a call codegens case when cond is a call codegens case when cond is a call codegens case when cond is a call + does case when with metaclass does case when with metaclass + codegens case with two conditions codegens case with two conditions codegens case with two conditions codegens case with two conditions codegens case with two conditions codegens case with two conditions codegens case with two conditions codegens case with two conditions codegens case with two conditions codegens case with two conditions + codegens case with class codegens case with class + codegens case that always returns codegens case that always returns codegens case that always returns codegens case that always returns codegens case that always returns codegens case that always returns codegens case that always returns codegens case that always returns codegens case that always returns codegens case that always returns + codegens case when constant bug (#1028) codegens case when constant bug (#1028) + codegens value-less case codegens value-less case + codegens case without whens but else codegens case without whens but else codegens case without whens but else codegens case without whens but else codegens case without whens but else codegens case without whens but else codegens case without whens but else codegens case without whens but else codegens case without whens but else codegens case without whens but else + codegens case with else codegens case with else codegens case with else codegens case with else codegens case with else codegens case with else codegens case with else codegens case with else codegens case with else codegens case with else +Normalize: multi assign + normalizes 1 to n, with splat on left-hand side, splat before other targets normalizes 1 to n, with splat on left-hand side, splat before other targets + normalizes m to n, with splat on left-hand side, splat is non-empty normalizes m to n, with splat on left-hand side, splat is non-empty + normalizes m to n, with *_ on left-hand side (3) normalizes m to n, with *_ on left-hand side (3) + without strict_multi_assign + normalizes 1 to n with [] normalizes 1 to n with [] + normalizes 1 to n with call normalizes 1 to n with call + normalizes 1 to n normalizes 1 to n + normalizes n to splat on left-hand side normalizes n to splat on left-hand side + normalizes n to *_ on left-hand side normalizes n to *_ on left-hand side + normalizes n to n with call normalizes n to n with call + strict_multi_assign + normalizes 1 to n with call normalizes 1 to n with call + normalizes 1 to n with [] normalizes 1 to n with [] + normalizes 1 to n normalizes 1 to n + normalizes n to n with [] normalizes n to n with [] + normalizes 1 to splat on left-hand side normalizes 1 to splat on left-hand side + normalizes m to n, with *_ on left-hand side (1) normalizes m to n, with *_ on left-hand side (1) + normalizes 1 to n, with splat on left-hand side, splat after other targets normalizes 1 to n, with splat on left-hand side, splat after other targets + normalizes n to n normalizes n to n + normalizes m to n, with splat on left-hand side, splat is empty normalizes m to n, with splat on left-hand side, splat is empty + normalizes 1 to n, with *_ on left-hand side (1) normalizes 1 to n, with *_ on left-hand side (1) + normalizes 1 to *_ on left-hand side normalizes 1 to *_ on left-hand side + normalizes 1 to n, with splat on left-hand side normalizes 1 to n, with splat on left-hand side + normalizes 1 to n, with *_ on left-hand side (3) normalizes 1 to n, with *_ on left-hand side (3) + normalizes 1 to n, with *_ on left-hand side (2) normalizes 1 to n, with *_ on left-hand side (2) + normalizes m to n, with *_ on left-hand side (2) normalizes m to n, with *_ on left-hand side (2) +Semantic: yield with scope + yields virtual type (#2171) (2) yields virtual type (#2171) (2) + it invokes global method inside block of yield scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope + it uses self for instance method it uses self for instance method it uses self for instance method it uses self for instance method it uses self for instance method it uses self for instance method it uses self for instance method it uses self for instance method it uses self for instance method it uses self for instance method + yields with dispatch (#2171) (1) yields with dispatch (#2171) (1) + uses instance variable of enclosing scope uses instance variable of enclosing scope + uses scope in global method uses scope in global method uses scope in global method uses scope in global method uses scope in global method uses scope in global method uses scope in global method uses scope in global method uses scope in global method uses scope in global method + uses method of with object uses method of with object + doesn't explode if specifying &block but never using it (#181) doesn't explode if specifying &block but never using it (#181) + generate right code when yielding struct as scope generate right code when yielding struct as scope + uses method of enclosing scope uses method of enclosing scope + uses scope in instance method uses scope in instance method uses scope in instance method uses scope in instance method uses scope in instance method uses scope in instance method uses scope in instance method uses scope in instance method uses scope in instance method uses scope in instance method Crystal::Repl::Interpreter - autocast - autocasts integer var to integer (#12560) autocasts integer var to integer (#12560) - autocasts float32 var to float64 (#12560) autocasts float32 var to float64 (#12560) - autocasts symbol to enum in multidispatch (#11782) autocasts symbol to enum in multidispatch (#11782) - autocasts int in multidispatch autocasts int in multidispatch - autocasts number literal to float autocasts number literal to float - autocasts symbol to enum in ivar initializer (#12216) autocasts symbol to enum in ivar initializer (#12216) - autocasts symbol to enum autocasts symbol to enum - autocasts integer var to float (#12560) autocasts integer var to float (#12560) - autocasts number literal to integer autocasts number literal to integer -Code gen: enum - can use macro calls inside enum value, with receiver (#424) can use macro calls inside enum value, with receiver (#424) - codegens enum bitflags None codegens enum bitflags None - codegens enum without explicit value codegens enum without explicit value - codegens enum bitflags (4) codegens enum bitflags (4) - can define flags enum : UInt128 with 128 values can define flags enum : UInt128 with 128 values - codegens enum bitflags (2) codegens enum bitflags (2) - does ~ at compile time for enum member does ~ at compile time for enum member - creates enum from value creates enum from value - can define flags enum : UInt128 with compile-time interpreted values can define flags enum : UInt128 with compile-time interpreted values - codegens enum codegens enum - automatically defines question method for each enum member (false case) automatically defines question method for each enum member (false case) - codegens enum bitflags (1) codegens enum bitflags (1) - automatically defines question method for each enum member (flags, true case) automatically defines question method for each enum member (flags, true case) - automatically defines question method for each enum member (true case) automatically defines question method for each enum member (true case) - can redefine Enum.new and use previous_def can redefine Enum.new and use previous_def - adds a none? method to flags enum adds a none? method to flags enum - codegens enum All redefined codegens enum All redefined - codegens enum None redefined codegens enum None redefined - uses enum value before declaration (hoisting) uses enum value before declaration (hoisting) - can use macro calls inside enum value (#424) can use macro calls inside enum value (#424) - codegens enum bitflags All codegens enum bitflags All - can define flags enum : UInt64 with more than 32 values (#7268) can define flags enum : UInt64 with more than 32 values (#7268) - allows class vars in enum allows class vars in enum - codegens enum value codegens enum value - automatically defines question method for each enum member (flags, false case) automatically defines question method for each enum member (flags, false case) - casts All value to base type casts All value to base type - can use macro calls inside enum value, macro defined outside enum (#424) can use macro calls inside enum value, macro defined outside enum (#424) -Crystal::Playground::Agent - should send json messages and return inspected value should send json messages and return inspected value -Compiler - has a valid version has a valid version - treats all arguments post-filename as program arguments treats all arguments post-filename as program arguments - compiles a file compiles a file compiles a file compiles a file compiles a file compiles a file compiles a file compiles a file compiles a file compiles a file - runs subcommand in preference to a filename runs subcommand in preference to a filename runs subcommand in preference to a filename runs subcommand in preference to a filename runs subcommand in preference to a filename runs subcommand in preference to a filename runs subcommand in preference to a filename runs subcommand in preference to a filename runs subcommand in preference to a filename runs subcommand in preference to a filename -Normalize: range literal - normalizes not exclusive normalizes not exclusive - normalizes exclusive normalizes exclusive + symbol + symbol equality symbol equality + Symbol#to_i Symbol#to_i + Symbol#to_s Symbol#to_s +Code gen: if + doesn't crash no NoReturn var (true left cond) (#1823) doesn't crash no NoReturn var (true left cond) (#1823) + codes if with two whiles codes if with two whiles + codegens if without an else with false codegens if without an else with false + codegens if of nilable type in else 3 codegens if of nilable type in else 3 + codegens if with return in else preserves type filter codegens if with return in else preserves type filter codegens if with return in else preserves type filter codegens if with return in else preserves type filter codegens if with return in else preserves type filter codegens if with return in else preserves type filter codegens if with return in else preserves type filter codegens if with return in else preserves type filter codegens if with return in else preserves type filter codegens if with return in else preserves type filter + codegens if inside def without an else with true codegens if inside def without an else with true + codegens if with int codegens if with int + doesn't crash with if !is_a? using var in then doesn't crash with if !is_a? using var in then + codegens if with nil codegens if with nil + considers or truthy/falsey right considers or truthy/falsey right + codegen if with union type and else without type codegen if with union type and else without type + codegens if without an else with true codegens if without an else with true + codegens if of nilable type in then 2 codegens if of nilable type in then 2 + codegens if with union codegens if with union + codegens nested if with var (ssa bug) codegens nested if with var (ssa bug) + codegens if of nilable type in then codegens if of nilable type in then + codegens if with an else with true codegens if with an else with true + codegens #3104 codegens #3104 + codegens if with pointer 0x100000000 pointer codegens if with pointer 0x100000000 pointer + doesn't crash no NoReturn var (non-true left cond) (#1823) doesn't crash no NoReturn var (non-true left cond) (#1823) + codegens if with return in both branches codegens if with return in both branches + codegen if inside if codegen if inside if + codegens if with virtual codegens if with virtual + codegens if with an else with false codegens if with an else with false + codegen if with nested if that returns codegen if with nested if that returns + codegens if value from then codegens if value from then + codegen if with union type and then without type codegen if with union type and then without type + codegens if with return and no else codegens if with return and no else + doesn't crash with if !var using var in else doesn't crash with if !var using var in else + restricts with || always falsey restricts with || always falsey + codegens if of nilable type in else codegens if of nilable type in else + codegens if with nested if that raises codegens if with nested if that raises codegens if with nested if that raises codegens if with nested if that raises codegens if with nested if that raises codegens if with nested if that raises codegens if with nested if that raises codegens if with nested if that raises codegens if with nested if that raises codegens if with nested if that raises + codegens bug #1729 codegens bug #1729 + doesn't generate truthy if branch if doesn't need value (bug) doesn't generate truthy if branch if doesn't need value (bug) +Restrictions + errors if using typeof inside generic type errors if using typeof inside generic type + works with static array that uses underscore works with static array that uses underscore + works with generic class metaclass vs. generic class metaclass works with generic class metaclass vs. generic class metaclass + restricts aliased typedef type (#9474) restricts aliased typedef type (#9474) + doesn't error if using NamedTuple with no args doesn't error if using NamedTuple with no args + sets number as unbound generic type var (#13110) sets number as unbound generic type var (#13110) + works with generic class metaclass vs. generic instance class metaclass works with generic class metaclass vs. generic instance class metaclass + matches number in bound free variable (#13605) matches number in bound free variable (#13605) + works with static array (#637) works with static array (#637) + restricts class union type to overloads with classes restricts class union type to overloads with classes + errors on T::Type that's union when used from type restriction errors on T::Type that's union when used from type restriction + errors if using typeof errors if using typeof + errors if using typeof in block restriction errors if using typeof in block restriction + restricts class union type to overloads with classes (2) restricts class union type to overloads with classes (2) + does not treat single path as free variable when given number (1) (#11859) does not treat single path as free variable when given number (1) (#11859) + doesn't error if using Tuple with no args doesn't error if using Tuple with no args + restriction_of? + Metaclass vs Metaclass + keeps typed Metaclass before untyped Metaclass keeps typed Metaclass before untyped Metaclass + inserts typed Metaclass before untyped Metaclass inserts typed Metaclass before untyped Metaclass + Path vs NumberLiteral + inserts number literal before constant of same value with generic arguments inserts number literal before constant of same value with generic arguments + inserts constant before number literal of same value with generic arguments inserts constant before number literal of same value with generic arguments + Union + handles redefinitions (2) (#12330) handles redefinitions (2) (#12330) + handles redefinitions (1) (#12330) handles redefinitions (1) (#12330) + orders union before generic (#12330) orders union before generic (#12330) + Generic vs Path + keeps typed Generic before untyped Path keeps typed Generic before untyped Path + inserts untyped Generic before untyped Path inserts untyped Generic before untyped Path + inserts typed Generic before untyped Path inserts typed Generic before untyped Path + inserts untyped Generic before untyped Path (2) inserts untyped Generic before untyped Path (2) + keeps untyped Generic before untyped Path keeps untyped Generic before untyped Path + Path vs Path + inserts typed Path before untyped Path inserts typed Path before untyped Path + keeps typed Path before untyped Path keeps typed Path before untyped Path + GenericClassType vs GenericClassInstanceType + inserts GenericClassInstanceType before GenericClassType inserts GenericClassInstanceType before GenericClassType + works with classes in different namespaces works with classes in different namespaces + doesn't mix different generic classes doesn't mix different generic classes + keeps GenericClassInstanceType before GenericClassType keeps GenericClassInstanceType before GenericClassType + Metaclass vs Path + keeps metaclass before Value keeps metaclass before Value + doesn't error if path is undefined and method is not called (2) (#12516) doesn't error if path is undefined and method is not called (2) (#12516) + keeps metaclass before Class keeps metaclass before Class + inserts metaclass before Class inserts metaclass before Class + inserts metaclass before Object inserts metaclass before Object + doesn't error if path is undefined and method is not called (1) (#12516) doesn't error if path is undefined and method is not called (1) (#12516) + inserts metaclass before Value inserts metaclass before Value + keeps metaclass before Object keeps metaclass before Object + Generic vs Generic + inserts typed Generic before untyped Generic inserts typed Generic before untyped Generic + keeps typed Generic before untyped Generic keeps typed Generic before untyped Generic + NamedTuple vs NamedTuple + doesn't mix incompatible NamedTuples (#10238) doesn't mix incompatible NamedTuples (#10238) + keeps more specialized NamedTuple before less specialized one keeps more specialized NamedTuple before less specialized one + inserts more specialized NamedTuple before less specialized one inserts more specialized NamedTuple before less specialized one + Underscore vs Path + keeps underscore after Path (#12854) keeps underscore after Path (#12854) + works with splats and modules, under -Dpreview_overload_order (#12854) works with splats and modules, under -Dpreview_overload_order (#12854) + inserts Path before underscore (#12854) inserts Path before underscore (#12854) + free variables + keeps path before free variable with same name keeps path before free variable with same name + keeps constant before free variable with same name keeps constant before free variable with same name + inserts constant before free variable with same name inserts constant before free variable with same name + inserts path before free variable with same name inserts path before free variable with same name + keeps path before free variable even if free var resolves to a more specialized type keeps path before free variable even if free var resolves to a more specialized type + inserts path before free variable even if free var resolves to a more specialized type inserts path before free variable even if free var resolves to a more specialized type + allows passing recursive type to free var (#1076) allows passing recursive type to free var (#1076) + errors if using free var without forall errors if using free var without forall + makes metaclass subclass pass parent metaclass restriction (#2079) makes metaclass subclass pass parent metaclass restriction (#2079) + errors if using NamedTuple with positional args errors if using NamedTuple with positional args + errors if using Tuple with named args errors if using Tuple with named args + errors if can't find type on lookup with nested type errors if can't find type on lookup with nested type + errors if can't find type on lookup errors if can't find type on lookup + restricts virtual metaclass type against metaclass (#3438) restricts virtual metaclass type against metaclass (#3438) + passes #278 passes #278 + matches alias against alias in block type matches alias against alias in block type + matches virtual type against alias matches virtual type against alias + self always matches instance type in return type self always matches instance type in return type + errors on T::Type that's a union when used from block type restriction errors on T::Type that's a union when used from block type restriction + restrict + restricts module with another module restricts module with another module + restricts type with same type restricts type with same type + restricts type with superclass restricts type with superclass + restricts generic module instance with class restricts generic module instance with class + restricts virtual generic class against uninstantiated generic subclass (1) restricts virtual generic class against uninstantiated generic subclass (1) + restricts virtual generic class against uninstantiated generic subclass (2) restricts virtual generic class against uninstantiated generic subclass (2) + restricts type with another type restricts type with another type + restricts generic module instance with another generic module instance restricts generic module instance with another generic module instance + restricts virtual type with included module 1 restricts virtual type with included module 1 + restricts virtual type with included module 2 restricts virtual type with included module 2 + restricts class against uninstantiated generic base class through multiple inheritance (2) (#9660) restricts class against uninstantiated generic base class through multiple inheritance (2) (#9660) + restricts module through generic include (#4287) restricts module through generic include (#4287) + restricts type with included module restricts type with included module + restricts class against uninstantiated generic base class through multiple inheritance (1) (#9660) restricts class against uninstantiated generic base class through multiple inheritance (1) (#9660) + restricts generic module instance with another module restricts generic module instance with another module + works with generic compared to fixed (primitive) type works with generic compared to fixed (primitive) type + does not treat single path as free variable when given number (2) (#11859) does not treat single path as free variable when given number (2) (#11859) + errors if using typeof in block restriction errors if using typeof in block restriction + should not let GenericChild(Base) pass as a GenericBase(Child) (#1294) should not let GenericChild(Base) pass as a GenericBase(Child) (#1294) + self always matches instance type in restriction self always matches instance type in restriction + matches free variable for type variable matches free variable for type variable + sets number as free variable (#2699) sets number as free variable (#2699) + works with union against unions of generics works with union against unions of generics +Codegen: extern struct + doesn't crash with proc with extern struct that's a closure doesn't crash with proc with extern struct that's a closure + declares extern union, sets and gets instance var declares extern union, sets and gets instance var + invokes proc with extern struct with sret invokes proc with extern struct with sret + invokes proc with extern struct invokes proc with extern struct + codegens extern proc call twice (#4982) codegens extern proc call twice (#4982) + declares extern struct with no constructor, assigns var declares extern struct with no constructor, assigns var + sets callback on extern struct sets callback on extern struct sets callback on extern struct sets callback on extern struct sets callback on extern struct sets callback on extern struct sets callback on extern struct sets callback on extern struct sets callback on extern struct sets callback on extern struct + codegens proc that takes and returns large extern struct by value codegens proc that takes and returns large extern struct by value + codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI + codegens proc that takes an extern struct with C ABI, callback returns nil codegens proc that takes an extern struct with C ABI, callback returns nil codegens proc that takes an extern struct with C ABI, callback returns nil codegens proc that takes an extern struct with C ABI, callback returns nil codegens proc that takes an extern struct with C ABI, callback returns nil codegens proc that takes an extern struct with C ABI, callback returns nil codegens proc that takes an extern struct with C ABI, callback returns nil codegens proc that takes an extern struct with C ABI, callback returns nil codegens proc that takes an extern struct with C ABI, callback returns nil codegens proc that takes an extern struct with C ABI, callback returns nil + codegens proc that takes an extern struct with C ABI codegens proc that takes an extern struct with C ABI codegens proc that takes an extern struct with C ABI codegens proc that takes an extern struct with C ABI codegens proc that takes an extern struct with C ABI codegens proc that takes an extern struct with C ABI codegens proc that takes an extern struct with C ABI codegens proc that takes an extern struct with C ABI codegens proc that takes an extern struct with C ABI codegens proc that takes an extern struct with C ABI + declares extern union with no constructor declares extern union with no constructor + sets callback on extern union sets callback on extern union sets callback on extern union sets callback on extern union sets callback on extern union sets callback on extern union sets callback on extern union sets callback on extern union sets callback on extern union sets callback on extern union + declares extern struct, sets and gets instance var declares extern struct, sets and gets instance var + declares extern struct with no constructor declares extern struct with no constructor + codegens proc that takes and returns an extern struct with sret codegens proc that takes and returns an extern struct with sret codegens proc that takes and returns an extern struct with sret codegens proc that takes and returns an extern struct with sret codegens proc that takes and returns an extern struct with sret codegens proc that takes and returns an extern struct with sret codegens proc that takes and returns an extern struct with sret codegens proc that takes and returns an extern struct with sret codegens proc that takes and returns an extern struct with sret codegens proc that takes and returns an extern struct with sret + codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI + codegens proc that takes an extern struct with C ABI (2) codegens proc that takes an extern struct with C ABI (2) codegens proc that takes an extern struct with C ABI (2) codegens proc that takes an extern struct with C ABI (2) codegens proc that takes an extern struct with C ABI (2) codegens proc that takes an extern struct with C ABI (2) codegens proc that takes an extern struct with C ABI (2) codegens proc that takes an extern struct with C ABI (2) codegens proc that takes an extern struct with C ABI (2) codegens proc that takes an extern struct with C ABI (2) +Semantic: annotation + errors if wanting to add type inside annotation (2) (#8614) errors if wanting to add type inside annotation (2) (#8614) + #annotation + finds annotation in instance var (assignment) finds annotation in instance var (assignment) + errors if using invalid annotation on fun errors if using invalid annotation on fun + finds annotation in generic parent (#7885) finds annotation in generic parent (#7885) + finds annotation on method arg finds annotation on method arg + finds annotation in enum finds annotation in enum + can't find annotation in module can't find annotation in module + can't find annotation in instance var, when other annotations are present can't find annotation in instance var, when other annotations are present + overrides annotation value in type overrides annotation value in type + overrides annotation in instance var overrides annotation in instance var + finds annotation on method splat arg finds annotation on method splat arg + errors if annotation doesn't exist errors if annotation doesn't exist + finds annotation in module finds annotation in module + finds annotation in instance var (declaration) finds annotation in instance var (declaration) + doesn't carry link annotation from lib to fun doesn't carry link annotation from lib to fun + errors if using annotation other than ThreadLocal for class vars errors if using annotation other than ThreadLocal for class vars + finds annotation in instance var (declaration, generic) finds annotation in instance var (declaration, generic) + can't find annotation on def can't find annotation on def + uses annotation value, keyword uses annotation value, keyword + can't find annotation in module, when other annotations are present can't find annotation in module, when other annotations are present + adds annotation on def adds annotation on def + finds annotation in struct finds annotation in struct + finds annotation in class finds annotation in class + finds annotation on method double splat arg finds annotation on method double splat arg + can't find annotation in instance var can't find annotation in instance var + can't find annotation on def, when other annotations are present can't find annotation on def, when other annotations are present + finds annotation on an restricted method block arg finds annotation on an restricted method block arg + errors if annotation doesn't point to an annotation type errors if annotation doesn't point to an annotation type + finds annotation in lib finds annotation in lib + uses annotation value, positional uses annotation value, positional + arguments + returns a correctly with named and positional args returns a correctly with named and positional args + #named_args + returns an empty NamedTupleLiteral if there are none defined returns an empty NamedTupleLiteral if there are none defined + returns a NamedTupleLiteral if there are named arguments defined returns a NamedTupleLiteral if there are named arguments defined + #args + returns an empty TupleLiteral if there are none defined returns an empty TupleLiteral if there are none defined + returns a TupleLiteral if there are positional arguments defined returns a TupleLiteral if there are positional arguments defined + #annotations + all types + finds annotations on a enum finds annotations on a enum + finds annotations on a class finds annotations on a class + finds annotations on a lib finds annotations on a lib + find annotations on method parameters find annotations on method parameters + finds annotations on a module finds annotations on a module + finds annotations on a struct finds annotations on a struct + finds annotations in instance var (declaration) finds annotations in instance var (declaration) + adds annotations on def adds annotations on def + finds annotations in instance var (declaration, generic) finds annotations in instance var (declaration, generic) + returns an empty array if there are none defined returns an empty array if there are none defined + finds annotations in generic parent (#7885) finds annotations in generic parent (#7885) + of a specific type + returns an empty array if there are none defined returns an empty array if there are none defined + uses annotations value, positional uses annotations value, positional + finds annotations in struct finds annotations in struct + adds annotations on def adds annotations on def + collects annotations values in type collects annotations values in type + can't find annotations on def can't find annotations on def + can't find annotations in instance var can't find annotations in instance var + uses annotations value, keyword uses annotations value, keyword + find annotations on method parameters find annotations on method parameters + finds annotations in instance var (declaration) finds annotations in instance var (declaration) + can't find annotations on def, when other annotations are present can't find annotations on def, when other annotations are present + finds annotations in generic parent (#7885) finds annotations in generic parent (#7885) + finds annotations in class finds annotations in class + finds annotations in instance var (declaration, generic) finds annotations in instance var (declaration, generic) + finds annotations in lib finds annotations in lib + finds annotations in enum finds annotations in enum + overrides annotations value in type overrides annotations value in type + finds annotations on a module finds annotations on a module + can't find annotations in instance var, when other annotations are present can't find annotations in instance var, when other annotations are present + errors if wanting to add type inside annotation (1) (#8614) errors if wanting to add type inside annotation (1) (#8614) + declares annotation declares annotation + doesn't bleed annotation from class into class variable (#8314) doesn't bleed annotation from class into class variable (#8314) + errors when annotate instance variable in subclass errors when annotate instance variable in subclass +Codegen: responds_to? + codegens responds_to? with union gives true codegens responds_to? with union gives true + works with generic virtual superclass (2) works with generic virtual superclass (2) + works with generic virtual superclass (1) works with generic virtual superclass (1) + works with virtual type works with virtual type + doesn't error if result is discarded (#14113) doesn't error if result is discarded (#14113) + codegens responds_to? with generic class (1) codegens responds_to? with generic class (1) + works with virtual class type (1) (#1926) works with virtual class type (1) (#1926) + works with virtual class type (2) (#1926) works with virtual class type (2) (#1926) + works with generic virtual module (2) (#8334) works with generic virtual module (2) (#8334) + codegens responds_to? true for simple type codegens responds_to? true for simple type + codegens responds_to? with generic class (2) codegens responds_to? with generic class (2) + codegens responds_to? with nilable gives false because other type 2 codegens responds_to? with nilable gives false because other type 2 + works with two virtual types works with two virtual types + works with generic virtual module (1) works with generic virtual module (1) + codegens responds_to? with nilable gives false because other type 1 codegens responds_to? with nilable gives false because other type 1 + works with module works with module + codegens responds_to? with nilable gives true codegens responds_to? with nilable gives true + does for generic instance type metaclass (#4353) does for generic instance type metaclass (#4353) + codegens responds_to? with union gives false codegens responds_to? with union gives false + codegens responds_to? false for simple type codegens responds_to? false for simple type +Semantic: closure + correctly captures type of closured block arg correctly captures type of closured block arg + doesn't crash for non-existing variable (#3789) doesn't crash for non-existing variable (#3789) + doesn't mark var as closured if only used in two block doesn't mark var as closured if only used in two block + marks variable as closured inside block in fun marks variable as closured inside block in fun + marks method as self closured if instance var is written marks method as self closured if instance var is written + marks outer fun inside a block as closured marks outer fun inside a block as closured + doesn't mark self var as closured, but marks method as self closured doesn't mark self var as closured, but marks method as self closured + marks outer fun as closured when using self marks outer fun as closured when using self + lookups return type in correct scope lookups return type in correct scope + says can't send closure to C with captured block says can't send closure to C with captured block + transforms block to proc literal with free var transforms block to proc literal with free var + gives error when doing yield inside proc literal gives error when doing yield inside proc literal + errors if giving more block args when transforming block to proc literal errors if giving more block args when transforming block to proc literal + errors if sending closured proc pointer to C (3) errors if sending closured proc pointer to C (3) + marks method as self closured if explicit self call is made marks method as self closured if explicit self call is made + marks method as self closured if used inside a block marks method as self closured if used inside a block + marks variable as closured in program on assign marks variable as closured in program on assign + errors when transforming block to proc literal if type mismatch errors when transforming block to proc literal if type mismatch + errors if sending closured proc pointer to C (1.2) errors if sending closured proc pointer to C (1.2) + does assign all types to metavar if closured but only assigned to once in a loop through block does assign all types to metavar if closured but only assigned to once in a loop through block + can use fun typedef as block type can use fun typedef as block type + marks variable as closured in def marks variable as closured in def + transforms block to proc literal without parameters transforms block to proc literal without parameters + says can't send closure to C with new notation says can't send closure to C with new notation + errors if sending closured proc pointer to C (1) errors if sending closured proc pointer to C (1) + errors if sending closured proc pointer to C (2) errors if sending closured proc pointer to C (2) + unifies types of closured var (1) unifies types of closured var (1) + doesn't assign all types to metavar if closured but declared inside block and re-assigned inside the same context before the closure doesn't assign all types to metavar if closured but declared inside block and re-assigned inside the same context before the closure + marks method as self closured if implicit self call is made marks method as self closured if implicit self call is made + correctly detects previous var as closured (#5609) correctly detects previous var as closured (#5609) + doesn't closure typeof instance var (#9479) doesn't closure typeof instance var (#9479) + marks method as self closured if instance var is read marks method as self closured if instance var is read + does assign all types to metavar if closured but only assigned to once in a loop does assign all types to metavar if closured but only assigned to once in a loop + errors if forwarding block param doesn't match input type size errors if forwarding block param doesn't match input type size + does assign all types to metavar if closured but only assigned to once in a loop through captured block does assign all types to metavar if closured but only assigned to once in a loop through captured block + marks variable as closured in program marks variable as closured in program + errors if forwarding block param doesn't match input type errors if forwarding block param doesn't match input type + doesn't closure typeof local var doesn't closure typeof local var + transforms block to proc literal transforms block to proc literal + doesn't assign all types to metavar if closured but declared inside block and never re-assigned doesn't assign all types to metavar if closured but declared inside block and never re-assigned + gives error when doing yield inside proc literal gives error when doing yield inside proc literal + doesn't assign all types to metavar if closured but only assigned to once doesn't assign all types to metavar if closured but only assigned to once + marks variable as closured in block marks variable as closured in block + allows passing block as proc literal to new and to initialize allows passing block as proc literal to new and to initialize + unifies types of closured var (2) unifies types of closured var (2) + allows giving less block args when transforming block to proc literal allows giving less block args when transforming block to proc literal + is considered as closure if assigned once but comes from a method arg is considered as closure if assigned once but comes from a method arg + passes #227 passes #227 + transforms block to proc literal with void type transforms block to proc literal with void type + errors if sending closured proc literal to C errors if sending closured proc literal to C + doesn't mark var as closured if only used in block doesn't mark var as closured if only used in block + considers var as closure-readonly if it was assigned multiple times before it was closured considers var as closure-readonly if it was assigned multiple times before it was closured +Code gen: primitives + codegens f32 codegens f32 + defined method that calls primitive (bug) defined method that calls primitive (bug) + va_arg + uses llvm's va_arg instruction uses llvm's va_arg instruction + works with C code works with C code works with C code works with C code works with C code works with C code works with C code works with C code works with C code works with C code + codegens crystal_type_id for class codegens crystal_type_id for class + codegens int128 codegens int128 codegens int128 codegens int128 codegens int128 codegens int128 codegens int128 codegens int128 codegens int128 codegens int128 + gets crystal class instance type id gets crystal class instance type id + codegens int codegens int + can invoke binary on primitive typedef (#614) can invoke binary on primitive typedef (#614) + codegens string codegens string + allows @[Primitive] on fun declarations allows @[Primitive] on fun declarations + doesn't optimize away call whose obj is not passed as self (#2226) doesn't optimize away call whose obj is not passed as self (#2226) + sums two numbers out of an [] of Number sums two numbers out of an [] of Number + codegens pointer of int codegens pointer of int + codegens bool codegens bool + codegens char codegens char + allows redefining a primitive method allows redefining a primitive method + codegens f64 codegens f64 + codegens uint128 codegens uint128 codegens uint128 codegens uint128 codegens uint128 codegens uint128 codegens uint128 codegens uint128 codegens uint128 codegens uint128 + codegens char ord codegens char ord + can invoke cast on primitive typedef (#614) can invoke cast on primitive typedef (#614) + codegens __LINE__ codegens __LINE__ + codegens crystal_type_id with union type codegens crystal_type_id with union type + codegens long codegens long + doesn't treat `(1 == 1) == true` as `1 == 1 == true` (#328) doesn't treat `(1 == 1) == true` as `1 == 1 == true` (#328) + allows @[Primitive] on method that has body allows @[Primitive] on method that has body + uses built-in llvm function that returns a tuple uses built-in llvm function that returns a tuple + passes issue #328 passes issue #328 + arithmetic primitives + codegens 1 - 2 codegens 1 - 2 codegens 1 - 2 codegens 1 - 2 codegens 1 - 2 codegens 1 - 2 codegens 1 - 2 codegens 1 - 2 codegens 1 - 2 codegens 1 - 2 + codegens 16.unsafe_shr 2 codegens 16.unsafe_shr 2 + codegens 1.to_i16 codegens 1.to_i16 codegens 1.to_i16 codegens 1.to_i16 codegens 1.to_i16 codegens 1.to_i16 codegens 1.to_i16 codegens 1.to_i16 codegens 1.to_i16 codegens 1.to_i16 + codegens 1.to_f! codegens 1.to_f! + codegens 1.to_f codegens 1.to_f codegens 1.to_f codegens 1.to_f codegens 1.to_f codegens 1.to_f codegens 1.to_f codegens 1.to_f codegens 1.to_f codegens 1.to_f + codegens 8.unsafe_div 3 codegens 8.unsafe_div 3 + codegens 1 &- 2 codegens 1 &- 2 + codegens 2 &* 3 codegens 2 &* 3 + codegens 2 * 3 codegens 2 * 3 codegens 2 * 3 codegens 2 * 3 codegens 2 * 3 codegens 2 * 3 codegens 2 * 3 codegens 2 * 3 codegens 2 * 3 codegens 2 * 3 + codegens 16.unsafe_shl 2 codegens 16.unsafe_shl 2 + codegens 1.to_i16! codegens 1.to_i16! + codegens 8.unsafe_mod 3 codegens 8.unsafe_mod 3 + codegens 1 + 2 codegens 1 + 2 codegens 1 + 2 codegens 1 + 2 codegens 1 + 2 codegens 1 + 2 codegens 1 + 2 codegens 1 + 2 codegens 1 + 2 codegens 1 + 2 + skips bounds checking when to_i produces same type skips bounds checking when to_i produces same type + codegens 1 &+ 2 codegens 1 &+ 2 + atomicrmw + codegens atomicrmw with enums codegens atomicrmw with enums + codegens atomicrmw with symbols codegens atomicrmw with symbols + codegens atomicrmw with enums codegens atomicrmw with enums +Semantic: cast + doesn't eagerly try to check cast type (#12268) doesn't eagerly try to check cast type (#12268) + casts to same type is ok casts to same type is ok + doesn't crash with typeof no-type (#7441) doesn't crash with typeof no-type (#7441) + doesn't cast to unbound generic type (as?) (#5927) doesn't cast to unbound generic type (as?) (#5927) + casts to generic virtual type casts to generic virtual type + disallows casting int to pointer disallows casting int to pointer + casts from union to compatible union casts from union to compatible union + can cast to metaclass (bug) can cast to metaclass (bug) + casts to target type even if can't infer casted value type (obsolete) casts to target type even if can't infer casted value type (obsolete) + doesn't cast to unbound generic type (as) (#5927) doesn't cast to unbound generic type (as) (#5927) + casts to module casts to module + disallows casting to Reference disallows casting to Reference + casts pointer of one type to another type casts pointer of one type to another type + can cast from Void* to virtual type (#3014) can cast from Void* to virtual type (#3014) + disallows casting to Class disallows casting to Class + considers else to be unreachable (#9658) considers else to be unreachable (#9658) + casts from union to incompatible union gives error casts from union to incompatible union gives error + errors if casting nil to Object inside typeof (#2403) errors if casting nil to Object inside typeof (#2403) + can cast to metaclass (2) (#11121) can cast to metaclass (2) (#11121) + casts pointer to another type casts pointer to another type + doesn't cast to virtual primitive (bug) doesn't cast to virtual primitive (bug) + doesn't allow upcast of generic type var (#996) doesn't allow upcast of generic type var (#996) + allows casting reference union to void pointer allows casting reference union to void pointer + allows casting object to void pointer allows casting object to void pointer + casts to compatible type and use it casts to compatible type and use it + casts to base class making it virtual (2) casts to base class making it virtual (2) + errors on cast inside a call that can't be instantiated errors on cast inside a call that can't be instantiated + doesn't error if casting to a generic type doesn't error if casting to a generic type + disallows casting fun to pointer disallows casting fun to pointer + casts from pointer to generic class gives error casts from pointer to generic class gives error + disallows casting pointer to fun disallows casting pointer to fun + casts to base class making it virtual (1) casts to base class making it virtual (1) + allows casting NoReturn to any type (#2132) allows casting NoReturn to any type (#2132) + should error if can't cast even if not instantiated should error if can't cast even if not instantiated + casts uninstantiated generic class to itself (#10882) casts uninstantiated generic class to itself (#10882) + disallows casting to Object (#815) disallows casting to Object (#815) + casts to incompatible type gives error casts to incompatible type gives error + casts to bigger union casts to bigger union Crystal::Doc::ProjectInfo + .find_git_version .find_git_version + .find_source_url_pattern .find_source_url_pattern .read_shard_properties - duplicate properties uses first one duplicate properties uses first one - strip quotes strip quotes indented properties indented properties - only name only name strip whitespace strip whitespace - empty properties empty properties ignores comments ignores comments + duplicate properties uses first one duplicate properties uses first one no shard.yml no shard.yml - without name and version properties without name and version properties + strip quotes strip quotes + empty properties empty properties name and version name and version - #source_url - builds url builds url - builds url builds url - fails if pattern is missing fails if pattern is missing - returns nil for empty pattern returns nil for empty pattern - fails if refname is missing fails if refname is missing - fails if pattern is missing fails if pattern is missing - .find_git_version .find_git_version - .find_source_url_pattern .find_source_url_pattern + only name only name + without name and version properties without name and version properties + .git_remote + no git workdir no git workdir + no origin remote no origin remote + origin plus other origin plus other + simple origin simple origin + no remote no remote #fill_with_defaults + no shard.yml, but git tagged version no shard.yml, but git tagged version empty folder empty folder with shard.yml git tagged version git tagged version - git missing git missing - git non-tagged commit git non-tagged commit - git untracked file doesn't prevent detection git untracked file doesn't prevent detection git with remote git with remote - not in a git folder not in a git folder git but no commit git but no commit + git untracked file doesn't prevent detection git untracked file doesn't prevent detection + git missing git missing git non-tagged commit dirty git non-tagged commit dirty git tagged version dirty git tagged version dirty - no shard.yml, but git tagged version no shard.yml, but git tagged version - .git_remote - no git workdir no git workdir - simple origin simple origin - no remote no remote - origin plus other origin plus other - no origin remote no origin remote + not in a git folder not in a git folder + git non-tagged commit git non-tagged commit + #source_url + fails if pattern is missing fails if pattern is missing + builds url builds url + fails if pattern is missing fails if pattern is missing + returns nil for empty pattern returns nil for empty pattern + fails if refname is missing fails if refname is missing + builds url builds url +Normalize: until + normalizes until normalizes until +Semantic: restrictions augmenter + augments Bool augments Bool + augments relative public type augments relative public type + augments Int32.class augments Int32.class + augments Char augments Char + augments Tuple(Int32, Char) augments Tuple(Int32, Char) + doesn't augment if the no_restrictions_augmenter flag is present doesn't augment if the no_restrictions_augmenter flag is present + augments Char | Int32 | String augments Char | Int32 | String + augments virtual type augments virtual type + augments Int32 augments Int32 + augments relative private type in same namespace augments relative private type in same namespace + doesn't augment if assigned inside if doesn't augment if assigned inside if + augments Char | Int32 | String augments Char | Int32 | String + augments Enumerable(Int32).class augments Enumerable(Int32).class + augments Nil augments Nil + augments Float32 augments Float32 + augments Proc(Int32, Char) augments Proc(Int32, Char) + augments for class var augments for class var + augments Array(String) augments Array(String) + augments virtual metaclass type augments virtual metaclass type + augments for Union(*T) (#12435) augments for Union(*T) (#12435) + augments typedef augments typedef + augments StaticArray(Int32, 8) augments StaticArray(Int32, 8) + augments NoReturn augments NoReturn + augments String augments String + augments recursive alias type (#12134) augments recursive alias type (#12134) + doesn't augment if assigned inside while doesn't augment if assigned inside while + augments Pointer(Void) augments Pointer(Void) + augments generic uninstantiated type augments generic uninstantiated type + augments Array(Int32).class augments Array(Int32).class + augments NamedTuple(a: Int32, b: Char) augments NamedTuple(a: Int32, b: Char) + doesn't crash on macro that yields and defines class (#12142) doesn't crash on macro that yields and defines class (#12142) + doesn't augment if assigned inside block doesn't augment if assigned inside block + augments Proc(Int32, Nil) augments Proc(Int32, Nil) + augments Symbol augments Symbol + augments relative private type augments relative private type + augments type splat augments type splat +Codegen: while + doesn't crash on #2767 (2) doesn't crash on #2767 (2) + codegens while with declared var 3 codegens while with declared var 3 + codegens while with declared var 1 codegens while with declared var 1 + codegens while with declared var 2 codegens while with declared var 2 + endless break with value endless break with value + doesn't crash on #2767 (3) doesn't crash on #2767 (3) + codegens while with false codegens while with false + skip block with next skip block with next + break without value break without value + codegens def with while codegens def with while + conditional break without value conditional break without value + endless conditional break with value endless conditional break with value + doesn't crash on #2767 doesn't crash on #2767 + break with value, condition fails break with value, condition fails + doesn't crash on #2767 (4) doesn't crash on #2767 (4) + conditional break with value conditional break with value + codegens while with non-false condition codegens while with non-false condition + break with value break with value + doesn't crash on a = NoReturn doesn't crash on a = NoReturn + doesn't crash on while true begin break rescue (#7786) doesn't crash on while true begin break rescue (#7786) + codegens endless while codegens endless while +Crystal::Config + .linux_runtime_libc .linux_runtime_libc + .host_target .host_target +Semantic: primitives + types char ord types char ord + can invoke cast on primitive typedef (#614) can invoke cast on primitive typedef (#614) + Reference.pre_initialize + types with virtual reference type types with virtual reference type + types with reference type types with reference type + errors on uninstantiated generic type errors on uninstantiated generic type + errors on abstract type errors on abstract type + types a float32 types a float32 + types 1 + 2 types 1 + 2 + types a float64 types a float64 + types pointer of int types pointer of int + types a char types a char + types va_arg primitive types va_arg primitive + errors if @[Primitive] has no args errors if @[Primitive] has no args + types nop types nop + types a symbol types a symbol + types a bool types a bool + extends from Number and doesn't find to_i method extends from Number and doesn't find to_i method + types an expression types an expression + Slice.literal + with element type + types empty literal types empty literal + errors if element type is not primitive int or float errors if element type is not primitive int or float + types primitive float literal types primitive float literal + errors if element is out of range errors if element is out of range + errors if element is not number literal errors if element is not number literal + types primitive int literal types primitive int literal + types nil types nil + correctly types first hash from type vars (bug) correctly types first hash from type vars (bug) + computes correct hash value type if it's a function literal (#320) computes correct hash value type if it's a function literal (#320) + can invoke binary on primitive typedef (#614) can invoke binary on primitive typedef (#614) + types a string types a string + errors if using instance variable inside primitive type errors if using instance variable inside primitive type + types a uint128 types a uint128 + types an int32 types an int32 + types @[Primitive] method types @[Primitive] method + errors when comparing void (#225) errors when comparing void (#225) + can invoke binary on primitive typedef (2) (#614) can invoke binary on primitive typedef (2) (#614) + extends from Number and doesn't find + method extends from Number and doesn't find + method + looks up return type in correct scope (#13652) looks up return type in correct scope (#13652) + types a int128 types a int128 + types a int64 types a int64 + errors if @[Primitive] has non-symbol arg errors if @[Primitive] has non-symbol arg + extends from Number and doesn't find >= method extends from Number and doesn't find >= method + allows @[Primitive] on method that has body allows @[Primitive] on method that has body +Crystal::Repl + can return static and runtime type information for + VirtualType VirtualType + MixedUnionType MixedUnionType + Non Union Non Union + UnionType UnionType + can parse and evaluate snippets can parse and evaluate snippets +Code gen: hooks + does added method macro does added method macro + does finished does finished + fixes empty types in hooks (#3946) fixes empty types in hooks (#3946) + does inherited macro recursively does inherited macro recursively + does inherited macro before class body does inherited macro before class body does inherited macro before class body does inherited macro before class body does inherited macro before class body does inherited macro before class body does inherited macro before class body does inherited macro before class body does inherited macro before class body does inherited macro before class body + does extended macro does extended macro + does included macro does included macro + does inherited macro does inherited macro +Codegen: super + codegens super that calls subclass method 6 codegens super that calls subclass method 6 + codegens super without arguments and instance variable codegens super without arguments and instance variable + does super in virtual type including module does super in virtual type including module + build super on generic class (bug) build super on generic class (bug) + codegens super that calls subclass method 4 codegens super that calls subclass method 4 + doesn't invoke super twice in inherited generic types (#942) doesn't invoke super twice in inherited generic types (#942) + codegens super that calls subclass method 3 codegens super that calls subclass method 3 + calls super in metaclass (#1522) calls super in metaclass (#1522) calls super in metaclass (#1522) calls super in metaclass (#1522) calls super in metaclass (#1522) calls super in metaclass (#1522) calls super in metaclass (#1522) calls super in metaclass (#1522) calls super in metaclass (#1522) calls super in metaclass (#1522) + codegens super inside closure forwarding args codegens super inside closure forwarding args + codegens super inside closure codegens super inside closure + calls super from virtual metaclass type (#2841) calls super from virtual metaclass type (#2841) + codegens super without arguments codegens super without arguments + codegens super that calls subclass method 5 codegens super that calls subclass method 5 + calls super on an object (#10004) calls super on an object (#10004) + calls super in generic module method calls super in generic module method + codegens super that calls subclass method 2 codegens super that calls subclass method 2 + calls super in module method (#556) calls super in module method (#556) + codegens super that calls subclass method codegens super that calls subclass method + codegens super without arguments but parent has arguments codegens super without arguments but parent has arguments + calls super with dispatch (#2318) calls super with dispatch (#2318) +Semantic: new + errors if using self call in default argument (2) errors if using self call in default argument (2) + evaluates initialize default value at the instance scope (2) (#731) evaluates initialize default value at the instance scope (2) (#731) + doesn't have default new for inherited class from generic type doesn't have default new for inherited class from generic type + evaluates initialize default value at the instance scope (4) (#731) evaluates initialize default value at the instance scope (4) (#731) + inherits initialize and new methods if doesn't define new (#3238) inherits initialize and new methods if doesn't define new (#3238) + errors if using self call in default argument (1) errors if using self call in default argument (1) + evaluates initialize default value at the instance scope (6) (#731) evaluates initialize default value at the instance scope (6) (#731) + errors if using self call in default argument (3) errors if using self call in default argument (3) + evaluates initialize default value at the instance scope (5) (#731) evaluates initialize default value at the instance scope (5) (#731) + uses correct receiver for `initialize` in namespaced generic classes (#4086) uses correct receiver for `initialize` in namespaced generic classes (#4086) + evaluates initialize default value at the instance scope (1) (#731) evaluates initialize default value at the instance scope (1) (#731) + evaluates initialize default value at the instance scope (3) (#731) evaluates initialize default value at the instance scope (3) (#731) + doesn't incorrectly redefines new for generic class doesn't incorrectly redefines new for generic class +Code gen: new + finds new in superclass if no initialize is defined (1) finds new in superclass if no initialize is defined (1) + evaluates initialize default value at the instance scope (3) (#731) evaluates initialize default value at the instance scope (3) (#731) + codegens instance method with new codegens instance method with new + evaluates initialize default value at the instance scope (4) (#731) evaluates initialize default value at the instance scope (4) (#731) + evaluates initialize default value at the instance scope (2) (#731) evaluates initialize default value at the instance scope (2) (#731) + finds super in deep hierarchy finds super in deep hierarchy + defines new for module defines new for module + can create Reference can create Reference + inherits initialize for generic type inherits initialize for generic type + overloads new and initialize, 2 (#2489) overloads new and initialize, 2 (#2489) + finds new in superclass for Enum finds new in superclass for Enum + codegens instance method with new and instance var codegens instance method with new and instance var + inherits initialize inherits initialize + overloads new and initialize, 3 (#2489) overloads new and initialize, 3 (#2489) + can create Tuple with Tuple.new can create Tuple with Tuple.new can create Tuple with Tuple.new can create Tuple with Tuple.new can create Tuple with Tuple.new can create Tuple with Tuple.new can create Tuple with Tuple.new can create Tuple with Tuple.new can create Tuple with Tuple.new can create Tuple with Tuple.new + codegens instance method with allocate codegens instance method with allocate + overloads new and initialize, 1 (#2489) overloads new and initialize, 1 (#2489) + evaluates initialize default value at the instance scope (1) (#731) evaluates initialize default value at the instance scope (1) (#731) + finds new in superclass if no initialize is defined (2) finds new in superclass if no initialize is defined (2) +Semantic: multi assign + without strict_multi_assign + errors if assigning non-Indexable to splat (#11414) errors if assigning non-Indexable to splat (#11414) + doesn't error if assigning non-Indexable (#11414) doesn't error if assigning non-Indexable (#11414) + doesn't error if assigning tuple to fewer targets doesn't error if assigning tuple to fewer targets + strict_multi_assign + errors if assigning non-Indexable (#11414) errors if assigning non-Indexable (#11414) + errors if assigning tuple to more targets errors if assigning tuple to more targets + doesn't error if some type in union matches target count doesn't error if some type in union matches target count + errors if assigning tuple to fewer targets errors if assigning tuple to fewer targets + errors if assigning non-Indexable to splat (#11414) errors if assigning non-Indexable to splat (#11414) + doesn't error if some type in union has no constant size doesn't error if some type in union has no constant size + errors if assigning union of tuples to fewer targets errors if assigning union of tuples to fewer targets + can pass splat variable at top-level to macros (#11596) can pass splat variable at top-level to macros (#11596) +Semantic: while + doesn't fail on new variables inside typeof condition doesn't fail on new variables inside typeof condition + uses var type inside while if endless loop uses var type inside while if endless loop + doesn't type var as nilable after break inside rescue doesn't type var as nilable after break inside rescue + finds while cond assign target in Not (#10345) finds while cond assign target in Not (#10345) + restricts type after while (#4242) restricts type after while (#4242) + types endless while with break without value types endless while with break without value + doesn't use type at end of endless while if variable is reassigned (2) doesn't use type at end of endless while if variable is reassigned (2) + types endless while with multiple breaks with value types endless while with multiple breaks with value + doesn't restrict type after while if there's a break (#4242) doesn't restrict type after while if there's a break (#4242) + rebinds condition variable after while body (#6158) rebinds condition variable after while body (#6158) + types while with && (#1425) types while with && (#1425) + marks variable as nil if breaking before assigning to it in an endless loop (2) marks variable as nil if breaking before assigning to it in an endless loop (2) + reports break cannot be used outside a while reports break cannot be used outside a while + types while with assignment types while with assignment + restricts type after `while` with `not` and `and` (#4242) restricts type after `while` with `not` and `and` (#4242) + types while with assignment and && types while with assignment and && + types endless while with break with value types endless while with break with value + types while (true) as NoReturn types while (true) as NoReturn + doesn't fail on Expressions condition (2) doesn't fail on Expressions condition (2) + types variable as nilable if raise before assign types variable as nilable if raise before assign + uses type at end of endless while if variable is reassigned, but not before first break (2) uses type at end of endless while if variable is reassigned, but not before first break (2) + restricts type after while with not (#4242) restricts type after while with not (#4242) + types while with multiple breaks with value types while with multiple breaks with value + finds all while cond assign targets in expressions (6) finds all while cond assign targets in expressions (6) + doesn't use type at end of endless while if variable is reassigned doesn't use type at end of endless while if variable is reassigned + types while with break with value types while with break with value + finds all while cond assign targets in expressions (5) finds all while cond assign targets in expressions (5) + types while with assignment and call types while with assignment and call + types while with break without value types while with break without value + doesn't fail on Expressions condition (1) doesn't fail on Expressions condition (1) + doesn't fail on nested conditionals inside typeof condition doesn't fail on nested conditionals inside typeof condition + finds all while cond assign targets in expressions (4) finds all while cond assign targets in expressions (4) + uses type at end of endless while if variable is reassigned, but not before first break uses type at end of endless while if variable is reassigned, but not before first break + finds all while cond assign targets in expressions (#10350) finds all while cond assign targets in expressions (#10350) + doesn't modify var's type before while doesn't modify var's type before while + doesn't use type at end of endless while if variable is reassigned (3) doesn't use type at end of endless while if variable is reassigned (3) + types while true as NoReturn types while true as NoReturn + uses var type inside while if endless loop (2) uses var type inside while if endless loop (2) + types while types while + reports next cannot be used outside a while reports next cannot be used outside a while + finds all while cond assign targets in expressions (3) finds all while cond assign targets in expressions (3) + marks variable as nil if breaking before assigning to it in an endless loop marks variable as nil if breaking before assigning to it in an endless loop + types while ((true)) as NoReturn types while ((true)) as NoReturn + finds all while cond assign targets in expressions (2) finds all while cond assign targets in expressions (2) +Codegen: thread local + compiles with class variable referenced from initializer compiles with class variable referenced from initializer compiles with class variable referenced from initializer compiles with class variable referenced from initializer compiles with class variable referenced from initializer compiles with class variable referenced from initializer compiles with class variable referenced from initializer compiles with class variable referenced from initializer compiles with class variable referenced from initializer compiles with class variable referenced from initializer + works with class variables works with class variables works with class variables works with class variables works with class variables works with class variables works with class variables works with class variables works with class variables works with class variables + works with class variable in main thread works with class variable in main thread works with class variable in main thread works with class variable in main thread works with class variable in main thread works with class variable in main thread works with class variable in main thread works with class variable in main thread works with class variable in main thread works with class variable in main thread +Semantic: struct + types struct getter with keyword name types struct getter with keyword name + errors if includes and field already exists, the other way around errors if includes and field already exists, the other way around + errors if invoking to_unsafe and got error in that call errors if invoking to_unsafe and got error in that call + errors if already defined with another type (2) errors if already defined with another type (2) + errors on struct setter if different type via new errors on struct setter if different type via new + includes another struct includes another struct + supports macro if inside struct supports macro if inside struct + allows inline forward declaration allows inline forward declaration + errors if already defined errors if already defined + automatically converts numeric type in struct field assignment automatically converts numeric type in struct field assignment + types struct types struct + errors if setting closure errors if setting closure + types Struct#new types Struct#new + errors on struct if no field errors on struct if no field + errors if using void in struct field type errors if using void in struct field type + errors on struct setter if different type errors on struct setter if different type + errors if already defined with another type errors if already defined with another type + marks as packed marks as packed + errors if includes and field already exists errors if includes and field already exists + errors if using void via typedef in struct field type errors if using void via typedef in struct field type + errors if includes non-cstruct type errors if includes non-cstruct type + can access instance var from the outside (#1092) can access instance var from the outside (#1092) + types struct getter multiple levels via new types struct getter multiple levels via new + types struct getter on pointer type types struct getter on pointer type + errors if invoking to_i32! and got wrong type errors if invoking to_i32! and got wrong type + errors if invoking to_unsafe and got different type errors if invoking to_unsafe and got different type + errors on empty c struct (#633) errors on empty c struct (#633) + types struct setter types struct setter + errors if includes unknown type errors if includes unknown type + types struct getter to struct types struct getter to struct + errors if invoking to_i32! and got error in that call errors if invoking to_i32! and got error in that call + types struct getter types struct getter +Crystal::Repl::Interpreter + extern + discards primitive struct_or_union_set and get (struct) discards primitive struct_or_union_set and get (struct) + discards primitive struct_or_union_set because it's a copy discards primitive struct_or_union_set because it's a copy + sets struct field through pointer sets struct field through pointer + interprets primitive struct_or_union_set and get (union) interprets primitive struct_or_union_set and get (union) + interprets primitive struct_or_union_set and get (struct) interprets primitive struct_or_union_set and get (struct) + sets extern struct proc field sets extern struct proc field + does automatic C cast does automatic C cast +Semantic: automatic cast + casts integer variable to larger type (Int64 to Int128) (#9565) casts integer variable to larger type (Int64 to Int128) (#9565) + says ambiguous call for integer var to larger type (#9565) says ambiguous call for integer var to larger type (#9565) + casts integer variable to larger type (#9565) casts integer variable to larger type (#9565) + casts Int32 -> Int64 in arg restriction casts Int32 -> Int64 in arg restriction + doesn't autocast number on union (#8655) doesn't autocast number on union (#8655) + casts Int32 to Int64 in ivar assignment casts Int32 to Int64 in ivar assignment + doesn't say 'ambiguous call' when there's an exact match for symbol (#6601) doesn't say 'ambiguous call' when there's an exact match for symbol (#6601) + casts literal integer in private top-level method (#7016) casts literal integer in private top-level method (#7016) + casts literal integer (Int32 -> Float32) casts literal integer (Int32 -> Float32) + casts literal integer (Int32 -> no restriction) casts literal integer (Int32 -> no restriction) + casts Symbol to Enum in ivar type declaration casts Symbol to Enum in ivar type declaration + casts literal integer through alias with union casts literal integer through alias with union + casts literal integer (Int64 -> Int32, ok) casts literal integer (Int64 -> Int32, ok) + can autocast to union in default value can autocast to union in default value + casts Symbol to Enum in ivar assignment casts Symbol to Enum in ivar assignment + can match multiple times with the same argument type (#7578) can match multiple times with the same argument type (#7578) + says ambiguous call for integer says ambiguous call for integer + casts Symbol to Enum in cvar type declaration casts Symbol to Enum in cvar type declaration + autocasts nested type from non-nested type (#10315) autocasts nested type from non-nested type (#10315) + errors if symbol name doesn't match enum member errors if symbol name doesn't match enum member + doesn't do multidispatch if an overload matches exactly (#8217) doesn't do multidispatch if an overload matches exactly (#8217) + can autocast to union in default value (multiple enums) can autocast to union in default value (multiple enums) + casts Int32 to Int64 in lvar assignment casts Int32 to Int64 in lvar assignment + casts symbol literal to enum casts symbol literal to enum + casts literal float (Float64 -> Float32) casts literal float (Float64 -> Float32) + casts literal integer through alias with union casts literal integer through alias with union + can use automatic cast with `with ... yield` (#7736) can use automatic cast with `with ... yield` (#7736) + says ambiguous call for integer (2) says ambiguous call for integer (2) + doesn't cast integer variable to larger type (not #9565) doesn't cast integer variable to larger type (not #9565) + doesn't do multidispatch if an overload matches exactly (#8217) doesn't do multidispatch if an overload matches exactly (#8217) + casts integer expression to larger type (#9565) casts integer expression to larger type (#9565) + can autocast to union in default value (symbol and int) can autocast to union in default value (symbol and int) + says ambiguous call for integer on alias (#6620) says ambiguous call for integer on alias (#6620) + can't cast integer to another type when it doesn't fit (#9565) can't cast integer to another type when it doesn't fit (#9565) + autocasts integer variable to float type (#9565) autocasts integer variable to float type (#9565) + doesn't say 'ambiguous call' when there's an exact match for integer (#6601) doesn't say 'ambiguous call' when there's an exact match for integer (#6601) + can autocast to alias in default value can autocast to alias in default value + says ambiguous call for integer var to union type (#9565) says ambiguous call for integer var to union type (#9565) + casts literal integer (Int64 -> Int32, too big) casts literal integer (Int64 -> Int32, too big) + autocasts float32 variable to float64 type (#9565) autocasts float32 variable to float64 type (#9565) + casts literal float (Float32 -> Float64) casts literal float (Float32 -> Float64) + matches correct overload matches correct overload + autocasts first argument and second matches without autocast autocasts first argument and second matches without autocast + casts literal integer (Int32 -> Float64) casts literal integer (Int32 -> Float64) + casts Int32 to Int64 in cvar type declaration casts Int32 to Int64 in cvar type declaration + casts literal integer (Int32 -> Int64) casts literal integer (Int32 -> Int64) + casts Int32 to Int64 in ivar type declaration casts Int32 to Int64 in ivar type declaration + casts Int32 to Int64 in ivar type declaration in generic casts Int32 to Int64 in ivar type declaration in generic + says ambiguous call for symbol says ambiguous call for symbol + says ambiguous call on union (#8655) says ambiguous call on union (#8655) + casts Int32 to Int64 in cvar assignment casts Int32 to Int64 in cvar assignment + errors when autocast default value doesn't match enum member errors when autocast default value doesn't match enum member +Block inference + errors if using ( -> Object) as block return type (#2358) errors if using ( -> Object) as block return type (#2358) + ignores block parameter if not used ignores block parameter if not used + matches block arg return type matches block arg return type + infer type of block parameter infer type of block parameter + errors if returns from captured block errors if returns from captured block + respects block arg restriction when block has a splat parameter (#6473) respects block arg restriction when block has a splat parameter (#6473) + does next from captured block does next from captured block + doesn't crash on #2531 doesn't crash on #2531 + reports error if yields a type that's not that one in the block specification reports error if yields a type that's not that one in the block specification + reports error if yields a type that later changes and that's not that one in the block specification reports error if yields a type that later changes and that's not that one in the block specification + infer type of empty block body infer type of empty block body + reports error on method instantiate (#4543) reports error on method instantiate (#4543) + allows underscore in block return type even if the return type can't be computed allows underscore in block return type even if the return type can't be computed + preserves type filters in block preserves type filters in block + errors if declares class inside captured block errors if declares class inside captured block + uses free var in return type with tuple type uses free var in return type with tuple type + reports mismatch with generic argument type in input type reports mismatch with generic argument type in input type + errors if declares class inside block errors if declares class inside block + infers type of block before call infers type of block before call + errors if declares fun inside block errors if declares fun inside block + errors on recursive yield errors on recursive yield + maps block of union types to union types maps block of union types to union types + checks block type with virtual type checks block type with virtual type + errors when using local variable with block parameter name errors when using local variable with block parameter name + reports error if block type doesn't match reports error if block type doesn't match + auto-unpacks tuple, less than max auto-unpacks tuple, less than max + returns from proc literal returns from proc literal + errors if proc is not instantiated errors if proc is not instantiated + uses splat in block parameter uses splat in block parameter + infer type of yield infer type of yield + error with self output type doesn't match error with self output type doesn't match + binds to proc, not only to its body (#1796) binds to proc, not only to its body (#1796) + unpacks block argument unpacks block argument + auto-unpacks tuple, captured block with multiple statements auto-unpacks tuple, captured block with multiple statements + infer type of block body infer type of block body + error with self input type doesn't match error with self input type doesn't match + ignores void return type (4) ignores void return type (4) + auto-unpacks tuple auto-unpacks tuple + errors if alias is not a fun type errors if alias is not a fun type + auto-unpacks with block arg type auto-unpacks with block arg type + yields splat and non splat yields splat and non splat + errors if doing next in proc literal errors if doing next in proc literal + errors if declares lib inside block errors if declares lib inside block + reports mismatch with generic argument type in output type reports mismatch with generic argument type in output type + sets captured block type to that of restriction with alias sets captured block type to that of restriction with alias + yields splat yields splat + errors if declares extend inside block errors if declares extend inside block + errors if yields from top level errors if yields from top level + reports error if block changes type reports error if block changes type + errors if splat parameter becomes a union errors if splat parameter becomes a union + auto-unpacks tuple, too many args, captured block auto-unpacks tuple, too many args, captured block + renders expected block return type of a free variable on mismatch renders expected block return type of a free variable on mismatch + doesn't mix local var with block var, using next (#2314) doesn't mix local var with block var, using next (#2314) + errors if breaks from captured block errors if breaks from captured block + allows initialize with yield (#224) allows initialize with yield (#224) + errors if invoking new with block when no initialize is defined errors if invoking new with block when no initialize is defined + passes #262 passes #262 + passes #233: block with initialize with default args passes #233: block with initialize with default args + infer type of local variable infer type of local variable + doesn't auto-unpack tuple, more args doesn't auto-unpack tuple, more args + errors on recursive yield with ProcNotation restriction errors on recursive yield with ProcNotation restriction + types bug with yield not_nil! that is never not nil types bug with yield not_nil! that is never not nil + doesn't assign block variable type to last value (#694) doesn't assign block variable type to last value (#694) + infer type with union infer type with union + errors if declares enum inside block errors if declares enum inside block + break from block without value break from block without value + can infer block type given that the method has a return type (#7160) can infer block type given that the method has a return type (#7160) + passes &->f passes &->f + infers type of block with generic type infers type of block with generic type + recalculates call that uses block arg output as free var recalculates call that uses block arg output as free var + reports error if yields a type that's not that one in the block specification reports error if yields a type that's not that one in the block specification + uses splat in block parameter, many args uses splat in block parameter, many args + does next from block without value does next from block without value + allows yielding multiple types when a union is expected allows yielding multiple types when a union is expected + respects block arg restriction when block has a splat parameter (2) (#9524) respects block arg restriction when block has a splat parameter (2) (#9524) + errors on recursive yield with non ProcNotation restriction (#6896) errors on recursive yield with non ProcNotation restriction (#6896) + auto-unpacks tuple, less than max, captured block auto-unpacks tuple, less than max, captured block + ignores void return type (3) (#427) ignores void return type (3) (#427) + ignores void return type (2) (#427) ignores void return type (2) (#427) + uses free var in return type in captured block uses free var in return type in captured block + types empty block types empty block + errors if using Object as block return type (#2358) errors if using Object as block return type (#2358) + uses splat in block parameter, but not enough yield expressions uses splat in block parameter, but not enough yield expressions + uses block var with same name as local var uses block var with same name as local var + doesn't mix local var with block var, using break (#2314) doesn't mix local var with block var, using break (#2314) + binds block return type free variable even if there are no block parameters (#1797) binds block return type free variable even if there are no block parameters (#1797) + auto-unpacks tuple, captured block auto-unpacks tuple, captured block + yields in overload, matches type yields in overload, matches type + doesn't fail with 'already had enclosing call' (#11200) doesn't fail with 'already had enclosing call' (#11200) + errors if using Bar | Object as block return type (#2358) errors if using Bar | Object as block return type (#2358) + allows invoking method on a object of a captured block with a type that was never instantiated allows invoking method on a object of a captured block with a type that was never instantiated + errors if using (Object ->) as block return type (#2358) errors if using (Object ->) as block return type (#2358) + correctly types unpacked tuple block arg after block (#3339) correctly types unpacked tuple block arg after block (#3339) + infers type of block before call taking other args free vars into account infers type of block before call taking other args free vars into account + doesn't crash on cleaning up typeof node without dependencies (#8669) doesn't crash on cleaning up typeof node without dependencies (#8669) + finds type inside module in block finds type inside module in block + does next from block with value does next from block with value + reports error if missing arguments to yield reports error if missing arguments to yield + infer type with self block arg infer type with self block arg + uses block arg, too many parameters uses block arg, too many parameters + allows alias as block fun type allows alias as block fun type + errors if declares def inside block errors if declares def inside block + break without value has nil type break without value has nil type + errors if declares alias inside block errors if declares alias inside block + reports error if block didn't return expected type reports error if block didn't return expected type + errors if declares include inside block errors if declares include inside block + errors if declares module inside block errors if declares module inside block + uses block return type as return type, even if can't infer block type uses block return type as return type, even if can't infer block type + does next from block with value 2 does next from block with value 2 + matches block with generic type and free var matches block with generic type and free var + sets captured block type to that of restriction sets captured block type to that of restriction + ignores void return type (#427) ignores void return type (#427) + auto-unpacks tuple, too many args auto-unpacks tuple, too many args + yields with different types yields with different types + errors if declares macro inside block errors if declares macro inside block + auto-unpacks tuple, captured empty block auto-unpacks tuple, captured empty block + types recursive hash assignment types recursive hash assignment +semantic: case + checks exhaustiveness for tuple literal, and passes checks exhaustiveness for tuple literal, and passes + checks exhaustiveness of enum via const checks exhaustiveness of enum via const + checks exhaustiveness for tuple literal with bool and underscore at first position checks exhaustiveness for tuple literal with bool and underscore at first position + checks exhaustiveness for tuple literal of 2 elements, first is enum checks exhaustiveness for tuple literal of 2 elements, first is enum + checks exhaustiveness for tuple literal with bool and underscore at second position, with partial match checks exhaustiveness for tuple literal with bool and underscore at second position, with partial match + checks exhaustiveness of enum (all cases covered) checks exhaustiveness of enum (all cases covered) + checks exhaustiveness for tuple literal with bool and underscore at first position checks exhaustiveness for tuple literal with bool and underscore at first position + checks exhaustiveness of single type (generic) checks exhaustiveness of single type (generic) + checks exhaustiveness of enum via question method checks exhaustiveness of enum via question method + checks exhaustiveness for tuple literal with bool and underscore at second position checks exhaustiveness for tuple literal with bool and underscore at second position + can't prove case is exhaustive for @[Flags] enum, tuple case can't prove case is exhaustive for @[Flags] enum, tuple case + checks exhaustiveness, covers in base type covers (generic type) checks exhaustiveness, covers in base type covers (generic type) + checks exhaustiveness for tuple literal with bool and underscore at second position checks exhaustiveness for tuple literal with bool and underscore at second position + checks exhaustiveness of enum through method (all cases covered) checks exhaustiveness of enum through method (all cases covered) + can prove case is exhaustive for @[Flags] enum when matching type can prove case is exhaustive for @[Flags] enum when matching type + checks exhaustiveness for tuple literal of 3 elements, all enums checks exhaustiveness for tuple literal of 3 elements, all enums + checks exhaustiveness for tuple literal, with call checks exhaustiveness for tuple literal, with call + checks exhaustiveness of bool type with other types checks exhaustiveness of bool type with other types + checks exhaustiveness, covers in base type covers checks exhaustiveness, covers in base type covers + checks exhaustiveness for tuple literal of 3 elements, and warns checks exhaustiveness for tuple literal of 3 elements, and warns + checks exhaustiveness of bool type (missing true) checks exhaustiveness of bool type (missing true) + checks exhaustiveness for tuple literal with types and underscore at second position checks exhaustiveness for tuple literal with types and underscore at second position + checks exhaustiveness for tuple literal with types and underscore at first position checks exhaustiveness for tuple literal with types and underscore at first position + checks exhaustiveness for tuple literal of 3 elements, all bool checks exhaustiveness for tuple literal of 3 elements, all bool + checks exhaustiveness of union type with virtual type checks exhaustiveness of union type with virtual type + checks exhaustiveness of bool type (missing false) checks exhaustiveness of bool type (missing false) + checks exhaustiveness for tuple literal with bool and underscore at first position, partial match checks exhaustiveness for tuple literal with bool and underscore at first position, partial match + checks exhaustiveness of nil type with nil literal checks exhaustiveness of nil type with nil literal + checks exhaustiveness of nilable type with nil literal checks exhaustiveness of nilable type with nil literal + can't prove case is exhaustive for @[Flags] enum can't prove case is exhaustive for @[Flags] enum + checks exhaustiveness for tuple literal of 2 elements, first is bool checks exhaustiveness for tuple literal of 2 elements, first is bool + checks exhaustiveness of single type (T.class) checks exhaustiveness of single type (T.class) + checks exhaustiveness for tuple literal with bool and underscore at second position, partial match checks exhaustiveness for tuple literal with bool and underscore at second position, partial match + checks exhaustiveness of enum combined with another type checks exhaustiveness of enum combined with another type + checks exhaustiveness for tuple literal of 2 elements, and warns checks exhaustiveness for tuple literal of 2 elements, and warns + checks exhaustiveness for tuple literal with bool and underscore at first position, with partial match checks exhaustiveness for tuple literal with bool and underscore at first position, with partial match + errors if casing against a constant errors if casing against a constant + doesn't check exhaustiveness when using 'when' doesn't check exhaustiveness when using 'when' + checks exhaustiveness of single type (Foo(T).class) checks exhaustiveness of single type (Foo(T).class) + checks exhaustiveness of union with bool checks exhaustiveness of union with bool + checks exhaustiveness of single type checks exhaustiveness of single type + covers all types covers all types +Normalize: array literal + normalizes non-empty with of normalizes non-empty with of + normalizes non-empty without of, with splat only normalizes non-empty without of, with splat only + normalizes empty with of normalizes empty with of + hoists complex element expressions hoists complex element expressions + hoists complex element expressions, with splat hoists complex element expressions, with splat + normalizes non-empty with of, with splat normalizes non-empty with of, with splat + normalizes non-empty without of, with splat normalizes non-empty without of, with splat + hoists complex element expressions, array-like generic hoists complex element expressions, array-like generic + normalizes non-empty without of normalizes non-empty without of + hoists complex element expressions, array-like hoists complex element expressions, array-like +Code gen: uninitialized + codegens value (#3641) codegens value (#3641) + doesn't break on inherited declared var (#390) doesn't break on inherited declared var (#390) + codegens declare var and changes it codegens declare var and changes it + works inside while/begin/rescue (bug inside #759) works inside while/begin/rescue (bug inside #759) works inside while/begin/rescue (bug inside #759) works inside while/begin/rescue (bug inside #759) works inside while/begin/rescue (bug inside #759) works inside while/begin/rescue (bug inside #759) works inside while/begin/rescue (bug inside #759) works inside while/begin/rescue (bug inside #759) works inside while/begin/rescue (bug inside #759) works inside while/begin/rescue (bug inside #759) + works with uninitialized NoReturn (#3314) works with uninitialized NoReturn (#3314) + codegens declare instance var with static array type codegens declare instance var with static array type + codegens declare var and read it codegens declare var and read it + codegens declare instance var codegens declare instance var +Semantic: super + types super without arguments and instance variable types super without arguments and instance variable + types super with named arguments, def has bare splat parameter (#8895) types super with named arguments, def has bare splat parameter (#8895) + errors if invoking super and match isn't found in direct superclass in initialize (even though it's find in one superclass) errors if invoking super and match isn't found in direct superclass in initialize (even though it's find in one superclass) + gives correct error when calling super and target is abstract method (#2675) gives correct error when calling super and target is abstract method (#2675) + calls super in module method (3) (#556) calls super in module method (3) (#556) + calls super in module method (2) (#556) calls super in module method (2) (#556) + errors on super outside method (#4481) errors on super outside method (#4481) + calls super in module method (1) (#556) calls super in module method (1) (#556) + types super without arguments types super without arguments + finds super initialize if not explicitly defined in superclass, 1 (#273) finds super initialize if not explicitly defined in superclass, 1 (#273) + types super with named arguments, def has bare splat parameter (2) (#8895) types super with named arguments, def has bare splat parameter (2) (#8895) + errors no superclass method in top-level errors no superclass method in top-level + errors no superclass method in top-level def errors no superclass method in top-level def + errors no superclass method errors no superclass method + types super with forwarded arguments, def has bare splat parameter (#8895) types super with forwarded arguments, def has bare splat parameter (#8895) + finds super initialize if not explicitly defined in superclass, 2 (#273) finds super initialize if not explicitly defined in superclass, 2 (#273) + types super when container method is defined in parent class two levels up types super when container method is defined in parent class two levels up + types super when inside fun and forwards args types super when inside fun and forwards args + doesn't error if invoking super and match isn't found in direct superclass (even though it's find in one superclass) doesn't error if invoking super and match isn't found in direct superclass (even though it's find in one superclass) + calls super in generic module method calls super in generic module method + types super when container method is defined in parent class types super when container method is defined in parent class + types super with forwarded arguments, different internal names (#8895) types super with forwarded arguments, different internal names (#8895) + types super with forwarded arguments, parent has parameters types super with forwarded arguments, parent has parameters + types super with forwarded arguments, def has double splat parameter (#8895) types super with forwarded arguments, def has double splat parameter (#8895) + types super when inside fun types super when inside fun + errors if calling super on module method and not found errors if calling super on module method and not found + errors on super where only target would be a top level method (#5201) errors on super where only target would be a top level method (#5201) + says correct error message when no overload matches in super call (#272) says correct error message when no overload matches in super call (#272) + invokes super inside macro (#6636) invokes super inside macro (#6636) +Crystal::Repl::Interpreter + bugs + doesn't pass self to top-level method doesn't pass self to top-level method + does leading zeros does leading zeros + does multidispatch on virtual struct union nil does multidispatch on virtual struct union nil + doesn't pass self to top-level method (FileNode) doesn't pass self to top-level method (FileNode) + correctly puts virtual metaclass type in union correctly puts virtual metaclass type in union + does multidispatch on virtual struct does multidispatch on virtual struct + doesn't override local variable value with block var with the same name doesn't override local variable value with block var with the same name + breaks from current block, not from outer block breaks from current block, not from outer block + doesn't incorrectly consider a non-closure as closure doesn't incorrectly consider a non-closure as closure +Crystal::Repl::Interpreter + exception handling + does ensure with explicit return does ensure with explicit return + executes ensure when exception is raised in rescue executes ensure when exception is raised in rescue + does ensure for else when else raises does ensure for else when else raises + executes ensure when breaking from a block executes ensure when breaking from a block + raises and rescues specific exception type raises and rescues specific exception type + does ensure without rescue/raise does ensure without rescue/raise + raises and rescues anything raises and rescues anything + executes ensure when returning from a block executes ensure when returning from a block + executes ensure when returning a big value from a block executes ensure when returning a big value from a block + does ensure for else does ensure for else + executes ensure when exception is raised in body executes ensure when exception is raised in body + does else does else + raises and rescues anything, does ensure when an exception is rescued raises and rescues anything, does ensure when an exception is rescued + executes ensure when returning from a block (2) executes ensure when returning from a block (2) + captures exception in variable captures exception in variable + does rescue when nothing is raised does rescue when nothing is raised +Crystal::Doc::Generator + #formatted_summary + with a Deprecated annotation, and docs + should generate both the docs and Deprecated tag should generate both the docs and Deprecated tag + with a Deprecated annotation, and no docs + should generate just the Deprecated tag should generate just the Deprecated tag + with a Experimental annotation, and no docs + should generate just the Experimental tag should generate just the Experimental tag + with no annotation, and no docs + should generate nothing should generate nothing + should generate the first sentence should generate the first sentence + should exclude whitespace before the summary line should exclude whitespace before the summary line + with a Experimental annotation, and docs + should generate both the docs and Experimental tag should generate both the docs and Experimental tag + should generate the first line should generate the first line + generates sitemap generates sitemap + #must_include_toplevel? + returns true if program has method returns true if program has method + returns false if program has macro which is defined in other place returns false if program has macro which is defined in other place + returns false if program has constant which is defined in other place returns false if program has constant which is defined in other place + returns true if program has macro returns true if program has macro + returns false if program has method which is defined in other place returns false if program has method which is defined in other place + returns false if program has nothing returns false if program has nothing + returns true if program has constant returns true if program has constant + #formatted_doc + with a Deprecated annotation, and docs + should generate both the docs and Deprecated tag should generate both the docs and Deprecated tag + should generate the full document should generate the full document + with a Experimental annotation, and docs + should generate both the docs and Experimental tag should generate both the docs and Experimental tag + with no annotation, and no docs + should generate nothing should generate nothing + should generate the full document should generate the full document + with a Experimental annotation, and no docs + should generate just the Experimental tag should generate just the Experimental tag + with a Deprecated annotation, and no docs + should generate just the Deprecated tag should generate just the Deprecated tag + crystal repo + inserts pseudo methods inserts pseudo methods + #collect_constants + returns empty array when constants are private returns empty array when constants are private +Crystal::Repl::Interpreter + blocks + counts with ... yield scope in block args bytesize (#12316) counts with ... yield scope in block args bytesize (#12316) + caches method with captured block (#12276) caches method with captured block (#12276) + interprets yield return value interprets yield return value + interprets break inside block (union, through return) interprets break inside block (union, through return) + interprets yield with splat (1) interprets yield with splat (1) + interprets yield inside def with arguments interprets yield inside def with arguments + interprets yield expressions interprets yield expressions + casts yield expression to block var type (not block arg type) casts yield expression to block var type (not block arg type) + interprets break inside block (union, through normal flow) interprets break inside block (union, through normal flow) + interprets next inside block interprets next inside block + interprets block with splat interprets block with splat + interprets break inside block (union, through break) interprets break inside block (union, through break) + interprets yield with splat, block with splat (#12227) interprets yield with splat, block with splat (#12227) + interprets with ... yield with struct interprets with ... yield with struct + interprets yield with splat, less block arguments interprets yield with splat, less block arguments + captures non-closure block captures non-closure block + interprets block with args that conflict with a local var interprets block with args that conflict with a local var + interprets next inside block (union, through normal exit) interprets next inside block (union, through normal exit) + interprets with ... yield with extra arguments (#12296) interprets with ... yield with extra arguments (#12296) + interprets block with multiple yields interprets block with multiple yields + interprets break inside block interprets break inside block + interprets yield expression interprets yield expression + yields different values to form a union yields different values to form a union + interprets yield with splat (2) interprets yield with splat (2) + clears block local variables when calling block (2) clears block local variables when calling block (2) + considers block arg without type as having NoReturn type (2) (#12270) considers block arg without type as having NoReturn type (2) (#12270) + returns from block returns from block + interprets next inside block (union, through next) interprets next inside block (union, through next) + interprets with ... yield interprets with ... yield + considers block arg without type as having NoReturn type (#12270) considers block arg without type as having NoReturn type (#12270) + interprets block with args that conflict with a local var interprets block with args that conflict with a local var + interprets yield inside another block interprets yield inside another block + clears block local variables when calling block clears block local variables when calling block + interprets simplest block interprets simplest block + discards yield expression discards yield expression + interprets yield with splat, block with splat interprets yield with splat, block with splat +error reporting + reports unexpected named argument reports unexpected named argument + reports unexpected named argument (2) reports unexpected named argument (2) + reports unexpected block reports unexpected block + reports wrong number of arguments, with optional parameters reports wrong number of arguments, with optional parameters + uses correct name for top-level macro methods uses correct name for top-level macro methods + reports wrong number of arguments reports wrong number of arguments + reports missing block reports missing block read_file with absolute path reads file (doesn't exist) reads file (doesn't exist) reads file (exists) reads file (exists) with relative path - reads file (exists) reads file (exists) reads file (doesn't exist) reads file (doesn't exist) + reads file (exists) reads file (exists) +types to_s of + nilable type with more than two elements, Nil at the end nilable type with more than two elements, Nil at the end + does for type contained in generic class does for type contained in generic class + non-instantiated array non-instantiated array + union types + should not have extra parens + in pointers in pointers + in arrays in arrays + in tuples in tuples + should have parens + as return type as return type + as arg type as arg type + nilable reference type nilable reference type + named tuple named tuple + does for type contained in generic module does for type contained in generic module + union of simple types union of simple types + nilable value type nilable value type + array of simple types array of simple types +Lexer comments + lexes without comments enabled lexes without comments enabled + lexes with comments enabled lexes with comments enabled + lexes with comments enabled (2) lexes with comments enabled (2) + lexes correct number of spaces lexes correct number of spaces +Crystal::Loader + .parse + parses directory paths parses directory paths + parses library names parses library names + prepends directory paths before default search paths prepends directory paths before default search paths + parses static parses static + parses file paths parses file paths + .default_search_paths + DYLD_LIBRARY_PATH DYLD_LIBRARY_PATH + LD_LIBRARY_PATH LD_LIBRARY_PATH + .read_ld_conf + basic basic + with include with include + dynlib + #load_library? + library name library name + does not implicitly find dependencies does not implicitly find dependencies + full path full path + lookup in order lookup in order + does not find global symbols does not find global symbols + #load_file? + finds function symbol finds function symbol + validate that lib handles are properly closed validate that lib handles are properly closed +Semantic: virtual metaclass + allows passing metaclass to virtual metaclass restriction allows passing metaclass to virtual metaclass restriction + merges metaclass types merges metaclass types + restricts virtual metaclass to Class (#11376) restricts virtual metaclass to Class (#11376) + allows passing metaclass to virtual metaclass restriction allows passing metaclass to virtual metaclass restriction + types virtual metaclass method types virtual metaclass method + types virtual metaclass types virtual metaclass + yields virtual type in block arg if class is abstract yields virtual type in block arg if class is abstract + merges metaclass types with 3 types merges metaclass types with 3 types + types metaclass node types metaclass node + allows allocating virtual type when base class is abstract allows allocating virtual type when base class is abstract +Semantic: type + errors if original type doesn't support instance variables errors if original type doesn't support instance variables + can call methods of parent type can call methods of parent type + can call methods of original type can call methods of original type + can access instance variables of original type can access instance variables of original type +implementations + find implementation inside contained file private class' class method find implementation inside contained file private class' class method + find full trace for macro expansions find full trace for macro expansions + find method calls inside if find method calls inside if + find const implementation find const implementation + find method calls inside rescue find method calls inside rescue + find alias implementation find alias implementation + find implementation inside contained file private method find implementation inside contained file private method + find class implementation find class implementation + find implementation from macro expansions find implementation from macro expansions + find implementation inside contained class' class method find implementation inside contained class' class method + find open class implementation find open class implementation + find enum value implementation find enum value implementation + find enum implementation find enum implementation + find top level method calls find top level method calls + find method calls inside while cond find method calls inside while cond + find implementors of different classes find implementors of different classes + find method calls inside while find method calls inside while + find struct implementation find struct implementation + find class inside method find class inside method + find implementors of classes that are only used find implementors of classes that are only used + can display json output can display json output + find implementation in generic class methods find implementation in generic class methods + find method calls inside trailing if find method calls inside trailing if + can display text output can display text output + find class defined by macro find class defined by macro + find implementation in generic class find implementation in generic class + find implementation in class methods find implementation in class methods + find module implementation find module implementation + find implementation inside a module class find implementation inside a module class Crystal::Repl::Interpreter - structs - interprets read instance var of struct interprets read instance var of struct - sets multiple instance vars in virtual abstract struct call (#12187) sets multiple instance vars in virtual abstract struct call (#12187) - mutates struct stored in class var mutates struct stored in class var - does allocate, set instance var and get instance var does allocate, set instance var and get instance var - does simple class instance var initializer does simple class instance var initializer - does call receiver by value from VirtualType abstract struct to concrete struct (#12190) does call receiver by value from VirtualType abstract struct to concrete struct (#12190) - inlines struct method that returns self (#12253) inlines struct method that returns self (#12253) - does constructor does constructor - does complex class instance var initializer does complex class instance var initializer - does call receiver by value from VirtualType abstract struct to union does call receiver by value from VirtualType abstract struct to union - casts def body to def type casts def body to def type + downcasts virtual type to its only type (#12351) downcasts virtual type to its only type (#12351) + inlines instance var access from virtual type with a single type (#39520) inlines instance var access from virtual type with a single type (#39520) + classes + calls implicit struct self method calls implicit struct self method discards allocate discards allocate - mutates struct inside union mutates struct inside union - does simple struct instance var initializer does simple struct instance var initializer - does class instance var initializer inheritance does class instance var initializer inheritance -Parser - parses "1+2*3" parses "1+2*3" - parses "def foo(a, @[Foo] &block); end" parses "def foo(a, @[Foo] &block); end" - parses "foo.|(1, 2) { 3 }" parses "foo.|(1, 2) { 3 }" - parses "n <= 2" parses "n <= 2" - parses "break {1 => 2}" parses "break {1 => 2}" - parses "next {1, 2}" parses "next {1, 2}" - parses "def foo(@def); end" parses "def foo(@def); end" - parses "def foo(x @case); end" parses "def foo(x @case); end" - parses "->Foo.>(Int32)" parses "->Foo.>(Int32)" - parses "def foo(@[Foo] *args); end" parses "def foo(@[Foo] *args); end" - says syntax error on "foo { |next| }" says syntax error on "foo { |next| }" - says syntax error on "A = begin; B = 1; end" says syntax error on "A = begin; B = 1; end" - parses "%x(`which(foo)`)" parses "%x(`which(foo)`)" - parses "def >=; end;" parses "def >=; end;" - parses "x = 1; foo x { }" parses "x = 1; foo x { }" - parses "@foo" parses "@foo" - says syntax error on "next >= 1" says syntax error on "next >= 1" - parses "def //(); end" parses "def //(); end" - says syntax error on "def foo(foo yield); end" says syntax error on "def foo(foo yield); end" - parses "begin\n1\nensure\n2\nend" parses "begin\n1\nensure\n2\nend" - says syntax error on "next >> 1" says syntax error on "next >> 1" - parses "return *{1, 2}" parses "return *{1, 2}" - parses "Foo({X: X, Y: Y})" parses "Foo({X: X, Y: Y})" - parses "def foo(x y); y; end" parses "def foo(x y); y; end" - parses "def **(); end;" parses "def **(); end;" - parses "macro foo\n{%\nif 1\n2\nelse\n3\nend\n%}end" parses "macro foo\n{%\nif 1\n2\nelse\n3\nend\n%}end" - parses "false" parses "false" - parses ":/" parses ":/" - parses "foo.& 1, 2" parses "foo.& 1, 2" - says syntax error on "def foo x y; end" says syntax error on "def foo x y; end" - parses "::foo" parses "::foo" - parses "n & 2" parses "n & 2" - parses ":\u304B\u305F\u306A" parses ":\u304B\u305F\u306A" - says syntax error on "return[0]= 1" says syntax error on "return[0]= 1" - parses "foo.[0] = 1" parses "foo.[0] = 1" - parses "def foo(alias foo); end" parses "def foo(alias foo); end" - says syntax error on "break ... 1" says syntax error on "break ... 1" - parses "def foo(x @@if); end" parses "def foo(x @@if); end" - parses "a.b /=\n1" parses "a.b /=\n1" - parses "Foo()?" parses "Foo()?" - parses "foo[] /2" parses "foo[] /2" - parses "instance_alignof(\n Int32\n)" parses "instance_alignof(\n Int32\n)" - says syntax error on "foo { |a b| }" says syntax error on "foo { |a b| }" - parses "Foo(X, instance_sizeof(Int32))" parses "Foo(X, instance_sizeof(Int32))" - parses "foo[\n1\n]" parses "foo[\n1\n]" - parses "f.x **= 2" parses "f.x **= 2" - says syntax error on "*a if true = 2" says syntax error on "*a if true = 2" - parses "Foo?" parses "Foo?" - parses "a = 1; a +=\n1" parses "a = 1; a +=\n1" - says syntax error on "yield break" says syntax error on "yield break" - parses "foo = 1; foo {}" parses "foo = 1; foo {}" - parses "foo %i()" parses "foo %i()" - parses "foo(a: n < 2)" parses "foo(a: n < 2)" - parses "def +; end;" parses "def +; end;" - says syntax error on "next % 1" says syntax error on "next % 1" - parses "def foo\n1\nend" parses "def foo\n1\nend" - parses "def foo(@[Foo] @[Bar] var : Int32); end" parses "def foo(@[Foo] @[Bar] var : Int32); end" - parses "asm(\"nop\" ::)" parses "asm(\"nop\" ::)" - parses "macro x\n%{}\nend" parses "macro x\n%{}\nend" - parses "lib LibC\nfun getchar : (->)?\nend" parses "lib LibC\nfun getchar : (->)?\nend" - says syntax error on "def is_a?; end" says syntax error on "def is_a?; end" - says syntax error on "def foo(foo unless); end" says syntax error on "def foo(foo unless); end" - parses "def foo(x @@alias); end" parses "def foo(x @@alias); end" - says syntax error on "foo { |(class)| }" says syntax error on "foo { |(class)| }" - parses "1.!(\n)" parses "1.!(\n)" - parses "foo%i" parses "foo%i" - says syntax error on "foo &.&&()" says syntax error on "foo &.&&()" - says syntax error on "<<-'HERE\n" says syntax error on "<<-'HERE\n" - parses "lib LibC\nfun getch = \"get.char\" : Int32\nend" parses "lib LibC\nfun getch = \"get.char\" : Int32\nend" - says syntax error on "a = return" says syntax error on "a = return" - parses "def foo(x @out); end" parses "def foo(x @out); end" - parses "a = 1; a /= 1" parses "a = 1; a /= 1" - parses "a.b &=\n1" parses "a.b &=\n1" - parses "->Foo.&(Int32)" parses "->Foo.&(Int32)" - parses "def self.!~; end;" parses "def self.!~; end;" - says syntax error on "{a[]: 1}" says syntax error on "{a[]: 1}" - parses "def foo(@@yield); end" parses "def foo(@@yield); end" - parses "foo(a: n / 2)" parses "foo(a: n / 2)" - says syntax error on "foo { |(a b)| }" says syntax error on "foo { |(a b)| }" - parses "macro -;end" parses "macro -;end" - parses "foo = 1; b = 2; foo -b" parses "foo = 1; b = 2; foo -b" - parses "next *1" parses "next *1" - parses "def foo(x @@while); end" parses "def foo(x @@while); end" - parses "def foo(x @begin); end" parses "def foo(x @begin); end" - says syntax error on "foo **bar, *x" says syntax error on "foo **bar, *x" - parses "abstract def foo; 1" parses "abstract def foo; 1" - parses "Foo(x: U, y: V)" parses "Foo(x: U, y: V)" - says syntax error on "def foo(foo lib); end" says syntax error on "def foo(foo lib); end" - parses "return 1, *2" parses "return 1, *2" - says syntax error on "case 1 == 1; when 2 a; end" says syntax error on "case 1 == 1; when 2 a; end" - says syntax error on "break.as(Int32)" says syntax error on "break.as(Int32)" - parses "property require : Int32" parses "property require : Int32" - parses "macro foo;var if true;end" parses "macro foo;var if true;end" - parses "*a = 1" parses "*a = 1" - parses "def foo(x @unless); end" parses "def foo(x @unless); end" - parses "foo(0, n | 2)" parses "foo(0, n | 2)" - parses "def foo(@alias); end" parses "def foo(@alias); end" - parses "macro *;end" parses "macro *;end" - says syntax error on "[\n\"foo\"\n\"bar\"\n]" says syntax error on "[\n\"foo\"\n\"bar\"\n]" - says syntax error on "foo(break)" says syntax error on "foo(break)" - says syntax error on "break << 1" says syntax error on "break << 1" - parses "def foo(x : U) forall U; end" parses "def foo(x : U) forall U; end" - parses "n << 2" parses "n << 2" - says syntax error on "def foo(enum); end" says syntax error on "def foo(enum); end" - parses "{% begin %}%r{\\A}{% end %}" parses "{% begin %}%r{\\A}{% end %}" - global regex match data - says syntax error on "$99999999999999999999999?" says syntax error on "$99999999999999999999999?" - parses "$?" parses "$?" - says syntax error on "$0, $1 = [1, 2]" says syntax error on "$0, $1 = [1, 2]" - parses "$? = 1" parses "$? = 1" - parses "$~ = 1" parses "$~ = 1" - parses "$?.foo" parses "$?.foo" - parses "$1" parses "$1" - says syntax error on "$0, a = {1, 2}" says syntax error on "$0, a = {1, 2}" - parses "$~.foo" parses "$~.foo" - parses "foo $?" parses "foo $?" - parses "$1?" parses "$1?" - parses "foo $1" parses "foo $1" - says syntax error on "$0 = 1" says syntax error on "$0 = 1" - parses "$~" parses "$~" - parses "$0" parses "$0" - says syntax error on "$2147483648" says syntax error on "$2147483648" - parses "property if : Int32" parses "property if : Int32" - parses "foo(0, n % 2)" parses "foo(0, n % 2)" - parses "[1,\n 2,]" parses "[1,\n 2,]" - parses "->Foo.[]=(Int32)" parses "->Foo.[]=(Int32)" - parses "foo(0, n &* 2)" parses "foo(0, n &* 2)" - parses "as(Bar)" parses "as(Bar)" - says syntax error on "foo { |(true)| }" says syntax error on "foo { |(true)| }" - parses "(1; 2; 3)" parses "(1; 2; 3)" - says syntax error on "def foo 1; end" says syntax error on "def foo 1; end" - parses "def ===(); end" parses "def ===(); end" - parses "a : Foo" parses "a : Foo" - parses "instance_sizeof(\n Int32\n)" parses "instance_sizeof(\n Int32\n)" - parses "lib LibC; fun foo(a : Int*); end" parses "lib LibC; fun foo(a : Int*); end" - parses "def foo(@case); end" parses "def foo(@case); end" - parses "case 1; when 0, 1; 2; else; 3; end" parses "case 1; when 0, 1; 2; else; 3; end" - parses "def foo; yield 1; yield; end" parses "def foo; yield 1; yield; end" - parses "a = 1; b = 2; c = 3; a-b -c" parses "a = 1; b = 2; c = 3; a-b -c" - parses "lib LibC; struct Foo; x : Int; y : Float; end end" parses "lib LibC; struct Foo; x : Int; y : Float; end end" - parses "puts %i(one two)" parses "puts %i(one two)" - parses "def ~(); end;" parses "def ~(); end;" - parses "fun : Int32" parses "fun : Int32" - says syntax error on "break - 1" says syntax error on "break - 1" - parses "foo &.block[0]" parses "foo &.block[0]" - parses "case :foo; when :bar; 2; end" parses "case :foo; when :bar; 2; end" - parses "def !~(); end;" parses "def !~(); end;" - says syntax error on "foo { |extend| }" says syntax error on "foo { |extend| }" - says syntax error on "def foo(foo self); end" says syntax error on "def foo(foo self); end" - says syntax error on "def foo(def); end" says syntax error on "def foo(def); end" - parses "call(foo : A, end : B)" parses "call(foo : A, end : B)" - parses "foo.| do end" parses "foo.| do end" - parses "foo(0, n &- 2)" parses "foo(0, n &- 2)" - parses "\"foo\#{\"bar\"}baz\"" parses "\"foo\#{\"bar\"}baz\"" - parses "foo 1, a: 1, b: 2\n1" parses "foo 1, a: 1, b: 2\n1" - parses "foo.** do end" parses "foo.** do end" - parses "foo % x()" parses "foo % x()" - parses "foo.<=(1, 2)" parses "foo.<=(1, 2)" - parses "lib LibC\nfun SomeFun\nend" parses "lib LibC\nfun SomeFun\nend" - parses "def ==(*args, **opts, &); end" parses "def ==(*args, **opts, &); end" - sets correct location of annotation in lib sets correct location of annotation in lib - says syntax error on "{{ {{ 1 }} }}" says syntax error on "{{ {{ 1 }} }}" - says syntax error on "{one: :two, three: :four} of Symbol => Symbol" says syntax error on "{one: :two, three: :four} of Symbol => Symbol" - parses "<<-HERE\n One\n Zero\n HERE" parses "<<-HERE\n One\n Zero\n HERE" - parses "<<-HERE\n foo\#{1}bar\n baz\n HERE" parses "<<-HERE\n foo\#{1}bar\n baz\n HERE" - parses "macro |;end" parses "macro |;end" - parses "lib LibC\n@[Bar]; end" parses "lib LibC\n@[Bar]; end" - parses "class Foo(T); end" parses "class Foo(T); end" - says syntax error on "def foo(until); end" says syntax error on "def foo(until); end" - parses "foo /a/" parses "foo /a/" - parses "foo.% do end" parses "foo.% do end" - parses "next *1, 2" parses "next *1, 2" - parses "foo = 1; ->foo.foo=" parses "foo = 1; ->foo.foo=" - parses "asm(\n\"nop\"\n:\n\"a\"(0)\n:\n\"b\"(1),\n\"c\"(2)\n)" parses "asm(\n\"nop\"\n:\n\"a\"(0)\n:\n\"b\"(1),\n\"c\"(2)\n)" - parses "def foo(@@var); end" parses "def foo(@@var); end" - parses "asm(\"nop\" : : )" parses "asm(\"nop\" : : )" - says syntax error on "foo { |typeof| }" says syntax error on "foo { |typeof| }" - says syntax error on "foo { |(struct)| }" says syntax error on "foo { |(struct)| }" - says syntax error on "fun Foo : Int64\nend" says syntax error on "fun Foo : Int64\nend" - parses "macro foo;bar{% if x %}body{% elsif y %}body2{% else %}body3{%end%}baz;end" parses "macro foo;bar{% if x %}body{% elsif y %}body2{% else %}body3{%end%}baz;end" - parses "<<-FOO\n\t 1\n\t FOO" parses "<<-FOO\n\t 1\n\t FOO" - parses "->@@foo.foo=" parses "->@@foo.foo=" - parses "lib LibC; type A = B.class; end" parses "lib LibC; type A = B.class; end" - parses "rescue : Int32" parses "rescue : Int32" - says syntax error on "def foo(x, *); 1; end" says syntax error on "def foo(x, *); 1; end" - parses "foo[0] = 1 if 2" parses "foo[0] = 1 if 2" - parses "%r(/)" parses "%r(/)" - says syntax error on "def foo(out); end" says syntax error on "def foo(out); end" - parses "foo &.+(2)" parses "foo &.+(2)" - parses "return 1, 2" parses "return 1, 2" - parses "a = 1\ncase 1\nwhen a then 1\nend" parses "a = 1\ncase 1\nwhen a then 1\nend" - says syntax error on "{a: 1, \"\": 2}" says syntax error on "{a: 1, \"\": 2}" - parses "foo.^ do end" parses "foo.^ do end" - parses "def foo(@@lib); end" parses "def foo(@@lib); end" - says syntax error on " {1, 2, 3 end" says syntax error on " {1, 2, 3 end" - parses "foo.%(1, 2) { 3 }" parses "foo.%(1, 2) { 3 }" - says syntax error on "class Foo(T, U V)" says syntax error on "class Foo(T, U V)" - parses "Int" parses "Int" - says syntax error on "def foo(**x, &x); end" says syntax error on "def foo(**x, &x); end" - parses "def type(type); end" parses "def type(type); end" - parses "1 / -2" parses "1 / -2" - parses "foo bar.baz(1) do\nend" parses "foo bar.baz(1) do\nend" - parses "asm(\"nop\" \n)" parses "asm(\"nop\" \n)" - says syntax error on "require 1" says syntax error on "require 1" - parses "foo(Bar) { 1 }" parses "foo(Bar) { 1 }" - parses "foo x, y do\nend" parses "foo x, y do\nend" - parses "foo.!~(1, 2)" parses "foo.!~(1, 2)" - parses "lib LibC; fun foo : Int*; end" parses "lib LibC; fun foo : Int*; end" - parses "{% begin %}%i| %s |{% end %}" parses "{% begin %}%i| %s |{% end %}" - parses "abstract struct Foo; end" parses "abstract struct Foo; end" - parses "1 .. 2" parses "1 .. 2" - parses "def <=; end;" parses "def <=; end;" - parses "f ->{ a do\n end\n }" parses "f ->{ a do\n end\n }" - parses "def foo(@@break); end" parses "def foo(@@break); end" - parses "@a = uninitialized Foo" parses "@a = uninitialized Foo" - parses ":<=" parses ":<=" - parses "foo.bar.as(Bar)" parses "foo.bar.as(Bar)" - parses "yield if true" parses "yield if true" - parses "foo.< do end" parses "foo.< do end" - parses "foo(0, n - 2)" parses "foo(0, n - 2)" - says syntax error on "{a: 1, a: 2}" says syntax error on "{a: 1, a: 2}" - parses "Foo(\n)" parses "Foo(\n)" - parses " def foo(\n @[Foo]\n id : Int32,\n @[Bar] name : String\n ); end" parses " def foo(\n @[Foo]\n id : Int32,\n @[Bar] name : String\n ); end" - parses "->::foo?" parses "->::foo?" - parses "def foo(x @alias); end" parses "def foo(x @alias); end" - parses "macro <;end" parses "macro <;end" - says syntax error on "foo **bar, out x" says syntax error on "foo **bar, out x" - says syntax error on "def foo(include); end" says syntax error on "def foo(include); end" - says syntax error on "1 while 3" says syntax error on "1 while 3" - parses "foo a: 1, b: 2" parses "foo a: 1, b: 2" - parses "def foo(@self); end" parses "def foo(@self); end" - parses "foo % r()" parses "foo % r()" - parses "a = 1; a ||= 1" parses "a = 1; a ||= 1" - parses "def self./; end;" parses "def self./; end;" - parses "def !=; end;" parses "def !=; end;" - parses "yield 1" parses "yield 1" - parses "foo.^" parses "foo.^" - parses "/ /\n/ /" parses "/ /\n/ /" - parses "foo.!= 1, 2" parses "foo.!= 1, 2" - says syntax error on "foo { |lib| }" says syntax error on "foo { |lib| }" - parses "->foo(Int32, Float64)" parses "->foo(Int32, Float64)" - parses "begin; 1; rescue; 2; else; 3; end" parses "begin; 1; rescue; 2; else; 3; end" - parses "macro &;end" parses "macro &;end" - parses "1 <= 2 <= 3" parses "1 <= 2 <= 3" - parses "property else : Int32" parses "property else : Int32" - parses "foo begin\nbar do\nend\nend" parses "foo begin\nbar do\nend\nend" - parses "Foo(X: U, Y: V)" parses "Foo(X: U, Y: V)" - says syntax error on "{foo: 1, bar: 2\nbaz: 3}" says syntax error on "{foo: 1, bar: 2\nbaz: 3}" - parses "def foo(x @@class); end" parses "def foo(x @@class); end" - parses "x : *T -> R" parses "x : *T -> R" - parses "1 ? a : b" parses "1 ? a : b" - parses "<<-HERE\n One\n\n Zero\n HERE" parses "<<-HERE\n One\n\n Zero\n HERE" - parses "foo(0, n < 2)" parses "foo(0, n < 2)" - parses "1 / 2" parses "1 / 2" - says syntax error on "macro foo(x, *); 1; end" says syntax error on "macro foo(x, *); 1; end" - parses "property alias : Int32" parses "property alias : Int32" - parses "next" parses "next" - says syntax error on "x++" says syntax error on "x++" - parses "Foo({String, ->})" parses "Foo({String, ->})" - parses "def =~; end;" parses "def =~; end;" - says syntax error on "def foo(alias); end" says syntax error on "def foo(alias); end" - parses "def foo(x @@struct); end" parses "def foo(x @@struct); end" - parses "foo.>=(1, 2)" parses "foo.>=(1, 2)" - says syntax error on "*a, b, c, d, e = 1, 2" says syntax error on "*a, b, c, d, e = 1, 2" - parses "def foo(var : (Int, Float -> Double)); end" parses "def foo(var : (Int, Float -> Double)); end" - parses "def foo(x @@with); end" parses "def foo(x @@with); end" - parses "def foo(&block : Int ->\n); end" parses "def foo(&block : Int ->\n); end" - parses "property false : Int32" parses "property false : Int32" - parses "def foo; 1; 2; end" parses "def foo; 1; 2; end" - says syntax error on "def foo(foo protected); end" says syntax error on "def foo(foo protected); end" - parses "def foo(macro foo); end" parses "def foo(macro foo); end" - parses "def self.<(); end;" parses "def self.<(); end;" - parses "def foo(@@offsetof); end" parses "def foo(@@offsetof); end" - parses "class : Int32" parses "class : Int32" - says syntax error on "foo &.&&" says syntax error on "foo &.&&" - parses "{% begin %}%Q< %s >{% end %}" parses "{% begin %}%Q< %s >{% end %}" - parses "def foo;bar(end: 1);end" parses "def foo;bar(end: 1);end" - parses "\"hello \" \\\n \"world\"" parses "\"hello \" \\\n \"world\"" - says syntax error on "def foo(yield); end" says syntax error on "def foo(yield); end" - parses "macro foo;bar{% unless x %}body{% end %}baz;end" parses "macro foo;bar{% unless x %}body{% end %}baz;end" - parses "foo(n / 2)" parses "foo(n / 2)" - parses "def foo(@@asm); end" parses "def foo(@@asm); end" - parses "lib LibC\nfun getchar(a : Int)\nend" parses "lib LibC\nfun getchar(a : Int)\nend" - parses "1_i64" parses "1_i64" - parses "fun foo(x : Int32) : Int64\nx\nend" parses "fun foo(x : Int32) : Int64\nx\nend" - says syntax error on "fun foo\nFoo = 1" says syntax error on "fun foo\nFoo = 1" - says syntax error on "def foo!=; end" says syntax error on "def foo!=; end" - says syntax error on "/foo)/" says syntax error on "/foo)/" - parses "<<-HERE\nHello, mom! I am HERE.\nHER dress is beautiful.\nHE is OK.\n HERESY\nHERE" parses "<<-HERE\nHello, mom! I am HERE.\nHER dress is beautiful.\nHE is OK.\n HERESY\nHERE" - parses "->Foo.+(Int32)" parses "->Foo.+(Int32)" - parses "foo = 1; ->foo.[](Int32)" parses "foo = 1; ->foo.[](Int32)" - parses "def foo(@[Foo] **args); end" parses "def foo(@[Foo] **args); end" - parses "::Foo{\"x\" => \"y\"}" parses "::Foo{\"x\" => \"y\"}" - parses "foo(x: result : Int32); result" parses "foo(x: result : Int32); result" - parses "a.b &-=\n1" parses "a.b &-=\n1" - parses "a ?\n b ? b1 : b2\n : c ? 3\n : 0" parses "a ?\n b ? b1 : b2\n : c ? 3\n : 0" - parses "def foo(x @until); end" parses "def foo(x @until); end" - parses "a : Foo | Int32" parses "a : Foo | Int32" - says syntax error on "while next; end" says syntax error on "while next; end" - parses "foo(*bar)" parses "foo(*bar)" - parses "{% begin %}%q( %s ){% end %}" parses "{% begin %}%q( %s ){% end %}" - parses "lib LibC; struct Foo; include Bar; end; end" parses "lib LibC; struct Foo; include Bar; end; end" - says syntax error on "{1 2}" says syntax error on "{1 2}" - says syntax error on "pointerof(self)" says syntax error on "pointerof(self)" - parses "def !=(*args, **opts); end" parses "def !=(*args, **opts); end" - parses "def foo(@protected); end" parses "def foo(@protected); end" - parses "def foo;{{@type}};end" parses "def foo;{{@type}};end" - parses "{% begin %}%x[ %s ]{% end %}" parses "{% begin %}%x[ %s ]{% end %}" - parses "a = 1; a rescue a" parses "a = 1; a rescue a" - parses "asm(\n\"nop\"\n:\n\"a\"(0),\n\"b\"(1)\n:\n\"c\"(2),\n\"d\"(3)\n)" parses "asm(\n\"nop\"\n:\n\"a\"(0),\n\"b\"(1)\n:\n\"c\"(2),\n\"d\"(3)\n)" - parses "case {1}\nin {_}; 2; end" parses "case {1}\nin {_}; 2; end" - parses "foo = 1; ->foo.<<(Int32)" parses "foo = 1; ->foo.<<(Int32)" - parses "foo(\n1)" parses "foo(\n1)" - parses "foo x, *bar" parses "foo x, *bar" - parses "foo &.block" parses "foo &.block" - parses "offsetof(X, 1)" parses "offsetof(X, 1)" - says syntax error on "{a: 1 b: 2}" says syntax error on "{a: 1 b: 2}" - parses "foo(a: 1\n)" parses "foo(a: 1\n)" - parses "property rescue : Int32" parses "property rescue : Int32" - parses "def self.===; end;" parses "def self.===; end;" - says syntax error on "foo[break]" says syntax error on "foo[break]" - says syntax error on "break | 1" says syntax error on "break | 1" - parses "macro foo; 1 + 2 {{ foo }} 3 + 4; end" parses "macro foo; 1 + 2 {{ foo }} 3 + 4; end" - parses "1 ? a : b ? c : 3" parses "1 ? a : b ? c : 3" - parses "@@foo/2" parses "@@foo/2" - says syntax error on "module Foo; require \"bar\"; end" says syntax error on "module Foo; require \"bar\"; end" - parses "->Foo.foo" parses "->Foo.foo" - parses "Foo({X, Y})" parses "Foo({X, Y})" - says syntax error on "return &+ 1" says syntax error on "return &+ 1" - says syntax error on "foo 1," says syntax error on "foo 1," - parses "lib LibC; struct Foo; end end" parses "lib LibC; struct Foo; end end" - parses "Foo(T)" parses "Foo(T)" - parses "/fo\\so/" parses "/fo\\so/" - parses "a = 1; a %= 1" parses "a = 1; a %= 1" - says syntax error on "foo { |class| }" says syntax error on "foo { |class| }" - parses "def foo(\"bar qux\" y); y; end" parses "def foo(\"bar qux\" y); y; end" - parses "def foo(sizeof foo); end" parses "def foo(sizeof foo); end" - parses "{\n{1}\n}" parses "{\n{1}\n}" - parses "foo(z: 0, a: n =~ 2)" parses "foo(z: 0, a: n =~ 2)" - says syntax error on "foo { |(case)| }" says syntax error on "foo { |(case)| }" - parses "1\n+2" parses "1\n+2" - says syntax error on "$foo :: Foo" says syntax error on "$foo :: Foo" - parses "{% begin %}%w( %s ){% end %}" parses "{% begin %}%w( %s ){% end %}" - says syntax error on "foo { |protected| }" says syntax error on "foo { |protected| }" - parses "def foo(a, &block : Int -> Double); end" parses "def foo(a, &block : Int -> Double); end" - parses "lib LibC\nfun getch = \"get.char\"\nend" parses "lib LibC\nfun getch = \"get.char\"\nend" - parses "def foo(nil foo); end" parses "def foo(nil foo); end" - parses "foo(z: 0, a: n << 2)" parses "foo(z: 0, a: n << 2)" - parses "__FILE__" parses "__FILE__" - parses "1.responds_to?(\n :foo\n)" parses "1.responds_to?(\n :foo\n)" - parses "case : Int32" parses "case : Int32" - parses "puts a if true" parses "puts a if true" - says syntax error on "a() = 1" says syntax error on "a() = 1" - parses "(a;\nb)" parses "(a;\nb)" - says syntax error on "A = foo(B = 1)" says syntax error on "A = foo(B = 1)" - parses "foo.is_a?(Foo | Bar)" parses "foo.is_a?(Foo | Bar)" - says syntax error on "unless next; end" says syntax error on "unless next; end" - parses "foo(bar:\"a\", baz:\"b\")" parses "foo(bar:\"a\", baz:\"b\")" - parses "a = 1; a ^=\n1" parses "a = 1; a ^=\n1" - parses "foo %q()" parses "foo %q()" - says syntax error on "return &* 1" says syntax error on "return &* 1" - parses "def foo(@@self); end" parses "def foo(@@self); end" - parses "def foo(@begin); end" parses "def foo(@begin); end" - parses "{% for x in y %}body{% end %}" parses "{% for x in y %}body{% end %}" - says syntax error on "foo { |enum| }" says syntax error on "foo { |enum| }" - parses "def >; end;" parses "def >; end;" - says syntax error on "break >> 1" says syntax error on "break >> 1" - parses "{% a = 1 if 2 %}" parses "{% a = 1 if 2 %}" - says syntax error on "return ? 1 : 2" says syntax error on "return ? 1 : 2" - parses "case {1, 2}\nwhen {.foo, .bar}\n5\nend" parses "case {1, 2}\nwhen {.foo, .bar}\n5\nend" - parses "def foo(var : self*); end" parses "def foo(var : self*); end" - says syntax error on "def foo=(**kwargs); end" says syntax error on "def foo=(**kwargs); end" - parses "1 if /x/" parses "1 if /x/" - says syntax error on "def foo(x @x); 1; end" says syntax error on "def foo(x @x); 1; end" - says syntax error on "{\"x\": [] of Int32,\n}\n1.foo(" says syntax error on "{\"x\": [] of Int32,\n}\n1.foo(" - parses "/=/" parses "/=/" - parses "def foo(@yield); end" parses "def foo(@yield); end" - parses "Foo.bar x.y do\nend" parses "Foo.bar x.y do\nend" - parses "foo do\n//\nend" parses "foo do\n//\nend" - says syntax error on "a = a" says syntax error on "a = a" - parses "def !=(*args, **opts, &); end" parses "def !=(*args, **opts, &); end" - parses "macro //;end" parses "macro //;end" - says syntax error on "a = 1, b = 2" says syntax error on "a = 1, b = 2" - parses "def foo(include foo); end" parses "def foo(include foo); end" - parses "self" parses "self" - parses "def foo(x = __FILE__); end" parses "def foo(x = __FILE__); end" - parses "def foo(x @self); end" parses "def foo(x @self); end" - parses "Foo(Bar(T | U))" parses "Foo(Bar(T | U))" - parses "foo(n &** 2)" parses "foo(n &** 2)" - parses "def self.foo\n1\nend" parses "def self.foo\n1\nend" - says syntax error on "class Foo; require \"bar\"; end" says syntax error on "class Foo; require \"bar\"; end" - parses "def foo(@@case); end" parses "def foo(@@case); end" - parses "def <=(); end;" parses "def <=(); end;" - says syntax error on "offsetof(X, 1.0)" says syntax error on "offsetof(X, 1.0)" - parses "def foo(@@next); end" parses "def foo(@@next); end" - parses "def foo(x @@end); end" parses "def foo(x @@end); end" - parses "def foo(x @include); end" parses "def foo(x @include); end" - parses "{A::B => 1, C::D => 2}" parses "{A::B => 1, C::D => 2}" - parses "def foo(x @asm); end" parses "def foo(x @asm); end" - says syntax error on "@@foo :: Foo" says syntax error on "@@foo :: Foo" - parses "def foo(x, **args)\n1\nend" parses "def foo(x, **args)\n1\nend" - says syntax error on "def foo(**args = 1); end" says syntax error on "def foo(**args = 1); end" - parses "foo &.as?(T).bar" parses "foo &.as?(T).bar" - parses "yield foo do\nend" parses "yield foo do\nend" - parses "foo(out x); x" parses "foo(out x); x" - parses "f.x %= 2" parses "f.x %= 2" - parses "def =~; end" parses "def =~; end" - parses "foo.bar = (1).abs" parses "foo.bar = (1).abs" - parses "/ /; / /" parses "/ /; / /" - parses "{% begin %}%Q( %s ){% end %}" parses "{% begin %}%Q( %s ){% end %}" - parses "begin\n/ /\nend" parses "begin\n/ /\nend" - parses "foo.<" parses "foo.<" - parses "{% begin %}%q| %s |{% end %}" parses "{% begin %}%q| %s |{% end %}" - parses "+1_i64" parses "+1_i64" - parses "foo +1" parses "foo +1" - parses "protected def foo; end" parses "protected def foo; end" - parses "<<-FOO\n\t1\n\tFOO" parses "<<-FOO\n\t1\n\tFOO" - parses "macro foo;if var;true;end;end" parses "macro foo;if var;true;end;end" - parses "1 && 2" parses "1 && 2" - says syntax error on "case break; when 1; end; end" says syntax error on "case break; when 1; end; end" - parses "Foo()" parses "Foo()" - says syntax error on "a.b {}, c = 1" says syntax error on "a.b {}, c = 1" - parses "foo &.!" parses "foo &.!" - parses ":\"\\\\foo\"" parses ":\"\\\\foo\"" - parses "def foo; end; if false; 1; else; 2; end" parses "def foo; end; if false; 1; else; 2; end" - parses "def foo(@@out); end" parses "def foo(@@out); end" - parses "lib LibC; struct Foo; {% if 1 %}2{% end %}; end; end" parses "lib LibC; struct Foo; {% if 1 %}2{% end %}; end; end" - parses "f.x &-= 2" parses "f.x &-= 2" - says syntax error on "return >= 1" says syntax error on "return >= 1" - parses "foo % i()" parses "foo % i()" - parses "def foo(begin foo); end" parses "def foo(begin foo); end" - parses "def ==(*args, **opts); end" parses "def ==(*args, **opts); end" - parses "foo.>= do end" parses "foo.>= do end" - says syntax error on "def foo\ndef\nend" says syntax error on "def foo\ndef\nend" - parses "foo(\na: 1,\n)" parses "foo(\na: 1,\n)" - parses "def foo(x @select); end" parses "def foo(x @select); end" - parses "foo.%(1, 2)" parses "foo.%(1, 2)" - parses "foo(a: n % 2)" parses "foo(a: n % 2)" - parses "{{ //.options }}" parses "{{ //.options }}" - parses "x[+ 1]" parses "x[+ 1]" - parses "Foo.foo(count: 3).bar { }" parses "Foo.foo(count: 3).bar { }" - parses "def foo(offsetof foo); end" parses "def foo(offsetof foo); end" - parses "a, *b = 1" parses "a, *b = 1" - parses "foo.===" parses "foo.===" - parses "begin; rescue; end" parses "begin; rescue; end" - parses "case {1, 2}\nwhen {3, 4}, {5, 6}\n7\nend" parses "case {1, 2}\nwhen {3, 4}, {5, 6}\n7\nend" - parses "foo(a: n &- 2)" parses "foo(a: n &- 2)" - parses "foo = 1; ->foo.foo!" parses "foo = 1; ->foo.foo!" - parses ":!" parses ":!" - parses "def foo(var : Int, Float -> Double); end" parses "def foo(var : Int, Float -> Double); end" - parses "break" parses "break" - parses "macro foo(x); 1 + 2; end" parses "macro foo(x); 1 + 2; end" - parses "property begin : Int32" parses "property begin : Int32" - parses ":|" parses ":|" - parses "Foo({*X, *{Y}})" parses "Foo({*X, *{Y}})" - parses "def foo(x @var); end" parses "def foo(x @var); end" - sets correct location of splat in multiple assignment sets correct location of splat in multiple assignment - parses "while true; 1; end;" parses "while true; 1; end;" - parses "typeof : Int32" parses "typeof : Int32" - says syntax error on "next - 1" says syntax error on "next - 1" - parses "foo a: 1, &block" parses "foo a: 1, &block" - parses "case {1}\nin {true}; 2; end" parses "case {1}\nin {true}; 2; end" - parses "[] of ->\n" parses "[] of ->\n" - parses "a.b %=\n1" parses "a.b %=\n1" - parses "n == 2" parses "n == 2" - parses "foo.==(1, 2) { 3 }" parses "foo.==(1, 2) { 3 }" - says syntax error on "x, self = 1, 2" says syntax error on "x, self = 1, 2" - parses "def foo(@@module); end" parses "def foo(@@module); end" - says syntax error on "def Foo(Int32).bar;end" says syntax error on "def Foo(Int32).bar;end" - parses "1;-2" parses "1;-2" - parses "foo.[]=(1, 2) { 3 }" parses "foo.[]=(1, 2) { 3 }" - parses "def downto(n)\n1\nend" parses "def downto(n)\n1\nend" - says syntax error on "foo { |(out)| }" says syntax error on "foo { |(out)| }" - parses "def foo(@module); end" parses "def foo(@module); end" - parses "n - 2" parses "n - 2" - parses "begin; 1; rescue ::Foo; 2; end" parses "begin; 1; rescue ::Foo; 2; end" - parses "a; if / /; / /; elsif / /; / /; end" parses "a; if / /; / /; elsif / /; / /; end" - says syntax error on "foo { |if| }" says syntax error on "foo { |if| }" - says syntax error on "a = next" says syntax error on "a = next" - parses "->(x : Int32) : Int32 { }" parses "->(x : Int32) : Int32 { }" - parses "def self.^(); end;" parses "def self.^(); end;" - parses "foo.!=(1, 2)" parses "foo.!=(1, 2)" - says syntax error on "*a == 1" says syntax error on "*a == 1" - says syntax error on "unless 1 == 1 a; end" says syntax error on "unless 1 == 1 a; end" - parses "->foo(Void*)" parses "->foo(Void*)" - parses "foo(**bar)" parses "foo(**bar)" - parses "def foo(@select); end" parses "def foo(@select); end" - parses "def foo; x { |a| a }; end" parses "def foo; x { |a| a }; end" - says syntax error on "macro foo(\"\" y); end" says syntax error on "macro foo(\"\" y); end" - parses "module Foo(*T); end" parses "module Foo(*T); end" - parses "macro : Int32" parses "macro : Int32" - parses "else : Int32" parses "else : Int32" - parses "sizeof : Int32" parses "sizeof : Int32" - parses "foo(0, n << 2)" parses "foo(0, n << 2)" - parses "x.y=(1).to_s" parses "x.y=(1).to_s" - says syntax error on "a = 1; a += return" says syntax error on "a = 1; a += return" - parses "{% begin %}%i{ %s }{% end %}" parses "{% begin %}%i{ %s }{% end %}" - parses "%q{hello \\n world}" parses "%q{hello \\n world}" - parses "1 -\n2" parses "1 -\n2" - says syntax error on "return - 1" says syntax error on "return - 1" - says syntax error on "self, x = 1, 2" says syntax error on "self, x = 1, 2" - parses ":!=" parses ":!=" - parses "case {1}\nin {Int32}; 2; end" parses "case {1}\nin {Int32}; 2; end" - parses "a.b +=\n1" parses "a.b +=\n1" - parses "require : Int32" parses "require : Int32" - parses "def foo(@lib); end" parses "def foo(@lib); end" - says syntax error on "a, B = 1, 2" says syntax error on "a, B = 1, 2" - parses "def foo(x @pointerof); end" parses "def foo(x @pointerof); end" - parses "foo(0, n ^ 2)" parses "foo(0, n ^ 2)" - says syntax error on "foo(\"bar\" \"baz\")" says syntax error on "foo(\"bar\" \"baz\")" - says syntax error on "while return; end" says syntax error on "while return; end" - parses "property return : Int32" parses "property return : Int32" - parses "1.0_f32" parses "1.0_f32" - says syntax error on "next ** 1" says syntax error on "next ** 1" - parses "lib LibC; fun getchar(a : Int, b : Float) : Int; end" parses "lib LibC; fun getchar(a : Int, b : Float) : Int; end" - says syntax error on "return & 1" says syntax error on "return & 1" - says syntax error on "def foo(foo select); end" says syntax error on "def foo(foo select); end" - parses "foo(0, n >= 2)" parses "foo(0, n >= 2)" - parses "next : Int32" parses "next : Int32" - parses "def self.<; end;" parses "def self.<; end;" - parses "foo(n <= 2)" parses "foo(n <= 2)" - says syntax error on "def foo(asm); end" says syntax error on "def foo(asm); end" - parses "foo.*(1, 2) { 3 }" parses "foo.*(1, 2) { 3 }" - parses "def foo(@[Foo] var); end" parses "def foo(@[Foo] var); end" - parses "1 * -2" parses "1 * -2" - says syntax error on "def foo(private); end" says syntax error on "def foo(private); end" - parses "macro foo; 1 + 2 {{foo}} 3 + 4; end" parses "macro foo; 1 + 2 {{foo}} 3 + 4; end" - parses "->() { }" parses "->() { }" - parses "@a : Foo = 1" parses "@a : Foo = 1" - parses "{% begin %}%r|\\A|{% end %}" parses "{% begin %}%r|\\A|{% end %}" - says syntax error on "def foo :String\nend" says syntax error on "def foo :String\nend" - parses "{1 => 2 / 3}" parses "{1 => 2 / 3}" - parses "<<-SOME\n Sa\n Se\n SOME" parses "<<-SOME\n Sa\n Se\n SOME" - parses "*a, b = 1" parses "*a, b = 1" - parses "{% begin %}%x| %s |{% end %}" parses "{% begin %}%x| %s |{% end %}" - parses "abstract def foo\n1" parses "abstract def foo\n1" - parses "def ^(); end;" parses "def ^(); end;" - parses "/foo/m" parses "/foo/m" - parses "macro &-;end" parses "macro &-;end" - parses "foo %Q()" parses "foo %Q()" - parses "macro foo(@[Foo] *args);end" parses "macro foo(@[Foo] *args);end" - parses "1_i128" parses "1_i128" - says syntax error on "def foo() :String\nend" says syntax error on "def foo() :String\nend" - parses "foo(*{1})" parses "foo(*{1})" - parses "def foo(@pointerof); end" parses "def foo(@pointerof); end" - parses "foo.[]=" parses "foo.[]=" - says syntax error on "return / 1" says syntax error on "return / 1" - says syntax error on "class Foo(); end" says syntax error on "class Foo(); end" - parses "Foo(T?)" parses "Foo(T?)" - sets correct location of tuple type sets correct location of tuple type - parses "case 1\nin false; 2; end" parses "case 1\nin false; 2; end" - says syntax error on "def foo(var : Foo+); end" says syntax error on "def foo(var : Foo+); end" - says syntax error on "return == 1" says syntax error on "return == 1" - parses "alias Foo = Bar" parses "alias Foo = Bar" - says syntax error on "\"hello\" foo" says syntax error on "\"hello\" foo" - parses "def ===; end;" parses "def ===; end;" - parses "def foo(x @@false); end" parses "def foo(x @@false); end" - parses "def foo(&@block); end" parses "def foo(&@block); end" - parses "Foo(*T)" parses "Foo(*T)" - parses "def self.=~(); end;" parses "def self.=~(); end;" - parses "def foo(@@pointerof); end" parses "def foo(@@pointerof); end" - says syntax error on "break >= 1" says syntax error on "break >= 1" - says syntax error on "foo { |(instance_sizeof)| }" says syntax error on "foo { |(instance_sizeof)| }" - parses "foo[\nfoo[\n1\n]\n]" parses "foo[\nfoo[\n1\n]\n]" - parses "def foo(@@macro); end" parses "def foo(@@macro); end" - parses "->@foo.foo=" parses "->@foo.foo=" - parses "begin; 1; ensure; 2; end" parses "begin; 1; ensure; 2; end" - parses "def foo(var : self?); end" parses "def foo(var : self?); end" - parses "class Foo(T, *U); end" parses "class Foo(T, *U); end" - says syntax error on "@foo :: Foo" says syntax error on "@foo :: Foo" - parses "enum Foo; {% if 1 %}2{% end %}; end" parses "enum Foo; {% if 1 %}2{% end %}; end" - parses "{% begin %}%q[ %s ]{% end %}" parses "{% begin %}%q[ %s ]{% end %}" - parses "def foo(@@var); 1; end" parses "def foo(@@var); 1; end" - parses "Foo::Bar" parses "Foo::Bar" - parses "while true; end;" parses "while true; end;" - says syntax error on "foo { |(lib)| }" says syntax error on "foo { |(lib)| }" - parses "def foo(@out); end" parses "def foo(@out); end" - says syntax error on "case next; when 1; end; end" says syntax error on "case next; when 1; end; end" - parses "asm(\"nop\" : \"a\"(0) : \"b\"(1), \"c\"(2))" parses "asm(\"nop\" : \"a\"(0) : \"b\"(1), \"c\"(2))" - parses "macro foo(@[Foo] outer inner);end" parses "macro foo(@[Foo] outer inner);end" - parses "def foo(extend foo); end" parses "def foo(extend foo); end" - parses "macro &+;end" parses "macro &+;end" - parses "macro foo\n\"\\\\\"\nend" parses "macro foo\n\"\\\\\"\nend" - parses "lib LibC; fun foo : Int**; end" parses "lib LibC; fun foo : Int**; end" - parses "asm(\"nop\" : \"a\"(0))" parses "asm(\"nop\" : \"a\"(0))" - parses "def self.~(); end;" parses "def self.~(); end;" - says syntax error on "foo[1] = return" says syntax error on "foo[1] = return" - parses "foo(n - 2)" parses "foo(n - 2)" - parses "return *1" parses "return *1" - parses "def foo(@@protected); end" parses "def foo(@@protected); end" - says syntax error on "x { |*a, *b| }" says syntax error on "x { |*a, *b| }" - parses "\"foo\#{bar}baz\"" parses "\"foo\#{bar}baz\"" - parses "foo(n > 2)" parses "foo(n > 2)" - parses "lib LibC\nend" parses "lib LibC\nend" - parses "{A: 1, B: 2}" parses "{A: 1, B: 2}" - says syntax error on "a {} = 1" says syntax error on "a {} = 1" - parses "case 1; when x then 2; else; 3; end" parses "case 1; when x then 2; else; 3; end" - parses "{% begin %}%r(\\A){% end %}" parses "{% begin %}%r(\\A){% end %}" - parses "foo x do\n//\nend" parses "foo x do\n//\nend" - parses "def foo(a); a; end" parses "def foo(a); a; end" - parses "foo &.each do\nend" parses "foo &.each do\nend" - parses "foo = 1; ->foo.//(Int32)" parses "foo = 1; ->foo.//(Int32)" - parses "n % 2" parses "n % 2" - parses "def foo(x @macro); end" parses "def foo(x @macro); end" - parses "1.[]?(2)" parses "1.[]?(2)" - says syntax error on "foo { |pointerof| }" says syntax error on "foo { |pointerof| }" - says syntax error on "def foo(instance_sizeof); end" says syntax error on "def foo(instance_sizeof); end" - parses "foo +1_i64" parses "foo +1_i64" - says syntax error on "foo { |(abstract)| }" says syntax error on "foo { |(abstract)| }" - parses "lib LibC; Foo = 1; end" parses "lib LibC; Foo = 1; end" - parses "foo(n &+ 2)" parses "foo(n &+ 2)" - sets correct location of annotation on method parameter sets correct location of annotation on method parameter - parses ":~" parses ":~" - says syntax error on "next < 1" says syntax error on "next < 1" - parses "def foo(struct foo); end" parses "def foo(struct foo); end" - parses "1..;" parses "1..;" - says syntax error on "\n lib LibFoo\n fun foo(x : Int32\n y : Float64)\n end\n " says syntax error on "\n lib LibFoo\n fun foo(x : Int32\n y : Float64)\n end\n " - parses "nil" parses "nil" - parses "break 1" parses "break 1" - parses ":[]=" parses ":[]=" - parses "lib LibC\nfun getchar\nend" parses "lib LibC\nfun getchar\nend" - parses "def foo(in foo); end" parses "def foo(in foo); end" - parses "def foo(x @end); end" parses "def foo(x @end); end" - parses "->(x : Int32) { x }" parses "->(x : Int32) { x }" - parses "foo(z: 0, a: n &* 2)" parses "foo(z: 0, a: n &* 2)" - parses "/\\//" parses "/\\//" - parses "Foo({x: X, y: Y})" parses "Foo({x: X, y: Y})" - parses "{[] of Foo, Bar::Baz ** 2}" parses "{[] of Foo, Bar::Baz ** 2}" - parses "x, y = <<-FOO, <<-BAR\nhello\nFOO\nworld\nBAR" parses "x, y = <<-FOO, <<-BAR\nhello\nFOO\nworld\nBAR" - parses "def foo(private foo); end" parses "def foo(private foo); end" - parses "Foo({->})" parses "Foo({->})" - parses "Foo(\nT\n)" parses "Foo(\nT\n)" - says syntax error on "def foo(end); end" says syntax error on "def foo(end); end" - parses "def foo(lib foo); end" parses "def foo(lib foo); end" - says syntax error on "def foo(foo pointerof); end" says syntax error on "def foo(foo pointerof); end" - says syntax error on "foo { |out| }" says syntax error on "foo { |out| }" - says syntax error on "if 1 == 1 a; end" says syntax error on "if 1 == 1 a; end" - parses "def foo(if foo); end" parses "def foo(if foo); end" - parses "a\nwhile / /; / /; end" parses "a\nwhile / /; / /; end" - parses "def self.foo=()\n1\nend" parses "def self.foo=()\n1\nend" - parses "foo.<(1, 2)" parses "foo.<(1, 2)" - says syntax error on "until break; end" says syntax error on "until break; end" - parses "a = 1; a &-=\n1" parses "a = 1; a &-=\n1" - parses "def foo(break foo); end" parses "def foo(break foo); end" - parses "foo(z: 0, a: n + 2)" parses "foo(z: 0, a: n + 2)" - parses "yield" parses "yield" - parses "def foo(var : (Int, Float) -> Double); end" parses "def foo(var : (Int, Float) -> Double); end" - parses "def foo(until foo); end" parses "def foo(until foo); end" - parses "foo./ do end" parses "foo./ do end" - parses "def >=(other, file = 1); end" parses "def >=(other, file = 1); end" - says syntax error on "foo { |(private)| }" says syntax error on "foo { |(private)| }" - parses "lib LibC; enum Foo; A\nB; C\nD = 1; end end" parses "lib LibC; enum Foo; A\nB; C\nD = 1; end end" - says syntax error on "foo { |(typeof)| }" says syntax error on "foo { |(typeof)| }" - parses "begin; 1; rescue Foo | Bar; 2; end" parses "begin; 1; rescue Foo | Bar; 2; end" - parses ":foo" parses ":foo" - says syntax error on "foo x: 1, x: 1" says syntax error on "foo x: 1, x: 1" - parses "def foo(@@typeof); end" parses "def foo(@@typeof); end" - parses "f.x //= 2" parses "f.x //= 2" - parses "foo.bar=(*baz)" parses "foo.bar=(*baz)" - parses "module Foo; end" parses "module Foo; end" - parses "foo./ 1, 2" parses "foo./ 1, 2" - parses "property nil : Int32" parses "property nil : Int32" - parses "2.3_f32" parses "2.3_f32" - says syntax error on "next == 1" says syntax error on "next == 1" - says syntax error on "foo { |end| }" says syntax error on "foo { |end| }" - says syntax error on "def foo(x : U) forall U, U; end" says syntax error on "def foo(x : U) forall U, U; end" - says syntax error on "'''" says syntax error on "'''" - parses "property do : Int32" parses "property do : Int32" - parses "def `(cmd); 1; end" parses "def `(cmd); 1; end" - parses "Foo(typeof(1), typeof(2))" parses "Foo(typeof(1), typeof(2))" - parses "x[1, ..2]" parses "x[1, ..2]" - says syntax error on "\"foo\" \"bar\"" says syntax error on "\"foo\" \"bar\"" - parses "a = 1; a //=\n1" parses "a = 1; a //=\n1" - parses "def foo(@@sizeof); end" parses "def foo(@@sizeof); end" - parses "a = 1; a += 10 if a += 20" parses "a = 1; a += 10 if a += 20" - parses "my_def def foo\nloop do\nend\nend" parses "my_def def foo\nloop do\nend\nend" - parses "begin; 1; rescue ::Foo | ::Bar; 2; end" parses "begin; 1; rescue ::Foo | ::Bar; 2; end" - parses "lib LibC\nalias Foo = Bar\nend" parses "lib LibC\nalias Foo = Bar\nend" - parses "(bar do\nend)" parses "(bar do\nend)" - parses "def self.!~(); end;" parses "def self.!~(); end;" - parses "1 + 2" parses "1 + 2" - parses "Foo(\"foo bar\": U)" parses "Foo(\"foo bar\": U)" - parses "->Foo.&**(Int32)" parses "->Foo.&**(Int32)" - parses "foo = 1; foo(-1)" parses "foo = 1; foo(-1)" - parses "def foo(@class); end" parses "def foo(@class); end" - parses "enum Foo; {{1}}; end" parses "enum Foo; {{1}}; end" - parses "ensure : Int32" parses "ensure : Int32" - parses "/(fo\#{\"bar\"}\#{1}o)/" parses "/(fo\#{\"bar\"}\#{1}o)/" - parses "def foo(x @@module); end" parses "def foo(x @@module); end" - parses "foo(0, n <= 2)" parses "foo(0, n <= 2)" - says syntax error on "+next" says syntax error on "+next" - parses "foo.^ 1, 2" parses "foo.^ 1, 2" - says syntax error on "def foo(foo break); end" says syntax error on "def foo(foo break); end" - parses "def foo(a, b = a); end" parses "def foo(a, b = a); end" - parses "Foo({x: X})" parses "Foo({x: X})" - parses ":<<" parses ":<<" - says syntax error on "foo { |private| }" says syntax error on "foo { |private| }" - says syntax error on "foo { |(until)| }" says syntax error on "foo { |(until)| }" - says syntax error on "foo { |struct| }" says syntax error on "foo { |struct| }" - parses "Foo(X, instance_alignof(Int32))" parses "Foo(X, instance_alignof(Int32))" - parses "foo(a: n &* 2)" parses "foo(a: n &* 2)" - parses "begin; 1; rescue; 2; end" parses "begin; 1; rescue; 2; end" - parses "a = 1; b = 2; c = 3; a-b-c" parses "a = 1; b = 2; c = 3; a-b-c" - parses "instance_alignof(X)" parses "instance_alignof(X)" - parses "{% begin %}%q{ %s }{% end %}" parses "{% begin %}%q{ %s }{% end %}" - parses "case \nwhen 1\n2\nend" parses "case \nwhen 1\n2\nend" - parses "lib LibC; struct Foo; x : Int**; end end" parses "lib LibC; struct Foo; x : Int**; end end" - parses "{% begin %}%w| %s |{% end %}" parses "{% begin %}%w| %s |{% end %}" - says syntax error on "macro Foo;end" says syntax error on "macro Foo;end" - parses "1 - 2" parses "1 - 2" - parses "x([] of Foo, Bar.new)" parses "x([] of Foo, Bar.new)" - says syntax error on "foo { |def| }" says syntax error on "foo { |def| }" - parses "foo.% 1, 2" parses "foo.% 1, 2" - parses "foo.<= do end" parses "foo.<= do end" - parses "def foo(var : Int | Double); end" parses "def foo(var : Int | Double); end" - parses "begin; 1; 2; 3; end;" parses "begin; 1; 2; 3; end;" - parses "macro foo=;end" parses "macro foo=;end" - says syntax error on "next ^ 1" says syntax error on "next ^ 1" - says syntax error on "foo :: Foo" says syntax error on "foo :: Foo" - parses "foo.> do end" parses "foo.> do end" - parses "foo(n !~ 2)" parses "foo(n !~ 2)" - says syntax error on "macro foo.bar;end" says syntax error on "macro foo.bar;end" - parses "->Foo.-(Int32)" parses "->Foo.-(Int32)" - parses "def foo(x, *args, y = 2, w, z = 3); 1; end" parses "def foo(x, *args, y = 2, w, z = 3); 1; end" - says syntax error on "case return; when 1; end; end" says syntax error on "case return; when 1; end; end" - says syntax error on "def foo(foo typeof); end" says syntax error on "def foo(foo typeof); end" - parses "a = 1; a/b" parses "a = 1; a/b" - says syntax error on "def foo(false); end" says syntax error on "def foo(false); end" - parses "1 =~ 2" parses "1 =~ 2" - parses "`foo`" parses "`foo`" - parses "def <(); end;" parses "def <(); end;" - parses "1 unless 3" parses "1 unless 3" - parses "b.c &&= 1" parses "b.c &&= 1" - parses "*a.foo, a.bar = 1" parses "*a.foo, a.bar = 1" - parses "[] of {String, ->}" parses "[] of {String, ->}" - parses "def foo(@@struct); end" parses "def foo(@@struct); end" - parses "<<-FOO\n \t1\n \tFOO" parses "<<-FOO\n \t1\n \tFOO" - says syntax error on "def foo(foo include); end" says syntax error on "def foo(foo include); end" - parses "next if true" parses "next if true" - parses "def foo(x @@select); end" parses "def foo(x @@select); end" - parses "foo(&.!)" parses "foo(&.!)" - parses "def ===(); end;" parses "def ===(); end;" - parses "macro foo(@[Foo] **args);end" parses "macro foo(@[Foo] **args);end" - parses "macro foo;bar{% for x in y %}body{% end %}baz;end" parses "macro foo;bar{% for x in y %}body{% end %}baz;end" - parses "{1 =>\n2, 3 =>\n4}" parses "{1 =>\n2, 3 =>\n4}" - says syntax error on "case 1; when break; end; end" says syntax error on "case 1; when break; end; end" - says syntax error on "next &* 1" says syntax error on "next &* 1" - parses "def foo(x : U) forall T, U; end" parses "def foo(x : U) forall T, U; end" - says syntax error on "a = 1; a += next" says syntax error on "a = 1; a += next" - parses "def foo(self foo); end" parses "def foo(self foo); end" - says syntax error on "{% unless 1; 2; elsif 3; 4; end %}" says syntax error on "{% unless 1; 2; elsif 3; 4; end %}" - parses "var.@foo" parses "var.@foo" - parses "foo 1;" parses "foo 1;" - parses "foo.&(1, 2) { 3 }" parses "foo.&(1, 2) { 3 }" - says syntax error on "case 1\nin .nil?; 2" says syntax error on "case 1\nin .nil?; 2" - parses "foo(z: 0, a: n ** 2)" parses "foo(z: 0, a: n ** 2)" - parses "def []; end" parses "def []; end" - parses "macro foo(x = __LINE__);end" parses "macro foo(x = __LINE__);end" - parses "a = 1; a &-= 1" parses "a = 1; a &-= 1" - says syntax error on "FOO, BAR = 1, 2" says syntax error on "FOO, BAR = 1, 2" - parses "{{a = 1 if 2}}" parses "{{a = 1 if 2}}" - parses "[\n1\n]" parses "[\n1\n]" - parses "a ? 1\n : b ? 2\n : c ? 3\n : 0" parses "a ? 1\n : b ? 2\n : c ? 3\n : 0" - parses "def !~; end;" parses "def !~; end;" - says syntax error on "foo { |true| }" says syntax error on "foo { |true| }" - parses "{% begin %}%i< %s >{% end %}" parses "{% begin %}%i< %s >{% end %}" - parses "def self.-(); end;" parses "def self.-(); end;" - parses "/foo/imximx" parses "/foo/imximx" - parses "def ==; end;" parses "def ==; end;" - parses "foo = 1; ->foo.|(Int32)" parses "foo = 1; ->foo.|(Int32)" - parses "def foo(x @@typeof); end" parses "def foo(x @@typeof); end" - parses "Int[]" parses "Int[]" - says syntax error on "yield next" says syntax error on "yield next" - parses "a.b -=\n1" parses "a.b -=\n1" - parses "def foo(@@def); end" parses "def foo(@@def); end" - parses "foo.Bar" parses "foo.Bar" - parses "def foo(@require); end" parses "def foo(@require); end" - parses "f.x &*= 2" parses "f.x &*= 2" - parses "def foo(x @if); end" parses "def foo(x @if); end" - parses ":\"foo\"" parses ":\"foo\"" - says syntax error on "foo(1, 2, 3 end" says syntax error on "foo(1, 2, 3 end" - parses "def ==(); end;" parses "def ==(); end;" - parses "a = 1; a &+=\n1" parses "a = 1; a &+=\n1" - says syntax error on "foo { |(nil)| }" says syntax error on "foo { |(nil)| }" - parses "a.b &+=\n1" parses "a.b &+=\n1" - says syntax error on "class Foo(*T, *U); end" says syntax error on "class Foo(*T, *U); end" - parses "__DIR__" parses "__DIR__" - parses "{A::B}" parses "{A::B}" - parses "foo -1.0, -2.0" parses "foo -1.0, -2.0" - parses "1 rescue 2 if 3" parses "1 rescue 2 if 3" - says syntax error on "case 1; when next; end; end" says syntax error on "case 1; when next; end; end" - says syntax error on "macro foo&&;end" says syntax error on "macro foo&&;end" - parses "nil?( )" parses "nil?( )" - says syntax error on "next * 1" says syntax error on "next * 1" - says syntax error on "next & 1" says syntax error on "next & 1" - parses "enum : Int32" parses "enum : Int32" - parses "begin\n1\nend\nif true; end" parses "begin\n1\nend\nif true; end" - parses "{..2}" parses "{..2}" - parses "a; if / /\n/ /\nelsif / /\n/ /\nend" parses "a; if / /\n/ /\nelsif / /\n/ /\nend" - parses "...2" parses "...2" - parses "a.b &*=\n1" parses "a.b &*=\n1" - parses "require \"foo\"; [1]" parses "require \"foo\"; [1]" - parses "foo[*baz] = 1" parses "foo[*baz] = 1" - says syntax error on "1 2" says syntax error on "1 2" - parses "case;when true;1;end" parses "case;when true;1;end" - parses "def foo(@instance_sizeof); end" parses "def foo(@instance_sizeof); end" - parses "macro foo;unless var;true;end;end" parses "macro foo;unless var;true;end;end" - parses "break 1 if true" parses "break 1 if true" - parses "foo%w" parses "foo%w" - parses "def foo(x @@sizeof); end" parses "def foo(x @@sizeof); end" - says syntax error on "def foo(foo alias); end" says syntax error on "def foo(foo alias); end" - parses "self / number" parses "self / number" - parses "def foo(false foo); end" parses "def foo(false foo); end" - parses "foo(1, **bar, &block)" parses "foo(1, **bar, &block)" - parses "lib LibC\n$errno = Foo : Int32\nend" parses "lib LibC\n$errno = Foo : Int32\nend" - says syntax error on "a() += 1" says syntax error on "a() += 1" - parses "property while : Int32" parses "property while : Int32" - parses "while true; end\nif true; end" parses "while true; end\nif true; end" - parses ":==" parses ":==" - parses "..2" parses "..2" - parses "foo %r" parses "foo %r" - parses "include Foo\nif true; end" parses "include Foo\nif true; end" - parses "a { |x| x } / b" parses "a { |x| x } / b" - parses "def self./; end;" parses "def self./; end;" - parses "def foo(@var); end" parses "def foo(@var); end" - says syntax error on "def foo(foo abstract); end" says syntax error on "def foo(foo abstract); end" - parses "lib LibC; struct Foo; {{ 1 }}; end; end" parses "lib LibC; struct Foo; {{ 1 }}; end; end" - says syntax error on "foo { |(include)| }" says syntax error on "foo { |(include)| }" - parses "<<-HERE\r\n One\r\n Zero\r\n HERE\r\n" parses "<<-HERE\r\n One\r\n Zero\r\n HERE\r\n" - parses "def foo(@@with); end" parses "def foo(@@with); end" - says syntax error on "def !; end" says syntax error on "def !; end" - parses "true : Int32" parses "true : Int32" - parses "1 % 2" parses "1 % 2" - parses "foo.===(1, 2)" parses "foo.===(1, 2)" - parses "foo(1)" parses "foo(1)" - parses "macro foo\n <<-FOO\n %foo\n FOO\nend" parses "macro foo\n <<-FOO\n %foo\n FOO\nend" - says syntax error on "return % 1" says syntax error on "return % 1" - says syntax error on "def foo(\"bar \#{1} qux\" y); y; end" says syntax error on "def foo(\"bar \#{1} qux\" y); y; end" - parses "foo 1\n" parses "foo 1\n" - single splats inside container literals - says syntax error on "case {*1}\nwhen {2}; 3; end" says syntax error on "case {*1}\nwhen {2}; 3; end" - parses "Set {*{1} * 2}" parses "Set {*{1} * 2}" - parses "[*[*[1]], *[2]]" parses "[*[*[1]], *[2]]" - parses "{1, *2}" parses "{1, *2}" - parses "case 1\nwhen {*2}; 3; end" parses "case 1\nwhen {*2}; 3; end" - parses "[*1, 2]" parses "[*1, 2]" - parses "x = {*1}" parses "x = {*1}" - says syntax error on "{1 => 2, *3}" says syntax error on "{1 => 2, *3}" - parses "{*1, 2}" parses "{*1, 2}" - says syntax error on "{*1 => 2}" says syntax error on "{*1 => 2}" - parses "{*1 * 2}" parses "{*1 * 2}" - parses "{1, *2, 3, *4, 5}" parses "{1, *2, 3, *4, 5}" - parses "[1, *2, 3, *4, 5]" parses "[1, *2, 3, *4, 5]" - parses "Set {*1, 2, *3}" parses "Set {*1, 2, *3}" - parses "{*1, *2}" parses "{*1, *2}" - parses "[*1, *2]" parses "[*1, *2]" - says syntax error on "{a: 1, *2}" says syntax error on "{a: 1, *2}" - parses "[*1]" parses "[*1]" - says syntax error on "case {1}\nwhen {*2}; 3; end" says syntax error on "case {1}\nwhen {*2}; 3; end" - says syntax error on "{*a: 1}" says syntax error on "{*a: 1}" - parses "{*1}" parses "{*1}" - parses "[1, *2]" parses "[1, *2]" - parses "[*1 ** 2]" parses "[*1 ** 2]" - says syntax error on "{a[0]: 1}" says syntax error on "{a[0]: 1}" - says syntax error on "macro !;end" says syntax error on "macro !;end" - parses "n > 2" parses "n > 2" - parses "def self.&; end;" parses "def self.&; end;" - parses "property elsif : Int32" parses "property elsif : Int32" - parses "foo./(1, 2)" parses "foo./(1, 2)" - says syntax error on "a.[]() = 1" says syntax error on "a.[]() = 1" - parses "def foo; a = 1; x { a }; end" parses "def foo; a = 1; x { a }; end" - parses "def foo(x @@unless); end" parses "def foo(x @@unless); end" - parses "foo &.block(1)" parses "foo &.block(1)" - parses "def foo(@enum); end" parses "def foo(@enum); end" - parses "property module : Int32" parses "property module : Int32" - parses "a = 1; a &*= 1" parses "a = 1; a &*= 1" - parses "def foo(@return); end" parses "def foo(@return); end" - parses "x = 1; foo x do\nend" parses "x = 1; foo x do\nend" - parses "foo.bar(1, 2) { 3 }" parses "foo.bar(1, 2) { 3 }" - parses "foo(0, n + 2)" parses "foo(0, n + 2)" - parses "def foo(with foo); end" parses "def foo(with foo); end" - says syntax error on "1 unless return" says syntax error on "1 unless return" - parses "break 1, 2" parses "break 1, 2" - says syntax error on "next > 1" says syntax error on "next > 1" - parses "puts %w{one two}" parses "puts %w{one two}" - parses "foo.>= 1, 2" parses "foo.>= 1, 2" - parses "foo.!~(1, 2) { 3 }" parses "foo.!~(1, 2) { 3 }" - parses "def self.[]?; end" parses "def self.[]?; end" - parses "1.[]=(2, 3)" parses "1.[]=(2, 3)" - parses "1..\n2.." parses "1..\n2.." - parses "1" parses "1" - parses "foo[0] = 1" parses "foo[0] = 1" - parses "def %(); end" parses "def %(); end" - parses "def self.foo()\n1\nend" parses "def self.foo()\n1\nend" - says syntax error on "foo.||" says syntax error on "foo.||" - says syntax error on "foo { |(x, x)| }" says syntax error on "foo { |(x, x)| }" - parses "macro =~;end" parses "macro =~;end" - parses "lib Foo::Bar\nend" parses "lib Foo::Bar\nend" - parses "foo +1.0" parses "foo +1.0" - says syntax error on "Set {1, 2, 3} of Int32" says syntax error on "Set {1, 2, 3} of Int32" - parses "def foo(@@abstract); end" parses "def foo(@@abstract); end" - parses "macro foo\n <<-FOO, <<-BAR + \"\"\n FOO\n BAR\nend" parses "macro foo\n <<-FOO, <<-BAR + \"\"\n FOO\n BAR\nend" - parses "macro foo;%var if true;end" parses "macro foo;%var if true;end" - parses "qux \"foo\#{bar do end}baz\"" parses "qux \"foo\#{bar do end}baz\"" - parses "{{ foo.nil? }}" parses "{{ foo.nil? }}" - parses "enum Foo; A = 1; B; end" parses "enum Foo; A = 1; B; end" - parses "def foo; with a yield; end" parses "def foo; with a yield; end" - parses "1 - 2" parses "1 - 2" - parses "return : Int32" parses "return : Int32" - parses "typeof(\n 1\n)" parses "typeof(\n 1\n)" - parses "- 1" parses "- 1" - parses "f.x &+= 2" parses "f.x &+= 2" - says syntax error on "macro foo; {% foo = 1 }; end" says syntax error on "macro foo; {% foo = 1 }; end" - says syntax error on "macro foo x\n 1 + 2; end" says syntax error on "macro foo x\n 1 + 2; end" - says syntax error on "def foo(x x); 1; end" says syntax error on "def foo(x x); 1; end" - parses "foo(0, n === 2)" parses "foo(0, n === 2)" - parses "foo(n == 2)" parses "foo(n == 2)" - parses "f.x /= 2" parses "f.x /= 2" - parses "def Foo::Bar.foo\n1\nend" parses "def Foo::Bar.foo\n1\nend" - parses "def foo; yield 1; end" parses "def foo; yield 1; end" - says syntax error on " {1 => end" says syntax error on " {1 => end" - parses "n &+ 2" parses "n &+ 2" - parses "@[Foo(\n1, foo: 2\n)]" parses "@[Foo(\n1, foo: 2\n)]" - parses "foo do; 1; end" parses "foo do; 1; end" - parses "def ===(*args, **opts); end" parses "def ===(*args, **opts); end" - parses "foo = 1; ->foo.%(Int32)" parses "foo = 1; ->foo.%(Int32)" - parses "break : Int32" parses "break : Int32" - parses "foo(a: n ** 2)" parses "foo(a: n ** 2)" - parses "foo.!~ do end" parses "foo.!~ do end" - parses "{\"\".id}" parses "{\"\".id}" - parses "def foo; a = 1; with a yield a; end" parses "def foo; a = 1; with a yield a; end" - says syntax error on "def foo(foo enum); end" says syntax error on "def foo(foo enum); end" - parses "foo(0, n > 2)" parses "foo(0, n > 2)" - parses ":&**" parses ":&**" - parses "{% if x %}body{% end %}" parses "{% if x %}body{% end %}" - says syntax error on "select\nwhen 1\n2\nend" says syntax error on "select\nwhen 1\n2\nend" - parses "def foo(@[Foo] outer inner); end" parses "def foo(@[Foo] outer inner); end" - parses "pointerof(\n foo\n)" parses "pointerof(\n foo\n)" - parses "/foo/i" parses "/foo/i" - parses ":+" parses ":+" - parses "def /(); end;" parses "def /(); end;" - parses "def []=(other, file = 1); end" parses "def []=(other, file = 1); end" - parses "Foo(X, alignof(Int32))" parses "Foo(X, alignof(Int32))" - parses "foo(1, **bar)" parses "foo(1, **bar)" - parses "foo = 1; ->foo.===(Int32)" parses "foo = 1; ->foo.===(Int32)" - parses "{% begin %}%x{ %s }{% end %}" parses "{% begin %}%x{ %s }{% end %}" - parses "alignof(\n Int32\n)" parses "alignof(\n Int32\n)" - parses "-> do; 1; rescue; 2; end" parses "-> do; 1; rescue; 2; end" - parses "*_ = 1, 2" parses "*_ = 1, 2" - says syntax error on "x--" says syntax error on "x--" - parses "with : Int32" parses "with : Int32" - parses "def foo(asm foo); end" parses "def foo(asm foo); end" - parses "a = uninitialized Foo; a" parses "a = uninitialized Foo; a" - parses "next {1 => 2}" parses "next {1 => 2}" - parses "1.foo do; 1; end" parses "1.foo do; 1; end" - says syntax error on "a, b, *c, d = 1, 2" says syntax error on "a, b, *c, d = 1, 2" - parses "def foo(x @instance_sizeof); end" parses "def foo(x @instance_sizeof); end" - parses "foo(&.is_a?(T))" parses "foo(&.is_a?(T))" - parses "lib LibC\nfun getchar(...)\nend" parses "lib LibC\nfun getchar(...)\nend" - parses "@@a = uninitialized Foo" parses "@@a = uninitialized Foo" - parses "def foo(@include); end" parses "def foo(@include); end" - parses "foo.is_a?(Const)" parses "foo.is_a?(Const)" - parses "{% begin %}%w{ %s }{% end %}" parses "{% begin %}%w{ %s }{% end %}" - parses "macro foo; 1 + 2 {{foo}}\\ 3 + 4; end" parses "macro foo; 1 + 2 {{foo}}\\ 3 + 4; end" - parses "foo { |(_, c)| c }" parses "foo { |(_, c)| c }" - parses "&+ 1" parses "&+ 1" - parses "->Foo.&+(Int32)" parses "->Foo.&+(Int32)" - parses "foo(z: 0, a: n !~ 2)" parses "foo(z: 0, a: n !~ 2)" - parses "foo(0, n &+ 2)" parses "foo(0, n &+ 2)" - parses "case\nend" parses "case\nend" - says syntax error on "until return; end" says syntax error on "until return; end" - says syntax error on "asm(\"nop\" ::: \"\#{foo}\")" says syntax error on "asm(\"nop\" ::: \"\#{foo}\")" - parses "+1.0_f32" parses "+1.0_f32" - parses "case when 1\n2\nend" parses "case when 1\n2\nend" - says syntax error on "<<-HERE\n One\n \#{1}\n HERE" says syntax error on "<<-HERE\n One\n \#{1}\n HERE" - parses "return 1.bar do\nend" parses "return 1.bar do\nend" - sets correct location of global path in class def sets correct location of global path in class def - parses "def foo(x @return); end" parses "def foo(x @return); end" - says syntax error on "*a, b, c, d = 1, 2" says syntax error on "*a, b, c, d = 1, 2" - parses "1.as?(\n Int32\n)" parses "1.as?(\n Int32\n)" - parses ":foo" parses ":foo" - parses "foo[*baz]" parses "foo[*baz]" - parses "macro foo;{% verbatim do %}1{% foo %}2{% end %};end" parses "macro foo;{% verbatim do %}1{% foo %}2{% end %};end" - says syntax error on "foo { |include| }" says syntax error on "foo { |include| }" - says syntax error on "a.b, c.d() = 1" says syntax error on "a.b, c.d() = 1" - parses "Foo(\"foo\": U, \"bar\": V)" parses "Foo(\"foo\": U, \"bar\": V)" - parses "foo %w()" parses "foo %w()" - parses "1 ? 2 : 3" parses "1 ? 2 : 3" - parses "1.0" parses "1.0" - parses "a = 1; a //= 1" parses "a = 1; a //= 1" - parses "foo &.baz.qux do\nend" parses "foo &.baz.qux do\nend" - parses "{a: 1}" parses "{a: 1}" - says syntax error on "macro foo;{%end};end" says syntax error on "macro foo;{%end};end" - says syntax error on "foo(foo(&.block)" says syntax error on "foo(foo(&.block)" - says syntax error on "return .. 1" says syntax error on "return .. 1" - parses "1 | 2" parses "1 | 2" - parses "foo = 1; foo +1" parses "foo = 1; foo +1" - says syntax error on "foo { |(select)| }" says syntax error on "foo { |(select)| }" - parses "foo(out @x); @x" parses "foo(out @x); @x" - parses "def foo(x @@next); end" parses "def foo(x @@next); end" - parses "->(x) { x }" parses "->(x) { x }" - parses "foo(0, n ** 2)" parses "foo(0, n ** 2)" - parses "Foo(X, sizeof(Int32))" parses "Foo(X, sizeof(Int32))" - parses "foo.**(1, 2)" parses "foo.**(1, 2)" - parses "def foo(x @nil); end" parses "def foo(x @nil); end" - parses "select\nwhen foo\n2\nwhen bar\n4\nend" parses "select\nwhen foo\n2\nwhen bar\n4\nend" - parses "f.x += 2" parses "f.x += 2" - parses "@[Foo]" parses "@[Foo]" - parses "case {1}\nin {.bar?}; 2; end" parses "case {1}\nin {.bar?}; 2; end" - parses "def foo(bar = 1\n); 2; end" parses "def foo(bar = 1\n); 2; end" - says syntax error on "break <= 1" says syntax error on "break <= 1" - says syntax error on "def foo(nil); end" says syntax error on "def foo(nil); end" - parses "def foo(@@in); end" parses "def foo(@@in); end" - parses "until : Int32" parses "until : Int32" - parses "def foo(@[Foo] &@block); end" parses "def foo(@[Foo] &@block); end" - parses "def foo(a, &block : Foo); end" parses "def foo(a, &block : Foo); end" - parses ":>" parses ":>" - parses "a = 1; a &=\n1" parses "a = 1; a &=\n1" - parses "foo(a: n | 2)" parses "foo(a: n | 2)" - parses "@[Foo(\"hello\")]" parses "@[Foo(\"hello\")]" - parses "def foo; x { |a, *b| b }; end" parses "def foo; x { |a, *b| b }; end" - parses "_ = 1" parses "_ = 1" - parses "{1 => 2, 3 => 4}" parses "{1 => 2, 3 => 4}" - says syntax error on "{\"\": 1}" says syntax error on "{\"\": 1}" - parses "def foo(@@private); end" parses "def foo(@@private); end" - parses "foo { |a| 1 }" parses "foo { |a| 1 }" - parses "macro ^;end" parses "macro ^;end" - parses "->foo=" parses "->foo=" - parses "1.nil?(\n)" parses "1.nil?(\n)" - parses "begin; 1; end;" parses "begin; 1; end;" - says syntax error on "next + 1" says syntax error on "next + 1" - parses "break;" parses "break;" - parses "foo !false" parses "foo !false" - parses "module Foo(T); end" parses "module Foo(T); end" - says syntax error on "class Foo(T U)" says syntax error on "class Foo(T U)" - parses "property with : Int32" parses "property with : Int32" - parses "def foo(var : self); end" parses "def foo(var : self); end" - parses "is_a?(Const)" parses "is_a?(Const)" - parses "def foo(var : Int?); end" parses "def foo(var : Int?); end" - says syntax error on "foo { |(begin)| }" says syntax error on "foo { |(begin)| }" - parses "foo(n ^ 2)" parses "foo(n ^ 2)" - parses "lib LibC; {% if 1 %}2{% end %}; end" parses "lib LibC; {% if 1 %}2{% end %}; end" - parses "def foo(require foo); end" parses "def foo(require foo); end" - parses "def foo(@until); end" parses "def foo(@until); end" - parses "a, b = 1" parses "a, b = 1" - parses "a = 1; a[2] &&= 3" parses "a = 1; a[2] &&= 3" - parses "2 * 3 + 4 * 5" parses "2 * 3 + 4 * 5" - parses "foo = 1; ->foo.foo" parses "foo = 1; ->foo.foo" - parses "a.foo &block" parses "a.foo &block" - parses "return 1" parses "return 1" - says syntax error on "unless break; end" says syntax error on "unless break; end" - parses "foo(1, a: 1, b: 2)" parses "foo(1, a: 1, b: 2)" - says syntax error on "foo(next)" says syntax error on "foo(next)" - parses "1.as? Bar" parses "1.as? Bar" - parses "macro **;end" parses "macro **;end" - says syntax error on "{1, ->{ |_| x } }" says syntax error on "{1, ->{ |_| x } }" - parses "foo(z: 0, a: n &** 2)" parses "foo(z: 0, a: n &** 2)" - parses "def [](x); end" parses "def [](x); end" - parses "foo rescue 2" parses "foo rescue 2" - parses "a = 1; a |= 1" parses "a = 1; a |= 1" - parses "foo &.%(1)" parses "foo &.%(1)" - says syntax error on "def nil?; end" says syntax error on "def nil?; end" - parses "def <; end;" parses "def <; end;" - parses "extend Foo" parses "extend Foo" - says syntax error on "a.b(), c.d = 1" says syntax error on "a.b(), c.d = 1" - says syntax error on "A = begin; 1; rescue; 1; else; B = 1; end" says syntax error on "A = begin; 1; rescue; 1; else; B = 1; end" - says syntax error on "break.foo" says syntax error on "break.foo" - parses "->(x : Int32) { }" parses "->(x : Int32) { }" - says syntax error on "case 1\nin _;" says syntax error on "case 1\nin _;" - parses "def foo(@false); end" parses "def foo(@false); end" - parses "a.foo(&block)" parses "a.foo(&block)" - says syntax error on "macro responds_to?; end" says syntax error on "macro responds_to?; end" - parses "as?(Bar)" parses "as?(Bar)" - parses "{\"foo\": 1, \"bar\": 2}" parses "{\"foo\": 1, \"bar\": 2}" - parses "def foo(x @@include); end" parses "def foo(x @@include); end" - parses "property def : Int32" parses "property def : Int32" - parses "-1" parses "-1" - parses "puts ~1" parses "puts ~1" - parses "<<-HERE1; <<-HERE2\nHERE1\nhere2\nHERE2" parses "<<-HERE1; <<-HERE2\nHERE1\nhere2\nHERE2" - says syntax error on "lib Foo; fun foo(x : Int32, x : Int64); end" says syntax error on "lib Foo; fun foo(x : Int32, x : Int64); end" - parses "foo { |(a, *b, c)| }" parses "foo { |(a, *b, c)| }" - parses "if foo; 1; end" parses "if foo; 1; end" - parses "@a : Foo | Int32" parses "@a : Foo | Int32" - parses "lib LibC\nfun getch = \"get.char\"(x : Int32)\nend" parses "lib LibC\nfun getch = \"get.char\"(x : Int32)\nend" - says syntax error on "return < 1" says syntax error on "return < 1" - parses "1 rescue 2" parses "1 rescue 2" - says syntax error on "break[0]" says syntax error on "break[0]" - parses "def foo(@macro); end" parses "def foo(@macro); end" - parses "\"hello \"\\\n\"world\"" parses "\"hello \"\\\n\"world\"" - parses "@@a : Foo" parses "@@a : Foo" - parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) : \"eax\", \"ebx\" : \"volatile\", \"alignstack\", \"intel\")" parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) : \"eax\", \"ebx\" : \"volatile\", \"alignstack\", \"intel\")" - parses "%Q{hello \\n world}" parses "%Q{hello \\n world}" - parses "foo(0, n !~ 2)" parses "foo(0, n !~ 2)" - parses "def foo; a; end" parses "def foo; a; end" - says syntax error on "return << 1" says syntax error on "return << 1" - parses "def foo(x)\n x\nend; foo = 1; b = 2; foo -b" parses "def foo(x)\n x\nend; foo = 1; b = 2; foo -b" - sets correct location of named tuple type sets correct location of named tuple type - parses "a.b *=\n1" parses "a.b *=\n1" - parses "case;end" parses "case;end" - parses "foo &.block=(0)" parses "foo &.block=(0)" - parses "x = 2; foo do bar x end" parses "x = 2; foo do bar x end" - parses "next *{1, 2}" parses "next *{1, 2}" - parses "foo(n === 2)" parses "foo(n === 2)" - parses "x = 1; foo.bar x do\nend" parses "x = 1; foo.bar x do\nend" - parses "def foo(unless foo); end" parses "def foo(unless foo); end" - parses "macro &*;end" parses "macro &*;end" - says syntax error on "+break" says syntax error on "+break" - parses "<<-FOO\n \t 1\n \t FOO" parses "<<-FOO\n \t 1\n \t FOO" - parses "def <=(*args, **opts); end" parses "def <=(*args, **opts); end" - parses "foo\n .bar" parses "foo\n .bar" - says syntax error on "macro foo" says syntax error on "macro foo" - parses "macro foo(a, @[Foo] var);end" parses "macro foo(a, @[Foo] var);end" - says syntax error on "return ... 1" says syntax error on "return ... 1" - parses "def foo(class foo); end" parses "def foo(class foo); end" - parses "a = 1; a &+= 1" parses "a = 1; a &+= 1" - says syntax error on "{\"foo\" => 1, \"bar\": 2}" says syntax error on "{\"foo\" => 1, \"bar\": 2}" - parses "def foo(a, &block); end" parses "def foo(a, &block); end" - says syntax error on "yield return" says syntax error on "yield return" - parses "\n\n__LINE__" parses "\n\n__LINE__" - parses "foo (1 + 2), 3" parses "foo (1 + 2), 3" - parses "{/ /, / /}" parses "{/ /, / /}" - says syntax error on "return do\nend" says syntax error on "return do\nend" - parses "1.as?(Bar)" parses "1.as?(Bar)" - parses "a = 1; a -= 1" parses "a = 1; a -= 1" - parses "{% begin %}%{ %s }{% end %}" parses "{% begin %}%{ %s }{% end %}" - parses "enum Foo; @@foo = 1\n A \n end" parses "enum Foo; @@foo = 1\n A \n end" - says syntax error on "1 foo" says syntax error on "1 foo" - says syntax error on "def foo(foo if); end" says syntax error on "def foo(foo if); end" - parses "foo x do\nend" parses "foo x do\nend" - parses "{% begin %}%< %s >{% end %}" parses "{% begin %}%< %s >{% end %}" - parses "foo(a: n - 2)" parses "foo(a: n - 2)" - parses "def foo(a, &block : -> Double); end" parses "def foo(a, &block : -> Double); end" - parses "1 !~ 2" parses "1 !~ 2" - says syntax error on "macro foo(**x, y)" says syntax error on "macro foo(**x, y)" - parses "f.x *= 2" parses "f.x *= 2" - parses ":\"\\u{61}\"" parses ":\"\\u{61}\"" - says syntax error on "break == 1" says syntax error on "break == 1" - parses "foo.< 1, 2" parses "foo.< 1, 2" - parses "1 !~ 2" parses "1 !~ 2" - parses "def foo(@[Foo] @var); end" parses "def foo(@[Foo] @var); end" - parses "def %(); end;" parses "def %(); end;" - parses "def foo(a, &block : Int, self -> Double); end" parses "def foo(a, &block : Int, self -> Double); end" - parses "-1.0_f32" parses "-1.0_f32" - parses "<<-HERE\n \#{1} \#{2}\n HERE" parses "<<-HERE\n \#{1} \#{2}\n HERE" - says syntax error on "x[1:-2]" says syntax error on "x[1:-2]" - parses "property protected : Int32" parses "property protected : Int32" - parses "foo(0, n &** 2)" parses "foo(0, n &** 2)" - parses "def foo(@fun); end" parses "def foo(@fun); end" - parses "foo.+(1, 2) { 3 }" parses "foo.+(1, 2) { 3 }" - parses "[1, 2]" parses "[1, 2]" - says syntax error on "next ... 1" says syntax error on "next ... 1" - says syntax error on "break &* 1" says syntax error on "break &* 1" - parses ":\"\\a\\b\\n\\r\\t\\v\\f\\e\"" parses ":\"\\a\\b\\n\\r\\t\\v\\f\\e\"" - parses "->@foo.foo?" parses "->@foo.foo?" - parses "1 == 2" parses "1 == 2" - parses "macro foo(@[Foo] var);end" parses "macro foo(@[Foo] var);end" - parses "select\nwhen foo\n2\nelse\n3\nend" parses "select\nwhen foo\n2\nelse\n3\nend" - parses "def foo(x @@out); end" parses "def foo(x @@out); end" - says syntax error on "A = begin; 1; ensure; B = 1; end" says syntax error on "A = begin; 1; ensure; B = 1; end" - parses "1 || 2" parses "1 || 2" - sets correct location of parameter in proc literal sets correct location of parameter in proc literal - parses "def <(); end" parses "def <(); end" - says syntax error on "def foo(x: Int32); end" says syntax error on "def foo(x: Int32); end" - parses "def foo(@@select); end" parses "def foo(@@select); end" - parses "Foo{\"x\" => \"y\"}" parses "Foo{\"x\" => \"y\"}" - parses "foo(a: n ^ 2)" parses "foo(a: n ^ 2)" - says syntax error on "1 ... break" says syntax error on "1 ... break" - says syntax error on "def foo(foo while); end" says syntax error on "def foo(foo while); end" - says syntax error on "*a if true" says syntax error on "*a if true" - parses "def []?; end" parses "def []?; end" - parses "unless foo; 1; end" parses "unless foo; 1; end" - parses "a.b <<=\n1" parses "a.b <<=\n1" - parses "foo \"foo bar\": 1, \"baz\": 2" parses "foo \"foo bar\": 1, \"baz\": 2" - sets correct location of protected macro in enum sets correct location of protected macro in enum - says syntax error on "def foo(foo with); end" says syntax error on "def foo(foo with); end" - parses "case 1\nwhen 1\n2\nend\nif a\nend" parses "case 1\nwhen 1\n2\nend\nif a\nend" - parses "case a\nwhen b\n1 / 2\nelse\n1 / 2\nend" parses "case a\nwhen b\n1 / 2\nelse\n1 / 2\nend" - parses "foo(//)" parses "foo(//)" - parses "foo(bar do\nend)" parses "foo(bar do\nend)" - parses "case 1\nin Foo(Int32); 2; end" parses "case 1\nin Foo(Int32); 2; end" - parses "macro foo;var unless true;end" parses "macro foo;var unless true;end" - parses "foo(n % 2)" parses "foo(n % 2)" - parses "{\n1\n}" parses "{\n1\n}" - parses "->() : Int32 { }" parses "->() : Int32 { }" - parses "return *1, 2" parses "return *1, 2" - says syntax error on "foo(**bar, out x)" says syntax error on "foo(**bar, out x)" - parses "1 ^ 2" parses "1 ^ 2" - parses "foo &.@bar" parses "foo &.@bar" - parses "def foo(a, @[Foo] var); end" parses "def foo(a, @[Foo] var); end" - says syntax error on "A = B = 1" says syntax error on "A = B = 1" - parses "%q{hello \#{foo} world}" parses "%q{hello \#{foo} world}" - parses "1.~" parses "1.~" - parses "def Foo.foo\n1\nend" parses "def Foo.foo\n1\nend" - parses "x, y, z = <<-FOO, <<-BAR, <<-BAZ\nhello\nFOO\nworld\nBAR\n!\nBAZ" parses "x, y, z = <<-FOO, <<-BAR, <<-BAZ\nhello\nFOO\nworld\nBAR\n!\nBAZ" - parses "abstract def foo" parses "abstract def foo" - says syntax error on "Foo(T, U V)" says syntax error on "Foo(T, U V)" - parses "foo(n < 2)" parses "foo(n < 2)" - parses "foo.+ do end" parses "foo.+ do end" - parses "{% unless 1; 2; end %}" parses "{% unless 1; 2; end %}" - parses "Foo(typeof(1))" parses "Foo(typeof(1))" - parses "foo.-(1, 2) { 3 }" parses "foo.-(1, 2) { 3 }" - says syntax error on "*1, a = 2" says syntax error on "*1, a = 2" - parses "def foo(**args : **Foo)\n1\nend" parses "def foo(**args : **Foo)\n1\nend" - parses "case 1; when 1 then 2; else; 3; end" parses "case 1; when 1 then 2; else; 3; end" - parses "def foo(x @@instance_sizeof); end" parses "def foo(x @@instance_sizeof); end" - parses "def foo(x @false); end" parses "def foo(x @false); end" - parses "foo.+ 1, 2" parses "foo.+ 1, 2" - parses "def foo(fun foo); end" parses "def foo(fun foo); end" - parses "def foo(x = 1, **args)\n1\nend" parses "def foo(x = 1, **args)\n1\nend" - parses "foo(z: 0, a: n > 2)" parses "foo(z: 0, a: n > 2)" - says syntax error on "def foo(unless); end" says syntax error on "def foo(unless); end" - parses "call @foo.bar" parses "call @foo.bar" - parses "a.b() /3" parses "a.b() /3" - parses "if foo; 1; elsif bar; 2; else 3; end" parses "if foo; 1; elsif bar; 2; else 3; end" - parses "begin; 1; rescue ex : ::Foo | ::Bar; 2; end" parses "begin; 1; rescue ex : ::Foo | ::Bar; 2; end" - parses "foo./" parses "foo./" - parses "offsetof(X, @a)" parses "offsetof(X, @a)" - parses "foo { a = 1 }; a" parses "foo { a = 1 }; a" - parses "->::foo" parses "->::foo" - parses "foo.== 1, 2" parses "foo.== 1, 2" - says syntax error on "case 1\nin Int32; 2; when 2" says syntax error on "case 1\nin Int32; 2; when 2" - parses "foo &./(1)" parses "foo &./(1)" - parses "foo { 1 }" parses "foo { 1 }" - parses ":^" parses ":^" - says syntax error on "foo { |(module)| }" says syntax error on "foo { |(module)| }" - says syntax error on "[\n]" says syntax error on "[\n]" - says syntax error on "macro Foo.bar;end" says syntax error on "macro Foo.bar;end" - parses "def self.|(); end;" parses "def self.|(); end;" - parses "foo = 1; ->foo.**(Int32)" parses "foo = 1; ->foo.**(Int32)" - parses "Foo(X, offsetof(Foo, @a))" parses "Foo(X, offsetof(Foo, @a))" - says syntax error on "{{ {% begin %} }}" says syntax error on "{{ {% begin %} }}" - parses "def <=(other, file = 1); end" parses "def <=(other, file = 1); end" - parses "def foo\n1\nend\nif 1\nend" parses "def foo\n1\nend\nif 1\nend" - parses "def &; end;" parses "def &; end;" - parses "{[] of Foo, self.foo}" parses "{[] of Foo, self.foo}" - says syntax error on "return 1 foo" says syntax error on "return 1 foo" - parses "def foo(x); end; x" parses "def foo(x); end; x" - says syntax error on "def foo(self); end" says syntax error on "def foo(self); end" - says syntax error on "a.b() += 1" says syntax error on "a.b() += 1" - parses "foo(z: 0, a: n - 2)" parses "foo(z: 0, a: n - 2)" - parses "property end : Int32" parses "property end : Int32" - parses "foo = 1; ->foo.&-(Int32)" parses "foo = 1; ->foo.&-(Int32)" - parses "{[] of Foo, ::foo}" parses "{[] of Foo, ::foo}" - parses "foo = 1; ->foo.=~(Int32)" parses "foo = 1; ->foo.=~(Int32)" - parses "def foo(**args)\n1\nend" parses "def foo(**args)\n1\nend" - parses "lib LibC; type A = B*; end" parses "lib LibC; type A = B*; end" - parses "macro ===;end" parses "macro ===;end" - parses "foo { |a, b, | 1 }" parses "foo { |a, b, | 1 }" - parses "lib LibC; union Foo; end end" parses "lib LibC; union Foo; end end" - parses "case 1\nwhen .!()\n2\nend" parses "case 1\nwhen .!()\n2\nend" - parses "foo" parses "foo" - parses "def foo(var : Int32 = 1); end" parses "def foo(var : Int32 = 1); end" - says syntax error on "def foo(foo require); end" says syntax error on "def foo(foo require); end" - parses "def foo(x @@case); end" parses "def foo(x @@case); end" - parses "1 + /foo/" parses "1 + /foo/" - parses "{% unless 1; 2; else 3; end %}" parses "{% unless 1; 2; else 3; end %}" - parses "def self.>=(); end;" parses "def self.>=(); end;" - parses "asm(\"nop\" ::: :)" parses "asm(\"nop\" ::: :)" - says syntax error on "->::@foo.foo" says syntax error on "->::@foo.foo" - parses "macro ~;end" parses "macro ~;end" - parses "def foo(case foo); end" parses "def foo(case foo); end" - parses "def foo(x, *, y, &); 1; end" parses "def foo(x, *, y, &); 1; end" - parses "def foo(@@extend); end" parses "def foo(@@extend); end" - parses "def foo(n); foo(n -1); end" parses "def foo(n); foo(n -1); end" - parses "a.b //=\n1" parses "a.b //=\n1" - parses "def -(); end" parses "def -(); end" - parses "[] of Int" parses "[] of Int" - parses "a.b / 2" parses "a.b / 2" - parses "1.tap do |x|; 1; rescue; x; end" parses "1.tap do |x|; 1; rescue; x; end" - parses "foo %x()" parses "foo %x()" - parses "a() /3" parses "a() /3" - says syntax error on "foo { |(end)| }" says syntax error on "foo { |(end)| }" - parses "1 &** 2" parses "1 &** 2" - says syntax error on "next &** 1" says syntax error on "next &** 1" - parses "def -(); end;" parses "def -(); end;" - parses "->\n:\nInt32\n{\n}" parses "->\n:\nInt32\n{\n}" - parses "macro []=;end" parses "macro []=;end" - parses "def foo(**args : Foo)\n1\nend" parses "def foo(**args : Foo)\n1\nend" - parses "unless foo; 1; else; 2; end" parses "unless foo; 1; else; 2; end" - says syntax error on "macro foo(x y z); end" says syntax error on "macro foo(x y z); end" - parses "->Foo.*(Int32)" parses "->Foo.*(Int32)" - says syntax error on "1 as? Bar" says syntax error on "1 as? Bar" - parses "def foo ; 1 ; end" parses "def foo ; 1 ; end" - parses "foo &.[0] = 1" parses "foo &.[0] = 1" - parses "foo = 1; ->foo.foo?" parses "foo = 1; ->foo.foo?" - parses "foo(/a/)" parses "foo(/a/)" - parses "def %; end;" parses "def %; end;" - parses "pointerof : Int32" parses "pointerof : Int32" - parses "case {1, 2}\nwhen {3, 4}\n5\nend" parses "case {1, 2}\nwhen {3, 4}\n5\nend" - parses "1 +2_i64" parses "1 +2_i64" - parses "puts {{\n1\n}}" parses "puts {{\n1\n}}" - parses "case {1, 2}\nwhen foo\n5\nend" parses "case {1, 2}\nwhen foo\n5\nend" - parses "def foo(x @true); end" parses "def foo(x @true); end" - says syntax error on "foo { |(pointerof)| }" says syntax error on "foo { |(pointerof)| }" - parses "foo(a: n & 2)" parses "foo(a: n & 2)" - parses "if foo\n1\nelse\n2\nend" parses "if foo\n1\nelse\n2\nend" - parses "def /; end;" parses "def /; end;" - parses "foo a: b(1) do\nend" parses "foo a: b(1) do\nend" - parses "a : Foo*" parses "a : Foo*" - says syntax error on "break === 1" says syntax error on "break === 1" - parses "b.c ||= 1" parses "b.c ||= 1" - says syntax error on "break * 1" says syntax error on "break * 1" - parses "Foo(T, U, 1)" parses "Foo(T, U, 1)" - parses "foo(z: 0, a: n &- 2)" parses "foo(z: 0, a: n &- 2)" - says syntax error on "def foo(foo fun); end" says syntax error on "def foo(foo fun); end" - parses "foo(a: n + 2)" parses "foo(a: n + 2)" - parses "asm(\"nop\" : \"a\"(0) : \"b\"(1))" parses "asm(\"nop\" : \"a\"(0) : \"b\"(1))" - parses "foo &.block = 0" parses "foo &.block = 0" - parses "foo = 1; ->foo.+(Int32)" parses "foo = 1; ->foo.+(Int32)" - parses "foo &.as(T)" parses "foo &.as(T)" - says syntax error on "foo &.||" says syntax error on "foo &.||" - parses "def foo(x @abstract); end" parses "def foo(x @abstract); end" - parses "a.b |=\n1" parses "a.b |=\n1" - parses "{{ nil?(foo) }}" parses "{{ nil?(foo) }}" - says syntax error on "def foo(pointerof); end" says syntax error on "def foo(pointerof); end" - says syntax error on " (1, 2, 3 end" says syntax error on " (1, 2, 3 end" - parses "case 1\nwhen .responds_to?(:foo)\n2\nend" parses "case 1\nwhen .responds_to?(:foo)\n2\nend" - parses "enum Foo; def foo; 1; end; end" parses "enum Foo; def foo; 1; end; end" - parses "<<-'HERE COMES HEREDOC'\n hello \\n world\n \#{1}\n HERE COMES HEREDOC" parses "<<-'HERE COMES HEREDOC'\n hello \\n world\n \#{1}\n HERE COMES HEREDOC" - parses "def foo(@@until); end" parses "def foo(@@until); end" - says syntax error on "break & 1" says syntax error on "break & 1" - says syntax error on "def f end" says syntax error on "def f end" - says syntax error on "return // 1" says syntax error on "return // 1" - parses "typeof(a = 1); a" parses "typeof(a = 1); a" - parses "1 \\\r\n + 2" parses "1 \\\r\n + 2" - parses "foo if 3" parses "foo if 3" - parses "def foo(select foo); end" parses "def foo(select foo); end" - parses "Foo::Bar?" parses "Foo::Bar?" - parses "1.x; foo do\nend" parses "1.x; foo do\nend" - says syntax error on "Foo({x: X, x: Y})" says syntax error on "Foo({x: X, x: Y})" - parses "def =~(); end;" parses "def =~(); end;" - parses "lib LibC\nfun getchar(a : Int, b : Float)\nend" parses "lib LibC\nfun getchar(a : Int, b : Float)\nend" - says syntax error on "{1 => 2 3 => 4}" says syntax error on "{1 => 2 3 => 4}" - parses "def foo(@offsetof); end" parses "def foo(@offsetof); end" - parses "1 & 2" parses "1 & 2" - parses "`foo\#{1}bar`" parses "`foo\#{1}bar`" - says syntax error on "->(x, y z) { }" says syntax error on "->(x, y z) { }" - parses "foo(&.as?(T).bar)" parses "foo(&.as?(T).bar)" - parses "1.=~(2)" parses "1.=~(2)" - parses "1 <= 2" parses "1 <= 2" - parses "macro foo;%var;end" parses "macro foo;%var;end" - parses "x.foo a: 1, b: 2 " parses "x.foo a: 1, b: 2 " - parses "property enum : Int32" parses "property enum : Int32" - says syntax error on "def foo(foo until); end" says syntax error on "def foo(foo until); end" - parses "Int[8, 4]" parses "Int[8, 4]" - parses "macro foo\n'\\''\nend" parses "macro foo\n'\\''\nend" - says syntax error on "a = 1; b = 2; a, b += 1, 2" says syntax error on "a = 1; b = 2; a, b += 1, 2" - parses "foo.%" parses "foo.%" - parses "def *(); end" parses "def *(); end" - says syntax error on "foo { |self| }" says syntax error on "foo { |self| }" - parses "foo z: out x; x" parses "foo z: out x; x" - parses "def foo(while foo); end" parses "def foo(while foo); end" - parses "foo(z: 0, a: n == 2)" parses "foo(z: 0, a: n == 2)" - parses "lib LibC; enum Foo; A = 1; B; end end" parses "lib LibC; enum Foo; A = 1; B; end end" - parses "next 1 if true" parses "next 1 if true" - parses "foo 1, **bar" parses "foo 1, **bar" - parses "1 ** 2" parses "1 ** 2" - parses "foo.=== do end" parses "foo.=== do end" - parses "foo = 1; ->foo.!~(Int32)" parses "foo = 1; ->foo.!~(Int32)" - parses "def foo(@@instance_sizeof); end" parses "def foo(@@instance_sizeof); end" - says syntax error on "foo { |(offsetof)| }" says syntax error on "foo { |(offsetof)| }" - parses "->Foo::Bar::Baz.foo" parses "->Foo::Bar::Baz.foo" - says syntax error on "def foo(foo out); end" says syntax error on "def foo(foo out); end" - says syntax error on "foo { |false| }" says syntax error on "foo { |false| }" - parses "def self.+; end;" parses "def self.+; end;" - parses "a = 1" parses "a = 1" - parses "foo.bar [1]" parses "foo.bar [1]" - parses "case 1\nin nil; 2; end" parses "case 1\nin nil; 2; end" - parses "asm(\"nop\" : \"a\"(0), \"b\"(1) : \"c\"(2), \"d\"(3))" parses "asm(\"nop\" : \"a\"(0), \"b\"(1) : \"c\"(2), \"d\"(3))" - parses "def foo(x = 1, *y); 1; end" parses "def foo(x = 1, *y); 1; end" - parses "n &** 2" parses "n &** 2" - says syntax error on "while break; end" says syntax error on "while break; end" - parses "foo [1]" parses "foo [1]" - parses "def =~(); end" parses "def =~(); end" - parses "property sizeof : Int32" parses "property sizeof : Int32" - parses "[\n1,2\n]" parses "[\n1,2\n]" - parses "def /(); end;" parses "def /(); end;" - parses "x[..2]" parses "x[..2]" - parses "private : Int32" parses "private : Int32" - parses "a.b /2/" parses "a.b /2/" - parses "->Foo.<=(Int32)" parses "->Foo.<=(Int32)" - parses "case 1\nelse\n2\nend" parses "case 1\nelse\n2\nend" - parses "def foo(x @with); end" parses "def foo(x @with); end" - parses "->Foo.==(Int32)" parses "->Foo.==(Int32)" - parses "Foo??" parses "Foo??" - parses "Foo(T)?" parses "Foo(T)?" - parses "def >=(*args, **opts, &); end" parses "def >=(*args, **opts, &); end" - parses "1.as(Bar)" parses "1.as(Bar)" - parses "def &(); end" parses "def &(); end" - says syntax error on "foo { |(if)| }" says syntax error on "foo { |(if)| }" - parses "foo = 1; ->foo.&**(Int32)" parses "foo = 1; ->foo.&**(Int32)" - parses "def ===(other, file = 1); end" parses "def ===(other, file = 1); end" - parses "foo(n & 2)" parses "foo(n & 2)" - parses "foo out @x; @x" parses "foo out @x; @x" - says syntax error on "->() :Int32 { }" says syntax error on "->() :Int32 { }" - says syntax error on "def foo &block : Int -> Double ; end" says syntax error on "def foo &block : Int -> Double ; end" - parses "property macro : Int32" parses "property macro : Int32" - parses "a.foo, a.bar = 1, 2" parses "a.foo, a.bar = 1, 2" - parses "a : Foo = 1" parses "a : Foo = 1" - parses "def foo; a = 1; a; end" parses "def foo; a = 1; a; end" - parses "n >> 2" parses "n >> 2" - parses "def self.~; end;" parses "def self.~; end;" - parses "def foo(@in); end" parses "def foo(@in); end" - parses "lib LibC; type A = B**; end" parses "lib LibC; type A = B**; end" - says syntax error on "if next; end" says syntax error on "if next; end" - parses "def |; end;" parses "def |; end;" - parses "next 1" parses "next 1" - parses "foo &block" parses "foo &block" - sets correct location of global path in annotation sets correct location of global path in annotation - says syntax error on "def foo(while); end" says syntax error on "def foo(while); end" - parses ":\"\\\"foo\"" parses ":\"\\\"foo\"" - parses ":\"\\\"foo\\\"\"" parses ":\"\\\"foo\\\"\"" - parses "[/ /, / /]" parses "[/ /, / /]" - parses "-@@foo" parses "-@@foo" - parses "foo.bar(1).baz" parses "foo.bar(1).baz" - parses "foo.bar= *baz" parses "foo.bar= *baz" - says syntax error on "def foo(var = x : Int); end" says syntax error on "def foo(var = x : Int); end" - parses "def foo(x @@require); end" parses "def foo(x @@require); end" - says syntax error on "<<-HERE\n One\n \#{1}\n Zero\n HERE" says syntax error on "<<-HERE\n One\n \#{1}\n Zero\n HERE" - parses "class Foo; end\nwhile true; end" parses "class Foo; end\nwhile true; end" - parses "@[Foo(1, foo: 2\n)]" parses "@[Foo(1, foo: 2\n)]" - parses "foo /;/" parses "foo /;/" - parses "def ^; end;" parses "def ^; end;" - parses "enum Foo; macro foo;end; end" parses "enum Foo; macro foo;end; end" - parses "+1" parses "+1" - says syntax error on "def foo(\"\" y); y; end" says syntax error on "def foo(\"\" y); y; end" - parses "{% x unless 1 %}" parses "{% x unless 1 %}" - parses "def foo; yield; end" parses "def foo; yield; end" - parses "{% begin %}%Q[ %s ]{% end %}" parses "{% begin %}%Q[ %s ]{% end %}" - parses "foo = 1; ->foo.<(Int32)" parses "foo = 1; ->foo.<(Int32)" - parses ":[]?" parses ":[]?" - says syntax error on "return &- 1" says syntax error on "return &- 1" - parses "def foo(next foo); end" parses "def foo(next foo); end" - parses "def foo(pointerof foo); end" parses "def foo(pointerof foo); end" - parses "def foo(abstract foo); end" parses "def foo(abstract foo); end" - says syntax error on "def foo(_ y); y; end" says syntax error on "def foo(_ y); y; end" - parses "def foo(@@var = 1); 1; end" parses "def foo(@@var = 1); 1; end" - parses "a = 1; a |=\n1" parses "a = 1; a |=\n1" - says syntax error on "def foo(select); end" says syntax error on "def foo(select); end" - parses "a = 1; a <<= 1" parses "a = 1; a <<= 1" - parses "if foo; 1; else; 2; end" parses "if foo; 1; else; 2; end" - says syntax error on "foo[1] = next" says syntax error on "foo[1] = next" - parses "def foo : Int32\n1\nend" parses "def foo : Int32\n1\nend" - parses "def foo(x @extend); end" parses "def foo(x @extend); end" - parses "~ 1" parses "~ 1" - parses "1\\\r\n + 2" parses "1\\\r\n + 2" - parses "foo(a: n &** 2)" parses "foo(a: n &** 2)" - parses "def foo(protected foo); end" parses "def foo(protected foo); end" - parses "{% begin %}{% if true %}if true{% end %}\n{% if true %}end{% end %}{% end %}" parses "{% begin %}{% if true %}if true{% end %}\n{% if true %}end{% end %}{% end %}" - parses "def foo(x @@self); end" parses "def foo(x @@self); end" - parses "foo = 1; foo -1" parses "foo = 1; foo -1" - says syntax error on "foo { |(self)| }" says syntax error on "foo { |(self)| }" - parses "{} of Int32 -> Int32 => Int32" parses "{} of Int32 -> Int32 => Int32" - parses "if : Int32" parses "if : Int32" - parses "foo(z: 0, a: n >> 2)" parses "foo(z: 0, a: n >> 2)" - parses "->::foo!" parses "->::foo!" - parses "next 1, *2" parses "next 1, *2" - parses "a = b = 2" parses "a = b = 2" - parses "1 +\n2" parses "1 +\n2" - parses "Foo?" parses "Foo?" - says syntax error on "{% unless 1 %} 2 {% elsif 3 %} 3 {% end %}" says syntax error on "{% unless 1 %} 2 {% elsif 3 %} 3 {% end %}" - parses "Set(Int32) {1, 2, 3}" parses "Set(Int32) {1, 2, 3}" - parses "require \"foo\"" parses "require \"foo\"" - parses "Foo(_)" parses "Foo(_)" - parses "offsetof(\n Foo,\n @foo\n)" parses "offsetof(\n Foo,\n @foo\n)" - parses "foo./(1, 2) { 3 }" parses "foo./(1, 2) { 3 }" - parses "foo(x, *bar, *baz, y)" parses "foo(x, *bar, *baz, y)" - parses "1_u128" parses "1_u128" - parses "break *{1, 2}" parses "break *{1, 2}" - says syntax error on "{\n1 => 2, 3 => 4\n5 => 6}" says syntax error on "{\n1 => 2, 3 => 4\n5 => 6}" - parses "begin; 1; rescue ex; 2; end" parses "begin; 1; rescue ex; 2; end" - parses "{% begin %}%r<\\A>{% end %}" parses "{% begin %}%r<\\A>{% end %}" - parses "case 1\nin Int32.class; 2; end" parses "case 1\nin Int32.class; 2; end" - parses "f.x |= 2" parses "f.x |= 2" - parses "def *(); end;" parses "def *(); end;" - parses "1\n-2" parses "1\n-2" - parses "a = 1; a[2] ||= 3" parses "a = 1; a[2] ||= 3" - parses "def >>(); end" parses "def >>(); end" - parses "alias Foo::Bar = Baz" parses "alias Foo::Bar = Baz" - parses "def foo(@typeof); end" parses "def foo(@typeof); end" - parses "\"\"" parses "\"\"" - says syntax error on "offsetof(X, 'c')" says syntax error on "offsetof(X, 'c')" - parses "foo(a: n !~ 2)" parses "foo(a: n !~ 2)" - parses "{% x if 1 %}" parses "{% x if 1 %}" - says syntax error on "break // 1" says syntax error on "break // 1" - parses "{% begin %}%w[ %s ]{% end %}" parses "{% begin %}%w[ %s ]{% end %}" - parses "->Foo.>>(Int32)" parses "->Foo.>>(Int32)" - says syntax error on "1 ? : 2 : 3" says syntax error on "1 ? : 2 : 3" - parses "module Foo\ndef foo; end; end" parses "module Foo\ndef foo; end; end" - parses "foo % Q()" parses "foo % Q()" - parses "def foo(@@enum); end" parses "def foo(@@enum); end" - says syntax error on "foo(&block) {}" says syntax error on "foo(&block) {}" - says syntax error on "def foo(extend); end" says syntax error on "def foo(extend); end" - parses "foo.<=(1, 2) { 3 }" parses "foo.<=(1, 2) { 3 }" - parses "property lib : Int32" parses "property lib : Int32" - says syntax error on "<<-FOO\n1\nFOO + 2" says syntax error on "<<-FOO\n1\nFOO + 2" - parses "macro foo;end" parses "macro foo;end" - parses "1 &* 2" parses "1 &* 2" - says syntax error on "break &+ 1" says syntax error on "break &+ 1" - says syntax error on "return > 1" says syntax error on "return > 1" - parses "lib LibC; {{ 1 }}; end" parses "lib LibC; {{ 1 }}; end" - parses "def foo(x) : Int32\n1\nend" parses "def foo(x) : Int32\n1\nend" - parses "[] of ->;" parses "[] of ->;" - parses "foo.** 1, 2" parses "foo.** 1, 2" - parses "{% if true %}\n{% end %}\n{% if true %}\n{% end %}" parses "{% if true %}\n{% end %}\n{% if true %}\n{% end %}" - parses "1 &+ 2" parses "1 &+ 2" - parses "<<-HERE\nHERE" parses "<<-HERE\nHERE" - parses "a = 1; a -=\n1" parses "a = 1; a -=\n1" - parses "Foo({\"foo\": X, \"bar\": Y})" parses "Foo({\"foo\": X, \"bar\": Y})" - parses "foo[1] /2" parses "foo[1] /2" - parses "def foo(@true); end" parses "def foo(@true); end" - parses "case 1\nin true; 2; end" parses "case 1\nin true; 2; end" - says syntax error on "break[0]= 1" says syntax error on "break[0]= 1" - parses "foo.| 1, 2" parses "foo.| 1, 2" - parses "{foo:a, bar:b}" parses "{foo:a, bar:b}" - parses "->Foo.!~(Int32)" parses "->Foo.!~(Int32)" - parses "T::U/1" parses "T::U/1" - parses "()" parses "()" - parses "foo(z: 0, a: n >= 2)" parses "foo(z: 0, a: n >= 2)" - says syntax error on "macro foo x y; end" says syntax error on "macro foo x y; end" - says syntax error on "asm(\"\" ::: \"\"(var))" says syntax error on "asm(\"\" ::: \"\"(var))" - says syntax error on "next &+ 1" says syntax error on "next &+ 1" - parses "foo.=~" parses "foo.=~" - says syntax error on "if return; end" says syntax error on "if return; end" - parses "foo()" parses "foo()" - parses "foo &->bar" parses "foo &->bar" - parses "def foo; / /; end" parses "def foo; / /; end" - parses "pointerof(@a)" parses "pointerof(@a)" - parses "foo = 1; ->foo.-(Int32)" parses "foo = 1; ->foo.-(Int32)" - says syntax error on "return | 1" says syntax error on "return | 1" - parses "x : Foo(A, *B, C)" parses "x : Foo(A, *B, C)" - parses "call foo : A, end : B" parses "call foo : A, end : B" - says syntax error on "{\n1 => 2\n3 => 4\n}" says syntax error on "{\n1 => 2\n3 => 4\n}" - says syntax error on "a, b.<=" says syntax error on "a, b.<=" - says syntax error on "case 1\nwhen Int32; 2; in 2" says syntax error on "case 1\nwhen Int32; 2; in 2" - parses "a = 1; a >>=\n1" parses "a = 1; a >>=\n1" - parses "foo.===(1, 2) { 3 }" parses "foo.===(1, 2) { 3 }" - parses "foo(&.block)" parses "foo(&.block)" - parses "foo(Foo: 1, Bar: 2)" parses "foo(Foo: 1, Bar: 2)" - parses "\"hello \"\\\r\n\"world\"" parses "\"hello \"\\\r\n\"world\"" - parses "def foo(var : self.class); end" parses "def foo(var : self.class); end" - parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) : \"eax\", \"ebx\"\n: \"volatile\", \"alignstack\"\n,\n\"intel\"\n)" parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) : \"eax\", \"ebx\"\n: \"volatile\", \"alignstack\"\n,\n\"intel\"\n)" - parses "macro foo(x)\n 1 + 2; end" parses "macro foo(x)\n 1 + 2; end" - says syntax error on "def foo(foo end); end" says syntax error on "def foo(foo end); end" - parses "def self.-; end;" parses "def self.-; end;" - says syntax error on "foo { |in| }" says syntax error on "foo { |in| }" - parses "yield 1 if true" parses "yield 1 if true" - parses "<<-HERE\n \#{1}One\n \#{2}Zero\n HERE" parses "<<-HERE\n \#{1}One\n \#{2}Zero\n HERE" - parses "_, *_, _, _ = 1, 2, 3" parses "_, *_, _, _ = 1, 2, 3" - says syntax error on "foo **bar, 1" says syntax error on "foo **bar, 1" - parses "def foo(\nvar); end" parses "def foo(\nvar); end" - parses "foo.|" parses "foo.|" - parses "def foo(@@begin); end" parses "def foo(@@begin); end" - says syntax error on "1 until 3" says syntax error on "1 until 3" - parses "foo.==" parses "foo.==" - says syntax error on "foo { |(enum)| }" says syntax error on "foo { |(enum)| }" - says syntax error on "foo { |macro| }" says syntax error on "foo { |macro| }" - says syntax error on "def foo(abstract); end" says syntax error on "def foo(abstract); end" - says syntax error on "fun foo\nclass" says syntax error on "fun foo\nclass" - says syntax error on "def foo(foo false); end" says syntax error on "def foo(foo false); end" - says syntax error on "foo { |(yield)| }" says syntax error on "foo { |(yield)| }" - says syntax error on "fun foo(Int32); end" says syntax error on "fun foo(Int32); end" - parses "def self.<=; end;" parses "def self.<=; end;" - parses "def >(); end" parses "def >(); end" - parses "->Foo.foo?" parses "->Foo.foo?" - says syntax error on "foo { |module| }" says syntax error on "foo { |module| }" - parses "a = 1; yield a rescue a" parses "a = 1; yield a rescue a" - parses "def self.*; end;" parses "def self.*; end;" - parses "foo unless 3" parses "foo unless 3" - parses "!a && b" parses "!a && b" - parses "asm(\"nop\" ::::)" parses "asm(\"nop\" ::::)" - parses "1.tap do; 1; rescue; 2; end" parses "1.tap do; 1; rescue; 2; end" - parses "{% if 1\n x\nend %}" parses "{% if 1\n x\nend %}" - says syntax error on "def foo(module); end" says syntax error on "def foo(module); end" - parses "{% begin %}%( %s ){% end %}" parses "{% begin %}%( %s ){% end %}" - parses "def foo(x @@return); end" parses "def foo(x @@return); end" - parses "def foo(@break); end" parses "def foo(@break); end" - parses "def self.**; end;" parses "def self.**; end;" - parses "foo(a: 1, &block)" parses "foo(a: 1, &block)" - parses "case 1; end" parses "case 1; end" - says syntax error on "break &- 1" says syntax error on "break &- 1" - parses "lib LibC\n$errno : Int32\n$errno2 : Int32\nend" parses "lib LibC\n$errno : Int32\n$errno2 : Int32\nend" - parses "x = 1; foo x {\n}" parses "x = 1; foo x {\n}" - parses "a = 1\nfoo - a" parses "a = 1\nfoo - a" - parses "macro <=>;end" parses "macro <=>;end" - says syntax error on "def foo var\n end" says syntax error on "def foo var\n end" - says syntax error on "def foo var; end" says syntax error on "def foo var; end" - parses "foo a, / /" parses "foo a, / /" - parses "macro foo; bar class: 1; end" parses "macro foo; bar class: 1; end" - says syntax error on "x : String, a = 4" says syntax error on "x : String, a = 4" - parses "A.new(\"x\", B.new(\"y\"))" parses "A.new(\"x\", B.new(\"y\"))" - parses "n =~ 2" parses "n =~ 2" - parses "->Foo.%(Int32)" parses "->Foo.%(Int32)" - parses "foo(1 + 2)" parses "foo(1 + 2)" - parses "foo = 1; ->foo.==(Int32)" parses "foo = 1; ->foo.==(Int32)" - parses "foo Bar { 1 }" parses "foo Bar { 1 }" - says syntax error on "return ^ 1" says syntax error on "return ^ 1" - says syntax error on "return <= 1" says syntax error on "return <= 1" - says syntax error on "{1, ->{ |x| x } }" says syntax error on "{1, ->{ |x| x } }" - end locations - gets corrects end location for "1.." gets corrects end location for "1.." - gets corrects end location for "puts obj.foo" gets corrects end location for "puts obj.foo" - sets correct location of `else` of if statement sets correct location of `else` of if statement - gets corrects end location for "Foo { 1 }" gets corrects end location for "Foo { 1 }" - says syntax error on "def foo(x : 1); end" says syntax error on "def foo(x : 1); end" - gets corrects end location for "{%\nif foo\n bar\n end\n%}" gets corrects end location for "{%\nif foo\n bar\n end\n%}" - gets corrects end location for "foo : Foo[42]" gets corrects end location for "foo : Foo[42]" - gets corrects end location for "foo 1, 2" gets corrects end location for "foo 1, 2" - parses "%w{one{} two}" parses "%w{one{} two}" - sets location of lib fun name sets location of lib fun name - gets corrects end location for "sizeof(Foo)" gets corrects end location for "sizeof(Foo)" - gets corrects end location for "a = 123" gets corrects end location for "a = 123" - gets corrects end location for var gets corrects end location for var - gets corrects end location for "[1, 2,]" gets corrects end location for "[1, 2,]" - sets correct location of proc literal sets correct location of proc literal - parses "%i((one two))" parses "%i((one two))" - says syntax error on "foo(1\n,2)" says syntax error on "foo(1\n,2)" - says syntax error on "case x; when :a; 2; when :a; end" says syntax error on "case x; when :a; 2; when :a; end" - gets corrects end location for "a, b = 1, 2 if 3" gets corrects end location for "a, b = 1, 2 if 3" - gets corrects end location for ":foo" gets corrects end location for ":foo" - parses "%i(foo(bar) baz)" parses "%i(foo(bar) baz)" - gets corrects end location for "foo : Foo*" gets corrects end location for "foo : Foo*" - gets corrects end location for "foo.@foo" gets corrects end location for "foo.@foo" - parses "annotation Foo::Bar\n\nend" parses "annotation Foo::Bar\n\nend" - gets corrects end location for "foo ->self.bar" gets corrects end location for "foo ->self.bar" - says syntax error on "case x; when 1..2; 2; when 1..2; end" says syntax error on "case x; when 1..2; 2; when 1..2; end" - gets corrects end location for "f.x=(foo).bar" gets corrects end location for "f.x=(foo).bar" - says syntax error on "%i(" says syntax error on "%i(" - gets corrects end location for "pointerof(@foo)" gets corrects end location for "pointerof(@foo)" - sets correct locations of keywords of exception handler sets correct locations of keywords of exception handler - parses "%w{\\{one}" parses "%w{\\{one}" - gets corrects end location for "%w(one two)" gets corrects end location for "%w(one two)" - says syntax error on "def foo(x : Int32 | (Int32, Int32)); end" says syntax error on "def foo(x : Int32 | (Int32, Int32)); end" - gets corrects end location for "macro foo;end" gets corrects end location for "macro foo;end" - gets corrects end location for block with { ... } gets corrects end location for block with { ... } - gets corrects end location for "\"hello\"" gets corrects end location for "\"hello\"" - gets corrects end location for "Foo?" gets corrects end location for "Foo?" - gets correct location of empty exception handler inside def gets correct location of empty exception handler inside def - sets correct location of vars in C struct sets correct location of vars in C struct - sets correct location of trailing rescue sets correct location of trailing rescue - gets corrects end location for "foo *bar" gets corrects end location for "foo *bar" - gets corrects end location for "::foo" gets corrects end location for "::foo" - gets corrects end location for "foo ->bar(Baz)" gets corrects end location for "foo ->bar(Baz)" - says syntax error on "%i{one}}" says syntax error on "%i{one}}" - sets correct locations of macro if / else / elsif sets correct locations of macro if / else / elsif - gets corrects end location for "foo.!()" gets corrects end location for "foo.!()" - parses "%i(one\\ two)" parses "%i(one\\ two)" - says syntax error on "%Q(" says syntax error on "%Q(" - gets corrects end location for "/foo/" gets corrects end location for "/foo/" - gets corrects end location for "foo ->@bar.baz" gets corrects end location for "foo ->@bar.baz" - sets correct location for fun def with return type sets correct location for fun def with return type - sets correct location of call name sets correct location of call name - gets corrects end location for "123" gets corrects end location for "123" - gets corrects end location for "f.x = foo" gets corrects end location for "f.x = foo" - says syntax error on "case x; when {1, 2}; 2; when {1, 2}; end" says syntax error on "case x; when {1, 2}; 2; when {1, 2}; end" - gets corrects end location for "def foo; 1; end" gets corrects end location for "def foo; 1; end" - gets corrects end location for "abstract def foo : Int32" gets corrects end location for "abstract def foo : Int32" - sets correct location of var in type declaration sets correct location of var in type declaration - gets corrects end location for "foo ->@@bar.baz=" gets corrects end location for "foo ->@@bar.baz=" - parses "%w{one\\ two}" parses "%w{one\\ two}" - gets corrects end location for "return 1" gets corrects end location for "return 1" - gets corrects end location for "1..3" gets corrects end location for "1..3" - gets corrects end location for "foo ->bar" gets corrects end location for "foo ->bar" - gets corrects end location for "a || b" gets corrects end location for "a || b" - sets correct locations of macro if / else sets correct locations of macro if / else - sets correct location for fun def sets correct location for fun def - says syntax error on "def foo(x : Array({sizeof(Int32), 2})); end" says syntax error on "def foo(x : Array({sizeof(Int32), 2})); end" - gets corrects end location for "foo ->Bar.baz=" gets corrects end location for "foo ->Bar.baz=" - says syntax error on "case x; when 1; when _; end" says syntax error on "case x; when 1; when _; end" - gets corrects end location for "unless 1; 2; end" gets corrects end location for "unless 1; 2; end" - sets correct location of `else` of unless statement sets correct location of `else` of unless statement - says syntax error on "{1\n,2}" says syntax error on "{1\n,2}" - sets correct location and end location of parenthesized empty block sets correct location and end location of parenthesized empty block - gets corrects end location for "include Foo" gets corrects end location for "include Foo" - says syntax error on "case x; when true; 2; when true; end" says syntax error on "case x; when true; 2; when true; end" - sets correct location of var in macro for loop sets correct location of var in macro for loop - gets corrects end location for "foo" gets corrects end location for "foo" - says syntax error on "def foo(x : *Int32); end" says syntax error on "def foo(x : *Int32); end" - gets corrects end location for "1 if 2" gets corrects end location for "1 if 2" - gets corrects end location for "Int[8]?" gets corrects end location for "Int[8]?" - says syntax error on "def foo(x : {Int32, (Int32, Int32)}); end" says syntax error on "def foo(x : {Int32, (Int32, Int32)}); end" - says syntax error on "%q(" says syntax error on "%q(" - gets corrects of ~ gets corrects of ~ - gets correct location after macro with yield gets correct location after macro with yield - says syntax error on "%w(" says syntax error on "%w(" - parses "annotation Foo\nend\nrequire \"bar\"" parses "annotation Foo\nend\nrequire \"bar\"" - gets corrects end location for "foo ->@bar.baz=" gets corrects end location for "foo ->@bar.baz=" - gets corrects end location for "if 1; else; 2; end" gets corrects end location for "if 1; else; 2; end" - parses "%i{(one two)}" parses "%i{(one two)}" - gets corrects end location for "@@foo" gets corrects end location for "@@foo" - gets corrects end location for "@a = uninitialized Foo" gets corrects end location for "@a = uninitialized Foo" - says syntax error on "case x; when 1; 2; when 1; end" says syntax error on "case x; when 1; 2; when 1; end" - gets corrects end location for "false" gets corrects end location for "false" - gets corrects end location for "require \"foo\"" gets corrects end location for "require \"foo\"" - gets corrects end location for "def foo; end" gets corrects end location for "def foo; end" - says syntax error on "{\"a\" : 1}" says syntax error on "{\"a\" : 1}" - sets correct location of `elsif` of if statement sets correct location of `elsif` of if statement - gets corrects end location for "foo(\n &.block\n)" gets corrects end location for "foo(\n &.block\n)" - sets location of obj.x += as call sets location of obj.x += as call - sets location of enum method sets location of enum method - gets corrects end location for "foo : Foo.class" gets corrects end location for "foo : Foo.class" - gets correct location after macro with yield gets correct location after macro with yield - gets corrects end location for "while 1; end" gets corrects end location for "while 1; end" - gets corrects end location for block with do ... end gets corrects end location for block with do ... end - doesn't override yield with macro yield doesn't override yield with macro yield - says syntax error on "case x; when _; end" says syntax error on "case x; when _; end" - gets corrects end location for "foo.bar(x) do; end" gets corrects end location for "foo.bar(x) do; end" - gets corrects end location for "module Foo; end" gets corrects end location for "module Foo; end" - says syntax error on "def foo(x : (*Int32)); end" says syntax error on "def foo(x : (*Int32)); end" - gets corrects end location for "@foo" gets corrects end location for "@foo" - says syntax error on "case x; when nil; 2; when nil; end" says syntax error on "case x; when nil; 2; when nil; end" - says syntax error on "def foo(x : {sizeof(Int32), 2}); end" says syntax error on "def foo(x : {sizeof(Int32), 2}); end" - says syntax error on "class Foo(X\n,Y); 1; end" says syntax error on "class Foo(X\n,Y); 1; end" - gets corrects end location for "foo ->self.bar=" gets corrects end location for "foo ->self.bar=" - gets corrects end location for "abstract def foo(x)" gets corrects end location for "abstract def foo(x)" - says syntax error on "{1, 2\n,3}" says syntax error on "{1, 2\n,3}" - sets correct location of element in array literal sets correct location of element in array literal - says syntax error on "def foo(x\n,y); 1; end" says syntax error on "def foo(x\n,y); 1; end" - gets corrects end location for "foo ->@@bar.baz" gets corrects end location for "foo ->@@bar.baz" - gets corrects end location for "foo : Foo**" gets corrects end location for "foo : Foo**" - parses "%w{one\ntwo}" parses "%w{one\ntwo}" - gets corrects end location for "1 rescue 2" gets corrects end location for "1 rescue 2" - sets correct location of implicit tuple literal of multi-return sets correct location of implicit tuple literal of multi-return - says syntax error on "def foo(x : (Int32, Int32)); end" says syntax error on "def foo(x : (Int32, Int32)); end" - parses "%w{one\ttwo}" parses "%w{one\ttwo}" - sets correct locations of macro if / elsif sets correct locations of macro if / elsif - says syntax error on "%x(" says syntax error on "%x(" - says syntax error on "<<-HEREDOC\n" says syntax error on "<<-HEREDOC\n" - says syntax error on "Foo(X\n,Y)" says syntax error on "Foo(X\n,Y)" - gets corrects end location for "x : Foo -> Bar" gets corrects end location for "x : Foo -> Bar" - gets corrects end location for "extend Foo" gets corrects end location for "extend Foo" - sets correct location of var in proc pointer sets correct location of var in proc pointer - gets corrects end location for "abstract def foo" gets corrects end location for "abstract def foo" - sets location of += sets location of += - parses "%w{one\\}}" parses "%w{one\\}}" - gets corrects end location for "return" gets corrects end location for "return" - gets corrects end location for "{} of Int32 => String" gets corrects end location for "{} of Int32 => String" - gets correct location with - (#1558) gets correct location with - (#1558) - gets corrects end location for "123.45" gets corrects end location for "123.45" - sets correct location for fun def on multiple lines sets correct location for fun def on multiple lines - gets corrects end location for "foo ->bar=" gets corrects end location for "foo ->bar=" - says syntax error on "case x; when [1, 2]; 2; when [1, 2]; end" says syntax error on "case x; when [1, 2]; 2; when [1, 2]; end" - says syntax error on "case x; when \"a\"; 2; when \"a\"; end" says syntax error on "case x; when \"a\"; 2; when \"a\"; end" - gets corrects end location for "->{ }" gets corrects end location for "->{ }" - sets correct location of trailing ensure sets correct location of trailing ensure - gets corrects end location for "offsetof({X, Y}, 1)" gets corrects end location for "offsetof({X, Y}, 1)" - gets corrects end location for "struct Foo; end" gets corrects end location for "struct Foo; end" - gets corrects end location for "@@a = uninitialized Foo" gets corrects end location for "@@a = uninitialized Foo" - gets corrects end location for "!foo" gets corrects end location for "!foo" - gets corrects end location for "yield" gets corrects end location for "yield" - gets corrects end location for "begin; 1; 2; 3; end" gets corrects end location for "begin; 1; 2; 3; end" - gets corrects end location for "x : Foo ->" gets corrects end location for "x : Foo ->" - gets corrects end location for var + var gets corrects end location for var + var - gets corrects end location for "'a'" gets corrects end location for "'a'" - gets corrects end location for "foo **bar" gets corrects end location for "foo **bar" - says syntax error on "%w{{one}" says syntax error on "%w{{one}" - says syntax error on "case x; when 1, _; end" says syntax error on "case x; when 1, _; end" - parses "annotation Foo; end" parses "annotation Foo; end" - gets corrects end location for "a, b = 1, 2" gets corrects end location for "a, b = 1, 2" - gets corrects end location for "{1, 2}" gets corrects end location for "{1, 2}" - gets corrects end location for "if 1; elseif; 2; end" gets corrects end location for "if 1; elseif; 2; end" - gets corrects end location for "f.x=(*foo)" gets corrects end location for "f.x=(*foo)" - parses "%w{\n}" parses "%w{\n}" - gets corrects end location for "def foo; rescue ex; end" gets corrects end location for "def foo; rescue ex; end" - gets corrects end location for "typeof(1)" gets corrects end location for "typeof(1)" - says syntax error on "%r(" says syntax error on "%r(" - gets corrects end location for "[] of Int32" gets corrects end location for "[] of Int32" - gets corrects end location for "foo.[0] = 1" gets corrects end location for "foo.[0] = 1" - says syntax error on "case x; when 'a'; 2; when 'a'; end" says syntax error on "case x; when 'a'; 2; when 'a'; end" - gets corrects end location for "foo.responds_to? :foo" gets corrects end location for "foo.responds_to? :foo" - gets corrects end location for "Foo(A)" gets corrects end location for "Foo(A)" - gets corrects end location for "foo.nil?( )" gets corrects end location for "foo.nil?( )" - says syntax error on "macro foo(x\n,y); 1; end" says syntax error on "macro foo(x\n,y); 1; end" - gets corrects end location for "nil" gets corrects end location for "nil" - gets corrects end location for "begin; 1; end" gets corrects end location for "begin; 1; end" - parses "%w{one two}" parses "%w{one two}" - gets corrects end location for "foo.!" gets corrects end location for "foo.!" - gets corrects end location for "foo(1, 2)" gets corrects end location for "foo(1, 2)" - gets corrects end location for "a && b" gets corrects end location for "a && b" - gets corrects end location for "foo.bar= *baz" gets corrects end location for "foo.bar= *baz" - gets corrects end location for "x : Foo(A, *B, C)" gets corrects end location for "x : Foo(A, *B, C)" - gets corrects end location for "foo.responds_to?(:foo)" gets corrects end location for "foo.responds_to?(:foo)" - gets corrects end location for "[1, 2]" gets corrects end location for "[1, 2]" - gets corrects end location for "{a: 1}" gets corrects end location for "{a: 1}" - says syntax error on "%i{{one}" says syntax error on "%i{{one}" - says syntax error on "case x; when /x/; 2; when /x/; end" says syntax error on "case x; when /x/; 2; when /x/; end" - sets location of top-level fun name sets location of top-level fun name - gets corrects end location for "yield 1" gets corrects end location for "yield 1" - gets corrects end location for "Foo" gets corrects end location for "Foo" - says syntax error on "Foo(x: X\n,y: Y)" says syntax error on "Foo(x: X\n,y: Y)" - says syntax error on "def foo(x : Int32, Int32); end" says syntax error on "def foo(x : Int32, Int32); end" - gets corrects end location for "foo bar, out baz" gets corrects end location for "foo bar, out baz" - gets corrects end location for "foo.nil?" gets corrects end location for "foo.nil?" - gets corrects end location for "macro foo; 123; end" gets corrects end location for "macro foo; 123; end" - says syntax error on "foo(a: 1\n,b: 2)" says syntax error on "foo(a: 1\n,b: 2)" - sets correct location of call name in operator assignment sets correct location of call name in operator assignment - gets corrects end location for "alias Foo = Bar" gets corrects end location for "alias Foo = Bar" - says syntax error on "def foo(x : (Int32, Int32) | Int32); end" says syntax error on "def foo(x : (Int32, Int32) | Int32); end" - says syntax error on "<<-HEREDOC" says syntax error on "<<-HEREDOC" - says syntax error on "case x; when X; 2; when X; end" says syntax error on "case x; when X; 2; when X; end" - gets corrects end location for "1 ensure 2" gets corrects end location for "1 ensure 2" - sets correct location of receiver var in method def sets correct location of receiver var in method def - sets correct location for fun def with body sets correct location for fun def with body - parses "annotation Foo\n\nend" parses "annotation Foo\n\nend" - says syntax error on "{\"a\": 1, \"b\" : 2}" says syntax error on "{\"a\": 1, \"b\" : 2}" - says syntax error on "%w{one}}" says syntax error on "%w{one}}" - gets corrects end location for "class Foo; end" gets corrects end location for "class Foo; end" - gets corrects end location for "foo : Foo?" gets corrects end location for "foo : Foo?" - gets corrects end location for "foo ->Bar.baz" gets corrects end location for "foo ->Bar.baz" - correctly computes line number after `\{% -` (#9857) correctly computes line number after `\{% -` (#9857) - gets corrects end location for "1.as(Int32)" gets corrects end location for "1.as(Int32)" - parses "%i{foo\\nbar baz}" parses "%i{foo\\nbar baz}" - says syntax error on "[1\n,2]" says syntax error on "[1\n,2]" - says syntax error on "{1 => 2\n,3 => 4}" says syntax error on "{1 => 2\n,3 => 4}" - gets corrects end location for "offsetof(Foo, @a)" gets corrects end location for "offsetof(Foo, @a)" - sets correct location and end location of `begin` block sets correct location and end location of `begin` block - sets correct location and end location of parenthesized block sets correct location and end location of parenthesized block - parses "abstract def foo(x)" parses "abstract def foo(x)" - says syntax error on "break &** 1" says syntax error on "break &** 1" - parses "def |(); end" parses "def |(); end" - parses "->Foo.|(Int32)" parses "->Foo.|(Int32)" - parses "-1_i64" parses "-1_i64" - parses "def foo(\nvar\n); end" parses "def foo(\nvar\n); end" - parses "foo(&.as(T).bar)" parses "foo(&.as(T).bar)" - parses "property private : Int32" parses "property private : Int32" - parses "{{ foo }}" parses "{{ foo }}" - parses "def foo(@@false); end" parses "def foo(@@false); end" - parses "/ /" parses "/ /" - parses "def foo(x @@fun); end" parses "def foo(x @@fun); end" - parses "asm(\"nop\" :::: \"volatile\")" parses "asm(\"nop\" :::: \"volatile\")" - parses "enum Foo; @[Bar]; end" parses "enum Foo; @[Bar]; end" - parses "\u3042.\u3044, \u3046.\u3048.\u304A = 1, 2" parses "\u3042.\u3044, \u3046.\u3048.\u304A = 1, 2" - parses "foo.nil?" parses "foo.nil?" - parses "foo(a: n <= 2)" parses "foo(a: n <= 2)" - parses "if foo\n1\nend" parses "if foo\n1\nend" - parses "def foo=(value); end" parses "def foo=(value); end" - parses "a = 1; a >>= 1" parses "a = 1; a >>= 1" - says syntax error on "def foo(x : U) forall; end" says syntax error on "def foo(x : U) forall; end" - says syntax error on "<<-HERE\n One\nwrong\n Zero\n HERE" says syntax error on "<<-HERE\n One\nwrong\n Zero\n HERE" - parses "foo(x:\n begin\n result : Int32 = 1\n result\n end\n )" parses "foo(x:\n begin\n result : Int32 = 1\n result\n end\n )" - parses "sizeof(X)" parses "sizeof(X)" - parses "lib LibFoo\nend\nif true\nend" parses "lib LibFoo\nend\nif true\nend" - parses "def self./(); end;" parses "def self./(); end;" - parses "def !=(other, file = 1); end" parses "def !=(other, file = 1); end" - parses "foo.[]= 1, 2" parses "foo.[]= 1, 2" - parses "1/2" parses "1/2" - parses "def foo(@end); end" parses "def foo(@end); end" - parses "foo(&.responds_to?(:foo))" parses "foo(&.responds_to?(:foo))" - parses "def ==(other, file = 1); end" parses "def ==(other, file = 1); end" - parses "def !~(); end" parses "def !~(); end" - says syntax error on "def foo(*x, &x); end" says syntax error on "def foo(*x, &x); end" - parses "foo.>" parses "foo.>" - parses "Foo(\nT,\nU,\n)" parses "Foo(\nT,\nU,\n)" - parses "a = 1; a *=\n1" parses "a = 1; a *=\n1" - parses "macro foo;bar{% begin %}body{% end %}baz;end" parses "macro foo;bar{% begin %}body{% end %}baz;end" - parses "foo out x; x" parses "foo out x; x" - parses ":=~" parses ":=~" - says syntax error on "foo { |fun| }" says syntax error on "foo { |fun| }" - parses "*a = 1, 2" parses "*a = 1, 2" - says syntax error on "A = begin; 1; rescue; B = 1; end" says syntax error on "A = begin; 1; rescue; B = 1; end" - parses "1 +2" parses "1 +2" - says syntax error on "def foo\nextend\nend" says syntax error on "def foo\nextend\nend" - parses "(1 .. )" parses "(1 .. )" - parses "macro +;end" parses "macro +;end" - parses "def foo(x @@abstract); end" parses "def foo(x @@abstract); end" - parses "macro foo; 1 + 2; end" parses "macro foo; 1 + 2; end" - parses "foo + 1" parses "foo + 1" - parses "puts {{**1}}" parses "puts {{**1}}" - parses "n / 2" parses "n / 2" - parses "foo.bar = {} of Int32 => Int32" parses "foo.bar = {} of Int32 => Int32" - parses "def >=(); end;" parses "def >=(); end;" - parses "foo 1.bar do\nend" parses "foo 1.bar do\nend" - says syntax error on "foo { |(in)| }" says syntax error on "foo { |(in)| }" - says syntax error on "{\n\"foo\"\n\"bar\"\n}" says syntax error on "{\n\"foo\"\n\"bar\"\n}" - says syntax error on "a.[]() += 1" says syntax error on "a.[]() += 1" - parses "->::Foo.foo!" parses "->::Foo.foo!" - says syntax error on "a {} += 1" says syntax error on "a {} += 1" - parses "def **; end;" parses "def **; end;" - parses "def []=(*args, **opts); end" parses "def []=(*args, **opts); end" - parses "def self.^; end;" parses "def self.^; end;" - parses "foo = 1; ->foo.&(Int32)" parses "foo = 1; ->foo.&(Int32)" - parses "property pointerof : Int32" parses "property pointerof : Int32" - parses ":foo!" parses ":foo!" - says syntax error on "b? = 1" says syntax error on "b? = 1" - says syntax error on "Foo(\"\": T)" says syntax error on "Foo(\"\": T)" - says syntax error on "1 == 2, a = 4" says syntax error on "1 == 2, a = 4" - parses "4./(2)" parses "4./(2)" - parses "foo(n // 2)" parses "foo(n // 2)" - parses "case a\nwhen b\n/ /\n\nelse\n/ /\nend" parses "case a\nwhen b\n/ /\n\nelse\n/ /\nend" - parses "puts _" parses "puts _" - says syntax error on "def foo(foo begin); end" says syntax error on "def foo(foo begin); end" - says syntax error on "foo {1, 2}" says syntax error on "foo {1, 2}" - parses "foo.bar.baz" parses "foo.bar.baz" - parses "def self.!=(); end;" parses "def self.!=(); end;" - parses "Foo(\nx:\nT,\ny:\nU,\n)" parses "Foo(\nx:\nT,\ny:\nU,\n)" - says syntax error on "*a === 1" says syntax error on "*a === 1" - parses "foo(z: 0, a: n ^ 2)" parses "foo(z: 0, a: n ^ 2)" - says syntax error on "def foo(x, x); end" says syntax error on "def foo(x, x); end" - parses "macro foo;bar{% for x in y %}\\ \n body{% end %}\\ baz;end" parses "macro foo;bar{% for x in y %}\\ \n body{% end %}\\ baz;end" - parses "foo.[]=(1, 2)" parses "foo.[]=(1, 2)" - parses "puts __DIR__" parses "puts __DIR__" - says syntax error on "def =\nend" says syntax error on "def =\nend" - parses "def foo(@@include); end" parses "def foo(@@include); end" - parses "def foo(x @break); end" parses "def foo(x @break); end" - says syntax error on "macro as?; end" says syntax error on "macro as?; end" - parses "Int[8]?" parses "Int[8]?" - parses "->Foo.**(Int32)" parses "->Foo.**(Int32)" - says syntax error on "if break; end" says syntax error on "if break; end" - parses "foo = 1; ->foo.^(Int32)" parses "foo = 1; ->foo.^(Int32)" - parses "a b() {}" parses "a b() {}" - parses "{%\n1\n2\n3\n%}" parses "{%\n1\n2\n3\n%}" - parses "(1 ... )" parses "(1 ... )" - parses "/foo/" parses "/foo/" - parses "extend : Int32" parses "extend : Int32" - says syntax error on "def foo(foo def); end" says syntax error on "def foo(foo def); end" - parses "<<-HERE\n One\n \n Zero\n HERE" parses "<<-HERE\n One\n \n Zero\n HERE" - parses "foo(n | 2)" parses "foo(n | 2)" - says syntax error on "A = (B = 1)" says syntax error on "A = (B = 1)" - parses "macro >=;end" parses "macro >=;end" - parses "instance_sizeof : Int32" parses "instance_sizeof : Int32" - parses "a = 1; a /b" parses "a = 1; a /b" - parses "def foo(@unless); end" parses "def foo(@unless); end" - parses "Foo(1)" parses "Foo(1)" - parses "Foo({x: X, typeof: Y})" parses "Foo({x: X, typeof: Y})" - parses "macro foo(**args)\n1\nend" parses "macro foo(**args)\n1\nend" - parses "{foo:\"a\", bar:\"b\"}" parses "{foo:\"a\", bar:\"b\"}" - parses "macro `;end" parses "macro `;end" - parses "/ hi /" parses "/ hi /" - parses "foo(regex: //)" parses "foo(regex: //)" - parses "(bar do\nend)" parses "(bar do\nend)" - parses ":!~" parses ":!~" - parses "def foo(x @enum); end" parses "def foo(x @enum); end" - says syntax error on "macro foo x; 1 + 2; end" says syntax error on "macro foo x; 1 + 2; end" - says syntax error on "def foo(**args, x); end" says syntax error on "def foo(**args, x); end" - says syntax error on "break .. 1" says syntax error on "break .. 1" - parses "x.foo(a: 1, b: 2)" parses "x.foo(a: 1, b: 2)" - parses "foo 1, 2" parses "foo 1, 2" - parses "a, *b = 1, 2" parses "a, *b = 1, 2" - parses "def &**(); end" parses "def &**(); end" - parses "macro foo\n'\\\\'\nend" parses "macro foo\n'\\\\'\nend" - parses "a = 1; a <<=\n1" parses "a = 1; a <<=\n1" - parses ":\"\"" parses ":\"\"" - parses "foo out _" parses "foo out _" - parses "n >= 2" parses "n >= 2" - parses "{[] of Foo, Bar::Baz.new}" parses "{[] of Foo, Bar::Baz.new}" - says syntax error on "<<-HERE\n One\n \#{1}\n wrong\#{1}\n HERE" says syntax error on "<<-HERE\n One\n \#{1}\n wrong\#{1}\n HERE" - parses "foo(z: 0, a: n / 2)" parses "foo(z: 0, a: n / 2)" - says syntax error on "unless return; end" says syntax error on "unless return; end" - parses "def foo(@@nil); end" parses "def foo(@@nil); end" - parses "foo.!=(1, 2) { 3 }" parses "foo.!=(1, 2) { 3 }" - parses "foo.^(1, 2)" parses "foo.^(1, 2)" - parses "%r(\\/)" parses "%r(\\/)" - parses "a = 1; a ensure a" parses "a = 1; a ensure a" - parses "1+0" parses "1+0" - parses "foo.!~" parses "foo.!~" - parses "def foo(var : Char[N]); end" parses "def foo(var : Char[N]); end" - parses "a = 1; a /=\n1" parses "a = 1; a /=\n1" - parses "foo.**" parses "foo.**" - parses "abstract class Foo; end" parses "abstract class Foo; end" - parses "def foo(x @require); end" parses "def foo(x @require); end" - parses "'a'" parses "'a'" - parses "def foo(x @in); end" parses "def foo(x @in); end" - parses "x[0] ? 1 : 0" parses "x[0] ? 1 : 0" - parses "<<-HERE1; <<-HERE2\nhere1\nHERE1\nHERE2" parses "<<-HERE1; <<-HERE2\nhere1\nHERE1\nHERE2" - parses "foo = 1; ->foo.&+(Int32)" parses "foo = 1; ->foo.&+(Int32)" - parses "1 +2.0" parses "1 +2.0" - says syntax error on "def foo(foo macro); end" says syntax error on "def foo(foo macro); end" - says syntax error on "foo { |with| }" says syntax error on "foo { |with| }" - parses "foo.=~(1, 2) { 3 }" parses "foo.=~(1, 2) { 3 }" - says syntax error on "return.as(Int32)" says syntax error on "return.as(Int32)" - parses "lib : Int32" parses "lib : Int32" - says syntax error on "foo { |while| }" says syntax error on "foo { |while| }" - parses "property struct : Int32" parses "property struct : Int32" - parses "def foo(@@unless); end" parses "def foo(@@unless); end" - parses "x = 1 ensure 2" parses "x = 1 ensure 2" - parses "def >(); end;" parses "def >(); end;" - says syntax error on "foo { |select| }" says syntax error on "foo { |select| }" - parses "1 ... 2" parses "1 ... 2" - parses "foo %Q" parses "foo %Q" - parses "-> : Int32 { }" parses "-> : Int32 { }" - parses "f.x = - 1" parses "f.x = - 1" - parses "def self./(); end;" parses "def self./(); end;" - says syntax error on "1 unless break" says syntax error on "1 unless break" - parses "foo(a: n << 2)" parses "foo(a: n << 2)" - says syntax error on "foo { |offsetof| }" says syntax error on "foo { |offsetof| }" - says syntax error on "Foo(T U)" says syntax error on "Foo(T U)" - parses "def foo(&block); end" parses "def foo(&block); end" - parses "foo(a: n >= 2)" parses "foo(a: n >= 2)" - parses "def foo(x @offsetof); end" parses "def foo(x @offsetof); end" - parses "`foo\\``" parses "`foo\\``" - parses "foo.*" parses "foo.*" - parses "def foo(@@require); end" parses "def foo(@@require); end" - says syntax error on "def foo(in); end" says syntax error on "def foo(in); end" - parses "def foo(x @module); end" parses "def foo(x @module); end" - parses ":-" parses ":-" - says syntax error on "def foo(var = 1 : Int32); end" says syntax error on "def foo(var = 1 : Int32); end" - parses "def *; end;" parses "def *; end;" - says syntax error on "next | 1" says syntax error on "next | 1" - parses "case 1\nwhen .as?(T)\n2\nend" parses "case 1\nwhen .as?(T)\n2\nend" - parses "asm(\"nop\" :: : :)" parses "asm(\"nop\" :: : :)" - says syntax error on "break / 1" says syntax error on "break / 1" - parses "def foo(var : Int); end" parses "def foo(var : Int); end" - parses "<<-HERE\r\n One\r\n Zero\r\n HERE" parses "<<-HERE\r\n One\r\n Zero\r\n HERE" - parses "case 1\nwhen 1\n2\nend" parses "case 1\nwhen 1\n2\nend" - parses "{[] of Foo, Bar::Baz * 2}" parses "{[] of Foo, Bar::Baz * 2}" - parses "macro >>;end" parses "macro >>;end" - parses "foo *{1}" parses "foo *{1}" - parses "{% begin %}%Q{ %s }{% end %}" parses "{% begin %}%Q{ %s }{% end %}" - says syntax error on "def foo(begin); end" says syntax error on "def foo(begin); end" - says syntax error on "class Foo(T, T); end" says syntax error on "class Foo(T, T); end" - parses "1.as Bar" parses "1.as Bar" - parses "def foo(); 1; rescue; 2; end" parses "def foo(); 1; rescue; 2; end" - parses "responds_to?(:foo)" parses "responds_to?(:foo)" - says syntax error on "macro foo *y;end" says syntax error on "macro foo *y;end" - parses "foo(/ /, / /)" parses "foo(/ /, / /)" - parses "Foo(x: U)" parses "Foo(x: U)" - says syntax error on "break % 1" says syntax error on "break % 1" - says syntax error on "{foo: 1\nbar: 2}" says syntax error on "{foo: 1\nbar: 2}" - parses "def foo(x @class); end" parses "def foo(x @class); end" - parses "{% begin %}%r[\\A]{% end %}" parses "{% begin %}%r[\\A]{% end %}" - parses "select\nwhen foo\n2\nend" parses "select\nwhen foo\n2\nend" - says syntax error on "def foo(struct); end" says syntax error on "def foo(struct); end" - parses "def foo(a, & : Int -> Double); end" parses "def foo(a, & : Int -> Double); end" - parses "macro <<;end" parses "macro <<;end" - parses "macro foo;unless %var;true;end;end" parses "macro foo;unless %var;true;end;end" - parses "x = 1; ->{ x }" parses "x = 1; ->{ x }" - says syntax error on "\"\#{<<-HERE}\"\nHERE" says syntax error on "\"\#{<<-HERE}\"\nHERE" - parses "1 // 2" parses "1 // 2" - parses "1 * 2" parses "1 * 2" - says syntax error on "def foo(foo asm); end" says syntax error on "def foo(foo asm); end" - parses "1 >= 2" parses "1 >= 2" - says syntax error on "{1 => 2, 3 => 4 5 => 6}" says syntax error on "{1 => 2, 3 => 4 5 => 6}" - parses "foo { |(a, (b, (c, d)))| }" parses "foo { |(a, (b, (c, d)))| }" - parses "next;" parses "next;" - parses "def foo(x @next); end" parses "def foo(x @next); end" - parses "yield : Int32" parses "yield : Int32" - parses "<<-EOF.x\n foo\nEOF" parses "<<-EOF.x\n foo\nEOF" - says syntax error on "def foo=(*args); end" says syntax error on "def foo=(*args); end" - parses "def self.>; end;" parses "def self.>; end;" - parses "def foo(var = 1); end" parses "def foo(var = 1); end" - parses "def foo(var1, var2); end" parses "def foo(var1, var2); end" - parses "->@@foo.foo?" parses "->@@foo.foo?" - parses "foo.!=" parses "foo.!=" - says syntax error on "*a, 1 = 2" says syntax error on "*a, 1 = 2" - parses "def self.>(); end;" parses "def self.>(); end;" - parses "begin; 1; rescue ex : Foo | Bar; 2; end" parses "begin; 1; rescue ex : Foo | Bar; 2; end" - parses "foo = 1; ->foo.bar(Int32)" parses "foo = 1; ->foo.bar(Int32)" - parses "foo(\n begin\n result : Int32 = 1\n result\n end\n )" parses "foo(\n begin\n result : Int32 = 1\n result\n end\n )" - says syntax error on "next / 1" says syntax error on "next / 1" - parses "->::foo=" parses "->::foo=" - says syntax error on "{1, ->do\n|x| x\end }" says syntax error on "{1, ->do\n|x| x\end }" - parses "foo%Q" parses "foo%Q" - parses "def <<(); end" parses "def <<(); end" - says syntax error on "def foo(fun); end" says syntax error on "def foo(fun); end" - parses "class Foo; end" parses "class Foo; end" - says syntax error on "def foo(return); end" says syntax error on "def foo(return); end" - parses "a, b = 1, 2" parses "a, b = 1, 2" - says syntax error on "def foo(if); end" says syntax error on "def foo(if); end" - parses "foo.&(1, 2)" parses "foo.&(1, 2)" - parses "property ensure : Int32" parses "property ensure : Int32" - says syntax error on "def foo(true); end" says syntax error on "def foo(true); end" - parses "def foo(@abstract); end" parses "def foo(@abstract); end" - parses "def foo(x @private); end" parses "def foo(x @private); end" - says syntax error on "next &- 1" says syntax error on "next &- 1" - parses "def +(); end;" parses "def +(); end;" - parses "def >=(*args, **opts); end" parses "def >=(*args, **opts); end" - parses "def foo(def foo); end" parses "def foo(def foo); end" - parses "@[Foo::Bar]" parses "@[Foo::Bar]" - parses "case foo; end" parses "case foo; end" - parses "def foo(x = __LINE__); end" parses "def foo(x = __LINE__); end" - parses "def foo(@@end); end" parses "def foo(@@end); end" - parses "::T/1" parses "::T/1" - parses "private def foo; end" parses "private def foo; end" - parses "foo 1" parses "foo 1" - says syntax error on "<<-HERE\n One\n wrong\n Zero\n HERE" says syntax error on "<<-HERE\n One\n wrong\n Zero\n HERE" - says syntax error on "def foo(*a foo); end" says syntax error on "def foo(*a foo); end" - parses "extend self" parses "extend self" - parses "@foo = 1" parses "@foo = 1" - parses "def foo(x @fun); end" parses "def foo(x @fun); end" - parses "foo(0, n >> 2)" parses "foo(0, n >> 2)" - parses ":[]=" parses ":[]=" - parses "@[Foo()]" parses "@[Foo()]" - parses "asm : Int32" parses "asm : Int32" - parses "macro >;end" parses "macro >;end" - parses "property class : Int32" parses "property class : Int32" - parses "true" parses "true" - parses "foo.!= do end" parses "foo.!= do end" - parses ":[]?" parses ":[]?" - parses "case 1; when 1; 2; else; 3; end" parses "case 1; when 1; 2; else; 3; end" - parses "a = 1; a *= 1" parses "a = 1; a *= 1" - parses "def foo(x @sizeof); end" parses "def foo(x @sizeof); end" - parses "lib LibC\n$errno : B, C -> D\nend" parses "lib LibC\n$errno : B, C -> D\nend" - says syntax error on "next === 1" says syntax error on "next === 1" - parses "foo.+(1, 2)" parses "foo.+(1, 2)" - parses "foo(a: n * 2)" parses "foo(a: n * 2)" - parses "f.x Foo.new" parses "f.x Foo.new" - parses "macro foo(@[Foo] var);end" parses "macro foo(@[Foo] var);end" - says syntax error on "next[]" says syntax error on "next[]" - says syntax error on "case 1; when return; end; end" says syntax error on "case 1; when return; end; end" - parses "macro [];end" parses "macro [];end" - parses "enum Foo; A = 1\ndef foo; 1; end\ndef bar; 2; end\nend" parses "enum Foo; A = 1\ndef foo; 1; end\ndef bar; 2; end\nend" - parses "def foo(x @protected); end" parses "def foo(x @protected); end" - parses "f.x &= 2" parses "f.x &= 2" - parses "puts __FILE__" parses "puts __FILE__" - parses "class Foo < Bar; end" parses "class Foo < Bar; end" - says syntax error on "1 if return" says syntax error on "1 if return" - says syntax error on "def foo\nclass\nend" says syntax error on "def foo\nclass\nend" - says syntax error on "def foo\nmodule\nend" says syntax error on "def foo\nmodule\nend" - parses "macro foo(x, *y);end" parses "macro foo(x, *y);end" - parses "def ~; end;" parses "def ~; end;" - parses "until true; 1; end;" parses "until true; 1; end;" - says syntax error on "next <= 1" says syntax error on "next <= 1" - parses "foo(z: 0, a: n % 2)" parses "foo(z: 0, a: n % 2)" - says syntax error on "def foo @@var, █ end" says syntax error on "def foo @@var, █ end" - parses "macro !~;end" parses "macro !~;end" - says syntax error on "def foo(foo in); end" says syntax error on "def foo(foo in); end" - says syntax error on "A = foo { B = 1 }" says syntax error on "A = foo { B = 1 }" - says syntax error on "{a: 1, b: 2 c: 3}" says syntax error on "{a: 1, b: 2 c: 3}" - says syntax error on "1 as Bar" says syntax error on "1 as Bar" - parses "def foo(out foo); end" parses "def foo(out foo); end" - parses "&- 1" parses "&- 1" - parses "n &- 2" parses "n &- 2" - parses "a.b ^=\n1" parses "a.b ^=\n1" - says syntax error on "a = 1, 2, 3" says syntax error on "a = 1, 2, 3" - parses "def foo(end foo); end" parses "def foo(end foo); end" - says syntax error on "foo { |unless| }" says syntax error on "foo { |unless| }" - parses "1.is_a?(\n Int32\n)" parses "1.is_a?(\n Int32\n)" - parses "instance_sizeof(X)" parses "instance_sizeof(X)" - parses "->foo!" parses "->foo!" - parses "foo result : Int32; result" parses "foo result : Int32; result" - parses "1.as(\n Int32\n)" parses "1.as(\n Int32\n)" - parses "Foo(Bar())" parses "Foo(Bar())" - says syntax error on "def foo(foo next); end" says syntax error on "def foo(foo next); end" - says syntax error on "foo(return)" says syntax error on "foo(return)" - parses "n === 2" parses "n === 2" - calls with blocks within index operator (#12818) - parses "foo[bar { 1 }]" parses "foo[bar { 1 }]" - parses "foo[bar do; 1; end]" parses "foo[bar do; 1; end]" - parses "foo.[bar { 1 }]" parses "foo.[bar { 1 }]" - parses "foo.[](bar { 1 })" parses "foo.[](bar { 1 })" - parses "foo.[bar do; 1; end]" parses "foo.[bar do; 1; end]" - parses "foo.[](bar do; 1; end)" parses "foo.[](bar do; 1; end)" - parses "Foo(T, 1, U)" parses "Foo(T, 1, U)" - parses "x[a: 1, b: 2]" parses "x[a: 1, b: 2]" - parses "def foo(typeof foo); end" parses "def foo(typeof foo); end" - parses "def foo(x @def); end" parses "def foo(x @def); end" - says syntax error on "break ? 1 : 2" says syntax error on "break ? 1 : 2" - says syntax error on "def self.nil?; end" says syntax error on "def self.nil?; end" - parses "def foo(x @@until); end" parses "def foo(x @@until); end" - parses "def self.%(); end;" parses "def self.%(); end;" - parses "{} of Int => Double" parses "{} of Int => Double" - parses "@@foo = 1" parses "@@foo = 1" - parses "T/1" parses "T/1" - parses "macro foo;%var{1, x} = hello;end" parses "macro foo;%var{1, x} = hello;end" - parses "foo.-" parses "foo.-" - says syntax error on "def foo *y; 1; end" says syntax error on "def foo *y; 1; end" - parses "a = 1; yield a ensure a" parses "a = 1; yield a ensure a" - says syntax error on "*a, *b = 1" says syntax error on "*a, *b = 1" - says syntax error on "def foo(require); end" says syntax error on "def foo(require); end" - says syntax error on "foo { |(unless)| }" says syntax error on "foo { |(unless)| }" - parses "def foo(x @struct); end" parses "def foo(x @struct); end" - parses "puts %w(one two)" parses "puts %w(one two)" - parses "def ^(); end" parses "def ^(); end" - says syntax error on "foo.responds_to?" says syntax error on "foo.responds_to?" - says syntax error on "foo { |nil| }" says syntax error on "foo { |nil| }" - says syntax error on "def foo(foo instance_sizeof); end" says syntax error on "def foo(foo instance_sizeof); end" - parses "def /; end;" parses "def /; end;" - parses "foo %i" parses "foo %i" - parses "->Foo.<<(Int32)" parses "->Foo.<<(Int32)" - parses "unless : Int32" parses "unless : Int32" - says syntax error on "def foo\nfun\nend" says syntax error on "def foo\nfun\nend" - says syntax error on "def foo(sizeof); end" says syntax error on "def foo(sizeof); end" - parses "1 ensure 2 if 3" parses "1 ensure 2 if 3" - sets correct location of instance variable in proc pointer sets correct location of instance variable in proc pointer - parses "<<-'EOF'.x\n foo\nEOF" parses "<<-'EOF'.x\n foo\nEOF" - parses "{% begin %}%| %s |{% end %}" parses "{% begin %}%| %s |{% end %}" - says syntax error on "def foo(**args, *x); end" says syntax error on "def foo(**args, *x); end" - parses "false : Int32" parses "false : Int32" - parses "return" parses "return" - parses "foo %q" parses "foo %q" - parses "Int[8]" parses "Int[8]" - parses "nil?" parses "nil?" - parses "foo(a: n // 2)" parses "foo(a: n // 2)" - parses "foo(z: 0, a: n * 2)" parses "foo(z: 0, a: n * 2)" - parses "extend Foo\nif true; end" parses "extend Foo\nif true; end" - parses "def foo(@sizeof); end" parses "def foo(@sizeof); end" - parses "call \"foo\"" parses "call \"foo\"" - says syntax error on "[1 1]" says syntax error on "[1 1]" - says syntax error on "foo { |return| }" says syntax error on "foo { |return| }" - parses "lib LibC\nfun getch = GetChar\nend" parses "lib LibC\nfun getch = GetChar\nend" - parses "[] of ->\n1" parses "[] of ->\n1" - says syntax error on "->::foo.foo" says syntax error on "->::foo.foo" - says syntax error on "fun foo(x : Int32, x : Int64); end" says syntax error on "fun foo(x : Int32, x : Int64); end" - says syntax error on "return false foo" says syntax error on "return false foo" - parses "a.b >>=\n1" parses "a.b >>=\n1" - parses "foo { |a, (b, c), (d, e)| a; b; c; d; e }" parses "foo { |a, (b, c), (d, e)| a; b; c; d; e }" - says syntax error on "foo { |(break)| }" says syntax error on "foo { |(break)| }" - says syntax error on "(1, 2 3)" says syntax error on "(1, 2 3)" - parses "foo %w" parses "foo %w" - parses "foo(a: n == 2)" parses "foo(a: n == 2)" - parses "var.@foo.@bar" parses "var.@foo.@bar" - parses "foo.> 1, 2" parses "foo.> 1, 2" - parses "if (\ntrue\n)\n1\nend" parses "if (\ntrue\n)\n1\nend" - parses "::A::B" parses "::A::B" - says syntax error on "Hash{\"foo\": 1, \"bar\": 2}" says syntax error on "Hash{\"foo\": 1, \"bar\": 2}" - parses "foo.as(Bar)" parses "foo.as(Bar)" - says syntax error on "foo { |(sizeof)| }" says syntax error on "foo { |(sizeof)| }" - parses "property break : Int32" parses "property break : Int32" - says syntax error on "foo { |(extend)| }" says syntax error on "foo { |(extend)| }" - says syntax error on "while 1 == 1 a; end" says syntax error on "while 1 == 1 a; end" - parses "foo.=~ 1, 2" parses "foo.=~ 1, 2" - parses "def +(); end" parses "def +(); end" - parses "class Foo(Type); end" parses "class Foo(Type); end" - parses "fun foo : Int32; 1; end; 2" parses "fun foo : Int32; 1; end; 2" - parses "[\n1, 2]" parses "[\n1, 2]" - parses "def []=(value); end" parses "def []=(value); end" - parses "{%\nif 1; 2; end\n%}" parses "{%\nif 1; 2; end\n%}" - says syntax error on "alias Foo?" says syntax error on "alias Foo?" - says syntax error on "+return" says syntax error on "+return" - says syntax error on "def foo\nstruct\nend" says syntax error on "def foo\nstruct\nend" - parses "1 === 2" parses "1 === 2" - parses "Foo({String, ->, ->})" parses "Foo({String, ->, ->})" - parses "property asm : Int32" parses "property asm : Int32" - parses "def foo(@@true); end" parses "def foo(@@true); end" - says syntax error on "<<-HERE\n One\n \#{1}\n wrong\n HERE" says syntax error on "<<-HERE\n One\n \#{1}\n wrong\n HERE" - parses "def foo(x, *y : Int32); 1; end" parses "def foo(x, *y : Int32); 1; end" - parses "a = 1; a **= 1" parses "a = 1; a **= 1" - parses "/\\ /" parses "/\\ /" - parses "break 1, *2" parses "break 1, *2" - says syntax error on "macro foo(x : Int32); end" says syntax error on "macro foo(x : Int32); end" - parses "def foo; yield(1); end" parses "def foo; yield(1); end" - parses "def foo(x @@protected); end" parses "def foo(x @@protected); end" - parses "def foo(x @@break); end" parses "def foo(x @@break); end" - parses "property typeof : Int32" parses "property typeof : Int32" - parses "1 ensure 2" parses "1 ensure 2" - parses "case 1\nwhen .as(T)\n2\nend" parses "case 1\nwhen .as(T)\n2\nend" - says syntax error on "foo { |case| }" says syntax error on "foo { |case| }" - parses "def foo; end" parses "def foo; end" - says syntax error on "return[0]" says syntax error on "return[0]" - parses "def self.foo=\n1\nend" parses "def self.foo=\n1\nend" - parses "2**3**4" parses "2**3**4" - parses "foo %r()" parses "foo %r()" - says syntax error on "def self.responds_to?; end" says syntax error on "def self.responds_to?; end" - parses "foo(0, n & 2)" parses "foo(0, n & 2)" - says syntax error on "macro def foo : String; 1; end" says syntax error on "macro def foo : String; 1; end" - parses "macro &**;end" parses "macro &**;end" - parses "foo(n << 2)" parses "foo(n << 2)" - parses "Foo(T | U)" parses "Foo(T | U)" - parses "case / /; when / /; / /; else; / /; end" parses "case / /; when / /; / /; else; / /; end" - parses "begin 1 end / 2" parses "begin 1 end / 2" - parses "<<-HERE1; <<-HERE2\nHERE1\nHERE2" parses "<<-HERE1; <<-HERE2\nHERE1\nHERE2" - parses "foo.|(1, 2)" parses "foo.|(1, 2)" - says syntax error on "break ** 1" says syntax error on "break ** 1" - says syntax error on "foo &.||()" says syntax error on "foo &.||()" - says syntax error on "1 then" says syntax error on "1 then" - parses "foo.=~(1, 2)" parses "foo.=~(1, 2)" - says syntax error on "1 .. return" says syntax error on "1 .. return" - parses "Int[8, 4,]" parses "Int[8, 4,]" - parses "foo(n ** 2)" parses "foo(n ** 2)" - parses "a = 1; a ^= 1" parses "a = 1; a ^= 1" - parses "->Foo.//(Int32)" parses "->Foo.//(Int32)" - parses "foo\n #comment\n .bar" parses "foo\n #comment\n .bar" - says syntax error on "false foo" says syntax error on "false foo" - parses "abstract : Int32" parses "abstract : Int32" - parses "def : Int32" parses "def : Int32" - parses "1 -2_i64" parses "1 -2_i64" - parses "macro foo;bar{% if x %}body{% end %}baz;end" parses "macro foo;bar{% if x %}body{% end %}baz;end" - parses "1 ** -x" parses "1 ** -x" - parses "foo &.as?(T)" parses "foo &.as?(T)" - parses "1 <=> 2" parses "1 <=> 2" - says syntax error on "foo { |asm| }" says syntax error on "foo { |asm| }" - says syntax error on "Foo(T, x: U)" says syntax error on "Foo(T, x: U)" - parses "->::Foo.foo=" parses "->::Foo.foo=" - parses "foo.>(1, 2) { 3 }" parses "foo.>(1, 2) { 3 }" - parses "1.!" parses "1.!" - parses "->Foo.>=(Int32)" parses "->Foo.>=(Int32)" - says syntax error on "foo[return]" says syntax error on "foo[return]" - parses "{/ / => / /, / / => / /}" parses "{/ / => / /, / / => / /}" - parses ":>>" parses ":>>" - parses "foo..2" parses "foo..2" - says syntax error on "a += 1" says syntax error on "a += 1" - parses "foo\n.bar" parses "foo\n.bar" - parses "/fo\#{1}o/" parses "/fo\#{1}o/" - parses "foo = 1; ->foo.<=(Int32)" parses "foo = 1; ->foo.<=(Int32)" - parses "case 1\nwhen 1\n2\nelse\n3\nend" parses "case 1\nwhen 1\n2\nelse\n3\nend" - says syntax error on "def foo(next); end" says syntax error on "def foo(next); end" - parses "foo.!~ 1, 2" parses "foo.!~ 1, 2" - parses "n ^ 2" parses "n ^ 2" - parses "def foo(true foo); end" parses "def foo(true foo); end" - says syntax error on "enum Foo; A B; end" says syntax error on "enum Foo; A B; end" - parses "while : Int32" parses "while : Int32" - parses "r = 1; r.x += 2" parses "r = 1; r.x += 2" - says syntax error on "def self.as; end" says syntax error on "def self.as; end" - says syntax error on "def foo(foo private); end" says syntax error on "def foo(foo private); end" - says syntax error on "def foo(foo offsetof); end" says syntax error on "def foo(foo offsetof); end" - parses "n &* 2" parses "n &* 2" - parses "foo.* do end" parses "foo.* do end" - parses "def foo(x @@pointerof); end" parses "def foo(x @@pointerof); end" - parses "def foo(@with); end" parses "def foo(@with); end" - parses "foo.bar" parses "foo.bar" - parses "property include : Int32" parses "property include : Int32" - parses "{1}" parses "{1}" - parses "def foo(x : *T -> R); end" parses "def foo(x : *T -> R); end" - says syntax error on "def foo(x y, x z); end" says syntax error on "def foo(x y, x z); end" - parses "protected : Int32" parses "protected : Int32" - parses "->Foo.<(Int32)" parses "->Foo.<(Int32)" - says syntax error on "return >> 1" says syntax error on "return >> 1" - parses "def self.!=; end;" parses "def self.!=; end;" - parses "a ? 1 : b ? 2 : c ? 3 : 0" parses "a ? 1 : b ? 2 : c ? 3 : 0" - parses "foo.<= 1, 2" parses "foo.<= 1, 2" - parses "{foo:'a', bar:'b'}" parses "{foo:'a', bar:'b'}" - parses "foo.== do end" parses "foo.== do end" - parses "def foo; x { |_| 1 }; end" parses "def foo; x { |_| 1 }; end" - parses "1\\\n + 2" parses "1\\\n + 2" - parses "case {1}\nin {nil}; 2; end" parses "case {1}\nin {nil}; 2; end" - parses "->Foo.&-(Int32)" parses "->Foo.&-(Int32)" - parses "def foo(x @lib); end" parses "def foo(x @lib); end" - says syntax error on "return * 1" says syntax error on "return * 1" - parses ":&" parses ":&" - parses "1 < 2" parses "1 < 2" - parses "break {1, 2}" parses "break {1, 2}" - says syntax error on "def self.as?; end" says syntax error on "def self.as?; end" - parses "foo = 1; ->foo.&*(Int32)" parses "foo = 1; ->foo.&*(Int32)" - parses "end : Int32" parses "end : Int32" - says syntax error on "def foo=(&block); end" says syntax error on "def foo=(&block); end" - parses "def |(); end;" parses "def |(); end;" - parses "->::Foo.foo?" parses "->::Foo.foo?" - parses "macro foo(\na = 0\n)\nend" parses "macro foo(\na = 0\n)\nend" - says syntax error on ":bar foo" says syntax error on ":bar foo" - parses "def foo(&); end" parses "def foo(&); end" - parses "a.foo, *a.bar = 1" parses "a.foo, *a.bar = 1" - says syntax error on "def foo(typeof); end" says syntax error on "def foo(typeof); end" - parses ":*" parses ":*" - says syntax error on "Foo(x: T y: U)" says syntax error on "Foo(x: T y: U)" - says syntax error on "b, 1 == 2, a = 4" says syntax error on "b, 1 == 2, a = 4" - parses "case 1\nwhen .foo\n2\nend" parses "case 1\nwhen .foo\n2\nend" - says syntax error on "case 1\nin Int32; 2; else" says syntax error on "case 1\nin Int32; 2; else" - parses "[1] /2" parses "[1] /2" - parses "case\n1\nwhen 1\n2\nend\nif a\nend" parses "case\n1\nwhen 1\n2\nend\nif a\nend" - parses "def foo(@@if); end" parses "def foo(@@if); end" - says syntax error on "def foo @var, █ end" says syntax error on "def foo @var, █ end" - parses "def foo(x : U) : Int32 forall T, U; end" parses "def foo(x : U) : Int32 forall T, U; end" - parses "->foo?" parses "->foo?" - parses "class Foo < self; end" parses "class Foo < self; end" - parses "foo 1, a: 1, b: 2" parses "foo 1, a: 1, b: 2" - parses "2 * (3 + 4)" parses "2 * (3 + 4)" - parses "[1, 2] of Int" parses "[1, 2] of Int" - says syntax error on "next.foo" says syntax error on "next.foo" - parses "{\"foo\": 1}" parses "{\"foo\": 1}" - parses "foo(0, n // 2)" parses "foo(0, n // 2)" - says syntax error on "<<-FOO\n1\nFOO.bar" says syntax error on "<<-FOO\n1\nFOO.bar" - says syntax error on "foo(\"\": 1)" says syntax error on "foo(\"\": 1)" - says syntax error on "next[0]" says syntax error on "next[0]" - parses "lib LibC; fun foo(a : Int**); end" parses "lib LibC; fun foo(a : Int**); end" - says syntax error on "def responds_to?; end" says syntax error on "def responds_to?; end" - says syntax error on "def foo(foo module); end" says syntax error on "def foo(foo module); end" - parses "{% begin %}%i[ %s ]{% end %}" parses "{% begin %}%i[ %s ]{% end %}" - parses "foo.&" parses "foo.&" - parses "return if true" parses "return if true" - parses "def self.=~; end;" parses "def self.=~; end;" - parses "property offsetof : Int32" parses "property offsetof : Int32" - parses "pointerof(@a)" parses "pointerof(@a)" - parses "1;+2" parses "1;+2" - parses "foo ensure 2" parses "foo ensure 2" - says syntax error on "def foo(*args = 1); end" says syntax error on "def foo(*args = 1); end" - parses "lib LibC; type A = B; end" parses "lib LibC; type A = B; end" - says syntax error on "def foo; require \"bar\"; end" says syntax error on "def foo; require \"bar\"; end" - parses "1 &- 2" parses "1 &- 2" - parses "def foo(x @@macro); end" parses "def foo(x @@macro); end" - says syntax error on "def self.!; end" says syntax error on "def self.!; end" - parses "a = 1; a &&= 1" parses "a = 1; a &&= 1" - parses "{% for _, x, _ in y %}body{% end %}" parses "{% for _, x, _ in y %}body{% end %}" - says syntax error on "break > 1" says syntax error on "break > 1" - parses "n !~ 2" parses "n !~ 2" - parses "yield;" parses "yield;" - parses "property when : Int32" parses "property when : Int32" - says syntax error on "macro foo(*x, *y); end" says syntax error on "macro foo(*x, *y); end" - parses "f.x ^= 2" parses "f.x ^= 2" - parses "def /(); end" parses "def /(); end" - parses "foo 1, **bar, &block" parses "foo 1, **bar, &block" - says syntax error on "Hash{\"foo\": 1}" says syntax error on "Hash{\"foo\": 1}" - parses "def self.+(); end;" parses "def self.+(); end;" - says syntax error on "def foo(offsetof); end" says syntax error on "def foo(offsetof); end" - parses "a : Foo[12]" parses "a : Foo[12]" - says syntax error on "case 1 == 1 a; when 2; end" says syntax error on "case 1 == 1 a; when 2; end" - parses "/ /" parses "/ /" - parses "def ==(); end" parses "def ==(); end" - parses "foo **bar" parses "foo **bar" - parses "2 / 3 + 4 / 5" parses "2 / 3 + 4 / 5" - says syntax error on "1 .. next" says syntax error on "1 .. next" - parses "foo = 1; ->foo./(Int32)" parses "foo = 1; ->foo./(Int32)" - parses "->Foo.foo!" parses "->Foo.foo!" - parses "{1.. => 2};" parses "{1.. => 2};" - parses "if foo.responds_to? :foo\nx = 1\nend" parses "if foo.responds_to? :foo\nx = 1\nend" - parses "module : Int32" parses "module : Int32" - says syntax error on "def foo=(a = 1, b = 2); end" says syntax error on "def foo=(a = 1, b = 2); end" - says syntax error on "foo { |(macro)| }" says syntax error on "foo { |(macro)| }" - parses "foo.-(1, 2)" parses "foo.-(1, 2)" - parses "foo(&.as?(T))" parses "foo(&.as?(T))" - says syntax error on "foo { |(asm)| }" says syntax error on "foo { |(asm)| }" - parses "->Foo.[](Int32)" parses "->Foo.[](Int32)" - parses "n + 2" parses "n + 2" - parses "a, b, *c = 1, 2" parses "a, b, *c = 1, 2" - says syntax error on "foo.||()" says syntax error on "foo.||()" - says syntax error on "break when true" says syntax error on "break when true" - parses "case 1\nin .bar?; 2; end" parses "case 1\nin .bar?; 2; end" - says syntax error on "foo { |(def)| }" says syntax error on "foo { |(def)| }" - parses "lib LibC\nfun getchar(a : Int, b : Float) : Int\nend" parses "lib LibC\nfun getchar(a : Int, b : Float) : Int\nend" - parses "def foo(x @@true); end" parses "def foo(x @@true); end" - says syntax error on "def foo(with); end" says syntax error on "def foo(with); end" - says syntax error on "1 .. break" says syntax error on "1 .. break" - parses "begin; 1; rescue Foo; 2; end" parses "begin; 1; rescue Foo; 2; end" - parses "foo%x" parses "foo%x" - parses "begin; / /; end" parses "begin; / /; end" - parses "macro foo;bar{% if x %}body{% else %}body2{%end%}baz;end" parses "macro foo;bar{% if x %}body{% else %}body2{%end%}baz;end" - parses "puts __LINE__" parses "puts __LINE__" - parses "f.x >>= 2" parses "f.x >>= 2" - parses "A = 1" parses "A = 1" - parses "def foo(x @@private); end" parses "def foo(x @@private); end" - parses "Foo(T, {x: X})" parses "Foo(T, {x: X})" - parses "def foo(return foo); end" parses "def foo(return foo); end" - parses "foo(Bar { 1 })" parses "foo(Bar { 1 })" - says syntax error on "foo { |x, (x)| }" says syntax error on "foo { |x, (x)| }" - parses "foo\n\n .bar" parses "foo\n\n .bar" - says syntax error on "def foo(break); end" says syntax error on "def foo(break); end" - parses "a, b = 1, 2 if 3" parses "a, b = 1, 2 if 3" - parses "@[Foo(1, foo: 2)]" parses "@[Foo(1, foo: 2)]" - parses "def foo(x @@extend); end" parses "def foo(x @@extend); end" - says syntax error on "Hash {foo: 1} of Int32 => Int32" says syntax error on "Hash {foo: 1} of Int32 => Int32" - parses "Foo({\"foo bar\": X})" parses "Foo({\"foo bar\": X})" - says syntax error on "foo { |(alias)| }" says syntax error on "foo { |(alias)| }" - says syntax error on "break ^ 1" says syntax error on "break ^ 1" - parses "foo &.[0]" parses "foo &.[0]" - says syntax error on "macro foo(**x, **y)" says syntax error on "macro foo(**x, **y)" - parses "def foo(@@class); end" parses "def foo(@@class); end" - parses "foo.- 1, 2" parses "foo.- 1, 2" - parses "class Foo(*T); end" parses "class Foo(*T); end" - parses "a = 1; (a)/b" parses "a = 1; (a)/b" - says syntax error on "foo { |until| }" says syntax error on "foo { |until| }" - parses "foo = 1; ->foo.>>(Int32)" parses "foo = 1; ->foo.>>(Int32)" - says syntax error on "foo { |x, x| }" says syntax error on "foo { |x, x| }" - parses " macro foo(\n @[Foo]\n id,\n @[Bar] name\n );end" parses " macro foo(\n @[Foo]\n id,\n @[Bar] name\n );end" - parses "f.x <<= 2" parses "f.x <<= 2" - says syntax error on "case {1, 2}; when {3}; 4; end" says syntax error on "case {1, 2}; when {3}; 4; end" - sets correct location of argument in named tuple type sets correct location of argument in named tuple type - parses "def foo(instance_sizeof foo); end" parses "def foo(instance_sizeof foo); end" - says syntax error on "foo { |yield| }" says syntax error on "foo { |yield| }" - says syntax error on "break + 1" says syntax error on "break + 1" - parses "x[{1}]" parses "x[{1}]" - parses "foo = 1; foo &x" parses "foo = 1; foo &x" - parses "def foo(@asm); end" parses "def foo(@asm); end" - parses "(bar {})" parses "(bar {})" - parses "def foo(x @@def); end" parses "def foo(x @@def); end" - parses "->Foo.^(Int32)" parses "->Foo.^(Int32)" - parses "->Foo.foo=" parses "->Foo.foo=" - says syntax error on "enum Foo < UInt16; end" says syntax error on "enum Foo < UInt16; end" - parses "{{ 1 // 2 }}" parses "{{ 1 // 2 }}" - parses "macro foo\n\"\\'\"\nend" parses "macro foo\n\"\\'\"\nend" - parses "1 rescue 2" parses "1 rescue 2" - parses "\"hello \" \\\r\n \"world\"" parses "\"hello \" \\\r\n \"world\"" - says syntax error on "def foo(*x, **x); end" says syntax error on "def foo(*x, **x); end" - parses "foo.>(1, 2)" parses "foo.>(1, 2)" - parses "return 1 if true" parses "return 1 if true" - parses "foo(n >= 2)" parses "foo(n >= 2)" - parses "foo &.block[0] = 1" parses "foo &.block[0] = 1" - parses "def >=(); end" parses "def >=(); end" - says syntax error on "def foo(foo case); end" says syntax error on "def foo(foo case); end" - parses "class Foo\nend" parses "class Foo\nend" - parses "{[] of Foo, Bar::Baz + 2}" parses "{[] of Foo, Bar::Baz + 2}" - parses "@a : Foo" parses "@a : Foo" - parses "%r(\\ )" parses "%r(\\ )" - parses "1 == 2 == 3 == 4" parses "1 == 2 == 3 == 4" - parses "foo = 1; ->foo.*(Int32)" parses "foo = 1; ->foo.*(Int32)" - parses "def foo(x @@var); end" parses "def foo(x @@var); end" - parses "\"hello \#{1}\" \\\n \"\#{2} world\"" parses "\"hello \#{1}\" \\\n \"\#{2} world\"" - parses "foo%r" parses "foo%r" - parses "next 1, 2" parses "next 1, 2" - parses "foo(a: n === 2)" parses "foo(a: n === 2)" - parses "foo.**(1, 2) { 3 }" parses "foo.**(1, 2) { 3 }" - parses "->::Foo.foo" parses "->::Foo.foo" - parses "Set() {1, 2, 3}" parses "Set() {1, 2, 3}" - parses "def self.>=; end;" parses "def self.>=; end;" - parses "{% begin %}%[ %s ]{% end %}" parses "{% begin %}%[ %s ]{% end %}" - parses "->@foo.foo!" parses "->@foo.foo!" - parses "lib LibC\nfun getchar : Int\nend" parses "lib LibC\nfun getchar : Int\nend" - parses "{% begin %}%w< %s >{% end %}" parses "{% begin %}%w< %s >{% end %}" - parses "->@@foo.foo" parses "->@@foo.foo" - parses "macro foo;bar(end: 1);end" parses "macro foo;bar(end: 1);end" - parses "struct Foo; end" parses "struct Foo; end" - parses "do : Int32" parses "do : Int32" - says syntax error on "a.b() = 1" says syntax error on "a.b() = 1" - says syntax error on "def foo(foo struct); end" says syntax error on "def foo(foo struct); end" - parses "def foo(a, &block : Int -> ); end" parses "def foo(a, &block : Int -> ); end" - says syntax error on "return + 1" says syntax error on "return + 1" - parses "1 > 2" parses "1 > 2" - parses "def foo(@[Foo] var : Int32); end" parses "def foo(@[Foo] var : Int32); end" - parses "foo.!.!" parses "foo.!.!" - parses "def foo(x)\n x\nend; foo = 1; b = 2; foo +b" parses "def foo(x)\n x\nend; foo = 1; b = 2; foo +b" - parses "def foo(var : Int*); end" parses "def foo(var : Int*); end" - parses "nil : Int32" parses "nil : Int32" - parses "{[] of Foo, ::Bar::Baz.new}" parses "{[] of Foo, ::Bar::Baz.new}" - parses "def -; end;" parses "def -; end;" - parses "case 1\nwhen .is_a?(T)\n2\nend" parses "case 1\nwhen .is_a?(T)\n2\nend" - parses "->Foo./(Int32)" parses "->Foo./(Int32)" - parses "property abstract : Int32" parses "property abstract : Int32" - says syntax error on "def foo(protected); end" says syntax error on "def foo(protected); end" - parses "foo.>=" parses "foo.>=" - says syntax error on "foo.&&" says syntax error on "foo.&&" - parses "{{ foo &.nil? }}" parses "{{ foo &.nil? }}" - parses "typeof(1)" parses "typeof(1)" - parses "@a, b = 1, 2" parses "@a, b = 1, 2" - parses "enum Foo; protected def foo; 1; end; end" parses "enum Foo; protected def foo; 1; end; end" - parses "lib LibC; struct Foo; x, y, z : Int; end end" parses "lib LibC; struct Foo; x, y, z : Int; end end" - parses "a @b-1\nc" parses "a @b-1\nc" - says syntax error on "foo { |break| }" says syntax error on "foo { |break| }" - parses "property case : Int32" parses "property case : Int32" - says syntax error on "foo(1 2)" says syntax error on "foo(1 2)" - says syntax error on "def foo\nlib\nend" says syntax error on "def foo\nlib\nend" - parses "macro foo;bar{% for x, y in z %}body{% end %}baz;end" parses "macro foo;bar{% for x, y in z %}body{% end %}baz;end" - parses "def self.%; end;" parses "def self.%; end;" - parses "macro foo;bar{% for x in y %}\\ \n body{% end %}baz;end" parses "macro foo;bar{% for x in y %}\\ \n body{% end %}baz;end" - parses "enum Foo; A = 1\ndef foo; 1; end; end" parses "enum Foo; A = 1\ndef foo; 1; end; end" - parses "break *1, 2" parses "break *1, 2" - says syntax error on "def foo(x = 1, y); end" says syntax error on "def foo(x = 1, y); end" - parses "foo = 1; foo a: 1" parses "foo = 1; foo a: 1" - parses "foo = 1; ->foo.>=(Int32)" parses "foo = 1; ->foo.>=(Int32)" - parses "def foo(@nil); end" parses "def foo(@nil); end" - parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) ::)" parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) ::)" - parses "foo(z: 0, a: n &+ 2)" parses "foo(z: 0, a: n &+ 2)" - says syntax error on "next // 1" says syntax error on "next // 1" - parses "\"foo\"" parses "\"foo\"" - parses "property true : Int32" parses "property true : Int32" - parses "def foo(**args)\nargs\nend" parses "def foo(**args)\nargs\nend" - parses "1.[](2)" parses "1.[](2)" - says syntax error on "def foo\nmacro\nend" says syntax error on "def foo\nmacro\nend" - parses "foo(n + 2)" parses "foo(n + 2)" - says syntax error on "def foo(x, **x); end" says syntax error on "def foo(x, **x); end" - parses "1 \\\n + 2" parses "1 \\\n + 2" - parses "1 >> 2" parses "1 >> 2" - says syntax error on "def foo(\"bar\");end" says syntax error on "def foo(\"bar\");end" - parses "property fun : Int32" parses "property fun : Int32" - says syntax error on "foo { |alias| }" says syntax error on "foo { |alias| }" - parses "a = 1; pointerof(a)" parses "a = 1; pointerof(a)" - says syntax error on "@:Foo" says syntax error on "@:Foo" - parses "foo(0, n / 2)" parses "foo(0, n / 2)" - parses "foo.=== 1, 2" parses "foo.=== 1, 2" - says syntax error on "1 ... next" says syntax error on "1 ... next" - says syntax error on "def foo?=(x); end" says syntax error on "def foo?=(x); end" - parses "def foo(yield foo); end" parses "def foo(yield foo); end" - says syntax error on "$foo" says syntax error on "$foo" - parses "def foo(x, **args, &block)\n1\nend" parses "def foo(x, **args, &block)\n1\nend" - parses "n ** 2" parses "n ** 2" - parses "{\n1,\n2\n}" parses "{\n1,\n2\n}" - says syntax error on " [1, 2, 3 end" says syntax error on " [1, 2, 3 end" - parses "foo.nil?( )" parses "foo.nil?( )" - parses "{% begin %}%x( %s ){% end %}" parses "{% begin %}%x( %s ){% end %}" - parses "def foo(var : Int32 -> = 1); end" parses "def foo(var : Int32 -> = 1); end" - parses "puts {{*1}}" parses "puts {{*1}}" - parses "def foo(x @@offsetof); end" parses "def foo(x @@offsetof); end" - parses "foo(bar:a, baz:b)" parses "foo(bar:a, baz:b)" - parses "lib LibC; struct Foo; x : Int*; end end" parses "lib LibC; struct Foo; x : Int*; end end" - parses "sizeof(\n Int32\n)" parses "sizeof(\n Int32\n)" - says syntax error on "case when .foo? then 1; end" says syntax error on "case when .foo? then 1; end" - parses "def self.===(); end;" parses "def self.===(); end;" - says syntax error on "1 if break" says syntax error on "1 if break" - parses "n // 2" parses "n // 2" - parses "foo = 1; b = 2; foo +b" parses "foo = 1; b = 2; foo +b" - parses "foo = 1; ->foo.[]=(Int32)" parses "foo = 1; ->foo.[]=(Int32)" - parses "<<-HERE\n One \\n Two\n Zero\n HERE" parses "<<-HERE\n One \\n Two\n Zero\n HERE" - parses "def foo(x @@lib); end" parses "def foo(x @@lib); end" - parses "def foo(@if); end" parses "def foo(@if); end" - says syntax error on "foo { |require| }" says syntax error on "foo { |require| }" - parses "+ 1" parses "+ 1" - parses "until true; end;" parses "until true; end;" - says syntax error on "def foo(foo true); end" says syntax error on "def foo(foo true); end" - parses "def **(); end" parses "def **(); end" - parses "def foo(a, &block : self -> self); end" parses "def foo(a, &block : self -> self); end" - parses "def foo(x @@yield); end" parses "def foo(x @@yield); end" - says syntax error on "def foo; A = 1; end" says syntax error on "def foo; A = 1; end" - parses "def foo(@struct); end" parses "def foo(@struct); end" - says syntax error on "def foo(x @@x); 1; end" says syntax error on "def foo(x @@x); 1; end" - parses "1 + 2" parses "1 + 2" - parses "foo(0, n == 2)" parses "foo(0, n == 2)" - says syntax error on "def foo(lib); end" says syntax error on "def foo(lib); end" - parses "_, _ = 1, 2" parses "_, _ = 1, 2" - parses "foo(a: n &+ 2)" parses "foo(a: n &+ 2)" - says syntax error on "break < 1" says syntax error on "break < 1" - parses "1 * 2" parses "1 * 2" - parses "{% begin %}%Q| %s |{% end %}" parses "{% begin %}%Q| %s |{% end %}" - parses "class Foo(T1); end" parses "class Foo(T1); end" - parses "a : Foo()*" parses "a : Foo()*" - parses "a = 1; a %=\n1" parses "a = 1; a %=\n1" - parses "Foo(T, 1)" parses "Foo(T, 1)" - parses "foo(1.., 2)" parses "foo(1.., 2)" - parses "break if true" parses "break if true" - says syntax error on "1 ... return" says syntax error on "1 ... return" - parses "{% a = 1 %}" parses "{% a = 1 %}" - says syntax error on "def foo(macro); end" says syntax error on "def foo(macro); end" - parses "def &*(); end" parses "def &*(); end" - parses "a = 1; class Foo; @x = a; end" parses "a = 1; class Foo; @x = a; end" - parses "[..2]" parses "[..2]" - parses "<<-HERE\n \#{1} \\n \#{2}\n HERE" parses "<<-HERE\n \#{1} \\n \#{2}\n HERE" - parses "a = 1; a **=\n1" parses "a = 1; a **=\n1" - says syntax error on "foo { |abstract| }" says syntax error on "foo { |abstract| }" - parses "1 << 2" parses "1 << 2" - parses "def foo(x @@nil); end" parses "def foo(x @@nil); end" - parses "foo(z: 0, a: n === 2)" parses "foo(z: 0, a: n === 2)" - parses "->() : Int32 do end" parses "->() : Int32 do end" - parses "when : Int32" parses "when : Int32" - parses "lib LibC\nfun getchar(Int, Float)\nend" parses "lib LibC\nfun getchar(Int, Float)\nend" - says syntax error on "next ? 1 : 2" says syntax error on "next ? 1 : 2" - parses "foo(a: 1, b: 2)" parses "foo(a: 1, b: 2)" - says syntax error on "lib LibC\n$Errno : Int32\nend" says syntax error on "lib LibC\n$Errno : Int32\nend" - says syntax error on "def foo &block ; end" says syntax error on "def foo &block ; end" - parses "foo.!" parses "foo.!" - parses "foo.>=(1, 2) { 3 }" parses "foo.>=(1, 2) { 3 }" - parses "a = /=/" parses "a = /=/" - says syntax error on "next .. 1" says syntax error on "next .. 1" - parses "def foo(@@while); end" parses "def foo(@@while); end" - says syntax error on "return[]" says syntax error on "return[]" - parses "macro %;end" parses "macro %;end" - says syntax error on "def foo(class); end" says syntax error on "def foo(class); end" - says syntax error on "def foo(foo class); end" says syntax error on "def foo(foo class); end" - parses "foo(z: 0, a: n | 2)" parses "foo(z: 0, a: n | 2)" - parses "def self.==(); end;" parses "def self.==(); end;" - parses "foo(&block)" parses "foo(&block)" - parses "foo(..2)" parses "foo(..2)" - parses "case {1}\nin {Foo(Int32)}; 2; end" parses "case {1}\nin {Foo(Int32)}; 2; end" - parses "->foo" parses "->foo" - parses "foo(a: n =~ 2)" parses "foo(a: n =~ 2)" - parses "def foo(@extend); end" parses "def foo(@extend); end" - parses "1 / 2" parses "1 / 2" - parses "struct : Int32" parses "struct : Int32" - parses "def self.*(); end;" parses "def self.*(); end;" - parses "(1)\nif true; end" parses "(1)\nif true; end" - parses "a = / /" parses "a = / /" - parses "def &+(); end" parses "def &+(); end" - parses "def foo(@@return); end" parses "def foo(@@return); end" - parses "@@a, b = 1, 2" parses "@@a, b = 1, 2" - parses "1 if 3" parses "1 if 3" - says syntax error on "def foo:String\nend" says syntax error on "def foo:String\nend" - parses "property extend : Int32" parses "property extend : Int32" - says syntax error on "def foo(&a foo); end" says syntax error on "def foo(&a foo); end" - parses "a = 1\nfoo -a" parses "a = 1\nfoo -a" - says syntax error on "def foo(**a foo); end" says syntax error on "def foo(**a foo); end" - parses "enum Foo; private def foo; 1; end; end" parses "enum Foo; private def foo; 1; end; end" - parses "enum Foo::Bar; A = 1; end" parses "enum Foo::Bar; A = 1; end" - parses "macro foo;bar{% if x %}body{% elsif y %}body2{%end%}baz;end" parses "macro foo;bar{% if x %}body{% elsif y %}body2{%end%}baz;end" - says syntax error on "self = 1" says syntax error on "self = 1" - parses "def foo(@var); 1; end" parses "def foo(@var); 1; end" - parses "def foo; a = 1; a {}; end" parses "def foo; a = 1; a {}; end" - parses "a = 1; pointerof(a)" parses "a = 1; pointerof(a)" - says syntax error on "asm(\"nop\" :::: \"\#{volatile}\")" says syntax error on "asm(\"nop\" :::: \"\#{volatile}\")" - parses "def foo(x @while); end" parses "def foo(x @while); end" - parses "@@foo" parses "@@foo" - parses "foo &.as(T).bar" parses "foo &.as(T).bar" - parses "(baz; bar do\nend)" parses "(baz; bar do\nend)" - parses "foo(z: 0, a: n // 2)" parses "foo(z: 0, a: n // 2)" - parses "x = 1 rescue 2" parses "x = 1 rescue 2" - parses "def foo; with a yield 1; end" parses "def foo; with a yield 1; end" - parses "case {1}\nin {false}; 2; end" parses "case {1}\nin {false}; 2; end" - parses "f.x = Foo.new" parses "f.x = Foo.new" - parses "macro []?;end" parses "macro []?;end" - says syntax error on "{1, 2 3}" says syntax error on "{1, 2 3}" - says syntax error on "def foo\ninclude\nend" says syntax error on "def foo\ninclude\nend" - parses "foo do |a|; 1; end" parses "foo do |a|; 1; end" - parses "-@foo" parses "-@foo" - says syntax error on "def foo\nabstract\nend" says syntax error on "def foo\nabstract\nend" - parses "def foo(\n&block\n); end" parses "def foo(\n&block\n); end" - parses "foo.*(1, 2)" parses "foo.*(1, 2)" - parses "@@a : Foo = 1" parses "@@a : Foo = 1" - parses "foo.<(1, 2) { 3 }" parses "foo.<(1, 2) { 3 }" - says syntax error on "foo(**bar, *x)" says syntax error on "foo(**bar, *x)" - parses ":<" parses ":<" - parses "foo % q()" parses "foo % q()" - parses "foo.bar(1, 2)" parses "foo.bar(1, 2)" - parses "def foo(@@fun); end" parses "def foo(@@fun); end" - parses "foo(a: n >> 2)" parses "foo(a: n >> 2)" - parses "case\nwhen true\n1\nend" parses "case\nwhen true\n1\nend" - says syntax error on "b! = 1" says syntax error on "b! = 1" - parses "/foo/x" parses "/foo/x" - parses "foo(x) do\n//\nend" parses "foo(x) do\n//\nend" - parses "foo.=~ do end" parses "foo.=~ do end" - parses "foo = 1; foo(+1)" parses "foo = 1; foo(+1)" - parses "foo = 1; ->foo.>(Int32)" parses "foo = 1; ->foo.>(Int32)" - parses "1 -2" parses "1 -2" - parses "property next : Int32" parses "property next : Int32" - parses "macro foo;%var unless true;end" parses "macro foo;%var unless true;end" - parses "def <=(); end" parses "def <=(); end" - says syntax error on "@[Foo(\"\": 1)]" says syntax error on "@[Foo(\"\": 1)]" - parses ":<=>" parses ":<=>" - parses "def foo(x @typeof); end" parses "def foo(x @typeof); end" - parses "return;" parses "return;" - parses "foo(a: n > 2)" parses "foo(a: n > 2)" - parses "property instance_sizeof : Int32" parses "property instance_sizeof : Int32" - sets correct location of annotation in enum sets correct location of annotation in enum - parses "asm(\"bl trap\" :::: \"unwind\")" parses "asm(\"bl trap\" :::: \"unwind\")" - says syntax error on "foo(**bar, 1)" says syntax error on "foo(**bar, 1)" - parses "macro foo;if %var;true;end;end" parses "macro foo;if %var;true;end;end" - says syntax error on "Foo{one: :two, three: :four}" says syntax error on "Foo{one: :two, three: :four}" - parses "foo(n >> 2)" parses "foo(n >> 2)" - says syntax error on "def foo(foo extend); end" says syntax error on "def foo(foo extend); end" - parses "foo%q" parses "foo%q" - parses "a = 1; a &*=\n1" parses "a = 1; a &*=\n1" - parses "def foo(x, *y); 1; end" parses "def foo(x, *y); 1; end" - parses "{a: 1, b: 2}" parses "{a: 1, b: 2}" - parses "enum Foo : UInt16; end" parses "enum Foo : UInt16; end" - parses ":**" parses ":**" - parses "def &(); end;" parses "def &(); end;" - parses "-1.0" parses "-1.0" - says syntax error on "foo { |begin| }" says syntax error on "foo { |begin| }" - parses "macro /;end" parses "macro /;end" - parses "foo *bar" parses "foo *bar" - says syntax error on "->::@@foo.foo" says syntax error on "->::@@foo.foo" - parses "foo.responds_to? :foo" parses "foo.responds_to? :foo" - parses "!1" parses "!1" - says syntax error on "return &** 1" says syntax error on "return &** 1" - parses "->Foo.&*(Int32)" parses "->Foo.&*(Int32)" - parses "def foo(@next); end" parses "def foo(@next); end" - parses "def foo(var : Char[256]); end" parses "def foo(var : Char[256]); end" - says syntax error on "foo[1] = break" says syntax error on "foo[1] = break" - parses "macro foo\neenum\nend" parses "macro foo\neenum\nend" - parses "\n class Foo\n def bar\n print as Foo\n end\n end\n " parses "\n class Foo\n def bar\n print as Foo\n end\n end\n " - says syntax error on "foo.&&()" says syntax error on "foo.&&()" - parses "{%\na = 1\n%}" parses "{%\na = 1\n%}" - says syntax error on "foo { |instance_sizeof| }" says syntax error on "foo { |instance_sizeof| }" - parses "foo &.each {\n}" parses "foo &.each {\n}" - parses "asm(\"nop\" :: \"b\"(1), \"c\"(2))" parses "asm(\"nop\" :: \"b\"(1), \"c\"(2))" - parses "def foo(x, *args, y = 2); 1; end" parses "def foo(x, *args, y = 2); 1; end" - says syntax error on "enum Foo\n A, B, C\nend\n" says syntax error on "enum Foo\n A, B, C\nend\n" - parses "foo(0, n =~ 2)" parses "foo(0, n =~ 2)" - parses "def foo(@@alias); end" parses "def foo(@@alias); end" - says syntax error on "return.foo" says syntax error on "return.foo" - parses "{{ foo.nil?(foo) }}" parses "{{ foo.nil?(foo) }}" - parses "def foo(x @@in); end" parses "def foo(x @@in); end" - parses "puts {{1}}" parses "puts {{1}}" - parses "call ->foo" parses "call ->foo" - parses "foo &.nil?" parses "foo &.nil?" - parses "\"hello \#{1}\" \\\r\n \"\#{2} world\"" parses "\"hello \#{1}\" \\\r\n \"\#{2} world\"" - parses "macro foo\n <<-FOO\n \#{ %var }\n FOO\nend" parses "macro foo\n <<-FOO\n \#{ %var }\n FOO\nend" - parses "def self.**(); end;" parses "def self.**(); end;" - parses "foo.!( )" parses "foo.!( )" - says syntax error on "asm(\"\" : 1)" says syntax error on "asm(\"\" : 1)" - parses "def self.==; end;" parses "def self.==; end;" - says syntax error on "1 if next" says syntax error on "1 if next" - parses "include : Int32" parses "include : Int32" - parses "f.x -= 2" parses "f.x -= 2" - says syntax error on "next << 1" says syntax error on "next << 1" - parses "def foo(x = __DIR__); end" parses "def foo(x = __DIR__); end" - says syntax error on "1 unless next" says syntax error on "1 unless next" - says syntax error on "a, b, c, d, *e = 1, 2, 3" says syntax error on "a, b, c, d, *e = 1, 2, 3" - says syntax error on "foo { |(return)| }" says syntax error on "foo { |(return)| }" - parses "a.b/2" parses "a.b/2" - says syntax error on "next.as(Int32)" says syntax error on "next.as(Int32)" - parses ":[]" parses ":[]" - parses "foo { |a, b| 1 }" parses "foo { |a, b| 1 }" - says syntax error on "def foo(x :Int32); end" says syntax error on "def foo(x :Int32); end" - says syntax error on "def as?; end" says syntax error on "def as?; end" - parses "property yield : Int32" parses "property yield : Int32" - parses "return {1, 2}" parses "return {1, 2}" - parses "def foo(a, &block : *Int -> ); end" parses "def foo(a, &block : *Int -> ); end" - says syntax error on "return ** 1" says syntax error on "return ** 1" - parses "def foo(x @@enum); end" parses "def foo(x @@enum); end" - parses "call(foo.as Bar, Baz)" parses "call(foo.as Bar, Baz)" - parses "a\nwhile / /\n/ /\nend" parses "a\nwhile / /\n/ /\nend" - parses "macro ==;end" parses "macro ==;end" - parses "foo(\n1\n)" parses "foo(\n1\n)" - says syntax error on "break[]" says syntax error on "break[]" - parses "foo(n =~ 2)" parses "foo(n =~ 2)" - parses "foo(z: 0, a: n <= 2)" parses "foo(z: 0, a: n <= 2)" - parses "def foo(x @@begin); end" parses "def foo(x @@begin); end" - parses "foo(&.bar.baz)" parses "foo(&.bar.baz)" - says syntax error on "def self.is_a?; end" says syntax error on "def self.is_a?; end" - parses "property until : Int32" parses "property until : Int32" - parses "case 1; when 2 then /foo/; end" parses "case 1; when 2 then /foo/; end" - parses "abstract def foo : Int32" parses "abstract def foo : Int32" - parses "->Foo.===(Int32)" parses "->Foo.===(Int32)" - says syntax error on "*a" says syntax error on "*a" - says syntax error on "foo { |(fun)| }" says syntax error on "foo { |(fun)| }" - says syntax error on "def foo(**args, **args2); end" says syntax error on "def foo(**args, **args2); end" - parses "-> { }" parses "-> { }" - says syntax error on "def as; end" says syntax error on "def as; end" - parses "macro <=;end" parses "macro <=;end" - says syntax error on "foo { |(with)| }" says syntax error on "foo { |(with)| }" - parses "a : Foo()[12]" parses "a : Foo()[12]" - parses "{% unless 1\n x\nend %}" parses "{% unless 1\n x\nend %}" - parses "{% begin %}%x< %s >{% end %}" parses "{% begin %}%x< %s >{% end %}" - parses "def foo(&block :\n Int ->); end" parses "def foo(&block :\n Int ->); end" - parses "def !=(); end;" parses "def !=(); end;" - parses "def foo(module foo); end" parses "def foo(module foo); end" - parses "include Foo" parses "include Foo" - parses "def self.<=(); end;" parses "def self.<=(); end;" - says syntax error on "def foo(foo nil); end" says syntax error on "def foo(foo nil); end" - parses "break *1" parses "break *1" - sets correct location of private method in enum sets correct location of private method in enum - parses "foo(&.as(T))" parses "foo(&.as(T))" - parses "foo.bar 1, 2" parses "foo.bar 1, 2" - parses "foo(\n &.block\n)" parses "foo(\n &.block\n)" - parses "def foo(@private); end" parses "def foo(@private); end" - parses "foo %x" parses "foo %x" - parses "class Foo\ndef foo; end; end" parses "class Foo\ndef foo; end; end" - says syntax error on "def foo(x : U) forall U,; end" says syntax error on "def foo(x : U) forall U,; end" - parses "->@foo.foo" parses "->@foo.foo" - parses "def self.[]; end" parses "def self.[]; end" - says syntax error on "nil foo" says syntax error on "nil foo" - parses "foo.[0]" parses "foo.[0]" - parses "foo.responds_to?(:foo)" parses "foo.responds_to?(:foo)" - parses "->Foo.=~(Int32)" parses "->Foo.=~(Int32)" - says syntax error on "self += 1" says syntax error on "self += 1" - parses "foo.is_a? Const" parses "foo.is_a? Const" - parses "enum Foo; A\nB; C\nD = 1; end" parses "enum Foo; A\nB; C\nD = 1; end" - parses "begin : Int32" parses "begin : Int32" - parses "foo.- do end" parses "foo.- do end" - parses "def foo(var); end" parses "def foo(var); end" - parses "def foo(&\n); end" parses "def foo(&\n); end" - parses "{% begin %}%q< %s >{% end %}" parses "{% begin %}%q< %s >{% end %}" - parses "begin; 1; rescue ex; 2; end; ex" parses "begin; 1; rescue ex; 2; end; ex" - says syntax error on "next[0]= 1" says syntax error on "next[0]= 1" - parses "def []=(*args, **opts, &); end" parses "def []=(*args, **opts, &); end" - parses "abstract def foo(x) : Int32" parses "abstract def foo(x) : Int32" - says syntax error on "def foo=(a,b); end" says syntax error on "def foo=(a,b); end" - parses "1 =~ 2" parses "1 =~ 2" - parses "foo.bar do end" parses "foo.bar do end" - parses "@[Foo(1)]" parses "@[Foo(1)]" - parses "def self.&(); end;" parses "def self.&(); end;" - says syntax error on "def foo():String\nend" says syntax error on "def foo():String\nend" - says syntax error on "->(x y) { }" says syntax error on "->(x y) { }" - says syntax error on "return === 1" says syntax error on "return === 1" - says syntax error on "macro as; end" says syntax error on "macro as; end" - parses "+1.0" parses "+1.0" - parses "foo.* 1, 2" parses "foo.* 1, 2" - parses "{% if 1; 2; end %}" parses "{% if 1; 2; end %}" - parses "def foo(enum foo); end" parses "def foo(enum foo); end" - parses "def foo(var : Int -> Double); end" parses "def foo(var : Int -> Double); end" - parses "%r(foo(bar))" parses "%r(foo(bar))" - parses "a ? 1 :\n b ? 2 :\n c ? 3\n : 0" parses "a ? 1 :\n b ? 2 :\n c ? 3\n : 0" - parses "{% begin %}%i( %s ){% end %}" parses "{% begin %}%i( %s ){% end %}" - parses "foo { |(_, c, )| c }" parses "foo { |(_, c, )| c }" - parses "elsif : Int32" parses "elsif : Int32" - parses "foo.& do end" parses "foo.& do end" - parses "foo.==(1, 2)" parses "foo.==(1, 2)" - parses "macro foo(a, @[Foo] &block);end" parses "macro foo(a, @[Foo] &block);end" - parses "1 -2.0" parses "1 -2.0" - parses "foo(/ /)" parses "foo(/ /)" - parses "foo(n &* 2)" parses "foo(n &* 2)" - parses "foo(n &- 2)" parses "foo(n &- 2)" - parses "a\nunless / /\n/ /\nelse\n/ /\nend" parses "a\nunless / /\n/ /\nelse\n/ /\nend" - parses "-> do end" parses "-> do end" - parses "*a, b = 1, 2, 3, 4" parses "*a, b = 1, 2, 3, 4" - parses "foo(z: 0, a: n & 2)" parses "foo(z: 0, a: n & 2)" - parses "macro !=;end" parses "macro !=;end" - parses "Foo({X, Y,})" parses "Foo({X, Y,})" - parses "a ? 1\n : b" parses "a ? 1\n : b" - parses ":foo?" parses ":foo?" - says syntax error on "def foo(foo return); end" says syntax error on "def foo(foo return); end" - parses "def foo(x @@asm); end" parses "def foo(x @@asm); end" - parses "a[0], a[1] = 1, 2" parses "a[0], a[1] = 1, 2" - says syntax error on "foo { |(require)| }" says syntax error on "foo { |(require)| }" - parses "case / /\nwhen / /\n/ /\nelse\n/ /\nend" parses "case / /\nwhen / /\n/ /\nelse\n/ /\nend" - parses "def foo(x, *, y); 1; end" parses "def foo(x, *, y); 1; end" - parses "def ===(*args, **opts, &); end" parses "def ===(*args, **opts, &); end" - parses "foo % w()" parses "foo % w()" - says syntax error on "until next; end" says syntax error on "until next; end" - parses "a/b" parses "a/b" - says syntax error on "{\n}" says syntax error on "{\n}" - parses "case {1}\nin {Int32.class}; 2; end" parses "case {1}\nin {Int32.class}; 2; end" - parses ":===" parses ":===" - parses "foo &.bar.baz" parses "foo &.bar.baz" - says syntax error on "def foo\nalias\nend" says syntax error on "def foo\nalias\nend" - parses "a = 1; a += 1" parses "a = 1; a += 1" - parses "foo(n * 2)" parses "foo(n * 2)" - parses "alignof(X)" parses "alignof(X)" - parses "a, b, *c = 1" parses "a, b, *c = 1" - sets correct location of instance variable in proc pointer sets correct location of instance variable in proc pointer - parses "<<-'HERE'\n hello \\n world\n \#{1}\n HERE" parses "<<-'HERE'\n hello \\n world\n \#{1}\n HERE" - parses "def self.|; end;" parses "def self.|; end;" - parses "x[a: 1, b: 2,]" parses "x[a: 1, b: 2,]" - parses "def foo(@[Foo] var); end" parses "def foo(@[Foo] var); end" - parses "@foo/2" parses "@foo/2" - parses "def foo(x = / /); end" parses "def foo(x = / /); end" - parses "property unless : Int32" parses "property unless : Int32" - says syntax error on "case 1\nin 1; 2" says syntax error on "case 1\nin 1; 2" - parses "(foo bar do\nend)" parses "(foo bar do\nend)" - parses "a = 1; a &= 1" parses "a = 1; a &= 1" - parses "a; unless / /; / /; else; / /; end" parses "a; unless / /; / /; else; / /; end" - parses "\"\#{1\n}\"" parses "\"\#{1\n}\"" - parses "a[], a[] = 1, 2" parses "a[], a[] = 1, 2" - parses "foo(z: 0, a: n < 2)" parses "foo(z: 0, a: n < 2)" - says syntax error on "def foo(case); end" says syntax error on "def foo(case); end" - parses "a.b **=\n1" parses "a.b **=\n1" - parses "foo(bar { })" parses "foo(bar { })" - parses "def foo(var : Int**); end" parses "def foo(var : Int**); end" - parses "foo(\"foo bar\": 1, \"baz\": 2)" parses "foo(\"foo bar\": 1, \"baz\": 2)" - says syntax error on "-> :Int32 { }" says syntax error on "-> :Int32 { }" - says syntax error on "a = break" says syntax error on "a = break" - parses "puts ::foo" parses "puts ::foo" - parses "{1, 2, 3}" parses "{1, 2, 3}" - parses "return {1 => 2}" parses "return {1 => 2}" - parses "n | 2" parses "n | 2" - parses "foo(0, n * 2)" parses "foo(0, n * 2)" - parses "foo ..2" parses "foo ..2" - says syntax error on "a {}, b = 1" says syntax error on "a {}, b = 1" - parses "\"hello \\\n world\"" parses "\"hello \\\n world\"" - says syntax error on "->(x : Int32, x : Int32) {}" says syntax error on "->(x : Int32, x : Int32) {}" - parses "(/ /)" parses "(/ /)" - parses "def foo(x @yield); end" parses "def foo(x @yield); end" - parses "x = 0; a, b = x += 1" parses "x = 0; a, b = x += 1" - says syntax error on "'a' foo" says syntax error on "'a' foo" - says syntax error on "foo { |(while)| }" says syntax error on "foo { |(while)| }" - says syntax error on "a = 1; a += break" says syntax error on "a = 1; a += break" - parses "Set {1, 2, 3}" parses "Set {1, 2, 3}" - parses ":%" parses ":%" - parses "def &-(); end" parses "def &-(); end" - says syntax error on "macro nil?; end" says syntax error on "macro nil?; end" - parses ":>=" parses ":>=" - parses "def foo(*y : *T); 1; end" parses "def foo(*y : *T); 1; end" - says syntax error on "foo[next]" says syntax error on "foo[next]" - parses "\"hello \\\r\n world\"" parses "\"hello \\\r\n world\"" - parses "def foo(@while); end" parses "def foo(@while); end" - says syntax error on "foo { |(false)| }" says syntax error on "foo { |(false)| }" - parses "def <=(*args, **opts, &); end" parses "def <=(*args, **opts, &); end" - parses "n * 2" parses "n * 2" - says syntax error on "foo { |(protected)| }" says syntax error on "foo { |(protected)| }" - parses "a()/3" parses "a()/3" - parses "def foo(a, &block : Int, Float -> Double); end" parses "def foo(a, &block : Int, Float -> Double); end" - says syntax error on "macro is_a?; end" says syntax error on "macro is_a?; end" - parses "foo.<=" parses "foo.<=" - says syntax error on "if 1\n foo 1,\nend" says syntax error on "if 1\n foo 1,\nend" - parses "a == / /" parses "a == / /" - says syntax error on "def foo(foo sizeof); end" says syntax error on "def foo(foo sizeof); end" - parses "lib LibC; fun foo(a : ::B, ::C -> ::D); end" parses "lib LibC; fun foo(a : ::B, ::C -> ::D); end" - parses "enum Foo; A = 1\ndef self.foo; 1; end\nend" parses "enum Foo; A = 1\ndef self.foo; 1; end\nend" - parses "foo.[]= do end" parses "foo.[]= do end" - parses "foo.^(1, 2) { 3 }" parses "foo.^(1, 2) { 3 }" - says syntax error on "lib Foo%end" says syntax error on "lib Foo%end" - parses "alias : Int32" parses "alias : Int32" - parses "def foo(@var = 1); 1; end" parses "def foo(@var = 1); 1; end" - parses "offsetof : Int32" parses "offsetof : Int32" - says syntax error on "foo { |(next)| }" says syntax error on "foo { |(next)| }" - parses "n < 2" parses "n < 2" - parses "->@@foo.foo!" parses "->@@foo.foo!" - says syntax error on "foo { |sizeof| }" says syntax error on "foo { |sizeof| }" - parses "foo.+" parses "foo.+" - parses "case 1\nin Int32; 2; end" parses "case 1\nin Int32; 2; end" -Normalize: proc pointer - normalizes proc pointer with parameters, without object normalizes proc pointer with parameters, without object - normalizes proc pointer with ivar receiver normalizes proc pointer with ivar receiver - normalizes proc pointer with global const receiver normalizes proc pointer with global const receiver - normalizes proc pointer without object normalizes proc pointer without object - normalizes proc pointer with const receiver normalizes proc pointer with const receiver - normalizes proc pointer with variable receiver normalizes proc pointer with variable receiver - normalizes proc pointer of global call normalizes proc pointer of global call - normalizes proc pointer with cvar receiver normalizes proc pointer with cvar receiver -Call errors - says type mismatch for positional argument with two options says type mismatch for positional argument with two options - says type mismatch for symbol against enum, named argument case says type mismatch for symbol against enum, named argument case - says wrong number of arguments even if other overloads don't match by block says wrong number of arguments even if other overloads don't match by block - says type mismatch for symbol against enum (did you mean) says type mismatch for symbol against enum (did you mean) - says type mismatch for positional argument with three options says type mismatch for positional argument with three options - says not expected to be invoked with a block says not expected to be invoked with a block - says missing named arguments says missing named arguments - says missing named argument says missing named argument - says type mismatch for named argument says type mismatch for named argument - says type mismatch for positional argument even if there are overloads that don't match says type mismatch for positional argument even if there are overloads that don't match - says type mismatch for positional argument says type mismatch for positional argument - errors on argument if more types are given than expected, shows all expected types errors on argument if more types are given than expected, shows all expected types - replaces free variables in positional argument replaces free variables in positional argument - method signatures in error traces - expands double splat argument, more elements expands double splat argument, more elements - includes named arguments includes named arguments - expands positional and single splat argument, empty tuple expands positional and single splat argument, empty tuple - expands double splat argument, empty named tuple expands double splat argument, empty named tuple - expands single splat argument, more elements expands single splat argument, more elements - expands positional and double splat argument, more elements expands positional and double splat argument, more elements - expands positional and single splat argument expands positional and single splat argument - includes named argument includes named argument - includes positional and named argument includes positional and named argument - expands positional and double splat argument, empty named tuple expands positional and double splat argument, empty named tuple - expands positional and double splat argument expands positional and double splat argument - uses `T.method` instead of `T:module#method` uses `T.method` instead of `T:module#method` - expands single splat argument, empty tuple expands single splat argument, empty tuple - expands positional and single splat argument, more elements expands positional and single splat argument, more elements - expands double splat argument expands double splat argument - expands single splat argument expands single splat argument - uses `T.method` instead of `T.class#method` uses `T.method` instead of `T.class#method` - replaces generic type var in positional argument replaces generic type var in positional argument - says no parameter named says no parameter named - errors on argument if argument matches in all overloads but with different types in other arguments errors on argument if argument matches in all overloads but with different types in other arguments - says no parameters named says no parameters named - says argument already specified says argument already specified - says expected to be invoked with a block says expected to be invoked with a block - errors on argument if more types are given than expected errors on argument if more types are given than expected - replaces free variables in named argument replaces free variables in named argument - says wrong number of arguments (to few arguments) says wrong number of arguments (to few arguments) - says type mismatch for symbol against enum (list all possibilities when 10 or less) says type mismatch for symbol against enum (list all possibilities when 10 or less) - replaces generic type var in named argument replaces generic type var in named argument -Code gen: automatic cast - casts literal integer (Int32 -> Float32) casts literal integer (Int32 -> Float32) - casts Symbol to Enum in ivar type declaration casts Symbol to Enum in ivar type declaration - casts literal float (Float32 -> Float64) casts literal float (Float32 -> Float64) - casts literal integer (Int32 -> Float64) casts literal integer (Int32 -> Float64) - casts literal integer (Int64 -> Int32, ok) casts literal integer (Int64 -> Int32, ok) - does multidispatch with automatic casting (1) (#8217) does multidispatch with automatic casting (1) (#8217) - doesn't autocast number on union (#8655) doesn't autocast number on union (#8655) - casts Int32 to Int64 in ivar assignment casts Int32 to Int64 in ivar assignment - casts symbol literal to enum casts symbol literal to enum - casts Int32 to Int64 in cvar type declaration casts Int32 to Int64 in cvar type declaration - casts literal float (Float64 -> Float32) casts literal float (Float64 -> Float32) - casts integer variable to larger type (#9565) casts integer variable to larger type (#9565) - casts Int32 to Int64 in ivar type declaration casts Int32 to Int64 in ivar type declaration - casts Int32 to Int64 in lvar assignment casts Int32 to Int64 in lvar assignment - casts Int32 to Int64 in ivar type declaration in generic casts Int32 to Int64 in ivar type declaration in generic - casts Int32 -> Int64 in arg restriction casts Int32 -> Int64 in arg restriction - casts Int32 to Int64 in cvar assignment casts Int32 to Int64 in cvar assignment - does multidispatch with automatic casting (3) does multidispatch with automatic casting (3) - does multidispatch with automatic casting (2) (#8217) does multidispatch with automatic casting (2) (#8217) - casts Symbol to Enum in ivar assignment casts Symbol to Enum in ivar assignment - casts literal integer (Int32 -> Int64) casts literal integer (Int32 -> Int64) -Code gen: debug - codegens lib union (#7335) codegens lib union (#7335) - has debug info in closure inside if (#5593) has debug info in closure inside if (#5593) - inlines instance var access through getter in debug mode inlines instance var access through getter in debug mode - codegens correct debug info for untyped expression (#4007 and #4008) codegens correct debug info for untyped expression (#4007 and #4008) - doesn't emit debug info for unused variable declarations (#9882) doesn't emit debug info for unused variable declarations (#9882) - stores and restores debug location after jumping to main (#6920) stores and restores debug location after jumping to main (#6920) - doesn't fail on constant read calls (#11416) doesn't fail on constant read calls (#11416) - correctly restores debug location after fun change (#4254) correctly restores debug location after fun change (#4254) - codegens correct debug info for new with custom allocate (#3945) codegens correct debug info for new with custom allocate (#3945) - doesn't fail on splat expansions inside array-like literals doesn't fail on splat expansions inside array-like literals doesn't fail on splat expansions inside array-like literals doesn't fail on splat expansions inside array-like literals doesn't fail on splat expansions inside array-like literals doesn't fail on splat expansions inside array-like literals doesn't fail on splat expansions inside array-like literals doesn't fail on splat expansions inside array-like literals doesn't fail on splat expansions inside array-like literals doesn't fail on splat expansions inside array-like literals - stores and restores debug location after jumping to main (3) stores and restores debug location after jumping to main (3) - codegens extern union (#7335) codegens extern union (#7335) - doesn't emit incorrect debug info for closured self doesn't emit incorrect debug info for closured self - codegens abstract struct (#3578) codegens abstract struct (#3578) - stores and restores debug location after jumping to main (2) stores and restores debug location after jumping to main (2) - has correct debug location after constant initialization in call with block (#4719) has correct debug location after constant initialization in call with block (#4719) -Crystal::Repl::Interpreter - integration - does Float64#to_s (simple) does Float64#to_s (simple) - does YAML::Serializable does YAML::Serializable - does Int32#to_s does Int32#to_s - does some Hash methods does some Hash methods - does JSON::Serializable does JSON::Serializable - does IO.pipe (checks that StaticArray is passed correctly to C calls) does IO.pipe (checks that StaticArray is passed correctly to C calls) - does YAML does YAML - does String#includes? does String#includes? - does CSV does CSV - does JSON does JSON - does Float64#to_s (complex) does Float64#to_s (complex) - does XML does XML - does caller does caller - does Range#to_a, Array#to_s does Range#to_a, Array#to_s -Normalize: case - normalizes select with else normalizes select with else - normalizes select with assign normalizes select with assign - normalizes select with assign and bang method normalizes select with assign and bang method - normalizes select with call normalizes select with call - normalizes select with assign and question method normalizes select with assign and question method -Semantic: multi assign - can pass splat variable at top-level to macros (#11596) can pass splat variable at top-level to macros (#11596) - strict_multi_assign - doesn't error if some type in union matches target count doesn't error if some type in union matches target count - errors if assigning union of tuples to fewer targets errors if assigning union of tuples to fewer targets - errors if assigning non-Indexable to splat (#11414) errors if assigning non-Indexable to splat (#11414) - errors if assigning non-Indexable (#11414) errors if assigning non-Indexable (#11414) - doesn't error if some type in union has no constant size doesn't error if some type in union has no constant size - errors if assigning tuple to more targets errors if assigning tuple to more targets - errors if assigning tuple to fewer targets errors if assigning tuple to fewer targets - without strict_multi_assign - doesn't error if assigning tuple to fewer targets doesn't error if assigning tuple to fewer targets - doesn't error if assigning non-Indexable (#11414) doesn't error if assigning non-Indexable (#11414) - errors if assigning non-Indexable to splat (#11414) errors if assigning non-Indexable to splat (#11414) -Normalize: hash literal - hoists complex element expressions, hash-like generic hoists complex element expressions, hash-like generic - normalizes non-empty with of normalizes non-empty with of - hoists complex element expressions, hash-like hoists complex element expressions, hash-like - normalizes non-empty without of normalizes non-empty without of - hoists complex element expressions hoists complex element expressions - normalizes empty with of normalizes empty with of -Code gen: generic class type - doesn't run generic instance var initializers in formal superclass's context (#4753) doesn't run generic instance var initializers in formal superclass's context (#4753) - doesn't crash on generic type restriction with no subtypes (#7583) doesn't crash on generic type restriction with no subtypes (#7583) - doesn't use virtual + in type arguments (#2839) doesn't use virtual + in type arguments (#2839) - inherited instance var initialize from generic to concrete (#2128) inherited instance var initialize from generic to concrete (#2128) - doesn't override guessed instance var in generic type if already declared in superclass (#9431) doesn't override guessed instance var in generic type if already declared in superclass (#9431) - runs generic instance var initializers in superclass's metaclass context (2) (#6482) runs generic instance var initializers in superclass's metaclass context (2) (#6482) - doesn't use virtual + in type arguments for Tuple (#2839) doesn't use virtual + in type arguments for Tuple (#2839) - codegens virtual generic metaclass macro method call codegens virtual generic metaclass macro method call - uses big integer as generic type argument (#2353) uses big integer as generic type argument (#2353) uses big integer as generic type argument (#2353) uses big integer as generic type argument (#2353) uses big integer as generic type argument (#2353) uses big integer as generic type argument (#2353) uses big integer as generic type argument (#2353) uses big integer as generic type argument (#2353) uses big integer as generic type argument (#2353) uses big integer as generic type argument (#2353) - doesn't consider abstract types for including types (#7200) doesn't consider abstract types for including types (#7200) - codegens inherited generic class instance var codegens inherited generic class instance var - runs generic instance var initializers in superclass's metaclass context (#4753) runs generic instance var initializers in superclass's metaclass context (#4753) - invokes super in generic class (#2354) invokes super in generic class (#2354) - instantiates generic class with default argument in initialize (#394) instantiates generic class with default argument in initialize (#394) - doesn't use virtual + in type arguments for NamedTuple (#2839) doesn't use virtual + in type arguments for NamedTuple (#2839) - allows initializing instance variable (#665) allows initializing instance variable (#665) - codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 - doesn't consider abstract generic instantiation when restricting type (#5190) doesn't consider abstract generic instantiation when restricting type (#5190) - recomputes two calls that look the same due to generic type being instantiated (#7728) recomputes two calls that look the same due to generic type being instantiated (#7728) recomputes two calls that look the same due to generic type being instantiated (#7728) recomputes two calls that look the same due to generic type being instantiated (#7728) recomputes two calls that look the same due to generic type being instantiated (#7728) recomputes two calls that look the same due to generic type being instantiated (#7728) recomputes two calls that look the same due to generic type being instantiated (#7728) recomputes two calls that look the same due to generic type being instantiated (#7728) recomputes two calls that look the same due to generic type being instantiated (#7728) recomputes two calls that look the same due to generic type being instantiated (#7728) - declares instance var with virtual T (#1675) declares instance var with virtual T (#1675) - codegens static array size after instantiating codegens static array size after instantiating - inherited instance var initialize from generic to generic to concrete (#2128) inherited instance var initialize from generic to generic to concrete (#2128) - doesn't crash on generic type restriction with initially no subtypes (#8411) doesn't crash on generic type restriction with initially no subtypes (#8411) - allows initializing instance variable in inherited generic type allows initializing instance variable in inherited generic type -Crystal::Doc::Method - args_to_s - shows underscore restriction shows underscore restriction - shows splat args shows splat args - shows block args shows block args - shows simple args shows simple args - shows default value of arg with highlighting shows default value of arg with highlighting - shows block args with underscore shows block args with underscore - shows double splat args shows double splat args - shows return type restriction shows return type restriction - shows block args if a def has `yield` shows block args if a def has `yield` - shows external name of arg shows external name of arg - shows external name of arg with quotes and escaping shows external name of arg with quotes and escaping - shows args and return type restriction shows args and return type restriction - shows typeof restriction of arg with highlighting shows typeof restriction of arg with highlighting - doc - inherits doc from ancestor (no extra comment) inherits doc from ancestor (no extra comment) - inherits doc from ancestor (use :inherit:) inherits doc from ancestor (use :inherit:) - trailing comment is not a doc comment trailing comment is not a doc comment - inherits doc from previous def (no extra comment) inherits doc from previous def (no extra comment) - trailing comment is not part of a doc comment trailing comment is not part of a doc comment - inherits doc from ancestor (use :inherit: plus more content) inherits doc from ancestor (use :inherit: plus more content) - gets doc from underlying method gets doc from underlying method -Crystal::Repl::Interpreter - multidispatch - casts multidispatch argument to the def's arg type casts multidispatch argument to the def's arg type - does multidispatch with captured block (#12217) does multidispatch with captured block (#12217) - does dispatch on one argument with struct receiver, and modifies it does dispatch on one argument with struct receiver, and modifies it - does dispatch on receiver type and argument type, multiple times does dispatch on receiver type and argument type, multiple times - does dispatch on one argument does dispatch on one argument - does dispatch on receiver type and argument type does dispatch on receiver type and argument type - passes self as pointer when doing multidispatch (2) passes self as pointer when doing multidispatch (2) - doesn't compile block if it's not used (no yield) doesn't compile block if it's not used (no yield) - passes self as pointer when doing multidispatch passes self as pointer when doing multidispatch - does dispatch on one argument inside module with implicit self does dispatch on one argument inside module with implicit self - does multidispatch with mandatory named arguments does multidispatch with mandatory named arguments - does multidispatch on virtual metaclass type (1) does multidispatch on virtual metaclass type (1) - does dispatch on virtual type does dispatch on virtual type - does dispatch on receiver type does dispatch on receiver type - does dispatch on one argument with block does dispatch on one argument with block - downcasts self from union to struct (pass pointer to self) downcasts self from union to struct (pass pointer to self) - does dispatch on one argument inside module with explicit receiver does dispatch on one argument inside module with explicit receiver - does multidispatch on virtual metaclass type (2) does multidispatch on virtual metaclass type (2) - initialize multidispatch initialize multidispatch -Code gen: module - can use generic module as instance variable type can use generic module as instance variable type - expands modules to its including types (3) (#1916) expands modules to its including types (3) (#1916) - declares and includes generic module, in macros T is a tuple literal declares and includes generic module, in macros T is a tuple literal - expands modules to its including types (2) (#1916) expands modules to its including types (2) (#1916) - codegens pointer of module and pass value to method codegens pointer of module and pass value to method - can instantiate generic module can instantiate generic module - can use generic module as instance variable type (2) can use generic module as instance variable type (2) - codegens pointer of module with method codegens pointer of module with method - casts to union of module that is included in other module (#3323) casts to union of module that is included in other module (#3323) casts to union of module that is included in other module (#3323) casts to union of module that is included in other module (#3323) casts to union of module that is included in other module (#3323) casts to union of module that is included in other module (#3323) casts to union of module that is included in other module (#3323) casts to union of module that is included in other module (#3323) casts to union of module that is included in other module (#3323) casts to union of module that is included in other module (#3323) - codegens pointer of module with method with two including types with one struct (2) codegens pointer of module with method with two including types with one struct (2) - codegens dispatch of union with module (#3647) codegens dispatch of union with module (#3647) - casts to union of generic module that is included in other module (#3323) casts to union of generic module that is included in other module (#3323) casts to union of generic module that is included in other module (#3323) casts to union of generic module that is included in other module (#3323) casts to union of generic module that is included in other module (#3323) casts to union of generic module that is included in other module (#3323) casts to union of generic module that is included in other module (#3323) casts to union of generic module that is included in other module (#3323) casts to union of generic module that is included in other module (#3323) casts to union of generic module that is included in other module (#3323) - declares proc with module type and invoke it with two different types that return themselves declares proc with module type and invoke it with two different types that return themselves - expands modules to its including types (#1916) expands modules to its including types (#1916) - codegens pointer of module with method with two including types with one struct codegens pointer of module with method with two including types with one struct - codegens module with virtual type codegens module with virtual type - codegens proc of a module that was never included codegens proc of a module that was never included - codegens pointer of module with block codegens pointer of module with block codegens pointer of module with block codegens pointer of module with block codegens pointer of module with block codegens pointer of module with block codegens pointer of module with block codegens pointer of module with block codegens pointer of module with block codegens pointer of module with block - codegens cast to module with class and struct to nilable module codegens cast to module with class and struct to nilable module - codegens proc of module when generic type includes it codegens proc of module when generic type includes it - invokes method on yielded module that has no instances (#1079) invokes method on yielded module that has no instances (#1079) invokes method on yielded module that has no instances (#1079) invokes method on yielded module that has no instances (#1079) invokes method on yielded module that has no instances (#1079) invokes method on yielded module that has no instances (#1079) invokes method on yielded module that has no instances (#1079) invokes method on yielded module that has no instances (#1079) invokes method on yielded module that has no instances (#1079) invokes method on yielded module that has no instances (#1079) - codegens pointer of module with method with two including types codegens pointer of module with method with two including types - codegens cast to module that includes bool codegens cast to module that includes bool - declares proc with module type declares proc with module type -Code gen: proc - call proc pointer with args call proc pointer with args - saves receiver value of proc pointer `->@ivar.foo` saves receiver value of proc pointer `->@ivar.foo` - codegens proc in instance var initialize (#3016) codegens proc in instance var initialize (#3016) - codegens nilable proc type dispatch (1) codegens nilable proc type dispatch (1) - can pass Proc(T) to Proc(Nil) in type restriction (#8964) can pass Proc(T) to Proc(Nil) in type restriction (#8964) - allows using proc arg name shadowing local variable allows using proc arg name shadowing local variable - closures var on ->var.call (#8584) closures var on ->var.call (#8584) - makes sure that proc pointer is transformed after type inference makes sure that proc pointer is transformed after type inference makes sure that proc pointer is transformed after type inference makes sure that proc pointer is transformed after type inference makes sure that proc pointer is transformed after type inference makes sure that proc pointer is transformed after type inference makes sure that proc pointer is transformed after type inference makes sure that proc pointer is transformed after type inference makes sure that proc pointer is transformed after type inference makes sure that proc pointer is transformed after type inference - call simple proc literal with return call simple proc literal with return - codegens nilable proc type (1) codegens nilable proc type (1) - doesn't crash on #2196 doesn't crash on #2196 - codegens proc to implicit self in constant (#647) codegens proc to implicit self in constant (#647) codegens proc to implicit self in constant (#647) codegens proc to implicit self in constant (#647) codegens proc to implicit self in constant (#647) codegens proc to implicit self in constant (#647) codegens proc to implicit self in constant (#647) codegens proc to implicit self in constant (#647) codegens proc to implicit self in constant (#647) codegens proc to implicit self in constant (#647) - codegens proc with another var codegens proc with another var - allows proc type of enum type allows proc type of enum type - codegens issue with missing byval in proc literal inside struct codegens issue with missing byval in proc literal inside struct codegens issue with missing byval in proc literal inside struct codegens issue with missing byval in proc literal inside struct codegens issue with missing byval in proc literal inside struct codegens issue with missing byval in proc literal inside struct codegens issue with missing byval in proc literal inside struct codegens issue with missing byval in proc literal inside struct codegens issue with missing byval in proc literal inside struct codegens issue with missing byval in proc literal inside struct - allows invoking a function with a subtype when defined as block spec allows invoking a function with a subtype when defined as block spec - codegens captured block that returns tuple codegens captured block that returns tuple - passes block to another function (bug: mangling of both methods was the same) passes block to another function (bug: mangling of both methods was the same) - codegens proc that accepts array of type codegens proc that accepts array of type codegens proc that accepts array of type codegens proc that accepts array of type codegens proc that accepts array of type codegens proc that accepts array of type codegens proc that accepts array of type codegens proc that accepts array of type codegens proc that accepts array of type codegens proc that accepts array of type - call proc literal with return type call proc literal with return type - binds function pointer to associated call binds function pointer to associated call - allows proc pointer where self is a class allows proc pointer where self is a class - saves receiver value of proc pointer `->@@cvar.foo` saves receiver value of proc pointer `->@@cvar.foo` saves receiver value of proc pointer `->@@cvar.foo` saves receiver value of proc pointer `->@@cvar.foo` saves receiver value of proc pointer `->@@cvar.foo` saves receiver value of proc pointer `->@@cvar.foo` saves receiver value of proc pointer `->@@cvar.foo` saves receiver value of proc pointer `->@@cvar.foo` saves receiver value of proc pointer `->@@cvar.foo` saves receiver value of proc pointer `->@@cvar.foo` - takes pointerof function pointer takes pointerof function pointer - can assign proc that returns anything to proc that returns nil, using union type (#3655) can assign proc that returns anything to proc that returns nil, using union type (#3655) - codegens proc that references struct (bug) codegens proc that references struct (bug) - saves receiver value of proc pointer `->var.foo` saves receiver value of proc pointer `->var.foo` - can assign proc that returns anything to proc that returns nil (#3655) can assign proc that returns anything to proc that returns nil (#3655) - automatically casts proc that returns something to proc that returns void automatically casts proc that returns something to proc that returns void - codegens proc of generic type codegens proc of generic type - assigns nil and proc to nilable proc type assigns nil and proc to nilable proc type - uses alias of proc with virtual type (#1347) uses alias of proc with virtual type (#1347) uses alias of proc with virtual type (#1347) uses alias of proc with virtual type (#1347) uses alias of proc with virtual type (#1347) uses alias of proc with virtual type (#1347) uses alias of proc with virtual type (#1347) uses alias of proc with virtual type (#1347) uses alias of proc with virtual type (#1347) uses alias of proc with virtual type (#1347) - doesn't crash when taking a proc pointer that multidispatches on the top-level (#3822) doesn't crash when taking a proc pointer that multidispatches on the top-level (#3822) - mangles strings in such a way they don't conflict with funs (#1006) mangles strings in such a way they don't conflict with funs (#1006) - codegens proc with union type that returns itself codegens proc with union type that returns itself - codegens proc literal hard type inference (1) codegens proc literal hard type inference (1) codegens proc literal hard type inference (1) codegens proc literal hard type inference (1) codegens proc literal hard type inference (1) codegens proc literal hard type inference (1) codegens proc literal hard type inference (1) codegens proc literal hard type inference (1) codegens proc literal hard type inference (1) codegens proc literal hard type inference (1) - accesses T in macros as a TupleLiteral accesses T in macros as a TupleLiteral - call simple proc literal call simple proc literal - allows redefining fun allows redefining fun - doesn't crash when taking a proc pointer that multidispatches on a module (#3822) doesn't crash when taking a proc pointer that multidispatches on a module (#3822) - doesn't crash when taking a proc pointer to a virtual type (#9823) doesn't crash when taking a proc pointer to a virtual type (#9823) - returns proc as function pointer inside top-level fun (#14691) returns proc as function pointer inside top-level fun (#14691) - builds proc type from fun builds proc type from fun - gets proc to lib fun (#504) gets proc to lib fun (#504) - call proc pointer call proc pointer - allows invoking proc literal with smaller type allows invoking proc literal with smaller type - calls function pointer calls function pointer calls function pointer calls function pointer calls function pointer calls function pointer calls function pointer calls function pointer calls function pointer calls function pointer - calls proc pointer with union (passed by value) arg calls proc pointer with union (passed by value) arg - codegens proc that accepts a union and is called with a single type codegens proc that accepts a union and is called with a single type - returns ProcPointer inside top-level fun (#14691) returns ProcPointer inside top-level fun (#14691) - executes proc pointer on primitive executes proc pointer on primitive - passes proc as &->expr to method that yields passes proc as &->expr to method that yields - codegens proc that returns a virtual type codegens proc that returns a virtual type - allows passing proc type to C automatically allows passing proc type to C automatically allows passing proc type to C automatically allows passing proc type to C automatically allows passing proc type to C automatically allows passing proc type to C automatically allows passing proc type to C automatically allows passing proc type to C automatically allows passing proc type to C automatically allows passing proc type to C automatically - does new on proc type does new on proc type - casts from function pointer to proc casts from function pointer to proc - builds nilable proc type from fun builds nilable proc type from fun - codegens nilable proc type dispatch (2) codegens nilable proc type dispatch (2) - allows proc type of enum type with base type allows proc type of enum type with base type - gets proc pointer using virtual type (#1337) gets proc pointer using virtual type (#1337) - call proc pointer of instance method call proc pointer of instance method - codegens nilable proc type (2) codegens nilable proc type (2) - raises if returning closure from top-level fun (#14691) raises if returning closure from top-level fun (#14691) raises if returning closure from top-level fun (#14691) raises if returning closure from top-level fun (#14691) raises if returning closure from top-level fun (#14691) raises if returning closure from top-level fun (#14691) raises if returning closure from top-level fun (#14691) raises if returning closure from top-level fun (#14691) raises if returning closure from top-level fun (#14691) raises if returning closure from top-level fun (#14691) - call proc pointer of instance method that raises call proc pointer of instance method that raises call proc pointer of instance method that raises call proc pointer of instance method that raises call proc pointer of instance method that raises call proc pointer of instance method that raises call proc pointer of instance method that raises call proc pointer of instance method that raises call proc pointer of instance method that raises call proc pointer of instance method that raises - allows invoking a function with a subtype allows invoking a function with a subtype - call proc literal with arguments call proc literal with arguments -Semantic: concrete_types - VirtualType with concrete base VirtualType with concrete base - GenericModuleInstanceType GenericModuleInstanceType - ModuleType ModuleType - VirtualType with abstract base VirtualType with abstract base - UnionType of structs UnionType of structs - VirtualMetaclassType with abstract base VirtualMetaclassType with abstract base - VirtualMetaclassType with concrete base VirtualMetaclassType with concrete base + interprets read instance var interprets read instance var + does constructor does constructor + does object_id does object_id + calls implicit class self method calls implicit class self method + does allocate, set instance var and get instance var does allocate, set instance var and get instance var + calls explicit struct self method calls explicit struct self method +Crystal::FFI::CallInterface + .variadic + basic basic + zero varargs zero varargs + validates args size validates args size + .new + with args with args + make struct make struct + all primitive arg types all primitive arg types + simple call simple call + sum struct sum struct + array array +Semantic: struct + passes subtype check with generic module type on virtual type (2) (#10302) passes subtype check with generic module type on virtual type (2) (#10302) + doesn't make virtual for Struct doesn't make virtual for Struct + can't extend struct from non-abstract struct can't extend struct from non-abstract struct + can't extend class from struct can't extend class from struct + can cast to base abstract struct can cast to base abstract struct + passes subtype check with generic module type on virtual type passes subtype check with generic module type on virtual type + types struct declaration types struct declaration + unifies type to virtual type unifies type to virtual type + doesn't make virtual for Float doesn't make virtual for Float + allows struct to participate in virtual allows struct to participate in virtual + can't extend struct from class can't extend struct from class + doesn't error if method is not found in abstract type doesn't error if method is not found in abstract type + can't reopen as class can't reopen as class + doesn't make virtual for Int doesn't make virtual for Int + can't be nilable can't be nilable + passes subtype check with generic module type on virtual type (3) passes subtype check with generic module type on virtual type (3) + types generic struct declaration types generic struct declaration + errors if defining finalize for struct (#3840) errors if defining finalize for struct (#3840) + can't reopen as module can't reopen as module + doesn't make virtual for Value doesn't make virtual for Value +Crystal::Macro + def methods + executes receiver executes receiver + executes double_splat executes double_splat + executes name executes name + executes block_arg executes block_arg + executes splat_index executes splat_index + executes return_type executes return_type + executes abstract? executes abstract? + executes body executes body + executes free_vars executes free_vars + executes args executes args + executes visibility executes visibility + executes accepts_block? executes accepts_block? + classvar methods + executes name executes name + exception handler methods + executes ensure executes ensure + executes rescue name executes rescue name + executes else executes else + executes else (nop) executes else (nop) + executes body executes body + executes rescues executes rescues + executes ensure (nop) executes ensure (nop) + executes rescue body executes rescue body + executes rescue types executes rescue types + proc notation methods + gets single input gets single input + gets empty output gets empty output + executes resolve executes resolve + executes resolve? executes resolve? + gets single output gets single output + gets multiple inputs gets multiple inputs + Crystal::ArrayLiteral + executes reject executes reject + executes index out of bounds executes index out of bounds + executes map with constants executes map with constants + executes splat executes splat + executes unshift executes unshift + executes sort with ids and strings executes sort with ids and strings + executes any? (true) executes any? (true) + executes find (finds) executes find (finds) + executes includes? executes includes? + executes first executes first + executes size executes size + executes splat with splat executes splat with splat + #map_with_index + without the index argument + returns the resulting array returns the resulting array + without the element argument + returns the resulting array returns the resulting array + without either argument + returns the resulting array returns the resulting array + with both arguments + returns the resulting array returns the resulting array + executes [] with range executes [] with range + executes map with arg executes map with arg + executes [] with computed range executes [] with computed range + executes of executes of + creates an array literal with a var creates an array literal with a var + executes sort with numbers executes sort with numbers + executes type executes type + executes last executes last + #each #each + calls block exactly once for each element in #sort_by calls block exactly once for each element in #sort_by + executes of (nop) executes of (nop) + #- + with TupleLiteral argument + removes the elements in RHS from LHS into an ArrayLiteral removes the elements in RHS from LHS into an ArrayLiteral + with ArrayLiteral argument + removes the elements in RHS from LHS into an ArrayLiteral removes the elements in RHS from LHS into an ArrayLiteral + executes sort with strings executes sort with strings + executes splat with symbols and strings executes splat with symbols and strings + executes any? (false) executes any? (false) + executes uniq executes uniq + executes all? (false) executes all? (false) + executes sort with ids executes sort with ids + executes [] with incomplete range executes [] with incomplete range + executes [] with two numbers executes [] with two numbers + executes identify executes identify + executes index 1 executes index 1 + executes find (doesn't find) executes find (doesn't find) + executes []= executes []= + executes sort_by executes sort_by + executes push executes push + executes empty? executes empty? + #each_with_index + without the element argument + builds the correct array builds the correct array + with both arguments + builds the correct array builds the correct array + without either argument + builds the correct array builds the correct array + without the index argument + builds the correct array builds the correct array + executes all? (true) executes all? (true) + executes is_a? executes is_a? + executes join executes join + executes type (nop) executes type (nop) + executes select executes select + executes map executes map + executes join with strings executes join with strings + executes reduce with no initial value executes reduce with no initial value + executes reduce with initial value executes reduce with initial value + #+ + with TupleLiteral argument + concatenates the literals into an ArrayLiteral concatenates the literals into an ArrayLiteral + with ArrayLiteral argument + concatenates the literals into an ArrayLiteral concatenates the literals into an ArrayLiteral + executes index 0 executes index 0 + macro if methods + executes cond executes cond + executes else executes else + executes then executes then + if methods + executes cond executes cond + executes then executes then + executes else (nop) executes else (nop) + executes else executes else + symbol methods + executes symbol != symbol executes symbol != symbol + executes symbol == symbol executes symbol == symbol + forwards methods to string forwards methods to string + Crystal::TypeNode + executes instance_vars on symbol type executes instance_vars on symbol type + #abstract? + Crystal::NonGenericClassType + class + non-abstract non-abstract + abstract abstract + struct + non-abstract non-abstract + abstract abstract + Crystal::NonGenericModuleType Crystal::NonGenericModuleType + Crystal::GenericClassType + struct + non-abstract non-abstract + abstract abstract + class + non-abstract non-abstract + abstract abstract + Crystal::GenericModuleType Crystal::GenericModuleType + executes instance executes instance + public? + false false + true true + executes class_vars on symbol type executes class_vars on symbol type + executes class vars executes class vars + executes type_vars executes type_vars + executes resolve? executes resolve? + #module? + Crystal::GenericModuleType Crystal::GenericModuleType + Crystal::NonGenericModuleType Crystal::NonGenericModuleType + Crystal::GenericClassType + struct struct + class class + Crystal::NonGenericClassType + struct struct + class class + visibility + public public + private private + #id + does not include trailing + for virtual type does not include trailing + for virtual type + executes <= executes <= + executes == executes == + executes size of tuple metaclass executes size of tuple metaclass + executes instance_vars executes instance_vars + executes class_vars on metaclass executes class_vars on metaclass + executes != executes != + #includers + returns an array of types `self` is directly included in returns an array of types `self` is directly included in + #struct? + Crystal::NonGenericClassType + class class + struct struct + Crystal::GenericModuleType Crystal::GenericModuleType + Crystal::NonGenericModuleType Crystal::NonGenericModuleType + Crystal::GenericClassType + struct struct + class class + executes ancestors (with generic) executes ancestors (with generic) + executes resolve executes resolve + #class? + Crystal::GenericClassType + class class + struct struct + Crystal::NonGenericModuleType Crystal::NonGenericModuleType + Crystal::NonGenericClassType + struct struct + class class + Crystal::GenericModuleType Crystal::GenericModuleType + executes >= executes >= + #name + simple type + returns the name of the type returns the name of the type + generic instance + prints multiple arguments for splat type var prints multiple arguments for splat type var + prints empty splat type var prints empty splat type var + does not print extra commas for empty splat type var (1) does not print extra commas for empty splat type var (1) + does not print extra commas for empty splat type var (2) does not print extra commas for empty splat type var (2) + prints generic type arguments prints generic type arguments + does not print extra commas for empty splat type var (3) does not print extra commas for empty splat type var (3) + generic type + includes the generic_args of the instantiated type by default includes the generic_args of the instantiated type by default + includes the generic_args of the type by default includes the generic_args of the type by default + generic_args + true + includes the generic_args of the type includes the generic_args of the type + includes the generic_args of the instantiated type includes the generic_args of the instantiated type + false + does not include the generic_args of the instantiated type does not include the generic_args of the instantiated type + does not include the generic_args of the type does not include the generic_args of the type + with an invalid type argument + should raise the proper exception should raise the proper exception + namespaced type + should return the FQN of the type should return the FQN of the type + #warning + emits a warning at a specific node emits a warning at a specific node + #has_inner_pointers? + works on structs works on structs + works on references works on references + works on ReferenceStorage works on ReferenceStorage + works on primitive values works on primitive values + executes methods executes methods + executes < executes < + executes class vars (with inheritance) executes class vars (with inheritance) + executes class methods executes class methods + executes private? + false false + true true + == and != devirtualize generic type arguments (#10730) == and != devirtualize generic type arguments (#10730) + executes class executes class + #union? + true true + false false + executes superclass executes superclass + executes ancestors executes ancestors + executes union_types (non-union) executes union_types (non-union) + executes > executes > + executes size of tuple executes size of tuple + executes instance_vars on metaclass executes instance_vars on metaclass + #nilable? + true true + false false + executes union_types (union) executes union_types (union) + multi_assign methods + executes values executes values + executes targets executes targets + executes assign without output executes assign without output + require methods + executes path executes path + Crystal::EnumDef + executes body executes body + executes name executes name + executes base_type executes base_type + executes kind executes kind + Crystal::External + executes is_a? executes is_a? + regex methods + executes options executes options + executes source executes source + control expression methods + executes exp executes exp + executes exp (nop) executes exp (nop) + Crystal::NamedTupleLiteral + executes to_a executes to_a + executes [] with invalid key type executes [] with invalid key type + executes [] not found executes [] not found + executes has_key? executes has_key? + executes map executes map + executes double splat executes double splat + executes []= executes []= + executes empty? executes empty? + #each + without either argument + builds the correct array builds the correct array + without the value argument + builds the correct array builds the correct array + with both arguments + builds the correct array builds the correct array + without the key argument + builds the correct array builds the correct array + executes keys executes keys + executes double splat with arg executes double splat with arg + executes values executes values + creates a named tuple literal with a var creates a named tuple literal with a var + executes is_a? executes is_a? + executes size executes size + executes double splat executes double splat + executes [] executes [] + is_a methods + executes receiver executes receiver + executes arg executes arg + arg methods + executes internal_name executes internal_name + executes restriction executes restriction + executes name executes name + executes default_value executes default_value + Crystal::TupleLiteral + #- + with TupleLiteral argument + removes the elements in RHS from LHS into a TupleLiteral removes the elements in RHS from LHS into a TupleLiteral + with ArrayLiteral argument + removes the elements in RHS from LHS into a TupleLiteral removes the elements in RHS from LHS into a TupleLiteral + executes all? (true) executes all? (true) + executes unshift executes unshift + #map_with_index + without the element argument + returns the resulting tuple returns the resulting tuple + without the index argument + returns the resulting tuple returns the resulting tuple + without either argument + returns the resulting tuple returns the resulting tuple + with both arguments + returns the resulting tuple returns the resulting tuple + executes find (doesn't find) executes find (doesn't find) + executes uniq executes uniq + executes reject executes reject + executes [] out of bounds executes [] out of bounds + executes splat with symbols and strings executes splat with symbols and strings + executes [] with 0 executes [] with 0 + executes join executes join + executes map with constants executes map with constants + creates a tuple literal with a var creates a tuple literal with a var + executes map with arg executes map with arg + executes first executes first + executes push executes push + executes join with strings executes join with strings + executes sort with strings executes sort with strings + executes map executes map + executes [] with incomplete range executes [] with incomplete range + executes size executes size + executes sort with ids executes sort with ids + executes empty? executes empty? + executes splat with splat executes splat with splat + executes [] with computed range executes [] with computed range + executes any? (false) executes any? (false) + executes sort with ids and strings executes sort with ids and strings + executes is_a? executes is_a? + executes any? (true) executes any? (true) + executes sort with numbers executes sort with numbers + #each_with_index + without the element argument + builds the correct array builds the correct array + without the index argument + builds the correct array builds the correct array + with both arguments + builds the correct array builds the correct array + without either argument + builds the correct array builds the correct array + executes includes? executes includes? + executes select executes select + #+ + with ArrayLiteral argument + concatenates the literals into a TupleLiteral concatenates the literals into a TupleLiteral + with TupleLiteral argument + concatenates the literals into a TupleLiteral concatenates the literals into a TupleLiteral + executes find (finds) executes find (finds) + executes all? (false) executes all? (false) + executes [] with 1 executes [] with 1 + executes splat executes splat + executes [] with range executes [] with range + executes last executes last + executes splat with arg executes splat with arg + #each #each + string methods + executes camelcase with lower executes camelcase with lower + executes string starts_with? string (true) executes string starts_with? string (true) + executes titleize executes titleize + executes string ends_with? char (false) executes string ends_with? char (false) + executes split with argument executes split with argument + executes underscore executes underscore + executes string starts_with? char (false) executes string starts_with? char (false) + executes tr executes tr + executes to_i(base) executes to_i(base) + executes string < string executes string < string + executes string includes? string (true) executes string includes? string (true) + executes string includes? string (false) executes string includes? string (false) + executes string includes? char (false) executes string includes? char (false) + executes string starts_with? string (false) executes string starts_with? string (false) + executes split with char argument executes split with char argument + executes lines executes lines + executes downcase executes downcase + executes string > macroid executes string > macroid + executes string > string executes string > string + executes string + char executes string + char + executes string =~ (false) executes string =~ (false) + executes chars executes chars + executes string < macroid executes string < macroid + executes [] with inclusive range executes [] with inclusive range + executes string starts_with? char (true) executes string starts_with? char (true) + executes string ends_with? char (true) executes string ends_with? char (true) + executes string chomp executes string chomp + executes string == string executes string == string + executes [] with computed range executes [] with computed range + executes string =~ (true) executes string =~ (true) + executes capitalize executes capitalize + executes upcase executes upcase + executes empty executes empty + executes camelcase with invalid lower arg type executes camelcase with invalid lower arg type + executes camelcase executes camelcase + executes count executes count + executes string ends_with? string (false) executes string ends_with? string (false) + executes string + string executes string + string + executes string ends_with? string (true) executes string ends_with? string (true) + executes to_i executes to_i + executes string includes? char (true) executes string includes? char (true) + executes to_utf16 executes to_utf16 + executes strip executes strip + executes split without arguments executes split without arguments + executes size executes size + executes string != string executes string != string + executes gsub executes gsub + executes [] with exclusive range executes [] with exclusive range + executes [] with incomplete range executes [] with incomplete range + Crystal::ExternalVar + executes type executes type + executes real_name executes real_name + executes name executes name + flag? + has flag has flag + doesn't have flag doesn't have flag + env + doesn't have key doesn't have key + has key has key + #parse_type + metaclass metaclass + path path + generic generic + union - | union - | + raises on extra unparsed tokens before the type raises on extra unparsed tokens before the type + exposes syntax warnings exposes syntax warnings + raises on non StringLiteral arguments raises on non StringLiteral arguments + proc proc + union - Union union - Union + raises on extra unparsed tokens after the type raises on extra unparsed tokens after the type + raises on empty string raises on empty string + union - in generic union - in generic + assign methods + executes target executes target + executes value executes value + metaclass methods + executes resolve? executes resolve? + executes resolve executes resolve + executes instance executes instance + block methods + executes args executes args + executes splat_index executes splat_index + executes body executes body + or methods + executes right executes right + executes left executes left + annotation methods + executes [] with NumberLiteral executes [] with NumberLiteral + executes [] with SymbolLiteral executes [] with SymbolLiteral + executes [] with MacroId executes [] with MacroId + executes name executes name + executes [] with other ASTNode, but raises an error executes [] with other ASTNode, but raises an error + executes [] with StringLiteral executes [] with StringLiteral + nilable cast methods + executes to executes to + executes obj executes obj + Crystal::RangeLiteral + executes to_a executes to_a + executes excludes_end? executes excludes_end? + executes map executes map + #each #each + executes begin executes begin + executes end executes end + cast methods + executes obj executes obj + executes to executes to + Crystal::Select + executes whens executes whens + executes else executes else + Crystal::CStructOrUnionDef + executes kind executes kind + executes name executes name + executes body executes body + executes union? executes union? + Crystal::MacroLiteral + executes value executes value + proc literal methods + executes body executes body + executes args executes args + executes return_type executes return_type + expressions methods + executes expressions executes expressions + readinstancevar methods + executes name executes name + executes obj executes obj + uninitialized var methods + executes type executes type + executes var executes var + path methods + executes global? executes global? + executes resolve? executes resolve? + executes resolve executes resolve + executes types executes types + executes names executes names + executes global executes global + Crystal::AnnotationDef + executes body executes body + executes kind executes kind + executes name executes name + number methods + executes // executes // + executes + and preserves type executes + and preserves type + executes <= (false) executes <= (false) + executes * executes * + executes <=> (returns nil) executes <=> (returns nil) + executes & executes & + executes <=> executes <=> + executes > (false) executes > (false) + executes <= (true) executes <= (true) + executes | executes | + #to_number #to_number + executes < (true) executes < (true) + executes >= (true) executes >= (true) + executes >> executes >> + executes - executes - + executes >= (false) executes >= (false) + executes unary - executes unary - + executes < (false) executes < (false) + preserves integer size (#10713) preserves integer size (#10713) + executes unary + executes unary + + executes + executes + + executes math operations using U/Int128 executes math operations using U/Int128 + executes ** executes ** + executes + with float executes + with float + executes << executes << + executes ^ executes ^ + executes % executes % + executes > (true) executes > (true) + executes unary ~ executes unary ~ + executes kind executes kind + Crystal::Asm + executes inputs executes inputs + executes alignstack? executes alignstack? + executes outputs executes outputs + executes clobbers executes clobbers + executes intel? executes intel? + executes text executes text + executes can_throw? executes can_throw? + executes volatile? executes volatile? + splat methods + executes exp executes exp + visibility modifier methods + executes visibility executes visibility + executes exp executes exp + proc pointer methods + executes obj when present executes obj when present + executes args when not empty executes args when not empty + executes name executes name + executes args when empty executes args when empty + executes global? executes global? + executes obj when absent executes obj when absent + Crystal::FunDef + executes variadic? executes variadic? + executes return_type executes return_type + executes has_body? executes has_body? + executes real_name executes real_name + executes name executes name + executes body executes body + executes args executes args + Crystal::LibDef + executes kind executes kind + executes name executes name + executes body executes body + union methods + executes types executes types + executes resolve executes resolve + executes resolve? executes resolve? + Crystal::MacroExpression + executes output? executes output? + executes exp executes exp + generic methods + executes name executes name + executes resolve executes resolve + executes type_vars executes type_vars + executes named_args executes named_args + executes types executes types + executes resolve? executes resolve? + instancevar methods + executes name executes name + executes assign executes assign + Crystal::Alias + executes name executes name + executes type executes type + Crystal::ModuleDef + executes body executes body + executes type_vars executes type_vars + executes kind executes kind + executes splat_index executes splat_index + executes name executes name + macro id methods + forwards methods to string forwards methods to string + compares with symbol compares with symbol + compares with string compares with string + while methods + executes body executes body + executes cond executes cond + macro for methods + executes vars executes vars + executes exp executes exp + executes body executes body + Crystal::Extend + executes name executes name + Crystal::HashLiteral + executes double splat executes double splat + executes double splat with arg executes double splat with arg + executes [] not found executes [] not found + executes of_value (nop) executes of_value (nop) + executes keys executes keys + executes to_a executes to_a + executes of_key executes of_key + executes empty? executes empty? + executes []= executes []= + executes is_a? executes is_a? + creates a hash literal with a var creates a hash literal with a var + executes size executes size + executes of_value executes of_value + executes of_key (nop) executes of_key (nop) + executes [] executes [] + executes type executes type + executes type (nop) executes type (nop) + executes has_key? executes has_key? + #each + without either argument + builds the correct array builds the correct array + without the key argument + builds the correct array builds the correct array + without the value argument + builds the correct array builds the correct array + with both arguments + builds the correct array builds the correct array + executes map executes map + executes double splat executes double splat + executes values executes values + case methods + in + executes exhaustive? executes exhaustive? + executes whens executes whens + executes when exhaustive? executes when exhaustive? + when + executes exhaustive? executes exhaustive? + executes cond executes cond + executes when body executes when body + executes whens executes whens + executes else executes else + executes when conds executes when conds + executes when exhaustive? executes when exhaustive? + unary expression methods + executes is_a? executes is_a? + executes exp executes exp + char methods + executes ord executes ord + Crystal::TypeDef + executes type executes type + executes name executes name + macro methods + executes name executes name + executes body executes body + executes double_splat executes double_splat + executes splat_index executes splat_index + executes args executes args + executes block_arg executes block_arg + executes visibility executes visibility + type declaration methods + executes type executes type + executes value executes value + executes var executes var + executes var when instance var executes var when instance var + #warning + emits a top level warning emits a top level warning + printing + p! p! + p p + puts puts + pp pp + print print + pp! pp! + responds_to methods + executes name executes name + executes receiver executes receiver + Crystal::AsmOperand + executes exp executes exp + executes constraint executes constraint + global methods + executes name executes name + Crystal::ClassDef + executes splat_index executes splat_index + executes type_vars executes type_vars + executes name executes name + executes superclass executes superclass + executes body executes body + executes struct? executes struct? + executes kind executes kind + executes abstract? executes abstract? + offsetof methods + executes offset executes offset + executes type executes type + Crystal::Primitive + executes name executes name + node methods + executes != on numbers (false) executes != on numbers (false) + class_name + executes class_name executes class_name + executes class_name executes class_name + executes class_name executes class_name + executes class_name executes class_name + executes class_name executes class_name + executes class_name executes class_name + #is_a? + union argument, unimplemented types union argument, unimplemented types + union argument, duplicate type union argument, duplicate type + union argument, mergeable union argument, mergeable + union argument, contains NoReturn union argument, contains NoReturn + union argument, undefined types union argument, undefined types + union argument union argument + symbolize + expands macro with symbolize call on string expands macro with symbolize call on string + expands macro with symbolize call on symbol expands macro with symbolize call on symbol + expands macro with symbolize call on id expands macro with symbolize call on id + #nil? + NumberLiteral NumberLiteral + Nop Nop + NilLiteral NilLiteral + executes != on numbers (true) executes != on numbers (true) + executes == on numbers (false) executes == on numbers (false) + executes == on symbols (false) (#240) executes == on symbols (false) (#240) + executes == on symbols (true) (#240) executes == on symbols (true) (#240) + executes == on numbers (true) executes == on numbers (true) + id + expands macro with id call on global path expands macro with id call on global path + expands macro with id call on char expands macro with id call on char + expands macro with id call on string expands macro with id call on string + expands macro with id call on path expands macro with id call on path + expands macro with id call on symbol expands macro with id call on symbol + expands macro with id call on number expands macro with id call on number + expands macro with id call on call expands macro with id call on call + #doc_comment + returns an empty MacroId if there are no docs on the node (wants_doc = false) returns an empty MacroId if there are no docs on the node (wants_doc = false) + ensures each newline has a `#` prefix ensures each newline has a `#` prefix + returns the call's docs if present as a MacroId (wants_doc = true) returns the call's docs if present as a MacroId (wants_doc = true) + location + column number column number + end line_number end line_number + filename filename + line_number line_number + end column number end column number + stringify + expands macro with stringify call on number expands macro with stringify call on number + expands macro with stringify call on call expands macro with stringify call on call + expands macro with stringify call on symbol expands macro with stringify call on symbol + expands macro with stringify call on string expands macro with stringify call on string + #doc + returns an empty string if there are no docs on the node (wants_doc = false) returns an empty string if there are no docs on the node (wants_doc = false) + returns a multiline comment returns a multiline comment + returns the call's docs if present (wants_doc = true) returns the call's docs if present (wants_doc = true) + and methods + executes left executes left + executes right executes right + Crystal::TypeOf + executes args executes args + call methods + executes block arg (nop) executes block arg (nop) + executes receiver executes receiver + executes named args name executes named args name + executes global? executes global? + executes block executes block + executes args executes args + executes named args executes named args + executes block arg executes block arg + executes name executes name + executes named args value executes named args value + yield methods + executes expressions executes expressions + executes scope (nop) executes scope (nop) + executes scope executes scope + Crystal::Include + executes name executes name + compares versions compares versions + metavar methods + executes nothing executes nothing + executes name executes name + executes id executes id + executes is_a? executes is_a? + Crystal::MacroVar + executes expressions executes expressions + executes name executes name + instancevar methods + executes name executes name Normalize: and + normalizes and with is_a? on var normalizes and with is_a? on var + normalizes and with assignment normalizes and with assignment + normalizes and without variable normalizes and without variable normalizes and with ! on var normalizes and with ! on var normalizes and with variable on the left normalizes and with variable on the left - normalizes and without variable normalizes and without variable - normalizes and with assignment normalizes and with assignment - normalizes and with is_a? on exp normalizes and with is_a? on exp - normalizes and with is_a? on var normalizes and with is_a? on var normalizes and with ! on var.is_a?(...) normalizes and with ! on var.is_a?(...) -Visibility modifiers - errors if invoking protected method from non-subclass, generated with macro that generates a macro errors if invoking protected method from non-subclass, generated with macro that generates a macro - defines protected initialize (#7501) defines protected initialize (#7501) - allows invoking protected method from the same class allows invoking protected method from the same class - allows invoking private setter with self allows invoking private setter with self - allows calling protected method from nested generic class (2) allows calling protected method from nested generic class (2) - allows invoking protected method from virtual type allows invoking protected method from virtual type - allows invoking protected from instance to class allows invoking protected from instance to class - allows setting visibility modifier to macro that generates many methods (1) allows setting visibility modifier to macro that generates many methods (1) - allows invoking protected method between types in the same namespace when inheriting allows invoking protected method between types in the same namespace when inheriting - allows invoking private method from the same class allows invoking private method from the same class - allows invoking protected method between types in the same namespace allows invoking protected method between types in the same namespace - automatically makes initialize be protected automatically makes initialize be protected - allows setting visibility modifier to macro allows setting visibility modifier to macro - errors if invoking protected method from top-level errors if invoking protected method from top-level - gives correct error on unknown call (#2838) gives correct error on unknown call (#2838) - disallows invoking private method disallows invoking private method - allows invoking protected method from namespaced type to namespace allows invoking protected method from namespaced type to namespace - errors if applying visibility modifier to non-def or non-call errors if applying visibility modifier to non-def or non-call - errors if invoking protected method from non-subclass errors if invoking protected method from non-subclass - allows invoking protected method from namespace to namespaced type allows invoking protected method from namespace to namespaced type - allows calling protected method from nested generic class (1) allows calling protected method from nested generic class (1) - allows invoking protected method from subclass allows invoking protected method from subclass - allows invoking protected method from subclass (2) allows invoking protected method from subclass (2) - handles virtual types (#8561) handles virtual types (#8561) - allows setting visibility modifier to macro that generates many methods (2) allows setting visibility modifier to macro that generates many methods (2) -Code gen: closure - ensures it can raise from the closure check ensures it can raise from the closure check - codegens closured nested in block codegens closured nested in block - allows passing an external function along allows passing an external function along - codegens super nested closure codegens super nested closure - codegens closured nested in block with a call with a closure with same names codegens closured nested in block with a call with a closure with same names - captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) - codegens closure with instance var codegens closure with instance var - doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) - codegens super nested closure with nested closured variable codegens super nested closure with nested closured variable - codegens closure with instance var and var codegens closure with instance var and var - codegens closure inside initialize inside block with self codegens closure inside initialize inside block with self - codegens multiple nested blocks codegens multiple nested blocks - allows passing proc literal to def that captures block with & allows passing proc literal to def that captures block with & - codegens nested closure that mentions var in both contexts codegens nested closure that mentions var in both contexts - codegens simple closure in function codegens simple closure in function - codegens nested closure with block (1) codegens nested closure with block (1) - codegens nested closure codegens nested closure - codegens closure with nested context without new closured vars codegens closure with nested context without new closured vars - codegens closure with block codegens closure with block - closures struct self closures struct self - codegens closure with self and var codegens closure with self and var - codegens nested closure with nested closured variable codegens nested closure with nested closured variable - doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method - codegens simple closure in function with argument codegens simple closure in function with argument - unifies types of closured var unifies types of closured var - codegens closure with block that declares same var codegens closure with block that declares same var - codegens closure with nested context without new closured vars but with block arg codegens closure with nested context without new closured vars but with block arg - codegens simple closure in block codegens simple closure in block - doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self - codegen closure in instance method without self closured codegen closure in instance method without self closured - doesn't incorrectly consider local as closured (#4948) doesn't incorrectly consider local as closured (#4948) - codegens nested closure with block (2) codegens nested closure with block (2) - transforms block to proc literal transforms block to proc literal - allows giving less block args when transforming block to proc literal allows giving less block args when transforming block to proc literal - codegens closure with struct codegens closure with struct - codegens closure with nested context without new closured vars codegens closure with nested context without new closured vars - codegens simple closure at global scope codegens simple closure at global scope - codegens closure with self and arguments codegens closure with self and arguments - allows passing an external function along (2) allows passing an external function along (2) - codegens proc literal with struct codegens proc literal with struct - codegens closure with def that has an if codegens closure with def that has an if - codegens closured self in block (#3388) codegens closured self in block (#3388) - allows passing block as proc literal to new and to initialize allows passing block as proc literal to new and to initialize - transforms block to proc literal with free var transforms block to proc literal with free var - codegens closure with implicit self and var codegens closure with implicit self and var - codegens closure with instance var and block codegens closure with instance var and block - allows mixing yield and block.call allows mixing yield and block.call -Code gen: macro - can refer to union (1) can refer to union (1) - expands def macro with @type.name with virtual (2) expands def macro with @type.name with virtual (2) - determines if overrides (false) determines if overrides (false) - forwards line number forwards line number - expands def macro with instance var and method call (bug) expands def macro with instance var and method call (bug) - codegens macro with comment (bug) (#1396) codegens macro with comment (bug) (#1396) - gets enum members as constants gets enum members as constants - determines if variable has default value determines if variable has default value - expands @type.name in virtual metaclass (2) expands @type.name in virtual metaclass (2) - expands def macro with @type.instance_vars with virtual expands def macro with @type.instance_vars with virtual - determines if method exists (false) determines if method exists (false) - receives &block receives &block - executes all_subclasses executes all_subclasses - can refer to abstract (1) can refer to abstract (1) - determines if overrides, through another class (true) determines if overrides, through another class (true) - can refer to types can refer to types - replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) - recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added - determines if overrides (true) determines if overrides (true) - expands inline macro if (false) expands inline macro if (false) - gets default value of instance variable of generic type gets default value of instance variable of generic type gets default value of instance variable of generic type gets default value of instance variable of generic type gets default value of instance variable of generic type gets default value of instance variable of generic type gets default value of instance variable of generic type gets default value of instance variable of generic type gets default value of instance variable of generic type gets default value of instance variable of generic type - can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal - can refer to @type can refer to @type - expands def macro with @type.name with virtual expands def macro with @type.name with virtual - can use constants can use constants - expands @type.name in virtual metaclass (1) expands @type.name in virtual metaclass (1) - retains original yield expression (#2923) retains original yield expression (#2923) - expands macro defined in class expands macro defined in class - expands def macro with @type.instance_vars expands def macro with @type.instance_vars - can iterate union types can iterate union types - resolves alias in macro resolves alias in macro - expands def macro with var expands def macro with var - gets enum members with @type.constants gets enum members with @type.constants - expands inline macro if (true) expands inline macro if (true) - determines if overrides, with macro method (false) determines if overrides, with macro method (false) - can access type variables of a module can access type variables of a module - expands macro defined in base class expands macro defined in base class - can access type variables of a generic type can access type variables of a generic type - finds macro from virtual type finds macro from virtual type - uses indexed macro variable uses indexed macro variable - expands macro def with return (#1040) expands macro def with return (#1040) - forwards dir location forwards dir location - types macro expansion bug (#1734) types macro expansion bug (#1734) - allows overriding macro definition when redefining base class allows overriding macro definition when redefining base class - replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) - expands macro with default arg and splat (#784) expands macro with default arg and splat (#784) - determines if overrides, through module (true) determines if overrides, through module (true) - can access type variables of a tuple can access type variables of a tuple - keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro - gets methods gets methods - expands macro as class method and accesses @type expands macro as class method and accesses @type - executes with named arguments executes with named arguments - can refer to union (2) can refer to union (2) - stringifies type without virtual marker stringifies type without virtual marker - keeps line number with a block keeps line number with a block - executes subclasses executes subclasses - gets constant gets constant - codegens macro def with splat (#496) codegens macro def with splat (#496) - can access free variables can access free variables - can refer to abstract (2) can refer to abstract (2) - doesn't skip abstract classes when defining macro methods doesn't skip abstract classes when defining macro methods - uses indexed macro variable with many keys uses indexed macro variable with many keys - fixes empty types of macro expansions (#1379) fixes empty types of macro expansions (#1379) - expands macro that invokes another macro expands macro that invokes another macro - expands macro with escaped quotes (#895) expands macro with escaped quotes (#895) - doesn't reuse macro nodes (bug) doesn't reuse macro nodes (bug) - correctly recomputes call (bug) correctly recomputes call (bug) - uses tuple T in method with free vars uses tuple T in method with free vars - expands macro with arguments expands macro with arguments - declares constant in macro (#838) declares constant in macro (#838) - executes with named arguments for positional arg (2) executes with named arguments for positional arg (2) - responds correctly to has_constant? with @top_level responds correctly to has_constant? with @top_level - expands macro with default arg and splat (2) (#784) expands macro with default arg and splat (2) (#784) - expands inline macro for expands inline macro for - does block unpacking inside macro expression (#13707) does block unpacking inside macro expression (#13707) - copies base macro def to sub-subtype even after it was copied to a subtype (#448) copies base macro def to sub-subtype even after it was copied to a subtype (#448) - access to the program with @top_level access to the program with @top_level - expands def macro with @type.instance_vars with subclass expands def macro with @type.instance_vars with subclass - expands macro with default arg and splat (3) (#784) expands macro with default arg and splat (3) (#784) - determines if method exists (true) determines if method exists (true) - initializes class var in macro initializes class var in macro - doesn't override local variable when using macro variable (2) doesn't override local variable when using macro variable (2) - expands def macro with @type.name expands def macro with @type.name - finds macro in class finds macro in class - expands inline macro expands inline macro - expands @def in macro expands @def in macro - executes with named arguments for positional arg (1) executes with named arguments for positional arg (1) - gets default value of instance variable gets default value of instance variable - passes #826 passes #826 - devirtualizes @type devirtualizes @type - can access type variables can access type variables - can access type variables that are not types can access type variables that are not types - forwards file location forwards file location - runs macro with splat runs macro with splat - uses invocation context uses invocation context - keeps heredoc contents inside macro keeps heredoc contents inside macro - expands @def in inline macro expands @def in inline macro - allows macro with default arguments allows macro with default arguments - expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) - gets default value of instance variable of inherited type that also includes module gets default value of instance variable of inherited type that also includes module - expands def macro expands def macro - implicitly marks method as macro def when using @type implicitly marks method as macro def when using @type - runs macro with arg and splat runs macro with arg and splat - transforms hooks (bug) transforms hooks (bug) - expands Path with resolve method expands Path with resolve method - doesn't override local variable when using macro variable doesn't override local variable when using macro variable - initializes instance var in macro initializes instance var in macro - executes with named arguments for positional arg (3) executes with named arguments for positional arg (3) - checks if macro expansion returns (#821) checks if macro expansion returns (#821) - expands macro that yields expands macro that yields - gets correct class name when there are classes in the middle gets correct class name when there are classes in the middle - keeps line number with no block keeps line number with no block - expands macro and resolves type correctly expands macro and resolves type correctly - expands macro as class method expands macro as class method - says that enum has Flags annotation says that enum has Flags annotation - says that enum doesn't have Flags annotation says that enum doesn't have Flags annotation - codegens macro def with default arg (similar to #496) codegens macro def with default arg (similar to #496) - can use macro inside array literal can use macro inside array literal can use macro inside array literal can use macro inside array literal can use macro inside array literal can use macro inside array literal can use macro inside array literal can use macro inside array literal can use macro inside array literal can use macro inside array literal - correctly resolves constant inside block in macro def correctly resolves constant inside block in macro def - surrounds {{yield}} with begin/end surrounds {{yield}} with begin/end - errors if dynamic constant assignment after macro expansion errors if dynamic constant assignment after macro expansion - doesn't replace %q() (#2178) doesn't replace %q() (#2178) - expands macro expands macro - accepts compile-time flags accepts compile-time flags - doesn't replace %s in string (#2178) doesn't replace %s in string (#2178) -Semantic: def overload - types a call with overload selecting the most restrictive types a call with overload selecting the most restrictive - doesn't match tuples of different sizes doesn't match tuples of different sizes - matches a generic module argument matches a generic module argument - treats single splats with same restriction as equivalent (#12579) treats single splats with same restriction as equivalent (#12579) - prefers more specific overload than one with free variables prefers more specific overload than one with free variables - says `no overload matches` instead of `can't instantiate abstract class` on wrong argument in new method says `no overload matches` instead of `can't instantiate abstract class` on wrong argument in new method - matches a generic module argument with free var matches a generic module argument with free var - gets free variable from union restriction without a union gets free variable from union restriction without a union - matches generic class instance type with another one matches generic class instance type with another one - gets free variable from union restriction (2) gets free variable from union restriction (2) - types a call with overload with yield after typing another call without yield types a call with overload with yield after typing another call without yield - includes splat symbol in error message includes splat symbol in error message - types a call with overload self other match types a call with overload self other match - types a call with overload self with inherited type types a call with overload self with inherited type - matches virtual type to union matches virtual type to union - matches a union argument with free var, more types (2) matches a union argument with free var, more types (2) - restrict virtual type with virtual type restrict virtual type with virtual type - matches tuples and uses free var matches tuples and uses free var - single type restriction wins over union single type restriction wins over union - overloads union against non-union (#2904) overloads union against non-union (#2904) - types a call with overload with yield the other way types a call with overload with yield the other way - accepts overload with nilable type restriction accepts overload with nilable type restriction - matches a union argument with free var, more types (1) matches a union argument with free var, more types (1) - types a call with overload self types a call with overload self - gives correct error message, looking up parent defs, when no overload matches gives correct error message, looking up parent defs, when no overload matches - overloads on metaclass (3) (#2916) overloads on metaclass (3) (#2916) - lookup matches in virtual type inside union lookup matches in virtual type inside union - matches a generic module argument with free var (2) matches a generic module argument with free var (2) - considers NamedTuple in a module's including types (#10380) considers NamedTuple in a module's including types (#10380) - dispatches with named arg dispatches with named arg - errors when binding free variable to different types (2) errors when binding free variable to different types (2) - treats single splats with same restriction as equivalent (2) (#12579) treats single splats with same restriction as equivalent (2) (#12579) - compare_strictness - positional parameters - positional parameter with restriction vs single splat positional parameter with restriction vs single splat - single splat vs single splat with restriction (#3134) single splat vs single splat with restriction (#3134) - positional parameter with restriction vs single splat with stricter restriction positional parameter with restriction vs single splat with stricter restriction - positional parameter with stricter restriction vs single splat with restriction positional parameter with stricter restriction vs single splat with restriction - positional parameter vs single splat with restriction positional parameter vs single splat with restriction - specificity specificity - single splat restriction vs single splat with stricter restriction single splat restriction vs single splat with stricter restriction - named parameters - specificity specificity - double splat vs double splat with restriction double splat vs double splat with restriction - named parameter with stricter restriction vs double splat with restriction named parameter with stricter restriction vs double splat with restriction - named parameter vs double splat with restriction named parameter vs double splat with restriction - named parameter with restriction vs double splat (#5328) named parameter with restriction vs double splat (#5328) - named parameter with restriction vs double splat with stricter restriction named parameter with restriction vs double splat with stricter restriction - double splat restriction vs double splat with stricter restriction double splat restriction vs double splat with stricter restriction - specificity conflicts, named vs named - (required > splat) vs (required > splat) (required > splat) vs (required > splat) - (required > optional) vs (required > optional) (required > optional) vs (required > optional) - (required > splat) vs (optional > splat) (required > splat) vs (optional > splat) - (required > optional) vs (optional > splat) (required > optional) vs (optional > splat) - (optional > splat) vs (optional > splat) (optional > splat) vs (optional > splat) - (required > optional) vs (required > splat) (required > optional) vs (required > splat) - subsumption has higher precedence over specificity - double splat vs (required positional > optional positional) double splat vs (required positional > optional positional) - named vs (optional positional > single splat) named vs (optional positional > single splat) - same named parameter, required > optional same named parameter, required > optional - named vs (required named > double splat) named vs (required named > double splat) - single splat vs (optional named > double splat) single splat vs (optional named > double splat) - same positional parameter, required > single splat same positional parameter, required > single splat - double splat vs (required positional > single splat) double splat vs (required positional > single splat) - same named parameter, required > double splat same named parameter, required > double splat - single splat vs (required named > double splat) single splat vs (required named > double splat) - double splat vs (optional positional > single splat) double splat vs (optional positional > single splat) - named vs (required positional > single splat) named vs (required positional > single splat) - positional vs (optional positional > single splat) positional vs (optional positional > single splat) - named vs (optional named > double splat) named vs (optional named > double splat) - single splat vs (required named > optional named) single splat vs (required named > optional named) - same positional parameter, optional > single splat same positional parameter, optional > single splat - positional vs (required named > double splat) positional vs (required named > double splat) - positional vs (required positional > single splat) positional vs (required positional > single splat) - positional vs (optional named > double splat) positional vs (optional named > double splat) - positional vs (required positional > optional positional) positional vs (required positional > optional positional) - same positional parameter, required > optional same positional parameter, required > optional - named vs (required positional > optional positional) named vs (required positional > optional positional) - named vs (required named > optional named) named vs (required named > optional named) - same named parameter, optional > double splat same named parameter, optional > double splat - positional vs (required named > optional named) positional vs (required named > optional named) - specificity conflicts, positional vs named - (optional > splat) vs (required > optional) (optional > splat) vs (required > optional) - (required > splat) vs (optional > splat) (required > splat) vs (optional > splat) - (required > splat) vs (required > splat) (required > splat) vs (required > splat) - (required > optional) vs (optional > splat) (required > optional) vs (optional > splat) - (required > splat) vs (required > optional) (required > splat) vs (required > optional) - (required > optional) vs (required > splat) (required > optional) vs (required > splat) - (optional > splat) vs (optional > splat) (optional > splat) vs (optional > splat) - (optional > splat) vs (required > splat) (optional > splat) vs (required > splat) - (required > optional) vs (required > optional) (required > optional) vs (required > optional) - subsumption conflicts - named vs named named vs named - positional vs single splat positional vs single splat - positional vs double splat positional vs double splat - positional vs positional positional vs positional - positional vs named positional vs named - named vs double splat named vs double splat - single splat vs double splat single splat vs double splat - single splat vs named single splat vs named - matches types with free variables matches types with free variables - gives better error message with consecutive arguments sizes gives better error message with consecutive arguments sizes - matches a union metaclass argument with free var (#8071) matches a union metaclass argument with free var (#8071) - reports no overload matches with correct method owner (#2083) reports no overload matches with correct method owner (#2083) - types a call with overload selecting the most restrictive 2 types a call with overload selecting the most restrictive 2 - uses long name when no overload matches and name is the same (#1030) uses long name when no overload matches and name is the same (#1030) - compare self type with others compare self type with others - types a call with overload self in included module other type types a call with overload self in included module other type - does not consider global paths as free variables (1) does not consider global paths as free variables (1) - uses method defined in base class if the restriction doesn't match uses method defined in base class if the restriction doesn't match - overloads with named argument (#4465) overloads with named argument (#4465) - overloads on metaclass (#2916) overloads on metaclass (#2916) - types a call with overload Object type first overload types a call with overload Object type first overload - doesn't match with wrong number of type arguments (#313) doesn't match with wrong number of type arguments (#313) - finds method after including module in generic module (#1201) finds method after including module in generic module (#1201) - matches a union argument with free var matches a union argument with free var - resets free vars after a partial match is rejected (#10270) resets free vars after a partial match is rejected (#10270) - types a call with overload with yield types a call with overload with yield - can call overload with aliased generic restriction can call overload with aliased generic restriction - errors if union restriction has multiple free vars errors if union restriction has multiple free vars - errors if no overload matches on union against named arg with external param name (#10516) errors if no overload matches on union against named arg with external param name (#10516) - types a call with overload type second overload types a call with overload type second overload - gets free variable from union restriction gets free variable from union restriction - restricts on generic type without type arg restricts on generic type without type arg - types a call with overload matches virtual 2 types a call with overload matches virtual 2 - matches tuples of different sizes matches tuples of different sizes - resets free vars after a partial match is rejected (2) (#10185) resets free vars after a partial match is rejected (2) (#10185) - matches on partial union matches on partial union - restrict matches to minimum necessary 1 restrict matches to minimum necessary 1 - overloads on metaclass (2) (#2916) overloads on metaclass (2) (#2916) - types a call with overload type first overload types a call with overload type first overload - does not consider global paths as free variables (2) does not consider global paths as free variables (2) - restricts on generic type with free type arg restricts on generic type with free type arg - doesn't crash on unknown metaclass doesn't crash on unknown metaclass - types a call with overload self in included module types a call with overload self in included module - errors if generic type doesn't match errors if generic type doesn't match - errors if no overload matches on union against named arg (#2640) errors if no overload matches on union against named arg (#2640) - dispatch call to def with restrictions dispatch call to def with restrictions - filter union type with virtual filter union type with virtual - matches tuple with underscore matches tuple with underscore - dispatch call to def with restrictions dispatch call to def with restrictions - types a call with overload matches virtual types a call with overload matches virtual - types a call with overload types a call with overload - restricts union to generic class restricts union to generic class - errors when binding free variable to different types errors when binding free variable to different types - types a call with overload matches virtual 3 types a call with overload matches virtual 3 - errors if union restriction has multiple free vars (2) errors if union restriction has multiple free vars (2) - can call overload with generic restriction can call overload with generic restriction + normalizes and with is_a? on exp normalizes and with is_a? on exp +Semantic: c union + types union getter via pointer types union getter via pointer + types Union#new types Union#new + types union setter via pointer types union setter via pointer + errors if using void in union field type errors if using void in union field type + types union getter types union getter + errors if using void via typedef in union field type errors if using void via typedef in union field type + types union setter types union setter + errors if setting closure errors if setting closure + errors on empty c union (#633) errors on empty c union (#633) + types c union types c union +Code gen: def with default value + resolves expanded call to current type, not to virtual type resolves expanded call to current type, not to virtual type + codegens def with one default value codegens def with one default value + considers first the one with more arguments considers first the one with more arguments + considers first the one with a restriction considers first the one with a restriction + doesn't mix types of instance vars with initialize and new doesn't mix types of instance vars with initialize and new + codegens def new with one default value codegens def new with one default value +Normalize: op assign + normalizes exp.value &&= normalizes exp.value &&= + normalizes exp[value] += normalizes exp[value] += + normalizes var -= normalizes var -= + normalizes exp[value] &&= normalizes exp[value] &&= + normalizes exp[value] ||= normalizes exp[value] ||= + normalizes var &*= normalizes var &*= + normalizes exp[0] += normalizes exp[0] += + normalizes var ||= normalizes var ||= + normalizes var &&= normalizes var &&= + normalizes @var.value += normalizes @var.value += + normalizes var &+= normalizes var &+= + normalizes var[0] += normalizes var[0] += + normalizes exp.value ||= normalizes exp.value ||= + normalizes var.value += normalizes var.value += + normalizes var *= normalizes var *= + normalizes exp.value += normalizes exp.value += + normalizes @var[0] += normalizes @var[0] += + normalizes @@var.value += normalizes @@var.value += + normalizes var += normalizes var += + normalizes @@var[0] += normalizes @@var[0] += + normalizes var &-= normalizes var &-= +Normalize: string interpolation + normalizes heredoc normalizes heredoc + normalizes string interpolation with multiple lines normalizes string interpolation with multiple lines + normalizes string interpolation normalizes string interpolation + replaces string constant replaces string constant + replaces string constant that results from macro expansion replaces string constant that results from macro expansion + replaces through multiple levels replaces through multiple levels +Crystal::Command::FormatCommand + checks files format checks files format + formats stdin (bug + show-backtrace) formats stdin (bug + show-backtrace) + formats stdin (syntax error) formats stdin (syntax error) + formats files (bug + show-stacktrace) formats files (bug + show-stacktrace) + checks files format (excludes + includes) checks files format (excludes + includes) + formats files (error) formats files (error) + formats stdin (formatted) formats stdin (formatted) + formats files formats files + checks files format (excludes) checks files format (excludes) + formats files (dir) formats files (dir) + checks files format (ok) checks files format (ok) + formats stdin (bug) formats stdin (bug) + formats stdin formats stdin + formats files (bug) formats files (bug) + formats stdin (invalid byte sequence error) formats stdin (invalid byte sequence error) Code gen: type declaration - codegens initialize instance var with var declaration codegens initialize instance var with var declaration + codegens initialize instance var of superclass codegens initialize instance var of superclass + declares and initializes var declares and initializes var declares and initializes declares and initializes codegens initialize instance var codegens initialize instance var - declares and initializes var declares and initializes var - codegens initialize instance var of superclass codegens initialize instance var of superclass -Code gen: no return - codegens if with no return and variable used afterwards codegens if with no return and variable used afterwards - codegens untyped typeof (#5105) codegens untyped typeof (#5105) - codegens Pointer(NoReturn).malloc codegens Pointer(NoReturn).malloc - codegen types exception handler as NoReturn if ensure is NoReturn codegen types exception handler as NoReturn if ensure is NoReturn - codegens call with no return because of falsey if (#3661) codegens call with no return because of falsey if (#3661) - codegens no return variable declaration (#1508) codegens no return variable declaration (#1508) - codegens no return instance variable declaration (#1508) codegens no return instance variable declaration (#1508) - codegens if with NoReturn on then and union on else codegens if with NoReturn on then and union on else -Code gen: regex literal spec - works in a class variable (#10951) works in a class variable (#10951) works in a class variable (#10951) works in a class variable (#10951) works in a class variable (#10951) works in a class variable (#10951) works in a class variable (#10951) works in a class variable (#10951) works in a class variable (#10951) works in a class variable (#10951) -Semantic: uninitialized - errors if declares var and then assigns other type errors if declares var and then assigns other type - declares as uninitialized declares as uninitialized - errors if declaring generic type without type vars (with instance var) errors if declaring generic type without type vars (with instance var) - works with uninitialized NoReturn (#3314) works with uninitialized NoReturn (#3314) - can uninitialize variable outside initialize (#2828) can uninitialize variable outside initialize (#2828) - disallows declaring var of type Struct disallows declaring var of type Struct - disallows declaring var of type Value disallows declaring var of type Value - uses virtual type for uninitialized (#8216) uses virtual type for uninitialized (#8216) - disallows declaring var of type Float disallows declaring var of type Float - declares as uninitialized and reads it declares as uninitialized and reads it - declares an instance variable in initialize as uninitialized declares an instance variable in initialize as uninitialized - disallows declaring var of type Enum disallows declaring var of type Enum - disallows declaring var of type Object disallows declaring var of type Object - disallows declaring var of type Class disallows declaring var of type Class - can uninitialize variable outside initialize, generic (#2828) can uninitialize variable outside initialize, generic (#2828) - disallows declaring var of type Number disallows declaring var of type Number - can use uninitialized with class type (#2940) can use uninitialized with class type (#2940) - disallows declaring var of type Int disallows declaring var of type Int - errors if declaring variable multiple times with different types (#917) errors if declaring variable multiple times with different types (#917) - errors if declaring generic type without type vars (with class var) errors if declaring generic type without type vars (with class var) - disallows declaring var of type Reference disallows declaring var of type Reference - has type (#3641) has type (#3641) -Semantic: previous_def - errors if there's no previous def errors if there's no previous def - types previous def with explicit arguments types previous def with explicit arguments - types previous def with forwarded arguments, different internal names (#8895) types previous def with forwarded arguments, different internal names (#8895) - types previous def with named arguments, def has bare splat parameter (2) (#8895) types previous def with named arguments, def has bare splat parameter (2) (#8895) - types previous def with named arguments, def has double splat parameter (#8895) types previous def with named arguments, def has double splat parameter (#8895) - types previous def with named arguments, def has bare splat parameter (#8895) types previous def with named arguments, def has bare splat parameter (#8895) - types previous def with forwarded arguments, def has parameters types previous def with forwarded arguments, def has parameters - types previous def when inside fun types previous def when inside fun - says wrong number of arguments for previous_def (#1223) says wrong number of arguments for previous_def (#1223) - types previous def with restrictions types previous def with restrictions - types previous def types previous def - types previous def when inside fun and forwards args types previous def when inside fun and forwards args - types previous def in generic class types previous def in generic class - types previous def with forwarded arguments, def has bare splat parameter (#8895) types previous def with forwarded arguments, def has bare splat parameter (#8895) -Code gen: if - codegens if without an else with false codegens if without an else with false - doesn't generate truthy if branch if doesn't need value (bug) doesn't generate truthy if branch if doesn't need value (bug) - codegen if with union type and else without type codegen if with union type and else without type - codegens if with return in both branches codegens if with return in both branches - codegens if with return in else preserves type filter codegens if with return in else preserves type filter codegens if with return in else preserves type filter codegens if with return in else preserves type filter codegens if with return in else preserves type filter codegens if with return in else preserves type filter codegens if with return in else preserves type filter codegens if with return in else preserves type filter codegens if with return in else preserves type filter codegens if with return in else preserves type filter - restricts with || always falsey restricts with || always falsey - codegen if inside if codegen if inside if - codegens if of nilable type in then codegens if of nilable type in then - doesn't crash with if !is_a? using var in then doesn't crash with if !is_a? using var in then - codegen if with union type and then without type codegen if with union type and then without type - codegens #3104 codegens #3104 - codegens if with virtual codegens if with virtual - codegens if with nested if that raises codegens if with nested if that raises codegens if with nested if that raises codegens if with nested if that raises codegens if with nested if that raises codegens if with nested if that raises codegens if with nested if that raises codegens if with nested if that raises codegens if with nested if that raises codegens if with nested if that raises - codegens bug #1729 codegens bug #1729 - codegens if with an else with true codegens if with an else with true - codegens if with an else with false codegens if with an else with false - codes if with two whiles codes if with two whiles - doesn't crash no NoReturn var (true left cond) (#1823) doesn't crash no NoReturn var (true left cond) (#1823) - codegens if value from then codegens if value from then - codegens if of nilable type in then 2 codegens if of nilable type in then 2 - codegens if without an else with true codegens if without an else with true - codegen if with nested if that returns codegen if with nested if that returns - codegens nested if with var (ssa bug) codegens nested if with var (ssa bug) - considers or truthy/falsey right considers or truthy/falsey right - codegens if inside def without an else with true codegens if inside def without an else with true - codegens if with int codegens if with int - codegens if with nil codegens if with nil - doesn't crash no NoReturn var (non-true left cond) (#1823) doesn't crash no NoReturn var (non-true left cond) (#1823) - codegens if with pointer 0x100000000 pointer codegens if with pointer 0x100000000 pointer - codegens if with return and no else codegens if with return and no else - codegens if of nilable type in else 3 codegens if of nilable type in else 3 - codegens if with union codegens if with union - codegens if of nilable type in else codegens if of nilable type in else - doesn't crash with if !var using var in else doesn't crash with if !var using var in else -Code gen: union type - sorts restrictions when there are unions sorts restrictions when there are unions - codegens union to_s codegens union to_s codegens union to_s codegens union to_s codegens union to_s codegens union to_s codegens union to_s codegens union to_s codegens union to_s codegens union to_s - assigns union to union assigns union to union assigns union to union assigns union to union assigns union to union assigns union to union assigns union to union assigns union to union assigns union to union assigns union to union - codegens union type when no obj and restrictions codegens union type when no obj and restrictions - codegens if with same nested union codegens if with same nested union - codegens union type when no obj codegens union type when no obj - codegens union type for instance var codegens union type for instance var - codegens union type when obj is union and no args codegens union type when obj is union and no args - assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 - codegens union type as return value codegens union type as return value - assigns union to larger union assigns union to larger union assigns union to larger union assigns union to larger union assigns union to larger union assigns union to larger union assigns union to larger union assigns union to larger union assigns union to larger union assigns union to larger union - codegens union type when obj is not union but arg is codegens union type when obj is not union but arg is - codegens union type when obj union but arg is not codegens union type when obj union but arg is not - codegens union type when obj is union and arg is union codegens union type when obj is union and arg is union - respects union payload alignment when upcasting Bool (#14898) respects union payload alignment when upcasting Bool (#14898) - dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable - assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 - provides T as a tuple literal provides T as a tuple literal + codegens initialize instance var with var declaration codegens initialize instance var with var declaration +Codegen: double splat + double splats named argument into arguments (1) double splats named argument into arguments (1) + double splats named argument with positional arguments double splats named argument with positional arguments + matches double splat on method with named args and regular args matches double splat on method with named args and regular args + double splats twice double splats twice + double splats named argument with named args (1) double splats named argument with named args (1) + double splats named argument with named args (2) double splats named argument with named args (2) + matches double splat with regular splat matches double splat with regular splat + removes literal types in all matches (#6239) removes literal types in all matches (#6239) + double splats named argument into arguments (2) double splats named argument into arguments (2) + evaluates double splat argument just once (#2677) evaluates double splat argument just once (#2677) + matches double splat on method with named args matches double splat on method with named args +View#module_name + hyphen followed by non-ascii letter is replaced by its character hyphen followed by non-ascii letter is replaced by its character + underscore is ignored underscore is ignored + namespace is divided by hyphen namespace is divided by hyphen +Crystal::Repl::Interpreter + unions + returns union type returns union type + put and remove from union, together with is_a? (truthy case) put and remove from union, together with is_a? (truthy case) + put and remove from union in instance var put and remove from union in instance var + returns large union type (#15041) returns large union type (#15041) + converts from NilableType to NonGenericClassType converts from NilableType to NonGenericClassType + put and remove from union, together with is_a? (falsey case) put and remove from union, together with is_a? (falsey case) + discards is_a? discards is_a? + puts union inside union puts union inside union + put and remove from union in local var put and remove from union in local var +Semantic: static array + can match N type argument of static array (#1203) can match N type argument of static array (#1203) + doesn't match other number type argument of static array (#1203) doesn't match other number type argument of static array (#1203) + types static array new with size being a constant types static array new with size being a constant + doesn't crash on restriction (#584) doesn't crash on restriction (#584) + can match number type argument of static array (#1203) can match number type argument of static array (#1203) + types static array new with size being a computed constant types static array new with size being a computed constant + doesn't crash on offsetof (#8858) doesn't crash on offsetof (#8858) + allows instantiating static array instance var in initialize of generic type allows instantiating static array instance var in initialize of generic type + types static array new types static array new + types static array with type as size types static array with type as size + errors on negative static array size errors on negative static array size + doesn't crash on sizeof (#8858) doesn't crash on sizeof (#8858) + types static array with var declaration types static array with var declaration + errors if trying to instantiate static array with N not an integer errors if trying to instantiate static array with N not an integer + doesn't crash on instance_sizeof (#8858) doesn't crash on instance_sizeof (#8858) + types static array new with size being a nested constant inside type declaration (#5426) types static array new with size being a nested constant inside type declaration (#5426) + types static array new with size being a computed constant, and use N (bug) types static array new with size being a computed constant, and use N (bug) +Semantic: tuples + accept tuple in type restriction accept tuple in type restriction + errors if non-tuple is splatted inside tuple (2) errors if non-tuple is splatted inside tuple (2) + doesn't unify tuple metaclasses (#5384) doesn't unify tuple metaclasses (#5384) + matches tuple with splat (#2932) matches tuple with splat (#2932) + errors on recursive splat expansion (#218) errors on recursive splat expansion (#218) + matches tuple with splat (2) (#2932) matches tuple with splat (2) (#2932) + errors on tuple too big (#3816) errors on tuple too big (#3816) + errors if using two splat indices on restriction errors if using two splat indices on restriction + merges two tuple types of same size merges two tuple types of same size + #[](RangeLiteral) + types, begin-less types, begin-less + types, inbound begin, end-less types, inbound begin, end-less + types, out of bound begin, nilable types, out of bound begin, nilable + types, inbound begin types, inbound begin + gives error when begin index is out of range gives error when begin index is out of range + types, begin-less, end-less types, begin-less, end-less + types, metaclass index types, metaclass index + types, exclusive range types, exclusive range + types, inbound begin, nilable types, inbound begin, nilable + types tuple of three elements types tuple of three elements + #[](NumberLiteral) + types, metaclass index types, metaclass index + gives error when indexing out of range on empty tuple gives error when indexing out of range on empty tuple + gives error when indexing out of range gives error when indexing out of range + types, inbound index types, inbound index + types, inbound index, nilable types, inbound index, nilable + types, out of bound, nilable types, out of bound, nilable + gives error when using named args on Tuple gives error when using named args on Tuple + types tuple of one element and then two elements types tuple of one element and then two elements + #[](Path) + works for tuple indexer works for tuple indexer + works for named tuple indexer works for named tuple indexer + errors on recursive splat expansion (2) (#361) errors on recursive splat expansion (2) (#361) + doesn't trigger recursive splat expansion error (#7164) doesn't trigger recursive splat expansion error (#7164) + allows tuple covariance allows tuple covariance + errors if non-tuple is splatted inside tuple errors if non-tuple is splatted inside tuple + types T as a tuple of metaclasses types T as a tuple of metaclasses + can iterate T can iterate T + errors on named tuple too big errors on named tuple too big + doesn't crash on tuple in not executed block (#6718) doesn't crash on tuple in not executed block (#6718) + can call [] on T can call [] on T + accepts tuple covariance in array accepts tuple covariance in array + types tuple with splats inside types tuple with splats inside + errors on recursive splat expansion (1) (#361) errors on recursive splat expansion (1) (#361) + can name a tuple type can name a tuple type + types tuple of one element types tuple of one element + doesn't error if Tuple has no args doesn't error if Tuple has no args Code gen: nilable cast - does nilable cast (true) does nilable cast (true) - does upcast does upcast does nilable cast (always true) does nilable cast (always true) - types as? with wrong type (#2775) types as? with wrong type (#2775) - upcasts type to virtual (#3304) upcasts type to virtual (#3304) - does cast to nil (1) does cast to nil (1) + upcasts type to virtual (2) (#3304) upcasts type to virtual (2) (#3304) casts union type to nilable type (#9342) casts union type to nilable type (#9342) + does cast to nil (1) does cast to nil (1) does cast to nil (2) does cast to nil (2) + types as? with wrong type (#2775) types as? with wrong type (#2775) codegens with NoReturn codegens with NoReturn + casts with block var that changes type (#3341) casts with block var that changes type (#3341) does nilable cast (false) does nilable cast (false) + upcasts type to virtual (#3304) upcasts type to virtual (#3304) + does upcast does upcast + does nilable cast (true) does nilable cast (true) +Codegen: const + inlines simple const inlines simple const + define a constant in lib define a constant in lib + initializes simple const initializes simple const + uses correct types lookup uses correct types lookup uses correct types lookup uses correct types lookup uses correct types lookup uses correct types lookup uses correct types lookup uses correct types lookup uses correct types lookup uses correct types lookup + codegens constant that is declared later because of virtual dispatch codegens constant that is declared later because of virtual dispatch + finds nearest constant first finds nearest constant first + codegens constant that refers to another constant that is a struct codegens constant that refers to another constant that is a struct codegens constant that refers to another constant that is a struct codegens constant that refers to another constant that is a struct codegens constant that refers to another constant that is a struct codegens constant that refers to another constant that is a struct codegens constant that refers to another constant that is a struct codegens constant that refers to another constant that is a struct codegens constant that refers to another constant that is a struct codegens constant that refers to another constant that is a struct + initializes ARGC_UNSAFE initializes ARGC_UNSAFE + initialize const that might raise an exception initialize const that might raise an exception initialize const that might raise an exception initialize const that might raise an exception initialize const that might raise an exception initialize const that might raise an exception initialize const that might raise an exception initialize const that might raise an exception initialize const that might raise an exception initialize const that might raise an exception + supports closured vars inside initializers (#10474) supports closured vars inside initializers (#10474) + allows implicit self in constant, called from another class (bug) allows implicit self in constant, called from another class (bug) allows implicit self in constant, called from another class (bug) allows implicit self in constant, called from another class (bug) allows implicit self in constant, called from another class (bug) allows implicit self in constant, called from another class (bug) allows implicit self in constant, called from another class (bug) allows implicit self in constant, called from another class (bug) allows implicit self in constant, called from another class (bug) allows implicit self in constant, called from another class (bug) + inlines const with math inlines const with math + constants with expression constants with expression + codegens two consts with same variable name codegens two consts with same variable name codegens two consts with same variable name codegens two consts with same variable name codegens two consts with same variable name codegens two consts with same variable name codegens two consts with same variable name codegens two consts with same variable name codegens two consts with same variable name codegens two consts with same variable name + finds global constant finds global constant + synchronizes initialization of constants synchronizes initialization of constants synchronizes initialization of constants synchronizes initialization of constants synchronizes initialization of constants synchronizes initialization of constants synchronizes initialization of constants synchronizes initialization of constants synchronizes initialization of constants synchronizes initialization of constants + doesn't crash if constant is used, but class is never instantiated (#1106) doesn't crash if constant is used, but class is never instantiated (#1106) + codegens variable assignment in const codegens variable assignment in const codegens variable assignment in const codegens variable assignment in const codegens variable assignment in const codegens variable assignment in const codegens variable assignment in const codegens variable assignment in const codegens variable assignment in const codegens variable assignment in const + inlines char const inlines char const + runs const side effects (#8862) runs const side effects (#8862) runs const side effects (#8862) runs const side effects (#8862) runs const side effects (#8862) runs const side effects (#8862) runs const side effects (#8862) runs const side effects (#8862) runs const side effects (#8862) runs const side effects (#8862) + supports storing function returning nil supports storing function returning nil + inlines bool const inlines bool const + initializes simple const via another const initializes simple const via another const + works with variable declared inside if works with variable declared inside if works with variable declared inside if works with variable declared inside if works with variable declared inside if works with variable declared inside if works with variable declared inside if works with variable declared inside if works with variable declared inside if works with variable declared inside if + uses const before declaring it in another module uses const before declaring it in another module uses const before declaring it in another module uses const before declaring it in another module uses const before declaring it in another module uses const before declaring it in another module uses const before declaring it in another module uses const before declaring it in another module uses const before declaring it in another module uses const before declaring it in another module + inlines const referencing another const inlines const referencing another const + gets pointerof constant inside class gets pointerof constant inside class gets pointerof constant inside class gets pointerof constant inside class gets pointerof constant inside class gets pointerof constant inside class gets pointerof constant inside class gets pointerof constant inside class gets pointerof constant inside class gets pointerof constant inside class + invokes block in const invokes block in const invokes block in const invokes block in const invokes block in const invokes block in const invokes block in const invokes block in const invokes block in const invokes block in const + define a constant define a constant + support constant inside a def support constant inside a def + inlines enum value inlines enum value + support nested constant support nested constant + declaring var declaring var declaring var declaring var declaring var declaring var declaring var declaring var declaring var declaring var + gets pointerof complex constant gets pointerof complex constant gets pointerof complex constant gets pointerof complex constant gets pointerof complex constant gets pointerof complex constant gets pointerof complex constant gets pointerof complex constant gets pointerof complex constant gets pointerof complex constant + uses const before declaring it (hoisting) uses const before declaring it (hoisting) uses const before declaring it (hoisting) uses const before declaring it (hoisting) uses const before declaring it (hoisting) uses const before declaring it (hoisting) uses const before declaring it (hoisting) uses const before declaring it (hoisting) uses const before declaring it (hoisting) uses const before declaring it (hoisting) + declare constants in right order declare constants in right order declare constants in right order declare constants in right order declare constants in right order declare constants in right order declare constants in right order declare constants in right order declare constants in right order declare constants in right order + gets pointerof constant gets pointerof constant gets pointerof constant gets pointerof constant gets pointerof constant gets pointerof constant gets pointerof constant gets pointerof constant gets pointerof constant gets pointerof constant + allows constants with same name allows constants with same name +Crystal::Repl::Interpreter + is_a? + does is_a? from NilableType to NonGenericClassType (true) does is_a? from NilableType to NonGenericClassType (true) + does is_a? from NilableType to GenericClassInstanceType (false) does is_a? from NilableType to GenericClassInstanceType (false) + does is_a? from NilableType to GenericClassInstanceType (true) does is_a? from NilableType to GenericClassInstanceType (true) + does is_a? from VirtualType to NonGenericClassType (false) does is_a? from VirtualType to NonGenericClassType (false) + does is_a? from VirtualType to NonGenericClassType (true) does is_a? from VirtualType to NonGenericClassType (true) + does is_a? from NilableReferenceUnionType to NonGenericClassType (true) does is_a? from NilableReferenceUnionType to NonGenericClassType (true) + does is_a? from NilableReferenceUnionType to NonGenericClassType (false) does is_a? from NilableReferenceUnionType to NonGenericClassType (false) + does is_a? from NilableType to NonGenericClassType (false) does is_a? from NilableType to NonGenericClassType (false) + does is_a? from NilableProcType to non-Nil does is_a? from NilableProcType to non-Nil + does is_a? from NilableProcType to Nil does is_a? from NilableProcType to Nil +Code gen: cast + casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError + downcasts from union to union with different alignment downcasts from union to union with different alignment downcasts from union to union with different alignment downcasts from union to union with different alignment downcasts from union to union with different alignment downcasts from union to union with different alignment downcasts from union to union with different alignment downcasts from union to union with different alignment downcasts from union to union with different alignment downcasts from union to union with different alignment + casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError + can cast from Void* to virtual type (#3014) can cast from Void* to virtual type (#3014) + casts to module casts to module casts to module casts to module casts to module casts to module casts to module casts to module casts to module casts to module + casts between union types, where union has a tuple type (#3377) casts between union types, where union has a tuple type (#3377) + codegens class method when type id is available but not a virtual type (#3490) codegens class method when type id is available but not a virtual type (#3490) + sidecasts from union to union with different alignment sidecasts from union to union with different alignment sidecasts from union to union with different alignment sidecasts from union to union with different alignment sidecasts from union to union with different alignment sidecasts from union to union with different alignment sidecasts from union to union with different alignment sidecasts from union to union with different alignment sidecasts from union to union with different alignment sidecasts from union to union with different alignment + allows casting nilable type to Void* (1) allows casting nilable type to Void* (1) + casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError + doesn't corrupt stack when downcasting union to union with different alignment (#14285) doesn't corrupt stack when downcasting union to union with different alignment (#14285) + casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError + can cast to metaclass (#11121) can cast to metaclass (#11121) + allows casting nilable type to Void* (2) allows casting nilable type to Void* (2) + casts from union to another union casts from union to another union casts from union to another union casts from union to another union casts from union to another union casts from union to another union casts from union to another union casts from union to another union casts from union to another union casts from union to another union casts with block var that changes type (#3341) casts with block var that changes type (#3341) + casts from int to int casts from int to int casts from int to int casts from int to int casts from int to int casts from int to int casts from int to int casts from int to int casts from int to int casts from int to int + allows casting object to pointer and back allows casting object to pointer and back + allows casting nilable type to Void* (3) allows casting nilable type to Void* (3) + upcasts from non-generic to generic upcasts from non-generic to generic + casts (bug) casts (bug) casts (bug) casts (bug) casts (bug) casts (bug) casts (bug) casts (bug) casts (bug) casts (bug) + casts to bigger union casts to bigger union + upcasts from union to union with different alignment upcasts from union to union with different alignment upcasts from union to union with different alignment upcasts from union to union with different alignment upcasts from union to union with different alignment upcasts from union to union with different alignment upcasts from union to union with different alignment upcasts from union to union with different alignment upcasts from union to union with different alignment upcasts from union to union with different alignment + casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) + cast virtual metaclass type to nilable virtual instance type (#12628) cast virtual metaclass type to nilable virtual instance type (#12628) + casts from nilable to nil casts from nilable to nil casts from nilable to nil casts from nilable to nil casts from nilable to nil casts from nilable to nil casts from nilable to nil casts from nilable to nil casts from nilable to nil casts from nilable to nil + allows casting nil to Void* allows casting nil to Void* + casts from virtual to single type casts from virtual to single type casts from virtual to single type casts from virtual to single type casts from virtual to single type casts from virtual to single type casts from virtual to single type casts from virtual to single type casts from virtual to single type casts from virtual to single type upcasts type to virtual (2) (#3304) upcasts type to virtual (2) (#3304) -expand - expands macro expression inside def expands macro expression inside def - expands macro control {% if %} with indent expands macro control {% if %} with indent - expands macro expression {{ ... }} with cursor inside it expands macro expression {{ ... }} with cursor inside it - expands macro expression inside def of private enum expands macro expression inside def of private enum - expands macro expression inside private struct expands macro expression inside private struct - expands macro control {% for %} with indent expands macro control {% for %} with indent - expands macro expression inside def of private struct expands macro expression inside def of private struct - doesn't expand normal call doesn't expand normal call - doesn't expand macro expression with cursor out of end doesn't expand macro expression with cursor out of end - expands simple macro expands simple macro - expands macro expression inside private enum expands macro expression inside private enum - expands macro expression inside class expands macro expression inside class - doesn't expand macro expression doesn't expand macro expression - expands simple macro with cursor inside it expands simple macro with cursor inside it - expands macro expression inside def of module expands macro expression inside def of module - expands macros with 3 level expands macros with 3 level - expands macro expression inside C union expands macro expression inside C union - expands macro expression {% ... %} with cursor at end of it expands macro expression {% ... %} with cursor at end of it - expands macro expression inside enum expands macro expression inside enum - expands simple macro with cursor at end of it expands simple macro with cursor at end of it - expands macro expression inside def of private module expands macro expression inside def of private module - expands macro control {% if %} with cursor inside it expands macro control {% if %} with cursor inside it - expands macro control {% for %} expands macro control {% for %} - expands macro expression inside def of private module expands macro expression inside def of private module - expands macro control {% if %} with cursor at end of it expands macro control {% if %} with cursor at end of it - expands macro expression inside module expands macro expression inside module - expands macro expression inside C union of private lib expands macro expression inside C union of private lib - expands macro of module expands macro of module - expands macro control {% for %} with cursor inside it expands macro control {% for %} with cursor inside it - expands complex macro expands complex macro - expands macro expression inside private lib expands macro expression inside private lib - expands macro of module with cursor at module name expands macro of module with cursor at module name - expands macro expression inside def of nested module expands macro expression inside def of nested module - expands macro expression {{ ... }} with cursor end of it expands macro expression {{ ... }} with cursor end of it - expands macro expression inside private class expands macro expression inside private class - doesn't expand macro expression doesn't expand macro expression - expands macro control {% for %} with cursor at end of it expands macro control {% for %} with cursor at end of it - expands macro expression inside C struct of private lib expands macro expression inside C struct of private lib - expands macro expression inside lib expands macro expression inside lib - expands macro expression inside private def expands macro expression inside private def - expands macro expression inside fun expands macro expression inside fun - expands macro expression {% ... %} expands macro expression {% ... %} - expands macro expression inside private module expands macro expression inside private module - expands macro of module with cursor at dot expands macro of module with cursor at dot - expands macro expression inside struct expands macro expression inside struct - expands macro expression {{ ... }} expands macro expression {{ ... }} - expands macro with doc expands macro with doc - expands macros with 2 level expands macros with 2 level - expands macro control {% if %} expands macro control {% if %} - expands macro expression inside C struct expands macro expression inside C struct - expands macro of module inside module expands macro of module inside module - expands macro expression inside def of nested private module expands macro expression inside def of nested private module - expands macro expression inside def of private class expands macro expression inside def of private class -Crystal::Repl::Interpreter - exception handling - executes ensure when returning from a block executes ensure when returning from a block - captures exception in variable captures exception in variable - executes ensure when exception is raised in body executes ensure when exception is raised in body - does else does else - raises and rescues specific exception type raises and rescues specific exception type - does ensure for else does ensure for else - does ensure for else when else raises does ensure for else when else raises - executes ensure when breaking from a block executes ensure when breaking from a block - executes ensure when returning a big value from a block executes ensure when returning a big value from a block - does ensure with explicit return does ensure with explicit return - does ensure without rescue/raise does ensure without rescue/raise - executes ensure when exception is raised in rescue executes ensure when exception is raised in rescue - executes ensure when returning from a block (2) executes ensure when returning from a block (2) - does rescue when nothing is raised does rescue when nothing is raised - raises and rescues anything raises and rescues anything - raises and rescues anything, does ensure when an exception is rescued raises and rescues anything, does ensure when an exception is rescued -Semantic: private - doesn't find private thing defined through recursive macro (#8715) doesn't find private thing defined through recursive macro (#8715) - finds private type from inside namespace finds private type from inside namespace - doesn't find private class in another file doesn't find private class in another file - doesn't find private module from outside namespace doesn't find private module from outside namespace - doesn't find private class from outside namespace doesn't find private class from outside namespace - doesn't find private constant from outside namespace, long name (#8831) doesn't find private constant from outside namespace, long name (#8831) - doesn't define private alias with global type name doesn't define private alias with global type name - doesn't find private def defined in macro in another file (#7681) doesn't find private def defined in macro in another file (#7681) - doesn't find private macro in another file doesn't find private macro in another file - doesn't find private alias from outside namespace doesn't find private alias from outside namespace - doesn't define incorrect type in top-level namespace (#13511) doesn't define incorrect type in top-level namespace (#13511) - find module private macro inside the module find module private macro inside the module - find module private macro inside a module, which is inherited by the module find module private macro inside a module, which is inherited by the module - doesn't find module private macro outside the module doesn't find module private macro outside the module - doesn't find private lib from outside namespace doesn't find private lib from outside namespace - can use types in private type can use types in private type - doesn't define incorrect type in top-level namespace (#13511) doesn't define incorrect type in top-level namespace (#13511) - doesn't define private constant with global type name doesn't define private constant with global type name - doesn't define private class with global type name doesn't define private class with global type name - doesn't find private module defined through macro (#8715) doesn't find private module defined through macro (#8715) - doesn't find private enum from outside namespace, long name (#8831) doesn't find private enum from outside namespace, long name (#8831) - doesn't find private enum from outside namespace doesn't find private enum from outside namespace - doesn't find private macro defined through macro (#8715) doesn't find private macro defined through macro (#8715) - doesn't define incorrect type in top-level namespace (#13511) doesn't define incorrect type in top-level namespace (#13511) - doesn't find private module from outside namespace, long name (#8831) doesn't find private module from outside namespace, long name (#8831) - doesn't define private enum with global type name doesn't define private enum with global type name - finds private def when invoking from inside macro (#2082) finds private def when invoking from inside macro (#2082) - doesn't find private constant from outside namespace doesn't find private constant from outside namespace - doesn't find private def in another file doesn't find private def in another file - doesn't define incorrect type in top-level namespace (#13511) doesn't define incorrect type in top-level namespace (#13511) - types private def correctly types private def correctly - doesn't find private constant in another file (#7850) doesn't find private constant in another file (#7850) - finds private type in same file finds private type in same file - finds private macro in same file finds private macro in same file - can use class var initializer in private type can use class var initializer in private type - doesn't define private module with global type name doesn't define private module with global type name - doesn't find private alias from outside namespace, long name (#8831) doesn't find private alias from outside namespace, long name (#8831) - finds private class in macro expansion finds private class in macro expansion - finds private def in same file that invokes another def finds private def in same file that invokes another def - can use instance var initializer in private type can use instance var initializer in private type - doesn't find private lib from outside namespace, long name (#8831) doesn't find private lib from outside namespace, long name (#8831) - doesn't inherit visibility from class node in macro hook (#8794) doesn't inherit visibility from class node in macro hook (#8794) - doesn't find private alias in another file doesn't find private alias in another file - doesn't find private class defined through macro (#8715) doesn't find private class defined through macro (#8715) - doesn't find private class from outside namespace, long name (#8831) doesn't find private class from outside namespace, long name (#8831) - finds private type from inside namespace in subclass finds private type from inside namespace in subclass - finds private macro in same file, invoking from another macro (#1265) finds private macro in same file, invoking from another macro (#1265) - doesn't define incorrect type in top-level namespace (#13511) doesn't define incorrect type in top-level namespace (#13511) - doesn't define incorrect type in top-level namespace (#13511) doesn't define incorrect type in top-level namespace (#13511) - doesn't define private lib with global type name doesn't define private lib with global type name - finds private def in same file finds private def in same file - gives private constant error in macro gives private constant error in macro -types to_s of - does for type contained in generic module does for type contained in generic module - array of simple types array of simple types - nilable value type nilable value type - non-instantiated array non-instantiated array - union types - should have parens - as arg type as arg type - as return type as return type - should not have extra parens - in pointers in pointers - in arrays in arrays - in tuples in tuples - union of simple types union of simple types - nilable type with more than two elements, Nil at the end nilable type with more than two elements, Nil at the end - named tuple named tuple - does for type contained in generic class does for type contained in generic class - nilable reference type nilable reference type -Code gen: case - codegens case when cond is a call codegens case when cond is a call codegens case when cond is a call codegens case when cond is a call codegens case when cond is a call codegens case when cond is a call codegens case when cond is a call codegens case when cond is a call codegens case when cond is a call codegens case when cond is a call - does case when with metaclass does case when with metaclass - codegens case with class codegens case with class - codegens case without whens but else codegens case without whens but else codegens case without whens but else codegens case without whens but else codegens case without whens but else codegens case without whens but else codegens case without whens but else codegens case without whens but else codegens case without whens but else codegens case without whens but else - codegens case with two conditions codegens case with two conditions codegens case with two conditions codegens case with two conditions codegens case with two conditions codegens case with two conditions codegens case with two conditions codegens case with two conditions codegens case with two conditions codegens case with two conditions - codegens case when constant bug (#1028) codegens case when constant bug (#1028) - codegens case with one condition codegens case with one condition codegens case with one condition codegens case with one condition codegens case with one condition codegens case with one condition codegens case with one condition codegens case with one condition codegens case with one condition codegens case with one condition - codegens case that always returns codegens case that always returns codegens case that always returns codegens case that always returns codegens case that always returns codegens case that always returns codegens case that always returns codegens case that always returns codegens case that always returns codegens case that always returns - codegens case with else codegens case with else codegens case with else codegens case with else codegens case with else codegens case with else codegens case with else codegens case with else codegens case with else codegens case with else - codegens value-less case codegens value-less case -Lexer string - lexes string with slash quote lexes string with slash quote - lexes string with unicode codepoint lexes string with unicode codepoint - raises when identifier doesn't start with a letter or number raises when identifier doesn't start with a letter or number - lexes string with newline lexes string with newline - lexes string with slash t lexes string with slash t - lexes heredoc with empty line lexes heredoc with empty line - assigns correct location after heredoc (#346) assigns correct location after heredoc (#346) - lexes simple string with %( lexes simple string with %( - lexes regex string with escaped space with /.../ lexes regex string with escaped space with /.../ - lexes regex string with escaped slash with /.../ lexes regex string with escaped slash with /.../ - lexes backtick string lexes backtick string - lexes string with unicode codepoint in curly multiple times lexes string with unicode codepoint in curly multiple times - says syntax error on "\"\\uD800\"" says syntax error on "\"\\uD800\"" - lexes simple string with nested %{ lexes simple string with nested %{ - lexes heredoc with \r\n lexes heredoc with \r\n - lexes simple string with nested %< lexes simple string with nested %< - says syntax error on "\"\\u{}\"" says syntax error on "\"\\u{}\"" - lexes regex string lexes regex string - says syntax error on "\"\\uFEDZ\"" says syntax error on "\"\\uFEDZ\"" - lexes slash with no-escape char lexes slash with no-escape char - lexes simple string lexes simple string - lexes regex string with special chars with %r(...) lexes regex string with special chars with %r(...) - lexes string with only newline lexes string with only newline - lexes string with numeral lexes string with numeral - lexes regex string with special chars with /.../ lexes regex string with special chars with /.../ - lexes regex string with escaped space with %r(...) lexes regex string with escaped space with %r(...) - lexes double numeral lexes double numeral - raises on unterminated heredoc raises on unterminated heredoc - says syntax error on "\"\\u{110000}\"" says syntax error on "\"\\u{110000}\"" - lexes string with literal newline lexes string with literal newline - lexes string with slash lexes string with slash - lexes interpolations in heredocs lexes interpolations in heredocs - raises on unexpected EOF while lexing heredoc raises on unexpected EOF while lexing heredoc - lexes simple string with %| lexes simple string with %| - lexes simple string with nested %[ lexes simple string with nested %[ - lexes string with backslash lexes string with backslash - says syntax error on "\"\\u{DFFF}\"" says syntax error on "\"\\u{DFFF}\"" - lexes heredoc with spaces before close tag lexes heredoc with spaces before close tag - says syntax error on "\"\\u{D800}\"" says syntax error on "\"\\u{D800}\"" - lexes heredoc lexes heredoc - lexes string with interpolation with double numeral lexes string with interpolation with double numeral - lexes string with interpolation lexes string with interpolation - lexes regex string with escaped slash with %r(...) lexes regex string with escaped slash with %r(...) - lexes string with unicode codepoint in curly lexes string with unicode codepoint in curly - lexes simple string with nested %( lexes simple string with nested %( - says syntax error on "\"\\uDFFF\"" says syntax error on "\"\\uDFFF\"" -Code gen: struct - does phi of struct does phi of struct - codegens virtual struct metaclass (#2551) (4) codegens virtual struct metaclass (#2551) (4) codegens virtual struct metaclass (#2551) (4) codegens virtual struct metaclass (#2551) (4) codegens virtual struct metaclass (#2551) (4) codegens virtual struct metaclass (#2551) (4) codegens virtual struct metaclass (#2551) (4) codegens virtual struct metaclass (#2551) (4) codegens virtual struct metaclass (#2551) (4) codegens virtual struct metaclass (#2551) (4) - can cast virtual struct to specific struct can cast virtual struct to specific struct can cast virtual struct to specific struct can cast virtual struct to specific struct can cast virtual struct to specific struct can cast virtual struct to specific struct can cast virtual struct to specific struct can cast virtual struct to specific struct can cast virtual struct to specific struct can cast virtual struct to specific struct - passes a generic struct as a parameter makes a copy passes a generic struct as a parameter makes a copy - codegens virtual struct metaclass (#2551) (2) codegens virtual struct metaclass (#2551) (2) - uses nilable struct uses nilable struct - codegens virtual structs union (2) codegens virtual structs union (2) - mutates a virtual struct mutates a virtual struct - creates structs with instance var creates structs with instance var - casts virtual struct to base type, only one subclass (#2885) casts virtual struct to base type, only one subclass (#2885) - allows assigning to struct argument (bug) allows assigning to struct argument (bug) - declares const struct declares const struct declares const struct declares const struct declares const struct declares const struct declares const struct declares const struct declares const struct declares const struct - codegens virtual struct codegens virtual struct - returns self with block returns self with block - codegens virtual struct with pointer codegens virtual struct with pointer - creates structs creates structs - passes a struct as a parameter makes a copy passes a struct as a parameter makes a copy - can call new on abstract struct with single child (#7309) can call new on abstract struct with single child (#7309) - codegens virtual structs union (1) codegens virtual structs union (1) - assigning a struct makes a copy (1) assigning a struct makes a copy (1) - uses struct in if uses struct in if uses struct in if uses struct in if uses struct in if uses struct in if uses struct in if uses struct in if uses struct in if uses struct in if - codegens virtual struct metaclass (#2551) (3) codegens virtual struct metaclass (#2551) (3) - codegens struct assigned to underscore (#1842) codegens struct assigned to underscore (#1842) - creates struct in def creates struct in def - assigning a struct makes a copy (2) assigning a struct makes a copy (2) - returns struct as a copy returns struct as a copy - codegens virtual struct metaclass (#2551) (1) codegens virtual struct metaclass (#2551) (1) - returns self returns self -Semantic: recursive struct check - errors on recursive struct through recursive alias (#4454) (#4455) errors on recursive struct through recursive alias (#4454) (#4455) - detects recursive struct through module detects recursive struct through module - errors on private recursive type errors on private recursive type - detects recursive generic struct through module (#4720) detects recursive generic struct through module (#4720) - errors on recursive struct through named tuple errors on recursive struct through named tuple - errors on recursive generic struct inside module errors on recursive generic struct inside module - errors on recursive struct errors on recursive struct - errors on recursive abstract struct through module (#11384) errors on recursive abstract struct through module (#11384) - errors on recursive struct inside module errors on recursive struct inside module - errors on mutually recursive struct errors on mutually recursive struct - errors on recursive struct through tuple errors on recursive struct through tuple - detects recursive generic struct through generic module (#4720) detects recursive generic struct through generic module (#4720) - detects recursive struct through inheritance (#3071) detects recursive struct through inheritance (#3071) -Code gen: tuple - merges two tuple types of same size (2) merges two tuple types of same size (2) - codegens tuple [1..1]? codegens tuple [1..1]? - codegens tuple [-3..2]? codegens tuple [-3..2]? - codegens tuple [1] codegens tuple [1] - allows tuple covariance allows tuple covariance - provides T as a tuple literal provides T as a tuple literal - merges two tuple types of same size (1) merges two tuple types of same size (1) - codegens tuple [2]? codegens tuple [2]? - upcasts tuple inside compatible tuple upcasts tuple inside compatible tuple - codegens tuple [0..1]? codegens tuple [0..1]? - codegens tuple metaclass [0..1] codegens tuple metaclass [0..1] - passed tuple to def passed tuple to def - codegens splats inside tuples codegens splats inside tuples - codegens tuple union (bug because union size was computed incorrectly) codegens tuple union (bug because union size was computed incorrectly) codegens tuple union (bug because union size was computed incorrectly) codegens tuple union (bug because union size was computed incorrectly) codegens tuple union (bug because union size was computed incorrectly) codegens tuple union (bug because union size was computed incorrectly) codegens tuple union (bug because union size was computed incorrectly) codegens tuple union (bug because union size was computed incorrectly) codegens tuple union (bug because union size was computed incorrectly) codegens tuple union (bug because union size was computed incorrectly) - codegens tuple metaclass [0] codegens tuple metaclass [0] - upcasts tuple inside union to union with compatible tuple upcasts tuple inside union to union with compatible tuple - codegens tuple metaclass [0..0] codegens tuple metaclass [0..0] - codegens tuple metaclass [2]? codegens tuple metaclass [2]? - codegens tuple [0] codegens tuple [0] - codegens tuple [2..2]? codegens tuple [2..2]? - codegens tuple [0..0]? codegens tuple [0..0]? - codegens tuple [1]? codegens tuple [1]? - codegens tuple [0]? codegens tuple [0]? - allows malloc pointer of tuple allows malloc pointer of tuple - assigns tuple to compatible tuple assigns tuple to compatible tuple - codegens tuple [1..0]? codegens tuple [1..0]? - codegens tuple [1..0] codegens tuple [1..0] - accesses T and creates instance from it accesses T and creates instance from it - codegens tuple [1] (2) codegens tuple [1] (2) - codegens union of tuple of float with tuple of tuple of float codegens union of tuple of float with tuple of tuple of float - downcasts union inside tuple to value (#3907) downcasts union inside tuple to value (#3907) - gets size at compile time gets size at compile time - downcasts union to mixed tuple type downcasts union to mixed tuple type - codegens tuple metaclass [1..0] codegens tuple metaclass [1..0] - codegens tuple [2..2] codegens tuple [2..2] - codegens tuple metaclass [3..2]? codegens tuple metaclass [3..2]? - codegens tuple class codegens tuple class - codegens tuple [1..1] codegens tuple [1..1] - downcasts union to mixed union with mixed tuple types downcasts union to mixed union with mixed tuple types downcasts union to mixed union with mixed tuple types downcasts union to mixed union with mixed tuple types downcasts union to mixed union with mixed tuple types downcasts union to mixed union with mixed tuple types downcasts union to mixed union with mixed tuple types downcasts union to mixed union with mixed tuple types downcasts union to mixed union with mixed tuple types downcasts union to mixed union with mixed tuple types - codegens tuple [0..2]? codegens tuple [0..2]? - assigns tuple inside union to union with compatible tuple assigns tuple inside union to union with compatible tuple - passes empty tuple and empty named tuple to a method (#2852) passes empty tuple and empty named tuple to a method (#2852) - codegens tuple [0..1] codegens tuple [0..1] - codegens tuple [0..2] codegens tuple [0..2] - codegens tuple [3..2]? codegens tuple [3..2]? - codegens tuple metaclass [1] codegens tuple metaclass [1] - upcasts tuple union to compatible tuple upcasts tuple union to compatible tuple - codegens tuple [0..0] codegens tuple [0..0] - assigns tuple union to compatible tuple assigns tuple union to compatible tuple - assigns two same-size tuple types to a same var (#3132) assigns two same-size tuple types to a same var (#3132) -Normalize: expressions - normalizes expressions with begin/end normalizes expressions with begin/end - normalizes an expression normalizes an expression - normalizes an empty expression with begin/end normalizes an empty expression with begin/end -Semantic: type - can call methods of original type can call methods of original type - can call methods of parent type can call methods of parent type - errors if original type doesn't support instance variables errors if original type doesn't support instance variables - can access instance variables of original type can access instance variables of original type -Code gen: sizeof - returns correct sizeof for abstract struct (#4319) returns correct sizeof for abstract struct (#4319) - gets sizeof NoReturn gets sizeof NoReturn - gets sizeof union gets sizeof union - gets sizeof Nil (#7644) gets sizeof Nil (#7644) - can use sizeof in type argument (1) can use sizeof in type argument (1) - alignof - gets alignof struct gets alignof struct - gets alignof primitive types gets alignof primitive types - gets alignof union gets alignof union - gets alignof class gets alignof class - alignof mixed union is not less than alignof its variant types alignof mixed union is not less than alignof its variant types - can use sizeof in type argument (2) can use sizeof in type argument (2) - gets instance_sizeof class gets instance_sizeof class - can use sizeof of virtual type can use sizeof of virtual type - can use instance_sizeof in type argument can use instance_sizeof in type argument - gets instance_sizeof a generic type with type vars gets instance_sizeof a generic type with type vars - gets sizeof Void gets sizeof Void - gets sizeof struct gets sizeof struct - gets sizeof Bool (#8272) gets sizeof Bool (#8272) - doesn't precompute sizeof of abstract struct (#7741) doesn't precompute sizeof of abstract struct (#7741) - gets sizeof int gets sizeof int - can use instance_sizeof of virtual type can use instance_sizeof of virtual type - gets sizeof class gets sizeof class - instance_alignof - gets instance_alignof class gets instance_alignof class - gets instance_alignof a generic type with type vars gets instance_alignof a generic type with type vars - doesn't precompute sizeof of module (#7741) doesn't precompute sizeof of module (#7741) -Lexer comments - lexes without comments enabled lexes without comments enabled - lexes correct number of spaces lexes correct number of spaces - lexes with comments enabled (2) lexes with comments enabled (2) - lexes with comments enabled lexes with comments enabled -Crystal::Repl::Interpreter - magic constants - does line number does line number - constants - hoists constants hoists constants - interprets self inside constant inside class interprets self inside constant inside class - interprets constant literal interprets constant literal - returns nil in the assignment returns nil in the assignment - interprets complex constant interprets complex constant -Semantic: restrictions augmenter - augments generic uninstantiated type augments generic uninstantiated type - augments relative public type augments relative public type - augments Char | Int32 | String augments Char | Int32 | String - augments Nil augments Nil - augments Char | Int32 | String augments Char | Int32 | String - augments Int32 augments Int32 - augments Float32 augments Float32 - augments Bool augments Bool - augments Proc(Int32, Char) augments Proc(Int32, Char) - augments recursive alias type (#12134) augments recursive alias type (#12134) - augments Pointer(Void) augments Pointer(Void) - augments NamedTuple(a: Int32, b: Char) augments NamedTuple(a: Int32, b: Char) - augments relative private type augments relative private type - augments virtual type augments virtual type - doesn't augment if assigned inside while doesn't augment if assigned inside while - doesn't augment if the no_restrictions_augmenter flag is present doesn't augment if the no_restrictions_augmenter flag is present - augments NoReturn augments NoReturn - augments for Union(*T) (#12435) augments for Union(*T) (#12435) - augments Array(Int32).class augments Array(Int32).class - augments Symbol augments Symbol - augments Int32.class augments Int32.class - augments Tuple(Int32, Char) augments Tuple(Int32, Char) - augments virtual metaclass type augments virtual metaclass type - doesn't augment if assigned inside if doesn't augment if assigned inside if - augments String augments String - augments Char augments Char - augments Array(String) augments Array(String) - augments Enumerable(Int32).class augments Enumerable(Int32).class - doesn't augment if assigned inside block doesn't augment if assigned inside block - augments type splat augments type splat - doesn't crash on macro that yields and defines class (#12142) doesn't crash on macro that yields and defines class (#12142) - augments Proc(Int32, Nil) augments Proc(Int32, Nil) - augments typedef augments typedef - augments relative private type in same namespace augments relative private type in same namespace - augments for class var augments for class var - augments StaticArray(Int32, 8) augments StaticArray(Int32, 8) -Code gen: lib - passes int as another float type in literal passes int as another float type in literal - can use enum as fun argument can use enum as fun argument - uses static array in lib extern (#5688) uses static array in lib extern (#5688) - allows setting/getting external variable as function pointer allows setting/getting external variable as function pointer - passes nil to varargs (#1570) passes nil to varargs (#1570) - casts C fun to Crystal proc when accessing instance var (#2515) casts C fun to Crystal proc when accessing instance var (#2515) - allows passing type to LibC if it has a converter with to_unsafe allows passing type to LibC if it has a converter with to_unsafe - refers to lib type (#960) refers to lib type (#960) - codegens lib var set and get codegens lib var set and get - get fun field from struct (#672) get fun field from struct (#672) get fun field from struct (#672) get fun field from struct (#672) get fun field from struct (#672) get fun field from struct (#672) get fun field from struct (#672) get fun field from struct (#672) get fun field from struct (#672) get fun field from struct (#672) - get fun field from union (#672) get fun field from union (#672) get fun field from union (#672) get fun field from union (#672) get fun field from union (#672) get fun field from union (#672) get fun field from union (#672) get fun field from union (#672) get fun field from union (#672) get fun field from union (#672) - can use tuple as fun return can use tuple as fun return can use tuple as fun return can use tuple as fun return can use tuple as fun return can use tuple as fun return can use tuple as fun return can use tuple as fun return can use tuple as fun return can use tuple as fun return - allows invoking out with underscore allows invoking out with underscore - call to void function call to void function - doesn't crash with nil and varargs (#4414) doesn't crash with nil and varargs (#4414) - allows passing type to LibC if it has a converter with to_unsafe (bug) allows passing type to LibC if it has a converter with to_unsafe (bug) - can use enum as fun return can use enum as fun return - doesn't crash when casting -1 to UInt32 (#3594) doesn't crash when casting -1 to UInt32 (#3594) -Codegen: until - codegens until codegens until -Semantic: splat - matches instantiated generic with splat in generic type matches instantiated generic with splat in generic type - matches with type var splat inside explicit Union, when non-splat vars fail matches with type var splat inside explicit Union, when non-splat vars fail - matches with type var and splat of itself inside explicit Union (2) matches with type var and splat of itself inside explicit Union (2) - gives correct error when forwarding splat (2) gives correct error when forwarding splat (2) - splats arg and splat against splat (1) (#1042) splats arg and splat against splat (1) (#1042) - matches with type var splat inside explicit Union (2) matches with type var splat inside explicit Union (2) - errors with too few non-splat type arguments (2) errors with too few non-splat type arguments (2) - matches with type var and splat of itself inside explicit Union (3) matches with type var and splat of itself inside explicit Union (3) - uses bare *, doesn't let more args uses bare *, doesn't let more args - method with default arguments and splat matches call with one arg (#2766) method with default arguments and splat matches call with one arg (#2766) - matches with type var splat inside explicit Union, when all splat elements match matches with type var splat inside explicit Union, when all splat elements match - doesn't match splat in generic type with unsplatted tuple (#10164) doesn't match splat in generic type with unsplatted tuple (#10164) - doesn't crash on non-match (#2521) doesn't crash on non-match (#2521) - calls super with implicit splat arg (#1001) calls super with implicit splat arg (#1001) - matches with type var and splat of itself inside explicit Union matches with type var and splat of itself inside explicit Union - works if matches splat with type restriction works if matches splat with type restriction - matches type splat with splat in generic type (2) matches type splat with splat in generic type (2) - uses splat restriction after non-splat arguments (#5037) uses splat restriction after non-splat arguments (#5037) - doesn't match free var type splats inside explicit Union doesn't match free var type splats inside explicit Union - errors if splatting non-tuple type in return values errors if splatting non-tuple type in return values - errors if doesn't match splat with type restriction because of zero arguments errors if doesn't match splat with type restriction because of zero arguments - uses splat restriction with concrete type uses splat restriction with concrete type - uses splat restriction uses splat restriction - method with splat and optional named argument matches zero args call (#2746) method with splat and optional named argument matches zero args call (#2746) - errors if splatting non-tuple type in call arguments errors if splatting non-tuple type in call arguments - overloads with type restriction and splat (6) overloads with type restriction and splat (6) - overloads with type restriction and splat (2) overloads with type restriction and splat (2) - errors with too few non-splat type arguments (1) errors with too few non-splat type arguments (1) - Crystal::Splat - without splat without splat - with splat with splat - uses splat restriction, matches empty uses splat restriction, matches empty - redefines method with splat (bug #248) redefines method with splat (bug #248) - overloads with type restriction and splat (1) overloads with type restriction and splat (1) - errors on zero args with named arg and splat errors on zero args with named arg and splat - overloads with splat against method with two arguments (#986) (2) overloads with splat against method with two arguments (#986) (2) - matches with tuple splat inside explicit Union matches with tuple splat inside explicit Union - matches with type var splat inside explicit Union, when one splat fails entirely matches with type var splat inside explicit Union, when one splat fails entirely - overloads with type restriction and splat (4) overloads with type restriction and splat (4) - matches partially instantiated generic with splat in generic type matches partially instantiated generic with splat in generic type - splats splats - accesses T when empty, via module accesses T when empty, via module - says missing argument because positional args don't match past splat says missing argument because positional args don't match past splat - matches with splat matches with splat - overloads with type restriction and splat (5) overloads with type restriction and splat (5) - forwards tuple with an extra argument forwards tuple with an extra argument - errors if doesn't match splat with type restriction errors if doesn't match splat with type restriction - errors with too many non-splat type arguments errors with too many non-splat type arguments - matches type splat with splat in generic type (1) matches type splat with splat in generic type (1) - overloads with type restriction and splat (3) overloads with type restriction and splat (3) - forwards tuple in return statement forwards tuple in return statement - matches with type var splat inside explicit Union matches with type var splat inside explicit Union - allows default value after splat index allows default value after splat index - errors if using two splat indices on restriction errors if using two splat indices on restriction - uses bare * uses bare * - overloads with splat against method with two arguments (#986) (1) overloads with splat against method with two arguments (#986) (1) - doesn't shift a call's location doesn't shift a call's location - splats arg and splat against splat (2) (#1042) splats arg and splat against splat (2) (#1042) - overloads with type restriction and splat (7) overloads with type restriction and splat (7) - says no overload matches on type restrictions past the splat arg says no overload matches on type restrictions past the splat arg - can splat after type filter left it as a tuple (#442) can splat after type filter left it as a tuple (#442) - errors if splatting union errors if splatting union - gives correct error when forwarding splat gives correct error when forwarding splat + upcasts type to virtual (#3304) upcasts type to virtual (#3304) + casts from union to single type casts from union to single type casts from union to single type casts from union to single type casts from union to single type casts from union to single type casts from union to single type casts from union to single type casts from union to single type casts from union to single type + casts to base class making it virtual casts to base class making it virtual + casts from pointer to pointer casts from pointer to pointer casts from pointer to pointer casts from pointer to pointer casts from pointer to pointer casts from pointer to pointer casts from pointer to pointer casts from pointer to pointer casts from pointer to pointer casts from pointer to pointer Semantic: proc - can match *T in block argument can match *T in block argument - allows passing union including module to proc allows passing union including module to proc - *doesn't* merge Proc that returns NoReturn with another one that returns something else (#9971) *doesn't* merge Proc that returns NoReturn with another one that returns something else (#9971) - disallows Struct in proc return types disallows Struct in proc return types - disallows Enum in procs disallows Enum in procs - allows passing proc type if it is typedef'd allows passing proc type if it is typedef'd - disallows Struct in proc notation parameter type disallows Struct in proc notation parameter type - allows metaclass in proc notation return type allows metaclass in proc notation return type - disallows Number in proc notation parameter type disallows Number in proc notation parameter type - disallows Int in procs disallows Int in procs - says wrong return type in new on proc type says wrong return type in new on proc type - allows passing NoReturn type for any return type (1) allows passing NoReturn type for any return type (1) - types proc call types proc call - disallows Pointer in proc notation return type disallows Pointer in proc notation return type - disallows Value in captured block disallows Value in captured block - disallows StaticArray in procs disallows StaticArray in procs - unpacks tuple but doesn't override local variables, when using new (#9813) unpacks tuple but doesn't override local variables, when using new (#9813) - types proc pointer types proc pointer - disallows Object in proc notation return type disallows Object in proc notation return type - allows using Proc as restriction (1) allows using Proc as restriction (1) - types proc pointer to instance method types proc pointer to instance method - disallows Float in proc notation return type disallows Float in proc notation return type - disallows Class in proc notation return type disallows Class in proc notation return type - doesn't let passing an non-covariant generic argument doesn't let passing an non-covariant generic argument - binds proc literal to arguments and body binds proc literal to arguments and body - accesses T and R accesses T and R - allows passing function to LibC without specifying types, using a class method allows passing function to LibC without specifying types, using a class method - errors if inferred return type doesn't match return type restriction (2) errors if inferred return type doesn't match return type restriction (2) - types Proc(*T, Void) as Proc(*T, Nil) types Proc(*T, Void) as Proc(*T, Nil) - disallows Object in proc notation parameter type disallows Object in proc notation parameter type - can assign proc that returns anything to proc that returns nil, with instance var (#3655) can assign proc that returns anything to proc that returns nil, with instance var (#3655) - disallows Reference in proc return types disallows Reference in proc return types - types nil or proc type types nil or proc type - allows using proc arg name shadowing local variable allows using proc arg name shadowing local variable - disallows Class in proc return types disallows Class in proc return types - disallows Class in captured block disallows Class in captured block - allows passing virtual type including module to proc allows passing virtual type including module to proc - finds method of object finds method of object - doesn't capture closured var if using typeof doesn't capture closured var if using typeof - allows casting a proc type to one with void argument allows casting a proc type to one with void argument - uses array argument of proc arg (3) uses array argument of proc arg (3) - allows passing nil as proc callback if it is a lib alias allows passing nil as proc callback if it is a lib alias - disallows Value in procs disallows Value in procs - disallows Tuple in procs disallows Tuple in procs - disallows Value in proc pointer disallows Value in proc pointer - errors when using macro as proc value (inside method) (#7465) errors when using macro as proc value (inside method) (#7465) - disallows StaticArray in proc notation parameter type disallows StaticArray in proc notation parameter type - can use @@cvar as pointer syntax receiver (#9239) can use @@cvar as pointer syntax receiver (#9239) - disallows Object in procs disallows Object in procs - disallows Object in proc pointer disallows Object in proc pointer - errors if inferred return type doesn't match return type restriction (1) errors if inferred return type doesn't match return type restriction (1) - disallows Pointer in proc pointer disallows Pointer in proc pointer - disallows Object in captured block disallows Object in captured block - types int -> int proc literal types int -> int proc literal - errors when using macro as proc value (top-level with obj) (#7465) errors when using macro as proc value (top-level with obj) (#7465) - disallows Class in procs disallows Class in procs - disallows casting a proc type to one accepting same size argument but different input disallows casting a proc type to one accepting same size argument but different input - types int -> int proc call types int -> int proc call - passes proc pointer as block with arguments passes proc pointer as block with arguments - disallows Struct in procs disallows Struct in procs - virtualizes proc type with -> (#8730) virtualizes proc type with -> (#8730) + types proc call with return type types proc call with return type + types proc literal with a type that was never instantiated types proc literal with a type that was never instantiated + disallows Pointer in proc return types disallows Pointer in proc return types + can pass Proc(X, T) to Proc(X, Nil) in type restriction (#8964) can pass Proc(X, T) to Proc(X, Nil) in type restriction (#8964) + disallows Reference in proc notation return type disallows Reference in proc notation return type passes proc pointer as block passes proc pointer as block - disallows Proc in proc pointer disallows Proc in proc pointer - allows new on proc type allows new on proc type - sets proc type as void if explicitly told so, when using new sets proc type as void if explicitly told so, when using new - doesn't crash on constant to proc pointer doesn't crash on constant to proc pointer - allows using Proc as restriction (3) allows using Proc as restriction (3) - can assign proc that returns anything to proc that returns nil, with class var (#3655) can assign proc that returns anything to proc that returns nil, with class var (#3655) + can assign proc that returns anything to proc that returns nil, with local var (#3655) can assign proc that returns anything to proc that returns nil, with local var (#3655) disallows StaticArray in captured block disallows StaticArray in captured block - has proc literal as restriction and works has proc literal as restriction and works - doesn't cause upcast bug (#8428) doesn't cause upcast bug (#8428) - allows metaclass in proc notation parameter type allows metaclass in proc notation parameter type - disallows Number in captured block disallows Number in captured block - disallows Pointer in captured block disallows Pointer in captured block - types proc pointer with types types proc pointer with types - disallows Number in procs disallows Number in procs - gives correct error message when proc return type is incorrect (#219) gives correct error message when proc return type is incorrect (#219) - can pass proc that returns T as Void with named args (#7523) can pass proc that returns T as Void with named args (#7523) - types proc type spec types proc type spec + disallows Tuple in proc pointer disallows Tuple in proc pointer + disallows Tuple in proc notation parameter type disallows Tuple in proc notation parameter type has proc literal as restriction and errors if input is different has proc literal as restriction and errors if input is different - disallows Enum in proc return types disallows Enum in proc return types allows implicit cast of proc to return void in generic restriction allows implicit cast of proc to return void in generic restriction - *doesn't* merge Proc that returns Nil with another one that returns something else (#3655) (this was reverted) *doesn't* merge Proc that returns Nil with another one that returns something else (#3655) (this was reverted) - disallows Proc in procs disallows Proc in procs - disallows Reference in proc notation parameter type disallows Reference in proc notation parameter type - can use @ivar as pointer syntax receiver (#9239) can use @ivar as pointer syntax receiver (#9239) - merges return type merges return type - forwards block and computes correct type (bug) forwards block and computes correct type (bug) - disallows Int in proc notation parameter type disallows Int in proc notation parameter type - allows passing function to LibC without specifying types, using a global method allows passing function to LibC without specifying types, using a global method - accesses T inside variadic generic accesses T inside variadic generic - disallows Class in proc pointer disallows Class in proc pointer - allows metaclass in captured block allows metaclass in captured block - disallows Struct in captured block disallows Struct in captured block - disallows Value in proc notation parameter type disallows Value in proc notation parameter type - allows implicit cast of proc to return void in LibC function allows implicit cast of proc to return void in LibC function - disallows Pointer in procs disallows Pointer in procs - uses array argument of proc arg (4) uses array argument of proc arg (4) - disallows Tuple in proc notation return type disallows Tuple in proc notation return type - disallows Reference in proc notation return type disallows Reference in proc notation return type - disallows Proc in proc notation return type disallows Proc in proc notation return type - allows metaclass in proc pointer allows metaclass in proc pointer - types int proc literal types int proc literal - allows using Proc as restriction (2) allows using Proc as restriction (2) - disallows Struct in proc notation return type disallows Struct in proc notation return type - errors when using macro as proc value (top-level) (#7465) errors when using macro as proc value (top-level) (#7465) - errors if missing argument type in proc literal errors if missing argument type in proc literal - disallows Float in proc return types disallows Float in proc return types - has proc literal as restriction and works when output not specified has proc literal as restriction and works when output not specified - disallows Tuple in proc notation parameter type disallows Tuple in proc notation parameter type - accesses T inside variadic generic, in proc notation accesses T inside variadic generic, in proc notation - disallows Enum in proc notation parameter type disallows Enum in proc notation parameter type + disallows Object in procs disallows Object in procs + disallows Object in proc return types disallows Object in proc return types + doesn't cause upcast bug (#8428) doesn't cause upcast bug (#8428) + disallows StaticArray in procs disallows StaticArray in procs + disallows casting a proc type to one accepting same size argument but different input disallows casting a proc type to one accepting same size argument but different input + disallows Object in proc pointer disallows Object in proc pointer + disallows Struct in proc return types disallows Struct in proc return types + disallows Object in proc notation return type disallows Object in proc notation return type + types proc pointer with a type that was never instantiated types proc pointer with a type that was never instantiated + types proc literal with return type (2) types proc literal with return type (2) + disallows Class in procs disallows Class in procs types proc literal with return type (1) types proc literal with return type (1) - can assign proc that returns anything to proc that returns nil, with local var (#3655) can assign proc that returns anything to proc that returns nil, with local var (#3655) - disallows Float in procs disallows Float in procs - disallows casting a proc type to one accepting more arguments disallows casting a proc type to one accepting more arguments - allows metaclass in procs allows metaclass in procs disallows Value in proc notation return type disallows Value in proc notation return type - disallows Float in captured block disallows Float in captured block + doesn't let passing an non-covariant generic argument doesn't let passing an non-covariant generic argument + disallows Tuple in proc notation return type disallows Tuple in proc notation return type + forwards block and computes correct type (bug) forwards block and computes correct type (bug) + disallows Proc in proc notation return type disallows Proc in proc notation return type + unpacks tuple but doesn't override local variables, when using new (#9813) unpacks tuple but doesn't override local variables, when using new (#9813) + allows new on proc type with less block params allows new on proc type with less block params types empty proc literal types empty proc literal + has proc literal as restriction and works when output not specified has proc literal as restriction and works when output not specified + errors if missing argument type in proc literal errors if missing argument type in proc literal + allows implicit cast of proc to return void in LibC function allows implicit cast of proc to return void in LibC function + can pass proc that returns T as Void with named args (#7523) can pass proc that returns T as Void with named args (#7523) + disallows Int in captured block disallows Int in captured block + disallows Number in proc pointer disallows Number in proc pointer + allows casting a proc type to one with void argument allows casting a proc type to one with void argument + declares an instance variable with splat in proc notation declares an instance variable with splat in proc notation + disallows Reference in proc pointer disallows Reference in proc pointer + disallows Tuple in proc return types disallows Tuple in proc return types + types proc literal hard type inference (1) types proc literal hard type inference (1) + merges return type merges return type + disallows Int in proc notation parameter type disallows Int in proc notation parameter type + disallows Float in proc notation parameter type disallows Float in proc notation parameter type + allows passing proc type if it is a lib alias allows passing proc type if it is a lib alias + disallows Reference in captured block disallows Reference in captured block + types int -> int proc literal types int -> int proc literal + disallows Tuple in procs disallows Tuple in procs + allows using Proc as restriction (3) allows using Proc as restriction (3) + allows passing function to LibC without specifying types, using a global method allows passing function to LibC without specifying types, using a global method + types proc pointer types proc pointer casts to Proc(Nil) when specified in return type casts to Proc(Nil) when specified in return type - disallows Number in proc notation return type disallows Number in proc notation return type + finds method of object finds method of object + disallows Reference in proc notation parameter type disallows Reference in proc notation parameter type + disallows Value in proc notation parameter type disallows Value in proc notation parameter type + disallows Float in proc pointer disallows Float in proc pointer + disallows Struct in proc notation parameter type disallows Struct in proc notation parameter type disallows Int in proc pointer disallows Int in proc pointer - disallows StaticArray in proc notation return type disallows StaticArray in proc notation return type - allows implicit cast of proc to return void in non-generic restriction allows implicit cast of proc to return void in non-generic restriction - disallows Enum in proc pointer disallows Enum in proc pointer - allows invoking a function with a generic subtype (1) allows invoking a function with a generic subtype (1) - errors when using local variable with proc argument name errors when using local variable with proc argument name + sets proc type as void if explicitly told so, when using new sets proc type as void if explicitly told so, when using new + doesn't crash on constant to proc pointer doesn't crash on constant to proc pointer allows writing a function type with Proc allows writing a function type with Proc - can pass Proc(T) to Proc(Nil) in type restriction (#8964) can pass Proc(T) to Proc(Nil) in type restriction (#8964) - disallows Enum in captured block disallows Enum in captured block - allows new on proc type with less block params allows new on proc type with less block params - disallows Tuple in captured block disallows Tuple in captured block - disallows casting a proc type to one accepting same size argument but different output disallows casting a proc type to one accepting same size argument but different output - disallows Float in proc pointer disallows Float in proc pointer - allows invoking a function with a generic subtype (2) allows invoking a function with a generic subtype (2) - types proc literal hard type inference (1) types proc literal hard type inference (1) - gets pointer to lib fun without specifying types gets pointer to lib fun without specifying types + disallows casting a proc type to one accepting less arguments disallows casting a proc type to one accepting less arguments + types proc call types proc call + disallows Class in captured block disallows Class in captured block has proc literal as restriction and errors if output is different has proc literal as restriction and errors if output is different + disallows Value in procs disallows Value in procs + disallows StaticArray in proc notation return type disallows StaticArray in proc notation return type + allows passing proc type if it is typedef'd allows passing proc type if it is typedef'd + virtualizes proc type with -> (#8730) virtualizes proc type with -> (#8730) + allows passing nil as proc callback if it is a lib alias allows passing nil as proc callback if it is a lib alias + disallows Float in proc notation return type disallows Float in proc notation return type + doesn't capture closured var if using typeof doesn't capture closured var if using typeof + disallows Number in proc notation parameter type disallows Number in proc notation parameter type + allows passing union including module to proc allows passing union including module to proc + allows implicit cast of proc to return void in non-generic restriction allows implicit cast of proc to return void in non-generic restriction + virtualizes proc type (#6789) virtualizes proc type (#6789) + errors if inferred return type doesn't match return type restriction (2) errors if inferred return type doesn't match return type restriction (2) + can match *T in block argument can match *T in block argument + doesn't need to deduce type of block if return is void doesn't need to deduce type of block if return is void + types nil or proc type types nil or proc type + disallows Pointer in captured block disallows Pointer in captured block + types proc pointer with types types proc pointer with types + disallows Proc in captured block disallows Proc in captured block + errors when using macro as proc value (top-level) (#7465) errors when using macro as proc value (top-level) (#7465) + says wrong number of arguments says wrong number of arguments + *doesn't* merge Proc that returns Nil with another one that returns something else (#3655) (this was reverted) *doesn't* merge Proc that returns Nil with another one that returns something else (#3655) (this was reverted) disallows StaticArray in proc return types disallows StaticArray in proc return types - accesses T inside variadic generic (2) accesses T inside variadic generic (2) - disallows Object in proc return types disallows Object in proc return types - disallows Reference in proc pointer disallows Reference in proc pointer - disallows StaticArray in proc pointer disallows StaticArray in proc pointer - says wrong number of block params in new on proc type says wrong number of block params in new on proc type + allows passing NoReturn type for any return type (3) allows passing NoReturn type for any return type (3) disallows Proc in proc notation parameter type disallows Proc in proc notation parameter type - allows new on proc type that is a lib alias allows new on proc type that is a lib alias - says wrong number of arguments says wrong number of arguments - types proc call with return type types proc call with return type + can assign proc that returns anything to proc that returns nil, with class var (#3655) can assign proc that returns anything to proc that returns nil, with class var (#3655) + disallows Pointer in proc notation parameter type disallows Pointer in proc notation parameter type + allows using proc arg name shadowing local variable allows using proc arg name shadowing local variable + allows using Proc as restriction (1) allows using Proc as restriction (1) + says wrong number of block params in new on proc type says wrong number of block params in new on proc type can assign NoReturn proc to other proc (#3032) can assign NoReturn proc to other proc (#3032) - allows passing NoReturn type for any return type (3) allows passing NoReturn type for any return type (3) - disallows casting a proc type to one accepting less arguments disallows casting a proc type to one accepting less arguments - disallows Reference in procs disallows Reference in procs + disallows Object in proc notation parameter type disallows Object in proc notation parameter type + disallows Number in procs disallows Number in procs + allows passing NoReturn type for any return type, with Proc notation (#12126) allows passing NoReturn type for any return type, with Proc notation (#12126) + types proc pointer to instance method types proc pointer to instance method + disallows Struct in proc notation return type disallows Struct in proc notation return type uses array argument of proc arg (1) uses array argument of proc arg (1) - disallows Tuple in proc return types disallows Tuple in proc return types - disallows Int in captured block disallows Int in captured block - uses array argument of proc arg (2) uses array argument of proc arg (2) - disallows Proc in proc return types disallows Proc in proc return types - types proc pointer with a type that was never instantiated types proc pointer with a type that was never instantiated - disallows Int in proc return types disallows Int in proc return types - virtualizes proc type (#6789) virtualizes proc type (#6789) - declares an instance variable with splat in proc notation declares an instance variable with splat in proc notation - disallows Tuple in proc pointer disallows Tuple in proc pointer - allows metaclass in proc return types allows metaclass in proc return types - allows passing proc type if it is a lib alias allows passing proc type if it is a lib alias - disallows Value in proc return types disallows Value in proc return types - disallows Float in proc notation parameter type disallows Float in proc notation parameter type - allows passing function to LibC without specifying types allows passing function to LibC without specifying types - disallows Number in proc pointer disallows Number in proc pointer - types proc literal with return type (2) types proc literal with return type (2) - types proc literal with a type that was never instantiated types proc literal with a type that was never instantiated + disallows StaticArray in proc notation parameter type disallows StaticArray in proc notation parameter type + *doesn't* merge Proc that returns NoReturn with another one that returns something else (#9971) *doesn't* merge Proc that returns NoReturn with another one that returns something else (#9971) + allows metaclass in proc pointer allows metaclass in proc pointer + disallows Value in captured block disallows Value in captured block + disallows Reference in proc return types disallows Reference in proc return types + allows metaclass in proc notation parameter type allows metaclass in proc notation parameter type + has proc literal as restriction and errors if sizes are different has proc literal as restriction and errors if sizes are different + uses array argument of proc arg (4) uses array argument of proc arg (4) + errors when using local variable with proc argument name errors when using local variable with proc argument name + gets pointer to lib fun without specifying types gets pointer to lib fun without specifying types + disallows StaticArray in proc pointer disallows StaticArray in proc pointer + allows metaclass in procs allows metaclass in procs + allows metaclass in proc notation return type allows metaclass in proc notation return type + disallows Struct in captured block disallows Struct in captured block + disallows Struct in proc pointer disallows Struct in proc pointer + disallows Float in procs disallows Float in procs types a proc pointer with generic types types a proc pointer with generic types + disallows Reference in procs disallows Reference in procs + disallows Enum in captured block disallows Enum in captured block + disallows Enum in proc return types disallows Enum in proc return types + can assign proc that returns anything to proc that returns nil, with instance var (#3655) can assign proc that returns anything to proc that returns nil, with instance var (#3655) + allows new on proc type that is a lib alias allows new on proc type that is a lib alias + disallows Int in proc return types disallows Int in proc return types + says wrong return type in new on proc type says wrong return type in new on proc type + gives correct error message when proc return type is incorrect (#219) gives correct error message when proc return type is incorrect (#219) + errors when using macro as proc value (inside method) (#7465) errors when using macro as proc value (inside method) (#7465) + disallows casting a proc type to one accepting same size argument but different output disallows casting a proc type to one accepting same size argument but different output + disallows Object in captured block disallows Object in captured block + errors if inferred return type doesn't match return type restriction (1) errors if inferred return type doesn't match return type restriction (1) + can use @@cvar as pointer syntax receiver (#9239) can use @@cvar as pointer syntax receiver (#9239) + disallows Struct in procs disallows Struct in procs + disallows Proc in procs disallows Proc in procs + accesses T inside variadic generic, in proc notation accesses T inside variadic generic, in proc notation + allows invoking a function with a generic subtype (2) allows invoking a function with a generic subtype (2) disallows Class in proc notation parameter type disallows Class in proc notation parameter type - doesn't need to deduce type of block if return is void doesn't need to deduce type of block if return is void + allows passing function to LibC without specifying types, using a class method allows passing function to LibC without specifying types, using a class method + disallows Proc in proc return types disallows Proc in proc return types + uses array argument of proc arg (3) uses array argument of proc arg (3) + disallows Value in proc pointer disallows Value in proc pointer + disallows Enum in proc pointer disallows Enum in proc pointer + errors when using macro as proc value (top-level with obj) (#7465) errors when using macro as proc value (top-level with obj) (#7465) + disallows Number in proc notation return type disallows Number in proc notation return type + disallows Class in proc notation return type disallows Class in proc notation return type + disallows Pointer in proc notation return type disallows Pointer in proc notation return type disallows Enum in proc notation return type disallows Enum in proc notation return type - disallows Reference in captured block disallows Reference in captured block - disallows Struct in proc pointer disallows Struct in proc pointer - allows passing NoReturn type for any return type (2) allows passing NoReturn type for any return type (2) + accesses T and R accesses T and R + can pass Proc(T) to Proc(Nil) in type restriction (#8964) can pass Proc(T) to Proc(Nil) in type restriction (#8964) + disallows Float in proc return types disallows Float in proc return types + disallows Number in captured block disallows Number in captured block + types int proc literal types int proc literal + passes proc pointer as block with arguments passes proc pointer as block with arguments + disallows Enum in procs disallows Enum in procs + types int -> int proc call types int -> int proc call + disallows Class in proc return types disallows Class in proc return types + disallows Pointer in procs disallows Pointer in procs + disallows Tuple in captured block disallows Tuple in captured block + uses array argument of proc arg (2) uses array argument of proc arg (2) + allows passing virtual type including module to proc allows passing virtual type including module to proc ... ... - disallows Int in proc notation return type disallows Int in proc notation return type - disallows Proc in captured block disallows Proc in captured block - disallows Pointer in proc return types disallows Pointer in proc return types - has proc literal as restriction and errors if sizes are different has proc literal as restriction and errors if sizes are different - disallows Pointer in proc notation parameter type disallows Pointer in proc notation parameter type - allows passing NoReturn type for any return type, with Proc notation (#12126) allows passing NoReturn type for any return type, with Proc notation (#12126) + types proc type spec types proc type spec + disallows Int in procs disallows Int in procs + disallows Proc in proc pointer disallows Proc in proc pointer + allows passing function to LibC without specifying types allows passing function to LibC without specifying types + disallows Enum in proc notation parameter type disallows Enum in proc notation parameter type + allows metaclass in proc return types allows metaclass in proc return types + accesses T inside variadic generic accesses T inside variadic generic + allows passing NoReturn type for any return type (2) allows passing NoReturn type for any return type (2) + binds proc literal to arguments and body binds proc literal to arguments and body + disallows Float in captured block disallows Float in captured block disallows Number in proc return types disallows Number in proc return types - can pass Proc(X, T) to Proc(X, Nil) in type restriction (#8964) can pass Proc(X, T) to Proc(X, Nil) in type restriction (#8964) -Code gen: named args - calls twice with different types calls twice with different types - calls new with named arg calls new with named arg - calls with named arg and other args calls with named arg and other args - uses named args in dispatch uses named args in dispatch - sends two regular arguments as named arguments in inverted position (1) sends two regular arguments as named arguments in inverted position (1) - calls with named arg calls with named arg - overloads based on required named args, with restrictions overloads based on required named args, with restrictions - sends two regular arguments as named arguments in inverted position (2) sends two regular arguments as named arguments in inverted position (2) - calls with named arg as object method calls with named arg as object method - overloads based on required named args overloads based on required named args - sends two regular arguments as named arguments sends two regular arguments as named arguments - uses bare splat in new (2) uses bare splat in new (2) - sends one regular argument as named argument sends one regular argument as named argument -Semantic: cast - disallows casting int to pointer disallows casting int to pointer - disallows casting pointer to fun disallows casting pointer to fun - doesn't cast to unbound generic type (as) (#5927) doesn't cast to unbound generic type (as) (#5927) - doesn't crash with typeof no-type (#7441) doesn't crash with typeof no-type (#7441) - casts to same type is ok casts to same type is ok - doesn't eagerly try to check cast type (#12268) doesn't eagerly try to check cast type (#12268) - casts to incompatible type gives error casts to incompatible type gives error - disallows casting to Class disallows casting to Class - allows casting NoReturn to any type (#2132) allows casting NoReturn to any type (#2132) - casts to target type even if can't infer casted value type (obsolete) casts to target type even if can't infer casted value type (obsolete) - disallows casting fun to pointer disallows casting fun to pointer - casts from pointer to generic class gives error casts from pointer to generic class gives error - should error if can't cast even if not instantiated should error if can't cast even if not instantiated - casts to module casts to module - errors if casting nil to Object inside typeof (#2403) errors if casting nil to Object inside typeof (#2403) - can cast to metaclass (bug) can cast to metaclass (bug) - casts to base class making it virtual (2) casts to base class making it virtual (2) - doesn't error if casting to a generic type doesn't error if casting to a generic type - casts from union to compatible union casts from union to compatible union - casts to compatible type and use it casts to compatible type and use it - errors on cast inside a call that can't be instantiated errors on cast inside a call that can't be instantiated - doesn't cast to unbound generic type (as?) (#5927) doesn't cast to unbound generic type (as?) (#5927) - disallows casting to Object (#815) disallows casting to Object (#815) - casts uninstantiated generic class to itself (#10882) casts uninstantiated generic class to itself (#10882) - doesn't allow upcast of generic type var (#996) doesn't allow upcast of generic type var (#996) - casts pointer of one type to another type casts pointer of one type to another type - allows casting reference union to void pointer allows casting reference union to void pointer - allows casting object to void pointer allows casting object to void pointer - considers else to be unreachable (#9658) considers else to be unreachable (#9658) - can cast from Void* to virtual type (#3014) can cast from Void* to virtual type (#3014) - disallows casting to Reference disallows casting to Reference - casts to generic virtual type casts to generic virtual type - casts pointer to another type casts pointer to another type - can cast to metaclass (2) (#11121) can cast to metaclass (2) (#11121) - casts from union to incompatible union gives error casts from union to incompatible union gives error - casts to bigger union casts to bigger union - casts to base class making it virtual (1) casts to base class making it virtual (1) - doesn't cast to virtual primitive (bug) doesn't cast to virtual primitive (bug) + disallows casting a proc type to one accepting more arguments disallows casting a proc type to one accepting more arguments + disallows Value in proc return types disallows Value in proc return types + allows new on proc type allows new on proc type + types Proc(*T, Void) as Proc(*T, Nil) types Proc(*T, Void) as Proc(*T, Nil) + allows passing NoReturn type for any return type (1) allows passing NoReturn type for any return type (1) + accesses T inside variadic generic (2) accesses T inside variadic generic (2) + disallows Int in proc notation return type disallows Int in proc notation return type + disallows Class in proc pointer disallows Class in proc pointer + has proc literal as restriction and works has proc literal as restriction and works + can use @ivar as pointer syntax receiver (#9239) can use @ivar as pointer syntax receiver (#9239) + allows metaclass in captured block allows metaclass in captured block + allows using Proc as restriction (2) allows using Proc as restriction (2) + allows invoking a function with a generic subtype (1) allows invoking a function with a generic subtype (1) + disallows Pointer in proc pointer disallows Pointer in proc pointer +Normalize: hash literal + hoists complex element expressions, hash-like generic hoists complex element expressions, hash-like generic + normalizes empty with of normalizes empty with of + hoists complex element expressions, hash-like hoists complex element expressions, hash-like + normalizes non-empty without of normalizes non-empty without of + normalizes non-empty with of normalizes non-empty with of + hoists complex element expressions hoists complex element expressions Crystal::Repl::Interpreter - typeof - interprets typeof virtual type interprets typeof virtual type - interprets typeof metaclass type interprets typeof metaclass type - interprets typeof instance type interprets typeof instance type -Normalize: regex literal - StringLiteral - expands to const expands to const - simple simple - StringInterpolation - simple simple - options - imx imx - x x - im im - empty empty - i i + closures + closures struct and calls method on it closures struct and calls method on it + does closure without args that captures and modifies one local variable does closure without args that captures and modifies one local variable + does closure inside proc, capture proc argument does closure inside proc, capture proc argument + sets ivar of self closured struct (#12341) sets ivar of self closured struct (#12341) + closures self in proc literal (implicit self) closures self in proc literal (implicit self) + does closure inside proc does closure inside proc + does nested closure inside captured blocks does nested closure inside captured blocks + does nested closure inside methods and blocks does nested closure inside methods and blocks + does closure with pointerof local var does closure with pointerof local var + closures self in proc literal closures self in proc literal + does nested closure inside proc does nested closure inside proc + does closure inside block does closure inside block + closures self and modifies instance var closures self and modifies instance var + does closure inside const does closure inside const + gets ivar of self closured struct (#12341) gets ivar of self closured struct (#12341) + does closure without args that captures and modifies two local variables does closure without args that captures and modifies two local variables + closures def arguments closures def arguments + does next inside captured block (#12226) does next inside captured block (#12226) + closures block args after 8 bytes (the closure var) closures block args after 8 bytes (the closure var) + does closure inside block, capture block arg does closure inside block, capture block arg + reads self closured struct (#12341) reads self closured struct (#12341) + does closure with two args that captures and modifies two local variables does closure with two args that captures and modifies two local variables + does closure inside def does closure inside def + does closure inside class variable initializer does closure inside class variable initializer + passes closured struct instance var as self passes closured struct instance var as self + closures closured block arg closures closured block arg + does closure and accesses it inside block does closure and accesses it inside block + doesn't mix local vars with closured vars doesn't mix local vars with closured vars +Code gen: automatic cast + doesn't autocast number on union (#8655) doesn't autocast number on union (#8655) + casts Symbol to Enum in ivar assignment casts Symbol to Enum in ivar assignment + does multidispatch with automatic casting (1) (#8217) does multidispatch with automatic casting (1) (#8217) + casts literal float (Float32 -> Float64) casts literal float (Float32 -> Float64) + casts Int32 -> Int64 in arg restriction casts Int32 -> Int64 in arg restriction + casts literal float (Float64 -> Float32) casts literal float (Float64 -> Float32) + casts literal integer (Int32 -> Int64) casts literal integer (Int32 -> Int64) + casts literal integer (Int64 -> Int32, ok) casts literal integer (Int64 -> Int32, ok) + casts Symbol to Enum in ivar type declaration casts Symbol to Enum in ivar type declaration + casts Int32 to Int64 in ivar type declaration casts Int32 to Int64 in ivar type declaration + casts Int32 to Int64 in cvar type declaration casts Int32 to Int64 in cvar type declaration + casts literal integer (Int32 -> Float32) casts literal integer (Int32 -> Float32) + does multidispatch with automatic casting (3) does multidispatch with automatic casting (3) + casts Int32 to Int64 in lvar assignment casts Int32 to Int64 in lvar assignment + casts literal integer (Int32 -> Float64) casts literal integer (Int32 -> Float64) + casts Int32 to Int64 in ivar assignment casts Int32 to Int64 in ivar assignment + casts Int32 to Int64 in ivar type declaration in generic casts Int32 to Int64 in ivar type declaration in generic + casts integer variable to larger type (#9565) casts integer variable to larger type (#9565) + casts symbol literal to enum casts symbol literal to enum + does multidispatch with automatic casting (2) (#8217) does multidispatch with automatic casting (2) (#8217) + casts Int32 to Int64 in cvar assignment casts Int32 to Int64 in cvar assignment +Codegen: special vars + allows with primitive allows with primitive + codegens in block with nested block codegens in block with nested block codegens in block with nested block codegens in block with nested block codegens in block with nested block codegens in block with nested block codegens in block with nested block codegens in block with nested block codegens in block with nested block codegens in block with nested block + codegens after block 2 codegens after block 2 + codegens with default argument codegens with default argument + allows with struct allows with struct + codegens $? codegens $? + preserves special vars in macro expansion with call with default arguments (#824) preserves special vars in macro expansion with call with default arguments (#824) + codegens $? with nilable (2) codegens $? with nilable (2) codegens $? with nilable (2) codegens $? with nilable (2) codegens $? with nilable (2) codegens $? with nilable (2) codegens $? with nilable (2) codegens $? with nilable (2) codegens $? with nilable (2) codegens $? with nilable (2) + codegens in block codegens in block codegens in block codegens in block codegens in block codegens in block codegens in block codegens in block codegens in block codegens in block + works lazily works lazily works lazily works lazily works lazily works lazily works lazily works lazily works lazily works lazily + codegens $~ with nilable (1) codegens $~ with nilable (1) codegens $~ with nilable (1) codegens $~ with nilable (1) codegens $~ with nilable (1) codegens $~ with nilable (1) codegens $~ with nilable (1) codegens $~ with nilable (1) codegens $~ with nilable (1) codegens $~ with nilable (1) + codegens $~ codegens $~ + codegens after block codegens after block codegens after block codegens after block codegens after block codegens after block codegens after block codegens after block codegens after block codegens after block + preserves special vars if initialized inside block (#2194) preserves special vars if initialized inside block (#2194) + codegens $? with nilable (1) codegens $? with nilable (1) codegens $? with nilable (1) codegens $? with nilable (1) codegens $? with nilable (1) codegens $? with nilable (1) codegens $? with nilable (1) codegens $? with nilable (1) codegens $? with nilable (1) codegens $? with nilable (1) + codegens $~ two levels codegens $~ two levels + codegens $~ with nilable (2) codegens $~ with nilable (2) codegens $~ with nilable (2) codegens $~ with nilable (2) codegens $~ with nilable (2) codegens $~ with nilable (2) codegens $~ with nilable (2) codegens $~ with nilable (2) codegens $~ with nilable (2) codegens $~ with nilable (2) +Code gen: op assign + evaluates exps once (#3398) evaluates exps once (#3398) + evaluates exps once, [] (#3398) evaluates exps once, [] (#3398) +Semantic: union + types union when both obj and arg are union types union when both obj and arg are union + errors if instantiates union errors if instantiates union + types union types union + can reopen Union can reopen Union + commutativity + generic module instance v.s. extending generic module instance metaclass generic module instance v.s. extending generic module instance metaclass + uninstantiated generic super-metaclass v.s. uninstantiated generic sub-metaclass uninstantiated generic super-metaclass v.s. uninstantiated generic sub-metaclass + module v.s. including module module v.s. including module + generic module instance v.s. including generic module instance generic module instance v.s. including generic module instance + generic module instance v.s. including module generic module instance v.s. including module + module v.s. including generic module instance module v.s. including generic module instance + virtual metaclass v.s. generic subclass instance metaclass virtual metaclass v.s. generic subclass instance metaclass + superclass v.s. uninstantiated generic subclass superclass v.s. uninstantiated generic subclass + module v.s. extending generic module instance metaclass module v.s. extending generic module instance metaclass + merges types in the same hierarchy with Union merges types in the same hierarchy with Union + doesn't crash with union of no-types (#5805) doesn't crash with union of no-types (#5805) + doesn't run virtual lookup on unbound unions (#9173) doesn't run virtual lookup on unbound unions (#9173) + looks up type in union type with free var looks up type in union type with free var + can iterate T can iterate T + can use Union in type restriction (#2988) can use Union in type restriction (#2988) + finds method in Object finds method in Object + types union when arg is union types union when arg is union + doesn't virtualize union elements (#7814) doesn't virtualize union elements (#7814) + treats void as nil in union treats void as nil in union + supports macro if inside union supports macro if inside union + types union when obj is union types union when obj is union + types union of classes types union of classes + assigns to union and keeps new union type in call assigns to union and keeps new union type in call + can reopen Union and access T can reopen Union and access T + finds method in Value finds method in Value + types union of same type types union of same type +Codegen: until + codegens until codegens until +context + does includes self on classes does includes self on classes + can get context of empty def can get context of empty def + consider different instances of def consider different instances of def + can get context in generic class can get context in generic class + includes last call includes last call + can get context inside initialize can get context inside initialize + can get context in file private method can get context in file private method + does includes regex special variables does includes regex special variables + use type filters from if var use type filters from if var + can get context of nested yielded block can get context of nested yielded block + includes top level vars includes top level vars + can get context in file private module can get context in file private module + can handle union types can handle union types + can get context inside class methods can get context inside class methods + does not includes temp variables does not includes temp variables + includes args includes args + includes assignments includes assignments + can get context of empty yielded block can get context of empty yielded block + can get context inside a module can get context inside a module + includes block args includes block args + can get context in contained class' class method can get context in contained class' class method + use type filters from is_a? use type filters from is_a? + can get context of yielded block can get context of yielded block + can display text output can display text output + does includes args, instance vars, local variables and expressions on instance methods does includes args, instance vars, local variables and expressions on instance methods + can't get context from uncalled method can't get context from uncalled method + can display json output can display json output +Crystal::Codegen::Target + normalizes triples normalizes triples + parses incomplete triples parses incomplete triples + parses freebsd version parses freebsd version +Semantic: nilable cast + doesn't introduce type filter for nilable cast object (#12661) doesn't introduce type filter for nilable cast object (#12661) + types as? with NoReturn types as? with NoReturn + casts to module casts to module + doesn't crash with typeof no-type (#7441) doesn't crash with typeof no-type (#7441) + types as? types as? + types as? with union types as? with union + types as? with nil types as? with nil + does upcast does upcast +Semantic: special vars + infers $~ infers $~ + infers when assigning inside block infers when assigning inside block + infers $? infers $? + infers in block infers in block + types $~ when not defined as no return types $~ when not defined as no return + infers after block infers after block + types $~ when not defined as no return (2) types $~ when not defined as no return (2) + infers in block with nested block infers in block with nested block + errors if assigning $? at top level errors if assigning $? at top level + errors if assigning $~ at top level errors if assigning $~ at top level + types $? when not defined as no return types $? when not defined as no return + types $? when not defined as no return (2) types $? when not defined as no return (2) +Crystal::CrystalPath + finds "./test_folder/*" finds "./test_folder/*" + finds "test_files" finds "test_files" + doesn't finds "./crystal_path_spec.cr" doesn't finds "./crystal_path_spec.cr" + finds "foo.cr" finds "foo.cr" + finds "../test_folder" finds "../test_folder" + finds "./test_folder/file_three.cr" finds "./test_folder/file_three.cr" + doesn't finds "./crystal_path_spec" doesn't finds "./crystal_path_spec" + finds "test_files/file_one" finds "test_files/file_one" + doesn't finds "../crystal_path/test_files/file_one" doesn't finds "../crystal_path/test_files/file_one" + includes 'lib' by default includes 'lib' by default + doesn't finds "test_files/missing_file.cr" doesn't finds "test_files/missing_file.cr" + doesn't finds "file_two.cr" doesn't finds "file_two.cr" + .expand_paths .expand_paths + finds "test_files/**" finds "test_files/**" + finds "other_test_files" finds "other_test_files" + finds "crystal_path_spec" finds "crystal_path_spec" + finds "test_files/file_one" finds "test_files/file_one" + finds "test_files/file_one.cr" finds "test_files/file_one.cr" + #each_file_expansion + foo/bar foo/bar + ./foo ./foo + foo.cr foo.cr + foo/bar/baz foo/bar/baz + ./foo/bar ./foo/bar + ./foo/bar/baz ./foo/bar/baz + foo.cr/bar.cr foo.cr/bar.cr + foo.cr/bar foo.cr/bar + foo foo + ./foo.cr ./foo.cr + finds "./file_two.cr" finds "./file_two.cr" + finds "test_files/file_three" finds "test_files/file_three" + doesn't finds "build/reproducible-path/crystal-1.14.0+dfsg/spec/compiler/crystal_path/crystal_path_spec.cr" doesn't finds "build/reproducible-path/crystal-1.14.0+dfsg/spec/compiler/crystal_path/crystal_path_spec.cr" + finds "test_files/file_four" finds "test_files/file_four" + finds "test_files/yet_another" finds "test_files/yet_another" + overrides path with environment variable overrides path with environment variable + doesn't finds "test_folder/*" doesn't finds "test_folder/*" + doesn't finds "test_folder/file_three.cr" doesn't finds "test_folder/file_three.cr" + finds "test_files/*" finds "test_files/*" + doesn't finds "../../src/file_three" doesn't finds "../../src/file_three" + finds "../**" finds "../**" + finds "test_files/another" finds "test_files/another" +Semantic: did you mean + doesn't suggest for operator doesn't suggest for operator + suggests a better alternative to logical operators (#2715) suggests a better alternative to logical operators (#2715) + suggests for class variable suggests for class variable + suggest that there might be a typo for an initialize method with overload suggest that there might be a typo for an initialize method with overload + says did you mean for instance var in subclass says did you mean for instance var in subclass + says did you mean for one mistake in short word in instance method says did you mean for one mistake in short word in instance method + says did you mean for nested class says did you mean for nested class + says did you mean for variable says did you mean for variable + says did you mean for class says did you mean for class + suggest that there might be a typo for an initialize method suggest that there might be a typo for an initialize method + says did you mean for global method without parenthesis says did you mean for global method without parenthesis + says did you mean for two mistakes in long word in instance method says did you mean for two mistakes in long word in instance method + says did you mean for named argument says did you mean for named argument + says did you mean finds most similar in type says did you mean finds most similar in type + says did you mean for instance var says did you mean for instance var + doesn't suggest when declaring var inside macro (#466) doesn't suggest when declaring var inside macro (#466) + doesn't suggest when declaring var with suffix if and using it (#946) doesn't suggest when declaring var with suffix if and using it (#946) + says did you mean for global method with parenthesis says did you mean for global method with parenthesis + says did you mean finds most similar in def says did you mean finds most similar in def + suggest that there might be a typo for an initialize method in inherited class suggest that there might be a typo for an initialize method in inherited class + says did you mean in instance var declaration says did you mean in instance var declaration Semantic: instance var - doesn't error when using generic in generic type because guessed elsewhere doesn't error when using generic in generic type because guessed elsewhere - errors if declaring var in Union(*T) errors if declaring var in Union(*T) - doesn't error if not calling super but initializing all variables doesn't error if not calling super but initializing all variables - declares instance var in module, inherits to type recursively declares instance var in module, inherits to type recursively - doesn't error if not initializing variables but calling super in parent parent doesn't error if not initializing variables but calling super in parent parent - types generic instance as virtual type if generic type has subclasses (#3805) types generic instance as virtual type if generic type has subclasses (#3805) - errors if not initializing super variable in generic errors if not initializing super variable in generic - guesses from splat (2) (#3149) guesses from splat (2) (#3149) - guesses from array literal with of, with subclass guesses from array literal with of, with subclass - declares instance var of generic type, with generic type declares instance var of generic type, with generic type - doesn't error when redeclaring subclass variable with the same type doesn't error when redeclaring subclass variable with the same type - doesn't duplicate instance var in subclass doesn't duplicate instance var in subclass - infers type from && infers type from && - infers type from array literal with of infers type from array literal with of - infers from Pointer.malloc infers from Pointer.malloc - infers from assign to local var in generic type (#2467) infers from assign to local var in generic type (#2467) - errors if declaring var in Enum errors if declaring var in Enum - infers type from array literal with of metaclass infers type from array literal with of metaclass - solves instance var initializer in metaclass context (#5876) solves instance var initializer in metaclass context (#5876) - infers type from lib out (1) infers type from lib out (1) - doesn't infer unbound generic type on non-generic call (#6390) doesn't infer unbound generic type on non-generic call (#6390) - infers type from argument with restriction, in generic infers type from argument with restriction, in generic - infers from Pointer.null infers from Pointer.null + doesn't consider var as nilable if conditionally assigned inside initialize, but has initializer (#3669) doesn't consider var as nilable if conditionally assigned inside initialize, but has initializer (#3669) + infers type from custom generic hash literal infers type from custom generic hash literal + transfers initializer from generic module to class transfers initializer from generic module to class + infers type from char literal infers type from char literal + is more permissive with macro def initialize, other initialize is more permissive with macro def initialize, other initialize + infers from class method that has type annotation, with multiple overloads matching, all with the same type infers from class method that has type annotation, with multiple overloads matching, all with the same type + declares instance var of generic type declares instance var of generic type + doesn't infer type to be nilable if using self.class in call in assign doesn't infer type to be nilable if using self.class in call in assign + declares instance var of generic module (2) declares instance var of generic module (2) + doesn't complain in second part of #2575 doesn't complain in second part of #2575 + obeys super module initialize (#456) obeys super module initialize (#456) errors if not initializing super variables errors if not initializing super variables - infers type from regex literal with interpolation infers type from regex literal with interpolation - infers type from all call matches infers type from all call matches - infers type for generic class, with lib call infers type for generic class, with lib call - infers type from custom hash literal infers type from custom hash literal - can't infer type from initializer in generic module type can't infer type from initializer in generic module type - infers type from named tuple literal infers type from named tuple literal - infers nilable instance var of generic type infers nilable instance var of generic type - guesses virtual hash type (2) (#5342) guesses virtual hash type (2) (#5342) - errors if not initialized in all initialize errors if not initialized in all initialize - errors if adds instance variable to Object via guess via included module errors if adds instance variable to Object via guess via included module - considers var as assigned in multi-assign considers var as assigned in multi-assign - infers type from custom array literal in generic infers type from custom array literal in generic - can guess the type from double-splat argument with double-splatted type variable can guess the type from double-splat argument with double-splatted type variable - infers from method on integer literal, with type annotation infers from method on integer literal, with type annotation + infers type from tuple literal infers type from tuple literal + infers type to be nilable if self is used before assigning to a variable infers type to be nilable if self is used before assigning to a variable infers type from two literals infers type from two literals - infers type from as infers type from as - infers from another instance var infers from another instance var - doesn't infer unbound generic type on generic method called from generic's subclass doesn't infer unbound generic type on generic method called from generic's subclass - infers nilable instance var of generic module infers nilable instance var of generic module - infers type for generic class, with begin infers type for generic class, with begin - infers type from ! infers type from ! - doesn't check call of non-self instance (#4830) doesn't check call of non-self instance (#4830) - infers type from begin infers type from begin + declares instance var with initial value declares instance var with initial value + infers from class method that refers to constant infers from class method that refers to constant + infers type from block argument without restriction infers type from block argument without restriction + infers type from responds_to? infers type from responds_to? + errors if declaring instance var and turns out to be nilable, in generic module type in generic type errors if declaring instance var and turns out to be nilable, in generic module type in generic type + doesn't infer unbound generic type on non-generic call (#6390) doesn't infer unbound generic type on non-generic call (#6390) + doesn't consider instance var as nilable if assigned before self access (#4981) doesn't consider instance var as nilable if assigned before self access (#4981) + errors if declaring instance variable in module included in Object errors if declaring instance variable in module included in Object + inferrs Proc(Void) to Proc(Nil) inferrs Proc(Void) to Proc(Nil) + declares as named tuple declares as named tuple + cannot guess the type from double-splat argument with not double-splatted type cannot guess the type from double-splat argument with not double-splatted type + doesn't complain if declared type is recursive alias that's nilable doesn't complain if declared type is recursive alias that's nilable + errors if declaring var in Int32 errors if declaring var in Int32 infers from new with return type infers from new with return type - declares instance var of generic type, with virtual metaclass declares instance var of generic type, with virtual metaclass - doesn't solve instance var initializer in instance context (1) (#5876) doesn't solve instance var initializer in instance context (1) (#5876) - infers type for generic class, with if infers type for generic class, with if - guesses inside macro expression guesses inside macro expression - infers type for generic class, with literal infers type for generic class, with literal - infers type from path that is a constant infers type from path that is a constant - declares instance var of generic module declares instance var of generic module - infers type from case infers type from case - errors if declaring var in Proc(*T, R) errors if declaring var in Proc(*T, R) - errors if declaring generic type without type vars errors if declaring generic type without type vars - can guess the type from double-splat argument with double-splatted type can guess the type from double-splat argument with double-splatted type - can guess the type from splat argument with splatted type variable can guess the type from splat argument with splatted type variable - infers type to be nilable if self is used in same assign infers type to be nilable if self is used in same assign - doesn't infer from class method with multiple statements and return, on non-easy return doesn't infer from class method with multiple statements and return, on non-easy return - guesses from as.(typeof(...)) guesses from as.(typeof(...)) - shouldn't error when accessing instance var in initialized that's always initialized (#2953) shouldn't error when accessing instance var in initialized that's always initialized (#2953) - infers type from hash literal in generic type infers type from hash literal in generic type - declares instance var of generic type, with metaclass declares instance var of generic type, with metaclass - errors if declaring var in Int errors if declaring var in Int - doesn't error if declaring instance var and doesn't out to be nilable, in generic module type doesn't error if declaring instance var and doesn't out to be nilable, in generic module type - cannot guess the type from splat argument with not splatted type cannot guess the type from splat argument with not splatted type - infers type from instance_sizeof infers type from instance_sizeof - doesn't solve instance var initializer in instance context (2) (#5876) doesn't solve instance var initializer in instance context (2) (#5876) - errors if declaring var in Float errors if declaring var in Float - infers type by removing nil from || left side infers type by removing nil from || left side - declares instance var of generic type, with tuple declares instance var of generic type, with tuple - doesn't error if not initializing variables but calling previous_def (#3210) doesn't error if not initializing variables but calling previous_def (#3210) - looks up return type restriction in defining type, not instantiated type (#11961) looks up return type restriction in defining type, not instantiated type (#11961) - ignores redefined initialize (#456) ignores redefined initialize (#456) - infers type for generic class, with T.new and literal infers type for generic class, with T.new and literal - doesn't crash when inferring from new without matches (#2538) doesn't crash when inferring from new without matches (#2538) - doesn't error if not initializing variables but calling super doesn't error if not initializing variables but calling super - infers from new with return type in generic type infers from new with return type in generic type doesn't infer type to be nilable if using self.class doesn't infer type to be nilable if using self.class - allows nil instance var because it's a generic type allows nil instance var because it's a generic type - guesses virtual array type (3) (#5342) guesses virtual array type (3) (#5342) - infers type from assign (1) infers type from assign (1) - doesn't error if calling initialize from another initialize (2) doesn't error if calling initialize from another initialize (2) - errors when typing an instance variable inside a method errors when typing an instance variable inside a method - infers type for generic class, with T.new infers type for generic class, with T.new - declares instance var declares instance var - declares instance var with self, on generic declares instance var with self, on generic - doesn't infer for subclass if assigns another type (1) doesn't infer for subclass if assigns another type (1) - infers type for generic class, with case infers type for generic class, with case - infers type from array literal in generic type infers type from array literal in generic type - can't infer type from initializer can't infer type from initializer + infers type for non-generic class, with assign infers type for non-generic class, with assign + errors if declaring instance var and turns out to be nilable, in generic module type errors if declaring instance var and turns out to be nilable, in generic module type + doesn't crash on recursive method call doesn't crash on recursive method call infers from another instance var with type declaration infers from another instance var with type declaration - infers type from assign (2) infers type from assign (2) - errors if declaring var in Int32 errors if declaring var in Int32 - doesn't error when using generic because guessed elsewhere doesn't error when using generic because guessed elsewhere - guesses virtual array type (3) (#5342) guesses virtual array type (3) (#5342) - infers type from lib variable infers type from lib variable - doesn't infer generic type without type argument inside generic doesn't infer generic type without type argument inside generic - uses virtual types in fun uses virtual types in fun - doesn't error if uses typeof(@var) doesn't error if uses typeof(@var) - errors if declaring var in Value errors if declaring var in Value - errors if declaring var in Number errors if declaring var in Number + doesn't check call of non-self instance (#4830) doesn't check call of non-self instance (#4830) + infers type for generic class, with assign (1) infers type for generic class, with assign (1) infers type from hash literal from elements infers type from hash literal from elements - doesn't error if not initializing variables but calling super for module doesn't error if not initializing variables but calling super for module - doesn't error if calling initialize from another initialize (1) doesn't error if calling initialize from another initialize (1) - infers type from hash literal with literals in generic type infers type from hash literal with literals in generic type + infers type for generic module infers type for generic module + doesn't error when using generic because guessed elsewhere doesn't error when using generic because guessed elsewhere + infers type from regex literal with interpolation infers type from regex literal with interpolation + guesses inside macro expression guesses inside macro expression + infer from class method where new is redefined infer from class method where new is redefined + declares instance var with initial value, with subclass declares instance var with initial value, with subclass + infers type for generic class, with if infers type for generic class, with if + infers type from ! infers type from ! + infers from class method that has number literal infers from class method that has number literal + can't infer type from initializer in generic module type can't infer type from initializer in generic module type + says can't infer (#2536) says can't infer (#2536) + errors if declaring var in Float errors if declaring var in Float + infers type from array literal with literals in generic type infers type from array literal with literals in generic type + declares instance var of generic module from non-generic module declares instance var of generic module from non-generic module declares instance var of generic class after reopen declares instance var of generic class after reopen - errors when assigning instance variable at top level block errors when assigning instance variable at top level block - guesses virtual hash type (1) (#5342) guesses virtual hash type (1) (#5342) - infers from class method that has type annotation, in generic class infers from class method that has type annotation, in generic class - doesn't error if initializes via super in macro def doesn't error if initializes via super in macro def + infers type from lib variable infers type from lib variable errors when using Class in generic type errors when using Class in generic type - errors if declaring instance variable in module included in Object errors if declaring instance variable in module included in Object - doesn't error if not initialized in macro def but outside it doesn't error if not initialized in macro def but outside it - can't infer type of generic method that returns self (#5383) can't infer type of generic method that returns self (#5383) - infers type from included module, outside def infers type from included module, outside def - infers type to be nilable if self is used before assigning to a variable infers type to be nilable if self is used before assigning to a variable - infers type to be nilable if not initialized infers type to be nilable if not initialized - is more permissive with macro def initialize is more permissive with macro def initialize - infers type for non-generic class, with assign infers type for non-generic class, with assign - declares instance var of generic type, with splat declares instance var of generic type, with splat - infers type from new expression infers type from new expression - infers type in multi assign infers type in multi assign - says can't infer type if only nil was assigned says can't infer type if only nil was assigned - infers type from custom hash literal in generic infers type from custom hash literal in generic - cannot guess type from argument assigned in body cannot guess type from argument assigned in body - inferrs Proc(Void) to Proc(Nil) inferrs Proc(Void) to Proc(Nil) + errors if declaring var in Reference errors if declaring var in Reference + is more permissive with macro def initialize, bug with named args is more permissive with macro def initialize, bug with named args + guesses from array literal with of, with subclass guesses from array literal with of, with subclass + uses virtual types in fun uses virtual types in fun + infers type from ||= infers type from ||= + infers type from custom generic array literal infers type from custom generic array literal + infers type from regex literal infers type from regex literal doesn't error if not initializing variables but calling previous_def (2) (#3210) doesn't error if not initializing variables but calling previous_def (2) (#3210) - doesn't infer type from redefined method doesn't infer type from redefined method - infers type to be non-nilable if initialized in all initialize infers type to be non-nilable if initialized in all initialize - infers from Pointer.null in generic type infers from Pointer.null in generic type + infers from Pointer.malloc infers from Pointer.malloc + doesn't crash when inferring from new without matches (#2538) doesn't crash when inferring from new without matches (#2538) + infers type from assign (2) infers type from assign (2) + infers type from symbol literal infers type from symbol literal + infers type from hash literal with of infers type from hash literal with of + infers type from custom array literal infers type from custom array literal + infers type from bool literal infers type from bool literal + infers type from lib out (1) infers type from lib out (1) + infers type in multi assign infers type in multi assign + errors if declaring generic type without type vars errors if declaring generic type without type vars + doesn't error when redeclaring subclass variable with the same type doesn't error when redeclaring subclass variable with the same type + infers from another instance var infers from another instance var + doesn't solve instance var initializer in instance context (2) (#5876) doesn't solve instance var initializer in instance context (2) (#5876) + can type ivar from class inherited by generic class (#5281) can type ivar from class inherited by generic class (#5281) + errors if declaring var in Value errors if declaring var in Value + guesses from splat (2) (#3149) guesses from splat (2) (#3149) can't infer type from initializer in non-generic module can't infer type from initializer in non-generic module - infers from new with return type returning generic infers from new with return type returning generic - accepts overriding inherited instance variable with compatible type accepts overriding inherited instance variable with compatible type - infers from another instance var in generic type with type declaration infers from another instance var in generic type with type declaration - instance variables initializers are used in class variables initialized objects (#3988) instance variables initializers are used in class variables initialized objects (#3988) - infers from assign to local var (#2467) infers from assign to local var (#2467) - doesn't if declaring nilable instance var and turns out to be nilable doesn't if declaring nilable instance var and turns out to be nilable + errors if not initializing super variables (2) errors if not initializing super variables (2) + infers from class method that has type annotation, with overload infers from class method that has type annotation, with overload + infers type from as? infers type from as? + infers type from block argument infers type from block argument + infers type for generic class, with case infers type for generic class, with case + errors when overriding inherited instance variable with incompatible type errors when overriding inherited instance variable with incompatible type + infers type from redefined method if calls previous_def infers type from redefined method if calls previous_def + declares instance var of generic type, with splat inside Tuple declares instance var of generic type, with splat inside Tuple + infers type from && infers type from && + guesses virtual array type (3) (#5342) guesses virtual array type (3) (#5342) + infers type from array literal from its literals infers type from array literal from its literals + doesn't infer from class method with multiple statements and return, on non-easy return (2) doesn't infer from class method with multiple statements and return, on non-easy return (2) + infers from restriction using virtual type infers from restriction using virtual type + infers type for generic class, with T.new infers type for generic class, with T.new + infers type from begin infers type from begin + errors if declaring var in Int errors if declaring var in Int can type ivar from module included by generic class (#5281) can type ivar from module included by generic class (#5281) - says can't infer type if only nil was assigned, in generic type says can't infer type if only nil was assigned, in generic type - doesn't crash on #3580 doesn't crash on #3580 - infers from method in generic type, with type annotation infers from method in generic type, with type annotation - infers in multiple assign for tuple type (1) infers in multiple assign for tuple type (1) - declares instance var of generic type, with no type parameter declares instance var of generic type, with no type parameter - declares instance var of generic type subclass declares instance var of generic type subclass - doesn't error if not initializes in all initialize because declared as nilable doesn't error if not initializes in all initialize because declared as nilable - says can't infer (#2536) says can't infer (#2536) - errors with macro def but another def doesn't initialize all errors with macro def but another def doesn't initialize all - doesn't error if initializing var in superclass, and then empty initialize doesn't error if initializing var in superclass, and then empty initialize - infers type from array literal with literals in generic type infers type from array literal with literals in generic type - guesses inside macro if guesses inside macro if - errors if declaring var in StaticArray(T, N) errors if declaring var in StaticArray(T, N) - infers type from if infers type from if + infers type from self (#2575) infers type from self (#2575) + doesn't error if uses typeof(@var) doesn't error if uses typeof(@var) + declares instance var in module, inherits to type recursively declares instance var in module, inherits to type recursively + guesses virtual array type (3) (#5342) guesses virtual array type (3) (#5342) + infers from new with return type returning generic infers from new with return type returning generic + errors if not initializing super variables (3) errors if not initializing super variables (3) + errors if finally not initialized in macro def errors if finally not initialized in macro def is more permissive with macro def initialize, multiple is more permissive with macro def initialize, multiple - infers type from custom generic array literal infers type from custom generic array literal - doesn't error if not initializing variables but calling super for generic module doesn't error if not initializing variables but calling super for generic module - doesn't infer from class method with multiple statements and return, on non-easy return (2) doesn't infer from class method with multiple statements and return, on non-easy return (2) - can't infer type from initializer in generic class type can't infer type from initializer in generic class type - infers type from literal outside def with initialize and type restriction infers type from literal outside def with initialize and type restriction - errors when using Class (#2605) errors when using Class (#2605) - errors if adds instance variable to Object via guess errors if adds instance variable to Object via guess - errors if declaring var in Reference errors if declaring var in Reference - can declare type even if included module has a guessed var can declare type even if included module has a guessed var - infers type from custom array literal infers type from custom array literal - instance variable inherited from multiple parents - with compatible type - accepts module and module, with definitions accepts module and module, with definitions - module and class, with declarations module and class, with declarations - module and class, with declarations (2) module and class, with declarations (2) - module and class, with declarations (3) module and class, with declarations (3) - accepts module and module, with declarations accepts module and module, with declarations - module and class, with definitions module and class, with definitions - with incompatible type - errors module and module, with declarations errors module and module, with declarations - module and class, with declarations module and class, with declarations - module and class, with definitions module and class, with definitions - errors module and module, with definitions errors module and module, with definitions - infers from class method that has type annotation, with overload infers from class method that has type annotation, with overload - doesn't complain in second part of #2575 doesn't complain in second part of #2575 - infers type from as? infers type from as? - errors if finally not initialized in macro def errors if finally not initialized in macro def - infers type from number literal infers type from number literal - errors when redeclaring subclass variable with a different type errors when redeclaring subclass variable with a different type - errors on undefined constant errors on undefined constant - infers type from ||= infers type from ||= - infers type from path that is a type infers type from path that is a type - infers from generic class method that has type annotation infers from generic class method that has type annotation - errors when overriding inherited instance variable with incompatible type errors when overriding inherited instance variable with incompatible type - guesses from new on abstract class guesses from new on abstract class - infers type from ||= inside another assignment infers type from ||= inside another assignment - doesn't infer for subclass if assigns another type (2) doesn't infer for subclass if assigns another type (2) - declares instance var with initial value declares instance var with initial value - declares instance var of generic class declares instance var of generic class - infers type from argument default value infers type from argument default value - cannot guess the type from double-splat argument with not double-splatted type cannot guess the type from double-splat argument with not double-splatted type - declares instance var of generic type, with static array declares instance var of generic type, with static array - uses virtual types in union uses virtual types in union - can type ivar from class inherited by generic class (#5281) can type ivar from class inherited by generic class (#5281) - guesses virtual array type (2) (#5342) guesses virtual array type (2) (#5342) - infers from class method that has type annotation infers from class method that has type annotation - infers type from is_a? infers type from is_a? - doesn't consider instance var as nilable if assigned before self access (#4981) doesn't consider instance var as nilable if assigned before self access (#4981) - infer from class method with multiple statements and return infer from class method with multiple statements and return - infers from generic class method that has type annotation, without instantiating infers from generic class method that has type annotation, without instantiating - guesses from as.(typeof(...)) in generic type guesses from as.(typeof(...)) in generic type - doesn't error if not initializing variables but calling super and previous_def doesn't error if not initializing variables but calling super and previous_def - infers type from lib fun call infers type from lib fun call - infers type from symbol literal infers type from symbol literal - allow usage of instance variable initializer from instance variable initializer allow usage of instance variable initializer from instance variable initializer - infers type from array literal from its literals infers type from array literal from its literals - errors if declaring instance var and turns out to be nilable errors if declaring instance var and turns out to be nilable - gives correct error when trying to use Int as an instance variable type gives correct error when trying to use Int as an instance variable type - infers type for generic class, with assign (2) infers type for generic class, with assign (2) - errors if not initializing super variables (2) errors if not initializing super variables (2) + errors if declaring var in Class errors if declaring var in Class + doesn't error when using generic in generic type because guessed elsewhere doesn't error when using generic in generic type because guessed elsewhere + errors if declaring var in Number errors if declaring var in Number + doesn't infer unbound generic type on generic method called from generic's subclass, metaclass context doesn't infer unbound generic type on generic method called from generic's subclass, metaclass context + declares instance var of generic module declares instance var of generic module doesn't combine union of Number and Number subclass (#5073) doesn't combine union of Number and Number subclass (#5073) - ignores super module initialize (#456) ignores super module initialize (#456) - infers from class method that has type annotation, with multiple overloads matching, all with the same type infers from class method that has type annotation, with multiple overloads matching, all with the same type + declares instance var of generic type, with union declares instance var of generic type, with union doesn't complain if not initialized in one initialize, but has initializer (#2465) doesn't complain if not initialized in one initialize, but has initializer (#2465) - infers type from lib out (2) infers type from lib out (2) + cannot guess the type from splat argument with not splatted type cannot guess the type from splat argument with not splatted type + errors if unknown ivar through macro (#4050) errors if unknown ivar through macro (#4050) + infers type from argument default value infers type from argument default value + guesses virtual hash type (1) (#5342) guesses virtual hash type (1) (#5342) + errors on undefined instance var and subclass calling super errors on undefined instance var and subclass calling super + errors if declaring instance var and turns out to be nilable, in generic type errors if declaring instance var and turns out to be nilable, in generic type + errors if declaring var in NamedTuple(T) errors if declaring var in NamedTuple(T) + looks up return type restriction in defining type, not instantiated type (#11961) looks up return type restriction in defining type, not instantiated type (#11961) + guesses from new on abstract class guesses from new on abstract class + declares with `self` declares with `self` infers type for generic class, with && infers type for generic class, with && - infers type for generic class, with assign (1) infers type for generic class, with assign (1) - declares instance var which appears in initialize declares instance var which appears in initialize - infers type from enum member infers type from enum member - errors if not initializing super variables (3) errors if not initializing super variables (3) - declares instance var of generic type declares instance var of generic type - infers type from string literal infers type from string literal + declares instance var with self, on generic declares instance var with self, on generic + instance variables initializers are used in class variables initialized objects (#3988) instance variables initializers are used in class variables initialized objects (#3988) + infers type from hash literal with literals in generic type infers type from hash literal with literals in generic type + infers type from literal outside def infers type from literal outside def + doesn't infer for subclass if assigns another type (1) doesn't infer for subclass if assigns another type (1) + doesn't error if not initializing variables but calling super in parent parent doesn't error if not initializing variables but calling super in parent parent + doesn't error when using Class but specifying type doesn't error when using Class but specifying type + doesn't error if not initializing variables but calling super doesn't error if not initializing variables but calling super + doesn't error if not calling super but initializing all variables doesn't error if not calling super but initializing all variables + infers from Pointer.malloc with two arguments infers from Pointer.malloc with two arguments + infers type by removing nil from || left side infers type by removing nil from || left side + declares instance var of generic class declares instance var of generic class + errors with macro def but another def doesn't initialize all errors with macro def but another def doesn't initialize all + infers from generic class method that has type annotation infers from generic class method that has type annotation doesn't consider self.initialize as initializer (#3239) doesn't consider self.initialize as initializer (#3239) - declares instance var with initial value, with subclass declares instance var with initial value, with subclass - infers type from string interpolation infers type from string interpolation + gives correct error when trying to use Int as an instance variable type gives correct error when trying to use Int as an instance variable type + can't infer type from initializer can't infer type from initializer + errors if declaring var in Proc(*T, R) errors if declaring var in Proc(*T, R) + infers type from unless infers type from unless + infers type for generic class, with assign (2) infers type for generic class, with assign (2) + errors if declaring var in StaticArray(T, N) errors if declaring var in StaticArray(T, N) infers type from lib out (3) infers type from lib out (3) + declares instance var in module, inherits to type declares instance var in module, inherits to type + infers type to be nilable if self is used in same assign infers type to be nilable if self is used in same assign + declares instance var which appears in initialize declares instance var which appears in initialize + guesses from hash literal with of, with subclass guesses from hash literal with of, with subclass + declares instance var declares instance var + infers from class method that has type annotation infers from class method that has type annotation + infers type for generic class, with T.new and literal infers type for generic class, with T.new and literal + solves instance var initializer in metaclass context (#5876) solves instance var initializer in metaclass context (#5876) + doesn't error if calling initialize from another initialize (2) doesn't error if calling initialize from another initialize (2) + infers type from || infers type from || + doesn't solve instance var initializer in instance context (3) (#5876) doesn't solve instance var initializer in instance context (3) (#5876) + can guess the type from splat argument with splatted type variable can guess the type from splat argument with splatted type variable + doesn't duplicate instance var in subclass doesn't duplicate instance var in subclass + infers type from array literal in generic type infers type from array literal in generic type + infers type from included module, outside def infers type from included module, outside def + infers type from sizeof infers type from sizeof + infer from class method with multiple statements and return infer from class method with multiple statements and return + infers type from path that is a type infers type from path that is a type + guesses virtual array type (1) (#5342) guesses virtual array type (1) (#5342) + doesn't error if not initializing nilable var in subclass doesn't error if not initializing nilable var in subclass + infers type from offsetof infers type from offsetof + allows nil instance var because it's a generic type allows nil instance var because it's a generic type + can guess the type from double-splat argument with double-splatted type can guess the type from double-splat argument with double-splatted type + errors if adds instance variable to Object via guess via included module errors if adds instance variable to Object via guess via included module + infers nilable instance var of generic module infers nilable instance var of generic module + errors if declaring var in Enum errors if declaring var in Enum + guesses inside macro if guesses inside macro if + infers type from custom hash literal infers type from custom hash literal + infers type for generic class, with literal infers type for generic class, with literal + errors if declaring var in Pointer(T) errors if declaring var in Pointer(T) + doesn't infer for subclass if assigns another type (2) doesn't infer for subclass if assigns another type (2) + infers type for generic class, with lib call infers type for generic class, with lib call + errors if declaring instance var and turns out to be nilable errors if declaring instance var and turns out to be nilable + infers type from custom hash literal in generic infers type from custom hash literal in generic + doesn't solve instance var initializer in instance context (1) (#5876) doesn't solve instance var initializer in instance context (1) (#5876) + doesn't error if not initializing variables but calling super for module doesn't error if not initializing variables but calling super for module + infers type from hash literal in generic type infers type from hash literal in generic type + infers type from argument restriction infers type from argument restriction + doesn't infer unbound generic type on generic method called from generic's subclass doesn't infer unbound generic type on generic method called from generic's subclass + infers from method in generic type, with type annotation infers from method in generic type, with type annotation + declares instance var of generic type, with tuple declares instance var of generic type, with tuple infers from Pointer.malloc in generic type infers from Pointer.malloc in generic type + infers type from path that is a constant infers type from path that is a constant + infers from generic class method that has type annotation, without instantiating infers from generic class method that has type annotation, without instantiating declares instance var multiple times, last one wins declares instance var multiple times, last one wins - doesn't infer unbound generic type on generic method called from generic's subclass, metaclass context doesn't infer unbound generic type on generic method called from generic's subclass, metaclass context - infers type from self as virtual type (#2575) infers type from self as virtual type (#2575) - declares instance var of generic type through module declares instance var of generic type through module - errors if unknown ivar through macro (#4050) errors if unknown ivar through macro (#4050) - doesn't error when using Class but specifying type doesn't error when using Class but specifying type - errors on undefined instance var and subclass calling super errors on undefined instance var and subclass calling super - obeys super module initialize (#456) obeys super module initialize (#456) - is more permissive with macro def initialize, other initialize is more permissive with macro def initialize, other initialize - doesn't error if not initializing nilable var in subclass doesn't error if not initializing nilable var in subclass - infers type from uninitialized infers type from uninitialized - declares instance var of generic module (2) declares instance var of generic module (2) - can guess the type from splat argument with splatted type can guess the type from splat argument with splatted type - doesn't crash on missing var on subclass, with superclass not specifying a type doesn't crash on missing var on subclass, with superclass not specifying a type - infers type from hash literal with of infers type from hash literal with of - doesn't error if inheriting generic instance (#3635) doesn't error if inheriting generic instance (#3635) - errors when assigning instance variable at top level control block errors when assigning instance variable at top level control block - errors if declaring instance var and turns out to be nilable, in generic module type in generic type errors if declaring instance var and turns out to be nilable, in generic module type in generic type - infers from Pointer.malloc with two arguments in generic type infers from Pointer.malloc with two arguments in generic type - errors if declaring var in Object errors if declaring var in Object - infers from class method that has number literal infers from class method that has number literal + declares instance var of generic type, with virtual metaclass declares instance var of generic type, with virtual metaclass + infers type from is_a? infers type from is_a? infers from class method that invokes new infers from class method that invokes new - declares instance var in module, inherits to type declares instance var in module, inherits to type - infers type from custom generic hash literal infers type from custom generic hash literal - doesn't crash on recursive method call doesn't crash on recursive method call - errors if declaring var in Class errors if declaring var in Class + infers type from string literal infers type from string literal + doesn't crash on missing var on subclass, with superclass not specifying a type doesn't crash on missing var on subclass, with superclass not specifying a type + errors if not initialized in all initialize errors if not initialized in all initialize + declares instance var of generic type, with no type parameter declares instance var of generic type, with no type parameter + says can't infer type if only nil was assigned says can't infer type if only nil was assigned errors if declaring variable with number errors if declaring variable with number - infers type for generic module infers type for generic module - says undefined instance variable on assign says undefined instance variable on assign - infers from Pointer.malloc with two arguments infers from Pointer.malloc with two arguments - errors if can't find lib call, before erroring on instance var (#2579) errors if can't find lib call, before erroring on instance var (#2579) - infers type from included module recursively infers type from included module recursively + infers type from string interpolation infers type from string interpolation + doesn't infer from class method with multiple statements and return, on non-easy return doesn't infer from class method with multiple statements and return, on non-easy return + ignores super module initialize (#456) ignores super module initialize (#456) + infers type from assign (1) infers type from assign (1) + doesn't error if calling initialize from another initialize (1) doesn't error if calling initialize from another initialize (1) + declares instance var of generic type, with static array declares instance var of generic type, with static array + infers type from self as virtual type (#2575) infers type from self as virtual type (#2575) + errors when assigning instance variable at top level block errors when assigning instance variable at top level block + infers nilable instance var of generic type infers nilable instance var of generic type + declares instance var of generic type, with splat declares instance var of generic type, with splat + declares instance var of generic type, with splat inside Proc declares instance var of generic type, with splat inside Proc + can guess the type from double-splat argument with double-splatted type variable can guess the type from double-splat argument with double-splatted type variable + declares instance var of generic type subclass declares instance var of generic type subclass + doesn't error if not initializing variables but calling previous_def (#3210) doesn't error if not initializing variables but calling previous_def (#3210) + infers type from lib fun call infers type from lib fun call + infers type from enum member infers type from enum member + says undefined instance variable on read says undefined instance variable on read + infers type from ||= inside another assignment infers type from ||= inside another assignment + declares instance var of generic type, with generic type declares instance var of generic type, with generic type + infers type from new expression infers type from new expression + infers type to be non-nilable if initialized in all initialize infers type to be non-nilable if initialized in all initialize + errors when redeclaring subclass variable with a different type errors when redeclaring subclass variable with a different type + is more permissive with macro def initialize is more permissive with macro def initialize + uses virtual types in union uses virtual types in union + uses virtual types in self uses virtual types in self + doesn't error if not initializes in all initialize because declared as nilable doesn't error if not initializes in all initialize because declared as nilable + can't infer type of generic method that returns self (#5383) can't infer type of generic method that returns self (#5383) infers type from range literal infers type from range literal - uses T.new (#4291) uses T.new (#4291) + errors if declaring var in Union(*T) errors if declaring var in Union(*T) + infers type from all call matches infers type from all call matches + doesn't error if not initializing variables but calling super for generic module doesn't error if not initializing variables but calling super for generic module + accepts overriding inherited instance variable with compatible type accepts overriding inherited instance variable with compatible type + errors if declaring var in Object errors if declaring var in Object + doesn't error if initializing var in superclass, and then empty initialize doesn't error if initializing var in superclass, and then empty initialize + errors if declaring var in Tuple(*T) errors if declaring var in Tuple(*T) + infers from Pointer.null infers from Pointer.null + errors if can't find lib call, before erroring on instance var (#2579) errors if can't find lib call, before erroring on instance var (#2579) + allow usage of instance variable initializer from instance variable initializer allow usage of instance variable initializer from instance variable initializer + can't infer type when using operation on const (#4054) can't infer type when using operation on const (#4054) + infers type from if infers type from if + infers type from argument with restriction, in generic infers type from argument with restriction, in generic infers type from proc literal with return type infers type from proc literal with return type - declares as named tuple declares as named tuple - uses virtual types in self uses virtual types in self - infer from class method where new is redefined infer from class method where new is redefined - doesn't find T in generic type that's not the current type (#4460) doesn't find T in generic type that's not the current type (#4460) - infers type from included module infers type from included module - infers type from offsetof infers type from offsetof - infers type from redefined method if calls previous_def infers type from redefined method if calls previous_def - declares instance var of generic module from non-generic module declares instance var of generic module from non-generic module - doesn't solve instance var initializer in instance context (3) (#5876) doesn't solve instance var initializer in instance context (3) (#5876) - errors if declaring instance var and turns out to be nilable, in generic type errors if declaring instance var and turns out to be nilable, in generic type - infers from restriction using virtual type infers from restriction using virtual type - errors if declaring instance var and turns out to be nilable, in generic module type errors if declaring instance var and turns out to be nilable, in generic module type - infers type from argument restriction infers type from argument restriction - infers type from regex literal infers type from regex literal infers from another instance var in generic type infers from another instance var in generic type - errors when assigning instance variable inside nested expression errors when assigning instance variable inside nested expression - can't infer type when using operation on const (#4054) can't infer type when using operation on const (#4054) - errors if declaring var in NamedTuple(T) errors if declaring var in NamedTuple(T) - declares instance var with union type with a virtual member declares instance var with union type with a virtual member - transfers initializer from generic module to class transfers initializer from generic module to class - infers from class method that refers to constant infers from class method that refers to constant - infers type from self (#2575) infers type from self (#2575) - guesses from hash literal with of, with subclass guesses from hash literal with of, with subclass - errors if declaring var in Pointer(T) errors if declaring var in Pointer(T) - infers type from sizeof infers type from sizeof + cannot guess type from argument assigned in body cannot guess type from argument assigned in body + errors on undefined constant errors on undefined constant + doesn't error if not initialized in macro def but outside it doesn't error if not initialized in macro def but outside it + can guess the type from splat argument with splatted type can guess the type from splat argument with splatted type + infers type from literal outside def with initialize and type restriction infers type from literal outside def with initialize and type restriction + infers from new with return type in generic type infers from new with return type in generic type + infers from Pointer.malloc with two arguments in generic type infers from Pointer.malloc with two arguments in generic type + doesn't error if declaring instance var and doesn't out to be nilable, in generic module type doesn't error if declaring instance var and doesn't out to be nilable, in generic module type + can declare type even if included module has a guessed var can declare type even if included module has a guessed var + infers from class method that has type annotation, in generic class infers from class method that has type annotation, in generic class + infers type to be nilable if not initialized infers type to be nilable if not initialized + guesses from as.(typeof(...)) in generic type guesses from as.(typeof(...)) in generic type looks up self restriction in instantiated type, not defined type looks up self restriction in instantiated type, not defined type - says undefined instance variable on read says undefined instance variable on read - infers type from bool literal infers type from bool literal - guesses virtual array type (1) (#5342) guesses virtual array type (1) (#5342) - infers type from char literal infers type from char literal - declares instance var of generic type, with splat inside Proc declares instance var of generic type, with splat inside Proc - declares instance var of generic type, with splat inside Tuple declares instance var of generic type, with splat inside Tuple - infers type from responds_to? infers type from responds_to? - infers type from tuple literal infers type from tuple literal - guesses inside macro for guesses inside macro for - infers type from literal outside def infers type from literal outside def - infers type from unless infers type from unless - declares with `self` declares with `self` - is more permissive with macro def initialize, bug with named args is more permissive with macro def initialize, bug with named args - declares instance var of generic type, with union declares instance var of generic type, with union - doesn't infer type to be nilable if using self.class in call in assign doesn't infer type to be nilable if using self.class in call in assign - infers type from block argument without restriction infers type from block argument without restriction + infers type from case infers type from case + guesses from splat (#3149) guesses from splat (#3149) + infers from method on integer literal, with type annotation infers from method on integer literal, with type annotation + doesn't error if inheriting generic instance (#3635) doesn't error if inheriting generic instance (#3635) + infers type from uninitialized infers type from uninitialized + says undefined instance variable on assign says undefined instance variable on assign + errors when assigning instance variable at top level control block errors when assigning instance variable at top level control block + doesn't find T in generic type that's not the current type (#4460) doesn't find T in generic type that's not the current type (#4460) + doesn't infer type from redefined method doesn't infer type from redefined method + instance variable inherited from multiple parents + with incompatible type + module and class, with definitions module and class, with definitions + errors module and module, with definitions errors module and module, with definitions + errors module and module, with declarations errors module and module, with declarations + module and class, with declarations module and class, with declarations + with compatible type + module and class, with definitions module and class, with definitions + accepts module and module, with declarations accepts module and module, with declarations + module and class, with declarations (3) module and class, with declarations (3) + module and class, with declarations (2) module and class, with declarations (2) + accepts module and module, with definitions accepts module and module, with definitions + module and class, with declarations module and class, with declarations + doesn't error if not initializing variables but calling super and previous_def doesn't error if not initializing variables but calling super and previous_def + can't infer type from initializer in generic class type can't infer type from initializer in generic class type + infers type from custom array literal in generic infers type from custom array literal in generic + ignores redefined initialize (#456) ignores redefined initialize (#456) + infers type from instance_sizeof infers type from instance_sizeof + infers from another instance var in generic type with type declaration infers from another instance var in generic type with type declaration + infers type from array literal with of metaclass infers type from array literal with of metaclass + infers type from array literal with of infers type from array literal with of + infers from assign to local var (#2467) infers from assign to local var (#2467) + infers in multiple assign for tuple type (1) infers in multiple assign for tuple type (1) declares instance var of generic type, with proc declares instance var of generic type, with proc - doesn't consider var as nilable if conditionally assigned inside initialize, but has initializer (#3669) doesn't consider var as nilable if conditionally assigned inside initialize, but has initializer (#3669) + considers var as assigned in multi-assign considers var as assigned in multi-assign + shouldn't error when accessing instance var in initialized that's always initialized (#2953) shouldn't error when accessing instance var in initialized that's always initialized (#2953) + infers from Pointer.null in generic type infers from Pointer.null in generic type + infers type from included module infers type from included module transfers initializer from module to generic class transfers initializer from module to generic class - infers type from || infers type from || - doesn't complain if declared type is recursive alias that's nilable doesn't complain if declared type is recursive alias that's nilable - guesses from splat (#3149) guesses from splat (#3149) - infers type from block argument infers type from block argument - errors if declaring var in Tuple(*T) errors if declaring var in Tuple(*T) -Codegen: const - declaring var declaring var declaring var declaring var declaring var declaring var declaring var declaring var declaring var declaring var - codegens two consts with same variable name codegens two consts with same variable name codegens two consts with same variable name codegens two consts with same variable name codegens two consts with same variable name codegens two consts with same variable name codegens two consts with same variable name codegens two consts with same variable name codegens two consts with same variable name codegens two consts with same variable name - initializes simple const via another const initializes simple const via another const - synchronizes initialization of constants synchronizes initialization of constants synchronizes initialization of constants synchronizes initialization of constants synchronizes initialization of constants synchronizes initialization of constants synchronizes initialization of constants synchronizes initialization of constants synchronizes initialization of constants synchronizes initialization of constants - codegens constant that refers to another constant that is a struct codegens constant that refers to another constant that is a struct codegens constant that refers to another constant that is a struct codegens constant that refers to another constant that is a struct codegens constant that refers to another constant that is a struct codegens constant that refers to another constant that is a struct codegens constant that refers to another constant that is a struct codegens constant that refers to another constant that is a struct codegens constant that refers to another constant that is a struct codegens constant that refers to another constant that is a struct - inlines const with math inlines const with math - define a constant define a constant - uses correct types lookup uses correct types lookup uses correct types lookup uses correct types lookup uses correct types lookup uses correct types lookup uses correct types lookup uses correct types lookup uses correct types lookup uses correct types lookup - initializes simple const initializes simple const - support nested constant support nested constant - allows constants with same name allows constants with same name - allows implicit self in constant, called from another class (bug) allows implicit self in constant, called from another class (bug) allows implicit self in constant, called from another class (bug) allows implicit self in constant, called from another class (bug) allows implicit self in constant, called from another class (bug) allows implicit self in constant, called from another class (bug) allows implicit self in constant, called from another class (bug) allows implicit self in constant, called from another class (bug) allows implicit self in constant, called from another class (bug) allows implicit self in constant, called from another class (bug) - works with variable declared inside if works with variable declared inside if works with variable declared inside if works with variable declared inside if works with variable declared inside if works with variable declared inside if works with variable declared inside if works with variable declared inside if works with variable declared inside if works with variable declared inside if - gets pointerof constant inside class gets pointerof constant inside class gets pointerof constant inside class gets pointerof constant inside class gets pointerof constant inside class gets pointerof constant inside class gets pointerof constant inside class gets pointerof constant inside class gets pointerof constant inside class gets pointerof constant inside class - uses const before declaring it in another module uses const before declaring it in another module uses const before declaring it in another module uses const before declaring it in another module uses const before declaring it in another module uses const before declaring it in another module uses const before declaring it in another module uses const before declaring it in another module uses const before declaring it in another module uses const before declaring it in another module - gets pointerof complex constant gets pointerof complex constant gets pointerof complex constant gets pointerof complex constant gets pointerof complex constant gets pointerof complex constant gets pointerof complex constant gets pointerof complex constant gets pointerof complex constant gets pointerof complex constant - gets pointerof constant gets pointerof constant gets pointerof constant gets pointerof constant gets pointerof constant gets pointerof constant gets pointerof constant gets pointerof constant gets pointerof constant gets pointerof constant - uses const before declaring it (hoisting) uses const before declaring it (hoisting) uses const before declaring it (hoisting) uses const before declaring it (hoisting) uses const before declaring it (hoisting) uses const before declaring it (hoisting) uses const before declaring it (hoisting) uses const before declaring it (hoisting) uses const before declaring it (hoisting) uses const before declaring it (hoisting) - finds global constant finds global constant - constants with expression constants with expression - codegens constant that is declared later because of virtual dispatch codegens constant that is declared later because of virtual dispatch - supports closured vars inside initializers (#10474) supports closured vars inside initializers (#10474) - codegens variable assignment in const codegens variable assignment in const codegens variable assignment in const codegens variable assignment in const codegens variable assignment in const codegens variable assignment in const codegens variable assignment in const codegens variable assignment in const codegens variable assignment in const codegens variable assignment in const - invokes block in const invokes block in const invokes block in const invokes block in const invokes block in const invokes block in const invokes block in const invokes block in const invokes block in const invokes block in const - inlines char const inlines char const - inlines enum value inlines enum value - finds nearest constant first finds nearest constant first - support constant inside a def support constant inside a def - doesn't crash if constant is used, but class is never instantiated (#1106) doesn't crash if constant is used, but class is never instantiated (#1106) - supports storing function returning nil supports storing function returning nil - inlines const referencing another const inlines const referencing another const - inlines bool const inlines bool const - initialize const that might raise an exception initialize const that might raise an exception initialize const that might raise an exception initialize const that might raise an exception initialize const that might raise an exception initialize const that might raise an exception initialize const that might raise an exception initialize const that might raise an exception initialize const that might raise an exception initialize const that might raise an exception - declare constants in right order declare constants in right order declare constants in right order declare constants in right order declare constants in right order declare constants in right order declare constants in right order declare constants in right order declare constants in right order declare constants in right order - inlines simple const inlines simple const - define a constant in lib define a constant in lib - initializes ARGC_UNSAFE initializes ARGC_UNSAFE - runs const side effects (#8862) runs const side effects (#8862) runs const side effects (#8862) runs const side effects (#8862) runs const side effects (#8862) runs const side effects (#8862) runs const side effects (#8862) runs const side effects (#8862) runs const side effects (#8862) runs const side effects (#8862) -Code gen: magic constants - does __FILE__ does __FILE__ - does __LINE__ does __LINE__ - does __END_LINE__ in macro with block does __END_LINE__ in macro with block - does __END_LINE__ without block does __END_LINE__ without block - does __LINE__ in macro does __LINE__ in macro - does __FILE__ in macro does __FILE__ in macro - does __DIR__ in macro does __DIR__ in macro - does __DIR__ does __DIR__ - does __LINE__ when specifying one middle argument does __LINE__ when specifying one middle argument - does __LINE__ when specifying one normal default arg does __LINE__ when specifying one normal default arg - does __LINE__ when specifying one default arg with __FILE__ does __LINE__ when specifying one default arg with __FILE__ - does __LINE__ with dispatch does __LINE__ with dispatch - does __END_LINE__ with block does __END_LINE__ with block - does __END_LINE__ in macro without block does __END_LINE__ in macro without block -View#module_name - namespace is divided by hyphen namespace is divided by hyphen - hyphen followed by non-ascii letter is replaced by its character hyphen followed by non-ascii letter is replaced by its character - underscore is ignored underscore is ignored -Code gen: return - return from function with nilable type 2 return from function with nilable type 2 - returns empty from function returns empty from function - return from function with union type return from function with union type - doesn't crash when method returns nil and can be inlined doesn't crash when method returns nil and can be inlined - codegens assign with if with two returns codegens assign with if with two returns - codegens return codegens return - codegens bug with return if true codegens bug with return if true - codegens return inside if codegens return inside if - return union return union - codegens return followed by another expression codegens return followed by another expression - return from function with nilable type return from function with nilable type - forms a tuple from multiple return values forms a tuple from multiple return values - returns in var assignment (#3364) returns in var assignment (#3364) - flattens splats inside multiple return values flattens splats inside multiple return values -Semantic: ssa - types a var that is declared in a while types a var that is declared in a while - types block with next types block with next - types a var inside an if without previous definition types a var inside an if without previous definition - types a var after begin ensure as having last type types a var after begin ensure as having last type - preserves type filters after block (bug) preserves type filters after block (bug) - types while with next types while with next - types a var that is re-assigned in a block types a var that is re-assigned in a block - types if with restricted type in else types if with restricted type in else - doesn't change type to nilable inside if doesn't change type to nilable inside if - types a var inside an if without change in then types a var inside an if without change in then - types a var that is re-assigned in a while condition types a var that is re-assigned in a while condition - types if with return in then with assign types if with return in then with assign - types a var that is re-assigned in a while in next and used in condition types a var that is re-assigned in a while in next and used in condition - types a var inside an if without definition in else types a var inside an if without definition in else - types block with break types block with break - types a var with an if but without change types a var with an if but without change - types block with break doesn't infect initial vars types block with break doesn't infect initial vars - types if with restricted type in then types if with restricted type in then - types a var that is declared in a while condition types a var that is declared in a while condition - types a var that is declared in a while condition with break after re-assignment types a var that is declared in a while condition with break after re-assignment - types a var that is declared in a while condition with break before re-assignment types a var that is declared in a while condition with break before re-assignment - doesn't error if same variable is used in multiple arguments of same typeof doesn't error if same variable is used in multiple arguments of same typeof - types if/else with var (bug) types if/else with var (bug) - types if with return in then types if with return in then - types if with return in else types if with return in else - types re-assign inside while (bug) types re-assign inside while (bug) - types a var inside an if with previous definition types a var inside an if with previous definition - types re-assign inside if (bug) types re-assign inside if (bug) - types a var after begin ensure as having last type (2) types a var after begin ensure as having last type (2) - errors if accessing variable declared inside typeof errors if accessing variable declared inside typeof - types a var that is re-assigned in a while and used in condition types a var that is re-assigned in a while and used in condition - doesn't error if same variable is declared in multiple typeofs doesn't error if same variable is declared in multiple typeofs - types a var inside an if without definition in then types a var inside an if without definition in then - types a var inside an if without change in else types a var inside an if without change in else - types if with break in then types if with break in then - types if with unreachable in then types if with unreachable in then - types if with return in both branches types if with return in both branches - types a var that is declared in a while with out types a var that is declared in a while with out - types while with break with new var types while with break with new var - types if with next in then types if with next in then - types if with return in else with assign types if with return in else with assign - types while with break types while with break - types a var that is re-assigned in a while types a var that is re-assigned in a while - types a var with an if with nested if types a var with an if with nested if - types a redefined variable types a redefined variable - types while with break doesn't infect initial vars types while with break doesn't infect initial vars -Semantic: NoReturn - types with no return even if code follows types with no return even if code follows - computes NoReturn in a lazy way inside if then (#314) (5) computes NoReturn in a lazy way inside if then (#314) (5) - types union of NoReturn and something else types union of NoReturn and something else - computes NoReturn in a lazy way inside if else (#314) (1) computes NoReturn in a lazy way inside if else (#314) (1) - computes NoReturn in a lazy way inside if else (#314) (2) computes NoReturn in a lazy way inside if else (#314) (2) - computes NoReturn in a lazy way inside if then (#314) (1) computes NoReturn in a lazy way inside if then (#314) (1) - computes NoReturn in a lazy way inside if then (#314) (3) computes NoReturn in a lazy way inside if then (#314) (3) - computes NoReturn in a lazy way inside if then (#314) (2) computes NoReturn in a lazy way inside if then (#314) (2) - types union of NoReturns types union of NoReturns - types call to LibC.exit as NoReturn types call to LibC.exit as NoReturn - computes NoReturn in a lazy way inside if else (#314) (5) computes NoReturn in a lazy way inside if else (#314) (5) - types as NoReturn if typeof(exp)'s exp is NoReturn types as NoReturn if typeof(exp)'s exp is NoReturn - assumes if condition's type filters when else is no return assumes if condition's type filters when else is no return - types exception handler as NoReturn if ensure is NoReturn types exception handler as NoReturn if ensure is NoReturn - types raise as NoReturn types raise as NoReturn - computes NoReturn in a lazy way inside if then (#314) (4) computes NoReturn in a lazy way inside if then (#314) (4) - computes NoReturn in a lazy way inside if else (#314) (3) computes NoReturn in a lazy way inside if else (#314) (3) - types as NoReturn even if Nil return type is forced (#3096) types as NoReturn even if Nil return type is forced (#3096) - computes NoReturn in a lazy way inside if else (#314) (4) computes NoReturn in a lazy way inside if else (#314) (4) -.validate_name - dashes dashes - length length - invalid character invalid character - empty empty - underscores underscores - uppercase uppercase - digits digits -Code gen: primitives - allows @[Primitive] on method that has body allows @[Primitive] on method that has body - can invoke binary on primitive typedef (#614) can invoke binary on primitive typedef (#614) - codegens crystal_type_id for class codegens crystal_type_id for class - codegens bool codegens bool - codegens int128 codegens int128 codegens int128 codegens int128 codegens int128 codegens int128 codegens int128 codegens int128 codegens int128 codegens int128 - allows redefining a primitive method allows redefining a primitive method - atomicrmw - codegens atomicrmw with enums codegens atomicrmw with enums - codegens atomicrmw with enums codegens atomicrmw with enums - codegens atomicrmw with symbols codegens atomicrmw with symbols - codegens f32 codegens f32 - doesn't treat `(1 == 1) == true` as `1 == 1 == true` (#328) doesn't treat `(1 == 1) == true` as `1 == 1 == true` (#328) - codegens crystal_type_id with union type codegens crystal_type_id with union type - sums two numbers out of an [] of Number sums two numbers out of an [] of Number - codegens char ord codegens char ord - va_arg - works with C code works with C code works with C code works with C code works with C code works with C code works with C code works with C code works with C code works with C code - uses llvm's va_arg instruction uses llvm's va_arg instruction - codegens string codegens string - allows @[Primitive] on fun declarations allows @[Primitive] on fun declarations - can invoke cast on primitive typedef (#614) can invoke cast on primitive typedef (#614) - gets crystal class instance type id gets crystal class instance type id - codegens f64 codegens f64 - defined method that calls primitive (bug) defined method that calls primitive (bug) - codegens __LINE__ codegens __LINE__ - doesn't optimize away call whose obj is not passed as self (#2226) doesn't optimize away call whose obj is not passed as self (#2226) - codegens pointer of int codegens pointer of int - codegens long codegens long - codegens int codegens int - uses built-in llvm function that returns a tuple uses built-in llvm function that returns a tuple - codegens uint128 codegens uint128 codegens uint128 codegens uint128 codegens uint128 codegens uint128 codegens uint128 codegens uint128 codegens uint128 codegens uint128 - codegens char codegens char - passes issue #328 passes issue #328 - arithmetic primitives - skips bounds checking when to_i produces same type skips bounds checking when to_i produces same type - codegens 1 - 2 codegens 1 - 2 codegens 1 - 2 codegens 1 - 2 codegens 1 - 2 codegens 1 - 2 codegens 1 - 2 codegens 1 - 2 codegens 1 - 2 codegens 1 - 2 - codegens 1.to_i16 codegens 1.to_i16 codegens 1.to_i16 codegens 1.to_i16 codegens 1.to_i16 codegens 1.to_i16 codegens 1.to_i16 codegens 1.to_i16 codegens 1.to_i16 codegens 1.to_i16 - codegens 2 * 3 codegens 2 * 3 codegens 2 * 3 codegens 2 * 3 codegens 2 * 3 codegens 2 * 3 codegens 2 * 3 codegens 2 * 3 codegens 2 * 3 codegens 2 * 3 - codegens 1 &+ 2 codegens 1 &+ 2 - codegens 1.to_i16! codegens 1.to_i16! - codegens 1 &- 2 codegens 1 &- 2 - codegens 16.unsafe_shl 2 codegens 16.unsafe_shl 2 - codegens 1.to_f codegens 1.to_f codegens 1.to_f codegens 1.to_f codegens 1.to_f codegens 1.to_f codegens 1.to_f codegens 1.to_f codegens 1.to_f codegens 1.to_f - codegens 8.unsafe_mod 3 codegens 8.unsafe_mod 3 - codegens 1 + 2 codegens 1 + 2 codegens 1 + 2 codegens 1 + 2 codegens 1 + 2 codegens 1 + 2 codegens 1 + 2 codegens 1 + 2 codegens 1 + 2 codegens 1 + 2 - codegens 1.to_f! codegens 1.to_f! - codegens 2 &* 3 codegens 2 &* 3 - codegens 16.unsafe_shr 2 codegens 16.unsafe_shr 2 - codegens 8.unsafe_div 3 codegens 8.unsafe_div 3 -Normalize: array literal - normalizes non-empty without of normalizes non-empty without of - normalizes non-empty with of, with splat normalizes non-empty with of, with splat - hoists complex element expressions, array-like hoists complex element expressions, array-like - normalizes non-empty with of normalizes non-empty with of - hoists complex element expressions, array-like generic hoists complex element expressions, array-like generic - normalizes non-empty without of, with splat only normalizes non-empty without of, with splat only - normalizes empty with of normalizes empty with of - normalizes non-empty without of, with splat normalizes non-empty without of, with splat - hoists complex element expressions hoists complex element expressions - hoists complex element expressions, with splat hoists complex element expressions, with splat -Code gen: def - uses dispatch call type for phi (#3529) uses dispatch call type for phi (#3529) - uses previous argument in default value (#1062) uses previous argument in default value (#1062) - codegens bug #119 codegens bug #119 codegens bug #119 codegens bug #119 codegens bug #119 codegens bug #119 codegens bug #119 codegens bug #119 codegens bug #119 codegens bug #119 - codegens recursive type with union codegens recursive type with union - codegens call without args codegens call without args - use target def type as return type use target def type as return type use target def type as return type use target def type as return type use target def type as return type use target def type as return type use target def type as return type use target def type as return type use target def type as return type use target def type as return type - allows to change argument values allows to change argument values - codegens with interesting default argument codegens with interesting default argument - codegens return nil when nilable type (2) codegens return nil when nilable type (2) - codegens def which changes type of arg codegens def which changes type of arg - codegens dispatch with single def when discarding unallocated ones (2) codegens dispatch with single def when discarding unallocated ones (2) - looks up matches in super classes and merges them with subclasses looks up matches in super classes and merges them with subclasses - dispatches on virtual type implementing generic module (related to bug #165) dispatches on virtual type implementing generic module (related to bug #165) - codegens union to union assignment of mutable arg (#3691) codegens union to union assignment of mutable arg (#3691) - uses var after external uses var after external - codegens return nil when nilable type (1) codegens return nil when nilable type (1) - fixes #230: include original owner in mangled def fixes #230: include original owner in mangled def - call external function 'putchar' call external function 'putchar' - codegens recursive nasty code codegens recursive nasty code - codegens yield with destructing tuple having unreachable element codegens yield with destructing tuple having unreachable element - codegens empty def codegens empty def - builds infinite recursive function builds infinite recursive function - codegens with and without many default arguments codegens with and without many default arguments - codegens dispatch with nilable reference union type codegens dispatch with nilable reference union type - codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation�� codegens and doesn't break if obj is int and there's a mutation�� codegens and doesn't break if obj is int and there's a mutation�������� codegens and doesn't break if obj is int and there's a mutation�� codegens and doesn't break if obj is int and there's a mutation�� codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation - doesn't crash on private def as last expression doesn't crash on private def as last expression - unifies all calls to same def unifies all calls to same def unifies all calls to same def unifies all calls to same def unifies all calls to same def unifies all calls to same def�������� unifies all calls to same def������ unifies all calls to same def�� unifies all calls to same def unifies all calls to same def - uses self uses self - codegens dispatch on static method codegens dispatch on static method - call functions defined in any order call functions defined in any order - runs empty def runs empty def - codegens dispatch with single def when discarding unallocated ones (1) codegens dispatch with single def when discarding unallocated ones (1) - codegens dispatch without obj, bug 1 codegens dispatch without obj, bug 1 - puts union before single type in matches preferences puts union before single type in matches preferences - codegens call with args codegens call with args - codegens with and without default arguments codegens with and without default arguments - can match N type argument of static array (#1203) can match N type argument of static array (#1203) - codegens with related types codegens with related types - codegens dispatch without obj, bug 1 codegens dispatch without obj, bug 1 -Crystal::Repl::Interpreter - closures - does closure inside block does closure inside block - does closure without args that captures and modifies two local variables does closure without args that captures and modifies two local variables - does closure inside def does closure inside def - sets ivar of self closured struct (#12341) sets ivar of self closured struct (#12341) - does closure without args that captures and modifies one local variable does closure without args that captures and modifies one local variable - closures self in proc literal closures self in proc literal - closures self in proc literal (implicit self) closures self in proc literal (implicit self) - does nested closure inside proc does nested closure inside proc - closures block args after 8 bytes (the closure var) closures block args after 8 bytes (the closure var) - doesn't mix local vars with closured vars doesn't mix local vars with closured vars - does nested closure inside methods and blocks does nested closure inside methods and blocks - closures self and modifies instance var closures self and modifies instance var - passes closured struct instance var as self passes closured struct instance var as self - does closure inside proc does closure inside proc - does closure inside const does closure inside const - does next inside captured block (#12226) does next inside captured block (#12226) - does closure with pointerof local var does closure with pointerof local var - closures def arguments closures def arguments - does closure inside block, capture block arg does closure inside block, capture block arg - closures closured block arg closures closured block arg - does nested closure inside captured blocks does nested closure inside captured blocks - does closure inside proc, capture proc argument does closure inside proc, capture proc argument - does closure with two args that captures and modifies two local variables does closure with two args that captures and modifies two local variables - reads self closured struct (#12341) reads self closured struct (#12341) - closures struct and calls method on it closures struct and calls method on it - does closure inside class variable initializer does closure inside class variable initializer - does closure and accesses it inside block does closure and accesses it inside block - gets ivar of self closured struct (#12341) gets ivar of self closured struct (#12341) -Crystal::Repl::Interpreter - local variables - interprets variable set and get interprets variable set and get - doesn't declare variable with no type doesn't declare variable with no type - interprets uninitialized interprets uninitialized - assigns to underscore assigns to underscore - interprets variable set and get, second local var interprets variable set and get, second local var - interprets at the class level interprets at the class level - interprets variable set and get with operations interprets variable set and get with operations - doesn't discard underscore right hand side doesn't discard underscore right hand side - interprets variable set with type restriction (#13023) interprets variable set with type restriction (#13023) - interprets variable set interprets variable set - interprets local variable declaration (#12229) interprets local variable declaration (#12229) - doesn't declare variable with no type inside method doesn't declare variable with no type inside method - conversion - interprets Float64#to_f32! (negative) interprets Float64#to_f32! (negative) - interprets Int64::MAX#to_i64! interprets Int64::MAX#to_i64! - interprets Float32#to_i8! (positive) interprets Float32#to_i8! (positive) - interprets UInt64::MAX#to_u64! interprets UInt64::MAX#to_u64! - interprets Int16::MIN#to_i16! interprets Int16::MIN#to_i16! - interprets Int16::MIN#to_u16! interprets Int16::MIN#to_u16! - interprets Int32::MAX#to_i32! interprets Int32::MAX#to_i32! - interprets Int16::MIN#to_u64! interprets Int16::MIN#to_u64! - interprets Float32#to_f32! (positive) interprets Float32#to_f32! (positive) - interprets UInt64::MAX#to_f64! interprets UInt64::MAX#to_f64! - discards conversion discards conversion - interprets Float64#to_i! (negative) interprets Float64#to_i! (negative) - interprets UInt8::MAX#to_f64! interprets UInt8::MAX#to_f64! - interprets UInt32::MAX#to_f64! interprets UInt32::MAX#to_f64! - interprets Int64::MIN#to_f32! interprets Int64::MIN#to_f32! - interprets Float32#to_i16! (positive) interprets Float32#to_i16! (positive) - interprets Int64::MAX#to_i16! interprets Int64::MAX#to_i16! - interprets Int8::MIN#to_f64! interprets Int8::MIN#to_f64! - interprets Int8::MAX#to_u16! interprets Int8::MAX#to_u16! - interprets UInt16::MAX#to_u! interprets UInt16::MAX#to_u! - interprets Int8::MAX#to_u32! interprets Int8::MAX#to_u32! - interprets Int8::MAX#to_i64! interprets Int8::MAX#to_i64! - interprets UInt8::MAX#to_i8! interprets UInt8::MAX#to_i8! - interprets Int16::MAX#to_u! interprets Int16::MAX#to_u! - interprets Int16::MAX#to_u16! interprets Int16::MAX#to_u16! - interprets UInt8::MAX#to_u16! interprets UInt8::MAX#to_u16! - interprets Int32::MIN#to_i8! interprets Int32::MIN#to_i8! - interprets Float64#to_i32! (positive) interprets Float64#to_i32! (positive) - interprets UInt16::MAX#to_i! interprets UInt16::MAX#to_i! - interprets UInt16::MAX#to_u32! interprets UInt16::MAX#to_u32! - interprets UInt16::MAX#to_u64! interprets UInt16::MAX#to_u64! - interprets Int32::MIN#to_u8! interprets Int32::MIN#to_u8! - interprets Int32::MIN#to_f64! interprets Int32::MIN#to_f64! - interprets Float64#to_f64! (negative) interprets Float64#to_f64! (negative) - interprets Int8::MAX#to_u8! interprets Int8::MAX#to_u8! - interprets UInt8::MAX#to_u32! interprets UInt8::MAX#to_u32! - interprets UInt8::MAX#to_i! interprets UInt8::MAX#to_i! - interprets UInt32::MAX#to_u! interprets UInt32::MAX#to_u! - interprets Float32#to_i64! (negative) interprets Float32#to_i64! (negative) - interprets Int32::MAX#to_f32! interprets Int32::MAX#to_f32! - interprets UInt64::MAX#to_i16! interprets UInt64::MAX#to_i16! - interprets Int32::MAX#to_i16! interprets Int32::MAX#to_i16! - interprets Int64::MAX#to_i32! interprets Int64::MAX#to_i32! - interprets Float64#to_u32! (positive) interprets Float64#to_u32! (positive) - interprets UInt16::MAX#to_u16! interprets UInt16::MAX#to_u16! - interprets Int16::MAX#to_i16! interprets Int16::MAX#to_i16! - interprets Int64::MIN#to_i16! interprets Int64::MIN#to_i16! - interprets Int64::MIN#to_i! interprets Int64::MIN#to_i! - interprets Int32::MAX#to_f64! interprets Int32::MAX#to_f64! - interprets Int32::MAX#to_u16! interprets Int32::MAX#to_u16! - interprets UInt16::MAX#to_i8! interprets UInt16::MAX#to_i8! - interprets UInt8::MAX#to_i64! interprets UInt8::MAX#to_i64! - interprets UInt64::MAX#to_i8! interprets UInt64::MAX#to_i8! - interprets Int16::MIN#to_i8! interprets Int16::MIN#to_i8! - interprets Int16::MAX#to_u32! interprets Int16::MAX#to_u32! - interprets Int32::MAX#to_u32! interprets Int32::MAX#to_u32! - interprets UInt32::MAX#to_i16! interprets UInt32::MAX#to_i16! - interprets Float32#to_f64! (negative) interprets Float32#to_f64! (negative) - interprets Int64::MIN#to_u64! interprets Int64::MIN#to_u64! - interprets Int16::MIN#to_u32! interprets Int16::MIN#to_u32! - interprets Int64::MIN#to_i64! interprets Int64::MIN#to_i64! - interprets Int8::MIN#to_i32! interprets Int8::MIN#to_i32! - interprets Int16::MAX#to_f64! interprets Int16::MAX#to_f64! - interprets Int32::MIN#to_f32! interprets Int32::MIN#to_f32! - interprets Int8::MIN#to_f32! interprets Int8::MIN#to_f32! - interprets UInt16::MAX#to_i32! interprets UInt16::MAX#to_i32! - interprets Int64::MAX#to_f32! interprets Int64::MAX#to_f32! - interprets Float32#to_u! (positive) interprets Float32#to_u! (positive) - interprets UInt16::MAX#to_u8! interprets UInt16::MAX#to_u8! - interprets Int8::MIN#to_i! interprets Int8::MIN#to_i! - interprets UInt8::MAX#to_f32! interprets UInt8::MAX#to_f32! - interprets Float64#to_f32! (positive) interprets Float64#to_f32! (positive) - interprets Int8::MIN#to_u16! interprets Int8::MIN#to_u16! - interprets Int8::MAX#to_i8! interprets Int8::MAX#to_i8! - interprets Int32::MIN#to_i! interprets Int32::MIN#to_i! - interprets Int64::MIN#to_u32! interprets Int64::MIN#to_u32! - interprets UInt32::MAX#to_u8! interprets UInt32::MAX#to_u8! - interprets UInt32::MAX#to_u16! interprets UInt32::MAX#to_u16! - interprets Int16::MIN#to_u8! interprets Int16::MIN#to_u8! - interprets Int64::MAX#to_f64! interprets Int64::MAX#to_f64! - interprets Int8::MAX#to_i32! interprets Int8::MAX#to_i32! - discards conversion with local var discards conversion with local var - interprets Int8::MAX#to_i16! interprets Int8::MAX#to_i16! - interprets Int8::MAX#to_f32! interprets Int8::MAX#to_f32! - interprets UInt32::MAX#to_u64! interprets UInt32::MAX#to_u64! - interprets Int32::MIN#to_i16! interprets Int32::MIN#to_i16! - interprets Float32#to_u16! (positive) interprets Float32#to_u16! (positive) - interprets Int64::MIN#to_i32! interprets Int64::MIN#to_i32! - interprets Int32::MIN#to_u16! interprets Int32::MIN#to_u16! - interprets Int16::MAX#to_u64! interprets Int16::MAX#to_u64! - interprets Float32#to_i32! (positive) interprets Float32#to_i32! (positive) - interprets Int32::MAX#to_u64! interprets Int32::MAX#to_u64! - interprets UInt8::MAX#to_i32! interprets UInt8::MAX#to_i32! - interprets Float64#to_u64! (positive) interprets Float64#to_u64! (positive) - UInt8#unsafe_chr UInt8#unsafe_chr - interprets Int16::MAX#to_i32! interprets Int16::MAX#to_i32! - interprets Float32#to_i32! (negative) interprets Float32#to_i32! (negative) - interprets Int64::MAX#to_i8! interprets Int64::MAX#to_i8! - interprets Int64::MIN#to_u! interprets Int64::MIN#to_u! - interprets Int16::MIN#to_i64! interprets Int16::MIN#to_i64! - interprets Int64::MAX#to_u! interprets Int64::MAX#to_u! - interprets Float32#to_u64! (positive) interprets Float32#to_u64! (positive) - interprets Float32#to_i8! (negative) interprets Float32#to_i8! (negative) - interprets UInt64::MAX#to_u16! interprets UInt64::MAX#to_u16! - interprets UInt32::MAX#to_i64! interprets UInt32::MAX#to_i64! - interprets Int16::MAX#to_i8! interprets Int16::MAX#to_i8! - interprets UInt64::MAX#to_i64! interprets UInt64::MAX#to_i64! - interprets Int16::MAX#to_f32! interprets Int16::MAX#to_f32! - interprets Char#ord interprets Char#ord - interprets Int16::MAX#to_i! interprets Int16::MAX#to_i! - interprets Float32#to_f64! (positive) interprets Float32#to_f64! (positive) - interprets Int64::MAX#to_u8! interprets Int64::MAX#to_u8! - interprets Float64#to_i! (positive) interprets Float64#to_i! (positive) - interprets Int16::MIN#to_i32! interprets Int16::MIN#to_i32! - interprets UInt8::MAX#to_i16! interprets UInt8::MAX#to_i16! - interprets Int8::MIN#to_i64! interprets Int8::MIN#to_i64! - interprets Int16::MAX#to_i64! interprets Int16::MAX#to_i64! - interprets Int16::MIN#to_f32! interprets Int16::MIN#to_f32! - interprets Int64::MIN#to_u16! interprets Int64::MIN#to_u16! - interprets UInt64::MAX#to_i! interprets UInt64::MAX#to_i! - interprets UInt32::MAX#to_f32! interprets UInt32::MAX#to_f32! - interprets Int32::MAX#to_u! interprets Int32::MAX#to_u! - interprets Float32#to_i! (negative) interprets Float32#to_i! (negative) - interprets Int16::MIN#to_f64! interprets Int16::MIN#to_f64! - interprets UInt64::MAX#to_u32! interprets UInt64::MAX#to_u32! - interprets Float64#to_i8! (negative) interprets Float64#to_i8! (negative) - interprets UInt16::MAX#to_f32! interprets UInt16::MAX#to_f32! - interprets UInt16::MAX#to_f64! interprets UInt16::MAX#to_f64! - interprets UInt32::MAX#to_i32! interprets UInt32::MAX#to_i32! - interprets Int16::MAX#to_u8! interprets Int16::MAX#to_u8! - interprets Float64#to_i32! (negative) interprets Float64#to_i32! (negative) - interprets Float64#to_u8! (positive) interprets Float64#to_u8! (positive) - interprets Int8::MIN#to_u! interprets Int8::MIN#to_u! - interprets Float64#to_i8! (positive) interprets Float64#to_i8! (positive) - interprets UInt16::MAX#to_i64! interprets UInt16::MAX#to_i64! - interprets Int64::MAX#to_u64! interprets Int64::MAX#to_u64! - interprets UInt32::MAX#to_u32! interprets UInt32::MAX#to_u32! - interprets Int64::MAX#to_u16! interprets Int64::MAX#to_u16! - interprets Float32#to_u8! (positive) interprets Float32#to_u8! (positive) - interprets UInt32::MAX#to_i! interprets UInt32::MAX#to_i! - interprets Int8::MIN#to_u8! interprets Int8::MIN#to_u8! - interprets Int64::MAX#to_u32! interprets Int64::MAX#to_u32! - interprets Float32#to_i! (positive) interprets Float32#to_i! (positive) - interprets UInt32::MAX#to_i8! interprets UInt32::MAX#to_i8! - interprets UInt64::MAX#to_u! interprets UInt64::MAX#to_u! - interprets Float32#to_u32! (positive) interprets Float32#to_u32! (positive) - interprets Int32::MIN#to_u32! interprets Int32::MIN#to_u32! - interprets Int16::MIN#to_i! interprets Int16::MIN#to_i! - interprets Int32::MIN#to_u! interprets Int32::MIN#to_u! - interprets UInt8::MAX#to_u! interprets UInt8::MAX#to_u! - interprets UInt16::MAX#to_i16! interprets UInt16::MAX#to_i16! - interprets Int64::MIN#to_f64! interprets Int64::MIN#to_f64! - interprets Int8::MIN#to_u64! interprets Int8::MIN#to_u64! - interprets UInt8::MAX#to_u8! interprets UInt8::MAX#to_u8! - interprets Float32#to_i16! (negative) interprets Float32#to_i16! (negative) - interprets Int32::MIN#to_i64! interprets Int32::MIN#to_i64! - interprets Int32::MAX#to_i64! interprets Int32::MAX#to_i64! - interprets Float64#to_i64! (positive) interprets Float64#to_i64! (positive) - interprets Float64#to_u! (positive) interprets Float64#to_u! (positive) - interprets Int32::MAX#to_u8! interprets Int32::MAX#to_u8! - interprets Int8::MIN#to_u32! interprets Int8::MIN#to_u32! - interprets UInt8::MAX#to_u64! interprets UInt8::MAX#to_u64! - interprets Int64::MAX#to_i! interprets Int64::MAX#to_i! - interprets Int8::MAX#to_u! interprets Int8::MAX#to_u! - interprets UInt64::MAX#to_i32! interprets UInt64::MAX#to_i32! - interprets Float64#to_i16! (positive) interprets Float64#to_i16! (positive) - interprets Float32#to_i64! (positive) interprets Float32#to_i64! (positive) - Int32#unsafe_chr Int32#unsafe_chr - interprets Int8::MIN#to_i16! interprets Int8::MIN#to_i16! - interprets UInt64::MAX#to_f32! interprets UInt64::MAX#to_f32! - interprets Int64::MIN#to_i8! interprets Int64::MIN#to_i8! - interprets Int8::MIN#to_i8! interprets Int8::MIN#to_i8! - interprets Int32::MIN#to_i32! interprets Int32::MIN#to_i32! - interprets Int64::MIN#to_u8! interprets Int64::MIN#to_u8! - interprets Int32::MAX#to_i! interprets Int32::MAX#to_i! - interprets Int32::MAX#to_i8! interprets Int32::MAX#to_i8! - interprets Float64#to_u16! (positive) interprets Float64#to_u16! (positive) - interprets Int16::MIN#to_u! interprets Int16::MIN#to_u! - interprets Int8::MAX#to_u64! interprets Int8::MAX#to_u64! - interprets Int8::MAX#to_i! interprets Int8::MAX#to_i! - interprets Float64#to_i64! (negative) interprets Float64#to_i64! (negative) - interprets Float64#to_i16! (negative) interprets Float64#to_i16! (negative) - interprets Int8::MAX#to_f64! interprets Int8::MAX#to_f64! - interprets Float32#to_f32! (negative) interprets Float32#to_f32! (negative) - interprets Int32::MIN#to_u64! interprets Int32::MIN#to_u64! - interprets Float64#to_f64! (positive) interprets Float64#to_f64! (positive) - interprets UInt64::MAX#to_u8! interprets UInt64::MAX#to_u8! - math - interprets Int32 * Int32 interprets Int32 * Int32 - discards math discards math - interprets UInt64 * Int32 interprets UInt64 * Int32 - interprets UInt32 - Int32 interprets UInt32 - Int32 - interprets Float64 + Int32 interprets Float64 + Int32 - interprets UInt64 & Int32 interprets UInt64 & Int32 - interprets Float32 + Float64 interprets Float32 + Float64 - interprets Int32 &- Int32 interprets Int32 &- Int32 - interprets Int32 &+ Int32 interprets Int32 &+ Int32 - interprets Int32 + Float64 interprets Int32 + Float64 - interprets UInt64 | UInt32 interprets UInt64 | UInt32 - interprets Int8 + Int8 interprets Int8 + Int8 - interprets Int32 &* Int32 interprets Int32 &* Int32 - interprets Float64 - Float64 interprets Float64 - Float64 - interprets Int32 - Int32 interprets Int32 - Int32 - interprets UInt8 | Int32 interprets UInt8 | Int32 - interprets Float64 * Float64 interprets Float64 * Float64 - interprets Int128 + Int32 interprets Int128 + Int32 - interprets Int32.unsafe_shl(Int32) with self interprets Int32.unsafe_shl(Int32) with self - interprets Int64 + Int64 interprets Int64 + Int64 - interprets Float64 + Float64 interprets Float64 + Float64 - interprets Int32 + Int32 interprets Int32 + Int32 - logical operations - discards bool not discards bool not - interprets not for nilable proc type (false) interprets not for nilable proc type (false) - interprets not for bool false interprets not for bool false - interprets not for generic module metaclass interprets not for generic module metaclass - discards nil not discards nil not - interprets not for bool true interprets not for bool true - interprets not for nilable type (false) interprets not for nilable type (false) - does math primitive on union does math primitive on union - interprets not for generic class instance type interprets not for generic class instance type - interprets not for generic class instance metaclass interprets not for generic class instance metaclass - interprets not for nilable type (true) interprets not for nilable type (true) - interprets not for mixed union (true) interprets not for mixed union (true) - interprets not for nilable type (false) interprets not for nilable type (false) - interprets not for mixed union (nil) interprets not for mixed union (nil) - interprets not for nil interprets not for nil - interprets not for nilable proc type (true) interprets not for nilable proc type (true) - interprets not for generic module interprets not for generic module - does math convert on union does math convert on union - interprets not for module (#12918) interprets not for module (#12918) - interprets not for mixed union (other) interprets not for mixed union (other) - interprets not for nil type interprets not for nil type - interprets not for nilable type (true) interprets not for nilable type (true) - interprets not for bool false interprets not for bool false - interprets not for mixed union (false) interprets not for mixed union (false) - overflow - conversion - overlows on -1_i64.to_u8 overlows on -1_i64.to_u8 - overlows on -1_i16.to_u32 overlows on -1_i16.to_u32 - overlows on 65536_f32.to_u16 overlows on 65536_f32.to_u16 - overlows on -1.to_u8 overlows on -1.to_u8 - overlows on 128_f64.to_i8 overlows on 128_f64.to_i8 - overlows on 256_f64.to_u8 overlows on 256_f64.to_u8 - overlows on 32768_u32.to_i16 overlows on 32768_u32.to_i16 - overlows on 32768_u16.to_i16 overlows on 32768_u16.to_i16 - overlows on 4294967296_f64.to_u32 overlows on 4294967296_f64.to_u32 - overlows on -1.to_u32 overlows on -1.to_u32 - overlows on 128_u64.to_i8 overlows on 128_u64.to_i8 - overlows on 128_u16.to_i8 overlows on 128_u16.to_i8 - overlows on -1_i8.to_u64 overlows on -1_i8.to_u64 - overlows on 1.7976931348623157e+308.to_f32 overlows on 1.7976931348623157e+308.to_f32 - overlows on 2147483648_f64.to_i32 overlows on 2147483648_f64.to_i32 - overlows on 128_f32.to_i8 overlows on 128_f32.to_i8 - overlows on -1_i64.to_u64 overlows on -1_i64.to_u64 - overlows on -1.to_u16 overlows on -1.to_u16 - overlows on 2147483648_u32.to_i32 overlows on 2147483648_u32.to_i32 - overlows on -1_i16.to_u64 overlows on -1_i16.to_u64 - overlows on -1_i16.to_u8 overlows on -1_i16.to_u8 - overlows on 256_f32.to_u8 overlows on 256_f32.to_u8 - overlows on -1_i64.to_u16 overlows on -1_i64.to_u16 - overlows on -1_i16.to_u16 overlows on -1_i16.to_u16 - overlows on -1_i8.to_u16 overlows on -1_i8.to_u16 - overlows on -1_i8.to_u8 overlows on -1_i8.to_u8 - overlows on 32768_f64.to_i16 overlows on 32768_f64.to_i16 - overlows on -1_i64.to_u32 overlows on -1_i64.to_u32 - overlows on -1.to_u64 overlows on -1.to_u64 - overlows on 9223372036854775808_u64.to_i64 overlows on 9223372036854775808_u64.to_i64 - overlows on 128_u8.to_i8 overlows on 128_u8.to_i8 - overlows on 128_u32.to_i8 overlows on 128_u32.to_i8 - overlows on -1_i8.to_u32 overlows on -1_i8.to_u32 - overlows on 2147483648_u64.to_i32 overlows on 2147483648_u64.to_i32 - overlows on 65536_f64.to_u16 overlows on 65536_f64.to_u16 - overlows on 32768_f32.to_i16 overlows on 32768_f32.to_i16 - overlows on 32768_u64.to_i16 overlows on 32768_u64.to_i16 - * - overlows on 20_u64 * 1844674407370955161_i64 overlows on 20_u64 * 1844674407370955161_i64 - overlows on 10_i8 * 14 overlows on 10_i8 * 14 - overlows on 20_u32 * 429496729 overlows on 20_u32 * 429496729 - overlows on 10_u8 * 26 overlows on 10_u8 * 26 - overlows on 10_i16 * 3300 overlows on 10_i16 * 3300 - overlows on 10_u16 * 6600 overlows on 10_u16 * 6600 - overlows on 20 * 214748364 overlows on 20 * 214748364 - overlows on 20_i64 * 922337203685477580_i64 overlows on 20_i64 * 922337203685477580_i64 - + - overlows on 1_i16 + 32767 overlows on 1_i16 + 32767 - overlows on 1 + 2147483647 overlows on 1 + 2147483647 - overlows on 1_u64 + 18446744073709551615_u64 overlows on 1_u64 + 18446744073709551615_u64 - overlows on 1_i64 + 9223372036854775807_i64 overlows on 1_i64 + 9223372036854775807_i64 - overlows on 1_i8 + 128 overlows on 1_i8 + 128 - overlows on 1_u32 + 4294967295_i64 overlows on 1_u32 + 4294967295_i64 - overlows on 1_u16 + 65535 overlows on 1_u16 + 65535 - overlows on 1_u8 + 255 overlows on 1_u8 + 255 - - - overlows on 1_i8 - 256 overlows on 1_i8 - 256 - overlows on 1_i64 - 9223372036854775810_u64 overlows on 1_i64 - 9223372036854775810_u64 - overlows on 1_u64 - 2 overlows on 1_u64 - 2 - overlows on 1_i16 - 32770 overlows on 1_i16 - 32770 - overlows on 1_u16 - 2 overlows on 1_u16 - 2 - overlows on 1_u32 - 2 overlows on 1_u32 - 2 - overlows on 1_u8 - 2 overlows on 1_u8 - 2 - overlows on 1 - 2147483650_i64 overlows on 1 - 2147483650_i64 - comparisons - interprets Int128 == Int128 (true) interprets Int128 == Int128 (true) - interprets UInt64 == Int32 (false when Int32 < 0) interprets UInt64 == Int32 (false when Int32 < 0) - interprets Int32 < Float64 interprets Int32 < Float64 - interprets Float32 fdiv Float64 interprets Float32 fdiv Float64 - interprets Float32 / Float32 interprets Float32 / Float32 - interprets Char == Char (false) interprets Char == Char (false) - interprets Bool != Bool (true) interprets Bool != Bool (true) - discards comparison discards comparison - interprets Float64 / Float64 interprets Float64 / Float64 - interprets UInt32 < Int32 (false) interprets UInt32 < Int32 (false) - interprets UInt64 == Int32 (true when Int32 >= 0) interprets UInt64 == Int32 (true when Int32 >= 0) - interprets UInt64 != Int32 (true) interprets UInt64 != Int32 (true) - interprets Int32 < Int32 interprets Int32 < Int32 - interprets Int32 != UInt64 (true) interprets Int32 != UInt64 (true) - interprets Float64 < Int32 interprets Float64 < Int32 - interprets UInt64 == Int32 (false when Int32 >= 0) interprets UInt64 == Int32 (false when Int32 >= 0) - interprets Int32 == UInt64 (false) interprets Int32 == UInt64 (false) - interprets Float64 < Float64 interprets Float64 < Float64 - interprets Char == Char (true) interprets Char == Char (true) - interprets Float64 fdiv Float32 interprets Float64 fdiv Float32 - interprets Int128 == Int128 (false) interprets Int128 == Int128 (false) - interprets Int32 == Float64 (false) interprets Int32 == Float64 (false) - interprets UInt64 < Int32 (false, right is less than zero) interprets UInt64 < Int32 (false, right is less than zero) - interprets UInt64 < Int32 (false, right is greater than zero) interprets UInt64 < Int32 (false, right is greater than zero) - interprets Int32 != UInt64 (false) interprets Int32 != UInt64 (false) - interprets Float32 / Int32 interprets Float32 / Int32 - interprets Int32 == Int32 (true) interprets Int32 == Int32 (true) - interprets UInt8 < Int32 (false, right is less than zero) interprets UInt8 < Int32 (false, right is less than zero) - interprets Int32 != Int32 (true) interprets Int32 != Int32 (true) - interprets UInt8 < Int32 (true, right is greater than zero) interprets UInt8 < Int32 (true, right is greater than zero) - interprets Int32 > Float64 (true) interprets Int32 > Float64 (true) - interprets UInt32 < Int32 (true) interprets UInt32 < Int32 (true) - interprets UInt64 != Int32 (false) interprets UInt64 != Int32 (false) - interprets UInt64 > UInt32 (false) interprets UInt64 > UInt32 (false) - interprets UInt64 < Int32 (true, right is greater than zero) interprets UInt64 < Int32 (true, right is greater than zero) - interprets Int32 == Int32 (false) interprets Int32 == Int32 (false) - interprets Bool == Bool (true) interprets Bool == Bool (true) - interprets Int32 == UInt64 (true) interprets Int32 == UInt64 (true) - interprets UInt64.unsafe_mod(UInt64) interprets UInt64.unsafe_mod(UInt64) - interprets Bool == Bool (false) interprets Bool == Bool (false) - interprets UInt8 < Int32 (false, right is greater than zero) interprets UInt8 < Int32 (false, right is greater than zero) - interprets Int32 > Float64 (false) interprets Int32 > Float64 (false) - interprets Bool != Bool (false) interprets Bool != Bool (false) - interprets Int32 != Int32 (false) interprets Int32 != Int32 (false) - interprets Int32 == Float64 (true) interprets Int32 == Float64 (true) - interprets UInt64 > UInt32 (true) interprets UInt64 > UInt32 (true) - literals - interprets a bool (false) interprets a bool (false) - interprets an UInt128 interprets an UInt128 - interprets nil interprets nil - interprets an Int8 interprets an Int8 - interprets a char interprets a char - interprets an Int64 interprets an Int64 - interprets an UInt8 interprets an UInt8 - precomputes string literal length precomputes string literal length - interprets an UInt16 interprets an UInt16 - interprets an Int16 interprets an Int16 - interprets an UInt64 interprets an UInt64 - interprets a Float64 interprets a Float64 - interprets a Float32 interprets a Float32 - interprets a bool (true) interprets a bool (true) - interprets an Int128 interprets an Int128 - interprets an Int32 interprets an Int32 - interprets an UInt32 interprets an UInt32 - interprets a String literal interprets a String literal - uses a string pool uses a string pool -Semantic: pointer - doesn't crash if pointerof expansion type has generic splat parameter (#11808) doesn't crash if pointerof expansion type has generic splat parameter (#11808) - types pointer diff types pointer diff - errors with non-matching generic value with value=, union of generic types (#10544) errors with non-matching generic value with value=, union of generic types (#10544) - errors with non-matching generic value with value=, generic type (#10211) errors with non-matching generic value with value=, generic type (#10211) - detects recursive pointerof expansion (3) detects recursive pointerof expansion (3) - errors if doing Pointer.allocate errors if doing Pointer.allocate - pointer of value error pointer of value error - allows using pointer with subclass allows using pointer with subclass - types pointer of constant types pointer of constant - can assign pointerof virtual type (#8216) can assign pointerof virtual type (#8216) - types pointer value types pointer value - can pass any pointer to something expecting void* in lib call, with to_unsafe can pass any pointer to something expecting void* in lib call, with to_unsafe - types realloc types realloc - errors with non-matching generic value with value= (#10211) errors with non-matching generic value with value= (#10211) - type pointer casting type pointer casting - detects recursive pointerof expansion (4) detects recursive pointerof expansion (4) - types pointer add types pointer add - says undefined variable (#7556) says undefined variable (#7556) - type pointer casting of object type type pointer casting of object type - can't do Pointer.malloc without type var can't do Pointer.malloc without type var - types pointer value on typedef types pointer value on typedef - detects recursive pointerof expansion (#551) (#553) detects recursive pointerof expansion (#551) (#553) - pointer malloc creates new type pointer malloc creates new type - types int pointer types int pointer - can pass any pointer to something expecting void* in lib call can pass any pointer to something expecting void* in lib call - takes pointerof lib external var takes pointerof lib external var - pointer of class raises error pointer of class raises error - types Pointer.malloc types Pointer.malloc - detects recursive pointerof expansion (2) (#1654) detects recursive pointerof expansion (2) (#1654) - can assign nil to void pointer can assign nil to void pointer - create pointer by address create pointer by address -Semantic: doc - stores doc for enum with @[Flags] stores doc for enum with @[Flags] - doc before annotation - attached to alias attached to alias - attached to enum attached to enum - attached to macro attached to macro - attached to macro call attached to macro call - attached to macro call that produces multiple types attached to macro call that produces multiple types - attached to constant attached to constant - attached to module attached to module - attached to struct/class attached to struct/class - attached to def attached to def - overwrites doc for struct when reopening overwrites doc for struct when reopening - stores doc for enum when reopening stores doc for enum when reopening - overwrites doc for enum when reopening overwrites doc for enum when reopening - overwrites doc for macro when redefining overwrites doc for macro when redefining - stores doc for def stores doc for def - stores doc for def with annotation stores doc for def with annotation - stores doc for module stores doc for module - stores doc for enum member stores doc for enum member - stores doc for def with visibility stores doc for def with visibility - stores doc for def with annotation stores doc for def with annotation - overwrites doc for module when reopening overwrites doc for module when reopening - stores doc for fun def stores doc for fun def - stores doc for macro defined in macro call stores doc for macro defined in macro call - stores doc for nodes defined in macro call stores doc for nodes defined in macro call - stores doc for flags enum with base type stores doc for flags enum with base type - stores locations for auto-generated module stores locations for auto-generated module - stores doc for macro stores doc for macro - stores doc for struct stores doc for struct - stores doc for abstract def stores doc for abstract def - stores doc for class when reopening stores doc for class when reopening - stores doc for class stores doc for class - stores doc for enum stores doc for enum - overwrites doc for class when reopening overwrites doc for class when reopening - stores doc for alias stores doc for alias - :ditto: - amend previous doc (without empty line) amend previous doc (without empty line) - amend previous doc amend previous doc - stores doc for macro stores doc for macro - stores doc for const stores doc for const - :ditto: references last non-ditto doc :ditto: references last non-ditto doc - stores doc for def stores doc for def - stores location for implicit flag enum members stores location for implicit flag enum members - attaches doc to annotation in macro expansion (#9628) attaches doc to annotation in macro expansion (#9628) - stores doc for abstract class stores doc for abstract class - stores doc for constant stores doc for constant - stores doc for nodes defined in macro call (2) stores doc for nodes defined in macro call (2) - stores doc for enum and doesn't mix with value stores doc for enum and doesn't mix with value - stores doc for struct when reopening stores doc for struct when reopening - overwrites doc for def when redefining overwrites doc for def when redefining - attaches doc in double macro expansion (#8463) attaches doc in double macro expansion (#8463) - stores doc for module when reopening stores doc for module when reopening -Crystal::Repl::Interpreter - instance_sizeof - interprets instance_sizeof typeof interprets instance_sizeof typeof - instance_alignof - interprets instance_alignof typeof interprets instance_alignof typeof - sizeof - interprets sizeof typeof interprets sizeof typeof - alignof - interprets alignof typeof interprets alignof typeof -Semantic: class var + declares instance var of generic type, with metaclass declares instance var of generic type, with metaclass + declares instance var with union type with a virtual member declares instance var with union type with a virtual member + guesses virtual hash type (2) (#5342) guesses virtual hash type (2) (#5342) + infers from assign to local var in generic type (#2467) infers from assign to local var in generic type (#2467) + doesn't if declaring nilable instance var and turns out to be nilable doesn't if declaring nilable instance var and turns out to be nilable + infers type from lib out (2) infers type from lib out (2) + declares instance var of generic type through module declares instance var of generic type through module + guesses virtual array type (2) (#5342) guesses virtual array type (2) (#5342) + guesses from as.(typeof(...)) guesses from as.(typeof(...)) + infers type from included module recursively infers type from included module recursively + uses T.new (#4291) uses T.new (#4291) + doesn't infer generic type without type argument inside generic doesn't infer generic type without type argument inside generic + errors when typing an instance variable inside a method errors when typing an instance variable inside a method + errors if adds instance variable to Object via guess errors if adds instance variable to Object via guess + infers type from as infers type from as infers type from number literal infers type from number literal - declares class variable declares class variable - can find class var through included module can find class var through included module - gives correct error when trying to use Int as a class variable type gives correct error when trying to use Int as a class variable type - redefines class variable type redefines class variable type - errors if class variable not nilable without initializer errors if class variable not nilable without initializer - infers in multiple assign for tuple type (1) infers in multiple assign for tuple type (1) - errors if redefining class var type in subclass, with guess errors if redefining class var type in subclass, with guess - errors when typing a class variable inside a method errors when typing a class variable inside a method - errors if redefining class var type in included module errors if redefining class var type in included module - declares class var in generic class declares class var in generic class - declares class variable (2) declares class variable (2) - errors if using self as type var but there's no self errors if using self as type var but there's no self - says undefined class variable says undefined class variable - infers type from T.new infers type from T.new - errors on undefined constant (1) errors on undefined constant (1) - declares uninitialized (#2935) declares uninitialized (#2935) - errors if using class variable at the top level errors if using class variable at the top level - can assign to class variable if this type can be up-casted to ancestors class variable type (#4869) can assign to class variable if this type can be up-casted to ancestors class variable type (#4869) + infers type for generic class, with begin infers type for generic class, with begin + says can't infer type if only nil was assigned, in generic type says can't infer type if only nil was assigned, in generic type + infers type from named tuple literal infers type from named tuple literal errors when using Class (#2605) errors when using Class (#2605) - allows class var in primitive types (#612) allows class var in primitive types (#612) - doesn't error if accessing class variable before defined (#2941) doesn't error if accessing class variable before defined (#2941) - declares class var in generic module declares class var in generic module - types class var inside instance method types class var inside instance method - can find class var in subclass can find class var in subclass - can access constant from generic metaclass (#3719) can access constant from generic metaclass (#3719) - types class var as nil if assigned for the first time inside method (#2059) types class var as nil if assigned for the first time inside method (#2059) - types as nilable if doesn't have initializer types as nilable if doesn't have initializer - errors on undefined constant (2) errors on undefined constant (2) - doesn't error on recursive dependency if var is nilable (#2943) doesn't error on recursive dependency if var is nilable (#2943) - types class var inside proc literal inside class types class var inside proc literal inside class - errors if redefining class var type in subclass errors if redefining class var type in subclass - allows self.class as type var in class body (#537) allows self.class as type var in class body (#537) - types class var types class var - types class var as nil if not assigned at the top level types class var as nil if not assigned at the top level - errors if using local variable in initializer errors if using local variable in initializer + types generic instance as virtual type if generic type has subclasses (#3805) types generic instance as virtual type if generic type has subclasses (#3805) + errors if not initializing super variable in generic errors if not initializing super variable in generic + doesn't crash on #3580 doesn't crash on #3580 + doesn't error if initializes via super in macro def doesn't error if initializes via super in macro def + errors when assigning instance variable inside nested expression errors when assigning instance variable inside nested expression + guesses inside macro for guesses inside macro for +immutability of returned container literals (#10818) + Annotation#args Annotation#args + When#conds When#conds + Generic#type_vars Generic#type_vars + ProcPointer#args ProcPointer#args + MultiAssign#targets MultiAssign#targets + ProcNotation#inputs ProcNotation#inputs + MultiAssign#values MultiAssign#values + StringInterpolation#expressions StringInterpolation#expressions + Union#types Union#types +Crystal::Playground::Session + assert assert Crystal::Repl::Interpreter enum does enum value does enum value does enum new does enum new -Code gen: def with default value - considers first the one with a restriction considers first the one with a restriction - considers first the one with more arguments considers first the one with more arguments - codegens def new with one default value codegens def new with one default value - resolves expanded call to current type, not to virtual type resolves expanded call to current type, not to virtual type - doesn't mix types of instance vars with initialize and new doesn't mix types of instance vars with initialize and new - codegens def with one default value codegens def with one default value -MacroExpander - expands macro with and (1) expands macro with and (1) - expands macro with string substitution expands macro with string substitution - expands macro with and (2) expands macro with and (2) - expands macro with char expands macro with char - for - expands macro with for over range literal expands macro with for over range literal - expands macro with for over array literal with index expands macro with for over array literal with index - expands macro with for over array literal expands macro with for over array literal - expands macro with for over range literal, evaluating elements expands macro with for over range literal, evaluating elements - expands macro with for over hash literal with index expands macro with for over hash literal with index - expands macro with for over tuple literal expands macro with for over tuple literal - expands macro with for over embedded array literal expands macro with for over embedded array literal - expands macro with for over range literal, evaluating elements (exclusive) expands macro with for over range literal, evaluating elements (exclusive) - expands macro with for over hash literal expands macro with for over hash literal - expands macro with argument-less call substitution expands macro with argument-less call substitution - if - expands macro with if with not expands macro with if with not - expands macro with if when truthy expands macro with if when truthy - expands macro with if else when falsey expands macro with if else when falsey - expands macro with if with nop expands macro with if with nop - expands macro with if when falsey expands macro with if when falsey - does not expand when macro expression is {% ... %} does not expand when macro expression is {% ... %} - expands macro with or (1) expands macro with or (1) - expands macro with symbol expands macro with symbol - expands macro with var substitution expands macro with var substitution - does regular unless does regular unless - does regular if does regular if - outputs invisible location pragmas outputs invisible location pragmas - expands simple macro expands simple macro - expands macro with tuple expands macro with tuple - expands macro with hash expands macro with hash - expands macro with symbol substitution expands macro with symbol substitution - expands macro with range expands macro with range - can't use `yield` outside a macro can't use `yield` outside a macro - expands macro with or (2) expands macro with or (2) - expands macro with boolean expands macro with boolean - expands macro with array expands macro with array - expands macro with string expands macro with string - expands macro with string interpolation expands macro with string interpolation - expands macro with nil expands macro with nil - expands macro with integer expands macro with integer +Normalize: return next break + doesn't remove after return when there's an unless doesn't remove after return when there's an unless + removes nodes after if that returns in both branches removes nodes after if that returns in both branches + removes nodes after break removes nodes after break + removes nodes after next removes nodes after next + doesn't remove nodes after if that returns in one branch doesn't remove nodes after if that returns in one branch + removes nodes after return removes nodes after return +Crystal::Repl::Interpreter + procs + interprets call inside Proc type interprets call inside Proc type + interprets proc literal with args interprets proc literal with args + can downcast Proc(T) to Proc(Nil) can downcast Proc(T) to Proc(Nil) + discards proc call discards proc call + interprets no args proc literal interprets no args proc literal + casts from nilable proc type to proc type casts from nilable proc type to proc type + does call without receiver inside closure does call without receiver inside closure + casts proc call arguments to proc arg types (#12350) casts proc call arguments to proc arg types (#12350) + calls proc primitive on union of module that has no subtypes (#12954) calls proc primitive on union of module that has no subtypes (#12954) +Normalize: chained comparisons + normalizes two comparisons with calls normalizes two comparisons with calls + normalizes one comparison with call normalizes one comparison with call + normalizes two comparisons with literal normalizes two comparisons with literal + normalizes one comparison with var normalizes one comparison with var + normalizes one comparison with literal normalizes one comparison with literal +Crystal::Repl::Interpreter + integration + does Float64#to_s (simple) does Float64#to_s (simple) + does caller does caller + does String#includes? does String#includes? + does CSV does CSV + does YAML::Serializable does YAML::Serializable + does Int32#to_s does Int32#to_s + does JSON does JSON + does IO.pipe (checks that StaticArray is passed correctly to C calls) does IO.pipe (checks that StaticArray is passed correctly to C calls) + does Float64#to_s (complex) does Float64#to_s (complex) + does XML does XML + does some Hash methods does some Hash methods + does YAML does YAML + does Range#to_a, Array#to_s does Range#to_a, Array#to_s + does JSON::Serializable does JSON::Serializable +Code gen: no return + codegens no return variable declaration (#1508) codegens no return variable declaration (#1508) + codegens if with no return and variable used afterwards codegens if with no return and variable used afterwards + codegens if with NoReturn on then and union on else codegens if with NoReturn on then and union on else + codegens untyped typeof (#5105) codegens untyped typeof (#5105) + codegens call with no return because of falsey if (#3661) codegens call with no return because of falsey if (#3661) + codegen types exception handler as NoReturn if ensure is NoReturn codegen types exception handler as NoReturn if ensure is NoReturn + codegens no return instance variable declaration (#1508) codegens no return instance variable declaration (#1508) + codegens Pointer(NoReturn).malloc codegens Pointer(NoReturn).malloc +Code gen: and + codegens and with primitive type other than bool with union codegens and with primitive type other than bool with union + codegens and with bool union as left node 3 codegens and with bool union as left node 3 + codegens and with non-false union as left node codegens and with non-false union as left node + codegens assign in right node, inside if must not be nil codegens assign in right node, inside if must not be nil + codegens and with bool union as left node 1 codegens and with bool union as left node 1 + codegens and with bool and int 1 codegens and with bool and int 1 + codegens assign in right node, after if must be nilable codegens assign in right node, after if must be nilable + codegens and with primitive type other than bool codegens and with primitive type other than bool + codegens and with bool true and false codegens and with bool true and false + codegens and with bool union as left node 1 codegens and with bool union as left node 1 + codegens and with bool union as left node 4 codegens and with bool union as left node 4 + codegens and with bool union as left node 3 codegens and with bool union as left node 3 + codegens and with nil union as left node 1 codegens and with nil union as left node 1 + codegens and with nil union as left node 2 codegens and with nil union as left node 2 + codegens and with bool and int 2 codegens and with bool and int 2 + codegens and with bool union as left node 2 codegens and with bool union as left node 2 + codegens and with nilable as left node 1 codegens and with nilable as left node 1 + codegens and with bool true and true codegens and with bool true and true + codegens and with bool false and false codegens and with bool false and false + codegens and with primitive type other than bool codegens and with primitive type other than bool + codegens and with bool union as left node 2 codegens and with bool union as left node 2 + codegens and with nilable as left node 2 codegens and with nilable as left node 2 + codegens assign in right node, after must be nilable codegens assign in right node, after must be nilable + codegens and with bool false and true codegens and with bool false and true +Normalize: or + normalizes or with is_a? on var normalizes or with is_a? on var + normalizes or with ! on var.is_a?(...) normalizes or with ! on var.is_a?(...) + normalizes or with variable on the left normalizes or with variable on the left + normalizes or with ! on var normalizes or with ! on var + normalizes or without variable normalizes or without variable + normalizes or with assignment on the left normalizes or with assignment on the left +Semantic: nil + can call a fun with nil for typedef pointer can call a fun with nil for typedef pointer + marks instance variables as nil but doesn't explode on macros marks instance variables as nil but doesn't explode on macros + marks instance variables as nil when not in initialize 2 marks instance variables as nil when not in initialize 2 + restricts type of 'while foo' restricts type of 'while foo' + restricts type of 'while foo' on assign restricts type of 'while foo' on assign + types nil types nil + types empty types empty + marks instance variables as nil when not in initialize marks instance variables as nil when not in initialize + restricts type of 'if foo' restricts type of 'if foo' + can call a fun with nil for pointer can call a fun with nil for pointer + restricts type of 'if foo' on assign restricts type of 'if foo' on assign + doesn't check return type for nil doesn't check return type for nil + doesn't check return type for void doesn't check return type for void Crystal::Repl::Interpreter responds_to? - doesn't crash if def body ends up with no type (#12219) doesn't crash if def body ends up with no type (#12219) does responds_to? does responds_to? -Codegen: private - codegens class var of private type with same name as public type (#11620) codegens class var of private type with same name as public type (#11620) - codegens private def in same file codegens private def in same file - codegens overloaded private def in same file codegens overloaded private def in same file - doesn't include filename for private types doesn't include filename for private types - codegens class vars of private types with same name (#11620) codegens class vars of private types with same name (#11620) -Lexer string array - lexes string array with new line gives correct column for next token lexes string array with new line gives correct column for next token - lexes simple string array lexes simple string array - using { as delimiter - lexes simple string array lexes simple string array - using [ as delimiter - lexes simple string array lexes simple string array - lexes string array with new line lexes string array with new line - using < as delimiter - lexes simple string array lexes simple string array - using | as delimiter - lexes simple string array lexes simple string array -Codegen: thread local - works with class variables works with class variables works with class variables works with class variables������ works with class variables�� works with class variables���� works with class variables�� works with class variables�� works with class variables works with class variables - works with class variable in main thread works with class variable in main thread works with class variable in main thread works with class variable in main thread works with class variable in main thread works with class variable in main thread������������ works with class variable in main thread�� works with class variable in main thread�� works with class variable in main thread works with class variable in main thread - compiles with class variable referenced from initializer compiles with class variable referenced from initializer compiles with class variable referenced from initializer compiles with class variable referenced from initializer compiles with class variable referenced from initializer compiles with class variable referenced from initializer������������ compiles with class variable referenced from initializer�� compiles with class variable referenced from initializer�� compiles with class variable referenced from initializer compiles with class variable referenced from initializer -Lexer doc - lexes with doc enabled but without docs lexes with doc enabled but without docs - lexes with doc enabled and docs, one line comment with two newlines and another comment lexes with doc enabled and docs, one line comment with two newlines and another comment - lexes without doc enabled lexes without doc enabled - lexes with doc enabled and docs, two line comment with leading whitespace lexes with doc enabled and docs, two line comment with leading whitespace - lexes with doc enabled and docs lexes with doc enabled and docs - resets doc after non newline or space token resets doc after non newline or space token - lexes with doc enabled and docs, two line comment lexes with doc enabled and docs, two line comment -Codegen: double splat - evaluates double splat argument just once (#2677) evaluates double splat argument just once (#2677) - double splats named argument into arguments (1) double splats named argument into arguments (1) - double splats named argument with positional arguments double splats named argument with positional arguments - matches double splat with regular splat matches double splat with regular splat - double splats named argument into arguments (2) double splats named argument into arguments (2) - double splats twice double splats twice - matches double splat on method with named args matches double splat on method with named args - removes literal types in all matches (#6239) removes literal types in all matches (#6239) - double splats named argument with named args (2) double splats named argument with named args (2) - matches double splat on method with named args and regular args matches double splat on method with named args and regular args - double splats named argument with named args (1) double splats named argument with named args (1) -Semantic: union - types union when arg is union types union when arg is union - finds method in Value finds method in Value - errors if instantiates union errors if instantiates union - types union when both obj and arg are union types union when both obj and arg are union - merges types in the same hierarchy with Union merges types in the same hierarchy with Union - types union types union - treats void as nil in union treats void as nil in union - can iterate T can iterate T - assigns to union and keeps new union type in call assigns to union and keeps new union type in call - types union of same type types union of same type - doesn't run virtual lookup on unbound unions (#9173) doesn't run virtual lookup on unbound unions (#9173) - looks up type in union type with free var looks up type in union type with free var - can reopen Union and access T can reopen Union and access T - types union of classes types union of classes - can use Union in type restriction (#2988) can use Union in type restriction (#2988) - can reopen Union can reopen Union - doesn't virtualize union elements (#7814) doesn't virtualize union elements (#7814) - doesn't crash with union of no-types (#5805) doesn't crash with union of no-types (#5805) - supports macro if inside union supports macro if inside union - commutativity - uninstantiated generic super-metaclass v.s. uninstantiated generic sub-metaclass uninstantiated generic super-metaclass v.s. uninstantiated generic sub-metaclass - module v.s. including generic module instance module v.s. including generic module instance - module v.s. including module module v.s. including module - module v.s. extending generic module instance metaclass module v.s. extending generic module instance metaclass - generic module instance v.s. including generic module instance generic module instance v.s. including generic module instance - generic module instance v.s. including module generic module instance v.s. including module - virtual metaclass v.s. generic subclass instance metaclass virtual metaclass v.s. generic subclass instance metaclass - generic module instance v.s. extending generic module instance metaclass generic module instance v.s. extending generic module instance metaclass - superclass v.s. uninstantiated generic subclass superclass v.s. uninstantiated generic subclass - finds method in Object finds method in Object - types union when obj is union types union when obj is union -Semantic: require - file not found - require require - relative require relative require - wildcard wildcard - relative wildcard relative wildcard -Code gen: op assign - evaluates exps once (#3398) evaluates exps once (#3398) - evaluates exps once, [] (#3398) evaluates exps once, [] (#3398) -Lexer - lexes "true" lexes "true" - lexes "==" lexes "==" - lexes ":\"foo\"" lexes ":\"foo\"" - lexes "1i16" lexes "1i16" - lexes "def" lexes "def" - lexes "0" lexes "0" - says syntax error on "'" says syntax error on "'" - lexes "bar!" lexes "bar!" - lexes "private" lexes "private" - lexes "{" lexes "{" - lexes "$10?" lexes "$10?" - says syntax error on "2e+e" says syntax error on "2e+e" - lexes ":**" lexes ":**" - lexes "break" lexes "break" - lexes "next" lexes "next" - lexes "-0x8000000000000000_i64" lexes "-0x8000000000000000_i64" - lexes "|" lexes "|" - says syntax error on "-3_" says syntax error on "-3_" - lexes "for" lexes "for" - lexes "1i32" lexes "1i32" - lexes "**" lexes "**" - says syntax error on "0x100000000i32" says syntax error on "0x100000000i32" - lexes "yield!" lexes "yield!" - lexes "then" lexes "then" - lexes "while" lexes "while" - lexes "-0" lexes "-0" - lexes "0o700000000000000000000" lexes "0o700000000000000000000" - lexes "0x1_i64" lexes "0x1_i64" - lexes '\\' lexes '\\' - says syntax error on "65536_u16" says syntax error on "65536_u16" - lexes "340282366920938463463374607431768211455_u128" lexes "340282366920938463463374607431768211455_u128" - lexes "next!" lexes "next!" - says syntax error on "$0?" says syntax error on "$0?" - lexes "->" lexes "->" - lexes "begin!" lexes "begin!" - lexes "while?" lexes "while?" - lexes ":&-" lexes ":&-" - lexes "1" lexes "1" - lexes "1u64" lexes "1u64" - lexes "+0b1010" lexes "+0b1010" - says syntax error on "18446744073709551616" says syntax error on "18446744073709551616" - lexes "{{" lexes "{{" - lexes "0b100000000000000000000000000000000" lexes "0b100000000000000000000000000000000" - lexes symbol with quote lexes symbol with quote - lexes "super" lexes "super" - says syntax error on "2e+f32" says syntax error on "2e+f32" - lexes ":!" lexes ":!" - lexes "-1234" lexes "-1234" - says syntax error on "0o12345671234567_12345671234567_i8" says syntax error on "0o12345671234567_12345671234567_i8" - says syntax error on "4f65" says syntax error on "4f65" - lexes '\0' lexes '\0' - lexes "\x12" lexes "\x12" - lexes "@@foo" lexes "@@foo" - lexes "<<" lexes "<<" - lexes "extend" lexes "extend" - lexes "if" lexes "if" - lexes "~" lexes "~" - lexes "lib" lexes "lib" - says syntax error on "4f22" says syntax error on "4f22" - says syntax error on "-1_u32" says syntax error on "-1_u32" - says syntax error on "9999999999999999999_i32" says syntax error on "9999999999999999999_i32" - lexes "0🔮" lexes "0🔮" - lexes "||=" lexes "||=" - lexes "170141183460469231731687303715884105727_i128" lexes "170141183460469231731687303715884105727_i128" - lexes "::" lexes "::" - lexes "fun" lexes "fun" - lexes "1i128" lexes "1i128" - lexes "+1.0" lexes "+1.0" - lexes "0.5" lexes "0.5" - lexes "-" lexes "-" - lexes "0x100000000" lexes "0x100000000" - lexes symbol followed by == lexes symbol followed by == - lexes "-1" lexes "-1" - lexes "elsif?" lexes "elsif?" - lexes ":===" lexes ":===" - lexes ":^" lexes ":^" - lexes "offsetof" lexes "offsetof" - lexes "&-=" lexes "&-=" - lexes "@foo" lexes "@foo" - says syntax error on "\"\\xz\"" says syntax error on "\"\\xz\"" - lexes "2147483648.foo" lexes "2147483648.foo" - lexes '\t' lexes '\t' - lexes "false!" lexes "false!" - lexes "return" lexes "return" - says syntax error on "'\\uDFFF'" says syntax error on "'\\uDFFF'" - lexes "|=" lexes "|=" - lexes "break!" lexes "break!" - says syntax error on "-0u64" says syntax error on "-0u64" - lexes "/" lexes "/" - says syntax error on "'\\u{D800}'" says syntax error on "'\\u{D800}'" - lexes "false?" lexes "false?" - lexes "uninitialized" lexes "uninitialized" - says syntax error on "0xFF_i8" says syntax error on "0xFF_i8" - lexes "annotation" lexes "annotation" - lexes "0i32" lexes "0i32" - lexes "nil!" lexes "nil!" - lexes "responds_to?" lexes "responds_to?" - lexes "1i64" lexes "1i64" - says syntax error on "0b100000000000000000000000000000000i32" says syntax error on "0b100000000000000000000000000000000i32" - lexes "yield?" lexes "yield?" - says syntax error on "0b10000000_i8" says syntax error on "0b10000000_i8" - lexes "//=" lexes "//=" - lexes ":<" lexes ":<" - lexes "1i64hello" lexes "1i64hello" - lexes "9223372036854775808" lexes "9223372036854775808" - lexes "def!" lexes "def!" - lexes "while!" lexes "while!" - doesn't raise if many slash r with slash n doesn't raise if many slash r with slash n - says syntax error on "10e_10" says syntax error on "10e_10" - lexes "+1_i128" lexes "+1_i128" - lexes "2147483648" lexes "2147483648" - lexes "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_u128" lexes "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_u128" - lexes "begin" lexes "begin" - lexes "with_underscores" lexes "with_underscores" - says syntax error on "0_12" says syntax error on "0_12" - lexes ":*" lexes ":*" - lexes "1.0" lexes "1.0" - says syntax error on "-1_u8" says syntax error on "-1_u8" - says syntax error on "-1_u64" says syntax error on "-1_u64" - lexes "1i64" lexes "1i64" - lexes "+1234" lexes "+1234" - says syntax error on "\"\\400\"" says syntax error on "\"\\400\"" - lexes "1u16" lexes "1u16" - lexes "0x7fffffff_i32" lexes "0x7fffffff_i32" - lexes space after char lexes space after char - lexes "begin?" lexes "begin?" - says syntax error on "4.0_u32" says syntax error on "4.0_u32" - lexes "<" lexes "<" - lexes "\n\n\n" lexes "\n\n\n" - lexes "<<=" lexes "<<=" - says syntax error on "4294967296_u32" says syntax error on "4294967296_u32" - lexes "**=" lexes "**=" - says syntax error on "\"hi\\" says syntax error on "\"hi\\" - lexes "end!" lexes "end!" - lexes "10000000000000000000_u64" lexes "10000000000000000000_u64" - lexes "1_i64" lexes "1_i64" - lexes "1234" lexes "1234" - says syntax error on "4i22" says syntax error on "4i22" - lexes "+1.0f32" lexes "+1.0f32" - lexes "0b1000000000000000000000000000000000000000000000000000000000000000" lexes "0b1000000000000000000000000000000000000000000000000000000000000000" - says syntax error on "01_i64" says syntax error on "01_i64" - lexes "&&=" lexes "&&=" - lexes "include" lexes "include" - lexes "0o40000000000" lexes "0o40000000000" - lexes ":-" lexes ":-" - lexes "2_e2" lexes "2_e2" - lexes "of" lexes "of" - lexes "-0xFFFF" lexes "-0xFFFF" - lexes ":%" lexes ":%" - lexes ":&*" lexes ":&*" - lexes "is_a?" lexes "is_a?" - lexes "1u128" lexes "1u128" - lexes ">>=" lexes ">>=" - lexes "-1.0f32" lexes "-1.0f32" - lexes "://" lexes "://" - lexes "nil?" lexes "nil?" - says syntax error on "0o1234567123456712345671234567u64" says syntax error on "0o1234567123456712345671234567u64" - lexes '\b' lexes '\b' - lexes ":!=" lexes ":!=" - lexes "0o17777777777_i32" lexes "0o17777777777_i32" - lexes "1.0hello" lexes "1.0hello" - lexes "$foo123" lexes "$foo123" - says syntax error on "\"\\x1z\"" says syntax error on "\"\\x1z\"" - lexes "0xabcdef" lexes "0xabcdef" - lexes "break?" lexes "break?" - says syntax error on "0o73_f64" says syntax error on "0o73_f64" - lexes "$1" lexes "$1" - lexes "return!" lexes "return!" - lexes "$1?" lexes "$1?" - lexes __DIR__ lexes __DIR__ - lexes "1.2e+23_f32" lexes "1.2e+23_f32" - lexes "0_i32" lexes "0_i32" - lexes != after identifier (#4815) lexes != after identifier (#4815) - lexes "0b11111111111111111111111111111111" lexes "0b11111111111111111111111111111111" - lexes "until" lexes "until" - says syntax error on "$01" says syntax error on "$01" - lexes "macro" lexes "macro" - lexes __FILE__ lexes __FILE__ - says syntax error on "'\\u{DFFF}'" says syntax error on "'\\u{DFFF}'" - lexes "," lexes "," - lexes "{%" lexes "{%" - lexes "-0x80000000000000000000000000000000_i128" lexes "-0x80000000000000000000000000000000_i128" - lexes "|" lexes "|" - says syntax error on "'\\" says syntax error on "'\\" - lexes "12341234🔮" lexes "12341234🔮" - lexes ":かたな" lexes ":かたな" - lexes "next?" lexes "next?" - says syntax error on "18446744073709551616_u64" says syntax error on "18446744073709551616_u64" - says syntax error on "0x10000_0000_0000_0000" says syntax error on "0x10000_0000_0000_0000" - lexes "enum" lexes "enum" - says syntax error on ":\"foo" says syntax error on ":\"foo" - lexes "\8" lexes "\8" - says syntax error on "0b100000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000" says syntax error on "0b100000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000" - lexes regex after \r\n lexes regex after \r\n - lexes "&-@foo" lexes "&-@foo" - says syntax error on "4F32" says syntax error on "4F32" - lexes "\n" lexes "\n" - lexes float then zero (bug) lexes float then zero (bug) - lexes "0xffffffff" lexes "0xffffffff" - lexes '\n' lexes '\n' - lexes "0b001111111111111111111111111111111111111111111111111111111111111111" lexes "0b001111111111111111111111111111111111111111111111111111111111111111" - lexes "with_1" lexes "with_1" - lexes ":<=" lexes ":<=" - lexes "1_i16" lexes "1_i16" - lexes "0b1_i64" lexes "0b1_i64" - says syntax error on "4i3" says syntax error on "4i3" - says syntax error on "'\\u{}'" says syntax error on "'\\u{}'" - says syntax error on "0b🔮" says syntax error on "0b🔮" - lexes "do?" lexes "do?" - says syntax error on "-0x80000000000000000000000000000001" says syntax error on "-0x80000000000000000000000000000001" - says syntax error on "-0x80000000000000000000000000000000" says syntax error on "-0x80000000000000000000000000000000" - lexes "9223372036854775807" lexes "9223372036854775807" - lexes "\t" lexes "\t" - says syntax error on "4F64" says syntax error on "4F64" - lexes "if!" lexes "if!" - lexes "true!" lexes "true!" - lexes "<=>" lexes "<=>" - lexes "if?" lexes "if?" - lexes "0x00ffffffffffffffff" lexes "0x00ffffffffffffffff" - lexes "+0xFFFF" lexes "+0xFFFF" - lexes "-0o123" lexes "-0o123" - lexes "&=" lexes "&=" - says syntax error on "0b11_f32" says syntax error on "0b11_f32" - lexes "&+" lexes "&+" - says syntax error on "-.42" says syntax error on "-.42" - says syntax error on "'\\uD800'" says syntax error on "'\\uD800'" - says syntax error on "1__1" says syntax error on "1__1" - lexes symbol with backslash (#2187) lexes symbol with backslash (#2187) - lexes "0o1000000000000000000000" lexes "0o1000000000000000000000" - lexes "}" lexes "}" - lexes "rescue" lexes "rescue" - lexes "-@foo" lexes "-@foo" - lexes "fooBar" lexes "fooBar" - lexes "module" lexes "module" - lexes ":!~" lexes ":!~" - lexes "unless!" lexes "unless!" - lexes "&*=" lexes "&*=" - lexes "_" lexes "_" - says syntax error on "0123" says syntax error on "0123" - lexes __LINE__ lexes __LINE__ - says syntax error on "0o1000000000000000000000i64" says syntax error on "0o1000000000000000000000i64" - lexes "9223372036854775808_i128" lexes "9223372036854775808_i128" - lexes "=>" lexes "=>" - says syntax error on "\r1" says syntax error on "\r1" - lexes "!" lexes "!" - says syntax error on "4u33" says syntax error on "4u33" - lexes "1.2e+23" lexes "1.2e+23" - says syntax error on ":+1" says syntax error on ":+1" - says syntax error on "2e+_2" says syntax error on "2e+_2" - lexes ":+" lexes ":+" - lexes "$23?" lexes "$23?" - lexes "unless" lexes "unless" - lexes "0o123_i64" lexes "0o123_i64" - lexes "-1_i128" lexes "-1_i128" - lexes ":" lexes ":" - says syntax error on "2e+@foo" says syntax error on "2e+@foo" - says syntax error on "4u3" says syntax error on "4u3" - lexes ":foo?" lexes ":foo?" - lexes "0x10000_0000_0000_0000_i128" lexes "0x10000_0000_0000_0000_i128" - says syntax error on "-9223372036854775809" says syntax error on "-9223372036854775809" - says syntax error on "0x1afafafafafafafafafafaf" says syntax error on "0x1afafafafafafafafafafaf" - lexes "*=" lexes "*=" - lexes "asm" lexes "asm" - says syntax error on "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" says syntax error on "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - lexes "1u32" lexes "1u32" - lexes "1_u128" lexes "1_u128" - invalid byte sequence invalid byte sequence - lexes ":>>" lexes ":>>" - lexes "100_000" lexes "100_000" - lexes "1.0f32" lexes "1.0f32" - lexes "in" lexes "in" - says syntax error on "0b100000000000000000000000000000000000000000000000000000000000000000" says syntax error on "0b100000000000000000000000000000000000000000000000000000000000000000" - lexes "!@foo" lexes "!@foo" - lexes "&+@foo" lexes "&+@foo" - says syntax error on "-0e_12" says syntax error on "-0e_12" - lexes ":~" lexes ":~" - lexes "0o17777777777" lexes "0o17777777777" - says syntax error on "0o200000_00000000_00000000_u64" says syntax error on "0o200000_00000000_00000000_u64" - says syntax error on "0o7777777777777777777777777777777777777777777777777" says syntax error on "0o7777777777777777777777777777777777777777777777777" - lexes "18446744073709551616_u128" lexes "18446744073709551616_u128" - lexes "1e23f64" lexes "1e23f64" - lexes "❨╯°□°❩╯︵┻━┻" lexes "❨╯°□°❩╯︵┻━┻" - lexes "do!" lexes "do!" - says syntax error on "32768_i16" says syntax error on "32768_i16" - says syntax error on "-9999999999999999999" says syntax error on "-9999999999999999999" - lexes "+=" lexes "+=" - lexes "-0.0f32" lexes "-0.0f32" - lexes "0o001777777777777777777777" lexes "0o001777777777777777777777" - says syntax error on "0b1000000000000000000000000000000000000000000000000000000000000000i64" says syntax error on "0b1000000000000000000000000000000000000000000000000000000000000000i64" - lexes '\r' lexes '\r' - says syntax error on "'\\1'" says syntax error on "'\\1'" - lexes "-2147483649" lexes "-2147483649" - lexes "!~" lexes "!~" - lexes ".." lexes ".." - lexes "protected" lexes "protected" - lexes ">" lexes ">" - says syntax error on "/\\" says syntax error on "/\\" - lexes "out" lexes "out" - says syntax error on "18446744073709551616_i32" says syntax error on "18446744073709551616_i32" - lexes "^=" lexes "^=" - lexes "case" lexes "case" - lexes "1e-23" lexes "1e-23" - lexes "typeof" lexes "typeof" - lexes "-0.5" lexes "-0.5" - lexes "type" lexes "type" - lexes "[" lexes "[" - lexes "1_u64" lexes "1_u64" - says syntax error on "-2147483649_i32" says syntax error on "-2147483649_i32" - lexes "..." lexes "..." - lexes "something" lexes "something" - says syntax error on "2e+-2" says syntax error on "2e+-2" - lexes "$10" lexes "$10" - lexes "(" lexes "(" - says syntax error on "2e+" says syntax error on "2e+" - lexes "1e+23" lexes "1e+23" - lexes "/=" lexes "/=" - lexes "0e40" lexes "0e40" - lexes "as?" lexes "as?" - lexes "-9223372036854775808" lexes "-9223372036854775808" - says syntax error on "0o200_i8" says syntax error on "0o200_i8" - lexes "0xffffffffffffffff" lexes "0xffffffffffffffff" - lexes "\xFF" lexes "\xFF" - lexes "union" lexes "union" - lexes "verbatim" lexes "verbatim" - lexes "\4" lexes "\4" - lexes "[]=" lexes "[]=" - lexes "self" lexes "self" - lexes "2e01" lexes "2e01" - lexes regex after \n lexes regex after \n - lexes "0x7fffffffffffffff" lexes "0x7fffffffffffffff" - lexes "$_foo" lexes "$_foo" - lexes "else!" lexes "else!" - says syntax error on "-0_u64" says syntax error on "-0_u64" - lexes "1_000" lexes "1_000" - says syntax error on "0xfffffffffffffffff_u64" says syntax error on "0xfffffffffffffffff_u64" - lexes "1.0f32hello" lexes "1.0f32hello" - lexes comment at the end lexes comment at the end - lexes "0f32" lexes "0f32" - lexes '\v' lexes '\v' - lexes '\f' lexes '\f' - lexes "\110" lexes "\110" - says syntax error on "2e" says syntax error on "2e" - lexes "yield" lexes "yield" - lexes "+0o123" lexes "+0o123" - lexes "%" lexes "%" - says syntax error on "1_.1" says syntax error on "1_.1" - lexes ":[]=" lexes ":[]=" - lexes char with unicode codepoint and curly with six hex digits lexes char with unicode codepoint and curly with six hex digits - says syntax error on ".42" says syntax error on ".42" - lexes "elsif" lexes "elsif" - lexes "-1_i64" lexes "-1_i64" - lexes "ensure" lexes "ensure" - lexes "0b1111111111111111111111111111111_i32" lexes "0b1111111111111111111111111111111_i32" - lexes space after keyword lexes space after keyword - lexes ":foo!" lexes ":foo!" - lexes "return?" lexes "return?" - lexes "<=" lexes "<=" - lexes "else" lexes "else" - says syntax error on "9223372036854775808_i64" says syntax error on "9223372036854775808_i64" - lexes '\a' lexes '\a' - says syntax error on "4u12" says syntax error on "4u12" - lexes "1_i8" lexes "1_i8" - lexes "0x80000001" lexes "0x80000001" - lexes "1i128hello" lexes "1i128hello" - lexes "+" lexes "+" - lexes "@[" lexes "@[" - says syntax error on "118446744073709551616" says syntax error on "118446744073709551616" - lexes ":&+" lexes ":&+" - lexes 'a' lexes 'a' - lexes "-0b1010" lexes "-0b1010" - lexes "-0x80000001" lexes "-0x80000001" - says syntax error on "00" says syntax error on "00" - lexes "]" lexes "]" - says syntax error on "'\\u{110000}'" says syntax error on "'\\u{110000}'" - lexes "0xffff_ffff_ffff_ffff" lexes "0xffff_ffff_ffff_ffff" - lexes "^" lexes "^" - says syntax error on "128_i8" says syntax error on "128_i8" - lexes ":<=>" lexes ":<=>" - lexes "0o177777_77777777_77777777" lexes "0o177777_77777777_77777777" - says syntax error on "0b100000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000_u64" says syntax error on "0b100000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000_u64" - lexes ">=" lexes ">=" - lexes "0x3🔮" lexes "0x3🔮" - lexes "sizeof" lexes "sizeof" - lexes "1_u32" lexes "1_u32" - says syntax error on "-170141183460469231731687303715884105729" says syntax error on "-170141183460469231731687303715884105729" - says syntax error on "0o1234567123456712345671234567" says syntax error on "0o1234567123456712345671234567" - says syntax error on "0b100000000000000000000000000000000000000000000000000000000000000000u64" says syntax error on "0b100000000000000000000000000000000000000000000000000000000000000000u64" - says syntax error on "0o200000_00000000_00000000" says syntax error on "0o200000_00000000_00000000" - lexes "0o1000000000000000000000" lexes "0o1000000000000000000000" - lexes ":>=" lexes ":>=" - lexes "when" lexes "when" - lexes "14146167139683460000" lexes "14146167139683460000" - lexes "1_234.567_890" lexes "1_234.567_890" - lexes "1e23" lexes "1e23" - says syntax error on "-0o7777777777777777777777777777777777777777777777777" says syntax error on "-0o7777777777777777777777777777777777777777777777777" - lexes ":==" lexes ":==" - lexes "else?" lexes "else?" - lexes "class!" lexes "class!" - lexes "ident" lexes "ident" - lexes "[]?" lexes "[]?" - lexes "alias" lexes "alias" - says syntax error on "4u65" says syntax error on "4u65" - lexes char with unicode codepoint lexes char with unicode codepoint - lexes "0b0_1" lexes "0b0_1" - lexes "0i8" lexes "0i8" - lexes symbol followed by != lexes symbol followed by != - lexes "0b111111111111111111111111111111111111111111111111111111111111111" lexes "0b111111111111111111111111111111111111111111111111111111111111111" - lexes ":&**" lexes ":&**" - lexes "as" lexes "as" - lexes "false" lexes "false" - lexes "\1" lexes "\1" - lexes "118446744073709551616_u128" lexes "118446744073709551616_u128" - lexes "+1_i64" lexes "+1_i64" - lexes "0_f32" lexes "0_f32" - lexes "0b1111111111111111111111111111111" lexes "0b1111111111111111111111111111111" - lexes "0xFFFFFFFF" lexes "0xFFFFFFFF" - lexes "1E40" lexes "1E40" - lexes "instance_sizeof" lexes "instance_sizeof" - lexes comment and token lexes comment and token - lexes "&-" lexes "&-" - lexes "=" lexes "=" - lexes "pointerof" lexes "pointerof" - lexes "&" lexes "&" - says syntax error on "-9223372036854775809_i64" says syntax error on "-9223372036854775809_i64" - lexes "+0.5" lexes "+0.5" - lexes "struct" lexes "struct" - lexes char with unicode codepoint and curly lexes char with unicode codepoint and curly - lexes "1.2e+23_f64" lexes "1.2e+23_f64" - lexes "*" lexes "*" - lexes "1f32" lexes "1f32" - says syntax error on "'\\uFEDZ'" says syntax error on "'\\uFEDZ'" - lexes ">>" lexes ">>" - says syntax error on "-99999999999999999999" says syntax error on "-99999999999999999999" - lexes "&*" lexes "&*" - lexes ":&" lexes ":&" - says syntax error on "0o40000000000i32" says syntax error on "0o40000000000i32" - lexes "170141183460469231731687303715884105728_u128" lexes "170141183460469231731687303715884105728_u128" - doesn't raise if slash r with slash n doesn't raise if slash r with slash n - lexes "?" lexes "?" - says syntax error on "0x1afafafafafafafafafafafu64" says syntax error on "0x1afafafafafafafafafafafu64" - lexes ":>" lexes ":>" - lexes "||" lexes "||" - lexes dot and ident lexes dot and ident - lexes "." lexes "." - lexes "-1.0" lexes "-1.0" - lexes ";" lexes ";" - lexes "require" lexes "require" - says syntax error on "0x8000000000000000i64" says syntax error on "0x8000000000000000i64" - lexes ":/" lexes ":/" - says syntax error on "0b_10" says syntax error on "0b_10" - lexes "with" lexes "with" - lexes "0o777777777777777777777" lexes "0o777777777777777777777" - lexes "class" lexes "class" - lexes "abstract" lexes "abstract" - lexes "$?" lexes "$?" - lexes "unless?" lexes "unless?" - lexes ":=~" lexes ":=~" - lexes "-=" lexes "-=" - says syntax error on "340282366920938463463374607431768211456" says syntax error on "340282366920938463463374607431768211456" - lexes "&&" lexes "&&" - lexes "def?" lexes "def?" - lexes "+0" lexes "+0" - lexes "1_234.567_890_f32" lexes "1_234.567_890_f32" - lexes "&+=" lexes "&+=" - says syntax error on "/foo" says syntax error on "/foo" - lexes "1f64" lexes "1f64" - says syntax error on "-1_u16" says syntax error on "-1_u16" - lexes "0o123" lexes "0o123" - lexes ")" lexes ")" - lexes ":foo=" lexes ":foo=" - says syntax error on "-1_u128" says syntax error on "-1_u128" - lexes "!=" lexes "!=" - lexes "1.0f64" lexes "1.0f64" - says syntax error on "2ef32" says syntax error on "2ef32" - lexes ":|" lexes ":|" - says syntax error on "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" says syntax error on "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - lexes "0b1010" lexes "0b1010" - lexes "" lexes "" - lexes "true?" lexes "true?" - says syntax error on "2e8i8" says syntax error on "2e8i8" - lexes utf-8 multibyte char lexes utf-8 multibyte char - lexes '\0' lexes '\0' - says syntax error on "4f33" says syntax error on "4f33" - lexes "do" lexes "do" - lexes "+@foo" lexes "+@foo" - says syntax error on "2147483648_i32" says syntax error on "2147483648_i32" - lexes "elsif!" lexes "elsif!" - lexes "0x8000000000000000" lexes "0x8000000000000000" - says syntax error on "4u22" says syntax error on "4u22" - lexes "select" lexes "select" - lexes char with unicode codepoint and curly with zeros lexes char with unicode codepoint and curly with zeros - lexes "1.0f32" lexes "1.0f32" - lexes ":foo" lexes ":foo" - lexes "end" lexes "end" - says syntax error on "-32769_i16" says syntax error on "-32769_i16" - lexes "1_u8" lexes "1_u8" - lexes "[]" lexes "[]" - lexes "1i8" lexes "1i8" - says syntax error on "4i33" says syntax error on "4i33" - says syntax error on "0x1afafafafafafafafafafafi32" says syntax error on "0x1afafafafafafafafafafafi32" - says syntax error on "0F32" says syntax error on "0F32" - lexes "0xFFFF_u64" lexes "0xFFFF_u64" - lexes "0o37777777777" lexes "0o37777777777" - lexes "$~" lexes "$~" - lexes "1.foo" lexes "1.foo" - lexes "1u8" lexes "1u8" - lexes ":<<" lexes ":<<" - lexes "%}" lexes "%}" - says syntax error on "-11111111111111111111" says syntax error on "-11111111111111111111" - lexes "$FOO" lexes "$FOO" - says syntax error on "4i12" says syntax error on "4i12" - lexes " " lexes " " - lexes "1_i32" lexes "1_i32" - lexes ":[]?" lexes ":[]?" - lexes "=~" lexes "=~" - says syntax error on "-999999999999999999999999999999999999999" says syntax error on "-999999999999999999999999999999999999999" - lexes "%=" lexes "%=" - lexes "class?" lexes "class?" - lexes "foo?" lexes "foo?" - lexes '\'' lexes '\'' - lexes "===" lexes "===" - lexes "nil" lexes "nil" - lexes heredoc start lexes heredoc start - lexes "end?" lexes "end?" - lexes "1_u16" lexes "1_u16" - lexes "0x3fffffffffffffff" lexes "0x3fffffffffffffff" - lexes "Foo" lexes "Foo" - lexes "1_i64" lexes "1_i64" - lexes symbol followed by === lexes symbol followed by === - says syntax error on "256_u8" says syntax error on "256_u8" - lexes "1e+23_f32" lexes "1e+23_f32" - says syntax error on "118446744073709551616_u64" says syntax error on "118446744073709551616_u64" - lexes "+1" lexes "+1" - lexes utf-8 char lexes utf-8 char - says syntax error on "4i65" says syntax error on "4i65" - lexes "//" lexes "//" - lexes "-9223372036854775809_i128" lexes "-9223372036854775809_i128" - lexes "0xFFFF" lexes "0xFFFF" - says syntax error on "0x10000_0000_0000_0000_u64" says syntax error on "0x10000_0000_0000_0000_u64" - lexes not instance var lexes not instance var - lexes "1_i128" lexes "1_i128" - says syntax error on "-129_i8" says syntax error on "-129_i8" - lexes "18446744073709551615" lexes "18446744073709551615" - lexes "&**" lexes "&**" - lexes "$foo" lexes "$foo" - lexes "1hello" lexes "1hello" - lexes "\10" lexes "\10" - lexes "0x7fffffff" lexes "0x7fffffff" - lexes "-0xFFFFFFFF" lexes "-0xFFFFFFFF" - lexes ":[]" lexes ":[]" - lexes "0b11111111_11111111_11111111_11111111_11111111_11111111_11111111_11111111" lexes "0b11111111_11111111_11111111_11111111_11111111_11111111_11111111_11111111" + doesn't crash if def body ends up with no type (#12219) doesn't crash if def body ends up with no type (#12219) +Crystal + normalize_path + assert assert + assert assert + assert assert + assert assert +Semantic: enum + errors if defining initialize in Enum (#7238) errors if defining initialize in Enum (#7238) + errors on enum without members (#3447) errors on enum without members (#3447) + creates enum from value creates enum from value + errors if declaring type inside enum (#3127) errors if declaring type inside enum (#3127) + marks as flags with base type (#2185) marks as flags with base type (#2185) + gives error on signed flags enum overflow after a member with value gives error on signed flags enum overflow after a member with value + attaches annotation to enum method (#6690) attaches annotation to enum method (#6690) + gives error on enum overflow after a member with value gives error on enum overflow after a member with value + has All value when defined as @[Flags] has All value when defined as @[Flags] + reopens enum with same base type (1) reopens enum with same base type (1) + reopens enum without base type (1) reopens enum without base type (1) + doesn't error when defining a flags enum in a lib with None or All doesn't error when defining a flags enum in a lib with None or All + allows redefining None to 0 for @[Flags] enum allows redefining None to 0 for @[Flags] enum + can redefine Enum.new can redefine Enum.new + can use macro for inside enum can use macro for inside enum + types enum types enum + doesn't error when defining a method for an enum with flags doesn't error when defining a method for an enum with flags + gives error on flags enum overflow gives error on flags enum overflow + errors if reopen and tries to define constant errors if reopen and tries to define constant + errors if invoking private enum method errors if invoking private enum method + errors if using a name twice errors if using a name twice + defines method on enum defines method on enum + disallows implicit conversion of int to enum disallows implicit conversion of int to enum + reopens enum without base type (2) reopens enum without base type (2) + errors if reopen but not enum errors if reopen but not enum + doesn't break assigned values in enum flags when a member has value 0 (#5767) doesn't break assigned values in enum flags when a member has value 0 (#5767) + reopens an enum reopens an enum + doesn't overflow on flags member (#7877) doesn't overflow on flags member (#7877) + errors if inheriting Enum (#3592) errors if inheriting Enum (#3592) + errors if enum value is too big for type (#678) errors if enum value is too big for type (#678) + doesn't overflow when going from negative to zero (#7874) doesn't overflow when going from negative to zero (#7874) + errors if declaring type inside enum, nested (#3127) errors if declaring type inside enum, nested (#3127) + doesn't visit enum members generated by macros twice (#10104) doesn't visit enum members generated by macros twice (#10104) + can use macro expression inside enum can use macro expression inside enum + defines class method on enum defines class method on enum + errors if using instance var inside enum (#991) errors if using instance var inside enum (#991) + finds method in enum type finds method in enum type + errors if reopening enum with different base type (2) errors if reopening enum with different base type (2) + gives error on enum overflow gives error on enum overflow + gives error on unsigned flags enum overflow after a member with value gives error on unsigned flags enum overflow after a member with value + finds class method in enum type finds class method in enum type + disallows All value for @[Flags] enum disallows All value for @[Flags] enum + types enum value types enum value + has None value when defined as @[Flags] has None value when defined as @[Flags] + reopens enum with same base type (2) reopens enum with same base type (2) + doesn't error when defining a non-flags enum with None or All doesn't error when defining a non-flags enum with None or All + allows class vars in enum allows class vars in enum + disallows redefining None to non-0 for @[Flags] enum disallows redefining None to non-0 for @[Flags] enum + errors if reopening enum with different base type (1) errors if reopening enum with different base type (1) +Semantic: var + declares local variable and assigns wrong type declares local variable and assigns wrong type + declares local variable but doesn't assign it in all branches declares local variable but doesn't assign it in all branches + errors if declaring var that is already declared errors if declaring var that is already declared + types a variable types a variable + declares local variable with value declares local variable with value + reports undefined local variable or method reports undefined local variable or method + reports variable always nil reports variable always nil + parse local variable as method call even if local variable is declared in call arguments parse local variable as method call even if local variable is declared in call arguments + types an assign types an assign + lets type on else side of if with a Bool | Nil union lets type on else side of if with a Bool | Nil union + declares local variable and assigns it with if declares local variable and assigns it with if + types an assign with type declaration types an assign with type declaration + declares local variable and immediately reads it declares local variable and immediately reads it + reports there's no self reports there's no self + errors if reads from underscore errors if reads from underscore + errors if declaring generic type without type vars (with local var) errors if declaring generic type without type vars (with local var) + declares local variable and then assigns it declares local variable and then assigns it + errors if variable already exists errors if variable already exists +Semantic: nilable instance var + says instance var was not initialized in all of the initialize methods, with var declaration says instance var was not initialized in all of the initialize methods, with var declaration + says instance var was used before initialized says instance var was used before initialized + says self was used before instance var was initialized (3) says self was used before instance var was initialized (3) + says self was used before instance var was initialized (2) says self was used before instance var was initialized (2) + says instance var was used before initialized (2) says instance var was used before initialized (2) + says instance var was not initialized in all of the initialize methods says instance var was not initialized in all of the initialize methods + finds type that doesn't initialize instance var (#1222) finds type that doesn't initialize instance var (#1222) + says self was used before instance var was initialized says self was used before instance var was initialized + marks instance var as nilable if assigned inside proc literal marks instance var as nilable if assigned inside proc literal + doesn't consider as nil if initialized with catch-all doesn't consider as nil if initialized with catch-all + marks instance var as nilable if assigned inside captured block (#1696) marks instance var as nilable if assigned inside captured block (#1696) + says instance var was not initialized in all of the initialize methods (2) says instance var was not initialized in all of the initialize methods (2) +Code gen: c union + codegens union property default value 2 codegens union property default value 2 + aligns to the member with biggest align requirements aligns to the member with biggest align requirements + codegens union property setter 1 codegens union property setter 1 + automatically converts numeric union type in field assignment automatically converts numeric union type in field assignment + automatically converts by invoking to_unsafe automatically converts by invoking to_unsafe + codegens union property setter 2 codegens union property setter 2 + codegens union property default value codegens union property default value + builds union setter with fun type builds union setter with fun type + codegens union property setter 2 via pointer codegens union property setter 2 via pointer + codegens struct inside union codegens struct inside union + moves unions around correctly (#12550) moves unions around correctly (#12550) moves unions around correctly (#12550) moves unions around correctly (#12550) moves unions around correctly (#12550) moves unions around correctly (#12550) moves unions around correctly (#12550) moves unions around correctly (#12550) moves unions around correctly (#12550) moves unions around correctly (#12550) + automatically converts numeric type in field assignment automatically converts numeric type in field assignment + codegens assign c union to union codegens assign c union to union + reads union instance var reads union instance var + does to_s does to_s does to_s does to_s does to_s does to_s does to_s does to_s does to_s does to_s + codegens union property setter 1 via pointer codegens union property setter 1 via pointer + fills union type to the max size fills union type to the max size +Code gen: named tuple + codegens tuple nilable index (1) codegens tuple nilable index (1) + upcasts named tuple inside compatible named tuple upcasts named tuple inside compatible named tuple + upcasts named tuple inside union to union with compatible named tuple upcasts named tuple inside union to union with compatible named tuple + passes named tuple to def passes named tuple to def + downcasts union inside tuple to value (#3907) downcasts union inside tuple to value (#3907) + codegens tuple nilable index (3) codegens tuple nilable index (3) + upcasts named tuple union to compatible named tuple upcasts named tuple union to compatible named tuple + does to_s for NamedTuple class does to_s for NamedTuple class does to_s for NamedTuple class does to_s for NamedTuple class does to_s for NamedTuple class does to_s for NamedTuple class does to_s for NamedTuple class does to_s for NamedTuple class does to_s for NamedTuple class does to_s for NamedTuple class + assigns two same-size named tuple types to a same var (#3132) assigns two same-size named tuple types to a same var (#3132) + allows named tuple covariance allows named tuple covariance + merges two named tuple types with same keys but different types (1) merges two named tuple types with same keys but different types (1) + provides T as a named tuple literal provides T as a named tuple literal + assigns named tuple inside union to union with compatible named tuple assigns named tuple inside union to union with compatible named tuple + codegens tuple nilable index (2) codegens tuple nilable index (2) + assigns named tuple to compatible named tuple assigns named tuple to compatible named tuple + gets keys at compile time (1) gets keys at compile time (1) + doesn't crash when overload doesn't match doesn't crash when overload doesn't match + gets keys at compile time (2) gets keys at compile time (2) + codegens union of tuple of float with tuple of tuple of float codegens union of tuple of float with tuple of tuple of float + assigns named tuple union to compatible named tuple assigns named tuple union to compatible named tuple + accesses T and creates instance from it accesses T and creates instance from it + codegens tuple index another order codegens tuple index another order + doesn't error if NamedTuple includes a non-generic module (#10380) doesn't error if NamedTuple includes a non-generic module (#10380) + gets size at compile time gets size at compile time + merges two named tuple types with same keys but different types (2) merges two named tuple types with same keys but different types (2) + codegens tuple index codegens tuple index +Crystal::Repl::Interpreter + tuple + interprets tuple metaclass range indexer interprets tuple metaclass range indexer + interprets tuple literal of different types (1) interprets tuple literal of different types (1) + discards tuple access discards tuple access + does tuple indexer on union does tuple indexer on union + unpacks tuple in block arguments unpacks tuple in block arguments + interprets tuple range indexer interprets tuple range indexer + discards tuple (#12383) discards tuple (#12383) + interprets tuple metaclass indexer interprets tuple metaclass indexer + interprets tuple literal and access by known index interprets tuple literal and access by known index + extends sign when doing to_i32 extends sign when doing to_i32 + interprets tuple literal of different types (2) interprets tuple literal of different types (2) + interprets tuple range indexer (2) interprets tuple range indexer (2) + interprets tuple self interprets tuple self +Crystal::Repl::Interpreter + class vars + interprets class var without initializer interprets class var without initializer + finds self in class var initializer (#12439) finds self in class var initializer (#12439) + interprets class var for virtual type interprets class var for virtual type + interprets class var with initializer interprets class var with initializer + reads class var initializer with union (#12633) reads class var initializer with union (#12633) + does class var initializer with union (#12633) does class var initializer with union (#12633) + interprets class var for virtual metaclass type interprets class var for virtual metaclass type +Compiler + runs subcommand in preference to a filename runs subcommand in preference to a filename runs subcommand in preference to a filename runs subcommand in preference to a filename runs subcommand in preference to a filename runs subcommand in preference to a filename runs subcommand in preference to a filename runs subcommand in preference to a filename runs subcommand in preference to a filename runs subcommand in preference to a filename + compiles a file compiles a file compiles a file compiles a file compiles a file compiles a file compiles a file compiles a file compiles a file compiles a file + treats all arguments post-filename as program arguments treats all arguments post-filename as program arguments + has a valid version has a valid version +Parser warnings + warns on missing space before colon + in anonymous block param type restriction in anonymous block param type restriction + in type declaration in type declaration + in return type restriction in return type restriction + in block param type restriction in block param type restriction + warns on suffix-less UInt64 literals > Int64::MAX warns on suffix-less UInt64 literals > Int64::MAX +Semantic: recursive struct check + errors on recursive struct inside module errors on recursive struct inside module + errors on recursive abstract struct through module (#11384) errors on recursive abstract struct through module (#11384) + errors on private recursive type errors on private recursive type + detects recursive generic struct through module (#4720) detects recursive generic struct through module (#4720) + detects recursive struct through module detects recursive struct through module + errors on mutually recursive struct errors on mutually recursive struct + errors on recursive struct through named tuple errors on recursive struct through named tuple + errors on recursive generic struct inside module errors on recursive generic struct inside module + errors on recursive struct through recursive alias (#4454) (#4455) errors on recursive struct through recursive alias (#4454) (#4455) + errors on recursive struct through tuple errors on recursive struct through tuple + detects recursive struct through inheritance (#3071) detects recursive struct through inheritance (#3071) + detects recursive generic struct through generic module (#4720) detects recursive generic struct through generic module (#4720) + errors on recursive struct errors on recursive struct Semantic: virtual - types method call of virtual type types method call of virtual type - reports undefined method in subclass of abstract class reports undefined method in subclass of abstract class - reports no matches for virtual type reports no matches for virtual type - types class and subclass as one type types class and subclass as one type - dispatches virtual method with overload dispatches virtual method with overload - types method call of virtual type with override types method call of virtual type with override + restricts with union and doesn't merge to super type restricts with union and doesn't merge to super type doesn't check methods on abstract classes doesn't check methods on abstract classes - doesn't check methods on abstract classes 2 doesn't check methods on abstract classes 2 + checks cover in every concrete subclass checks cover in every concrete subclass types class and two subclasses types class and two subclasses - types instance var as virtual when using type declaration and has subclasses types instance var as virtual when using type declaration and has subclasses - checks method in every concrete subclass but method in Object checks method in every concrete subclass but method in Object - dispatches virtual method dispatches virtual method - automatically does virtual for generic type if there are subclasses automatically does virtual for generic type if there are subclasses - finds overloads of union of virtual, class and nil finds overloads of union of virtual, class and nil + types method call of virtual type types method call of virtual type reports missing cover for subclass of abstract class reports missing cover for subclass of abstract class - doesn't check cover for subclasses doesn't check cover for subclasses - removes instance var from subclasses removes instance var from subclasses - checks cover in every concrete subclass checks cover in every concrete subclass - types two subclasses types two subclasses - types two classes without a shared virtual types two classes without a shared virtual works with restriction alpha works with restriction alpha - types inspect types inspect - uses virtual type as generic type if class is abstract uses virtual type as generic type if class is abstract - restricts with union and doesn't merge to super type restricts with union and doesn't merge to super type + reports undefined method in subclass of abstract class reports undefined method in subclass of abstract class + types two subclasses types two subclasses doesn't check cover for abstract classes doesn't check cover for abstract classes - finds overloads of union of virtual, class and nil with abstract class finds overloads of union of virtual, class and nil with abstract class + removes instance var from subclasses removes instance var from subclasses + automatically does virtual for generic type if there are subclasses automatically does virtual for generic type if there are subclasses uses virtual type as generic type if class is abstract even in union uses virtual type as generic type if class is abstract even in union checks cover in every concrete subclass 3 checks cover in every concrete subclass 3 + dispatches virtual method dispatches virtual method + types two classes without a shared virtual types two classes without a shared virtual + types class and subclass as one type types class and subclass as one type + reports no matches for virtual type reports no matches for virtual type + dispatches virtual method with overload dispatches virtual method with overload + types inspect types inspect + finds overloads of union of virtual, class and nil finds overloads of union of virtual, class and nil + uses virtual type as generic type if class is abstract uses virtual type as generic type if class is abstract + types instance var as virtual when using type declaration and has subclasses types instance var as virtual when using type declaration and has subclasses + types method call of virtual type with override types method call of virtual type with override + doesn't check methods on abstract classes 2 doesn't check methods on abstract classes 2 + doesn't check cover for subclasses doesn't check cover for subclasses checks cover in every concrete subclass 2 checks cover in every concrete subclass 2 -Crystal::JSONHierarchyPrinter - works works -Semantic: metaclass - types Reference metaclass types Reference metaclass - types Class class types Class class - types generic metaclass superclass types generic metaclass superclass - types Object class types Object class - types generic module metaclass types generic module metaclass - can't reopen as struct can't reopen as struct - can't reopen as module can't reopen as module - types Object and Class metaclasses types Object and Class metaclasses - subtyping relations between metaclasses - generic modules (1) generic modules (1) - generic classes (1) generic classes (1) - generic classes (2) generic classes (2) - generic modules (3) generic modules (3) - generic modules (2) generic modules (2) - generic classes (3) generic classes (3) - non-generic modules non-generic modules - non-generic classes non-generic classes - virtual metaclass type with virtual type (#12628) virtual metaclass type with virtual type (#12628) - types generic class metaclass types generic class metaclass - types generic instance metaclass superclass types generic instance metaclass superclass - types metaclass superclass types metaclass superclass -Code gen: struct - codegens passing pointerof(struct) to fun codegens passing pointerof(struct) to fun - automatically converts by invoking to_unsafe automatically converts by invoking to_unsafe - automatically converts numeric union type in struct field assignment automatically converts numeric union type in struct field assignment - sets instance var to proc sets instance var to proc sets instance var to proc sets instance var to proc�� sets instance var to proc sets instance var to proc������ sets instance var to proc������ sets instance var to proc�� sets instance var to proc sets instance var to proc - codegens struct get inside struct codegens struct get inside struct - codegens struct access with -> and then . codegens struct access with -> and then . - codegens struct set inside struct codegens struct set inside struct - can access member of uninitialized struct behind type (#8774) can access member of uninitialized struct behind type (#8774) - codegens struct property setter via pointer codegens struct property setter via pointer - codegens set struct value with constant codegens set struct value with constant - builds struct setter with fun type (1) builds struct setter with fun type (1) - automatically converts numeric type in struct field assignment automatically converts numeric type in struct field assignment - automatically converts nil to pointer automatically converts nil to pointer - can access instance var from the outside (#1092) can access instance var from the outside (#1092) - passes struct to method (1) passes struct to method (1) - builds struct setter with fun type (2) builds struct setter with fun type (2) - does to_s does to_s does to_s does to_s does to_s does to_s������������ does to_s�� does to_s�� does to_s does to_s - codegens struct property default value codegens struct property default value - codegens struct property setter codegens struct property setter - codegens struct property setter via pointer codegens struct property setter via pointer - codegens pointer malloc of struct codegens pointer malloc of struct - codegens union inside struct codegens union inside struct - passes struct to method (2) passes struct to method (2) - allows using named arguments for new allows using named arguments for new - codegens assign struct to union codegens assign struct to union - yields struct via -> yields struct via -> + checks method in every concrete subclass but method in Object checks method in every concrete subclass but method in Object + finds overloads of union of virtual, class and nil with abstract class finds overloads of union of virtual, class and nil with abstract class +Semantic: def + reports no overload matches 2 reports no overload matches 2 + errors if return type doesn't match on class method errors if return type doesn't match on class method + errors when default value is incompatible with non-type restriction errors when default value is incompatible with non-type restriction + types a call with an argument uses a new scope types a call with an argument uses a new scope + is ok if returns Int32? with explicit return is ok if returns Int32? with explicit return + types a call with a float types a call with a float + types empty body def types empty body def + allows recursion allows recursion + types getchar with Char types getchar with Char + defines class method defines class method + uses free variable and doesn't conflict with top-level type uses free variable and doesn't conflict with top-level type + lookups methods in super modules lookups methods in super modules + errors if declares def inside if errors if declares def inside if + clones regex literal value (#2384) clones regex literal value (#2384) + says can only defined def on types and self says can only defined def on types and self + types call with union argument types call with union argument + errors if return type doesn't match errors if return type doesn't match + gives correct error for wrong number of arguments for program call inside type (2) (#1024) gives correct error for wrong number of arguments for program call inside type (2) (#1024) + assigns def owner assigns def owner + uses free variable as block return type uses free variable as block return type + types call with global scope types call with global scope + types simple recursion types simple recursion + defines class method with self defines class method with self + allows recursion with arg allows recursion with arg + gives correct error for methods in Class gives correct error for methods in Class + types a call with a double types a call with a double + uses free variable with metaclass and default value uses free variable with metaclass and default value + errors when default value is incompatible with type restriction errors when default value is incompatible with type restriction + uses free variable with metaclass uses free variable with metaclass + types a call with an argument types a call with an argument + calls with default argument calls with default argument + points error at name (#6937) points error at name (#6937) + gives correct error for methods in Class (2) gives correct error for methods in Class (2) + types a call with an int types a call with an int + fixes bug #165 fixes bug #165 + says compile-time type on error says compile-time type on error + errors if trying to declare method on generic class instance errors if trying to declare method on generic class instance + errors when calling two functions with nil type errors when calling two functions with nil type + types putchar with Char types putchar with Char + can't use self in toplevel method can't use self in toplevel method + shows free variables if no overload matches shows free variables if no overload matches + accesses free var of default argument (#1101) accesses free var of default argument (#1101) + reports no block given reports no block given + types mutual recursion types mutual recursion + reports block given reports block given + reports undefined method reports undefined method + types simple recursion 2 types simple recursion 2 + uses free variable uses free variable + types a call with an argument types a call with an argument + reports no overload matches reports no overload matches + doesn't find type in namespace through free var doesn't find type in namespace through free var + types mutual infinite recursion types mutual infinite recursion + gives correct error for wrong number of arguments for program call inside type (#1024) gives correct error for wrong number of arguments for program call inside type (#1024) + errors if return type doesn't match on instance method errors if return type doesn't match on instance method + do not use body for the def type do not use body for the def type +Code gen: not + doesn't crash doesn't crash + codegens not nil codegens not nil + codegens not nilable type (false) codegens not nilable type (false) + codegens not with inlinable value (#6451) codegens not with inlinable value (#6451) + codegens not nilable type (true) codegens not nilable type (true) + codegens not false codegens not false + codegens not true codegens not true + codegens not pointer (true) codegens not pointer (true) + codegens not number codegens not number + codegens not pointer (false) codegens not pointer (false) +Crystal::Playground::AgentInstrumentorTransformer + instrument blocks and single yields instrument blocks and single yields + instrument case statement instrument case statement + instrument if statement instrument if statement + instrument instance variable and class variables reads and writes instrument instance variable and class variables reads and writes + instrument puts with args instrument puts with args + instrument ivar with obj instrument ivar with obj + instrument literals with expression names instrument literals with expression names + instrument assignments in the rhs instrument assignments in the rhs + instrument nested class defs instrument nested class defs + instrument single variables expressions instrument single variables expressions + instrument chained comparisons (#4663) instrument chained comparisons (#4663) + instrument string interpolations instrument string interpolations + instrument multi assignments in the rhs instrument multi assignments in the rhs + instrument exceptions instrument exceptions + instrument single statement var def instrument single statement var def + instrument is_a? expressions instrument is_a? expressions + instrument literals instrument literals + do not instrument class/module declared macro do not instrument class/module declared macro + instrument unless statement instrument unless statement + instrument binary expressions instrument binary expressions + do not instrument macro calls in class do not instrument macro calls in class + instrument while statement instrument while statement + instrument blocks and but non multi yields instrument blocks and but non multi yields + do not instrument records class do not instrument records class + instrument class defs instrument class defs + instrument inside modules instrument inside modules + do not instrument class initializing arguments do not instrument class initializing arguments + do not instrument constants assignments do not instrument constants assignments + do not instrument top level macro calls do not instrument top level macro calls + instrument returns inside def instrument returns inside def + instrument print with args instrument print with args + instrument unary expressions instrument unary expressions + instrument single statement def instrument single statement def + instrument not expressions instrument not expressions + instrument typeof instrument typeof + instrument nested blocks unless in same line instrument nested blocks unless in same line + allow visibility modifiers allow visibility modifiers + instrument multi statement def instrument multi statement def +Semantic: extern struct + declares extern union with no constructor declares extern union with no constructor + overrides getter overrides getter + can be passed to C fun can be passed to C fun + declares extern struct with no constructor declares extern struct with no constructor + can use extern struct in lib can use extern struct in lib + declares with constructor declares with constructor + errors if using non-primitive for field type via module errors if using non-primitive for field type via module + errors if using non-primitive for field type errors if using non-primitive for field type + can new with named args can new with named args + can include module can include module + errors if using non-primitive type in constructor errors if using non-primitive type in constructor +cleanup + strip tuple elements after unreachable element strip tuple elements after unreachable element + errors if assigning var to itself errors if assigning var to itself + strip named-tuple elements after unreachable element strip named-tuple elements after unreachable element + errors if assigning instance var to itself errors if assigning instance var to itself +file_exists? + with relative path + reads file (doesn't exist) reads file (doesn't exist) + reads file (exists) reads file (exists) + with absolute path + returns false if file doesn't exist returns false if file doesn't exist + returns true if file exists returns true if file exists +Code gen: union type + assigns union to union assigns union to union assigns union to union assigns union to union assigns union to union assigns union to union assigns union to union assigns union to union assigns union to union assigns union to union + codegens union type as return value codegens union type as return value + codegens union type for instance var codegens union type for instance var + codegens union type when no obj codegens union type when no obj + assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 + codegens union to_s codegens union to_s codegens union to_s codegens union to_s codegens union to_s codegens union to_s codegens union to_s codegens union to_s codegens union to_s codegens union to_s + assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 + codegens union type when obj is not union but arg is codegens union type when obj is not union but arg is + dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable + assigns union to larger union assigns union to larger union assigns union to larger union assigns union to larger union assigns union to larger union assigns union to larger union assigns union to larger union assigns union to larger union assigns union to larger union assigns union to larger union + respects union payload alignment when upcasting Bool (#14898) respects union payload alignment when upcasting Bool (#14898) + codegens if with same nested union codegens if with same nested union + codegens union type when obj is union and no args codegens union type when obj is union and no args + codegens union type when no obj and restrictions codegens union type when no obj and restrictions + sorts restrictions when there are unions sorts restrictions when there are unions + codegens union type when obj is union and arg is union codegens union type when obj is union and arg is union + provides T as a tuple literal provides T as a tuple literal + codegens union type when obj union but arg is not codegens union type when obj union but arg is not +Semantic: uninitialized + disallows declaring var of type Number disallows declaring var of type Number + declares as uninitialized declares as uninitialized + can uninitialize variable outside initialize, generic (#2828) can uninitialize variable outside initialize, generic (#2828) + errors if declares var and then assigns other type errors if declares var and then assigns other type + disallows declaring var of type Class disallows declaring var of type Class + disallows declaring var of type Float disallows declaring var of type Float + disallows declaring var of type Enum disallows declaring var of type Enum + disallows declaring var of type Reference disallows declaring var of type Reference + disallows declaring var of type Struct disallows declaring var of type Struct + errors if declaring variable multiple times with different types (#917) errors if declaring variable multiple times with different types (#917) + errors if declaring generic type without type vars (with class var) errors if declaring generic type without type vars (with class var) + can use uninitialized with class type (#2940) can use uninitialized with class type (#2940) + disallows declaring var of type Int disallows declaring var of type Int + works with uninitialized NoReturn (#3314) works with uninitialized NoReturn (#3314) + uses virtual type for uninitialized (#8216) uses virtual type for uninitialized (#8216) + declares an instance variable in initialize as uninitialized declares an instance variable in initialize as uninitialized + declares as uninitialized and reads it declares as uninitialized and reads it + has type (#3641) has type (#3641) + can uninitialize variable outside initialize (#2828) can uninitialize variable outside initialize (#2828) + disallows declaring var of type Object disallows declaring var of type Object + disallows declaring var of type Value disallows declaring var of type Value + errors if declaring generic type without type vars (with instance var) errors if declaring generic type without type vars (with instance var) +Crystal::Repl::Interpreter + autocast + autocasts float32 var to float64 (#12560) autocasts float32 var to float64 (#12560) + autocasts symbol to enum in ivar initializer (#12216) autocasts symbol to enum in ivar initializer (#12216) + autocasts integer var to float (#12560) autocasts integer var to float (#12560) + autocasts int in multidispatch autocasts int in multidispatch + autocasts number literal to integer autocasts number literal to integer + autocasts symbol to enum in multidispatch (#11782) autocasts symbol to enum in multidispatch (#11782) + autocasts symbol to enum autocasts symbol to enum + autocasts number literal to float autocasts number literal to float + autocasts integer var to integer (#12560) autocasts integer var to integer (#12560) +Semantic: ssa + types if with return in else with assign types if with return in else with assign + types if with return in then with assign types if with return in then with assign + types a var inside an if without previous definition types a var inside an if without previous definition + types if with break in then types if with break in then + types block with break types block with break + types a var inside an if with previous definition types a var inside an if with previous definition + types while with break types while with break + types if with return in then types if with return in then + types a var that is declared in a while condition types a var that is declared in a while condition + types block with break doesn't infect initial vars types block with break doesn't infect initial vars + types a var with an if with nested if types a var with an if with nested if + doesn't change type to nilable inside if doesn't change type to nilable inside if + doesn't error if same variable is declared in multiple typeofs doesn't error if same variable is declared in multiple typeofs + types a var after begin ensure as having last type types a var after begin ensure as having last type + types a var inside an if without definition in else types a var inside an if without definition in else + types a var that is re-assigned in a while condition types a var that is re-assigned in a while condition + types re-assign inside while (bug) types re-assign inside while (bug) + doesn't error if same variable is used in multiple arguments of same typeof doesn't error if same variable is used in multiple arguments of same typeof + types if with unreachable in then types if with unreachable in then + types if with restricted type in then types if with restricted type in then + types a var that is re-assigned in a while and used in condition types a var that is re-assigned in a while and used in condition + types block with next types block with next + types a var inside an if without change in else types a var inside an if without change in else + types a var that is declared in a while with out types a var that is declared in a while with out + types if with return in both branches types if with return in both branches + types a var that is declared in a while condition with break after re-assignment types a var that is declared in a while condition with break after re-assignment + types a var after begin ensure as having last type (2) types a var after begin ensure as having last type (2) + types a var with an if but without change types a var with an if but without change + types while with next types while with next + types if with return in else types if with return in else + preserves type filters after block (bug) preserves type filters after block (bug) + types a var inside an if without change in then types a var inside an if without change in then + types if with next in then types if with next in then + types while with break with new var types while with break with new var + types a var that is re-assigned in a while in next and used in condition types a var that is re-assigned in a while in next and used in condition + types if with restricted type in else types if with restricted type in else + types a var that is re-assigned in a while types a var that is re-assigned in a while + types a var that is re-assigned in a block types a var that is re-assigned in a block + types re-assign inside if (bug) types re-assign inside if (bug) + types a var inside an if without definition in then types a var inside an if without definition in then + types while with break doesn't infect initial vars types while with break doesn't infect initial vars + types a var that is declared in a while condition with break before re-assignment types a var that is declared in a while condition with break before re-assignment + types if/else with var (bug) types if/else with var (bug) + types a var that is declared in a while types a var that is declared in a while + types a redefined variable types a redefined variable + errors if accessing variable declared inside typeof errors if accessing variable declared inside typeof +Normalize: def + expands with splat and zero expands with splat and zero + expands a def with splat and double splat expands a def with splat and double splat + expands with named argument and yield expands with named argument and yield + expands a def on request with default arguments that yields (external names) expands a def on request with default arguments that yields (external names) + expands arg with default value after splat expands arg with default value after splat + gives correct body location with + default arg with restriction, without body default arg with restriction, without body + default arg, with body default arg, with body + block instance var arg, with body block instance var arg, with body + block instance var arg, without body block instance var arg, without body + default arg, without body default arg, without body + default arg with restriction, with body default arg with restriction, with body + splat arg, without body splat arg, without body + splat arg, with body splat arg, with body + expands a def with external names (2) expands a def with external names (2) + expands a def with double splat and two named args expands a def with double splat and two named args + expands a def on request with default arguments expands a def on request with default arguments + expands with more named arg which come in the correct order expands with more named arg which come in the correct order + expands a new def with double splat and two named args and regular args expands a new def with double splat and two named args and regular args + expands with splat and default argument expands with splat and default argument + expands with magic constant specifying one when all are magic expands with magic constant specifying one when all are magic + expands a def on request with default arguments (external names) expands a def on request with default arguments (external names) + expands with two named argument and one not expands with two named argument and one not + expands a def on request with default arguments and type restrictions expands a def on request with default arguments and type restrictions + expands a def with double splat and no args expands a def with double splat and no args + expands with one named arg that is the only one (1) expands with one named arg that is the only one (1) + expands def with reserved external name (#6559) expands def with reserved external name (#6559) + expands with splat with one arg before expands with splat with one arg before + expands with magic constant with named arg expands with magic constant with named arg + expands with magic constant expands with magic constant + expands with one named arg that is the only one (2) expands with one named arg that is the only one (2) + expands with two named argument expands with two named argument + expands with magic constant specifying one when not all are magic expands with magic constant specifying one when not all are magic + expands default value after splat index expands default value after splat index + expands with named argument expands with named argument + expands a def on request with default arguments and type restrictions (2) expands a def on request with default arguments and type restrictions (2) + expands a def with external names (1) expands a def with external names (1) + expands a def with double splat and two named args and regular args expands a def with double splat and two named args and regular args + expands a def on request with default arguments that yields expands a def on request with default arguments that yields + uses bare * uses bare * + expands a def on request with default arguments (2) expands a def on request with default arguments (2) + expands with splat expands with splat + expands with magic constant with named arg with yield expands with magic constant with named arg with yield + expands a def on request with default arguments that yields (2) expands a def on request with default arguments that yields (2) +Codegen: is_a? + codegens is_a? casts union to nilable codegens is_a? casts union to nilable + codegens is_a? on right side of and codegens is_a? on right side of and + doesn't consider generic type to be a generic type of a recursive alias (#3524) doesn't consider generic type to be a generic type of a recursive alias (#3524) + doesn't error if result is discarded (#14113) doesn't error if result is discarded (#14113) + restricts metaclass against virtual metaclass type restricts metaclass against virtual metaclass type + evaluates method on filtered union type 2 evaluates method on filtered union type 2 + restricts type in else but lazily restricts type in else but lazily + codegens is_a? with nilable gives false because other type 1 codegens is_a? with nilable gives false because other type 1 + works with inherited generic class against an instantiation works with inherited generic class against an instantiation + evaluate method on filtered type evaluate method on filtered type + codegens is_a? with virtual and module codegens is_a? with virtual and module + does is_a? with generic class metaclass does is_a? with generic class metaclass + doesn't work with inherited generic class against an instantiation (2) doesn't work with inherited generic class against an instantiation (2) + does is_a?(generic type) for nested generic inheritance, through upcast (1) does is_a?(generic type) for nested generic inheritance, through upcast (1) + codegens is_a? from nilable reference union type to nil codegens is_a? from nilable reference union type to nil + restricts virtual metaclass against virtual metaclass type restricts virtual metaclass against virtual metaclass type + evaluates method on filtered union type evaluates method on filtered union type + codegens is_a? false for simple type codegens is_a? false for simple type + doesn't skip assignment when used in combination with .is_a? and && (#1121) doesn't skip assignment when used in combination with .is_a? and && (#1121) + doesn't type merge (1) (#548) doesn't type merge (1) (#548) + transforms else if condition is always falsey transforms else if condition is always falsey + does is_a? with more strict virtual type does is_a? with more strict virtual type + does is_a? with union type as Union(X, Y), don't resolve to virtual type (#10244) does is_a? with union type as Union(X, Y), don't resolve to virtual type (#10244) + codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used + codegens is_a? with union gives true codegens is_a? with union gives true + passes is_a? with generic module type on virtual type (#10302) passes is_a? with generic module type on virtual type (#10302) + codegens is_a? true for simple type codegens is_a? true for simple type + does is_a? for virtual generic instance type against generic does is_a? for virtual generic instance type against generic + restricts union with union restricts union with union + codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true + says true for Class.is_a?(Class.class) (#4374) says true for Class.is_a?(Class.class) (#4374) + doesn't type merge (2) (#548) doesn't type merge (2) (#548) + visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364) + does is_a? with && and true condition does is_a? with && and true condition + restricts union metaclass to metaclass (#12295) restricts union metaclass to metaclass (#12295) + codegens untyped var (#4009) codegens untyped var (#4009) + doesn't skip assignment when used in combination with .is_a? (false case) (#1121) doesn't skip assignment when used in combination with .is_a? (false case) (#1121) + doesn't skip assignment when used in combination with .is_a? (true case, else) (#1121) doesn't skip assignment when used in combination with .is_a? (true case, else) (#1121) + works with inherited generic class against an instantiation (3) works with inherited generic class against an instantiation (3) + does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) + codegens is_a? with nilable gives false because no type codegens is_a? with nilable gives false because no type + evaluate method on filtered type nilable type not-nil evaluate method on filtered type nilable type not-nil + codegens is_a? with nilable gives false because no type codegens is_a? with nilable gives false because no type + codegens is_a? with virtual codegens is_a? with virtual + restricts simple type with union restricts simple type with union + does is_a?(generic type) for nested generic inheritance, through upcast (2) does is_a?(generic type) for nested generic inheritance, through upcast (2) + codegens is_a? with union gives false codegens is_a? with union gives false + virtual metaclass type is not virtual instance type (#12628) virtual metaclass type is not virtual instance type (#12628) + codegens is_a? with union gives true codegens is_a? with union gives true + does is_a? with union type, don't resolve to virtual type (#10244) does is_a? with union type, don't resolve to virtual type (#10244) + codegens is_a? with nilable gives false because other type 2 codegens is_a? with nilable gives false because other type 2 + codegens is_a? casts union to nilable in method codegens is_a? casts union to nilable in method + doesn't skip assignment when used in combination with .is_a? (true case, then) (#1121) doesn't skip assignment when used in combination with .is_a? (true case, then) (#1121) + says false for value.is_a?(Class) says false for value.is_a?(Class) + evaluate method on filtered type nilable type nil evaluate method on filtered type nilable type nil + evaluates method on filtered union type 3 evaluates method on filtered union type 3 evaluates method on filtered union type 3 evaluates method on filtered union type 3 evaluates method on filtered union type 3 evaluates method on filtered union type 3 evaluates method on filtered union type 3 evaluates method on filtered union type 3 evaluates method on filtered union type 3 evaluates method on filtered union type 3 + does is_a?(generic type) for nested generic inheritance (2) does is_a?(generic type) for nested generic inheritance (2) + codegens is_a? with nilable gives true codegens is_a? with nilable gives true + codegens is_a? from virtual type to module codegens is_a? from virtual type to module + does is_a?/responds_to? twice (#1451) does is_a?/responds_to? twice (#1451) + codegens is_a? from nilable reference union type to type codegens is_a? from nilable reference union type to type + says false for GenericChild(Base).is_a?(GenericBase(Child)) (#1294) says false for GenericChild(Base).is_a?(GenericBase(Child)) (#1294) + does is_a? for union of module and type does is_a? for union of module and type + codegens is_a? with virtual and nil codegens is_a? with virtual and nil + codegens is_a? with union gives false codegens is_a? with union gives false + gives false if generic type doesn't match exactly gives false if generic type doesn't match exactly + does is_a?(generic type) for nested generic inheritance (1) (#9660) does is_a?(generic type) for nested generic inheritance (1) (#9660) + codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false + transforms then if condition is always truthy transforms then if condition is always truthy + resets truthy state after visiting nodes (bug) resets truthy state after visiting nodes (bug) + says true for Class.is_a?(Class.class.class) (#4374) says true for Class.is_a?(Class.class.class) (#4374) +Crystal::Repl::Interpreter + calls + does ReadInstanceVar with wants_struct_pointer does ReadInstanceVar with wants_struct_pointer + does call with struct as obj (2) does call with struct as obj (2) + mutates through inlined instance var with receiver mutates through inlined instance var with receiver + inlines call that returns self inlines call that returns self + puts struct pointer after tuple indexer puts struct pointer after tuple indexer + inlines method that just reads an instance var, but produces side effects of args inlines method that just reads an instance var, but produces side effects of args + inlines method that just reads an instance var inlines method that just reads an instance var + does call on instance var that's a struct, from a class does call on instance var that's a struct, from a class + inlines call that returns self (2) inlines call that returns self (2) + mutates through pointer (3) mutates through pointer (3) + mutates through inlined instance var without receiver mutates through inlined instance var without receiver + mutates through pointer (1) mutates through pointer (1) + calls a top-level method without arguments and no local vars calls a top-level method without arguments and no local vars + interprets call with default values interprets call with default values + discards call with struct as obj discards call with struct as obj + does Assign instance var with wants_struct_pointer does Assign instance var with wants_struct_pointer + does Assign var with wants_struct_pointer does Assign var with wants_struct_pointer + does call with struct as obj does call with struct as obj + mutates call argument mutates call argument + interprets implicit self call for pointer interprets implicit self call for pointer + calls a top-level method with two arguments calls a top-level method with two arguments + does call on ivar that's a struct, takes a pointer to instance var, inside if does call on ivar that's a struct, takes a pointer to instance var, inside if + does call on read instance var that's a struct, takes a pointer to instance var does call on read instance var that's a struct, takes a pointer to instance var + mutates through read instance var mutates through read instance var + calls a top-level method without arguments but with local vars calls a top-level method without arguments but with local vars + interprets call with named arguments interprets call with named arguments + interprets call with if interprets call with if + does call on self that's a struct, takes a pointer to instance var, inside if does call on self that's a struct, takes a pointer to instance var, inside if + does call on instance var that's a struct, from a struct does call on instance var that's a struct, from a struct + does call on constant that's a struct, takes a pointer to instance var, inside if does call on constant that's a struct, takes a pointer to instance var, inside if + does Assign class var with wants_struct_pointer does Assign class var with wants_struct_pointer + mutates through pointer (2) mutates through pointer (2) + does call on var that's a struct, takes a pointer to instance var, inside if does call on var that's a struct, takes a pointer to instance var, inside if + does call on constant that's a struct, takes a pointer to instance var does call on constant that's a struct, takes a pointer to instance var + inlines method that just reads an instance var (2) inlines method that just reads an instance var (2) + does call on Pointer#value that's a struct, takes a pointer to instance var does call on Pointer#value that's a struct, takes a pointer to instance var + interprets self for primitive types interprets self for primitive types + interprets explicit self call for primitive types interprets explicit self call for primitive types +Code gen: lib + uses static array in lib extern (#5688) uses static array in lib extern (#5688) + passes nil to varargs (#1570) passes nil to varargs (#1570) + call to void function call to void function + refers to lib type (#960) refers to lib type (#960) + casts C fun to Crystal proc when accessing instance var (#2515) casts C fun to Crystal proc when accessing instance var (#2515) + doesn't crash with nil and varargs (#4414) doesn't crash with nil and varargs (#4414) + can use enum as fun return can use enum as fun return + can use enum as fun argument can use enum as fun argument + doesn't crash when casting -1 to UInt32 (#3594) doesn't crash when casting -1 to UInt32 (#3594) + allows setting/getting external variable as function pointer allows setting/getting external variable as function pointer + allows passing type to LibC if it has a converter with to_unsafe (bug) allows passing type to LibC if it has a converter with to_unsafe (bug) + get fun field from union (#672) get fun field from union (#672) get fun field from union (#672) get fun field from union (#672) get fun field from union (#672) get fun field from union (#672) get fun field from union (#672) get fun field from union (#672) get fun field from union (#672) get fun field from union (#672) + allows invoking out with underscore allows invoking out with underscore + get fun field from struct (#672) get fun field from struct (#672) get fun field from struct (#672) get fun field from struct (#672) get fun field from struct (#672) get fun field from struct (#672) get fun field from struct (#672) get fun field from struct (#672) get fun field from struct (#672) get fun field from struct (#672) + allows passing type to LibC if it has a converter with to_unsafe allows passing type to LibC if it has a converter with to_unsafe + can use tuple as fun return can use tuple as fun return can use tuple as fun return can use tuple as fun return can use tuple as fun return can use tuple as fun return can use tuple as fun return can use tuple as fun return can use tuple as fun return can use tuple as fun return + codegens lib var set and get codegens lib var set and get + passes int as another float type in literal passes int as another float type in literal ASTNode#to_s - does to_s of "foo(\"bar baz\": 2)" does to_s of "foo(\"bar baz\": 2)" - does to_s of "&+1" does to_s of "&+1" - does to_s of "foo x: 1, y: 2, &.bar" does to_s of "foo x: 1, y: 2, &.bar" - does to_s of "`\#{1}\\n\\0`" does to_s of "`\#{1}\\n\\0`" + does to_s of "lib Foo\n struct Foo\n a : Void\n b : Void\n end\nend" does to_s of "lib Foo\n struct Foo\n a : Void\n b : Void\n end\nend" + does to_s of "offsetof(Foo, @bar)" does to_s of "offsetof(Foo, @bar)" + does to_s of "foo { |i| i.bar { i } }" does to_s of "foo { |i| i.bar { i } }" + does to_s of "lib Foo\n A = Pointer(Void).new(0)\n struct B\n x : Void*\n y : Int[1]\n end\n fun c(Void*) : Char[2]*\nend" does to_s of "lib Foo\n A = Pointer(Void).new(0)\n struct B\n x : Void*\n y : Int[1]\n end\n fun c(Void*) : Char[2]*\nend" + does to_s of "lib Foo\n FOO = 0\nend" does to_s of "lib Foo\n FOO = 0\nend" + does to_s of "def foo(& : ->)\nend" does to_s of "def foo(& : ->)\nend" does to_s of "asm(\"bl trap\" :::: \"unwind\")" does to_s of "asm(\"bl trap\" :::: \"unwind\")" - does to_s of "->(x : Int32, y : Bool) : Char do\n 'a'\nend" does to_s of "->(x : Int32, y : Bool) : Char do\n 'a'\nend" - does to_s of x = (1 -2 -) does to_s of x = (1 -2 -) - does to_s of "def foo(**args)\nend" does to_s of "def foo(**args)\nend" - does to_s of "%(\"\#{foo}\")" does to_s of "%(\"\#{foo}\")" - does to_s of "1[2, x: 3, &.foo]" does to_s of "1[2, x: 3, &.foo]" + does to_s of "# doc\ndef foo\nend" does to_s of "# doc\ndef foo\nend" + does to_s of "macro foo(x, @[Foo] *y)\nend" does to_s of "macro foo(x, @[Foo] *y)\nend" + does to_s of "\"\\e\\0\\\"\"" does to_s of "\"\\e\\0\\\"\"" + does to_s of "(1 + 2).as(Int32)" does to_s of "(1 + 2).as(Int32)" + does to_s of "foo do |k, v|\n k.bar(1, 2, 3)\nend" does to_s of "foo do |k, v|\n k.bar(1, 2, 3)\nend" + does to_s of "fun foo\nend" does to_s of "fun foo\nend" + does to_s of "\"\#{1}\\0\"" does to_s of "\"\#{1}\\0\"" + does to_s of "enum Foo\n A = 0\n B\nend" does to_s of "enum Foo\n A = 0\n B\nend" + does to_s of "&-1" does to_s of "&-1" + does to_s of "([] of T).foo" does to_s of "([] of T).foo" + does to_s of "@[Foo(1, 2, a: 1, b: 2)]" does to_s of "@[Foo(1, 2, a: 1, b: 2)]" + does to_s of "1 && (a = 2)" does to_s of "1 && (a = 2)" + does to_s of "foo(x : Foo((T -> U)))" does to_s of "foo(x : Foo((T -> U)))" + does to_s of "fun foo(a : Void, b : Void, ...) : Void\nend" does to_s of "fun foo(a : Void, b : Void, ...) : Void\nend" does to_s of "/ /" does to_s of "/ /" - does to_s of "foo(1, (2 + 3), bar: (4 + 5))" does to_s of "foo(1, (2 + 3), bar: (4 + 5))" - does to_s of "foo : A | (B -> C)" does to_s of "foo : A | (B -> C)" - does to_s of "(~1).foo" does to_s of "(~1).foo" - does to_s of "def foo(x : X, @[Foo] y : Y) forall X, Y\nend" does to_s of "def foo(x : X, @[Foo] y : Y) forall X, Y\nend" - does to_s of "def foo(x : X, y : Y) forall X, Y\nend" does to_s of "def foo(x : X, y : Y) forall X, Y\nend" - does to_s of "/\#{1 / 2}/" does to_s of "/\#{1 / 2}/" - does to_s of "{% if foo %}\n foo_then\n{% end %}" does to_s of "{% if foo %}\n foo_then\n{% end %}" - does to_s of "def foo(@[Foo] x : T = 1)\nend" does to_s of "def foo(@[Foo] x : T = 1)\nend" - does to_s of "alias Foo = Void" does to_s of "alias Foo = Void" - does to_s of "foo[x : (T -> U) -> V, W] = 1" does to_s of "foo[x : (T -> U) -> V, W] = 1" - does to_s of "a.as?(Int32)" does to_s of "a.as?(Int32)" - does to_s of "macro foo(@[Foo] x, @[Foo] *y)\nend" does to_s of "macro foo(@[Foo] x, @[Foo] *y)\nend" - does to_s of "%r{\#{1}\\/\\0}" does to_s of "%r{\#{1}\\/\\0}" - does to_s of "{% for foo in bar %}\n {{ if true\n foo\n bar\nend }}\n{% end %}" does to_s of "{% for foo in bar %}\n {{ if true\n foo\n bar\nend }}\n{% end %}" - does to_s of "他.说 = \"你好\"" does to_s of "他.说 = \"你好\"" - does to_s of "1 & 2 & (3 | 4)" does to_s of "1 & 2 & (3 | 4)" - does to_s of "macro foo(x)\n yield\nend" does to_s of "macro foo(x)\n yield\nend" - does to_s of "_foo.bar" does to_s of "_foo.bar" - does to_s of "macro foo(@[Foo] **args)\nend" does to_s of "macro foo(@[Foo] **args)\nend" - does to_s of "macro foo\n 123\nend" does to_s of "macro foo\n 123\nend" does to_s of "lib Foo\nend" does to_s of "lib Foo\nend" + does to_s of "def foo(x : (T -> U) | V)\nend" does to_s of "def foo(x : (T -> U) | V)\nend" + does to_s of "`\#{1}\\n\\0`" does to_s of "`\#{1}\\n\\0`" + does to_s of "enum A : B\nend" does to_s of "enum A : B\nend" + does to_s of "if (1 + 2\n3)\n 4\nend" does to_s of "if (1 + 2\n3)\n 4\nend" + does to_s of "{ {1, 2, 3} }" does to_s of "{ {1, 2, 3} }" + does to_s of "def foo(x, @[Foo] **args)\nend" does to_s of "def foo(x, @[Foo] **args)\nend" + does to_s of "あ.い, う.え.お = 1, 2" does to_s of "あ.い, う.え.お = 1, 2" + does to_s of "{% foo %}" does to_s of "{% foo %}" + does to_s of "select\nwhen foo\n select\n when bar\n 1\n else\n 2\n end\nelse\n select\n when baz\n 3\n else\n 4\n end\nend" does to_s of "select\nwhen foo\n select\n when bar\n 1\n else\n 2\n end\nelse\n select\n when baz\n 3\n else\n 4\n end\nend" + does to_s of "case 1\nwhen .[](2)\n 3\nwhen .[]=(4)\n 5\nend" does to_s of "case 1\nwhen .[](2)\n 3\nwhen .[]=(4)\n 5\nend" + does to_s of "macro foo\n{% @type %}\nend" does to_s of "macro foo\n{% @type %}\nend" + does to_s of "macro foo\n\\{%@type %}\nend" does to_s of "macro foo\n\\{%@type %}\nend" + does to_s of "(1 <= 2) <= 3" does to_s of "(1 <= 2) <= 3" + does to_s of "foo.*" does to_s of "foo.*" + does to_s of "macro foo(x)\n yield\nend" does to_s of "macro foo(x)\n yield\nend" + does to_s of "1_f64" does to_s of "1_f64" + does to_s of "def foo(x : (T -> U) -> V, *args : (T -> U) -> V, y : (T -> U) -> V, **opts : (T -> U) -> V, & : (T -> U) -> V) : ((T -> U) -> V)\nend" does to_s of "def foo(x : (T -> U) -> V, *args : (T -> U) -> V, y : (T -> U) -> V, **opts : (T -> U) -> V, & : (T -> U) -> V) : ((T -> U) -> V)\nend" + does to_s of "begin\n ()\nend" does to_s of "begin\n ()\nend" does to_s of "%r()imx" does to_s of "%r()imx" - does to_s of "class Foo\n # doc\n def foo\n end\nend" does to_s of "class Foo\n # doc\n def foo\n end\nend" - does to_s of "return begin\n 1\n 2\nend" does to_s of "return begin\n 1\n 2\nend" + does to_s of "foo { |(x, y)| x }" does to_s of "foo { |(x, y)| x }" + does to_s of "%r{\\/\\0}" does to_s of "%r{\\/\\0}" + does to_s of "->(x : Int32, y : Bool) : Char do\n 'a'\nend" does to_s of "->(x : Int32, y : Bool) : Char do\n 'a'\nend" + does to_s of "1[2, x: 3, &.foo]" does to_s of "1[2, x: 3, &.foo]" + does to_s of "yield(1)" does to_s of "yield(1)" + does to_s of "{% if foo %}\n foo_then\n{% else %}\n foo_else\n{% end %}" does to_s of "{% if foo %}\n foo_then\n{% else %}\n foo_else\n{% end %}" + does to_s of "1.~(2)" does to_s of "1.~(2)" + does to_s of "type(Foo = Void)" does to_s of "type(Foo = Void)" + does to_s of "{% for foo in bar %}\n {{ foo }}\n{% end %}" does to_s of "{% for foo in bar %}\n {{ foo }}\n{% end %}" + does to_s of "foo &.bar(1, 2, 3)" does to_s of "foo &.bar(1, 2, 3)" does to_s of "1.0" does to_s of "1.0" - does to_s of "begin\n ()\nend" does to_s of "begin\n ()\nend" - does to_s of "foo { |(x, (y, z))| x }" does to_s of "foo { |(x, (y, z))| x }" - does to_s of "->::foo(Int32, String)" does to_s of "->::foo(Int32, String)" + does to_s of "1.+(&block)" does to_s of "1.+(&block)" + does to_s of "foo(bar)" does to_s of "foo(bar)" + does to_s of "lib Foo::Bar\nend" does to_s of "lib Foo::Bar\nend" + does to_s of "foo[x, y, a: 1, b: 2] = z" does to_s of "foo[x, y, a: 1, b: 2] = z" + does to_s of "begin\n (@x = x).is_a?(Foo)\nend" does to_s of "begin\n (@x = x).is_a?(Foo)\nend" + does to_s of "(~1).foo" does to_s of "(~1).foo" + does to_s of "@foo.bar" does to_s of "@foo.bar" does to_s of "!(1 < 2)" does to_s of "!(1 < 2)" - does to_s of "def foo(x : (T -> U).class)\nend" does to_s of "def foo(x : (T -> U).class)\nend" + does to_s of "foo(\"bar baz\": 2)" does to_s of "foo(\"bar baz\": 2)" + does to_s of "class Foo\n private def bar\n end\nend" does to_s of "class Foo\n private def bar\n end\nend" + does to_s of "begin\n (1)\n 2\nrescue\nend" does to_s of "begin\n (1)\n 2\nrescue\nend" + does to_s of "macro foo\n %bar{1, x} = 1\nend" does to_s of "macro foo\n %bar{1, x} = 1\nend" + does to_s of "%r( )" does to_s of "%r( )" + does to_s of "Foo()" does to_s of "Foo()" + does to_s of "asm(\"nop\" ::: \"e\" : \"volatile\")" does to_s of "asm(\"nop\" ::: \"e\" : \"volatile\")" + does to_s of "macro foo(*, var)\nend" does to_s of "macro foo(*, var)\nend" + does to_s of "1.+(a: 2)" does to_s of "1.+(a: 2)" + does to_s of "他.说 = \"你好\"" does to_s of "他.说 = \"你好\"" + does to_s of "1[2, x: 3, &.foo]?" does to_s of "1[2, x: 3, &.foo]?" + does to_s of "-> : Int32 do\nend" does to_s of "-> : Int32 do\nend" + does to_s of "1.as(Int32)" does to_s of "1.as(Int32)" does to_s of "if 1\n begin\n 2\n end\nelse\n begin\n 3\n end\nend" does to_s of "if 1\n begin\n 2\n end\nelse\n begin\n 3\n end\nend" - does to_s of "/hello world/" does to_s of "/hello world/" - does to_s of "fun foo\nend" does to_s of "fun foo\nend" - does to_s of "\"\#{1}\\0\"" does to_s of "\"\#{1}\\0\"" - does to_s of "offsetof(Foo, @bar)" does to_s of "offsetof(Foo, @bar)" - does to_s of "{ {1, 2, 3} => 4 }" does to_s of "{ {1, 2, 3} => 4 }" + does to_s of "1[2, x: 3, &.foo] = 4" does to_s of "1[2, x: 3, &.foo] = 4" + does to_s of "%r()" does to_s of "%r()" + does to_s of "/\\(group\\)/" does to_s of "/\\(group\\)/" + does to_s of "!a" does to_s of "!a" + does to_s of "{foo: (1 + 2)}" does to_s of "{foo: (1 + 2)}" + does to_s of "foo(x : (T -> U) -> V, W)" does to_s of "foo(x : (T -> U) -> V, W)" does to_s of "1[&.foo]" does to_s of "1[&.foo]" - does to_s of "%x(whoami)" does to_s of "%x(whoami)" - does to_s of "macro foo(@[Foo] &block)\nend" does to_s of "macro foo(@[Foo] &block)\nend" - does to_s of "macro foo(x, @[Foo] *y)\nend" does to_s of "macro foo(x, @[Foo] *y)\nend" - does to_s of "case 1; in .foo?; 2; end" does to_s of "case 1; in .foo?; 2; end" - does to_s of "-> : Int32 do\nend" does to_s of "-> : Int32 do\nend" - does to_s of "{ {1, 2, 3} }" does to_s of "{ {1, 2, 3} }" - does to_s of "macro foo(@[Foo] id)\nend" does to_s of "macro foo(@[Foo] id)\nend" - does to_s of "foo.%" does to_s of "foo.%" - does to_s of "def foo(& : (->))\nend" does to_s of "def foo(& : (->))\nend" - does to_s of "1.[](2) do\nend" does to_s of "1.[](2) do\nend" - does to_s of "if (1 + 2\n3)\n 4\nend" does to_s of "if (1 + 2\n3)\n 4\nend" - does to_s of "1 <= 2 <= 3" does to_s of "1 <= 2 <= 3" does to_s of "begin\n (1)\nend" does to_s of "begin\n (1)\nend" + does to_s of "foo do\n begin\n bar\n end\nend" does to_s of "foo do\n begin\n bar\n end\nend" + does to_s of "begin\n (1)\n 2\nend" does to_s of "begin\n (1)\n 2\nend" + does to_s of "1.[](2) do\nend" does to_s of "1.[](2) do\nend" + does to_s of "a.as?(Int32)" does to_s of "a.as?(Int32)" + does to_s of "lib LibFoo\n fun foo(x : Foo((T -> U)))\nend" does to_s of "lib LibFoo\n fun foo(x : Foo((T -> U)))\nend" + does to_s of "macro foo\n\\{{ @type }}\nend" does to_s of "macro foo\n\\{{ @type }}\nend" + does to_s of "def foo(x : (T -> U).class)\nend" does to_s of "def foo(x : (T -> U).class)\nend" + does to_s of "/a/x" does to_s of "/a/x" + does to_s of "def foo(*args)\nend" does to_s of "def foo(*args)\nend" does to_s of `#{::String.interpolation(x)}` does to_s of `#{::String.interpolation(x)}` does to_s of "macro foo(**args)\nend" does to_s of "macro foo(**args)\nend" - does to_s of "1 <= (2 <= 3)" does to_s of "1 <= (2 <= 3)" - does to_s of "asm(\"nop\" ::::)" does to_s of "asm(\"nop\" ::::)" - does to_s of "foo do |k, v|\n k.bar(1, 2, 3)\nend" does to_s of "foo do |k, v|\n k.bar(1, 2, 3)\nend" does to_s of "lib LibFoo\n fun foo(x : (T -> U).class)\nend" does to_s of "lib LibFoo\n fun foo(x : (T -> U).class)\nend" - does to_s of "def foo(@[Foo] x y)\nend" does to_s of "def foo(@[Foo] x y)\nend" - does to_s of "macro foo\n\\{%@type %}\nend" does to_s of "macro foo\n\\{%@type %}\nend" - does to_s of "foo &.bar(1, 2, 3)" does to_s of "foo &.bar(1, 2, 3)" - does to_s of "({} of K => V).foo" does to_s of "({} of K => V).foo" - does to_s of "1.//(2, a: 3)" does to_s of "1.//(2, a: 3)" - does to_s of "foo(3, &.*(2))" does to_s of "foo(3, &.*(2))" - does to_s of "foo(&.==(2))" does to_s of "foo(&.==(2))" - does to_s of "asm(\"nop\" :: \"c\"(3), \"d\"(4) ::)" does to_s of "asm(\"nop\" :: \"c\"(3), \"d\"(4) ::)" - does to_s of "1.responds_to?(:\"&&\")" does to_s of "1.responds_to?(:\"&&\")" - does to_s of "1[&.foo]?" does to_s of "1[&.foo]?" - does to_s of "asm(\"nop\" : \"a\"(1), \"b\"(2) : \"c\"(3), \"d\"(4) : \"e\", \"f\" : \"volatile\", \"alignstack\", \"intel\")" does to_s of "asm(\"nop\" : \"a\"(1), \"b\"(2) : \"c\"(3), \"d\"(4) : \"e\", \"f\" : \"volatile\", \"alignstack\", \"intel\")" - does to_s of "yield(1)" does to_s of "yield(1)" - does to_s of "1.~(2)" does to_s of "1.~(2)" - does to_s of "begin\n (1)\n 2\nrescue\nend" does to_s of "begin\n (1)\n 2\nrescue\nend" - does to_s of "Foo(\"bar baz\": Int32)" does to_s of "Foo(\"bar baz\": Int32)" - does to_s of "macro foo(&)\nend" does to_s of "macro foo(&)\nend" - does to_s of "if true\n (1)\n 2\nend" does to_s of "if true\n (1)\n 2\nend" - does to_s of "def foo(*args)\nend" does to_s of "def foo(*args)\nend" - does to_s of "{% foo %}" does to_s of "{% foo %}" - does to_s of "select\nwhen foo\n select\n when bar\n 1\n else\n 2\n end\nelse\n select\n when baz\n 3\n else\n 4\n end\nend" does to_s of "select\nwhen foo\n select\n when bar\n 1\n else\n 2\n end\nelse\n select\n when baz\n 3\n else\n 4\n end\nend" - does to_s of "foo(bar)" does to_s of "foo(bar)" - does to_s of "{% for foo in bar %}\n {{ foo }}\n{% end %}" does to_s of "{% for foo in bar %}\n {{ foo }}\n{% end %}" - does to_s of "/hello world/imx" does to_s of "/hello world/imx" - does to_s of "enum Foo\n A = 0\n B\nend" does to_s of "enum Foo\n A = 0\n B\nend" - does to_s of "def foo(x, **args, &block : _ -> _)\nend" does to_s of "def foo(x, **args, &block : _ -> _)\nend" - does to_s of "begin\n (1)\n 2\nend" does to_s of "begin\n (1)\n 2\nend" - does to_s of "macro foo\n{% verbatim do %}1{% end %}\nend" does to_s of "macro foo\n{% verbatim do %}1{% end %}\nend" - does to_s of "def foo(@[Foo] *args)\nend" does to_s of "def foo(@[Foo] *args)\nend" + does to_s of "(1 || 1.1).as(Int32)" does to_s of "(1 || 1.1).as(Int32)" + does to_s of "def foo\n yield\nend" does to_s of "def foo\n yield\nend" + does to_s of "`\\n\\0`" does to_s of "`\\n\\0`" + does to_s of "foo[x : (T -> U) -> V, W] = 1" does to_s of "foo[x : (T -> U) -> V, W] = 1" does to_s of "def foo(x : Foo((T -> U)))\nend" does to_s of "def foo(x : Foo((T -> U)))\nend" - does to_s of "->::Foo::Bar.foo" does to_s of "->::Foo::Bar.foo" - does to_s of "1_f64" does to_s of "1_f64" - does to_s of "lib LibC\n fun getch = \"get.char\"\nend" does to_s of "lib LibC\n fun getch = \"get.char\"\nend" - does to_s of "asm(\"nop\" :::: \"volatile\")" does to_s of "asm(\"nop\" :::: \"volatile\")" - does to_s of "return true ? 1 : 2" does to_s of "return true ? 1 : 2" - does to_s of "def foo(x, @[Foo] **args)\nend" does to_s of "def foo(x, @[Foo] **args)\nend" - does to_s of "あ.い, う.え.お = 1, 2" does to_s of "あ.い, う.え.お = 1, 2" - does to_s of "/\\(group\\)/" does to_s of "/\\(group\\)/" - does to_s of "{\"foo bar\": 1}" does to_s of "{\"foo bar\": 1}" - does to_s of "foo &.bar" does to_s of "foo &.bar" - does to_s of "macro foo\n {% for foo in bar %}\n {{ foo }}\n {% end %}\nend" does to_s of "macro foo\n {% for foo in bar %}\n {{ foo }}\n {% end %}\nend" - does to_s of "\"\#{(1 + 2)}\"" does to_s of "\"\#{(1 + 2)}\"" - does to_s of "1.+(&block)" does to_s of "1.+(&block)" does to_s of "(1 & 2) & (3 | 4)" does to_s of "(1 & 2) & (3 | 4)" - does to_s of "foo(x : (T -> U) -> V, W)" does to_s of "foo(x : (T -> U) -> V, W)" - does to_s of "1e10_f64" does to_s of "1e10_f64" - does to_s of "macro foo(x, @[Foo] **args)\nend" does to_s of "macro foo(x, @[Foo] **args)\nend" - does to_s of "`\\n\\0`" does to_s of "`\\n\\0`" - does to_s of "foo.*" does to_s of "foo.*" - does to_s of "foo(a.as(Int32))" does to_s of "foo(a.as(Int32))" - does to_s of "{ {1 => 2} }" does to_s of "{ {1 => 2} }" - does to_s of "foo.nil?" does to_s of "foo.nil?" - does to_s of ":foo" does to_s of ":foo" - does to_s of "macro foo(*var)\nend" does to_s of "macro foo(*var)\nend" - does to_s of "def foo(x : (T -> U) | V)\nend" does to_s of "def foo(x : (T -> U) | V)\nend" - does to_s of "%r()" does to_s of "%r()" - does to_s of "foo(x : Foo((T -> U)))" does to_s of "foo(x : Foo((T -> U)))" - does to_s of "%r{\\/\\0}" does to_s of "%r{\\/\\0}" - does to_s of "(1 + 2)..3" does to_s of "(1 + 2)..3" - does to_s of "lib Foo\n union Foo\n a : Int\n b : Int32\n end\nend" does to_s of "lib Foo\n union Foo\n a : Int\n b : Int32\n end\nend" - does to_s of "macro foo\n\\{{ @type }}\nend" does to_s of "macro foo\n\\{{ @type }}\nend" - does to_s of "{foo: (1 + 2)}" does to_s of "{foo: (1 + 2)}" - does to_s of "case 1; when .foo?; 2; end" does to_s of "case 1; when .foo?; 2; end" - does to_s of "foo[x : (T -> U) -> V, W]" does to_s of "foo[x : (T -> U) -> V, W]" - does to_s of "foo(x : (T -> U) | V)" does to_s of "foo(x : (T -> U) | V)" - does to_s of "(a = 2) && 1" does to_s of "(a = 2) && 1" - does to_s of "@[Foo(1, 2, a: 1, b: 2)]" does to_s of "@[Foo(1, 2, a: 1, b: 2)]" - does to_s of "{ {foo: 2} }" does to_s of "{ {foo: 2} }" - does to_s of "1.+ do\nend" does to_s of "1.+ do\nend" - does to_s of "foo { |(x, y)| x }" does to_s of "foo { |(x, y)| x }" + does to_s of "/\\//" does to_s of "/\\//" + does to_s of "macro foo(@[Foo] id)\nend" does to_s of "macro foo(@[Foo] id)\nend" + does to_s of "macro foo\n %bar = 1; end" does to_s of "macro foo\n %bar = 1; end" + does to_s of "def foo(@[Foo] *args)\nend" does to_s of "def foo(@[Foo] *args)\nend" + does to_s of "{% verbatim do %}\n 1{{ 2 }}\n 3{{ 4 }}\n{% end %}" does to_s of "{% verbatim do %}\n 1{{ 2 }}\n 3{{ 4 }}\n{% end %}" + does to_s of "macro foo\n {% for foo in bar %}\n {{ foo }}\n {% end %}\nend" does to_s of "macro foo\n {% for foo in bar %}\n {{ foo }}\n {% end %}\nend" + does to_s of "def foo(x, **args, &block : _ -> _)\nend" does to_s of "def foo(x, **args, &block : _ -> _)\nend" does to_s of "foo._bar(1)" does to_s of "foo._bar(1)" - does to_s of "/\\?/" does to_s of "/\\?/" - does to_s of "@foo.bar" does to_s of "@foo.bar" - does to_s of "asm(\"nop\" :: \"a\"(1) :: \"volatile\")" does to_s of "asm(\"nop\" :: \"a\"(1) :: \"volatile\")" - does to_s of "1.+(a: 2)" does to_s of "1.+(a: 2)" - does to_s of ":\"{\"" does to_s of ":\"{\"" - does to_s of "(1..)" does to_s of "(1..)" - does to_s of "def foo(x : T = 1)\nend" does to_s of "def foo(x : T = 1)\nend" - does to_s of "lib Foo\n struct Foo\n a : Void\n b : Void\n end\nend" does to_s of "lib Foo\n struct Foo\n a : Void\n b : Void\n end\nend" - does to_s of "def foo(x : (T -> U) -> V, *args : (T -> U) -> V, y : (T -> U) -> V, **opts : (T -> U) -> V, & : (T -> U) -> V) : ((T -> U) -> V)\nend" does to_s of "def foo(x : (T -> U) -> V, *args : (T -> U) -> V, y : (T -> U) -> V, **opts : (T -> U) -> V, & : (T -> U) -> V) : ((T -> U) -> V)\nend" - does to_s of "def foo(x, **args, &block)\nend" does to_s of "def foo(x, **args, &block)\nend" - does to_s of "# doc\ndef foo\nend" does to_s of "# doc\ndef foo\nend" - does to_s of "def foo(**options, &block)\nend" does to_s of "def foo(**options, &block)\nend" - does to_s of "macro foo(*, __var var)\nend" does to_s of "macro foo(*, __var var)\nend" - does to_s of "enum A : B\nend" does to_s of "enum A : B\nend" - does to_s of "{(1 + 2) => (3 + 4)}" does to_s of "{(1 + 2) => (3 + 4)}" - does to_s of "def foo(x)\n yield\nend" does to_s of "def foo(x)\n yield\nend" - does to_s of "1[&.foo] = 2" does to_s of "1[&.foo] = 2" - does to_s of "macro foo\n %bar{1, x} = 1\nend" does to_s of "macro foo\n %bar{1, x} = 1\nend" - does to_s of "if true\n (1)\nend" does to_s of "if true\n (1)\nend" + does to_s of "def foo(@[Foo] x y)\nend" does to_s of "def foo(@[Foo] x y)\nend" + does to_s of "alias Foo = Void" does to_s of "alias Foo = Void" does to_s of "1_f32" does to_s of "1_f32" - does to_s of "foo[x, y, a: 1, b: 2] = z" does to_s of "foo[x, y, a: 1, b: 2] = z" - does to_s of "def foo(@[Foo] **args)\nend" does to_s of "def foo(@[Foo] **args)\nend" + does to_s of "macro foo(@[Foo] &block)\nend" does to_s of "macro foo(@[Foo] &block)\nend" does to_s of "foo(x : (T -> U).class)" does to_s of "foo(x : (T -> U).class)" + does to_s of "macro foo(x, **args)\nend" does to_s of "macro foo(x, **args)\nend" does to_s of "def foo(\"bar baz\" qux)\nend" does to_s of "def foo(\"bar baz\" qux)\nend" - does to_s of "lib Foo::Bar\nend" does to_s of "lib Foo::Bar\nend" - does to_s of "macro foo\n{{ @type }}\nend" does to_s of "macro foo\n{{ @type }}\nend" - does to_s of "type(Foo = Void)" does to_s of "type(Foo = Void)" - does to_s of "macro foo\n{% @type %}\nend" does to_s of "macro foo\n{% @type %}\nend" + does to_s of "def foo(& : (->))\nend" does to_s of "def foo(& : (->))\nend" + does to_s of "return begin\n 1\n 2\nend" does to_s of "return begin\n 1\n 2\nend" + does to_s of "/\\s/" does to_s of "/\\s/" + does to_s of "_foo.bar" does to_s of "_foo.bar" + does to_s of "begin\n (1)\nrescue\nend" does to_s of "begin\n (1)\nrescue\nend" + does to_s of "(a = 2) && 1" does to_s of "(a = 2) && 1" + does to_s of x = (1 +2 +) does to_s of x = (1 +2 +) + does to_s of "case 1; in .foo?; 2; end" does to_s of "case 1; in .foo?; 2; end" + does to_s of "\"\#{(1 + 2)}\"" does to_s of "\"\#{(1 + 2)}\"" + does to_s of "if true\n (1)\n 2\nend" does to_s of "if true\n (1)\n 2\nend" + does to_s of "foo x: 1, y: 2, &.bar" does to_s of "foo x: 1, y: 2, &.bar" + does to_s of "{ {foo: 2} }" does to_s of "{ {foo: 2} }" does to_s of "macro foo(&block)\nend" does to_s of "macro foo(&block)\nend" - does to_s of "lib LibC\n fun getchar(Int, Float)\nend" does to_s of "lib LibC\n fun getchar(Int, Float)\nend" - does to_s of "fun foo(a : Void, b : Void, ...) : Void\nend" does to_s of "fun foo(a : Void, b : Void, ...) : Void\nend" - does to_s of "(1 <= 2) <= 3" does to_s of "(1 <= 2) <= 3" - does to_s of "1.responds_to?(:to_s)" does to_s of "1.responds_to?(:to_s)" - does to_s of "{(1 + 2)}" does to_s of "{(1 + 2)}" - does to_s of "lib Foo\n FOO = 0\nend" does to_s of "lib Foo\n FOO = 0\nend" - does to_s of "def foo(**args : T)\nend" does to_s of "def foo(**args : T)\nend" - does to_s of "def foo(*args : _)\nend" does to_s of "def foo(*args : _)\nend" - does to_s of "begin\n (@x = x).is_a?(Foo)\nend" does to_s of "begin\n (@x = x).is_a?(Foo)\nend" - does to_s of "def foo\n yield\nend" does to_s of "def foo\n yield\nend" - does to_s of "macro foo(*, var)\nend" does to_s of "macro foo(*, var)\nend" - does to_s of "1.//(2, &block)" does to_s of "1.//(2, &block)" - does to_s of "foo { |i| i.bar { i } }" does to_s of "foo { |i| i.bar { i } }" - does to_s of "macro foo\n %bar = 1; end" does to_s of "macro foo\n %bar = 1; end" - does to_s of "1.as(Int32)" does to_s of "1.as(Int32)" - does to_s of "/a/x" does to_s of "/a/x" - does to_s of "foo[x, y, a: 1, b: 2]" does to_s of "foo[x, y, a: 1, b: 2]" - does to_s of "macro foo(@[Foo] &)\nend" does to_s of "macro foo(@[Foo] &)\nend" - does to_s of "case 1; when .!; 2; when .< 0; 3; end" does to_s of "case 1; when .!; 2; when .< 0; 3; end" - does to_s of "{% if foo %}\n foo_then\n{% else %}\n foo_else\n{% end %}" does to_s of "{% if foo %}\n foo_then\n{% else %}\n foo_else\n{% end %}" + does to_s of "def foo(x, **args, &block : (_ -> _))\nend" does to_s of "def foo(x, **args, &block : (_ -> _))\nend" + does to_s of "lib LibFoo\n fun foo(x : (T -> U) -> V, W) : ((T -> U) -> V)\nend" does to_s of "lib LibFoo\n fun foo(x : (T -> U) -> V, W) : ((T -> U) -> V)\nend" + does to_s of "[(1 + 2)] of Int32" does to_s of "[(1 + 2)] of Int32" + does to_s of "macro foo(&)\nend" does to_s of "macro foo(&)\nend" + does to_s of "1[&.foo]?" does to_s of "1[&.foo]?" + does to_s of "foo(3, &.*(2))" does to_s of "foo(3, &.*(2))" + does to_s of "macro foo(@[Foo] **args)\nend" does to_s of "macro foo(@[Foo] **args)\nend" + does to_s of "(1 + 2).as?(Int32)" does to_s of "(1 + 2).as?(Int32)" does to_s of "..3" does to_s of "..3" - does to_s of "case 1\nwhen .[](2)\n 3\nwhen .[]=(4)\n 5\nend" does to_s of "case 1\nwhen .[](2)\n 3\nwhen .[]=(4)\n 5\nend" - does to_s of "foo._bar" does to_s of "foo._bar" - does to_s of "/\\//" does to_s of "/\\//" + does to_s of "1[&.foo] = 2" does to_s of "1[&.foo] = 2" + does to_s of "->::Foo::Bar.foo" does to_s of "->::Foo::Bar.foo" + does to_s of "/\#{1 / 2}/" does to_s of "/\#{1 / 2}/" + does to_s of "foo { |(x, (y, z))| x }" does to_s of "foo { |(x, (y, z))| x }" + does to_s of "def foo(**args : T)\nend" does to_s of "def foo(**args : T)\nend" + does to_s of ":foo" does to_s of ":foo" does to_s of "1.~(2) do\nend" does to_s of "1.~(2) do\nend" - does to_s of "lib Foo\n A = Pointer(Void).new(0)\n struct B\n x : Void*\n y : Int[1]\n end\n fun c(Void*) : Char[2]*\nend" does to_s of "lib Foo\n A = Pointer(Void).new(0)\n struct B\n x : Void*\n y : Int[1]\n end\n fun c(Void*) : Char[2]*\nend" - does to_s of "Foo()" does to_s of "Foo()" - does to_s of "foo : (A | B).class" does to_s of "foo : (A | B).class" - does to_s of "macro foo\n %bar = 1\nend" does to_s of "macro foo\n %bar = 1\nend" - does to_s of "foo do\n begin\n bar\n end\nend" does to_s of "foo do\n begin\n bar\n end\nend" does to_s of "alias Foo::Bar = Void" does to_s of "alias Foo::Bar = Void" - does to_s of "(1 || 1.1).as(Int32)" does to_s of "(1 || 1.1).as(Int32)" - does to_s of "def foo(**x)\n yield\nend" does to_s of "def foo(**x)\n yield\nend" - does to_s of "def foo(& : ->)\nend" does to_s of "def foo(& : ->)\nend" - does to_s of "(1 + 2).as(Int32)" does to_s of "(1 + 2).as(Int32)" + does to_s of "def foo(@[Foo] x, @[Bar] **args, @[Baz] &block)\nend" does to_s of "def foo(@[Foo] x, @[Bar] **args, @[Baz] &block)\nend" + does to_s of "def foo(x : X, y : Y) forall X, Y\nend" does to_s of "def foo(x : X, y : Y) forall X, Y\nend" + does to_s of "foo[x : (T -> U) -> V, W]" does to_s of "foo[x : (T -> U) -> V, W]" + does to_s of "{\"foo bar\": 1}" does to_s of "{\"foo bar\": 1}" + does to_s of "foo &.bar" does to_s of "foo &.bar" + does to_s of "class Foo\n # doc\n def foo\n end\nend" does to_s of "class Foo\n # doc\n def foo\n end\nend" + does to_s of "lib Foo\n union Foo\n a : Int\n b : Int32\n end\nend" does to_s of "lib Foo\n union Foo\n a : Int\n b : Int32\n end\nend" + does to_s of "def foo(**args)\nend" does to_s of "def foo(**args)\nend" + does to_s of "foo(&.==(2))" does to_s of "foo(&.==(2))" + does to_s of "1e10_f64" does to_s of "1e10_f64" + does to_s of "def foo(**options, &block)\nend" does to_s of "def foo(**options, &block)\nend" + does to_s of "macro foo\n 123\nend" does to_s of "macro foo\n 123\nend" + does to_s of "def foo(@[Foo] x : T = 1)\nend" does to_s of "def foo(@[Foo] x : T = 1)\nend" + does to_s of "asm(\"nop\" :: \"c\"(3), \"d\"(4) ::)" does to_s of "asm(\"nop\" :: \"c\"(3), \"d\"(4) ::)" + does to_s of "&+1" does to_s of "&+1" + does to_s of "asm(\"nop\" ::::)" does to_s of "asm(\"nop\" ::::)" does to_s of "%r(/)" does to_s of "%r(/)" - does to_s of "/\\s/" does to_s of "/\\s/" + does to_s of "1 & 2 & (3 | 4)" does to_s of "1 & 2 & (3 | 4)" + does to_s of "lib LibFoo\n fun foo(x : (T -> U) | V)\nend" does to_s of "lib LibFoo\n fun foo(x : (T -> U) | V)\nend" + does to_s of "Foo(\"bar baz\": Int32)" does to_s of "Foo(\"bar baz\": Int32)" + does to_s of "def foo(@[Foo] **args)\nend" does to_s of "def foo(@[Foo] **args)\nend" + does to_s of "macro foo(*var)\nend" does to_s of "macro foo(*var)\nend" + does to_s of ":\"{\"" does to_s of ":\"{\"" + does to_s of "{(1 + 2)}" does to_s of "{(1 + 2)}" + does to_s of "1.+ do\nend" does to_s of "1.+ do\nend" + does to_s of "asm(\"nop\" : \"a\"(1), \"b\"(2) : \"c\"(3), \"d\"(4) : \"e\", \"f\" : \"volatile\", \"alignstack\", \"intel\")" does to_s of "asm(\"nop\" : \"a\"(1), \"b\"(2) : \"c\"(3), \"d\"(4) : \"e\", \"f\" : \"volatile\", \"alignstack\", \"intel\")" + does to_s of "def foo(**x)\n yield\nend" does to_s of "def foo(**x)\n yield\nend" + does to_s of "def foo(x)\n yield\nend" does to_s of "def foo(x)\n yield\nend" + does to_s of "foo : (A | B).class" does to_s of "foo : (A | B).class" + does to_s of "%(\"\#{foo}\")" does to_s of "%(\"\#{foo}\")" + does to_s of "%x(whoami)" does to_s of "%x(whoami)" + does to_s of "1.//(2, a: 3)" does to_s of "1.//(2, a: 3)" + does to_s of "({} of K => V).foo" does to_s of "({} of K => V).foo" + does to_s of "def foo(x : T = 1)\nend" does to_s of "def foo(x : T = 1)\nend" + does to_s of "/\\?/" does to_s of "/\\?/" + does to_s of "{ {1, 2, 3} => 4 }" does to_s of "{ {1, 2, 3} => 4 }" + does to_s of "lib LibC\n fun getch = \"get.char\"\nend" does to_s of "lib LibC\n fun getch = \"get.char\"\nend" + does to_s of "macro foo\n %bar = 1\nend" does to_s of "macro foo\n %bar = 1\nend" + does to_s of "if true\n (1)\nend" does to_s of "if true\n (1)\nend" + does to_s of "macro foo(@[Foo] &)\nend" does to_s of "macro foo(@[Foo] &)\nend" + does to_s of "/hello world/" does to_s of "/hello world/" + does to_s of "{% if foo %}\n foo_then\n{% end %}" does to_s of "{% if foo %}\n foo_then\n{% end %}" + does to_s of "def foo(x, **args, &block)\nend" does to_s of "def foo(x, **args, &block)\nend" + does to_s of "foo.nil?" does to_s of "foo.nil?" does to_s of "1.&**" does to_s of "1.&**" + does to_s of "macro foo\n{% verbatim do %}1{% end %}\nend" does to_s of "macro foo\n{% verbatim do %}1{% end %}\nend" + does to_s of "def foo(*args : _)\nend" does to_s of "def foo(*args : _)\nend" + does to_s of "macro foo\n{{ @type }}\nend" does to_s of "macro foo\n{{ @type }}\nend" + does to_s of "1.responds_to?(:to_s)" does to_s of "1.responds_to?(:to_s)" + does to_s of "foo : A | (B -> C)" does to_s of "foo : A | (B -> C)" does to_s of "foo()" does to_s of "foo()" - does to_s of "([] of T).foo" does to_s of "([] of T).foo" - does to_s of "def foo(x, **args)\nend" does to_s of "def foo(x, **args)\nend" - does to_s of "[(1 + 2)] of Int32" does to_s of "[(1 + 2)] of Int32" - does to_s of "!a" does to_s of "!a" - does to_s of "def foo(x, **args, &block : (_ -> _))\nend" does to_s of "def foo(x, **args, &block : (_ -> _))\nend" - does to_s of "asm(\"nop\" ::: \"e\" : \"volatile\")" does to_s of "asm(\"nop\" ::: \"e\" : \"volatile\")" - does to_s of "macro foo(x, *y)\nend" does to_s of "macro foo(x, *y)\nend" - does to_s of "def foo(@[Foo] x, @[Bar] **args, @[Baz] &block)\nend" does to_s of "def foo(@[Foo] x, @[Bar] **args, @[Baz] &block)\nend" - does to_s of "1 && (a = 2)" does to_s of "1 && (a = 2)" - does to_s of "class Foo\n private def bar\n end\nend" does to_s of "class Foo\n private def bar\n end\nend" - does to_s of "lib LibFoo\n fun foo(x : (T -> U) -> V, W) : ((T -> U) -> V)\nend" does to_s of "lib LibFoo\n fun foo(x : (T -> U) -> V, W) : ((T -> U) -> V)\nend" - does to_s of "1[2, x: 3, &.foo] = 4" does to_s of "1[2, x: 3, &.foo] = 4" - does to_s of "def foo(x y)\nend" does to_s of "def foo(x y)\nend" - does to_s of "(1 + 2).as?(Int32)" does to_s of "(1 + 2).as?(Int32)" - does to_s of "&-1" does to_s of "&-1" - does to_s of "{% verbatim do %}\n 1{{ 2 }}\n 3{{ 4 }}\n{% end %}" does to_s of "{% verbatim do %}\n 1{{ 2 }}\n 3{{ 4 }}\n{% end %}" - does to_s of "macro foo(x, **args)\nend" does to_s of "macro foo(x, **args)\nend" + does to_s of "macro foo(x, @[Foo] **args)\nend" does to_s of "macro foo(x, @[Foo] **args)\nend" + does to_s of "def foo(x : X, @[Foo] y : Y) forall X, Y\nend" does to_s of "def foo(x : X, @[Foo] y : Y) forall X, Y\nend" does to_s of "他.说(\"你好\")" does to_s of "他.说(\"你好\")" - does to_s of "1.&*" does to_s of "1.&*" - does to_s of "\"\\e\\0\\\"\"" does to_s of "\"\\e\\0\\\"\"" - does to_s of "lib LibFoo\n fun foo(x : Foo((T -> U)))\nend" does to_s of "lib LibFoo\n fun foo(x : Foo((T -> U)))\nend" - does to_s of "%r( )" does to_s of "%r( )" - does to_s of "lib LibFoo\n fun foo(x : (T -> U) | V)\nend" does to_s of "lib LibFoo\n fun foo(x : (T -> U) | V)\nend" - does to_s of "1[2, x: 3, &.foo]?" does to_s of "1[2, x: 3, &.foo]?" - does to_s of "1.[]=" does to_s of "1.[]=" + does to_s of "->::foo(Int32, String)" does to_s of "->::foo(Int32, String)" + does to_s of "%r{\#{1}\\/\\0}" does to_s of "%r{\#{1}\\/\\0}" + does to_s of "1.//(2, &block)" does to_s of "1.//(2, &block)" + does to_s of "foo(a.as(Int32))" does to_s of "foo(a.as(Int32))" + does to_s of "/hello world/imx" does to_s of "/hello world/imx" + does to_s of "1.responds_to?(:\"&&\")" does to_s of "1.responds_to?(:\"&&\")" + does to_s of "return true ? 1 : 2" does to_s of "return true ? 1 : 2" + does to_s of "case 1; when .foo?; 2; end" does to_s of "case 1; when .foo?; 2; end" does to_s of "{{ foo }}" does to_s of "{{ foo }}" - does to_s of "begin\n (1)\nrescue\nend" does to_s of "begin\n (1)\nrescue\nend" -Code gen: c enum - codegens enum with 1 << 3 codegens enum with 1 << 3 - codegens enum with (1 + 2) * 3 codegens enum with (1 + 2) * 3 - codegens enum value 2 codegens enum value 2 - codegens enum with 3 &- 2 codegens enum with 3 &- 2 - codegens enum value codegens enum value - codegens enum with 3 * 2 codegens enum with 3 * 2 - codegens enum value 3 codegens enum value 3 - codegens enum that refers to another constant codegens enum that refers to another constant - codegens enum with 1 + 2 codegens enum with 1 + 2 - codegens enum value 4 codegens enum value 4 - codegens enum that refers to another enum constant codegens enum that refers to another enum constant - codegens enum with +1 codegens enum with +1 - codegens enum with 10 ^ 3 codegens enum with 10 ^ 3 - codegens enum with 3 - 2 codegens enum with 3 - 2 - codegens enum with 10 % 3 codegens enum with 10 % 3 - codegens enum with 10 & 3 codegens enum with 10 & 3 - codegens enum with 1 &+ 2 codegens enum with 1 &+ 2 - codegens enum with ~1 codegens enum with ~1 - codegens enum with 100 >> 3 codegens enum with 100 >> 3 - codegens enum with -1 codegens enum with -1 - codegens enum with 3 &* 2 codegens enum with 3 &* 2 - codegens enum with 10 // 2 codegens enum with 10 // 2 - codegens enum with 10 | 3 codegens enum with 10 | 3 -Semantic: named args - matches specific overload with named arguments (#2753) matches specific overload with named arguments (#2753) - overloads based on required named args, with restrictions overloads based on required named args, with restrictions - errors if named arg already specified errors if named arg already specified - errors if named arg already specified but in same position errors if named arg already specified but in same position - errors if missing one argument errors if missing one argument - allows named arg if there's a splat allows named arg if there's a splat - passes #2696 passes #2696 - sends two regular arguments as named arguments sends two regular arguments as named arguments - errors if named arg already specified errors if named arg already specified - says correct error when forwarding named args (#7491) says correct error when forwarding named args (#7491) - sends two regular arguments as named arguments in inverted position (2) sends two regular arguments as named arguments in inverted position (2) - gives correct error message with external names (#3934) gives correct error message with external names (#3934) - overloads based on required named args overloads based on required named args - says no overload matches with named arg says no overload matches with named arg - errors if missing two arguments errors if missing two arguments - doesn't include arguments with default values in missing arguments error doesn't include arguments with default values in missing arguments error - errors if named arg not found in new errors if named arg not found in new - errors if named arg matches splat argument errors if named arg matches splat argument - doesn't fail on named argument with NoReturn type (#7760) doesn't fail on named argument with NoReturn type (#7760) - errors if named arg matches single splat argument errors if named arg matches single splat argument - gives correct error message for missing args after * gives correct error message for missing args after * - errors if named arg not found errors if named arg not found - sends one regular argument as named argument sends one regular argument as named argument - errors if doesn't pass named arg restriction errors if doesn't pass named arg restriction - uses bare splat in new uses bare splat in new - errors if named arg already specified, but multiple overloads (#7281) errors if named arg already specified, but multiple overloads (#7281) - matches specific overload with named arguments (2) (#2753) matches specific overload with named arguments (2) (#2753) - sends two regular arguments as named arguments in inverted position (1) sends two regular arguments as named arguments in inverted position (1) -Code gen: c union - codegens struct inside union codegens struct inside union - codegens union property setter 2 via pointer codegens union property setter 2 via pointer - automatically converts by invoking to_unsafe automatically converts by invoking to_unsafe - codegens union property setter 1 codegens union property setter 1 - automatically converts numeric union type in field assignment automatically converts numeric union type in field assignment - codegens union property default value codegens union property default value - automatically converts numeric type in field assignment automatically converts numeric type in field assignment - reads union instance var reads union instance var - moves unions around correctly (#12550) moves unions around correctly (#12550) moves unions around correctly (#12550) moves unions around correctly (#12550) moves unions around correctly (#12550)���������� moves unions around correctly (#12550)�� moves unions around correctly (#12550)�� moves unions around correctly (#12550)�� moves unions around correctly (#12550) moves unions around correctly (#12550) - codegens assign c union to union codegens assign c union to union - aligns to the member with biggest align requirements aligns to the member with biggest align requirements - does to_s does to_s does to_s does to_s does to_s does to_s���� does to_s���������� does to_s�� does to_s does to_s - codegens union property default value 2 codegens union property default value 2 - builds union setter with fun type builds union setter with fun type - codegens union property setter 1 via pointer codegens union property setter 1 via pointer - codegens union property setter 2 codegens union property setter 2 - fills union type to the max size fills union type to the max size -Semantic: static array - can match number type argument of static array (#1203) can match number type argument of static array (#1203) - errors on negative static array size errors on negative static array size - allows instantiating static array instance var in initialize of generic type allows instantiating static array instance var in initialize of generic type - types static array new types static array new - doesn't crash on restriction (#584) doesn't crash on restriction (#584) - types static array new with size being a constant types static array new with size being a constant - doesn't match other number type argument of static array (#1203) doesn't match other number type argument of static array (#1203) - types static array new with size being a computed constant, and use N (bug) types static array new with size being a computed constant, and use N (bug) - doesn't crash on offsetof (#8858) doesn't crash on offsetof (#8858) - types static array with var declaration types static array with var declaration - types static array new with size being a nested constant inside type declaration (#5426) types static array new with size being a nested constant inside type declaration (#5426) - can match N type argument of static array (#1203) can match N type argument of static array (#1203) - types static array new with size being a computed constant types static array new with size being a computed constant - errors if trying to instantiate static array with N not an integer errors if trying to instantiate static array with N not an integer - types static array with type as size types static array with type as size - doesn't crash on sizeof (#8858) doesn't crash on sizeof (#8858) - doesn't crash on instance_sizeof (#8858) doesn't crash on instance_sizeof (#8858) -Crystal::Repl::Interpreter - does call without receiver inside closure does call without receiver inside closure - procs - interprets no args proc literal interprets no args proc literal - casts from nilable proc type to proc type casts from nilable proc type to proc type - can downcast Proc(T) to Proc(Nil) can downcast Proc(T) to Proc(Nil) - interprets call inside Proc type interprets call inside Proc type - discards proc call discards proc call - interprets proc literal with args interprets proc literal with args - calls proc primitive on union of module that has no subtypes (#12954) calls proc primitive on union of module that has no subtypes (#12954) - casts proc call arguments to proc arg types (#12350) casts proc call arguments to proc arg types (#12350) -Crystal::Repl::Interpreter - variadic calls - promotes int promotes int - promotes float promotes float - promotes enum promotes enum - command expansion - expands ldflags expands ldflags -Code gen: alias - lazily solves aliases (#1346) lazily solves aliases (#1346) - casts to recursive alias casts to recursive alias casts to recursive alias casts to recursive alias���� casts to recursive alias casts to recursive alias������ casts to recursive alias���� casts to recursive alias�� casts to recursive alias casts to recursive alias - invokes methods on empty array of recursive alias (2) invokes methods on empty array of recursive alias (2) invokes methods on empty array of recursive alias (2) invokes methods on empty array of recursive alias (2) invokes methods on empty array of recursive alias (2) invokes methods on empty array of recursive alias (2) invokes methods on empty array of recursive alias (2) invokes methods on empty array of recursive alias (2)���������������� invokes methods on empty array of recursive alias (2) invokes methods on empty array of recursive alias (2) - overloads alias against generic (2) (#3261) overloads alias against generic (2) (#3261) - overloads alias against generic (1) (#3261) overloads alias against generic (1) (#3261) - doesn't break with alias for link attributes doesn't break with alias for link attributes - codegens cast to alias that includes bool codegens cast to alias that includes bool - invokes methods on empty array of recursive alias (3) invokes methods on empty array of recursive alias (3) invokes methods on empty array of recursive alias (3) invokes methods on empty array of recursive alias (3) invokes methods on empty array of recursive alias (3) invokes methods on empty array of recursive alias (3) invokes methods on empty array of recursive alias (3)�������������� invokes methods on empty array of recursive alias (3)�� invokes methods on empty array of recursive alias (3) invokes methods on empty array of recursive alias (3) - invokes methods on empty array of recursive alias (1) invokes methods on empty array of recursive alias (1) invokes methods on empty array of recursive alias (1) invokes methods on empty array of recursive alias (1) invokes methods on empty array of recursive alias (1) invokes methods on empty array of recursive alias (1)������ invokes methods on empty array of recursive alias (1)�������� invokes methods on empty array of recursive alias (1)�� invokes methods on empty array of recursive alias (1) invokes methods on empty array of recursive alias (1) - casts to recursive alias casts to recursive alias - doesn't crash on cast to as recursive alias (#639) doesn't crash on cast to as recursive alias (#639) -Semantic: automatic cast - doesn't autocast number on union (#8655) doesn't autocast number on union (#8655) - casts Int32 to Int64 in ivar assignment casts Int32 to Int64 in ivar assignment - errors when autocast default value doesn't match enum member errors when autocast default value doesn't match enum member - can autocast to union in default value (symbol and int) can autocast to union in default value (symbol and int) - can match multiple times with the same argument type (#7578) can match multiple times with the same argument type (#7578) - casts Symbol to Enum in ivar assignment casts Symbol to Enum in ivar assignment - casts literal integer (Int32 -> Float32) casts literal integer (Int32 -> Float32) - doesn't say 'ambiguous call' when there's an exact match for symbol (#6601) doesn't say 'ambiguous call' when there's an exact match for symbol (#6601) - casts Symbol to Enum in ivar type declaration casts Symbol to Enum in ivar type declaration - doesn't do multidispatch if an overload matches exactly (#8217) doesn't do multidispatch if an overload matches exactly (#8217) - casts literal integer in private top-level method (#7016) casts literal integer in private top-level method (#7016) - doesn't do multidispatch if an overload matches exactly (#8217) doesn't do multidispatch if an overload matches exactly (#8217) - autocasts float32 variable to float64 type (#9565) autocasts float32 variable to float64 type (#9565) - casts literal float (Float32 -> Float64) casts literal float (Float32 -> Float64) - casts integer expression to larger type (#9565) casts integer expression to larger type (#9565) - casts Int32 to Int64 in cvar assignment casts Int32 to Int64 in cvar assignment - autocasts nested type from non-nested type (#10315) autocasts nested type from non-nested type (#10315) - doesn't say 'ambiguous call' when there's an exact match for integer (#6601) doesn't say 'ambiguous call' when there's an exact match for integer (#6601) - can use automatic cast with `with ... yield` (#7736) can use automatic cast with `with ... yield` (#7736) - casts integer variable to larger type (#9565) casts integer variable to larger type (#9565) - doesn't cast integer variable to larger type (not #9565) doesn't cast integer variable to larger type (not #9565) - casts integer variable to larger type (Int64 to Int128) (#9565) casts integer variable to larger type (Int64 to Int128) (#9565) - casts Int32 to Int64 in lvar assignment casts Int32 to Int64 in lvar assignment - says ambiguous call for symbol says ambiguous call for symbol - casts literal integer through alias with union casts literal integer through alias with union - matches correct overload matches correct overload - casts Int32 to Int64 in ivar type declaration casts Int32 to Int64 in ivar type declaration - says ambiguous call for integer says ambiguous call for integer - casts literal integer through alias with union casts literal integer through alias with union - casts literal integer (Int32 -> Float64) casts literal integer (Int32 -> Float64) - casts literal integer (Int64 -> Int32, ok) casts literal integer (Int64 -> Int32, ok) - casts Symbol to Enum in cvar type declaration casts Symbol to Enum in cvar type declaration - casts literal integer (Int32 -> Int64) casts literal integer (Int32 -> Int64) - autocasts first argument and second matches without autocast autocasts first argument and second matches without autocast - can autocast to union in default value can autocast to union in default value - autocasts integer variable to float type (#9565) autocasts integer variable to float type (#9565) - says ambiguous call for integer var to union type (#9565) says ambiguous call for integer var to union type (#9565) - says ambiguous call for integer var to larger type (#9565) says ambiguous call for integer var to larger type (#9565) - casts literal integer (Int32 -> no restriction) casts literal integer (Int32 -> no restriction) - casts Int32 to Int64 in ivar type declaration in generic casts Int32 to Int64 in ivar type declaration in generic - casts symbol literal to enum casts symbol literal to enum - can autocast to alias in default value can autocast to alias in default value - errors if symbol name doesn't match enum member errors if symbol name doesn't match enum member - casts literal integer (Int64 -> Int32, too big) casts literal integer (Int64 -> Int32, too big) - says ambiguous call for integer (2) says ambiguous call for integer (2) - casts literal float (Float64 -> Float32) casts literal float (Float64 -> Float32) - says ambiguous call for integer on alias (#6620) says ambiguous call for integer on alias (#6620) - casts Int32 to Int64 in cvar type declaration casts Int32 to Int64 in cvar type declaration - can autocast to union in default value (multiple enums) can autocast to union in default value (multiple enums) - can't cast integer to another type when it doesn't fit (#9565) can't cast integer to another type when it doesn't fit (#9565) - casts Int32 -> Int64 in arg restriction casts Int32 -> Int64 in arg restriction - says ambiguous call on union (#8655) says ambiguous call on union (#8655) -Codegen: extern struct - declares extern union, sets and gets instance var declares extern union, sets and gets instance var - declares extern struct with no constructor declares extern struct with no constructor - codegens proc that takes an extern struct with C ABI codegens proc that takes an extern struct with C ABI codegens proc that takes an extern struct with C ABI codegens proc that takes an extern struct with C ABI codegens proc that takes an extern struct with C ABI codegens proc that takes an extern struct with C ABI codegens proc that takes an extern struct with C ABI���� codegens proc that takes an extern struct with C ABI������������ codegens proc that takes an extern struct with C ABI codegens proc that takes an extern struct with C ABI - doesn't crash with proc with extern struct that's a closure doesn't crash with proc with extern struct that's a closure - sets callback on extern struct sets callback on extern struct sets callback on extern struct sets callback on extern struct sets callback on extern struct���� sets callback on extern struct�������� sets callback on extern struct�� sets callback on extern struct�� sets callback on extern struct sets callback on extern struct - codegens proc that takes and returns large extern struct by value codegens proc that takes and returns large extern struct by value - declares extern union with no constructor declares extern union with no constructor - declares extern struct, sets and gets instance var declares extern struct, sets and gets instance var - codegens extern proc call twice (#4982) codegens extern proc call twice (#4982) - codegens proc that takes and returns an extern struct with sret codegens proc that takes and returns an extern struct with sret codegens proc that takes and returns an extern struct with sret codegens proc that takes and returns an extern struct with sret codegens proc that takes and returns an extern struct with sret codegens proc that takes and returns an extern struct with sret codegens proc that takes and returns an extern struct with sret�������������� codegens proc that takes and returns an extern struct with sret�� codegens proc that takes and returns an extern struct with sret codegens proc that takes and returns an extern struct with sret - codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI������������ codegens proc that takes and returns an extern struct with C ABI�� codegens proc that takes and returns an extern struct with C ABI�� codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI - codegens proc that takes an extern struct with C ABI, callback returns nil codegens proc that takes an extern struct with C ABI, callback returns nil codegens proc that takes an extern struct with C ABI, callback returns nil codegens proc that takes an extern struct with C ABI, callback returns nil codegens proc that takes an extern struct with C ABI, callback returns nil codegens proc that takes an extern struct with C ABI, callback returns nil codegens proc that takes an extern struct with C ABI, callback returns nil�������������� codegens proc that takes an extern struct with C ABI, callback returns nil�� codegens proc that takes an extern struct with C ABI, callback returns nil codegens proc that takes an extern struct with C ABI, callback returns nil - invokes proc with extern struct with sret invokes proc with extern struct with sret - codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI�������������� codegens proc that takes and returns an extern struct with C ABI�� codegens proc that takes and returns an extern struct with C ABI codegens proc that takes and returns an extern struct with C ABI - sets callback on extern union sets callback on extern union sets callback on extern union sets callback on extern union sets callback on extern union sets callback on extern union sets callback on extern union�������������� sets callback on extern union�� sets callback on extern union sets callback on extern union - invokes proc with extern struct invokes proc with extern struct - declares extern struct with no constructor, assigns var declares extern struct with no constructor, assigns var - codegens proc that takes an extern struct with C ABI (2) codegens proc that takes an extern struct with C ABI (2) codegens proc that takes an extern struct with C ABI (2) codegens proc that takes an extern struct with C ABI (2) codegens proc that takes an extern struct with C ABI (2) codegens proc that takes an extern struct with C ABI (2)���� codegens proc that takes an extern struct with C ABI (2)���������� codegens proc that takes an extern struct with C ABI (2)�� codegens proc that takes an extern struct with C ABI (2) codegens proc that takes an extern struct with C ABI (2) -context - can get context inside a module can get context inside a module - can get context inside initialize can get context inside initialize - does includes regex special variables does includes regex special variables - can't get context from uncalled method can't get context from uncalled method - includes args includes args - can get context of yielded block can get context of yielded block - can display json output can display json output - can display text output can display text output - includes top level vars includes top level vars - does includes args, instance vars, local variables and expressions on instance methods does includes args, instance vars, local variables and expressions on instance methods - can get context in contained class' class method can get context in contained class' class method - does includes self on classes does includes self on classes - can get context of nested yielded block can get context of nested yielded block - use type filters from if var use type filters from if var - can get context in file private method can get context in file private method - can get context of empty def can get context of empty def - includes last call includes last call - can get context in file private module can get context in file private module - use type filters from is_a? use type filters from is_a? - includes assignments includes assignments - can handle union types can handle union types - includes block args includes block args - does not includes temp variables does not includes temp variables - can get context in generic class can get context in generic class - consider different instances of def consider different instances of def - can get context of empty yielded block can get context of empty yielded block - can get context inside class methods can get context inside class methods -Semantic: nil - restricts type of 'if foo' restricts type of 'if foo' - types empty types empty - marks instance variables as nil when not in initialize marks instance variables as nil when not in initialize - restricts type of 'while foo' restricts type of 'while foo' - doesn't check return type for nil doesn't check return type for nil - types nil types nil - restricts type of 'if foo' on assign restricts type of 'if foo' on assign - doesn't check return type for void doesn't check return type for void - marks instance variables as nil when not in initialize 2 marks instance variables as nil when not in initialize 2 - restricts type of 'while foo' on assign restricts type of 'while foo' on assign - can call a fun with nil for typedef pointer can call a fun with nil for typedef pointer - can call a fun with nil for pointer can call a fun with nil for pointer - marks instance variables as nil but doesn't explode on macros marks instance variables as nil but doesn't explode on macros -Restrictions - restricts class union type to overloads with classes (2) restricts class union type to overloads with classes (2) - errors if using typeof in block restriction errors if using typeof in block restriction - matches number in bound free variable (#13605) matches number in bound free variable (#13605) - restricts class union type to overloads with classes restricts class union type to overloads with classes - errors if can't find type on lookup with nested type errors if can't find type on lookup with nested type - sets number as free variable (#2699) sets number as free variable (#2699) - errors on T::Type that's a union when used from block type restriction errors on T::Type that's a union when used from block type restriction - self always matches instance type in restriction self always matches instance type in restriction - restrict - restricts generic module instance with another generic module instance restricts generic module instance with another generic module instance - restricts class against uninstantiated generic base class through multiple inheritance (2) (#9660) restricts class against uninstantiated generic base class through multiple inheritance (2) (#9660) - restricts type with included module restricts type with included module - restricts module through generic include (#4287) restricts module through generic include (#4287) - restricts virtual generic class against uninstantiated generic subclass (1) restricts virtual generic class against uninstantiated generic subclass (1) - restricts type with same type restricts type with same type - restricts generic module instance with another module restricts generic module instance with another module - restricts type with another type restricts type with another type - restricts type with superclass restricts type with superclass - restricts generic module instance with class restricts generic module instance with class - restricts virtual type with included module 1 restricts virtual type with included module 1 - restricts module with another module restricts module with another module - restricts virtual type with included module 2 restricts virtual type with included module 2 - restricts class against uninstantiated generic base class through multiple inheritance (1) (#9660) restricts class against uninstantiated generic base class through multiple inheritance (1) (#9660) - restricts virtual generic class against uninstantiated generic subclass (2) restricts virtual generic class against uninstantiated generic subclass (2) - passes #278 passes #278 - works with static array that uses underscore works with static array that uses underscore - works with union against unions of generics works with union against unions of generics - sets number as unbound generic type var (#13110) sets number as unbound generic type var (#13110) - errors if using typeof inside generic type errors if using typeof inside generic type - errors on T::Type that's union when used from type restriction errors on T::Type that's union when used from type restriction - errors if using NamedTuple with positional args errors if using NamedTuple with positional args - errors if using Tuple with named args errors if using Tuple with named args - should not let GenericChild(Base) pass as a GenericBase(Child) (#1294) should not let GenericChild(Base) pass as a GenericBase(Child) (#1294) - restricts aliased typedef type (#9474) restricts aliased typedef type (#9474) - does not treat single path as free variable when given number (1) (#11859) does not treat single path as free variable when given number (1) (#11859) - works with generic class metaclass vs. generic instance class metaclass works with generic class metaclass vs. generic instance class metaclass - errors if using typeof errors if using typeof - restriction_of? - GenericClassType vs GenericClassInstanceType - doesn't mix different generic classes doesn't mix different generic classes - works with classes in different namespaces works with classes in different namespaces - keeps GenericClassInstanceType before GenericClassType keeps GenericClassInstanceType before GenericClassType - inserts GenericClassInstanceType before GenericClassType inserts GenericClassInstanceType before GenericClassType - Metaclass vs Path - inserts metaclass before Value inserts metaclass before Value - doesn't error if path is undefined and method is not called (2) (#12516) doesn't error if path is undefined and method is not called (2) (#12516) - keeps metaclass before Class keeps metaclass before Class - keeps metaclass before Value keeps metaclass before Value - keeps metaclass before Object keeps metaclass before Object - inserts metaclass before Object inserts metaclass before Object - doesn't error if path is undefined and method is not called (1) (#12516) doesn't error if path is undefined and method is not called (1) (#12516) - inserts metaclass before Class inserts metaclass before Class - NamedTuple vs NamedTuple - inserts more specialized NamedTuple before less specialized one inserts more specialized NamedTuple before less specialized one - doesn't mix incompatible NamedTuples (#10238) doesn't mix incompatible NamedTuples (#10238) - keeps more specialized NamedTuple before less specialized one keeps more specialized NamedTuple before less specialized one - Union - handles redefinitions (1) (#12330) handles redefinitions (1) (#12330) - orders union before generic (#12330) orders union before generic (#12330) - handles redefinitions (2) (#12330) handles redefinitions (2) (#12330) - free variables - inserts path before free variable with same name inserts path before free variable with same name - keeps path before free variable even if free var resolves to a more specialized type keeps path before free variable even if free var resolves to a more specialized type - inserts constant before free variable with same name inserts constant before free variable with same name - keeps constant before free variable with same name keeps constant before free variable with same name - keeps path before free variable with same name keeps path before free variable with same name - inserts path before free variable even if free var resolves to a more specialized type inserts path before free variable even if free var resolves to a more specialized type - Path vs NumberLiteral - inserts constant before number literal of same value with generic arguments inserts constant before number literal of same value with generic arguments - inserts number literal before constant of same value with generic arguments inserts number literal before constant of same value with generic arguments - Underscore vs Path - keeps underscore after Path (#12854) keeps underscore after Path (#12854) - works with splats and modules, under -Dpreview_overload_order (#12854) works with splats and modules, under -Dpreview_overload_order (#12854) - inserts Path before underscore (#12854) inserts Path before underscore (#12854) - Path vs Path - keeps typed Path before untyped Path keeps typed Path before untyped Path - inserts typed Path before untyped Path inserts typed Path before untyped Path - Metaclass vs Metaclass - inserts typed Metaclass before untyped Metaclass inserts typed Metaclass before untyped Metaclass - keeps typed Metaclass before untyped Metaclass keeps typed Metaclass before untyped Metaclass - Generic vs Path - inserts untyped Generic before untyped Path inserts untyped Generic before untyped Path - inserts typed Generic before untyped Path inserts typed Generic before untyped Path - keeps untyped Generic before untyped Path keeps untyped Generic before untyped Path - inserts untyped Generic before untyped Path (2) inserts untyped Generic before untyped Path (2) - keeps typed Generic before untyped Path keeps typed Generic before untyped Path - Generic vs Generic - keeps typed Generic before untyped Generic keeps typed Generic before untyped Generic - inserts typed Generic before untyped Generic inserts typed Generic before untyped Generic - errors if using free var without forall errors if using free var without forall - works with static array (#637) works with static array (#637) - doesn't error if using NamedTuple with no args doesn't error if using NamedTuple with no args - does not treat single path as free variable when given number (2) (#11859) does not treat single path as free variable when given number (2) (#11859) - self always matches instance type in return type self always matches instance type in return type - matches free variable for type variable matches free variable for type variable - doesn't error if using Tuple with no args doesn't error if using Tuple with no args - makes metaclass subclass pass parent metaclass restriction (#2079) makes metaclass subclass pass parent metaclass restriction (#2079) - matches alias against alias in block type matches alias against alias in block type - allows passing recursive type to free var (#1076) allows passing recursive type to free var (#1076) - matches virtual type against alias matches virtual type against alias - works with generic compared to fixed (primitive) type works with generic compared to fixed (primitive) type - restricts virtual metaclass type against metaclass (#3438) restricts virtual metaclass type against metaclass (#3438) - errors if can't find type on lookup errors if can't find type on lookup - works with generic class metaclass vs. generic class metaclass works with generic class metaclass vs. generic class metaclass - errors if using typeof in block restriction errors if using typeof in block restriction -Crystal::Repl::Interpreter - control flow - interprets next inside while interprets next inside while - interprets next inside while inside block interprets next inside while inside block - interprets if bool (false) interprets if bool (false) - interprets if (nil literal) interprets if (nil literal) - interprets if (true literal) interprets if (true literal) - interprets break with value inside while (through break) interprets break with value inside while (through break) - interprets while interprets while - interprets if bool (true) interprets if bool (true) - interprets return Nil interprets return Nil - interprets break inside nested while interprets break inside nested while - interprets if (nil type) interprets if (nil type) - interprets if union type with bool, true interprets if union type with bool, true - interprets break inside while interprets break inside while - discards if discards if - interprets unless interprets unless - interprets if pointer, false interprets if pointer, false - interprets while, returns nil interprets while, returns nil - interprets return implicit nil and Int32 interprets return implicit nil and Int32 - discards while discards while - interprets if pointer, true interprets if pointer, true - interprets if union type with nil, false interprets if union type with nil, false - interprets break with value inside while (through normal flow) interprets break with value inside while (through normal flow) - interprets if (int type) interprets if (int type) - interprets break inside while inside block interprets break inside while inside block - interprets until interprets until - interprets if (false literal) interprets if (false literal) - interprets if union type with bool, false interprets if union type with bool, false - interprets return interprets return - interprets return Nil with explicit return (#12178) interprets return Nil with explicit return (#12178) -Semantic: if - restricts && of !var.is_a(...) restricts && of !var.is_a(...) - types an if with else of different type types an if with else of different type - doesn't filter and recombine when variables don't change in if doesn't filter and recombine when variables don't change in if - restricts && else in sub && (right) restricts && else in sub && (right) - restricts type with !var.is_a?(...) and && restricts type with !var.is_a?(...) and && - errors if requires inside if errors if requires inside if - types an if without else types an if without else - restricts || else (1) (#3266) restricts || else (1) (#3266) - doesn't consider nil type in else branch with if with && (#7434) doesn't consider nil type in else branch with if with && (#7434) - restricts || else (3) (#3266) restricts || else (3) (#3266) - can invoke method on var that is declared on the right hand side of an and can invoke method on var that is declared on the right hand side of an and - types `if` with `&&` and assignment types `if` with `&&` and assignment - correctly filters type of variable if there's a raise with an interpolation that can't be typed correctly filters type of variable if there's a raise with an interpolation that can't be typed - restricts && else in sub && (left) restricts && else in sub && (left) - restricts || else (2) (#3266) restricts || else (2) (#3266) - types variable after unreachable else of && (#3360) types variable after unreachable else of && (#3360) - restricts with && always falsey restricts with && always falsey - doesn't fail on new variables inside typeof condition doesn't fail on new variables inside typeof condition - doesn't fail on Expressions condition (1) doesn't fail on Expressions condition (1) - restricts with || but doesn't unify types to base class restricts with || but doesn't unify types to base class - restricts type with !var.is_a?(...) and || restricts type with !var.is_a?(...) and || - doesn't restrict || else in sub && (left) doesn't restrict || else in sub && (left) - restricts the type of the right hand side of an || when using is_a? (#1728) restricts the type of the right hand side of an || when using is_a? (#1728) - doesn't restrict || else in sub && (right) doesn't restrict || else in sub && (right) - types an if with else of same type types an if with else of same type - restricts || else in sub || (left) restricts || else in sub || (left) - passes bug (related to #1729) passes bug (related to #1729) - restricts || of more than 2 clauses (#8864) restricts || of more than 2 clauses (#8864) - includes pointer types in falsey branch includes pointer types in falsey branch - doesn't restrict with || on var and non-restricting condition doesn't restrict with || on var and non-restricting condition - restricts with || (#2464) restricts with || (#2464) - doesn't restrict with || on different vars doesn't restrict with || on different vars - restricts type with !var and || restricts type with !var and || - restricts || else in sub || (right) restricts || else in sub || (right) - doesn't fail on nested conditionals inside typeof condition doesn't fail on nested conditionals inside typeof condition - doesn't fail on Expressions condition (2) doesn't fail on Expressions condition (2) - restricts and doesn't unify union types restricts and doesn't unify union types -Lexer: location - stores column numbers stores column numbers - locations in same files are comparable based on line locations in same files are comparable based on line - uses two consecutive loc pragma uses two consecutive loc pragma - Location.parse - parses location from string parses location from string - raises ArgumentError if line number is invalid raises ArgumentError if line number is invalid - raises ArgumentError if missing colon raises ArgumentError if missing colon - raises ArgumentError if missing part raises ArgumentError if missing part - raises ArgumentError if column number is invalid raises ArgumentError if column number is invalid - locations with virtual files should be comparable locations with virtual files should be comparable - stores line numbers stores line numbers - overrides location with pragma overrides location with pragma - assigns correct loc location to node assigns correct loc location to node - parses var/call right after loc (#491) parses var/call right after loc (#491) - locations in different files have no order locations in different files have no order - pushes and pops its location pushes and pops its location -Codegen: class var - codegens class var as nil if assigned for the first time inside method codegens class var as nil if assigned for the first time inside method - reads class var from virtual type metaclass reads class var from virtual type metaclass - codegens class var codegens class var - codegens generic class with class var codegens generic class with class var - initializes class var the moment it reaches it initializes class var the moment it reaches it initializes class var the moment it reaches it initializes class var the moment it reaches it initializes class var the moment it reaches it�� initializes class var the moment it reaches it���������� initializes class var the moment it reaches it initializes class var the moment it reaches it���� initializes class var the moment it reaches it initializes class var the moment it reaches it - reads class var before initializing it (hoisting) reads class var before initializing it (hoisting) - uses var in class var initializer uses var in class var initializer - codegens class var with nilable reference type codegens class var with nilable reference type - reads class var from virtual type reads class var from virtual type - doesn't inherit class var value in subclass doesn't inherit class var value in subclass - gets pointerof class var gets pointerof class var - inline initialization of simple class var inline initialization of simple class var - initializes dependent constant before class var initializes dependent constant before class var initializes dependent constant before class var�� initializes dependent constant before class var�� initializes dependent constant before class var������ initializes dependent constant before class var�� initializes dependent constant before class var�� initializes dependent constant before class var�� initializes dependent constant before class var initializes dependent constant before class var - doesn't crash with pointerof from another module doesn't crash with pointerof from another module doesn't crash with pointerof from another module doesn't crash with pointerof from another module doesn't crash with pointerof from another module doesn't crash with pointerof from another module doesn't crash with pointerof from another module������������ doesn't crash with pointerof from another module���� doesn't crash with pointerof from another module doesn't crash with pointerof from another module - accesses class var from proc literal accesses class var from proc literal - reads simple class var before another complex one reads simple class var before another complex one - codegens class var with begin and vars codegens class var with begin and vars - declares var as uninitialized and initializes it unsafely declares var as uninitialized and initializes it unsafely - initializes class var with array literal initializes class var with array literal initializes class var with array literal initializes class var with array literal initializes class var with array literal�� initializes class var with array literal�� initializes class var with array literal���������� initializes class var with array literal�� initializes class var with array literal initializes class var with array literal - initializes class var of union with single type initializes class var of union with single type - codegens class var inside module codegens class var inside module - codegens class var with type declaration begin and vars codegens class var with type declaration begin and vars - declares and initializes declares and initializes - codegens class var as nil codegens class var as nil - runs class var side effects (#8862) runs class var side effects (#8862) runs class var side effects (#8862) runs class var side effects (#8862) runs class var side effects (#8862) runs class var side effects (#8862)�������� runs class var side effects (#8862)������ runs class var side effects (#8862)�� runs class var side effects (#8862) runs class var side effects (#8862) - gets pointerof class var complex constant gets pointerof class var complex constant - catch infinite loop in class var initializer catch infinite loop in class var initializer catch infinite loop in class var initializer catch infinite loop in class var initializer catch infinite loop in class var initializer catch infinite loop in class var initializer catch infinite loop in class var initializer���������� catch infinite loop in class var initializer������ catch infinite loop in class var initializer catch infinite loop in class var initializer - doesn't inherit class var value in module doesn't inherit class var value in module - codegens class var inside instance method codegens class var inside instance method - doesn't use nilable type for initializer doesn't use nilable type for initializer - doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865)�� doesn't error if class var shares name with const (#7865)���������� doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865)���� doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) - writes class var from virtual type writes class var from virtual type - codegens second class var initializer codegens second class var initializer -Semantic: not - types not types not - filters types inside if/else filters types inside if/else - filters types with !is_a? filters types with !is_a? - filters types inside if filters types inside if - doesn't restrict and in while (#4243) doesn't restrict and in while (#4243) - doesn't restrict and doesn't restrict and - types not as NoReturn if exp is NoReturn types not as NoReturn if exp is NoReturn -Code gen: exception - can use argument in rescue, with a different type (1) (#2844) can use argument in rescue, with a different type (1) (#2844) can use argument in rescue, with a different type (1) (#2844) can use argument in rescue, with a different type (1) (#2844) can use argument in rescue, with a different type (1) (#2844)������ can use argument in rescue, with a different type (1) (#2844)������ can use argument in rescue, with a different type (1) (#2844)�� can use argument in rescue, with a different type (1) (#2844)�� can use argument in rescue, with a different type (1) (#2844) can use argument in rescue, with a different type (1) (#2844) - executes ensure when no exception is raised (2) executes ensure when no exception is raised (2) executes ensure when no exception is raised (2) executes ensure when no exception is raised (2) executes ensure when no exception is raised (2)���� executes ensure when no exception is raised (2)�������� executes ensure when no exception is raised (2)�� executes ensure when no exception is raised (2)�� executes ensure when no exception is raised (2) executes ensure when no exception is raised (2) - executes ensure when exception is raised (1) executes ensure when exception is raised (1) executes ensure when exception is raised (1) executes ensure when exception is raised (1) executes ensure when exception is raised (1) executes ensure when exception is raised (1) executes ensure when exception is raised (1)�������������� executes ensure when exception is raised (1)�� executes ensure when exception is raised (1) executes ensure when exception is raised (1) - executes return inside rescue, executing ensure executes return inside rescue, executing ensure executes return inside rescue, executing ensure executes return inside rescue, executing ensure�� executes return inside rescue, executing ensure���� executes return inside rescue, executing ensure������ executes return inside rescue, executing ensure�� executes return inside rescue, executing ensure�� executes return inside rescue, executing ensure executes return inside rescue, executing ensure - executes ensure from return until target executes ensure from return until target executes ensure from return until target executes ensure from return until target executes ensure from return until target executes ensure from return until target executes ensure from return until target�������������� executes ensure from return until target�� executes ensure from return until target executes ensure from return until target - handle multiple exception types (1) handle multiple exception types (1) handle multiple exception types (1) handle multiple exception types (1)���� handle multiple exception types (1) handle multiple exception types (1)���� handle multiple exception types (1)������ handle multiple exception types (1)�� handle multiple exception types (1) handle multiple exception types (1) - handles exception in outer block (2) handles exception in outer block (2) handles exception in outer block (2) handles exception in outer block (2) handles exception in outer block (2) handles exception in outer block (2)������ handles exception in outer block (2)�������� handles exception in outer block (2)�� handles exception in outer block (2) handles exception in outer block (2) - handle exception raised by proc literal handle exception raised by proc literal handle exception raised by proc literal handle exception raised by proc literal handle exception raised by proc literal handle exception raised by proc literal handle exception raised by proc literal�������������� handle exception raised by proc literal�� handle exception raised by proc literal handle exception raised by proc literal - can result into union (2) can result into union (2) can result into union (2) can result into union (2) can result into union (2) can result into union (2)�� can result into union (2)������������ can result into union (2)�� can result into union (2) can result into union (2) - doesn't execute else if exception is raised conditionally (2) doesn't execute else if exception is raised conditionally (2) doesn't execute else if exception is raised conditionally (2) doesn't execute else if exception is raised conditionally (2)�� doesn't execute else if exception is raised conditionally (2) doesn't execute else if exception is raised conditionally (2)������ doesn't execute else if exception is raised conditionally (2)������ doesn't execute else if exception is raised conditionally (2)�� doesn't execute else if exception is raised conditionally (2) doesn't execute else if exception is raised conditionally (2) - codegens exception handler with return codegens exception handler with return codegens exception handler with return codegens exception handler with return codegens exception handler with return codegens exception handler with return���� codegens exception handler with return���������� codegens exception handler with return�� codegens exception handler with return codegens exception handler with return - handles rescuing union between module type and class type handles rescuing union between module type and class type handles rescuing union between module type and class type handles rescuing union between module type and class type handles rescuing union between module type and class type handles rescuing union between module type and class type handles rescuing union between module type and class type�������������� handles rescuing union between module type and class type�� handles rescuing union between module type and class type handles rescuing union between module type and class type - doesn't execute else if exception is raised conditionally (1) doesn't execute else if exception is raised conditionally (1) doesn't execute else if exception is raised conditionally (1) doesn't execute else if exception is raised conditionally (1) doesn't execute else if exception is raised conditionally (1)�� doesn't execute else if exception is raised conditionally (1)������ doesn't execute else if exception is raised conditionally (1)������ doesn't execute else if exception is raised conditionally (1)�� doesn't execute else if exception is raised conditionally (1) doesn't execute else if exception is raised conditionally (1) - executes ensure of break inside block executes ensure of break inside block executes ensure of break inside block executes ensure of break inside block executes ensure of break inside block������ executes ensure of break inside block������ executes ensure of break inside block�� executes ensure of break inside block�� executes ensure of break inside block executes ensure of break inside block - doesn't crash on #1988 doesn't crash on #1988 doesn't crash on #1988 doesn't crash on #1988 doesn't crash on #1988 doesn't crash on #1988�������� doesn't crash on #1988������ doesn't crash on #1988�� doesn't crash on #1988 doesn't crash on #1988 - types parenthesized expression (#5511) types parenthesized expression (#5511) types parenthesized expression (#5511) types parenthesized expression (#5511) types parenthesized expression (#5511)������ types parenthesized expression (#5511)������ types parenthesized expression (#5511) types parenthesized expression (#5511)���� types parenthesized expression (#5511) types parenthesized expression (#5511) - executes ensure when no exception is raised (1) executes ensure when no exception is raised (1) executes ensure when no exception is raised (1) executes ensure when no exception is raised (1) executes ensure when no exception is raised (1)���� executes ensure when no exception is raised (1)�� executes ensure when no exception is raised (1)�������� executes ensure when no exception is raised (1)�� executes ensure when no exception is raised (1) executes ensure when no exception is raised (1) - can result into union (1) can result into union (1) can result into union (1) can result into union (1) can result into union (1) can result into union (1) can result into union (1)�������������� can result into union (1)�� can result into union (1) can result into union (1) - executes ensure of break inside while inside body with block executes ensure of break inside while inside body with block executes ensure of break inside while inside body with block executes ensure of break inside while inside body with block executes ensure of break inside while inside body with block�� executes ensure of break inside while inside body with block�� executes ensure of break inside while inside body with block���������� executes ensure of break inside while inside body with block�� executes ensure of break inside while inside body with block executes ensure of break inside while inside body with block - codegens issue #118 (1) codegens issue #118 (1) - doesn't execute else if exception is raised (2) doesn't execute else if exception is raised (2) doesn't execute else if exception is raised (2) doesn't execute else if exception is raised (2)������ doesn't execute else if exception is raised (2)���� doesn't execute else if exception is raised (2)�� doesn't execute else if exception is raised (2)�� doesn't execute else if exception is raised (2)�� doesn't execute else if exception is raised (2) doesn't execute else if exception is raised (2) - captures exception thrown from proc captures exception thrown from proc captures exception thrown from proc captures exception thrown from proc captures exception thrown from proc captures exception thrown from proc captures exception thrown from proc�������������� captures exception thrown from proc�� captures exception thrown from proc captures exception thrown from proc - catches exception thrown by as inside method (#4030) catches exception thrown by as inside method (#4030) catches exception thrown by as inside method (#4030) catches exception thrown by as inside method (#4030) catches exception thrown by as inside method (#4030) catches exception thrown by as inside method (#4030)������������ catches exception thrown by as inside method (#4030)�� catches exception thrown by as inside method (#4030)�� catches exception thrown by as inside method (#4030) catches exception thrown by as inside method (#4030) - executes ensure when exception is unhandled (2) executes ensure when exception is unhandled (2) executes ensure when exception is unhandled (2)�� executes ensure when exception is unhandled (2)�� executes ensure when exception is unhandled (2)�� executes ensure when exception is unhandled (2)������ executes ensure when exception is unhandled (2)�� executes ensure when exception is unhandled (2)�� executes ensure when exception is unhandled (2) executes ensure when exception is unhandled (2) - handles exception in outer block (1) handles exception in outer block (1) handles exception in outer block (1) handles exception in outer block (1)�� handles exception in outer block (1)���� handles exception in outer block (1)������ handles exception in outer block (1)�� handles exception in outer block (1)�� handles exception in outer block (1) handles exception in outer block (1) - uses exception after rescue uses exception after rescue uses exception after rescue uses exception after rescue�� uses exception after rescue uses exception after rescue���������� uses exception after rescue�� uses exception after rescue�� uses exception after rescue uses exception after rescue - executes ensure of break inside while inside rescue executes ensure of break inside while inside rescue executes ensure of break inside while inside rescue executes ensure of break inside while inside rescue executes ensure of break inside while inside rescue executes ensure of break inside while inside rescue������������ executes ensure of break inside while inside rescue�� executes ensure of break inside while inside rescue�� executes ensure of break inside while inside rescue executes ensure of break inside while inside rescue - executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns�� executes ensure when the main block returns������������ executes ensure when the main block returns�� executes ensure when the main block returns executes ensure when the main block returns - handles rescuing union between module types handles rescuing union between module types handles rescuing union between module types handles rescuing union between module types handles rescuing union between module types handles rescuing union between module types handles rescuing union between module types�������� handles rescuing union between module types�������� handles rescuing union between module types handles rescuing union between module types - executes else if no exception is raised (1) executes else if no exception is raised (1) executes else if no exception is raised (1) executes else if no exception is raised (1) executes else if no exception is raised (1) executes else if no exception is raised (1)�� executes else if no exception is raised (1)������������ executes else if no exception is raised (1)�� executes else if no exception is raised (1) executes else if no exception is raised (1) - executes body if nothing raised (1) executes body if nothing raised (1) executes body if nothing raised (1) executes body if nothing raised (1) executes body if nothing raised (1) executes body if nothing raised (1) executes body if nothing raised (1)�������������� executes body if nothing raised (1)�� executes body if nothing raised (1) executes body if nothing raised (1) - doesn't codegen duplicated ensure if unreachable (#709) doesn't codegen duplicated ensure if unreachable (#709) - executes ensure of next inside while inside body executes ensure of next inside while inside body executes ensure of next inside while inside body executes ensure of next inside while inside body executes ensure of next inside while inside body���� executes ensure of next inside while inside body executes ensure of next inside while inside body���������� executes ensure of next inside while inside body�� executes ensure of next inside while inside body executes ensure of next inside while inside body - executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns�������������� executes ensure when the main block returns�� executes ensure when the main block returns executes ensure when the main block returns - handles nested exceptions handles nested exceptions handles nested exceptions handles nested exceptions handles nested exceptions���� handles nested exceptions handles nested exceptions���������� handles nested exceptions�� handles nested exceptions handles nested exceptions - receives exception object receives exception object receives exception object receives exception object receives exception object receives exception object receives exception object�������������� receives exception object�� receives exception object receives exception object - executes ensure when exception is unhandled (1) executes ensure when exception is unhandled (1) executes ensure when exception is unhandled (1) executes ensure when exception is unhandled (1) executes ensure when exception is unhandled (1)�������� executes ensure when exception is unhandled (1)���� executes ensure when exception is unhandled (1)�� executes ensure when exception is unhandled (1)�� executes ensure when exception is unhandled (1) executes ensure when exception is unhandled (1) - executes ensure of calling method when doing break inside block (#1233) executes ensure of calling method when doing break inside block (#1233) executes ensure of calling method when doing break inside block (#1233) executes ensure of calling method when doing break inside block (#1233) executes ensure of calling method when doing break inside block (#1233)������ executes ensure of calling method when doing break inside block (#1233)������ executes ensure of calling method when doing break inside block (#1233)�� executes ensure of calling method when doing break inside block (#1233)�� executes ensure of calling method when doing break inside block (#1233) executes ensure of calling method when doing break inside block (#1233) - handles rescuing module type handles rescuing module type handles rescuing module type handles rescuing module type�������� handles rescuing module type�� handles rescuing module type�� handles rescuing module type�� handles rescuing module type�� handles rescuing module type handles rescuing module type - does not rescue just any union does not rescue just any union does not rescue just any union does not rescue just any union������ does not rescue just any union���� does not rescue just any union does not rescue just any union���� does not rescue just any union�� does not rescue just any union does not rescue just any union - executes ensure when exception is raised (2) executes ensure when exception is raised (2) executes ensure when exception is raised (2)�� executes ensure when exception is raised (2)�� executes ensure when exception is raised (2) executes ensure when exception is raised (2) executes ensure when exception is raised (2)���������� executes ensure when exception is raised (2)�� executes ensure when exception is raised (2) executes ensure when exception is raised (2) - executes ensure when the main block yields and returns executes ensure when the main block yields and returns executes ensure when the main block yields and returns executes ensure when the main block yields and returns executes ensure when the main block yields and returns executes ensure when the main block yields and returns�������� executes ensure when the main block yields and returns������ executes ensure when the main block yields and returns�� executes ensure when the main block yields and returns executes ensure when the main block yields and returns - executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block���� executes ensure of next inside block���������� executes ensure of next inside block�� executes ensure of next inside block executes ensure of next inside block - closures rescue variable (#8141) closures rescue variable (#8141) - executes ensure of break inside while inside body with nested handlers executes ensure of break inside while inside body with nested handlers executes ensure of break inside while inside body with nested handlers executes ensure of break inside while inside body with nested handlers executes ensure of break inside while inside body with nested handlers executes ensure of break inside while inside body with nested handlers executes ensure of break inside while inside body with nested handlers�������������� executes ensure of break inside while inside body with nested handlers�� executes ensure of break inside while inside body with nested handlers executes ensure of break inside while inside body with nested handlers - rescues with types defaults to generic rescue rescues with types defaults to generic rescue rescues with types defaults to generic rescue rescues with types defaults to generic rescue rescues with types defaults to generic rescue rescues with types defaults to generic rescue���� rescues with types defaults to generic rescue���������� rescues with types defaults to generic rescue�� rescues with types defaults to generic rescue rescues with types defaults to generic rescue - handles subclass handles subclass handles subclass handles subclass handles subclass handles subclass������������ handles subclass handles subclass���� handles subclass handles subclass - runs NoReturn ensure (#3082) runs NoReturn ensure (#3082) runs NoReturn ensure (#3082) runs NoReturn ensure (#3082)������ runs NoReturn ensure (#3082) runs NoReturn ensure (#3082)���� runs NoReturn ensure (#3082)���� runs NoReturn ensure (#3082)�� runs NoReturn ensure (#3082) runs NoReturn ensure (#3082) - codegens return from rescue with value codegens return from rescue with value codegens return from rescue with value������ codegens return from rescue with value codegens return from rescue with value���� codegens return from rescue with value codegens return from rescue with value codegens return from rescue with value������ codegens return from rescue with value codegens return from rescue with value - rescues with type rescues with type rescues with type������ rescues with type�� rescues with type�� rescues with type rescues with type���� rescues with type�� rescues with type rescues with type - propagates raise status (#2074) propagates raise status (#2074) propagates raise status (#2074) propagates raise status (#2074) propagates raise status (#2074)�� propagates raise status (#2074) propagates raise status (#2074)������������ propagates raise status (#2074)�� propagates raise status (#2074) propagates raise status (#2074) - executes ensure when raising inside rescue executes ensure when raising inside rescue executes ensure when raising inside rescue executes ensure when raising inside rescue executes ensure when raising inside rescue������ executes ensure when raising inside rescue������ executes ensure when raising inside rescue�� executes ensure when raising inside rescue�� executes ensure when raising inside rescue executes ensure when raising inside rescue - executes rescue if something is raised conditionally executes rescue if something is raised conditionally executes rescue if something is raised conditionally executes rescue if something is raised conditionally executes rescue if something is raised conditionally executes rescue if something is raised conditionally������������ executes rescue if something is raised conditionally�� executes rescue if something is raised conditionally�� executes rescue if something is raised conditionally executes rescue if something is raised conditionally - executes else if no exception is raised (2) executes else if no exception is raised (2) executes else if no exception is raised (2) executes else if no exception is raised (2) executes else if no exception is raised (2)���������� executes else if no exception is raised (2) executes else if no exception is raised (2)���� executes else if no exception is raised (2)�� executes else if no exception is raised (2) executes else if no exception is raised (2) - can use argument in rescue, with a different type (2) (#2844) can use argument in rescue, with a different type (2) (#2844) can use argument in rescue, with a different type (2) (#2844)������ can use argument in rescue, with a different type (2) (#2844) can use argument in rescue, with a different type (2) (#2844) can use argument in rescue, with a different type (2) (#2844) can use argument in rescue, with a different type (2) (#2844) can use argument in rescue, with a different type (2) (#2844)���������� can use argument in rescue, with a different type (2) (#2844) can use argument in rescue, with a different type (2) (#2844) - executes rescue if something is raised unconditionally�� executes rescue if something is raised unconditionally executes rescue if something is raised unconditionally executes rescue if something is raised unconditionally executes rescue if something is raised unconditionally executes rescue if something is raised unconditionally executes rescue if something is raised unconditionally executes rescue if something is raised unconditionally�������������� executes rescue if something is raised unconditionally executes rescue if something is raised unconditionally - can rescue TypeCastError (#2607) can rescue TypeCastError (#2607) can rescue TypeCastError (#2607)�� can rescue TypeCastError (#2607)���� can rescue TypeCastError (#2607) can rescue TypeCastError (#2607)������ can rescue TypeCastError (#2607)�� can rescue TypeCastError (#2607)�� can rescue TypeCastError (#2607) can rescue TypeCastError (#2607) - does ensure after rescue which returns (#171) does ensure after rescue which returns (#171) does ensure after rescue which returns (#171) does ensure after rescue which returns (#171) does ensure after rescue which returns (#171)���� does ensure after rescue which returns (#171) does ensure after rescue which returns (#171)���������� does ensure after rescue which returns (#171)�� does ensure after rescue which returns (#171) does ensure after rescue which returns (#171) - handle multiple exception types (2) handle multiple exception types (2) handle multiple exception types (2) handle multiple exception types (2) handle multiple exception types (2)������ handle multiple exception types (2)���� handle multiple exception types (2) handle multiple exception types (2)������ handle multiple exception types (2) handle multiple exception types (2) - does not rescue just any module�� does not rescue just any module�� does not rescue just any module�� does not rescue just any module�� does not rescue just any module�� does not rescue just any module�� does not rescue just any module�� does not rescue just any module�� does not rescue just any module does not rescue just any module - rescues a valid nested union rescues a valid nested union rescues a valid nested union rescues a valid nested union rescues a valid nested union rescues a valid nested union rescues a valid nested union�������������� rescues a valid nested union�� rescues a valid nested union rescues a valid nested union - executes ensure from return until target executes ensure from return until target executes ensure from return until target executes ensure from return until target executes ensure from return until target executes ensure from return until target�� executes ensure from return until target������������ executes ensure from return until target�� executes ensure from return until target executes ensure from return until target - codegens rescue specific leaf exception codegens rescue specific leaf exception codegens rescue specific leaf exception codegens rescue specific leaf exception codegens rescue specific leaf exception codegens rescue specific leaf exception codegens rescue specific leaf exception�������������� codegens rescue specific leaf exception�� codegens rescue specific leaf exception codegens rescue specific leaf exception - ensure without rescue ensure without rescue ensure without rescue ensure without rescue ensure without rescue ensure without rescue ensure without rescue ensure without rescue���������������� ensure without rescue ensure without rescue - rescues a valid union rescues a valid union rescues a valid union rescues a valid union rescues a valid union�� rescues a valid union���������� rescues a valid union�� rescues a valid union�� rescues a valid union rescues a valid union - codegens issue #118 (2) codegens issue #118 (2) - executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block�� executes ensure of next inside block������ executes ensure of next inside block���� executes ensure of next inside block���� executes ensure of next inside block executes ensure of next inside block - can use argument in rescue (#2844) can use argument in rescue (#2844) can use argument in rescue (#2844) can use argument in rescue (#2844) can use argument in rescue (#2844) can use argument in rescue (#2844)�� can use argument in rescue (#2844)�� can use argument in rescue (#2844)������������ can use argument in rescue (#2844) can use argument in rescue (#2844) - runs #2441 runs #2441 runs #2441 runs #2441 runs #2441 runs #2441�������� runs #2441������ runs #2441�� runs #2441 runs #2441 - doesn't execute else if exception is raised (1) doesn't execute else if exception is raised (1) doesn't execute else if exception is raised (1) doesn't execute else if exception is raised (1) doesn't execute else if exception is raised (1) doesn't execute else if exception is raised (1)������������ doesn't execute else if exception is raised (1)�� doesn't execute else if exception is raised (1)�� doesn't execute else if exception is raised (1) doesn't execute else if exception is raised (1) - executes ensure of break inside while inside else executes ensure of break inside while inside else executes ensure of break inside while inside else executes ensure of break inside while inside else executes ensure of break inside while inside else executes ensure of break inside while inside else executes ensure of break inside while inside else�������������� executes ensure of break inside while inside else�� executes ensure of break inside while inside else executes ensure of break inside while inside else - executes ensure of break inside while inside body executes ensure of break inside while inside body executes ensure of break inside while inside body executes ensure of break inside while inside body executes ensure of break inside while inside body executes ensure of break inside while inside body������������ executes ensure of break inside while inside body�� executes ensure of break inside while inside body�� executes ensure of break inside while inside body executes ensure of break inside while inside body -Code gen: ssa - codegens declaration of var inside then when true codegens declaration of var inside then when true - codegens a var that is re-assigned in a block (1) codegens a var that is re-assigned in a block (1) - codegens a var that is declared in a block (1) codegens a var that is declared in a block (1) - codegens a var that is re-assigned in a block codegens a var that is re-assigned in a block - codegens a var that is declared in a block (2) codegens a var that is declared in a block (2) - codegens a redefined var codegens a redefined var - codegens ssa bug with if/else on var codegens ssa bug with if/else on var - codegens a var that is re-assigned in a block (2) codegens a var that is re-assigned in a block (2) - codegens ssa bug (1) codegens ssa bug (1) - codegens a redefined var inside method codegens a redefined var inside method - codegens a redefined var inside method with argument codegens a redefined var inside method with argument - codegens ssa bug (2) codegens ssa bug (2) - codegens declaration of var inside then when false codegens declaration of var inside then when false -Crystal::Init::InitProject - correctly uses git config correctly uses git config - has proper contents has proper contents + does to_s of "asm(\"nop\" :::: \"volatile\")" does to_s of "asm(\"nop\" :::: \"volatile\")" + does to_s of "{(1 + 2) => (3 + 4)}" does to_s of "{(1 + 2) => (3 + 4)}" + does to_s of "def foo(x y)\nend" does to_s of "def foo(x y)\nend" + does to_s of "(1 + 2)..3" does to_s of "(1 + 2)..3" + does to_s of "def foo(x, **args)\nend" does to_s of "def foo(x, **args)\nend" + does to_s of "macro foo(*, __var var)\nend" does to_s of "macro foo(*, __var var)\nend" + does to_s of "1 <= 2 <= 3" does to_s of "1 <= 2 <= 3" + does to_s of "{ {1 => 2} }" does to_s of "{ {1 => 2} }" + does to_s of "lib LibC\n fun getchar(Int, Float)\nend" does to_s of "lib LibC\n fun getchar(Int, Float)\nend" + does to_s of "foo(x : (T -> U) | V)" does to_s of "foo(x : (T -> U) | V)" + does to_s of "1 <= (2 <= 3)" does to_s of "1 <= (2 <= 3)" + does to_s of "1.[]=" does to_s of "1.[]=" + does to_s of "(1..)" does to_s of "(1..)" + does to_s of "case 1; when .!; 2; when .< 0; 3; end" does to_s of "case 1; when .!; 2; when .< 0; 3; end" + does to_s of "foo.%" does to_s of "foo.%" + does to_s of "foo(1, (2 + 3), bar: (4 + 5))" does to_s of "foo(1, (2 + 3), bar: (4 + 5))" + does to_s of "1.&*" does to_s of "1.&*" + does to_s of "asm(\"nop\" :: \"a\"(1) :: \"volatile\")" does to_s of "asm(\"nop\" :: \"a\"(1) :: \"volatile\")" + does to_s of "foo[x, y, a: 1, b: 2]" does to_s of "foo[x, y, a: 1, b: 2]" + does to_s of "macro foo(x, *y)\nend" does to_s of "macro foo(x, *y)\nend" + does to_s of "{% for foo in bar %}\n {{ if true\n foo\n bar\nend }}\n{% end %}" does to_s of "{% for foo in bar %}\n {{ if true\n foo\n bar\nend }}\n{% end %}" + does to_s of "macro foo(@[Foo] x, @[Foo] *y)\nend" does to_s of "macro foo(@[Foo] x, @[Foo] *y)\nend" + does to_s of "foo._bar" does to_s of "foo._bar" +.parse_args + DIR (relative to home) DIR (relative to home) + NAME DIR NAME DIR + DIR DIR + DIR (absolute) DIR (absolute) + DIR with path DIR with path + DIR = . DIR = . +Semantic: external/internal + macros + can call with external name and use with internal, after splat can call with external name and use with internal, after splat + can call with external name and use with internal can call with external name and use with internal + can call positionally can call positionally + overloads based on external name (#2610) overloads based on external name (#2610) + can call with external name and use with internal can call with external name and use with internal + can call with external name and use with internal, after splat can call with external name and use with internal, after splat + can call positionally can call positionally +Semantic: alias + can use .class in alias (#2835) can use .class in alias (#2835) + inherits class through alias inherits class through alias + can pass recursive alias to proc can pass recursive alias to proc + allows defining recursive aliases allows defining recursive aliases + allows recursive array with alias allows recursive array with alias + errors if trying to resolve type of recursive alias errors if trying to resolve type of recursive alias + resolves alias type resolves alias type + finds type through alias (#4645) finds type through alias (#4645) + errors if alias is already defined as another type errors if alias is already defined as another type + reopens module through alias within itself reopens module through alias within itself + errors if trying to use typeof in alias errors if trying to use typeof in alias + errors if defining infinite recursive alias in union errors if defining infinite recursive alias in union + resolves type through alias (#563) resolves type through alias (#563) + allows using alias type as generic type allows using alias type as generic type + looks up alias for macro resolution (#3548) looks up alias for macro resolution (#3548) + errors if alias already defined errors if alias already defined + reopens struct through alias reopens struct through alias + declares alias inside type declares alias inside type + reopens struct through alias within itself reopens struct through alias within itself + uses constant in alias (#3259) uses constant in alias (#3259) + allows using generic type of recursive alias as restriction (#488) allows using generic type of recursive alias as restriction (#488) + doesn't crash by infinite recursion against type alias and generics (#5329) doesn't crash by infinite recursion against type alias and generics (#5329) + overloads union type through alias overloads union type through alias + includes module through alias includes module through alias + allows defining recursive fun aliases allows defining recursive fun aliases + works with alias type as restriction works with alias type as restriction + inherits struct through alias inherits struct through alias + reopens class through alias within itself reopens class through alias within itself + doesn't find type parameter in alias (#3502) doesn't find type parameter in alias (#3502) + uses constant in alias with math (#3259) uses constant in alias with math (#3259) + reopens module through alias reopens module through alias + errors if declares alias inside if errors if declares alias inside if + errors if defining infinite recursive alias errors if defining infinite recursive alias + reopens class through alias reopens class through alias Semantic: hooks - does inherited macro does inherited macro + types macro finished hook bug regarding initialize (#3964) types macro finished hook bug regarding initialize (#3964) does inherited macro for generic class does inherited macro for generic class - does included macro does included macro - does extended macro does extended macro - errors if wrong extended params size errors if wrong extended params size - does included macro for generic module does included macro for generic module - errors if wrong finished params length errors if wrong finished params length does added method macro does added method macro - types initializer in inherited types initializer in inherited - includes error message in included hook (#889) includes error message in included hook (#889) - does inherited macro through generic instance type (#9693) does inherited macro through generic instance type (#9693) - types macro finished hook bug regarding initialize (#3964) types macro finished hook bug regarding initialize (#3964) - errors if wrong extended params length errors if wrong extended params length - errors if wrong inherited params size errors if wrong inherited params size - errors if wrong included params size errors if wrong included params size + errors if wrong finished params length errors if wrong finished params length does not invoke 'method_added' hook recursively does not invoke 'method_added' hook recursively -Crystal::Repl::Interpreter - is_a? - does is_a? from NilableType to NonGenericClassType (true) does is_a? from NilableType to NonGenericClassType (true) - does is_a? from NilableReferenceUnionType to NonGenericClassType (false) does is_a? from NilableReferenceUnionType to NonGenericClassType (false) - does is_a? from NilableReferenceUnionType to NonGenericClassType (true) does is_a? from NilableReferenceUnionType to NonGenericClassType (true) - does is_a? from NilableType to NonGenericClassType (false) does is_a? from NilableType to NonGenericClassType (false) - does is_a? from VirtualType to NonGenericClassType (false) does is_a? from VirtualType to NonGenericClassType (false) - does is_a? from NilableType to GenericClassInstanceType (false) does is_a? from NilableType to GenericClassInstanceType (false) - does is_a? from NilableProcType to non-Nil does is_a? from NilableProcType to non-Nil - does is_a? from NilableType to GenericClassInstanceType (true) does is_a? from NilableType to GenericClassInstanceType (true) - does is_a? from NilableProcType to Nil does is_a? from NilableProcType to Nil - does is_a? from VirtualType to NonGenericClassType (true) does is_a? from VirtualType to NonGenericClassType (true) -Crystal::FFI::CallInterface - .new - sum struct sum struct - all primitive arg types all primitive arg types - simple call simple call - array array - make struct make struct - with args with args - .variadic - basic basic - zero varargs zero varargs - validates args size validates args size -Crystal::Repl::Interpreter - bugs - does multidispatch on virtual struct does multidispatch on virtual struct - does multidispatch on virtual struct union nil does multidispatch on virtual struct union nil - correctly puts virtual metaclass type in union correctly puts virtual metaclass type in union - doesn't pass self to top-level method doesn't pass self to top-level method - does leading zeros does leading zeros - doesn't pass self to top-level method (FileNode) doesn't pass self to top-level method (FileNode) - doesn't override local variable value with block var with the same name doesn't override local variable value with block var with the same name - breaks from current block, not from outer block breaks from current block, not from outer block - doesn't incorrectly consider a non-closure as closure doesn't incorrectly consider a non-closure as closure -Semantic: struct - errors if invoking to_unsafe and got different type errors if invoking to_unsafe and got different type - errors if invoking to_i32! and got wrong type errors if invoking to_i32! and got wrong type - can access instance var from the outside (#1092) can access instance var from the outside (#1092) - errors if already defined with another type errors if already defined with another type - errors if includes and field already exists errors if includes and field already exists - types struct getter multiple levels via new types struct getter multiple levels via new - errors if invoking to_unsafe and got error in that call errors if invoking to_unsafe and got error in that call - automatically converts numeric type in struct field assignment automatically converts numeric type in struct field assignment - errors if using void via typedef in struct field type errors if using void via typedef in struct field type - errors on struct setter if different type via new errors on struct setter if different type via new - errors on struct setter if different type errors on struct setter if different type - types struct getter to struct types struct getter to struct - errors on struct if no field errors on struct if no field - errors if includes and field already exists, the other way around errors if includes and field already exists, the other way around - errors if setting closure errors if setting closure - supports macro if inside struct supports macro if inside struct - types Struct#new types Struct#new - types struct setter types struct setter - marks as packed marks as packed - types struct types struct - errors if already defined with another type (2) errors if already defined with another type (2) - types struct getter types struct getter - errors on empty c struct (#633) errors on empty c struct (#633) - errors if using void in struct field type errors if using void in struct field type - includes another struct includes another struct - errors if includes non-cstruct type errors if includes non-cstruct type - errors if includes unknown type errors if includes unknown type - errors if invoking to_i32! and got error in that call errors if invoking to_i32! and got error in that call - types struct getter on pointer type types struct getter on pointer type - errors if already defined errors if already defined - allows inline forward declaration allows inline forward declaration - types struct getter with keyword name types struct getter with keyword name -Normalize: op assign - normalizes exp[value] &&= normalizes exp[value] &&= - normalizes var += normalizes var += - normalizes exp[value] += normalizes exp[value] += - normalizes var &&= normalizes var &&= - normalizes var -= normalizes var -= - normalizes exp.value ||= normalizes exp.value ||= - normalizes var &+= normalizes var &+= - normalizes exp.value &&= normalizes exp.value &&= - normalizes var.value += normalizes var.value += - normalizes var &-= normalizes var &-= - normalizes @@var[0] += normalizes @@var[0] += - normalizes @@var.value += normalizes @@var.value += - normalizes @var[0] += normalizes @var[0] += - normalizes exp[value] ||= normalizes exp[value] ||= - normalizes var ||= normalizes var ||= - normalizes exp[0] += normalizes exp[0] += - normalizes var[0] += normalizes var[0] += - normalizes var &*= normalizes var &*= - normalizes exp.value += normalizes exp.value += - normalizes @var.value += normalizes @var.value += - normalizes var *= normalizes var *= -Code gen: hash literal spec - creates custom generic hash in module (#5684) creates custom generic hash in module (#5684) - creates custom generic hash via alias (1) creates custom generic hash via alias (1) - creates custom generic hash via alias (2) creates custom generic hash via alias (2) - creates custom generic hash creates custom generic hash - creates custom non-generic hash in module creates custom non-generic hash in module - creates custom generic hash with type vars creates custom generic hash with type vars - assignment in hash-like literal works assignment in hash-like literal works assignment in hash-like literal works assignment in hash-like literal works�� assignment in hash-like literal works�������� assignment in hash-like literal works�� assignment in hash-like literal works assignment in hash-like literal works���� assignment in hash-like literal works assignment in hash-like literal works - assignment in hash literal works assignment in hash literal works assignment in hash literal works assignment in hash literal works assignment in hash literal works assignment in hash literal works�������� assignment in hash literal works������ assignment in hash literal works�� assignment in hash literal works assignment in hash literal works - creates custom non-generic hash creates custom non-generic hash - doesn't crash on hash literal with proc pointer (#646) doesn't crash on hash literal with proc pointer (#646) doesn't crash on hash literal with proc pointer (#646) doesn't crash on hash literal with proc pointer (#646) doesn't crash on hash literal with proc pointer (#646)���������� doesn't crash on hash literal with proc pointer (#646) doesn't crash on hash literal with proc pointer (#646)���� doesn't crash on hash literal with proc pointer (#646)�� doesn't crash on hash literal with proc pointer (#646) doesn't crash on hash literal with proc pointer (#646) -Crystal::Repl::Interpreter - unions - converts from NilableType to NonGenericClassType converts from NilableType to NonGenericClassType - put and remove from union in instance var put and remove from union in instance var - put and remove from union in local var put and remove from union in local var - returns large union type (#15041) returns large union type (#15041) - put and remove from union, together with is_a? (truthy case) put and remove from union, together with is_a? (truthy case) - returns union type returns union type - puts union inside union puts union inside union - discards is_a? discards is_a? - put and remove from union, together with is_a? (falsey case) put and remove from union, together with is_a? (falsey case) -Semantic: super - finds super initialize if not explicitly defined in superclass, 2 (#273) finds super initialize if not explicitly defined in superclass, 2 (#273) - gives correct error when calling super and target is abstract method (#2675) gives correct error when calling super and target is abstract method (#2675) - types super when inside fun and forwards args types super when inside fun and forwards args - types super with named arguments, def has bare splat parameter (#8895) types super with named arguments, def has bare splat parameter (#8895) - errors no superclass method in top-level errors no superclass method in top-level - calls super in module method (2) (#556) calls super in module method (2) (#556) - types super without arguments types super without arguments - types super when inside fun types super when inside fun - types super with forwarded arguments, different internal names (#8895) types super with forwarded arguments, different internal names (#8895) - calls super in module method (3) (#556) calls super in module method (3) (#556) - types super with forwarded arguments, def has bare splat parameter (#8895) types super with forwarded arguments, def has bare splat parameter (#8895) - calls super in module method (1) (#556) calls super in module method (1) (#556) - errors if invoking super and match isn't found in direct superclass in initialize (even though it's find in one superclass) errors if invoking super and match isn't found in direct superclass in initialize (even though it's find in one superclass) - says correct error message when no overload matches in super call (#272) says correct error message when no overload matches in super call (#272) - finds super initialize if not explicitly defined in superclass, 1 (#273) finds super initialize if not explicitly defined in superclass, 1 (#273) - errors on super where only target would be a top level method (#5201) errors on super where only target would be a top level method (#5201) - types super with forwarded arguments, parent has parameters types super with forwarded arguments, parent has parameters - errors on super outside method (#4481) errors on super outside method (#4481) - types super when container method is defined in parent class types super when container method is defined in parent class - doesn't error if invoking super and match isn't found in direct superclass (even though it's find in one superclass) doesn't error if invoking super and match isn't found in direct superclass (even though it's find in one superclass) - calls super in generic module method calls super in generic module method - types super without arguments and instance variable types super without arguments and instance variable - invokes super inside macro (#6636) invokes super inside macro (#6636) - errors no superclass method in top-level def errors no superclass method in top-level def - types super when container method is defined in parent class two levels up types super when container method is defined in parent class two levels up - types super with named arguments, def has bare splat parameter (2) (#8895) types super with named arguments, def has bare splat parameter (2) (#8895) - types super with forwarded arguments, def has double splat parameter (#8895) types super with forwarded arguments, def has double splat parameter (#8895) - errors if calling super on module method and not found errors if calling super on module method and not found - errors no superclass method errors no superclass method -Semantic: generic class - errors if using Float in a generic type errors if using Float in a generic type - inherits from generic with forwarding (2) inherits from generic with forwarding (2) - never types Generic as virtual outside generic type parameter (#3989) never types Generic as virtual outside generic type parameter (#3989) - instantiates generic variadic class, accesses T from instance method through superclass instantiates generic variadic class, accesses T from instance method through superclass - initializes instance variable of generic type using type var (#961) initializes instance variable of generic type using type var (#961) - can define instance var forward declared (#962) can define instance var forward declared (#962) - allows initializing instance variable in inherited generic type allows initializing instance variable in inherited generic type - instantiates generic variadic class, accesses T from instance method through superclass, more args instantiates generic variadic class, accesses T from instance method through superclass, more args - restricts non-generic to generic with free var restricts non-generic to generic with free var - replaces type parameters in virtual metaclasses (#10691) replaces type parameters in virtual metaclasses (#10691) - never types Path as virtual outside generic type parameter (#3989) never types Path as virtual outside generic type parameter (#3989) - errors if passing integer literal to Tuple as generic argument (#1120) errors if passing integer literal to Tuple as generic argument (#1120) - restricts generic type argument through alias in a non-strict way restricts generic type argument through alias in a non-strict way - instantiates generic variadic class, accesses T from class method through superclass instantiates generic variadic class, accesses T from class method through superclass - restricts virtual generic instance type against generic (#3351) restricts virtual generic instance type against generic (#3351) - creates pointer of generic type and uses it (2) creates pointer of generic type and uses it (2) - doesn't crash when matching restriction against number literal (2) (#3157) doesn't crash when matching restriction against number literal (2) (#3157) - errors if inheriting from generic and incorrect number of type vars errors if inheriting from generic and incorrect number of type vars - unifies generic metaclass types unifies generic metaclass types - restricts generic to generic with free var restricts generic to generic with free var - restricts non-generic to generic restricts non-generic to generic - errors if using Class in a generic type errors if using Class in a generic type - recomputes on new subclass recomputes on new subclass - errors if using Pointer in a generic type errors if using Pointer in a generic type - instantiates generic variadic class, accesses T from class method instantiates generic variadic class, accesses T from class method - errors if inheriting generic type and not specifying type vars (#460) errors if inheriting generic type and not specifying type vars (#460) - errors if using Tuple in a generic type errors if using Tuple in a generic type - nests generics with the same type var (#3297) nests generics with the same type var (#3297) - splats generic type var splats generic type var - disallow using a non-instantiated generic type as a generic type argument disallow using a non-instantiated generic type as a generic type argument - allows T::Type with T a generic type allows T::Type with T a generic type - inherits non-generic to generic (2) inherits non-generic to generic (2) - can use type var that resolves to number in restriction (#6502) can use type var that resolves to number in restriction (#6502) - finds generic type argument from method with default value finds generic type argument from method with default value - inherits non-generic to generic (1) inherits non-generic to generic (1) - errors if using Enum in a generic type errors if using Enum in a generic type - inherits instance var type annotation from generic to concrete with T inherits instance var type annotation from generic to concrete with T - errors if splatting a non-tuple (#9853) errors if splatting a non-tuple (#9853) - instantiates generic variadic class, accesses T from instance method, more args instantiates generic variadic class, accesses T from instance method, more args - subclasses twice with same generic class (#3423) subclasses twice with same generic class (#3423) - errors if using Struct in a generic type errors if using Struct in a generic type - errors if using Proc in a generic type errors if using Proc in a generic type - doesn't compute generic instance var initializers in formal superclass's context (#4753) doesn't compute generic instance var initializers in formal superclass's context (#4753) - defines empty initialize on inherited generic class defines empty initialize on inherited generic class - doesn't find T type parameter of current type in superclass (#4604) doesn't find T type parameter of current type in superclass (#4604) - correctly checks argument count when target type has a splat (#9855) correctly checks argument count when target type has a splat (#9855) - shows error due to generic instantiation (#7083) shows error due to generic instantiation (#7083) - doesn't crash when matching restriction against number literal (#3157) doesn't crash when matching restriction against number literal (#3157) - errors if using StaticArray in a generic type errors if using StaticArray in a generic type - errors if inheriting from generic when it is non-generic errors if inheriting from generic when it is non-generic - replaces type parameters for virtual types (#3235) replaces type parameters for virtual types (#3235) - errors if using Object in a generic type errors if using Object in a generic type - creates pointer of generic type and uses it creates pointer of generic type and uses it - can use type var that resolves to number in restriction using Int128 can use type var that resolves to number in restriction using Int128 - inherits from generic with instantiation inherits from generic with instantiation - instantiates generic variadic class, accesses T from instance method instantiates generic variadic class, accesses T from instance method - errors if using Value in a generic type errors if using Value in a generic type - inherits from generic with instantiation with instance var inherits from generic with instantiation with instance var - doesn't duplicate overload on generic class with class method (#2385) doesn't duplicate overload on generic class with class method (#2385) - instantiates generic class with default argument in initialize (#394) instantiates generic class with default argument in initialize (#394) - errors if using Int in a generic type errors if using Int in a generic type - allows initializing instance variable (#665) allows initializing instance variable (#665) - inherits from generic with forwarding (1) inherits from generic with forwarding (1) - virtual metaclass type implements super virtual metaclass type (#3007) virtual metaclass type implements super virtual metaclass type (#3007) - resolves T through metaclass inheritance (#7914) resolves T through metaclass inheritance (#7914) - errors if passing integer literal to Proc as generic argument (#1120) errors if passing integer literal to Proc as generic argument (#1120) - errors if using Number in a generic type errors if using Number in a generic type - errors if using Number in recursive alias errors if using Number in recursive alias - instantiates generic variadic class, accesses T from instance method, more args (2) instantiates generic variadic class, accesses T from instance method, more args (2) - error on T::Type with T a generic type that's a union error on T::Type with T a generic type that's a union - doesn't allow union of generic class with module to be assigned to a generic class with module (#2425) doesn't allow union of generic class with module to be assigned to a generic class with module (#2425) - doesn't consider unbound generic instantiations as concrete (#7200) doesn't consider unbound generic instantiations as concrete (#7200) - errors on too nested tuple instance errors on too nested tuple instance - errors on too nested generic instance, with union type errors on too nested generic instance, with union type - inherits twice inherits twice - errors if using Number in alias errors if using Number in alias - calls super on generic type when superclass has no initialize (#933) calls super on generic type when superclass has no initialize (#933) - errors if invoking new on private new in generic type (#3485) errors if invoking new on private new in generic type (#3485) - errors if using Reference in a generic type errors if using Reference in a generic type - errors if passing integer literal to Union as generic argument errors if passing integer literal to Union as generic argument - can use virtual type for generic class can use virtual type for generic class - disallow using a non-instantiated module type as a generic type argument disallow using a non-instantiated module type as a generic type argument - types macro def with generic instance types macro def with generic instance - gives helpful error message when generic type var is missing in block spec (#1526) gives helpful error message when generic type var is missing in block spec (#1526) - gives helpful error message when generic type var is missing (#1526) gives helpful error message when generic type var is missing (#1526) - inherits instance var type annotation from generic to generic to concrete inherits instance var type annotation from generic to generic to concrete - errors on too nested generic instance errors on too nested generic instance - errors if using Number | String in a generic type errors if using Number | String in a generic type - doesn't find unbound type parameter in main code inside generic type (#6168) doesn't find unbound type parameter in main code inside generic type (#6168) - inherits class methods from generic class inherits class methods from generic class - inherits instance var type annotation from generic to concrete inherits instance var type annotation from generic to concrete -Lexer macro - lexes macro with nested if lexes macro with nested if - lexes with if/end inside escaped macro (#1029) lexes with if/end inside escaped macro (#1029) - lexes macro without nested if lexes macro without nested if - lexes macro with semicolon before end lexes macro with semicolon before end - lexes macro with if as suffix after return lexes macro with if as suffix after return - lexes macro with nested until lexes macro with nested until - lexes macro with nested begin lexes macro with nested begin - lexes begin end lexes begin end - lexes macro with embedded string with %[ lexes macro with embedded string with %[ - lexes macro with nested annotation lexes macro with nested annotation - lexes macro with nested struct lexes macro with nested struct - lexes macro with embedded string lexes macro with embedded string - lexes macro with embedded string with %< ignores begin lexes macro with embedded string with %< ignores begin - lexes macro with nested unless lexes macro with nested unless - lexes macro with curly escape in comment lexes macro with curly escape in comment - lexes macro with nested enum lexes macro with nested enum - lexes with unless inside escaped macro (#5664) lexes with unless inside escaped macro (#5664) - lexes macro with embedded string with %< lexes macro with embedded string with %< - lexes macro with nested macro lexes macro with nested macro - lexes macro with string interpolation and double curly brace lexes macro with string interpolation and double curly brace - lexes macro with curly escape lexes macro with curly escape - lexes macro with nested while lexes macro with nested while - keeps correct line number after lexes the part of keyword and newline (#4656) keeps correct line number after lexes the part of keyword and newline (#4656) - lexes macro with nested abstract class lexes macro with nested abstract class - lexes macro with embedded char and sharp lexes macro with embedded char and sharp - lexes macro with nested module lexes macro with nested module - lexes macro with expression lexes macro with expression - lexes macro with nested do lexes macro with nested do - lexes macro with embedded string and backslash lexes macro with embedded string and backslash - lexes macro with nested class lexes macro with nested class - lexes macro with nested abstract def lexes macro with nested abstract def - skips whitespace skips whitespace - lexes simple macro lexes simple macro - doesn't lex macro var if escaped doesn't lex macro var if escaped - lexes macro with embedded string with %( ignores begin lexes macro with embedded string with %( ignores begin - lexes macro with nested fun lexes macro with nested fun - lexes macro with embedded string with %[ ignores begin lexes macro with embedded string with %[ ignores begin - lexes macro with control lexes macro with control - lexes macro with if as suffix lexes macro with if as suffix - lexes macro with comments lexes macro with comments - reaches end reaches end - lexes macro with embedded string with %( lexes macro with embedded string with %( - lexes bug #654 lexes bug #654 - lexes escaped quote inside string (#895) lexes escaped quote inside string (#895) - lexes macro with nested def lexes macro with nested def - lexes macro with nested lib lexes macro with nested lib - lexes macro with nested embedded string with %( lexes macro with nested embedded string with %( - lexes macro var lexes macro var - lexes macro with embedded string and expression lexes macro with embedded string and expression - lexes macro with if after assign lexes macro with if after assign - lexes macro with slash not followed by curly lexes macro with slash not followed by curly - lexes with for inside escaped macro (#1029) lexes with for inside escaped macro (#1029) - lexes macro with nested abstract struct lexes macro with nested abstract struct - lexes macro with comments and expressions lexes macro with comments and expressions - keeps correct column and line numbers keeps correct column and line numbers - lexes macro with nested select lexes macro with nested select - lexes macro with nested union lexes macro with nested union - lexes macro with nested case lexes macro with nested case -Crystal::Playground::Session - assert assert -Code gen: hooks - does added method macro does added method macro - fixes empty types in hooks (#3946) fixes empty types in hooks (#3946) + does inherited macro through generic instance type (#9693) does inherited macro through generic instance type (#9693) + does inherited macro does inherited macro does extended macro does extended macro - does inherited macro recursively does inherited macro recursively - does inherited macro before class body does inherited macro before class body does inherited macro before class body does inherited macro before class body does inherited macro before class body does inherited macro before class body does inherited macro before class body�������������� does inherited macro before class body�� does inherited macro before class body does inherited macro before class body + errors if wrong extended params length errors if wrong extended params length + types initializer in inherited types initializer in inherited does included macro does included macro - does finished does finished - does inherited macro does inherited macro -Semantic: ReferenceStorage - allows a different name allows a different name - errors if T is a nilable type errors if T is a nilable type - errors if T is a union type errors if T is a union type - errors if T is a value type errors if T is a value type - errors if T is a struct type errors if T is a struct type -Crystal::Repl::Interpreter - class vars - does class var initializer with union (#12633) does class var initializer with union (#12633) - reads class var initializer with union (#12633) reads class var initializer with union (#12633) - interprets class var without initializer interprets class var without initializer - interprets class var for virtual type interprets class var for virtual type - interprets class var with initializer interprets class var with initializer - interprets class var for virtual metaclass type interprets class var for virtual metaclass type - finds self in class var initializer (#12439) finds self in class var initializer (#12439) -Code gen: uninitialized - codegens declare instance var with static array type codegens declare instance var with static array type - works inside while/begin/rescue (bug inside #759) works inside while/begin/rescue (bug inside #759) works inside while/begin/rescue (bug inside #759) works inside while/begin/rescue (bug inside #759) works inside while/begin/rescue (bug inside #759) works inside while/begin/rescue (bug inside #759) works inside while/begin/rescue (bug inside #759) works inside while/begin/rescue (bug inside #759)���������������� works inside while/begin/rescue (bug inside #759) works inside while/begin/rescue (bug inside #759) - doesn't break on inherited declared var (#390) doesn't break on inherited declared var (#390) - codegens declare var and read it codegens declare var and read it - codegens declare var and changes it codegens declare var and changes it - codegens value (#3641) codegens value (#3641) - works with uninitialized NoReturn (#3314) works with uninitialized NoReturn (#3314) - codegens declare instance var codegens declare instance var + does included macro for generic module does included macro for generic module + errors if wrong included params size errors if wrong included params size + includes error message in included hook (#889) includes error message in included hook (#889) + errors if wrong extended params size errors if wrong extended params size + errors if wrong inherited params size errors if wrong inherited params size +Code gen: return + doesn't crash when method returns nil and can be inlined doesn't crash when method returns nil and can be inlined + codegens return followed by another expression codegens return followed by another expression + returns empty from function returns empty from function + forms a tuple from multiple return values forms a tuple from multiple return values + flattens splats inside multiple return values flattens splats inside multiple return values + return from function with union type return from function with union type + codegens assign with if with two returns codegens assign with if with two returns + codegens bug with return if true codegens bug with return if true + codegens return codegens return + return from function with nilable type return from function with nilable type + return from function with nilable type 2 return from function with nilable type 2 + codegens return inside if codegens return inside if + returns in var assignment (#3364) returns in var assignment (#3364) + return union return union +Crystal::Doc::Type + #instance_methods + sorts operators first sorts operators first + ASTNode has no ancestors ASTNode has no ancestors + #macros + sorts operators first sorts operators first + ASTNode has no superclass ASTNode has no superclass + doesn't show types for alias type doesn't show types for alias type + #node_to_html + shows tuples shows tuples + shows generic path with necessary colons shows generic path with necessary colons + shows relative generic shows relative generic + shows relative path shows relative path + shows generic path with unnecessary colons shows generic path with unnecessary colons + shows named tuples shows named tuples + finds construct when searching class method (#8095) finds construct when searching class method (#8095) + #class_methods + sorts operators first sorts operators first +Code gen: offsetof + returns offset allowing manual access of first class field returns offset allowing manual access of first class field + returns offset of extern union returns offset of extern union + returns offset allowing manual access of struct field that isn't first returns offset allowing manual access of struct field that isn't first + returns offset of `StaticArray#@buffer` returns offset of `StaticArray#@buffer` + returns offset allowing manual access of tuple items returns offset allowing manual access of tuple items + returns offset allowing manual access of first struct field returns offset allowing manual access of first struct field + returns offset allowing manual access of class field that isn't first returns offset allowing manual access of class field that isn't first +Normalize: case + normalizes case with call normalizes case with call + normalizes case with multiple expressions with all underscores normalizes case with multiple expressions with all underscores + normalizes case without value with many expressions in when normalizes case without value with many expressions in when + normalizes case with multiple expressions normalizes case with multiple expressions + normalizes case with multiple expressions and non-tuple normalizes case with multiple expressions and non-tuple + normalizes case with multiple expressions and implicit obj normalizes case with multiple expressions and implicit obj + normalizes case with Path.class to is_a? (in) normalizes case with Path.class to is_a? (in) + normalizes case with Path.class to is_a? normalizes case with Path.class to is_a? + normalizes case with generic to is_a? normalizes case with generic to is_a? + normalizes case with implicit call normalizes case with implicit call + normalizes case with Path to is_a? normalizes case with Path to is_a? + normalizes case with assignment wrapped by paren normalizes case with assignment wrapped by paren + normalizes case without when but else normalizes case without when but else + normalizes case with assignment normalizes case with assignment + normalizes case with Generic.class to is_a? normalizes case with Generic.class to is_a? + normalizes case without value normalizes case without value + normalizes case with implicit ! normalizes case with implicit ! + normalizes case with multiple expressions with all underscores twice normalizes case with multiple expressions with all underscores twice + normalizes case with implicit responds_to? (#3040) normalizes case with implicit responds_to? (#3040) + normalizes case with implicit as? (#3040) normalizes case with implicit as? (#3040) + normalizes case with multiple expressions and types normalizes case with multiple expressions and types + normalizes case without cond, when but else normalizes case without cond, when but else + normalizes case with var in cond normalizes case with var in cond + normalizes case with implicit is_a? (#3040) normalizes case with implicit is_a? (#3040) + normalizes case with multiple expressions with underscore normalizes case with multiple expressions with underscore + normalizes case with implicit as (#3040) normalizes case with implicit as (#3040) + normalizes case with nil to is_a? normalizes case with nil to is_a? + normalizes case without when and else normalizes case without when and else + normalizes case without cond, when and else normalizes case without cond, when and else + normalizes case with many expressions in when normalizes case with many expressions in when + normalizes case with multiple expressions and comma normalizes case with multiple expressions and comma +Crystal::Command::FlagsVisitor + different flags different flags + only macro only macro + unique flags unique flags Code gen: block - codegens bug with yield not_nil! that is never not nil codegens bug with yield not_nil! that is never not nil - codegens dispatch with block and break (2) codegens dispatch with block and break (2) codegens dispatch with block and break (2) codegens dispatch with block and break (2) codegens dispatch with block and break (2) codegens dispatch with block and break (2) codegens dispatch with block and break (2)�������������� codegens dispatch with block and break (2)�� codegens dispatch with block and break (2) codegens dispatch with block and break (2) - can call methods from block when yielder is an instance method can call methods from block when yielder is an instance method - breaks from while in function called from block breaks from while in function called from block codegens block bug with conditional next and unconditional break (2) codegens block bug with conditional next and unconditional break (2) - yields more exps than block arg, through splat yields more exps than block arg, through splat - return from block called from dispatch return from block called from dispatch + codegens method invocation on a object of a captured block with a type that was never instantiated codegens method invocation on a object of a captured block with a type that was never instantiated + dispatches with captured and non-captured block (#3969) dispatches with captured and non-captured block (#3969) + clears nilable var before inlining block method (#10087) clears nilable var before inlining block method (#10087) + can break without value from yielder that returns nilable (2) can break without value from yielder that returns nilable (2) + codegens block with nilable type with return (2) codegens block with nilable type with return (2) + codegens method invocation on a object of a captured block with a type that was never instantiated (2) codegens method invocation on a object of a captured block with a type that was never instantiated (2) + codegens call with block with call with arg that yields codegens call with block with call with arg that yields + codegens nested return codegens nested return - nexts in var assignment (#3364) nexts in var assignment (#3364) - allows using var as block arg with outer var allows using var as block arg with outer var - allows access to local variables allows access to local variables - yields inside yield (#682) yields inside yield (#682) - allows modifying yielded value (with variable) allows modifying yielded value (with variable) - returns from block with value returns from block with value returns from block with value returns from block with value returns from block with value�������� returns from block with value���� returns from block with value�� returns from block with value�� returns from block with value returns from block with value + codegens bug with yield not_nil! that is never not nil codegens bug with yield not_nil! that is never not nil + return from block called from dispatch return from block called from dispatch + uses splat in block argument uses splat in block argument + break block with yielder inside while break block with yielder inside while break block with yielder inside while break block with yielder inside while break block with yielder inside while break block with yielder inside while break block with yielder inside while break block with yielder inside while break block with yielder inside while break block with yielder inside while + break from block with value break from block with value break from block with value break from block with value break from block with value break from block with value break from block with value break from block with value break from block with value break from block with value + codegens block with union arg (2) codegens block with union arg (2) + break from block with value break from block with value + codegens dispatch with block and break (2) codegens dispatch with block and break (2) codegens dispatch with block and break (2) codegens dispatch with block and break (2) codegens dispatch with block and break (2) codegens dispatch with block and break (2) codegens dispatch with block and break (2) codegens dispatch with block and break (2) codegens dispatch with block and break (2) codegens dispatch with block and break (2) + uses splat in block argument, many args uses splat in block argument, many args + it yields nil from another call it yields nil from another call + yields splat yields splat + returns from proc literal returns from proc literal codegens block with union with return codegens block with union with return - uses block splat argument with union types uses block splat argument with union types - return from block return from block - block with nilable type 2 block with nilable type 2 - does next from captured block does next from captured block - allows modifying yielded value (with literal) allows modifying yielded value (with literal) - doesn't codegen after while that always yields and breaks doesn't codegen after while that always yields and breaks - codegens block with return and yield and no return codegens block with return and yield and no return - union value of yielder function union value of yielder function - codegens block with nilable type with return (1) codegens block with nilable type with return (1) + codegens block call when argument type changes codegens block call when argument type changes + unpacks tuple but doesn't override local variables unpacks tuple but doesn't override local variables + codegens nested break codegens nested break + allows initialize with yield (#224) allows initialize with yield (#224) + uses block var with same name as local var uses block var with same name as local var (bug) doesn't set needs_value to true on every yield (#12442) (bug) doesn't set needs_value to true on every yield (#12442) + nexts in var assignment (#3364) nexts in var assignment (#3364) + auto-unpacks tuple auto-unpacks tuple call block from dispatch call block from dispatch + union value of yielder function union value of yielder function + uses block splat argument with union types uses block splat argument with union types + does next from captured block does next from captured block + executes yield expression if no arg is given for block executes yield expression if no arg is given for block + block with nilable type 2 block with nilable type 2 + codegens call with blocks of different type without args codegens call with blocks of different type without args + codegens block with union arg (1) codegens block with union arg (1) + allows modifying yielded value (with variable) allows modifying yielded value (with variable) + allow return from function called from yielder function allow return from function called from yielder function + pass self to yielder function pass self to yielder function return from yielder function (2) return from yielder function (2) - doesn't crash if yield exp has no type (#12670) doesn't crash if yield exp has no type (#12670) - codegens method invocation on a object of a captured block with a type that was never instantiated (2) codegens method invocation on a object of a captured block with a type that was never instantiated (2) - codegens bug with block and arg and var codegens bug with block and arg and var - codegens captured block that returns union, but proc only returns a single type codegens captured block that returns union, but proc only returns a single type - breaks in var assignment (#3364) breaks in var assignment (#3364) - return from yielder function return from yielder function - codegens block bug with conditional next and unconditional break (1) codegens block bug with conditional next and unconditional break (1) - can break without value from yielder that returns nilable (2) can break without value from yielder that returns nilable (2) - codegens method invocation on a object of a captured block with a type that was never instantiated codegens method invocation on a object of a captured block with a type that was never instantiated - codegens block with virtual type arg codegens block with virtual type arg - codegens while/break inside block codegens while/break inside block - return from block that always returns from function that always yields inside if block return from block that always returns from function that always yields inside if block - uses block inside array literal (bug) uses block inside array literal (bug) uses block inside array literal (bug) uses block inside array literal (bug) uses block inside array literal (bug) uses block inside array literal (bug)������������ uses block inside array literal (bug)�� uses block inside array literal (bug)�� uses block inside array literal (bug) uses block inside array literal (bug) - break block with yielder inside while break block with yielder inside while break block with yielder inside while break block with yielder inside while break block with yielder inside while break block with yielder inside while������������ break block with yielder inside while�� break block with yielder inside while�� break block with yielder inside while break block with yielder inside while - can use self inside a block called from dispatch can use self inside a block called from dispatch - nested yields nested yields break from block returns from yielder break from block returns from yielder - allow return from function called from yielder function allow return from function called from yielder function - can use instance methods from yielder function can use instance methods from yielder function - generate inline generate inline - codegens block call when argument type changes codegens block call when argument type changes - it yields nil from another call it yields nil from another call - dispatches with captured and non-captured block (#3969) dispatches with captured and non-captured block (#3969) - assigns yield to argument assigns yield to argument - pass arguments to yielder function pass arguments to yielder function - call block from dispatch and use local vars call block from dispatch and use local vars call block from dispatch and use local vars call block from dispatch and use local vars call block from dispatch and use local vars call block from dispatch and use local vars call block from dispatch and use local vars�������������� call block from dispatch and use local vars�� call block from dispatch and use local vars call block from dispatch and use local vars - doesn't crash on untyped array to_s doesn't crash on untyped array to_s doesn't crash on untyped array to_s doesn't crash on untyped array to_s doesn't crash on untyped array to_s���� doesn't crash on untyped array to_s doesn't crash on untyped array to_s���������� doesn't crash on untyped array to_s�� doesn't crash on untyped array to_s doesn't crash on untyped array to_s - yields splat yields splat - can set instance vars from yielder function can set instance vars from yielder function pass self and arguments to yielder function pass self and arguments to yielder function - codegens call with blocks of different type without args codegens call with blocks of different type without args - codegens dispatch with block and break (1) codegens dispatch with block and break (1) codegens dispatch with block and break (1) codegens dispatch with block and break (1) codegens dispatch with block and break (1) codegens dispatch with block and break (1)�� codegens dispatch with block and break (1)������������ codegens dispatch with block and break (1)�� codegens dispatch with block and break (1) codegens dispatch with block and break (1) - executes yield expression if no arg is given for block executes yield expression if no arg is given for block - codegens block with union arg (1) codegens block with union arg (1) - return from block that always returns from function that conditionally yields return from block that always returns from function that conditionally yields - uses splat in block argument, many args uses splat in block argument, many args - codegens block with multiple underscores (#3054) codegens block with multiple underscores (#3054) + can use self inside a block called from dispatch can use self inside a block called from dispatch + breaks from while in function called from block breaks from while in function called from block + can use instance methods from yielder function can use instance methods from yielder function + allows using var as block arg with outer var allows using var as block arg with outer var + codegens bug with block and arg and var codegens bug with block and arg and var break without value returns nil break without value returns nil - pass self to yielder function pass self to yielder function - break from block with value break from block with value - break with value from yielder that returns a nilable break with value from yielder that returns a nilable - codegens block with nilable type with return (2) codegens block with nilable type with return (2) - uses splat in block argument uses splat in block argument + doesn't crash if yield exp has no type (#12670) doesn't crash if yield exp has no type (#12670) + codegens block which always breaks but never enters (#494) codegens block which always breaks but never enters (#494) + yields more exps than block arg, through splat yields more exps than block arg, through splat + passes yield arguments passes yield arguments + codegens block with return and yield and no return codegens block with return and yield and no return + generate inline generate inline + codegens block bug with conditional next and unconditional break (4) codegens block bug with conditional next and unconditional break (4) + allows access to local variables allows access to local variables codegens block bug with conditional next and unconditional break (3) codegens block bug with conditional next and unconditional break (3) - codegens if with call with block (ssa issue) codegens if with call with block (ssa issue) - can use global constant can use global constant - codegens captured block with next inside yielded block (#2097) codegens captured block with next inside yielded block (#2097) - can access instance vars from yielder function can access instance vars from yielder function + codegens while/break inside block codegens while/break inside block + uses block inside array literal (bug) uses block inside array literal (bug) uses block inside array literal (bug) uses block inside array literal (bug) uses block inside array literal (bug) uses block inside array literal (bug) uses block inside array literal (bug) uses block inside array literal (bug) uses block inside array literal (bug) uses block inside array literal (bug) + codegens block bug with conditional next and unconditional break (1) codegens block bug with conditional next and unconditional break (1) + codegens dispatch with block and break (1) codegens dispatch with block and break (1) codegens dispatch with block and break (1) codegens dispatch with block and break (1) codegens dispatch with block and break (1) codegens dispatch with block and break (1) codegens dispatch with block and break (1) codegens dispatch with block and break (1) codegens dispatch with block and break (1) codegens dispatch with block and break (1) + breaks in var assignment (#3364) breaks in var assignment (#3364) + doesn't codegen call if arg yields and always breaks doesn't codegen call if arg yields and always breaks doesn't crash on yield exp without a type (#8100) doesn't crash on yield exp without a type (#8100) - codegens block bug with conditional next and unconditional break (4) codegens block bug with conditional next and unconditional break (4) - clears nilable var before inlining block method (#10087) clears nilable var before inlining block method (#10087) + returns from block with value returns from block with value returns from block with value returns from block with value returns from block with value returns from block with value returns from block with value returns from block with value returns from block with value returns from block with value + can use global constant can use global constant + allows yield from dispatch call allows yield from dispatch call + return from block that always returns from function that conditionally yields return from block that always returns from function that conditionally yields + break with value from yielder that returns a nilable break with value from yielder that returns a nilable + can call methods from block when yielder is an instance method can call methods from block when yielder is an instance method + codegens block with virtual type arg codegens block with virtual type arg + codegens captured block that returns union, but proc only returns a single type codegens captured block that returns union, but proc only returns a single type block with nilable type block with nilable type - unpacks tuple but doesn't override local variables unpacks tuple but doesn't override local variables - uses block var with same name as local var uses block var with same name as local var - codegens nested break codegens nested break - passes yield arguments passes yield arguments - allows initialize with yield (#224) allows initialize with yield (#224) + doesn't codegen after while that always yields and breaks doesn't codegen after while that always yields and breaks + can access instance vars from yielder function can access instance vars from yielder function + pass arguments to yielder function pass arguments to yielder function can break without value from yielder that returns nilable (1) can break without value from yielder that returns nilable (1) + codegens block with multiple underscores (#3054) codegens block with multiple underscores (#3054) + can set instance vars from yielder function can set instance vars from yielder function + doesn't crash on untyped array to_s doesn't crash on untyped array to_s doesn't crash on untyped array to_s doesn't crash on untyped array to_s doesn't crash on untyped array to_s doesn't crash on untyped array to_s doesn't crash on untyped array to_s doesn't crash on untyped array to_s doesn't crash on untyped array to_s doesn't crash on untyped array to_s + codegens if with call with block (ssa issue) codegens if with call with block (ssa issue) + yields inside yield (#682) yields inside yield (#682) + call block from dispatch and use local vars call block from dispatch and use local vars call block from dispatch and use local vars call block from dispatch and use local vars call block from dispatch and use local vars call block from dispatch and use local vars call block from dispatch and use local vars call block from dispatch and use local vars call block from dispatch and use local vars call block from dispatch and use local vars + return from yielder function return from yielder function returns void when called with block returns void when called with block + nested yields nested yields + return from block return from block + codegens block with nilable type with return (1) codegens block with nilable type with return (1) + allows modifying yielded value (with literal) allows modifying yielded value (with literal) + return from block that always returns from function that always yields inside if block return from block that always returns from function that always yields inside if block + codegens captured block with next inside yielded block (#2097) codegens captured block with next inside yielded block (#2097) + assigns yield to argument assigns yield to argument codegens block with repeated underscore and different types (#4711) codegens block with repeated underscore and different types (#4711) - codegens block which always breaks but never enters (#494) codegens block which always breaks but never enters (#494) - - codegens call with block with call with arg that yields codegens call with block with call with arg that yields - break from block with value break from block with value break from block with value break from block with value break from block with value break from block with value������������ break from block with value�� break from block with value�� break from block with value break from block with value - auto-unpacks tuple auto-unpacks tuple - returns from proc literal returns from proc literal - allows yield from dispatch call allows yield from dispatch call - doesn't codegen call if arg yields and always breaks doesn't codegen call if arg yields and always breaks - codegens block with union arg (2) codegens block with union arg (2) -Crystal::CrystalPath - finds "test_files/**" finds "test_files/**" - doesn't finds "test_files/missing_file.cr" doesn't finds "test_files/missing_file.cr" - doesn't finds "build/reproducible-path/crystal-1.14.0+dfsg/spec/compiler/crystal_path/crystal_path_spec.cr" doesn't finds "build/reproducible-path/crystal-1.14.0+dfsg/spec/compiler/crystal_path/crystal_path_spec.cr" - doesn't finds "../crystal_path/test_files/file_one" doesn't finds "../crystal_path/test_files/file_one" - includes 'lib' by default includes 'lib' by default - finds "other_test_files" finds "other_test_files" - finds "test_files/*" finds "test_files/*" - doesn't finds "../../src/file_three" doesn't finds "../../src/file_three" - finds "test_files/file_four" finds "test_files/file_four" - #each_file_expansion - ./foo ./foo - foo.cr foo.cr - foo/bar/baz foo/bar/baz - foo foo - foo.cr/bar foo.cr/bar - ./foo.cr ./foo.cr - ./foo/bar/baz ./foo/bar/baz - foo/bar foo/bar - ./foo/bar ./foo/bar - foo.cr/bar.cr foo.cr/bar.cr - finds "test_files/file_one" finds "test_files/file_one" - finds "foo.cr" finds "foo.cr" - finds "./file_two.cr" finds "./file_two.cr" - finds "./test_folder/file_three.cr" finds "./test_folder/file_three.cr" - doesn't finds "./crystal_path_spec" doesn't finds "./crystal_path_spec" - finds "test_files/file_one" finds "test_files/file_one" - finds "crystal_path_spec" finds "crystal_path_spec" - doesn't finds "test_folder/file_three.cr" doesn't finds "test_folder/file_three.cr" - finds "test_files/file_three" finds "test_files/file_three" - .expand_paths .expand_paths - doesn't finds "test_folder/*" doesn't finds "test_folder/*" - doesn't finds "file_two.cr" doesn't finds "file_two.cr" - finds "../test_folder" finds "../test_folder" - finds "test_files/file_one.cr" finds "test_files/file_one.cr" - finds "test_files/another" finds "test_files/another" - overrides path with environment variable overrides path with environment variable - finds "test_files/yet_another" finds "test_files/yet_another" - finds "test_files" finds "test_files" - finds "../**" finds "../**" - doesn't finds "./crystal_path_spec.cr" doesn't finds "./crystal_path_spec.cr" - finds "./test_folder/*" finds "./test_folder/*" -Semantic: macro overload - doesn't overwrite last macro definition if named args differs doesn't overwrite last macro definition if named args differs +Crystal::Formatter + formats "begin\n1\nrescue ex\n3\nend" formats "begin\n1\nrescue ex\n3\nend" + formats "foo do\n [foo <<-X\n bar\n X\n ]\nend" formats "foo do\n [foo <<-X\n bar\n X\n ]\nend" + formats "1.=== do\nend" formats "1.=== do\nend" + formats "macro foo\n {% if 1 %} 2 {% else %} 3 {% end %}\nend" formats "macro foo\n {% if 1 %} 2 {% else %} 3 {% end %}\nend" + formats "if 1\nelse\n2\nend\n3" formats "if 1\nelse\n2\nend\n3" + formats "case 1 \n when 2 then \n 3 \n end" formats "case 1 \n when 2 then \n 3 \n end" + formats "next *1" formats "next *1" + formats "enum Foo\nA \nend" formats "enum Foo\nA \nend" + formats "foo\n .foo1(bar\n .bar1\n .bar2)" formats "foo\n .foo1(bar\n .bar1\n .bar2)" + formats "a = begin\n1\n2\nend" formats "a = begin\n1\n2\nend" + formats "x : Int32[ 8 ]" formats "x : Int32[ 8 ]" + formats "getter foo : Int32 # comment\n\ndef foo\nend" formats "getter foo : Int32 # comment\n\ndef foo\nend" + formats ":|" formats ":|" + formats "a+1" formats "a+1" + formats "%i(one two three)" formats "%i(one two three)" + formats "begin\n #hola\n 1\nend\n" formats "begin\n #hola\n 1\nend\n" + formats "\"foo \#{ 1 + 2 }\"" formats "\"foo \#{ 1 + 2 }\"" + formats "def foo(\n a,\n b,\n)\nend" formats "def foo(\n a,\n b,\n)\nend" + formats "if 1\n [\n 1,\n ].none?\nend" formats "if 1\n [\n 1,\n ].none?\nend" + formats "enum Foo\nend" formats "enum Foo\nend" + formats "long_variable_name = [\n {\n :foo => 1,\n },\n {\n :bar => 2,\n },\n]" formats "long_variable_name = [\n {\n :foo => 1,\n },\n {\n :bar => 2,\n },\n]" + formats "1.>=(2) { 3 }" formats "1.>=(2) { 3 }" + formats "def foo(x)\n {% if true %}\n \\{% if true %}\n x = 1\n \\{% else %}\n x = 2\n \\{% end %}\n \\{% for x in y %}\n x = 1\n \\{% end %}\n \\{{x}}\n \\{% x %}\n {% end %}\nend" formats "def foo(x)\n {% if true %}\n \\{% if true %}\n x = 1\n \\{% else %}\n x = 2\n \\{% end %}\n \\{% for x in y %}\n x = 1\n \\{% end %}\n \\{{x}}\n \\{% x %}\n {% end %}\nend" + formats " <<-EOF\n 1\nEOF" formats " <<-EOF\n 1\nEOF" + formats "unless a\n # hello\n 2\nend" formats "unless a\n # hello\n 2\nend" + formats "def foo(x)\n case 1\n when self // 2\n 3\n end\nend" formats "def foo(x)\n case 1\n when self // 2\n 3\n end\nend" + formats "/foo/imx" formats "/foo/imx" + formats "if 1\n node.is_a?(T)\nend" formats "if 1\n node.is_a?(T)\nend" + formats "def foo : A(B)\n nil\nend" formats "def foo : A(B)\n nil\nend" + formats "foo : (F(A)) | D" formats "foo : (F(A)) | D" + formats "case 1\nwhen 1, # 1\n 2, # 2\n 3 # 3\n 1\nend" formats "case 1\nwhen 1, # 1\n 2, # 2\n 3 # 3\n 1\nend" + formats "class Foo; 1; end" formats "class Foo; 1; end" + formats "a = if 1\n2\nelsif 3\n4\nend" formats "a = if 1\n2\nelsif 3\n4\nend" + formats "foo(\n a: 1,\n b: 2,\n )\n" formats "foo(\n a: 1,\n b: 2,\n )\n" + formats "typeof( 1, 2, 3 )" formats "typeof( 1, 2, 3 )" + formats "instance_alignof( Int32 )" formats "instance_alignof( Int32 )" + formats "lib Foo\nfun foo() : Int32\nend" formats "lib Foo\nfun foo() : Int32\nend" + formats "def foo\n# hello\n1\nend" formats "def foo\n# hello\n1\nend" + formats "def foo(&: Int32)\nend" formats "def foo(&: Int32)\nend" + formats "asm(\"nop\" : \"a\"(0), \"b\"(1) )" formats "asm(\"nop\" : \"a\"(0), \"b\"(1) )" + formats "macro foo( x , y )\nend" formats "macro foo( x , y )\nend" + formats "def foo(@[MyAnn] &block); end" formats "def foo(@[MyAnn] &block); end" + formats "foo do\n # bar\nend" formats "foo do\n # bar\nend" + formats "foo({\n 1 => 2,\n 3 => {\n 4 => 5,\n },\n})" formats "foo({\n 1 => 2,\n 3 => {\n 4 => 5,\n },\n})" + formats "if 1\n2\nelsif\n3\n4\nelsif 5\n6\nend" formats "if 1\n2\nelsif\n3\n4\nelsif 5\n6\nend" + formats "begin\n query = <<-HEREDOC\n foo\n HEREDOC\nend" formats "begin\n query = <<-HEREDOC\n foo\n HEREDOC\nend" + formats "foo( )" formats "foo( )" + formats "%[hello]" formats "%[hello]" + formats "lib Bar\n enum Foo\n A\n end\nend" formats "lib Bar\n enum Foo\n A\n end\nend" + formats "def //(x)\n 1\nend" formats "def //(x)\n 1\nend" + formats "if 1\n# nothing\nend" formats "if 1\n# nothing\nend" + formats "\"foo \#{ 1 } \#{ __DIR__ }\"" formats "\"foo \#{ 1 } \#{ __DIR__ }\"" + formats "macro flags\n {% if 1 %}\\\n {% end %}\\\nend" formats "macro flags\n {% if 1 %}\\\n {% end %}\\\nend" + formats "a &.b.as C" formats "a &.b.as C" + formats "0x1234_u32" formats "0x1234_u32" + formats "if a\nif b\n3\nelse\n4\nend\nend" formats "if a\nif b\n3\nelse\n4\nend\nend" + formats "foo 1, do\n2\nend" formats "foo 1, do\n2\nend" + formats "break {1, 2}, {3, 4}" formats "break {1, 2}, {3, 4}" + formats "1 # foo\n2 # bar" formats "1 # foo\n2 # bar" + formats "if 1\n ->{ 1 }\nend" formats "if 1\n ->{ 1 }\nend" + formats "yield 1 , *2" formats "yield 1 , *2" + formats "$1?" formats "$1?" + formats "@[ Foo ]\ndef foo\nend" formats "@[ Foo ]\ndef foo\nend" + formats "class Foo\n@x : Int32\nend" formats "class Foo\n@x : Int32\nend" + formats "x : (A -> B)" formats "x : (A -> B)" + formats "def foo(*y, **z)\nend" formats "def foo(*y, **z)\nend" + formats "__FILE__" formats "__FILE__" + formats "foo(\n 1,\n &.foo\n)" formats "foo(\n 1,\n &.foo\n)" + formats "1 if nil?\na.b + c" formats "1 if nil?\na.b + c" + formats "enum Baz\nA = 1\nFOO\n\nEX = 3\nend" formats "enum Baz\nA = 1\nFOO\n\nEX = 3\nend" + formats "foo &.@bar" formats "foo &.@bar" + formats "::NamedTuple()" formats "::NamedTuple()" + formats "asm(\"nop\")" formats "asm(\"nop\")" + formats "foo &.bar.is_a?(Baz)" formats "foo &.bar.is_a?(Baz)" + formats "case 1\nwhen a; 2\nelse; ; b\nend" formats "case 1\nwhen a; 2\nelse; ; b\nend" + formats "/\#{1}/imx" formats "/\#{1}/imx" + formats "foo(1,\n2,\n)" formats "foo(1,\n2,\n)" + formats "def foo(x)\n {% if true %}\n x = x + 2\n {% end %}\nend" formats "def foo(x)\n {% if true %}\n x = x + 2\n {% end %}\nend" + formats "class Foo < \n Bar \n\n 1 \n\nend" formats "class Foo < \n Bar \n\n 1 \n\nend" + formats "Foo( )" formats "Foo( )" + formats "a[b] ||= c" formats "a[b] ||= c" + formats "begin\nend\n\n# a\n" formats "begin\nend\n\n# a\n" + formats "a(&.b.c.as(C))" formats "a(&.b.c.as(C))" + formats "macro [](x)\nend" formats "macro [](x)\nend" + formats "[\n a(), # b\n]" formats "[\n a(), # b\n]" + formats "asm(\"a\" :: : : \"volatile\")" formats "asm(\"a\" :: : : \"volatile\")" + formats "return *1 ,2" formats "return *1 ,2" + formats "1..\n2" formats "1..\n2" + formats "alignof( Int32 )" formats "alignof( Int32 )" + formats "ary.size = (1).to_i" formats "ary.size = (1).to_i" + formats "alias Foo = Bar" formats "alias Foo = Bar" + formats "def a\n b(\n 1, # x\n # y\n )\nend" formats "def a\n b(\n 1, # x\n # y\n )\nend" + formats "Foo( A , 1 )" formats "Foo( A , 1 )" + formats "class Foo\n def foo\n # nothing\n end\nend" formats "class Foo\n def foo\n # nothing\n end\nend" + formats "case 1 \n when 2 ; 3 \n when 4 ; 5\nend" formats "case 1 \n when 2 ; 3 \n when 4 ; 5\nend" + formats "1 // 2" formats "1 // 2" + formats "def foo(**b, # comment\n &block)\nend" formats "def foo(**b, # comment\n &block)\nend" + formats " .. 2" formats " .. 2" + formats "foo.bar\n.baz" formats "foo.bar\n.baz" + formats "module Foo; 1; end" formats "module Foo; 1; end" + formats "asm(\"nop\" : \"a\"(0) : \"b\"(1) )" formats "asm(\"nop\" : \"a\"(0) : \"b\"(1) )" + formats "1\n2 \n # foo" formats "1\n2 \n # foo" + formats "\n # hello\n\n1" formats "\n # hello\n\n1" + formats "$?" formats "$?" + formats "macro foo\n {% unless 1 %} 2 {% end %}\nend" formats "macro foo\n {% unless 1 %} 2 {% end %}\nend" + formats "\"\#{\n foo = 1}\"" formats "\"\#{\n foo = 1}\"" + formats "next" formats "next" + formats "if 1\n {% for x in y %} {% end %}\nend" formats "if 1\n {% for x in y %} {% end %}\nend" + formats "case 1\nend" formats "case 1\nend" + formats "unless a\n2\nend" formats "unless a\n2\nend" + formats "%i{one( two( three)}" formats "%i{one( two( three)}" + formats "{% if flag?(:freebsd) %}\n 1 + 2\n{% end %}\n\ncase x\nwhen 1234 then 1\nelse x\nend" formats "{% if flag?(:freebsd) %}\n 1 + 2\n{% end %}\n\ncase x\nwhen 1234 then 1\nelse x\nend" + formats "foo(\n 1, 2, &block)" formats "foo(\n 1, 2, &block)" + formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar,\n @[MyAnn] baz\n); end" formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar,\n @[MyAnn] baz\n); end" + formats "def foo\n 1\n #\nrescue\nend" formats "def foo\n 1\n #\nrescue\nend" + formats "asm(\n# foo\n\"nop\"\n# bar\n)" formats "asm(\n# foo\n\"nop\"\n# bar\n)" + formats "`foo \#{ bar }`" formats "`foo \#{ bar }`" + formats "{% verbatim do %}{{1}} + {{2}}{% end %}" formats "{% verbatim do %}{{1}} + {{2}}{% end %}" + formats "::Foo:: Bar" formats "::Foo:: Bar" + formats "def %(x)\n 1\nend" formats "def %(x)\n 1\nend" + formats "def a\n {\n 1, # x\n # y\n }\nend" formats "def a\n {\n 1, # x\n # y\n }\nend" + formats "def foo (\nx ,\n y ) \n end" formats "def foo (\nx ,\n y ) \n end" + formats "foo &.as?(T)" formats "foo &.as?(T)" + formats "foo({% verbatim do %}{{1}} + {{2}}{% end %})" formats "foo({% verbatim do %}{{1}} + {{2}}{% end %})" + adds trailing comma to def multi-line normal, splat, and double splat parameters + formats "macro foo(\n a,\n *b\n)\nend" formats "macro foo(\n a,\n *b\n)\nend" + formats "def foo(\n a,\n b\n)\nend" formats "def foo(\n a,\n b\n)\nend" + formats "def foo(\n a,\n *b\n)\nend" formats "def foo(\n a,\n *b\n)\nend" + formats "def foo(\n a,\n @[Ann] b\n)\nend" formats "def foo(\n a,\n @[Ann] b\n)\nend" + formats "def foo(\n a, # Foo\n b # Bar\n)\nend" formats "def foo(\n a, # Foo\n b # Bar\n)\nend" + formats "def foo(\n a,\n **b\n)\nend" formats "def foo(\n a,\n **b\n)\nend" + formats "def foo(\n a, b\n)\nend" formats "def foo(\n a, b\n)\nend" + formats "fun foo(\n a : Int32,\n ...\n)\nend" formats "fun foo(\n a : Int32,\n ...\n)\nend" + formats "def foo(\n a,\n &block\n)\nend" formats "def foo(\n a,\n &block\n)\nend" + formats "def foo(a, *args, &block)\nend" formats "def foo(a, *args, &block)\nend" + formats "def foo(\n a : Int32,\n b : Int32\n)\nend" formats "def foo(\n a : Int32,\n b : Int32\n)\nend" + formats "def foo(a, *args)\nend" formats "def foo(a, *args)\nend" + formats "def foo(\n a : Int32,\n b : Int32 = 1\n)\nend" formats "def foo(\n a : Int32,\n b : Int32 = 1\n)\nend" + formats "macro foo(\n a,\n b\n)\nend" formats "macro foo(\n a,\n b\n)\nend" + formats "def foo(a, b)\nend" formats "def foo(a, b)\nend" + formats "def foo(\n a,\n)\nend" formats "def foo(\n a,\n)\nend" + formats "def foo(\n a, b,\n c, d\n)\nend" formats "def foo(\n a, b,\n c, d\n)\nend" + formats "def foo(a, **kwargs, &block)\nend" formats "def foo(a, **kwargs, &block)\nend" + formats "def foo(a, **kwargs)\nend" formats "def foo(a, **kwargs)\nend" + formats "def foo(a)\nend" formats "def foo(a)\nend" + formats "def foo(\n a,\n @[Ann]\n b\n)\nend" formats "def foo(\n a,\n @[Ann]\n b\n)\nend" + formats "def foo(\n a,\n b c\n)\nend" formats "def foo(\n a,\n b c\n)\nend" + formats "def foo(a, &block)\nend" formats "def foo(a, &block)\nend" + formats "fun foo(\n a : Int32,\n b : Int32\n)\nend" formats "fun foo(\n a : Int32,\n b : Int32\n)\nend" + formats "\"1\#{\"\#{\"2\"}\"}3\#{\"4\"}5\"" formats "\"1\#{\"\#{\"2\"}\"}3\#{\"4\"}5\"" + formats "asm(\"nop\"\n: \"a\"(0) )" formats "asm(\"nop\"\n: \"a\"(0) )" + formats " <<-HTML\n foo\n HTML" formats " <<-HTML\n foo\n HTML" + formats " * a = 1 " formats " * a = 1 " + formats "foo &.[]?( 1, 2 )" formats "foo &.[]?( 1, 2 )" + formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n : \"f\",\n \"g\")" formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n : \"f\",\n \"g\")" + formats "case\nend" formats "case\nend" + formats "foo ((1) ? 2 : 3)" formats "foo ((1) ? 2 : 3)" + formats "if 1\n2 && 3\nend" formats "if 1\n2 && 3\nend" + formats "Foo:: Bar" formats "Foo:: Bar" + formats "abstract class Foo\nend" formats "abstract class Foo\nend" + formats "def foo\n 1 #\nrescue\nend" formats "def foo\n 1 #\nrescue\nend" + formats "{% if true %}\n <<-FOO\n hello \n FOO\n{% end %}" formats "{% if true %}\n <<-FOO\n hello \n FOO\n{% end %}" + formats "1.==(2) { 3 }" formats "1.==(2) { 3 }" + formats "foo[bar.baz]\n .qux" formats "foo[bar.baz]\n .qux" + formats "select \n when foo ; 2 \n end" formats "select \n when foo ; 2 \n end" + formats "foo \\\n 1,\n 2\n\nbar \\\n foo: 1,\n bar: 2" formats "foo \\\n 1,\n 2\n\nbar \\\n foo: 1,\n bar: 2" + formats "[\n 1, 2, # foo\n 3, 4,\n]" formats "[\n 1, 2, # foo\n 3, 4,\n]" + formats "long_variable_name = [\n {\n :foo => 1,\n }, {\n :bar => 2,\n },\n]" formats "long_variable_name = [\n {\n :foo => 1,\n }, {\n :bar => 2,\n },\n]" + formats "->Foo.foo=" formats "->Foo.foo=" + formats "a = case 1\nwhen 2\n3\nelse\n4\nend" formats "a = case 1\nwhen 2\n3\nelse\n4\nend" + formats "foo[ 1, 2 ]?" formats "foo[ 1, 2 ]?" + formats "def foo\n 1\n 2\nrescue IO\n 1\nend" formats "def foo\n 1\n 2\nrescue IO\n 1\nend" + formats "next {1, 2}, 3" formats "next {1, 2}, 3" + formats "foo bar, \\\nbaz" formats "foo bar, \\\nbaz" + formats "1\n\n\n2" formats "1\n\n\n2" + formats "foo \"bar\": 1, \"baz qux\": 2" formats "foo \"bar\": 1, \"baz qux\": 2" + formats "foo.[]" formats "foo.[]" + formats "macro foo\n %foo\nend" formats "macro foo\n %foo\nend" + formats "case 1 \n when 2 then 3 \n end" formats "case 1 \n when 2 then 3 \n end" + formats "[\n [\n 1,\n ], [\n 2,\n ], [\n 3,\n ],\n]" formats "[\n [\n 1,\n ], [\n 2,\n ], [\n 3,\n ],\n]" + formats "[\n a(),\n]" formats "[\n a(),\n]" + formats "{ {1, 2, 3} => 4 }" formats "{ {1, 2, 3} => 4 }" + formats "foo = 1\n->foo.bar(Int32)" formats "foo = 1\n->foo.bar(Int32)" + formats "enum Foo : Int32\nA = 1\ndef foo\n1\nend\nend" formats "enum Foo : Int32\nA = 1\ndef foo\n1\nend\nend" + formats "module Foo\n 1 # bar\nend\n\nmodule Foo\n 1\n # bar\nend\n\nmodule Foo\n 1\n\n # bar\nend\n\nmodule Foo\n 1\n 2\n # bar\nend\n\nmodule Foo\n 1\n 2\n\n # bar\nend\n\nif 1\n 1\n # bar\nend\n\nif 1\n 1\n\n # bar\nend\n\n1\n2\n# foo\n\n1\n2\n\n# foo\n" formats "module Foo\n 1 # bar\nend\n\nmodule Foo\n 1\n # bar\nend\n\nmodule Foo\n 1\n\n # bar\nend\n\nmodule Foo\n 1\n 2\n # bar\nend\n\nmodule Foo\n 1\n 2\n\n # bar\nend\n\nif 1\n 1\n # bar\nend\n\nif 1\n 1\n\n # bar\nend\n\n1\n2\n# foo\n\n1\n2\n\n# foo\n" + formats "{ # foo\n 1 => 2,\n}" formats "{ # foo\n 1 => 2,\n}" + formats "->foo!" formats "->foo!" + formats "(\n a = 1\n a\n)" formats "(\n a = 1\n a\n)" + formats "case\nend" formats "case\nend" + formats "begin\n / /\nend" formats "begin\n / /\nend" + formats "<<-HTML\n \#{__FILE__}\n HTML" formats "<<-HTML\n \#{__FILE__}\n HTML" + formats "foo(\n <<-HERE,\n hello\n HERE\n 1,\n)" formats "foo(\n <<-HERE,\n hello\n HERE\n 1,\n)" + formats "case 1 \n when 2 \n 3 \n else 4 \n end" formats "case 1 \n when 2 \n 3 \n else 4 \n end" + formats "x, y = <<-FOO, <<-BAR\n hello\n FOO\n world\n BAR" formats "x, y = <<-FOO, <<-BAR\n hello\n FOO\n world\n BAR" + formats "def x(@y = ->(z) {})\nend" formats "def x(@y = ->(z) {})\nend" + formats "@[Foo( 1, 2 )]" formats "@[Foo( 1, 2 )]" + formats "{\n variables => true,\n query => <<-HEREDOC,\n foo\n HEREDOC\n foo => true,\n}" formats "{\n variables => true,\n query => <<-HEREDOC,\n foo\n HEREDOC\n foo => true,\n}" + formats " {% begin %} 2 {% end %}" formats " {% begin %} 2 {% end %}" + formats "def foo\n1\nend" formats "def foo\n1\nend" + formats "->do\nx\nend" formats "->do\nx\nend" + formats "return 1 , 2" formats "return 1 , 2" + formats "def foo\n {% for x in y %}\n foo + bar\n {% end %}\nend" formats "def foo\n {% for x in y %}\n foo + bar\n {% end %}\nend" + formats "asm(\"nop\" : : )" formats "asm(\"nop\" : : )" + formats "macro foo\n {{x}} <<-FOO\n hello \n FOO\nend" formats "macro foo\n {{x}} <<-FOO\n hello \n FOO\nend" + formats "foo(\n 1,\n a: 1,\n b: 2,\n)" formats "foo(\n 1,\n a: 1,\n b: 2,\n)" + formats "{\n \"a\" => 1, \"b\" => 2,\n \"foo\" => 3, \"bar\" => 4,\n \"coconio\" => 5, \"lala\" => 6,\n}\n" formats "{\n \"a\" => 1, \"b\" => 2,\n \"foo\" => 3, \"bar\" => 4,\n \"coconio\" => 5, \"lala\" => 6,\n}\n" + formats "1 \\\nrescue 2" formats "1 \\\nrescue 2" + formats "def foo(\n\n#foo\nx,\n\n#bar\nz\n)\nend" formats "def foo(\n\n#foo\nx,\n\n#bar\nz\n)\nend" + formats "return( *1 , *2 )" formats "return( *1 , *2 )" + formats "{ * 1 * 2,\n*\n3, 4 }" formats "{ * 1 * 2,\n*\n3, 4 }" + formats "foo &.is_a?(T)" formats "foo &.is_a?(T)" + formats "x : { {A, B}, {C, D} }" formats "x : { {A, B}, {C, D} }" + formats "\"\#{\n foo = 1\n}\"" formats "\"\#{\n foo = 1\n}\"" + formats "foo { |x| (x).a }" formats "foo { |x| (x).a }" + formats "bar = foo(->{\n 1 + 2\n})" formats "bar = foo(->{\n 1 + 2\n})" + formats "def foo(x : self ?) \n end" formats "def foo(x : self ?) \n end" + formats "def foo( x , * y )\nend" formats "def foo( x , * y )\nend" + formats "macro foo\n 1 + 2 \n end" formats "macro foo\n 1 + 2 \n end" + formats "{ A: 1 }\n" formats "{ A: 1 }\n" + formats "%r(foo \#{ bar })" formats "%r(foo \#{ bar })" + formats "foo(\n 1, 2)" formats "foo(\n 1, 2)" + formats "1 ; 2" formats "1 ; 2" + formats "$? = 1" formats "$? = 1" + formats "1.<= do\nend" formats "1.<= do\nend" + formats "'a'" formats "'a'" + formats "{ \"foo\" => 1 }" formats "{ \"foo\" => 1 }" + formats "\"foo\" \\\n \"bar\" \\\n \"baz\"" formats "\"foo\" \\\n \"bar\" \\\n \"baz\"" + formats ":&+" formats ":&+" + formats "alias X = (A, B) ->\nbar : C" formats "alias X = (A, B) ->\nbar : C" + formats "macro flags\n {% if 1 %}{{1}}a{{2}}{% end %}\\\nend" formats "macro flags\n {% if 1 %}{{1}}a{{2}}{% end %}\\\nend" + formats "false" formats "false" + formats "<<-FOO\nbarfoobar\nFOO" formats "<<-FOO\nbarfoobar\nFOO" + formats "1 \\\nif 2" formats "1 \\\nif 2" + formats "@[Foo::Bar]" formats "@[Foo::Bar]" + formats "asm(\"a\" ::: \"a\"\n : \"volatile\",\n \"intel\")" formats "asm(\"a\" ::: \"a\"\n : \"volatile\",\n \"intel\")" + formats "nil" formats "nil" + formats "x : Int32*" formats "x : Int32*" + formats "if 1;\n2;\nelse;\n3;\nend" formats "if 1;\n2;\nelse;\n3;\nend" + formats "1\nyield\n2" formats "1\nyield\n2" + formats "a(&.b.c.as C)" formats "a(&.b.c.as C)" + formats "1 / 2" formats "1 / 2" + formats "+ 1" formats "+ 1" + formats "->@@foo.foo=" formats "->@@foo.foo=" + formats ":&*" formats ":&*" + formats "private def foo\nend\nprivate def bar\nend" formats "private def foo\nend\nprivate def bar\nend" + formats "foo[&.bar] = 1" formats "foo[&.bar] = 1" + formats "foo(bar(\n 1,\n baz(\n 2,\n 3,\n )\n))" formats "foo(bar(\n 1,\n baz(\n 2,\n 3,\n )\n))" + formats "-> : Int32? {}" formats "-> : Int32? {}" + formats "a[1] , b[2] = 1 , 2" formats "a[1] , b[2] = 1 , 2" + formats "foo.as?(T).bar" formats "foo.as?(T).bar" + formats "foo : (Array(String)?) | String" formats "foo : (Array(String)?) | String" + formats "def foo(@[AnnOne] @[AnnTwo] & ); end" formats "def foo(@[AnnOne] @[AnnTwo] & ); end" + formats "def foo(\n foo,\n\n @[MyAnn]\n @[MyAnn]\n & : Nil -> Nil\n); end" formats "def foo(\n foo,\n\n @[MyAnn]\n @[MyAnn]\n & : Nil -> Nil\n); end" + formats "{ foo: 1 }" formats "{ foo: 1 }" + formats "break 1, {2, 3}" formats "break 1, {2, 3}" + formats "foo(&.@bar)" formats "foo(&.@bar)" + formats "SomeLib.UppercasedFunCall 1, 2" formats "SomeLib.UppercasedFunCall 1, 2" + formats "enum Foo\n {% begin %}\n A\n B\n C\n {% end %}\nend" formats "enum Foo\n {% begin %}\n A\n B\n C\n {% end %}\nend" + formats "{ {1}.foo, 2 }" formats "{ {1}.foo, 2 }" + formats "lib Foo\n fun foo =\n\n\n bar : Void\nend" formats "lib Foo\n fun foo =\n\n\n bar : Void\nend" + formats "begin\n array[\n 0, # Zero\n ]\nend" formats "begin\n array[\n 0, # Zero\n ]\nend" + formats "next( 1 )" formats "next( 1 )" + formats "a &.b.as(C)" formats "a &.b.as(C)" + formats "@[ Foo(foo: 1) ]\ndef foo\nend" formats "@[ Foo(foo: 1) ]\ndef foo\nend" + formats "foo 1" formats "foo 1" + adds `&` to yielding methods that don't have a block parameter (#8764) + formats "def foo # bar\n yield\nend" formats "def foo # bar\n yield\nend" + formats "def foo(\nx, y)\n yield\nend" formats "def foo(\nx, y)\n yield\nend" + formats "def foo(x,\n)\n yield\nend" formats "def foo(x,\n)\n yield\nend" + formats "def foo(\nx,\n)\n yield\nend" formats "def foo(\nx,\n)\n yield\nend" + formats "def foo(x\n)\n yield\nend" formats "def foo(x\n)\n yield\nend" + formats "def foo(x,\ny,)\n yield\nend" formats "def foo(x,\ny,)\n yield\nend" + formats "def foo(x)\n yield\nend" formats "def foo(x)\n yield\nend" + formats "def foo()\n yield\nend" formats "def foo()\n yield\nend" + formats "def foo(a, **b)\n yield\nend" formats "def foo(a, **b)\n yield\nend" + formats "macro f\n yield\n {{ yield }}\nend" formats "macro f\n yield\n {{ yield }}\nend" + formats "def foo(\n)\n yield\nend" formats "def foo(\n)\n yield\nend" + formats "def foo(\nx,\ny)\n yield\nend" formats "def foo(\nx,\ny)\n yield\nend" + formats "def foo(x,\ny)\n yield\nend" formats "def foo(x,\ny)\n yield\nend" + formats "def foo(\nx)\n yield\nend" formats "def foo(\nx)\n yield\nend" + formats "def foo\n yield\nend" formats "def foo\n yield\nend" + formats "def foo(x ,)\n yield\nend" formats "def foo(x ,)\n yield\nend" + formats "1 ensure 2" formats "1 ensure 2" + formats "x : {A, B}" formats "x : {A, B}" + formats "{% if 1 %}\n 2\n{% end %}\ndef foo\nend" formats "{% if 1 %}\n 2\n{% end %}\ndef foo\nend" + formats "foo.bar(1) # comment\n .baz" formats "foo.bar(1) # comment\n .baz" + formats "foo.bar / 2\n" formats "foo.bar / 2\n" + formats "foo([\n 1,\n 2,\n 3,\n])" formats "foo([\n 1,\n 2,\n 3,\n])" + formats "macro foo()\n {% if 1 %} 2 {% end %}\nend" formats "macro foo()\n {% if 1 %} 2 {% end %}\nend" + formats "@@a" formats "@@a" + formats "if 1\n {{1 + 2}}\nend" formats "if 1\n {{1 + 2}}\nend" + formats "page= <<-HTML\n foo\nHTML" formats "page= <<-HTML\n foo\nHTML" + formats "def foo(\"bar baz\" qux)\nend" formats "def foo(\"bar baz\" qux)\nend" + formats "def foo ( x : Foo.class ) \n end" formats "def foo ( x : Foo.class ) \n end" + formats "[\n] of \n Foo " formats "[\n] of \n Foo " + formats "def foo(\n @[MyAnn] bar\n); end" formats "def foo(\n @[MyAnn] bar\n); end" + formats "def foo(a, **b : Int32)\nend" formats "def foo(a, **b : Int32)\nend" + formats "->@foo.foo" formats "->@foo.foo" + formats "foo.bar &.baz( 1 , 2 )" formats "foo.bar &.baz( 1 , 2 )" + formats "if 1;\n2;\nelsif 3;\n4;\nend" formats "if 1;\n2;\nelsif 3;\n4;\nend" + formats "foo(\n1,\n 2 \n)" formats "foo(\n1,\n 2 \n)" + formats "{ %() }" formats "{ %() }" + formats "loop do\n 1\n loop do\n 2\n rescue\n 3\n end\n 4\nend" formats "loop do\n 1\n loop do\n 2\n rescue\n 3\n end\n 4\nend" + formats "{% foo <<-X\nbar\nX\n%}" formats "{% foo <<-X\nbar\nX\n%}" + formats "\n\n1" formats "\n\n1" + formats "if a\nif b\nelse\n4\nend\nend" formats "if a\nif b\nelse\n4\nend\nend" + formats "def foo ( x : self ) \n end" formats "def foo ( x : self ) \n end" + formats "1 + 2" formats "1 + 2" + formats "def foo ( bar @@select) \n end" formats "def foo ( bar @@select) \n end" + formats "if 1\n foo(\n bar,\n # comment\n )\nend" formats "if 1\n foo(\n bar,\n # comment\n )\nend" + formats "[1, 2, 3] of Foo" formats "[1, 2, 3] of Foo" + formats "def foo(x : A(B), y)\nend" formats "def foo(x : A(B), y)\nend" + formats "10/a" formats "10/a" + formats "begin\n1\nrescue ex : Int32 \n3\nend" formats "begin\n1\nrescue ex : Int32 \n3\nend" + formats "foo &.bar" formats "foo &.bar" + formats "1 unless 2" formats "1 unless 2" + formats "-> do\nend" formats "-> do\nend" + formats "macro foo( x = 1, y = 2, &block)\nend" formats "macro foo( x = 1, y = 2, &block)\nend" + formats "class Foo\nend\nclass Bar\nend" formats "class Foo\nend\nclass Bar\nend" + formats "Hash{\n foo => <<-EOF,\n foo\n EOF\n bar => <<-BAR,\n bar\n BAR\n}" formats "Hash{\n foo => <<-EOF,\n foo\n EOF\n bar => <<-BAR,\n bar\n BAR\n}" + formats " ((1) + 2)" formats " ((1) + 2)" + formats "def `(x)\n 1\nend" formats "def `(x)\n 1\nend" + formats "a = foo(bar(baz3 do\nend))" formats "a = foo(bar(baz3 do\nend))" + formats ":\"foo\"" formats ":\"foo\"" + formats "foo do;\n1; end" formats "foo do;\n1; end" + formats "if a\n2\n3\nelse\n4\n5\nend" formats "if a\n2\n3\nelse\n4\n5\nend" + formats "[\n # foo\n] of String" formats "[\n # foo\n] of String" + formats "private getter foo" formats "private getter foo" + formats "X(typeof(begin\n e.is_a?(Y) ? 1 : 2\nend))" formats "X(typeof(begin\n e.is_a?(Y) ? 1 : 2\nend))" + formats "foo a , *b" formats "foo a , *b" + formats "def foo : (A, B) ->\n nil\nend" formats "def foo : (A, B) ->\n nil\nend" + formats "1 # foo\n/ 1 /" formats "1 # foo\n/ 1 /" + formats "def foo ( @x) \n end" formats "def foo ( @x) \n end" + formats "\"\\a\\c\#{foo}\\b\\d\"" formats "\"\\a\\c\#{foo}\\b\\d\"" + formats "return 1\n# end" formats "return 1\n# end" + formats "return( 1 , 2 )" formats "return( 1 , 2 )" + formats "break {1, 2}, 3" formats "break {1, 2}, 3" + formats "if a\n2\nelse\nend" formats "if a\n2\nelse\nend" + formats "->@foo.foo?" formats "->@foo.foo?" + formats "break { {1, 2}, {3, 4} }, 5" formats "break { {1, 2}, {3, 4} }, 5" + formats "select \n when foo \n 2 \n end" formats "select \n when foo \n 2 \n end" + formats "foo.bar(&.% baz)" formats "foo.bar(&.% baz)" + formats "<<-FOO\nfoo\n1\nFOO" formats "<<-FOO\nfoo\n1\nFOO" + formats "lib Foo\nunion Foo\nend\nend" formats "lib Foo\nunion Foo\nend\nend" + formats "select \n when foo \n 2 \n else \n 3 \n end" formats "select \n when foo \n 2 \n else \n 3 \n end" + formats "macro foo\n <<-FOO\n hello \n FOO\nend" formats "macro foo\n <<-FOO\n hello \n FOO\nend" + formats "foo do | x | \n x \n end" formats "foo do | x | \n x \n end" + formats "def foo( & block )\nend" formats "def foo( & block )\nend" + formats "def foo(\n **a\n\n # comment\n)\n 1\nend" formats "def foo(\n **a\n\n # comment\n)\n 1\nend" + formats "select # some comment\nwhen bar\n break\nend" formats "select # some comment\nwhen bar\n break\nend" + formats "foo {;;1}" formats "foo {;;1}" + formats "macro foo(x)\n {% if 1 %} 2 {% end %}\nend" formats "macro foo(x)\n {% if 1 %} 2 {% end %}\nend" + formats "begin; 1; end" formats "begin; 1; end" + formats "bar = foo(->{\n 1 + 2\n})" formats "bar = foo(->{\n 1 + 2\n})" + formats "foo &.[]?" formats "foo &.[]?" + formats "if 1\n2\nelsif\n3\n4\nend" formats "if 1\n2\nelsif\n3\n4\nend" + formats "begin\n1 ? 2 : 3\nend" formats "begin\n1 ? 2 : 3\nend" + formats "a &.!.!" formats "a &.!.!" + formats "/foo/" formats "/foo/" + formats "1/2" formats "1/2" + formats "def foo: Int32\nend" formats "def foo: Int32\nend" + formats "def foo(x @@y)\nend" formats "def foo(x @@y)\nend" + formats "1 # foo\n1234 # bar" formats "1 # foo\n1234 # bar" + formats "{ {{FOO}}, nil}" formats "{ {{FOO}}, nil}" + formats "x : Int32**" formats "x : Int32**" + formats "_ = 1" formats "_ = 1" + formats "yield( 1 , 2 )" formats "yield( 1 , 2 )" + formats "private FOO = 2\nprivate A = 1" formats "private FOO = 2\nprivate A = 1" + formats "[] of Int32\n1" formats "[] of Int32\n1" + formats "break { {1, 2}, {3, 4} }" formats "break { {1, 2}, {3, 4} }" + formats "foo([\n 1, 2,\n 3, 4,\n])" formats "foo([\n 1, 2,\n 3, 4,\n])" + formats "def foo\n2 # foo\nend" formats "def foo\n2 # foo\nend" + formats "1.[]=(2) { 3 }" formats "1.[]=(2) { 3 }" + formats "foo.[] =1" formats "foo.[] =1" + formats "@x &&= 1" formats "@x &&= 1" + formats "foo.[ 1, 2 ]?" formats "foo.[ 1, 2 ]?" + formats "macro foo\n {% if 1 %} 2 {% end %}\nend" formats "macro foo\n {% if 1 %} 2 {% end %}\nend" + formats "a = \\\n # foo\n nil" formats "a = \\\n # foo\n nil" + formats "def foo\nend\n\ndef bar\nend\n\n# foo" formats "def foo\nend\n\ndef bar\nend\n\n# foo" + formats "foo x, self // 1" formats "foo x, self // 1" + formats "def a\n b(\n 1, # x\n # y\n a: 1, # x\n # y\n b: 2 # z\n )\nend" formats "def a\n b(\n 1, # x\n # y\n a: 1, # x\n # y\n b: 2 # z\n )\nend" + formats "class Foo\n # ```\n # 1\n # ```\nend\n" formats "class Foo\n # ```\n # 1\n # ```\nend\n" + formats "foo.[]" formats "foo.[]" + formats "<<-FOO\nfoo\nFOO" formats "<<-FOO\nfoo\nFOO" + formats "0u64" formats "0u64" + formats "foo bar # comment\n\n# doc\ndef baz; end" formats "foo bar # comment\n\n# doc\ndef baz; end" + formats "a, b = \nif 1\n2\nend" formats "a, b = \nif 1\n2\nend" + formats "case 1 \n when .foo? \n 3 \n end" formats "case 1 \n when .foo? \n 3 \n end" + formats "next 1" formats "next 1" + formats "->{1}" formats "->{1}" + formats "foo 1, # comment\n do\n end" formats "foo 1, # comment\n do\n end" + formats "[\n1,\n\n2]" formats "[\n1,\n\n2]" + formats "def foo(a, # comment\n *b)\nend" formats "def foo(a, # comment\n *b)\nend" + formats "a&+1" formats "a&+1" + formats "foo(1 &+ \n2)" formats "foo(1 &+ \n2)" + formats "alias Foo=\nBar" formats "alias Foo=\nBar" + formats "1 * 2" formats "1 * 2" + formats "foo &.bar.nil?()" formats "foo &.bar.nil?()" + formats "{ {1, 2, 3} }" formats "{ {1, 2, 3} }" + formats "def foo(x, *, z)\nend" formats "def foo(x, *, z)\nend" + formats "foo {;1}" formats "foo {;1}" + formats "(size - 1).downto(0) do |i|\n yield @buffer[i]\nend" formats "(size - 1).downto(0) do |i|\n yield @buffer[i]\nend" + formats "1 #foo \n2 #bar" formats "1 #foo \n2 #bar" + formats "1*2" formats "1*2" + formats "{ {% for x in 1..2 %}3{% end %}, nil }" formats "{ {% for x in 1..2 %}3{% end %}, nil }" + formats "@x[ 1 ] += 2" formats "@x[ 1 ] += 2" + formats "macro foo\n {{\n1 + 2 }}\nend" formats "macro foo\n {{\n1 + 2 }}\nend" + formats "yield 1\n2" formats "yield 1\n2" + formats "case 1\nwhen a; 2\nelse; b\nend" formats "case 1\nwhen a; 2\nelse; b\nend" + formats "foo(bar(\n 1,\n baz(2,\n 3,\n )\n))" formats "foo(bar(\n 1,\n baz(2,\n 3,\n )\n))" + formats "def foo ( x , y ,\n) \n end" formats "def foo ( x , y ,\n) \n end" + formats "lib Foo::Bar\nend" formats "lib Foo::Bar\nend" + formats "module Ton\n macro foo\n class {{name.id}}\n end\n end\nend" formats "module Ton\n macro foo\n class {{name.id}}\n end\n end\nend" + formats "A = 10\nFOO = 123\nBARBAZ = 1234\n" formats "A = 10\nFOO = 123\nBARBAZ = 1234\n" + formats "next 1 , *2" formats "next 1 , *2" + formats " <<-HTML\n hello \n world \n HTML" formats " <<-HTML\n hello \n world \n HTML" + formats "def foo\n # Comment\n\n\nend" formats "def foo\n # Comment\n\n\nend" + formats "foo &.[](1, 2)" formats "foo &.[](1, 2)" + formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar,\n\n @[MyAnn] baz\n); end" formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar,\n\n @[MyAnn] baz\n); end" + formats "macro foo\n %foo{x.id+2}\nend" formats "macro foo\n %foo{x.id+2}\nend" + formats "lib LibFoo\n {% begin %}\n fun foo : Int32\n {% end %}\nend" formats "lib LibFoo\n {% begin %}\n fun foo : Int32\n {% end %}\nend" + formats "bar do\n foo <<-X\n bar\n X\nend" formats "bar do\n foo <<-X\n bar\n X\nend" + formats "yield( 1 )" formats "yield( 1 )" + formats "lib Foo\n {% if 1 %}\n fun foo\n {% end %}\nend\n\nmacro bar\n 1\nend" formats "lib Foo\n {% if 1 %}\n fun foo\n {% end %}\nend\n\nmacro bar\n 1\nend" + formats "foo 1, # comment\n # bar\n do\n end" formats "foo 1, # comment\n # bar\n do\n end" + formats "1 ? 2 : 3" formats "1 ? 2 : 3" + formats "class Foo;end" formats "class Foo;end" + formats "->Foo.foo!" formats "->Foo.foo!" + formats "if a\n2\n3\nend" formats "if a\n2\n3\nend" + formats "x, y, z = <<-FOO, <<-BAR, <<-BAZ\n hello\n FOO\n world\n BAR\n qux\nBAZ" formats "x, y, z = <<-FOO, <<-BAR, <<-BAZ\n hello\n FOO\n world\n BAR\n qux\nBAZ" + Unicode bi-directional control characters + formats "NamedTuple(\"\u202B\": Int32)" formats "NamedTuple(\"\u202B\": Int32)" + formats "NamedTuple(\"\u2068\": Int32)" formats "NamedTuple(\"\u2068\": Int32)" + formats "{\"\u202C\": 1}" formats "{\"\u202C\": 1}" + formats "%q(\u2069)" formats "%q(\u2069)" + formats "%(\u202B)" formats "%(\u202B)" + formats "/\u202A/" formats "/\u202A/" + formats "<<-'EOS'\n\u2066\nEOS" formats "<<-'EOS'\n\u2066\nEOS" + formats "%(\u202C)" formats "%(\u202C)" + formats "<<-'EOS'\n\u202C\nEOS" formats "<<-'EOS'\n\u202C\nEOS" + formats "%Q(\u202B)" formats "%Q(\u202B)" + formats "{\"\u2067\": 1}" formats "{\"\u2067\": 1}" + formats "/\u202E\#{1}/" formats "/\u202E\#{1}/" + formats "/\u2068\#{1}/" formats "/\u2068\#{1}/" + formats "%r(\u202D\#{1})" formats "%r(\u202D\#{1})" + formats "foo(\"\u2069\": 1)" formats "foo(\"\u2069\": 1)" + formats "foo(\"\u2067\": 1)" formats "foo(\"\u2067\": 1)" + formats "\"\\c\u202C\"" formats "\"\\c\u202C\"" + formats "<<-EOS\n\u2067\nEOS" formats "<<-EOS\n\u2067\nEOS" + formats "%r(\u202B\#{1})" formats "%r(\u202B\#{1})" + formats "<<-EOS\n\u2066\nEOS" formats "<<-EOS\n\u2066\nEOS" + formats "foo(\"\u2068\": 1)" formats "foo(\"\u2068\": 1)" + formats "/\u202B/" formats "/\u202B/" + formats "/\u202D/" formats "/\u202D/" + formats "def foo(\"\u2067\" x)\nend" formats "def foo(\"\u2067\" x)\nend" + formats "<<-'EOS'\n\u202A\nEOS" formats "<<-'EOS'\n\u202A\nEOS" + formats "%w(\u202C)" formats "%w(\u202C)" + formats "NamedTuple(\"\u202A\": Int32)" formats "NamedTuple(\"\u202A\": Int32)" + formats "%w(\u202A)" formats "%w(\u202A)" + formats "\"\u202D\#{1}\"" formats "\"\u202D\#{1}\"" + formats "<<-EOS\n\u2066\#{1}\nEOS" formats "<<-EOS\n\u2066\#{1}\nEOS" + formats "/\u202E/" formats "/\u202E/" + formats "%i(\u202E)" formats "%i(\u202E)" + formats "%(\u202D)" formats "%(\u202D)" + formats "def foo(\"\u202A\" x)\nend" formats "def foo(\"\u202A\" x)\nend" + formats "%Q(\u2069)" formats "%Q(\u2069)" + formats "<<-EOS\n\u2069\nEOS" formats "<<-EOS\n\u2069\nEOS" + formats "%r(\u2067)" formats "%r(\u2067)" + formats "foo(\"\u202A\": 1)" formats "foo(\"\u202A\": 1)" + formats "%r(\u2069)" formats "%r(\u2069)" + formats "def foo(\"\u2069\" x)\nend" formats "def foo(\"\u2069\" x)\nend" + formats "%r(\u202D)" formats "%r(\u202D)" + formats "%q(\u202D)" formats "%q(\u202D)" + formats "\"\u202C\"" formats "\"\u202C\"" + formats "\"\\c\u2069\"" formats "\"\\c\u2069\"" + formats "\"\u202D\"" formats "\"\u202D\"" + formats "%(\u2067)" formats "%(\u2067)" + formats "%r(\u202B)" formats "%r(\u202B)" + formats "<<-'EOS'\n\u202B\nEOS" formats "<<-'EOS'\n\u202B\nEOS" + formats "def foo(\"\u2066\" x)\nend" formats "def foo(\"\u2066\" x)\nend" + formats "\"\u202E\#{1}\"" formats "\"\u202E\#{1}\"" + formats "%Q(\u2067)" formats "%Q(\u2067)" + formats "def foo(\"\u202D\" x)\nend" formats "def foo(\"\u202D\" x)\nend" + formats "%(\u202A)" formats "%(\u202A)" + formats "<<-EOS\n\u202D\nEOS" formats "<<-EOS\n\u202D\nEOS" + formats "{\"\u202A\": 1}" formats "{\"\u202A\": 1}" + formats "\"\\c\u202A\"" formats "\"\\c\u202A\"" + formats "NamedTuple(\"\u202E\": Int32)" formats "NamedTuple(\"\u202E\": Int32)" + formats "/\u202C/" formats "/\u202C/" + formats "%Q(\u2068)" formats "%Q(\u2068)" + formats "%i(\u2068)" formats "%i(\u2068)" + formats "%w(\u202D)" formats "%w(\u202D)" + formats "def foo(\"\u202C\" x)\nend" formats "def foo(\"\u202C\" x)\nend" + formats "\"\\c\u2068\"" formats "\"\\c\u2068\"" + formats "%q(\u2067)" formats "%q(\u2067)" + formats "foo(\"\u202D\": 1)" formats "foo(\"\u202D\": 1)" + formats "%Q(\u202C)" formats "%Q(\u202C)" + formats "\"\\c\u202E\#{1}\"" formats "\"\\c\u202E\#{1}\"" + formats "%Q(\u202C\#{1})" formats "%Q(\u202C\#{1})" + formats "def foo(\"\u2068\" x)\nend" formats "def foo(\"\u2068\" x)\nend" + formats "<<-EOS\n\u2069\#{1}\nEOS" formats "<<-EOS\n\u2069\#{1}\nEOS" + formats "{\"\u202D\": 1}" formats "{\"\u202D\": 1}" + formats "<<-EOS\n\u202C\nEOS" formats "<<-EOS\n\u202C\nEOS" + formats "/\u202D\#{1}/" formats "/\u202D\#{1}/" + formats "NamedTuple(\"\u2066\": Int32)" formats "NamedTuple(\"\u2066\": Int32)" + formats "%q(\u2066)" formats "%q(\u2066)" + formats "<<-EOS\n\u202C\#{1}\nEOS" formats "<<-EOS\n\u202C\#{1}\nEOS" + formats "%w(\u202E)" formats "%w(\u202E)" + formats "%i(\u202A)" formats "%i(\u202A)" + formats "{\"\u2068\": 1}" formats "{\"\u2068\": 1}" + formats "NamedTuple(\"\u202C\": Int32)" formats "NamedTuple(\"\u202C\": Int32)" + formats "\"\\c\u202D\#{1}\"" formats "\"\\c\u202D\#{1}\"" + formats "%i(\u2066)" formats "%i(\u2066)" + formats "<<-'EOS'\n\u2067\nEOS" formats "<<-'EOS'\n\u2067\nEOS" + formats "{\"\u202B\": 1}" formats "{\"\u202B\": 1}" + formats "%r(\u202E)" formats "%r(\u202E)" + formats "\"\u2069\#{1}\"" formats "\"\u2069\#{1}\"" + formats "%r(\u2069\#{1})" formats "%r(\u2069\#{1})" + formats "%q(\u2068)" formats "%q(\u2068)" + formats "foo(\"\u202C\": 1)" formats "foo(\"\u202C\": 1)" + formats "%r(\u2067\#{1})" formats "%r(\u2067\#{1})" + formats "%r(\u202C)" formats "%r(\u202C)" + formats "{\"\u2069\": 1}" formats "{\"\u2069\": 1}" + formats "\"\u2069\"" formats "\"\u2069\"" + formats "%q(\u202E)" formats "%q(\u202E)" + formats "%r(\u202C\#{1})" formats "%r(\u202C\#{1})" + formats "/\u202B\#{1}/" formats "/\u202B\#{1}/" + formats "NamedTuple(\"\u2069\": Int32)" formats "NamedTuple(\"\u2069\": Int32)" + formats "/\u2068/" formats "/\u2068/" + formats "%i(\u202D)" formats "%i(\u202D)" + formats "%i(\u202C)" formats "%i(\u202C)" + formats "%r(\u2068\#{1})" formats "%r(\u2068\#{1})" + formats "foo(\"\u202B\": 1)" formats "foo(\"\u202B\": 1)" + formats "\"\\c\u2068\#{1}\"" formats "\"\\c\u2068\#{1}\"" + formats "<<-EOS\n\u2068\#{1}\nEOS" formats "<<-EOS\n\u2068\#{1}\nEOS" + formats "%q(\u202C)" formats "%q(\u202C)" + formats "<<-EOS\n\u202A\#{1}\nEOS" formats "<<-EOS\n\u202A\#{1}\nEOS" + formats "%(\u202E)" formats "%(\u202E)" + formats "<<-EOS\n\u202D\#{1}\nEOS" formats "<<-EOS\n\u202D\#{1}\nEOS" + formats "{\"\u202E\": 1}" formats "{\"\u202E\": 1}" + formats "\"\u202A\#{1}\"" formats "\"\u202A\#{1}\"" + formats "%(\u2069)" formats "%(\u2069)" + formats "%w(\u202B)" formats "%w(\u202B)" + formats "<<-'EOS'\n\u202E\nEOS" formats "<<-'EOS'\n\u202E\nEOS" + formats "<<-'EOS'\n\u202D\nEOS" formats "<<-'EOS'\n\u202D\nEOS" + formats "<<-EOS\n\u202E\#{1}\nEOS" formats "<<-EOS\n\u202E\#{1}\nEOS" + formats "%r(\u2066)" formats "%r(\u2066)" + formats "%Q(\u2066)" formats "%Q(\u2066)" + formats "\"\u202B\"" formats "\"\u202B\"" + formats "<<-EOS\n\u202E\nEOS" formats "<<-EOS\n\u202E\nEOS" + formats "%Q(\u202A\#{1})" formats "%Q(\u202A\#{1})" + formats "def foo(\"\u202B\" x)\nend" formats "def foo(\"\u202B\" x)\nend" + formats "\"\\c\u2067\#{1}\"" formats "\"\\c\u2067\#{1}\"" + formats "\"\u2068\"" formats "\"\u2068\"" + formats "\"\u2067\"" formats "\"\u2067\"" + formats "%Q(\u202E\#{1})" formats "%Q(\u202E\#{1})" + formats "/\u2069/" formats "/\u2069/" + formats "%Q(\u2067\#{1})" formats "%Q(\u2067\#{1})" + formats "%Q(\u2069\#{1})" formats "%Q(\u2069\#{1})" + formats "\"\u202B\#{1}\"" formats "\"\u202B\#{1}\"" + formats "%w(\u2066)" formats "%w(\u2066)" + formats "\"\u2066\#{1}\"" formats "\"\u2066\#{1}\"" + formats "%Q(\u202D\#{1})" formats "%Q(\u202D\#{1})" + formats "\"\\c\u202A\#{1}\"" formats "\"\\c\u202A\#{1}\"" + formats "\"\u202C\#{1}\"" formats "\"\u202C\#{1}\"" + formats "/\u2066\#{1}/" formats "/\u2066\#{1}/" + formats "\"\\c\u2069\#{1}\"" formats "\"\\c\u2069\#{1}\"" + formats "NamedTuple(\"\u2067\": Int32)" formats "NamedTuple(\"\u2067\": Int32)" + formats "<<-EOS\n\u202A\nEOS" formats "<<-EOS\n\u202A\nEOS" + formats "/\u202C\#{1}/" formats "/\u202C\#{1}/" + formats "NamedTuple(\"\u202D\": Int32)" formats "NamedTuple(\"\u202D\": Int32)" + formats "%r(\u2066\#{1})" formats "%r(\u2066\#{1})" + formats "/\u2069\#{1}/" formats "/\u2069\#{1}/" + formats "{\"\u2066\": 1}" formats "{\"\u2066\": 1}" + formats "%i(\u2067)" formats "%i(\u2067)" + formats "%(\u2066)" formats "%(\u2066)" + formats "%w(\u2068)" formats "%w(\u2068)" + formats "\"\\c\u202B\#{1}\"" formats "\"\\c\u202B\#{1}\"" + formats "\"\\c\u202E\"" formats "\"\\c\u202E\"" + formats "\"\u2068\#{1}\"" formats "\"\u2068\#{1}\"" + formats "\"\u202A\"" formats "\"\u202A\"" + formats "<<-'EOS'\n\u2068\nEOS" formats "<<-'EOS'\n\u2068\nEOS" + formats "%r(\u202A)" formats "%r(\u202A)" + formats "\"\\c\u202B\"" formats "\"\\c\u202B\"" + formats "\"\u202E\"" formats "\"\u202E\"" + formats "%q(\u202B)" formats "%q(\u202B)" + formats "/\u2067/" formats "/\u2067/" + formats "%(\u2068)" formats "%(\u2068)" + formats "<<-'EOS'\n\u2069\nEOS" formats "<<-'EOS'\n\u2069\nEOS" + formats "%r(\u202A\#{1})" formats "%r(\u202A\#{1})" + formats "<<-EOS\n\u2068\nEOS" formats "<<-EOS\n\u2068\nEOS" + formats "%r(\u202E\#{1})" formats "%r(\u202E\#{1})" + formats "%Q(\u202B\#{1})" formats "%Q(\u202B\#{1})" + formats "\"\\c\u202D\"" formats "\"\\c\u202D\"" + formats "%Q(\u202E)" formats "%Q(\u202E)" + formats "%i(\u202B)" formats "%i(\u202B)" + formats "\"\\c\u2066\"" formats "\"\\c\u2066\"" + formats "<<-EOS\n\u2067\#{1}\nEOS" formats "<<-EOS\n\u2067\#{1}\nEOS" + formats "\"\\c\u2066\#{1}\"" formats "\"\\c\u2066\#{1}\"" + formats "foo(\"\u202E\": 1)" formats "foo(\"\u202E\": 1)" + formats "\"\\c\u202C\#{1}\"" formats "\"\\c\u202C\#{1}\"" + formats "<<-EOS\n\u202B\nEOS" formats "<<-EOS\n\u202B\nEOS" + formats "<<-EOS\n\u202B\#{1}\nEOS" formats "<<-EOS\n\u202B\#{1}\nEOS" + formats "%Q(\u2066\#{1})" formats "%Q(\u2066\#{1})" + formats "%w(\u2067)" formats "%w(\u2067)" + formats "%Q(\u2068\#{1})" formats "%Q(\u2068\#{1})" + formats "/\u2067\#{1}/" formats "/\u2067\#{1}/" + formats "\"\u2066\"" formats "\"\u2066\"" + formats "%Q(\u202A)" formats "%Q(\u202A)" + formats "/\u202A\#{1}/" formats "/\u202A\#{1}/" + formats "%r(\u2068)" formats "%r(\u2068)" + formats "%w(\u2069)" formats "%w(\u2069)" + formats "%Q(\u202D)" formats "%Q(\u202D)" + formats "%i(\u2069)" formats "%i(\u2069)" + formats "%q(\u202A)" formats "%q(\u202A)" + formats "\"\u2067\#{1}\"" formats "\"\u2067\#{1}\"" + formats "def foo(\"\u202E\" x)\nend" formats "def foo(\"\u202E\" x)\nend" + formats "\"\\c\u2067\"" formats "\"\\c\u2067\"" + formats "foo(\"\u2066\": 1)" formats "foo(\"\u2066\": 1)" + formats "/\u2066/" formats "/\u2066/" + formats "yield( *1 , *2 )" formats "yield( *1 , *2 )" + formats "foo(//, //)" formats "foo(//, //)" + formats "&- 1" formats "&- 1" + formats "if a\n b &c\nend" formats "if a\n b &c\nend" + formats "foo = 1\n->foo.foo?" formats "foo = 1\n->foo.foo?" + formats "foo(->do\n 1 + 2\nend)" formats "foo(->do\n 1 + 2\nend)" + formats "# ```text\n# 1 + 2\n# ```\n#\n# ```\n# 3 + 4\n# ```" formats "# ```text\n# 1 + 2\n# ```\n#\n# ```\n# 3 + 4\n# ```" + formats "def a\n b(\n a: 1, # x\n # y\n b: 2\n )\nend" formats "def a\n b(\n a: 1, # x\n # y\n b: 2\n )\nend" + formats "x : (A -> B)?" formats "x : (A -> B)?" + formats "with foo yield bar" formats "with foo yield bar" + formats "1 &+ 2" formats "1 &+ 2" + formats "sizeof( Int32 )" formats "sizeof( Int32 )" + formats "foo.bar(&.%(baz))" formats "foo.bar(&.%(baz))" + formats "lib Foo\nfun foo( ... ) : Int32\nend" formats "lib Foo\nfun foo( ... ) : Int32\nend" + formats "foo : A(B)\nbar : C" formats "foo : A(B)\nbar : C" + formats "foo &.bar.responds_to?(:baz)" formats "foo &.bar.responds_to?(:baz)" + formats "module Moo \n\n 1 \n\nend" formats "module Moo \n\n 1 \n\nend" + formats "NamedTuple(\n a: Int32,)" formats "NamedTuple(\n a: Int32,)" + formats "{ 1 => 2 }" formats "{ 1 => 2 }" + formats "x : {A, B, }" formats "x : {A, B, }" + formats "foo[&.bar]?" formats "foo[&.bar]?" + formats "struct Foo \n\n 1 \n\nend" formats "struct Foo \n\n 1 \n\nend" + formats "def foo # bar\n # baz\nend" formats "def foo # bar\n # baz\nend" + formats "if 1\n ((1) + 2)\nend" formats "if 1\n ((1) + 2)\nend" + formats "->do\nend" formats "->do\nend" + formats "foo[x: 1, &.bar] = 1" formats "foo[x: 1, &.bar] = 1" + formats "asm(\"nop\" : \"a\"(0), \"b\"(1)\n: \"c\"(2), \"d\"(3) )" formats "asm(\"nop\" : \"a\"(0), \"b\"(1)\n: \"c\"(2), \"d\"(3) )" + formats "-> : Int32* {}" formats "-> : Int32* {}" + gives proper line number in syntax error inside macro gives proper line number in syntax error inside macro + formats "%<hello>" formats "%<hello>" + formats "def foo ( x : Int32 ) \n end" formats "def foo ( x : Int32 ) \n end" + formats "case 1 \n when 2 ; 3 \n end" formats "case 1 \n when 2 ; 3 \n end" + formats "#!shebang\n1 + 2" formats "#!shebang\n1 + 2" + formats "def foo=(x)\nend" formats "def foo=(x)\nend" + formats "unless a\nelse\n2\nend" formats "unless a\nelse\n2\nend" + formats "return {1, 2}, 3" formats "return {1, 2}, 3" + formats "x[ y ] += 1" formats "x[ y ] += 1" + formats "foo({\n 1 => 2,\n 3 => 4,\n 5 => 6,\n})" formats "foo({\n 1 => 2,\n 3 => 4,\n 5 => 6,\n})" + formats "macro foo\n {{ 1 + 2 }}\\\n 1\n end" formats "macro foo\n {{ 1 + 2 }}\\\n 1\n end" + formats "->(){}" formats "->(){}" + formats ":foo" formats ":foo" + formats "-> : {Int32} { String }" formats "-> : {Int32} { String }" + formats "break 1 , *2" formats "break 1 , *2" + formats " <<-HTML\n foo\nHTML" formats " <<-HTML\n foo\nHTML" + formats "lib Foo\nstruct Foo\nx : Int32\nend\nend" formats "lib Foo\nstruct Foo\nx : Int32\nend\nend" + formats "def bar\n foo(<<-X,\n a\n X\n 1)\nend" formats "def bar\n foo(<<-X,\n a\n X\n 1)\nend" + formats "foo(&.bar)" formats "foo(&.bar)" + formats "macro foo\n 1 \n {{ \n 42 \n }} \n 2 \nend" formats "macro foo\n 1 \n {{ \n 42 \n }} \n 2 \nend" + formats "lib Foo\nalias Foo = Bar -> \n$a : Int32\nend" formats "lib Foo\nalias Foo = Bar -> \n$a : Int32\nend" + formats "def foo ( x ) : Int32 \n end" formats "def foo ( x ) : Int32 \n end" + formats "class Foo\n enum Bar\n A; B; C;\n D; E; F\nend\nend\n" formats "class Foo\n enum Bar\n A; B; C;\n D; E; F\nend\nend\n" + formats "a &.!" formats "a &.!" + formats "a = %w(\n one two\n three four\n)" formats "a = %w(\n one two\n three four\n)" + formats "responds_to? :foo" formats "responds_to? :foo" + formats "1.!=() { 3 }" formats "1.!=() { 3 }" + formats "case 1 # foo\nwhen 2\nend" formats "case 1 # foo\nwhen 2\nend" + formats "if a\n2\nend" formats "if a\n2\nend" + formats "select\nwhen foo\n # foo\n # bar\nelse\n # foo\n # bar\nend" formats "select\nwhen foo\n # foo\n # bar\nelse\n # foo\n # bar\nend" + formats "if 1\nbegin\n2\nensure\n3\nend\nend" formats "if 1\nbegin\n2\nensure\n3\nend\nend" + formats "[\n # foo\n 1,\n\n # bar\n 2,\n]" formats "[\n # foo\n 1,\n\n # bar\n 2,\n]" + formats "{%\n if 1\n 2\n end\n%}" formats "{%\n if 1\n 2\n end\n%}" + formats "{\n \"foo\": 1,\n \"babraz\": 2,\n}" formats "{\n \"foo\": 1,\n \"babraz\": 2,\n}" + formats "if 1 # foo\n2\nend" formats "if 1 # foo\n2\nend" + formats "foo &.==(2)" formats "foo &.==(2)" + formats "def foo(x)\n case //\n when //\n 3\n end\nend" formats "def foo(x)\n case //\n when //\n 3\n end\nend" + formats "begin\n a\nend.b { }\nc" formats "begin\n a\nend.b { }\nc" + formats "x = uninitialized Int32" formats "x = uninitialized Int32" + formats "foo ()" formats "foo ()" + formats "[/ /, / /]" formats "[/ /, / /]" + formats "def foo( & )\nend" formats "def foo( & )\nend" + formats "::Tuple(T)" formats "::Tuple(T)" + formats "1\n.as(Int32)" formats "1\n.as(Int32)" + formats "if # some comment\n 2 # another\n 3 # final \n end # end " formats "if # some comment\n 2 # another\n 3 # final \n end # end " + formats "if 0\n1 &&\n2 &&\n3\nend" formats "if 0\n1 &&\n2 &&\n3\nend" + formats "macro foo\n {% for value, i in values %}\\\n {% if true %}\\\n {% end %}\\\n {{ 1 }}/\n {% end %}\\\nend\n\n{\n 1 => 2,\n 1234 => 5,\n}\n" formats "macro foo\n {% for value, i in values %}\\\n {% if true %}\\\n {% end %}\\\n {{ 1 }}/\n {% end %}\\\nend\n\n{\n 1 => 2,\n 1234 => 5,\n}\n" + formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\#{foo}\\v\\f\\e\"" formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\#{foo}\\v\\f\\e\"" + formats "1 if 2" formats "1 if 2" + formats "foo(\n1,\n\n 2 \n)" formats "foo(\n1,\n\n 2 \n)" + formats "return { 1 , 2 }" formats "return { 1 , 2 }" + formats "1 &&\n2" formats "1 &&\n2" + formats "foo[1, &.bar] = 1" formats "foo[1, &.bar] = 1" + formats "def foo(\n foo,\n\n @[MyAnn]\n &block\n); end" formats "def foo(\n foo,\n\n @[MyAnn]\n &block\n); end" + formats "def foo(\n a,\n &block\n)\nend" formats "def foo(\n a,\n &block\n)\nend" + formats "{\n <<-KEY => 1,\n key\n KEY\n}" formats "{\n <<-KEY => 1,\n key\n KEY\n}" + formats "yield 1 , \n2" formats "yield 1 , \n2" + formats "break( 1 , 2 )" formats "break( 1 , 2 )" + formats "1.<=() { 3 }" formats "1.<=() { 3 }" + formats "a = foo &.bar do\n 1 + 2\nend" formats "a = foo &.bar do\n 1 + 2\nend" + formats "foo &.[]=( 1, 2 )" formats "foo &.[]=( 1, 2 )" + formats "next {1, 2}, {3, 4}" formats "next {1, 2}, {3, 4}" + formats "yield *1 ,2" formats "yield *1 ,2" + formats "asm(\"nop\" :::: \"volatile\" , \"alignstack\" , \"intel\" )" formats "asm(\"nop\" :::: \"volatile\" , \"alignstack\" , \"intel\" )" + formats "foo(self // 1)" formats "foo(self // 1)" + formats "foo : self? | A" formats "foo : self? | A" + formats "class Foo\n# nothing\nend" formats "class Foo\n# nothing\nend" + formats ":<<" formats ":<<" + formats "->: Int32 do\nx\nend" formats "->: Int32 do\nx\nend" + formats "foo[x: 1, &.bar]" formats "foo[x: 1, &.bar]" + formats "def foo(x, **z, &block)\nend" formats "def foo(x, **z, &block)\nend" + formats "- 1" formats "- 1" + formats "あ.い, う.え.お = 1, 2" formats "あ.い, う.え.お = 1, 2" + formats "# Hello\n#\n# ```\n# puts 1+2 # bye\n# 1+2 # hello\n#\n# 1+2\n# ```\n\n# ```\n# puts 1+2\n\n# ```\n# puts 1+2\n\n# Hola\n#\n# 1+2\n# foo do\n# 3+4\n# end\n\n# Hey\n#\n# 1+2\n# foo do\n# 3+4\n# end\n#\n# ```\n# 1+2\n# ```\n#\n# 1+2\n#\n# Bye\n" formats "# Hello\n#\n# ```\n# puts 1+2 # bye\n# 1+2 # hello\n#\n# 1+2\n# ```\n\n# ```\n# puts 1+2\n\n# ```\n# puts 1+2\n\n# Hola\n#\n# 1+2\n# foo do\n# 3+4\n# end\n\n# Hey\n#\n# 1+2\n# foo do\n# 3+4\n# end\n#\n# ```\n# 1+2\n# ```\n#\n# 1+2\n#\n# Bye\n" + formats "->foo?" formats "->foo?" + formats "asm(\"a\" : : :: \"volatile\")" formats "asm(\"a\" : : :: \"volatile\")" + formats "a = if 1\n2\nelse\n3\nend" formats "a = if 1\n2\nelse\n3\nend" + formats "foo(\n# x\n1,\n\n# y\nz: 2\n)" formats "foo(\n# x\n1,\n\n# y\nz: 2\n)" + formats "<<-HTML\n hello \n world \n HTML" formats "<<-HTML\n hello \n world \n HTML" + formats "class Foo \n\n 1 \n\nend" formats "class Foo \n\n 1 \n\nend" + formats "foo : (A) | D" formats "foo : (A) | D" + formats "return { {1, 2}, {3, 4} }, 5" formats "return { {1, 2}, {3, 4} }, 5" + formats "\"\#{\"\#{foo}\"}\"" formats "\"\#{\"\#{foo}\"}\"" + formats "pointerof( @a )" formats "pointerof( @a )" + formats "{% if true %}\n # x\n{% end %}" formats "{% if true %}\n # x\n{% end %}" + formats "yield(1 , \n2)" formats "yield(1 , \n2)" + formats "def foo( @[MyAnn] v ); end" formats "def foo( @[MyAnn] v ); end" + formats "1 || 2" formats "1 || 2" + formats "def foo\na = bar do\n1\nend\nend" formats "def foo\na = bar do\n1\nend\nend" + formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1), \"c\"(2) )" formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1), \"c\"(2) )" + formats "{1 => 2,\n 3 => 4, # lala\n}\n" formats "{1 => 2,\n 3 => 4, # lala\n}\n" + formats "Hash{\n foo => <<-EOF\n foo\n EOF\n}" formats "Hash{\n foo => <<-EOF\n foo\n EOF\n}" + formats "foo = 1\n->foo.[]=(Int32)" formats "foo = 1\n->foo.[]=(Int32)" + formats "if 1\n[ 1 , 2 , 3 ]\nend" formats "if 1\n[ 1 , 2 , 3 ]\nend" + formats "foo[&.bar]" formats "foo[&.bar]" + formats " {{\n1 + 2 }}" formats " {{\n1 + 2 }}" + formats "Foo( * T, { * A ,*\n B } )" formats "Foo( * T, { * A ,*\n B } )" + formats "yield *1" formats "yield *1" + formats "<<-HTML\n \#{\"foo\"}\n \#{\"bar\"}\n HTML" formats "<<-HTML\n \#{\"foo\"}\n \#{\"bar\"}\n HTML" + formats "foo(1, ) { }" formats "foo(1, ) { }" + formats "1.!=(2) { 3 }" formats "1.!=(2) { 3 }" + formats "instance_sizeof( Int32 )" formats "instance_sizeof( Int32 )" + formats "foo . bar" formats "foo . bar" + formats "@x : A(B | C)?" formats "@x : A(B | C)?" + formats "class Actor\n macro inherited\nend\nend\n" formats "class Actor\n macro inherited\nend\nend\n" + formats "foo ( )" formats "foo ( )" + formats "asm(\"a\" :: \"d\"(e)\n)" formats "asm(\"a\" :: \"d\"(e)\n)" + formats "def foo : A | B(C)\n nil\nend" formats "def foo : A | B(C)\n nil\nend" + formats "bar = foo({\n 1 => 2,\n 3 => 4,\n 5 => 6,\n })" formats "bar = foo({\n 1 => 2,\n 3 => 4,\n 5 => 6,\n })" + formats "break 1" formats "break 1" + formats "::foo(1, 2)" formats "::foo(1, 2)" + formats "foo &.bar do\n 1 + 2\nend" formats "foo &.bar do\n 1 + 2\nend" + formats "if a\n2\nelse\n3\nend" formats "if a\n2\nelse\n3\nend" + formats "->{\n # first comment\n puts \"hi\"\n # second comment\n}" formats "->{\n # first comment\n puts \"hi\"\n # second comment\n}" + formats "foo : (A -> B)\nbar : C" formats "foo : (A -> B)\nbar : C" + formats "def foo(\nx, #foo\nz #bar\n)\nend" formats "def foo(\nx, #foo\nz #bar\n)\nend" + formats "foo 1,\na: 1,\nb: 2,\nc: 3" formats "foo 1,\na: 1,\nb: 2,\nc: 3" + formats "::Pointer(T)" formats "::Pointer(T)" + formats "select\n# when foo\nwhen bar\n break\nend" formats "select\n# when foo\nwhen bar\n break\nend" + formats "bar = foo(->do\n 1 + 2\nend)" formats "bar = foo(->do\n 1 + 2\nend)" + formats "foo(\n <<-HERE,\n hello\n HERE\n # foo\n foo: 1,\n)" formats "foo(\n <<-HERE,\n hello\n HERE\n # foo\n foo: 1,\n)" + formats "foo(1, / /)" formats "foo(1, / /)" + formats "case 1\nelse\n 2\nend" formats "case 1\nelse\n 2\nend" + formats "{ {1 => 2} }" formats "{ {1 => 2} }" + formats "# ```text\n# 1 + 2\n# ```" formats "# ```text\n# 1 + 2\n# ```" + formats "def foo ( x ,\n y ) \n end" formats "def foo ( x ,\n y ) \n end" + formats "begin\n # Comment\n\n\nend" formats "begin\n # Comment\n\n\nend" + formats "1 ?\n 2 : \n 3" formats "1 ?\n 2 : \n 3" + formats "if a\n # hello\n 2\nend" formats "if a\n # hello\n 2\nend" + formats "case 0\nwhen 0 then 1; 2\n# Comments\nend" formats "case 0\nwhen 0 then 1; 2\n# Comments\nend" + formats "true" formats "true" + formats "x = <<-EOF\n 1\nEOF" formats "x = <<-EOF\n 1\nEOF" + formats "1234 # foo\n1 # bar" formats "1234 # foo\n1 # bar" + formats "while 1\n2 # foo\nend" formats "while 1\n2 # foo\nend" + formats "foo.as? ( Int32* )" formats "foo.as? ( Int32* )" + formats "break" formats "break" + formats "begin\n ()\nend" formats "begin\n ()\nend" + formats "@[Foo(\n foo: 1\n)]\ndef foo\nend" formats "@[Foo(\n foo: 1\n)]\ndef foo\nend" + formats "1 \\\nensure 2" formats "1 \\\nensure 2" + formats "a = case 1\n when 1, # 1\n 2, # 2\n 3 # 3\n 1\n end" formats "a = case 1\n when 1, # 1\n 2, # 2\n 3 # 3\n 1\n end" + formats "def foo(x)\n {% if true %}\n # comment\n Foo = 1\n B = 2\n {% end %}\nend" formats "def foo(x)\n {% if true %}\n # comment\n Foo = 1\n B = 2\n {% end %}\nend" + formats "foo(\n [\n 1,\n 2,\n ],\n [\n 3,\n 4,\n ]\n)" formats "foo(\n [\n 1,\n 2,\n ],\n [\n 3,\n 4,\n ]\n)" + formats "macro foo=(x)\nend" formats "macro foo=(x)\nend" + formats "a = / /" formats "a = / /" + formats "macro foo\n if 1\n 1 + 2\n end\nend" formats "macro foo\n if 1\n 1 + 2\n end\nend" + formats "1\n# hello\n\n\n" formats "1\n# hello\n\n\n" + formats "-> :: Foo . foo!" formats "-> :: Foo . foo!" + formats "def foo ( @select) \n end" formats "def foo ( @select) \n end" + formats "#### ###" formats "#### ###" + formats "foo(a: 1 // 2)" formats "foo(a: 1 // 2)" + formats "def foo(**z, &block)\nend" formats "def foo(**z, &block)\nend" + formats "foo(\n 1,\n 2\n) do\n 1\nend" formats "foo(\n 1,\n 2\n) do\n 1\nend" + formats "next { 1 , 2 }" formats "next { 1 , 2 }" + formats "-> : Int32 | String { 1 }" formats "-> : Int32 | String { 1 }" + formats "def foo(x : ( A | B )) : ( A | B )\nend" formats "def foo(x : ( A | B )) : ( A | B )\nend" + formats "return( 1 )" formats "return( 1 )" + formats "foo[1, &.bar]?" formats "foo[1, &.bar]?" + formats "extend Foo" formats "extend Foo" + formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n : \"f\")" formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n : \"f\")" + formats "foo : Foo * * * * *" formats "foo : Foo * * * * *" + formats "{1 => 2, 3 => 4}\n{5234234 => 234098234, 7 => 8}" formats "{1 => 2, 3 => 4}\n{5234234 => 234098234, 7 => 8}" + formats "a.b &.[c]?\n1" formats "a.b &.[c]?\n1" + formats "fun foo(x : Int32) : Int32\n 1\nend" formats "fun foo(x : Int32) : Int32\n 1\nend" + formats "foo.bar do\n baz\n .b\nend" formats "foo.bar do\n baz\n .b\nend" + formats "case\n# hello\nwhen 1\n 2\nend" formats "case\n# hello\nwhen 1\n 2\nend" + formats "x.try &.[]= 123, 456" formats "x.try &.[]= 123, 456" + formats "foo( 1 , 2 )" formats "foo( 1 , 2 )" + formats "return 1, {2, 3}" formats "return 1, {2, 3}" + formats "->( x , y ) { x }" formats "->( x , y ) { x }" + formats "foo &.[]?(1, 2)" formats "foo &.[]?(1, 2)" + formats "def foo(@[AnnOne] @[AnnTwo] &block : Int32 -> ); end" formats "def foo(@[AnnOne] @[AnnTwo] &block : Int32 -> ); end" + formats "lib Foo\nfun foo(x : Int32, ... ) : Int32\nend" formats "lib Foo\nfun foo(x : Int32, ... ) : Int32\nend" + formats "->( ){ x }" formats "->( ){ x }" + formats "if 1 &&\n2 &&\n3\n4\nend" formats "if 1 &&\n2 &&\n3\n4\nend" + formats "case / /\nwhen /x/, / /\n / /\nend" formats "case / /\nwhen /x/, / /\n / /\nend" + formats "def foo ( bar @select) \n end" formats "def foo ( bar @select) \n end" + formats "x = {% if flag?(:foo) %}\n foo + bar\n {% else %}\n baz + qux\n {% end %}" formats "x = {% if flag?(:foo) %}\n foo + bar\n {% else %}\n baz + qux\n {% end %}" + formats "lib Foo\n fun foo =\n \"bar\"(Int32) : Int32\nend" formats "lib Foo\n fun foo =\n \"bar\"(Int32) : Int32\nend" + formats "foo(\"bar\": 1, \"baz qux\": 2)" formats "foo(\"bar\": 1, \"baz qux\": 2)" + formats "bar = foo([\n 1,\n 2,\n 3,\n])" formats "bar = foo([\n 1,\n 2,\n 3,\n])" + formats "foo = 1\n->foo.bar=(Int32)" formats "foo = 1\n->foo.bar=(Int32)" + formats "foo do | x , y | \n x \n end" formats "foo do | x , y | \n x \n end" + formats "{1, 2, 3}" formats "{1, 2, 3}" + formats "if 1\n[\n a() # b\n]\nend" formats "if 1\n[\n a() # b\n]\nend" + formats "self.as(Int32)" formats "self.as(Int32)" + formats "if 1\ncase 1\nwhen 2\n3\nend\nend" formats "if 1\ncase 1\nwhen 2\n3\nend\nend" + formats "next 1, {2, 3}" formats "next 1, {2, 3}" + formats "lib Foo\nstruct Foo\nx : Int32\ny : Float64\nend\nend" formats "lib Foo\nstruct Foo\nx : Int32\ny : Float64\nend\nend" + formats "foo(1,\n &.bar)" formats "foo(1,\n &.bar)" + formats "macro foo(\n a,\n *b,\n)\nend" formats "macro foo(\n a,\n *b,\n)\nend" + formats "1.<= { 3 }" formats "1.<= { 3 }" + formats "if a\n2; 3\nelse\n3\nend" formats "if a\n2; 3\nelse\n3\nend" + formats "! 1" formats "! 1" + formats "foo(\n 1,\n) {\n 2\n}" formats "foo(\n 1,\n) {\n 2\n}" + formats "def foo(@[MyAnn] & : String -> Nil); end" formats "def foo(@[MyAnn] & : String -> Nil); end" + formats "begin\n select\n when foo\n # foo\n # bar\n else\n # foo\n # bar\n end\nend" formats "begin\n select\n when foo\n # foo\n # bar\n else\n # foo\n # bar\n end\nend" + formats "1 .. 2" formats "1 .. 2" + formats "->foo" formats "->foo" + formats "foo(/ /)" formats "foo(/ /)" + formats "1.[]=() { 3 }" formats "1.[]=() { 3 }" + formats "foo(A |\nB |\nC)" formats "foo(A |\nB |\nC)" + formats "10 // a" formats "10 // a" + formats "a = foo(baz1 do\nend)" formats "a = foo(baz1 do\nend)" + formats "$~.bar" formats "$~.bar" + formats "{%\n if true\n 1\n else\n 2\n end\n%}" formats "{%\n if true\n 1\n else\n 2\n end\n%}" + formats "x : (A -> )" formats "x : (A -> )" + formats "foo.bar = \n1" formats "foo.bar = \n1" + formats "1 > 2" formats "1 > 2" + formats "\"\#{\"foo\"}\"" formats "\"\#{\"foo\"}\"" + formats "require \"foo\"\n\n@x : Int32\n\nclass Bar\nend" formats "require \"foo\"\n\n@x : Int32\n\nclass Bar\nend" + formats "1 ;\n 2" formats "1 ;\n 2" + formats "def foo()\n1\nend" formats "def foo()\n1\nend" + formats " {%\na = 1\n %}" formats " {%\na = 1\n %}" + formats "foo[] =1" formats "foo[] =1" + formats "def foo(a : T, b : U) forall T, U #\n #\nend" formats "def foo(a : T, b : U) forall T, U #\n #\nend" + formats "def foo(x)\n case self // x\n when 2\n 3\n end\nend" formats "def foo(x)\n case self // x\n when 2\n 3\n end\nend" + formats "class Foo\ndef foo\n1\nensure\n2\nend\nend" formats "class Foo\ndef foo\n1\nensure\n2\nend\nend" + formats "begin\n 0[1] rescue 2 end" formats "begin\n 0[1] rescue 2 end" + formats "%w(one two three)" formats "%w(one two three)" + formats "->( x )\n:\nInt32 { }" formats "->( x )\n:\nInt32 { }" + formats "foo { | ( a, *b , c ) | a }" formats "foo { | ( a, *b , c ) | a }" + formats "struct Foo\n # bar\n # baz\n1\nend" formats "struct Foo\n # bar\n # baz\n1\nend" + formats "long_variable_name = [{\n :foo => 1,\n}, {\n :bar => 2,\n}]" formats "long_variable_name = [{\n :foo => 1,\n}, {\n :bar => 2,\n}]" + formats "abstract def foo\nabstract def bar" formats "abstract def foo\nabstract def bar" + formats "foo 1, a: 1,\nb: 2,\nc: 3,\n&block" formats "foo 1, a: 1,\nb: 2,\nc: 3,\n&block" + formats "inner &.color=(@color)\n1" formats "inner &.color=(@color)\n1" + formats "1.as Int32" formats "1.as Int32" + formats "foo &.responds_to?(:foo).bar" formats "foo &.responds_to?(:foo).bar" + formats "require \"foo\"" formats "require \"foo\"" + formats "foo.bar. as? Int32" formats "foo.bar. as? Int32" + formats "1 == / /" formats "1 == / /" + formats "nil?" formats "nil?" + formats "foo{|x| x}" formats "foo{|x| x}" + formats "%(\n1\n)\n\n{\n 1 => 2,\n 234 => 5,\n}" formats "%(\n1\n)\n\n{\n 1 => 2,\n 234 => 5,\n}" + formats "$0" formats "$0" + formats "# Hello\n#\n# ```cr\n# 1\n# ```\n# Bye" formats "# Hello\n#\n# ```cr\n# 1\n# ```\n# Bye" + formats "{%\n unless true\n 1\n end\n%}" formats "{%\n unless true\n 1\n end\n%}" + formats "x.try &.[] 123" formats "x.try &.[] 123" + formats "<<-FOO\n1\nFOO\n\n{\n 1 => 2,\n 10 => 3,\n}" formats "<<-FOO\n1\nFOO\n\n{\n 1 => 2,\n 10 => 3,\n}" + formats "$?.bar" formats "$?.bar" + formats "->(x : Int32) { }" formats "->(x : Int32) { }" + formats "foo &.responds_to?(:foo)" formats "foo &.responds_to?(:foo)" + formats "if a\nelse\n2\nend" formats "if a\nelse\n2\nend" + formats "foo(\"b\#{1}\" \\\n\"baz\")" formats "foo(\"b\#{1}\" \\\n\"baz\")" + formats "`foo`" formats "`foo`" + formats "<<-HTML\n \#{1}x\n y\n HTML" formats "<<-HTML\n \#{1}x\n y\n HTML" + formats ":&**" formats ":&**" + formats " <<-HTML\n \#{1} \#{2}\n HTML" formats " <<-HTML\n \#{1} \#{2}\n HTML" + formats "def foo\nend\n\n\n\ndef bar\nend" formats "def foo\nend\n\n\n\ndef bar\nend" + formats "@[Foo]" formats "@[Foo]" + formats "def foo(\n **a\n # comment\n)\n 1\nend" formats "def foo(\n **a\n # comment\n)\n 1\nend" + formats "foo do\n {{ foo <<-X\n bar\n X\n }}\nend" formats "foo do\n {{ foo <<-X\n bar\n X\n }}\nend" + formats "asm(\n\"nop\"\n)" formats "asm(\n\"nop\"\n)" + formats "asm(\"a\" : :: : \"volatile\")" formats "asm(\"a\" : :: : \"volatile\")" + formats "foo{}" formats "foo{}" + formats "@foo : Int32 # comment\n\ndef foo\nend" formats "@foo : Int32 # comment\n\ndef foo\nend" + formats "foo[a, b: 2]" formats "foo[a, b: 2]" + formats "@[::Foo::Bar]" formats "@[::Foo::Bar]" + formats "Foo( Bar( ) )" formats "Foo( Bar( ) )" + formats "[\n {\n 1 => 2,\n }, {\n 3 => 4,\n }, {\n 5 => 6,\n },\n]" formats "[\n {\n 1 => 2,\n }, {\n 3 => 4,\n }, {\n 5 => 6,\n },\n]" + formats "def foo\n 1\nend\n\n# Comment\n\ndef bar\n 2\nend" formats "def foo\n 1\nend\n\n# Comment\n\ndef bar\n 2\nend" + formats "foo { | a, ( _ , c ) | a + c }" formats "foo { | a, ( _ , c ) | a + c }" + formats "yield (1).foo" formats "yield (1).foo" + formats "foo[ 1 , 2 ]" formats "foo[ 1 , 2 ]" + formats "foo.[1]" formats "foo.[1]" + formats "while / /\nend" formats "while / /\nend" + formats "->@foo.foo=" formats "->@foo.foo=" + formats "foo x: 1" formats "foo x: 1" + formats "lib Foo\n fun bar = Bar\nend" formats "lib Foo\n fun bar = Bar\nend" + formats "def foo(x : (A | B)) \n end" formats "def foo(x : (A | B)) \n end" + formats "def foo\n@x : Int32\nend" formats "def foo\n@x : Int32\nend" + formats "foo : self?" formats "foo : self?" + formats "1\n\n2" formats "1\n\n2" + formats "foo({\nbar: 1,\n})" formats "foo({\nbar: 1,\n})" + formats "def foo( x , & block : ->)\nend" formats "def foo( x , & block : ->)\nend" + formats "(a).b { }\nc" formats "(a).b { }\nc" + formats "foo : Foo*****" formats "foo : Foo*****" + formats "while 1\n2\nend" formats "while 1\n2\nend" + formats "unless a\nunless b\nelse\n4\nend\nend" formats "unless a\nunless b\nelse\n4\nend\nend" + formats "case 1 \n when 2 \n 3 \n when 4 \n 5 \n end" formats "case 1 \n when 2 \n 3 \n when 4 \n 5 \n end" + formats "->Foo.foo?" formats "->Foo.foo?" + formats "{% begin %}\n \"\n foo\"\n{% end %}" formats "{% begin %}\n \"\n foo\"\n{% end %}" + formats "lib Foo\n fun foo = bar(Int32) : Int32\nend" formats "lib Foo\n fun foo = bar(Int32) : Int32\nend" + formats "yield *1 , *2" formats "yield *1 , *2" + formats "0_u64" formats "0_u64" + formats "\"1\#{\"4\#{\"\#{\"2\"}\"}3\"}3\#{__DIR__}4\#{5}6\"" formats "\"1\#{\"4\#{\"\#{\"2\"}\"}3\"}3\#{__DIR__}4\#{5}6\"" + formats "foo : StaticArray(Foo, 12)[34]" formats "foo : StaticArray(Foo, 12)[34]" + formats "lib Foo\n fun foo = bar(Int32) : Int32\nend" formats "lib Foo\n fun foo = bar(Int32) : Int32\nend" + formats "a = b = 1\na, b =\n b, a" formats "a = b = 1\na, b =\n b, a" + formats "def foo\n <<-FOO\n foo \#{1}\n FOO\nend" formats "def foo\n <<-FOO\n foo \#{1}\n FOO\nend" + formats "->{}" formats "->{}" + formats "def foo ( &@block) \n end" formats "def foo ( &@block) \n end" + formats "def foo(a, **b, # comment\n &block)\nend" formats "def foo(a, **b, # comment\n &block)\nend" + formats "1 # foo\n/ 1 /" formats "1 # foo\n/ 1 /" + formats "yield(\n1 , \n2)" formats "yield(\n1 , \n2)" + formats "def foo\n1\nensure\n2\nend" formats "def foo\n1\nensure\n2\nend" + formats "-> : Array(Int32) {}" formats "-> : Array(Int32) {}" + formats "(())" formats "(())" + formats "{ \"foo\": 1 }" formats "{ \"foo\": 1 }" + formats "foo([\n 1,\n bar do\n end,\n [\n 2,\n ],\n])" formats "foo([\n 1,\n bar do\n end,\n [\n 2,\n ],\n])" + formats "module Moo ( T )\nend" formats "module Moo ( T )\nend" + formats "# ```\n# macro foo\n# 1\n# end\n# ```\n" formats "# ```\n# macro foo\n# 1\n# end\n# ```\n" + formats "if 1\n1\n\n# foo\nend" formats "if 1\n1\n\n# foo\nend" + formats "asm(\"nop\" ::: \"eax\" )" formats "asm(\"nop\" ::: \"eax\" )" + formats "String?" formats "String?" + formats "[] of Foo" formats "[] of Foo" + formats "\"hel\nlo\"" formats "\"hel\nlo\"" + formats "1 + \\\n2\n3" formats "1 + \\\n2\n3" + formats "foo.bar # comment\n .baz" formats "foo.bar # comment\n .baz" + formats "module Foo\n1\n\n# foo\nend" formats "module Foo\n1\n\n# foo\nend" + formats "foo.as(T).bar" formats "foo.as(T).bar" + formats "alias A = (B) -> C" formats "alias A = (B) -> C" + formats "next *1 ,2" formats "next *1 ,2" + formats "foo a , **b" formats "foo a , **b" + formats "<<-HTML\n \#{\"fo\#{\"o\"}\"}\n HTML" formats "<<-HTML\n \#{\"fo\#{\"o\"}\"}\n HTML" + formats "if 1\nif 2\n3 # foo\nend\nend" formats "if 1\nif 2\n3 # foo\nend\nend" + formats "foo 1,\n2" formats "foo 1,\n2" + formats "__DIR__" formats "__DIR__" + formats "def foo : self | Nil\n nil\nend" formats "def foo : self | Nil\n nil\nend" + formats "def foo\n {{@type}}\nend" formats "def foo\n {{@type}}\nend" + formats "[1, 2,\n 3, 4]\n" formats "[1, 2,\n 3, 4]\n" + formats "@[Foo(\n 1,\n)]" formats "@[Foo(\n 1,\n)]" + formats "foo(\n 1, # hola\n2, # chau\n )" formats "foo(\n 1, # hola\n2, # chau\n )" + formats "foo(1 + \n2)" formats "foo(1 + \n2)" + formats "{\n 1 => 2, 3 => 4,\n 567 => 8910,\n}" formats "{\n 1 => 2, 3 => 4,\n 567 => 8910,\n}" + formats "macro foo\n {% if 1 %} 2 {% elsif 3 %} 4 {% else %} 5 {% end %}\nend" formats "macro foo\n {% if 1 %} 2 {% elsif 3 %} 4 {% else %} 5 {% end %}\nend" + formats "a = 1\ncase\nwhen 2\nelse\n a /= 3\nend" formats "a = 1\ncase\nwhen 2\nelse\n a /= 3\nend" + formats "x : Int32 |\nString" formats "x : Int32 |\nString" + formats "def /(x)\n 1\nend" formats "def /(x)\n 1\nend" + formats "def foo ( x , y ) \n end" formats "def foo ( x , y ) \n end" + formats "foo.[] = 1" formats "foo.[] = 1" + formats "%x(foo \#{ bar })" formats "%x(foo \#{ bar })" + formats "{% if z %}\n class Foo\n end\n{% end %}" formats "{% if z %}\n class Foo\n end\n{% end %}" + formats "def foo(\n a,\n b\n)\nend" formats "def foo(\n a,\n b\n)\nend" + formats "macro foo\n macro bar\n \\{% begin %}\n \\\\{% puts %}\n \\{% end %}\n end\nend" formats "macro foo\n macro bar\n \\{% begin %}\n \\\\{% puts %}\n \\{% end %}\n end\nend" + formats "return *1 , *2" formats "return *1 , *2" + formats "%w{one( two( three)}" formats "%w{one( two( three)}" + formats "foo &.bar.nil?" formats "foo &.bar.nil?" + formats "x : (A | B)" formats "x : (A | B)" + formats "-> :: Foo . foo" formats "-> :: Foo . foo" + formats "def foo\n 1\n # Comment\n\n\nend" formats "def foo\n 1\n # Comment\n\n\nend" + formats "begin\n1\nrescue Int32 \n3\nend" formats "begin\n1\nrescue Int32 \n3\nend" + formats "module M\n @[MyAnn(\n 1\n\n )]\nend" formats "module M\n @[MyAnn(\n 1\n\n )]\nend" + formats "1 rescue 2" formats "1 rescue 2" + formats "x : A?" formats "x : A?" + formats "foo(1, # foo\n &.bar)" formats "foo(1, # foo\n &.bar)" + formats "class Bar\nprotected def foo(x)\na=b(c)\nend\nend" formats "class Bar\nprotected def foo(x)\na=b(c)\nend\nend" + formats "begin\n1\nrescue\n3\nensure\n2\nend" formats "begin\n1\nrescue\n3\nensure\n2\nend" + formats "[\n1,\n2,\n3]" formats "[\n1,\n2,\n3]" + formats "a = 1 if 1 == 2 ||\n 3 == 4\n" formats "a = 1 if 1 == 2 ||\n 3 == 4\n" + formats "def foo(x)\n self // x\nend" formats "def foo(x)\n self // x\nend" + formats " macro foo\n end\n\n :+" formats " macro foo\n end\n\n :+" + formats "def foo( x , & block : Int32 ->)\nend" formats "def foo( x , & block : Int32 ->)\nend" + formats ":>>" formats ":>>" + formats "\"\\a\\c\\b\\d\"" formats "\"\\a\\c\\b\\d\"" + formats "while 1 &&\n2 &&\n3\n4\nend" formats "while 1 &&\n2 &&\n3\n4\nend" + formats "long_variable_name = [1, 2, 3,\n 4, 5, 6]" formats "long_variable_name = [1, 2, 3,\n 4, 5, 6]" + formats "\"foo \#{bar}\" \\\n \"baz\"" formats "\"foo \#{bar}\" \\\n \"baz\"" + formats "foo &.bar( 1 , 2 )" formats "foo &.bar( 1 , 2 )" + formats "Union(Int32, String)?" formats "Union(Int32, String)?" + formats "coco.lala\nfoo\n .bar" formats "coco.lala\nfoo\n .bar" + formats "foo.as Int32*" formats "foo.as Int32*" + formats "foo 1 , 2" formats "foo 1 , 2" + formats "1 # foo\n1234 # bar\n\n10 # bar" formats "1 # foo\n1234 # bar\n\n10 # bar" + formats "while 1;\n2; end" formats "while 1;\n2; end" + formats "foo (1), 2" formats "foo (1), 2" + formats "foo.bar(&.baz)" formats "foo.bar(&.baz)" + formats "def foo(a : T, b : U) forall T, U\n #\nend" formats "def foo(a : T, b : U) forall T, U\n #\nend" + formats "def foo(a,\n *b)\nend" formats "def foo(a,\n *b)\nend" + formats "foo[1, &.bar]" formats "foo[1, &.bar]" + formats "a = 1\n;\nb = 2" formats "a = 1\n;\nb = 2" + formats "{1 => foo <<-X\nbar\nX\n}" formats "{1 => foo <<-X\nbar\nX\n}" + formats "next( 1 , 2 )" formats "next( 1 , 2 )" + formats "SomeLib.UppercasedFunCall" formats "SomeLib.UppercasedFunCall" + formats "1 if 2\n# foo\n3" formats "1 if 2\n# foo\n3" + formats "def foo(x) # bar\n # baz\nend" formats "def foo(x) # bar\n # baz\nend" + formats ":+" formats ":+" + formats "asm(\"a\" : \"b\"(c)\n)" formats "asm(\"a\" : \"b\"(c)\n)" + formats "call(foo <<-X\nbar\nX\n)" formats "call(foo <<-X\nbar\nX\n)" + formats "return {1, 2}, {3, 4}" formats "return {1, 2}, {3, 4}" + formats "def foo(@[AnnOne] @[AnnTwo] v); end" formats "def foo(@[AnnOne] @[AnnTwo] v); end" + formats "unless a\n2\n3\nelse\n4\n5\nend" formats "unless a\n2\n3\nelse\n4\n5\nend" + formats "->( x : Int32 , y ) { x }" formats "->( x : Int32 , y ) { x }" + formats "lib Foo\nend" formats "lib Foo\nend" + formats "foo.bar=(2)\n1" formats "foo.bar=(2)\n1" + formats "foo[]" formats "foo[]" + formats "x\n# foo\n\n# bar" formats "x\n# foo\n\n# bar" + formats "foo = 1\n->foo.foo!" formats "foo = 1\n->foo.foo!" + formats "\n# hello\n\n1" formats "\n# hello\n\n1" + formats "->\n:\nInt32\n{\n}" formats "->\n:\nInt32\n{\n}" + formats "return 1" formats "return 1" + formats "begin\n 1 \\\n + 2\n 3\nend" formats "begin\n 1 \\\n + 2\n 3\nend" + formats "if 1\n return foo(\n 1,\n 2,\n )\nend" formats "if 1\n return foo(\n 1,\n 2,\n )\nend" + formats "def foo(\n @[MyAnn]\n bar\n); end" formats "def foo(\n @[MyAnn]\n bar\n); end" + formats ":-" formats ":-" + formats "a = foo(1, 2, {\n foo: 1,\n bar: 2,\n})" formats "a = foo(1, 2, {\n foo: 1,\n bar: 2,\n})" + formats "1_234" formats "1_234" + formats "lib Foo\n fun foo =\n bar(Int32) : Int32\nend" formats "lib Foo\n fun foo =\n bar(Int32) : Int32\nend" + formats "a &.b[c]?" formats "a &.b[c]?" + formats "asm(\"nop\" :: )" formats "asm(\"nop\" :: )" + formats "[\n# foo\n] of String" formats "[\n# foo\n] of String" + formats "0i64" formats "0i64" + formats "case 1\nwhen 2\n#comment\nend" formats "case 1\nwhen 2\n#comment\nend" + formats "1.===(2) { 3 }" formats "1.===(2) { 3 }" + formats "->{\nx\n}" formats "->{\nx\n}" + formats "def foo(x, **z)\nend" formats "def foo(x, **z)\nend" + formats "[ * [ * [ 1 ] ], * \n[ 2] ]" formats "[ * [ * [ 1 ] ], * \n[ 2] ]" + formats "if 1;\n2; end" formats "if 1;\n2; end" + formats "1.!= do\nend" formats "1.!= do\nend" + formats "def foo(x) : Int32 # bar\n # baz\nend" formats "def foo(x) : Int32 # bar\n # baz\nend" + formats "::NamedTuple(T)" formats "::NamedTuple(T)" + formats "\"hel\\nlo\"" formats "\"hel\\nlo\"" + formats "def foo\n\n1\n\nend" formats "def foo\n\n1\n\nend" + formats "[\n <<-EOF,\n foo\n EOF\n <<-BAR,\n bar\n BAR\n]" formats "[\n <<-EOF,\n foo\n EOF\n <<-BAR,\n bar\n BAR\n]" + does not add `&` without flag `method_signature_yield` + formats "def foo(a, **b)\n yield\nend" formats "def foo(a, **b)\n yield\nend" + formats "def foo(\nx,\n)\n yield\nend" formats "def foo(\nx,\n)\n yield\nend" + formats "def foo(x,\n)\n yield\nend" formats "def foo(x,\n)\n yield\nend" + formats "def foo(x,\ny,)\n yield\nend" formats "def foo(x,\ny,)\n yield\nend" + formats "def foo # bar\n yield\nend" formats "def foo # bar\n yield\nend" + formats "def foo\n yield\nend" formats "def foo\n yield\nend" + formats "def foo(\nx)\n yield\nend" formats "def foo(\nx)\n yield\nend" + formats "def foo(x)\n yield\nend" formats "def foo(x)\n yield\nend" + formats "def foo(\n)\n yield\nend" formats "def foo(\n)\n yield\nend" + formats "def foo(\nx, y)\n yield\nend" formats "def foo(\nx, y)\n yield\nend" + formats "def foo()\n yield\nend" formats "def foo()\n yield\nend" + formats "def foo(x ,)\n yield\nend" formats "def foo(x ,)\n yield\nend" + formats "def foo(x\n)\n yield\nend" formats "def foo(x\n)\n yield\nend" + formats "def foo(\nx,\ny)\n yield\nend" formats "def foo(\nx,\ny)\n yield\nend" + formats "def foo(x,\n y)\n yield\nend" formats "def foo(x,\n y)\n yield\nend" + formats "lib LibFoo\n {% begin %}\n fun x = y(Int32)\n {% end %}\nend" formats "lib LibFoo\n {% begin %}\n fun x = y(Int32)\n {% end %}\nend" + formats "foo &.bar.as?(T)" formats "foo &.bar.as?(T)" + formats "if 1\n {% if 2 %} {% end %}\nend" formats "if 1\n {% if 2 %} {% end %}\nend" + formats "<<-HTML\n \#{\"foo\"}\#{1}\n HTML" formats "<<-HTML\n \#{\"foo\"}\#{1}\n HTML" + formats "a=1" formats "a=1" + formats "1.<=(2) { 3 }" formats "1.<=(2) { 3 }" + formats "break( 1 )" formats "break( 1 )" + formats "<<-HTML\n \#{1}x\n HTML" formats "<<-HTML\n \#{1}x\n HTML" + formats "lib Foo\nfun foo(x : Int32, y : Float64) : Int32\nend" formats "lib Foo\nfun foo(x : Int32, y : Float64) : Int32\nend" + formats "foo.bar += \n1" formats "foo.bar += \n1" + formats "-> : Int32 {}" formats "-> : Int32 {}" + formats "enum Foo\nA = 1\nend" formats "enum Foo\nA = 1\nend" + formats "{% if true %}\n # x\n #\n{% end %}\n\n# ```\n# x\n# ```" formats "{% if true %}\n # x\n #\n{% end %}\n\n# ```\n# x\n# ```" + formats "macro foo\n \\{\nend" formats "macro foo\n \\{\nend" + formats "@x[ 1 ] &&= 2" formats "@x[ 1 ] &&= 2" + formats "\"foo \#{ __DIR__ }\"" formats "\"foo \#{ __DIR__ }\"" + formats "foo.bar. as Int32" formats "foo.bar. as Int32" + formats "-> : {Int32, String} {}" formats "-> : {Int32, String} {}" + formats "enum Baz\nA = 1\nFOO = 2\n\nEX = 3\nend" formats "enum Baz\nA = 1\nFOO = 2\n\nEX = 3\nend" + formats "class Foo ( *T, U )\nend" formats "class Foo ( *T, U )\nend" + formats "a = \"\n\"\n1 # 1\n12 # 2\n" formats "a = \"\n\"\n1 # 1\n12 # 2\n" + formats "::Tuple()" formats "::Tuple()" + formats "/foo \#{ bar }/" formats "/foo \#{ bar }/" + formats "macro foo\n {% for x in y %}\\ 2 {% end %}\\\nend" formats "macro foo\n {% for x in y %}\\ 2 {% end %}\\\nend" + formats "foo : (self)?" formats "foo : (self)?" + formats "x = a do\n 1 ||\n 2\nend" formats "x = a do\n 1 ||\n 2\nend" + formats "Foo( x: Int32 , y: Float64 )" formats "Foo( x: Int32 , y: Float64 )" + formats "def foo(**z)\nend" formats "def foo(**z)\nend" + formats "foo(\n 1,\n # 2,\n # 3,\n)" formats "foo(\n 1,\n # 2,\n # 3,\n)" + formats "@x ||= 1" formats "@x ||= 1" + formats "1 ||\n # foo\n 2" formats "1 ||\n # foo\n 2" + formats "begin\n 1\n # Comment\n\n\nend" formats "begin\n 1\n # Comment\n\n\nend" + formats "foo { | a, ( b , c ) | a + b + c }" formats "foo { | a, ( b , c ) | a + b + c }" + formats "foo &.as?(T).bar" formats "foo &.as?(T).bar" + formats "{ 1 => 2 ,\n\n 3 => 4 }" formats "{ 1 => 2 ,\n\n 3 => 4 }" + formats "->{}" formats "->{}" + formats "foo : Pointer(Foo)*" formats "foo : Pointer(Foo)*" + formats "while 1 # foo\nend" formats "while 1 # foo\nend" + formats "()" formats "()" + formats "def foo ( @@x) \n end" formats "def foo ( @@x) \n end" + formats "foo[&.bar] ||= 1" formats "foo[&.bar] ||= 1" + formats "foo &.[]=(1, 2)" formats "foo &.[]=(1, 2)" + formats "def foo\n@x = uninitialized Int32\nend" formats "def foo\n@x = uninitialized Int32\nend" + formats "case nil\nelse nil; nil\n# comment\nend" formats "case nil\nelse nil; nil\n# comment\nend" + formats "foo(->{\n 1 + 2\n})" formats "foo(->{\n 1 + 2\n})" + formats "def foo(@x)\n\nrescue\nend" formats "def foo(@x)\n\nrescue\nend" + formats "unless a\nunless b\n3\nelse\n4\nend\nend" formats "unless a\nunless b\n3\nelse\n4\nend\nend" + formats "#######" formats "#######" + formats "{\n variables => true,\n query => <<-HEREDOC,\n foo\n HEREDOC\n}" formats "{\n variables => true,\n query => <<-HEREDOC,\n foo\n HEREDOC\n}" + formats "macro foo\n {% if 1 %}\\ 2 {% else %}\\ 3 {% end %}\\\nend" formats "macro foo\n {% if 1 %}\\ 2 {% else %}\\ 3 {% end %}\\\nend" + formats "case / /\nwhen / /, /x/\n / /\nend" formats "case / /\nwhen / /, /x/\n / /\nend" + formats "foo 1 , &bar" formats "foo 1 , &bar" + formats "a = foo(bar(\n 1,\n 2,\n))" formats "a = foo(bar(\n 1,\n 2,\n))" + formats "def foo\n1\nrescue\n2\nend" formats "def foo\n1\nrescue\n2\nend" + formats "foo(1, 2, {\n foo: 1,\n bar: 2,\n})" formats "foo(1, 2, {\n foo: 1,\n bar: 2,\n})" + formats "case 1\nwhen 8 then 1\nwhen 16 then 2\nwhen 256 then 3\nwhen 'a' then 5\nwhen \"foo\" then 6\nelse 4\nend" formats "case 1\nwhen 8 then 1\nwhen 16 then 2\nwhen 256 then 3\nwhen 'a' then 5\nwhen \"foo\" then 6\nelse 4\nend" + formats "-> : {x: Int32, y: String} {}" formats "-> : {x: Int32, y: String} {}" + formats "foo 1, a: 1,\nb: 2,\nc: 3" formats "foo 1, a: 1,\nb: 2,\nc: 3" + formats ":\"foo bar\"" formats ":\"foo bar\"" + formats "case 1\nwhen 1 then 1\nwhen 123 then 2\nwhen 1..123 then 3\nelse 4\nend" formats "case 1\nwhen 1 then 1\nwhen 123 then 2\nwhen 1..123 then 3\nelse 4\nend" + formats "foo \\\nbar" formats "foo \\\nbar" + formats "<<-HTML\n hello \n HTML" formats "<<-HTML\n hello \n HTML" + formats "unless a\n2\nelse\n3\nend" formats "unless a\n2\nelse\n3\nend" + formats "macro []=(x, y)\nend" formats "macro []=(x, y)\nend" + formats "asm(\"nop\" : \"a\"(0) : \"b\"(1), \"c\"(2) )" formats "asm(\"nop\" : \"a\"(0) : \"b\"(1), \"c\"(2) )" + formats "foo &.nil?" formats "foo &.nil?" + formats "def +(x)\nend" formats "def +(x)\nend" + formats "def foo(\n @[MyAnn]\n bar\n); end" formats "def foo(\n @[MyAnn]\n bar\n); end" + formats "a &.a.!" formats "a &.a.!" + formats "next { {1, 2}, {3, 4} }, 5" formats "next { {1, 2}, {3, 4} }, 5" + formats "begin\n1\nrescue ex : Int32 | Float64 \n3\nend" formats "begin\n1\nrescue ex : Int32 | Float64 \n3\nend" + formats "class Foo\ndef foo (\nx ,\n y ) \n end\nend" formats "class Foo\ndef foo (\nx ,\n y ) \n end\nend" + formats " ( 1; 2; 3 ) " formats " ( 1; 2; 3 ) " + formats "foo(1, 2,)" formats "foo(1, 2,)" + formats " [ 1 , 2 , 3 ] " formats " [ 1 , 2 , 3 ] " + formats "'\\u{0123}'" formats "'\\u{0123}'" + formats "module Readline\n @@completion_proc : (String -> Array(String)?) | (String -> Array(String)) | Nil\nend" formats "module Readline\n @@completion_proc : (String -> Array(String)?) | (String -> Array(String)) | Nil\nend" + formats "yield 1 , 2" formats "yield 1 , 2" + formats "%(hello)" formats "%(hello)" + formats "[ # foo\n 1,\n]" formats "[ # foo\n 1,\n]" + formats "a = \\\n # foo\n bar(1)" formats "a = \\\n # foo\n bar(1)" + formats "lib Foo\nstruct Foo\nx , y : Int32\nend\nend" formats "lib Foo\nstruct Foo\nx , y : Int32\nend\nend" + formats "lib Foo\nfun foo : Int32\nend" formats "lib Foo\nfun foo : Int32\nend" + formats "{} of A => B\n{} of Foo => Bar" formats "{} of A => B\n{} of Foo => Bar" + formats "def foo(@[MyAnn] &); end" formats "def foo(@[MyAnn] &); end" + formats "Set{ # foo\n 1,\n}" formats "Set{ # foo\n 1,\n}" + formats "[\n 1, 2, # foo\n 3,\n]" formats "[\n 1, 2, # foo\n 3,\n]" + formats "a = [\n1,\n2]" formats "a = [\n1,\n2]" + formats "def foo(\n foo,\n @[MyAnn] &block\n); end" formats "def foo(\n foo,\n @[MyAnn] &block\n); end" + formats "lib Foo\n fun foo(Int32) : Int32\nend" formats "lib Foo\n fun foo(Int32) : Int32\nend" + formats "foo[1, &.bar] ||= 1" formats "foo[1, &.bar] ||= 1" + formats "a || b" formats "a || b" + formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1),\n\"c\"(2) )" formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1),\n\"c\"(2) )" + formats "def foo : Int32\n 1\nend" formats "def foo : Int32\n 1\nend" + formats "bar do\n call(foo <<-X\n bar\n X\n )\nend" formats "bar do\n call(foo <<-X\n bar\n X\n )\nend" + formats "X(typeof(begin\n e.is_a?(Y)\nend))" formats "X(typeof(begin\n e.is_a?(Y)\nend))" + formats "break 1 , 2" formats "break 1 , 2" + formats "foo x: 1, y: 2" formats "foo x: 1, y: 2" + formats "foo(\n# x\n1,\n\n# y\nz: 2,\n\n# a\nb: 3)" formats "foo(\n# x\n1,\n\n# y\nz: 2,\n\n# a\nb: 3)" + formats " {{ 1 + 2 }}" formats " {{ 1 + 2 }}" + formats ":*" formats ":*" + formats "->@@foo.foo" formats "->@@foo.foo" + formats "if 1\n2\n3\n# foo\nend" formats "if 1\n2\n3\n# foo\nend" + formats "foo.@bar" formats "foo.@bar" + formats "module Foo\n# nothing\nend" formats "module Foo\n# nothing\nend" + formats "foo &.[]( 1, 2 )" formats "foo &.[]( 1, 2 )" + formats "foo.% bar" formats "foo.% bar" + formats "NamedTuple(a: Int32,)" formats "NamedTuple(a: Int32,)" + formats "@a" formats "@a" + formats "def foo(@[AnnOne] @[AnnTwo] v); end" formats "def foo(@[AnnOne] @[AnnTwo] v); end" + formats "foo(\n <<-HERE,\n hello\n HERE\n foo: 1,\n)" formats "foo(\n <<-HERE,\n hello\n HERE\n foo: 1,\n)" + formats "::StaticArray(T)" formats "::StaticArray(T)" + formats "foo(1, &.bar)" formats "foo(1, &.bar)" + formats "lib LibFoo\n struct Bar\n {% begin %}\n x : Int32\n {% end %}\n end\nend" formats "lib LibFoo\n struct Bar\n {% begin %}\n x : Int32\n {% end %}\n end\nend" + formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar,\n\n @[MyAnn] @[MyAnn] baz,\n\n @[MyAnn]\n @[MyAnn]\n biz\n); end" formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar,\n\n @[MyAnn] @[MyAnn] baz,\n\n @[MyAnn]\n @[MyAnn]\n biz\n); end" + assert assert + formats "__LINE__" formats "__LINE__" + formats "foo &.bar.as(T)" formats "foo &.bar.as(T)" + formats "macro foo # bar\n baz\nend" formats "macro foo # bar\n baz\nend" + formats "(1)" formats "(1)" + formats "[\n a() # b\n]" formats "[\n a() # b\n]" + formats " {{\n1 + 2\n }}" formats " {{\n1 + 2\n }}" + formats "<<-FOO\nfoo\nfoo\nFOO" formats "<<-FOO\nfoo\nfoo\nFOO" + formats "return 1 , *2" formats "return 1 , *2" + formats "1.== do\nend" formats "1.== do\nend" + formats "run(\"a\", 1)" formats "run(\"a\", 1)" + formats "foo[ 1 , 2 ] =3" formats "foo[ 1 , 2 ] =3" + formats "a = begin\n 1\nend\n\na =\nbegin\n 1\nend\n\na = if 1\n 2\nend\n\nb = 1\nb ||= begin\n 2\nend\n\nb ||= if 1\n 2\nend\n\nb += if 1\n 2\nend\n\nb +=\nif 1\n 2\nend\n\na, b = begin\n 1\nend\n\na, b =\nbegin\n 1\nend\n\nc[x] = begin\n 2\nend\n\nc[x] =\nbegin\n 2\nend\n\nc[x] = if 1\n 2\nend\n\nc[x] ||= begin 1\n 2\nend\n\nc[x] ||= if 1\n 2\nend\n\nc[x] += if 1\n 2\nend\n\nc[x] += begin 1\n 2\nend\n\nc[x] +=\nbegin\n 1\n 2\nend\n\nfoo.bar = begin\nend\n\nfoo.bar =\nbegin\nend\n\nfoo.bar = if\n 2\nend\n\nfoo.bar += begin\n 2\nend\n\nfoo.bar += if\n 2\nend\n\n" formats "a = begin\n 1\nend\n\na =\nbegin\n 1\nend\n\na = if 1\n 2\nend\n\nb = 1\nb ||= begin\n 2\nend\n\nb ||= if 1\n 2\nend\n\nb += if 1\n 2\nend\n\nb +=\nif 1\n 2\nend\n\na, b = begin\n 1\nend\n\na, b =\nbegin\n 1\nend\n\nc[x] = begin\n 2\nend\n\nc[x] =\nbegin\n 2\nend\n\nc[x] = if 1\n 2\nend\n\nc[x] ||= begin 1\n 2\nend\n\nc[x] ||= if 1\n 2\nend\n\nc[x] += if 1\n 2\nend\n\nc[x] += begin 1\n 2\nend\n\nc[x] +=\nbegin\n 1\n 2\nend\n\nfoo.bar = begin\nend\n\nfoo.bar =\nbegin\nend\n\nfoo.bar = if\n 2\nend\n\nfoo.bar += begin\n 2\nend\n\nfoo.bar += if\n 2\nend\n\n" + formats "-> :: foo" formats "-> :: foo" + formats "module Foo;end" formats "module Foo;end" + formats "1.===() { 3 }" formats "1.===() { 3 }" + formats "def foo(x y)\nend" formats "def foo(x y)\nend" + formats "def foo\nselect \n when foo \n 2 \n else \n 3 \nend\nend" formats "def foo\nselect \n when foo \n 2 \n else \n 3 \nend\nend" + formats "a = 1\nb, c = 2, 3\n{% begin %}\n a |= 1\n b |= 2\n c |= 3\n{% end %}" formats "a = 1\nb, c = 2, 3\n{% begin %}\n a |= 1\n b |= 2\n c |= 3\n{% end %}" + formats "<<-HTML\n foo\n \#{\"foo\"}\n HTML" formats "<<-HTML\n foo\n \#{\"foo\"}\n HTML" + formats "asm(\"a\" :::: \"volatile\"\n)" formats "asm(\"a\" :::: \"volatile\"\n)" + formats "asm(\"nop\" : \"a\"(0),\n\"b\"(1)\n: \"c\"(2), \"d\"(3) )" formats "asm(\"nop\" : \"a\"(0),\n\"b\"(1)\n: \"c\"(2), \"d\"(3) )" + formats "foo bar:baz, qux:other" formats "foo bar:baz, qux:other" + formats "1 #=> 2" formats "1 #=> 2" + formats "foo (1)" formats "foo (1)" + formats "1 && (\n 2 || 3\n)" formats "1 && (\n 2 || 3\n)" + formats "1.as? Int32" formats "1.as? Int32" + formats "foo" formats "foo" + formats "macro foo\nend" formats "macro foo\nend" + formats "foo(baz1 do\nend)" formats "foo(baz1 do\nend)" + formats "begin\n 1 + \\\n 2\n 3\nend" formats "begin\n 1 + \\\n 2\n 3\nend" + formats "def foo ( x = 1 ) \n end" formats "def foo ( x = 1 ) \n end" + formats "def foo(\n foo,\n @[MyAnn]\n &block\n); end" formats "def foo(\n foo,\n @[MyAnn]\n &block\n); end" + formats "yield" formats "yield" + formats "foo\n.bar\n.baz" formats "foo\n.bar\n.baz" + formats "String???" formats "String???" + formats "foo &bar" formats "foo &bar" + formats "case 1 \n when 2 \n 3 \n else \n 4 \n end" formats "case 1 \n when 2 \n 3 \n else \n 4 \n end" + formats "{ # foo\n 1,\n}" formats "{ # foo\n 1,\n}" + formats "macro foo(x, *, z)\nend" formats "macro foo(x, *, z)\nend" + formats "def foo ( x : Int32 = 1 ) \n end" formats "def foo ( x : Int32 = 1 ) \n end" + formats "p = Foo[\n 1, 2, 3,\n 4, 5, 6\n]\n" formats "p = Foo[\n 1, 2, 3,\n 4, 5, 6\n]\n" + formats "def foo(a, &@b)\nend" formats "def foo(a, &@b)\nend" + formats "lib Foo\ntype Foo = Bar\nend" formats "lib Foo\ntype Foo = Bar\nend" + formats "foo(\n 1,\n # 2,\n 3,\n)" formats "foo(\n 1,\n # 2,\n 3,\n)" + formats "def foo\n1\n2\n# foo\nend" formats "def foo\n1\n2\n# foo\nend" + formats "macro foo\n {%1 + 2%}\\\nend" formats "macro foo\n {%1 + 2%}\\\nend" + formats "[\n 1, # foo\n 3,\n]" formats "[\n 1, # foo\n 3,\n]" + formats "<<-HTML\n \#{1}x\n y\n z\n HTML" formats "<<-HTML\n \#{1}x\n y\n z\n HTML" + formats "class Foo ( T )\nend" formats "class Foo ( T )\nend" + formats "def foo(**a,)\n 1\nend" formats "def foo(**a,)\n 1\nend" + formats "case 1\nwhen \"foo\" ; 3\nwhen \"lalalala\"; 4\nelse 5\nend" formats "case 1\nwhen \"foo\" ; 3\nwhen \"lalalala\"; 4\nelse 5\nend" + formats "case nil\nelse nil; nil # comment\nend" formats "case nil\nelse nil; nil # comment\nend" + formats "if 1\n2 # foo\nend" formats "if 1\n2 # foo\nend" + formats "include Foo" formats "include Foo" + formats "[] of (((Array(T))))" formats "[] of (((Array(T))))" + formats "module Foo ( U, *T ); 1; end" formats "module Foo ( U, *T ); 1; end" + formats " <<-EOF\n 1\n 2\n EOF" formats " <<-EOF\n 1\n 2\n EOF" + formats "macro foo\n{% verbatim do %}1 + 2{% end %}\nend" formats "macro foo\n{% verbatim do %}1 + 2{% end %}\nend" + formats "1.[]= do\nend" formats "1.[]= do\nend" + formats "begin\n1\n2\n3\nend" formats "begin\n1\n2\n3\nend" + formats "x : A | B" formats "x : A | B" + formats "foo.foo1(\n bar\n .bar1\n .bar2)" formats "foo.foo1(\n bar\n .bar1\n .bar2)" + formats "1+2*3" formats "1+2*3" + formats "->foo=" formats "->foo=" + formats "10 / a" formats "10 / a" + formats "def foo(\n **a # comment\n)\n 1\nend" formats "def foo(\n **a # comment\n)\n 1\nend" + formats "case 1\nwhen 2\n 3\n # foo\nelse\n 4\n # bar\nend" formats "case 1\nwhen 2\n 3\n # foo\nelse\n 4\n # bar\nend" + formats "while 1\n# nothing\nend" formats "while 1\n# nothing\nend" + formats "if 1\n foo(\n 1,\n 2 # lala\n )\nend\n" formats "if 1\n foo(\n 1,\n 2 # lala\n )\nend\n" + formats "asm(\"a\" ::: \"f\"\n)" formats "asm(\"a\" ::: \"f\"\n)" + formats "alias Foo= Bar" formats "alias Foo= Bar" + formats "foo[x: 1, &.bar]?" formats "foo[x: 1, &.bar]?" + formats "foo.as ( Int32* )" formats "foo.as ( Int32* )" + formats " <<-HTML\n \#{1}\n HTML" formats " <<-HTML\n \#{1}\n HTML" + formats "1\n.." formats "1\n.." + formats "{ {foo: 2} }" formats "{ {foo: 2} }" + formats "@[Foo]\ndef foo\nend" formats "@[Foo]\ndef foo\nend" + formats "a.b &.[c]\n1" formats "a.b &.[c]\n1" + formats "FOO = 2\nA = 1" formats "FOO = 2\nA = 1" + formats "{x => self // 1}" formats "{x => self // 1}" + formats "asm(\"a\" : \"b\"(c) : \"d\"(e) :: \"volatile\")" formats "asm(\"a\" : \"b\"(c) : \"d\"(e) :: \"volatile\")" + formats "\"hello\"" formats "\"hello\"" + formats "def foo(\n **a\n)\n 1\nend" formats "def foo(\n **a\n)\n 1\nend" + formats "1.>=() { 3 }" formats "1.>=() { 3 }" + formats "foo &.[a] = 1" formats "foo &.[a] = 1" + formats "asm(\n # the assembly template string, following the\n # syntax for LLVM's integrated assembler\n \"nop\" : # output operands\n\"=r\"(foo), \"=r\"(bar) : # input operands\n\"r\"(1), \"r\"(baz) : # names of clobbered registers\n\"eax\", \"memory\" : # optional flags, corresponding to the LLVM IR\n # sideeffect / alignstack / inteldialect / unwind attributes\n\"volatile\", \"alignstack\", \"intel\", \"unwind\"\n)" formats "asm(\n # the assembly template string, following the\n # syntax for LLVM's integrated assembler\n \"nop\" : # output operands\n\"=r\"(foo), \"=r\"(bar) : # input operands\n\"r\"(1), \"r\"(baz) : # names of clobbered registers\n\"eax\", \"memory\" : # optional flags, corresponding to the LLVM IR\n # sideeffect / alignstack / inteldialect / unwind attributes\n\"volatile\", \"alignstack\", \"intel\", \"unwind\"\n)" + formats ":^" formats ":^" + formats "alias A = (B(C, (C | D)) | E)" formats "alias A = (B(C, (C | D)) | E)" + formats "->Foo.foo" formats "->Foo.foo" + formats "def foo\nend;def bar\nend" formats "def foo\nend;def bar\nend" + formats "foo do\n {1 => foo <<-X\n bar\n X\n }\nend" formats "foo do\n {1 => foo <<-X\n bar\n X\n }\nend" + formats "<<-FOO\nbarfoo\nFOO" formats "<<-FOO\nbarfoo\nFOO" + formats "lib Foo\n fun foo =\n \"bar\"(Int32) : Int32\n # comment\nend" formats "lib Foo\n fun foo =\n \"bar\"(Int32) : Int32\n # comment\nend" + formats "1 && # foo\n 2 &&\n 3" formats "1 && # foo\n 2 &&\n 3" + formats "def foo : (A | B(C))\n nil\nend" formats "def foo : (A | B(C))\n nil\nend" + formats "# Here is the doc of a method, and contains an example:\n#\n# ```\n# result = foo\n#\n# puts result\n# ```\ndef foo\n # ...\nend\n" formats "# Here is the doc of a method, and contains an example:\n#\n# ```\n# result = foo\n#\n# puts result\n# ```\ndef foo\n # ...\nend\n" + formats "macro foo\n 1 + 2\nend" formats "macro foo\n 1 + 2\nend" + formats "foo a , b , x: 1" formats "foo a , b , x: 1" + formats "macro foo\n def bar \n end \n end" formats "macro foo\n def bar \n end \n end" + formats "a = if 1\n2\n3\nend" formats "a = if 1\n2\n3\nend" + formats "macro foo\n {% 1 + 2 %}\nend" formats "macro foo\n {% 1 + 2 %}\nend" + formats "def foo(**z : Foo)\nend" formats "def foo(**z : Foo)\nend" + formats "\" \" * 2" formats "\" \" * 2" + formats "foo(<<-X,\na\nX\n 1)" formats "foo(<<-X,\na\nX\n 1)" + formats "def foo(x : X) forall X , Y; end" formats "def foo(x : X) forall X , Y; end" + formats "def foo\n 1 #\nrescue\nend" formats "def foo\n 1 #\nrescue\nend" + formats "a = 1\ndef bar\nend" formats "a = 1\ndef bar\nend" + formats "{\n a: 1,\n foo: bar,\n}" formats "{\n a: 1,\n foo: bar,\n}" + formats "def foo(x : (self)?)\nend" formats "def foo(x : (self)?)\nend" + formats "x : Int32" formats "x : Int32" + formats "[c.x]\n .foo" formats "[c.x]\n .foo" + formats "lib Foo\nstruct Foo\nx , y , z : Int32\nend\nend" formats "lib Foo\nstruct Foo\nx , y , z : Int32\nend\nend" + formats "def run\n\nrescue\n 2\n 3\nend" formats "def run\n\nrescue\n 2\n 3\nend" + formats "1 &&\n2 &&\n3" formats "1 &&\n2 &&\n3" + formats "# foo\na = 1 # bar" formats "# foo\na = 1 # bar" + formats "begin\n1\nrescue ex\n3\nelse\n4\nend" formats "begin\n1\nrescue ex\n3\nelse\n4\nend" + formats "getter foo # comment\n\ndef foo\nend" formats "getter foo # comment\n\ndef foo\nend" + formats "alias Foo::Bar=Baz" formats "alias Foo::Bar=Baz" + formats "-> : Int32[1] {}" formats "-> : Int32[1] {}" + formats "asm(\"nop\" ::: \"eax\" , \"ebx\" )" formats "asm(\"nop\" ::: \"eax\" , \"ebx\" )" + formats "break *1 ,2" formats "break *1 ,2" + formats "foo.bar += 2" formats "foo.bar += 2" + formats "enum Foo : Int32\nA = 1\nend" formats "enum Foo : Int32\nA = 1\nend" + formats "1 \\\n+ 2" formats "1 \\\n+ 2" + formats "macro foo\n {% for x in y %} 2 {% end %}\nend" formats "macro foo\n {% for x in y %} 2 {% end %}\nend" + formats "next 1 , 2" formats "next 1 , 2" + formats "->{}" formats "->{}" + formats "x: Int32" formats "x: Int32" + formats "-> { }" formats "-> { }" + formats "-> :: foo?" formats "-> :: foo?" + formats "foo (1).bar" formats "foo (1).bar" + formats "select \n when foo then 2 \n end" formats "select \n when foo then 2 \n end" + formats "is_a? Foo" formats "is_a? Foo" + formats "foo(\"bar\" \\\n\"baz\")" formats "foo(\"bar\" \\\n\"baz\")" + formats "1 +\n # foo\n 2" formats "1 +\n # foo\n 2" + formats "->@foo.foo!" formats "->@foo.foo!" + formats "asm(\n\"nop\" : \"a\"(0), \"b\"(1) )" formats "asm(\n\"nop\" : \"a\"(0), \"b\"(1) )" + formats "あ.い = 1" formats "あ.い = 1" + formats "%w(\n one two\n three four\n)" formats "%w(\n one two\n three four\n)" + formats "foo\n \nbar" formats "foo\n \nbar" + formats "Union(Foo::Bar?, Baz?, Qux(T, U?))" formats "Union(Foo::Bar?, Baz?, Qux(T, U?))" + formats "\n# hello\n1" formats "\n# hello\n1" + formats "foo \\\n 1,\n 2" formats "foo \\\n 1,\n 2" + formats "foo . is_a? Bar" formats "foo . is_a? Bar" + formats "unless a\n2\nelse\nend" formats "unless a\n2\nelse\nend" + formats "foo &.as(T).bar" formats "foo &.as(T).bar" + formats "x : Int32 = 1" formats "x : Int32 = 1" + formats "def foo(x, *, y, **z)\nend" formats "def foo(x, *, y, **z)\nend" + formats "<<-FOO\nFOO" formats "<<-FOO\nFOO" + formats " case 1\n when 2\n 3\n else #:newline, :eof\n 1 if 2\n return 3\n end\n" formats " case 1\n when 2\n 3\n else #:newline, :eof\n 1 if 2\n return 3\n end\n" + formats "...\n2" formats "...\n2" + formats "select \n when foo \n 2 \n when bar \n 3 \n end" formats "select \n when foo \n 2 \n when bar \n 3 \n end" + formats "class Actor\n macro inherited\n\nend\nend\n" formats "class Actor\n macro inherited\n\nend\nend\n" + formats "foo &.[]" formats "foo &.[]" + formats "->() do x end" formats "->() do x end" + formats "macro foo\n {% if true %}if true{% end %}\n {% if true %}end{% end %}\nend" formats "macro foo\n {% if true %}if true{% end %}\n {% if true %}end{% end %}\nend" + formats "if 1 &&\n (2 || 3)\n 1\nelse\n 2\nend" formats "if 1 &&\n (2 || 3)\n 1\nelse\n 2\nend" + formats "def foo( x , & block : Int32->Float64)\nend" formats "def foo( x , & block : Int32->Float64)\nend" + formats "foo do\n bar do\n foo <<-X\n bar\n X\n end\nend" formats "foo do\n bar do\n foo <<-X\n bar\n X\n end\nend" + formats "x 1, \\\n 2" formats "x 1, \\\n 2" + formats "1\n..2" formats "1\n..2" + formats "{\n 1 => 2,\n 10 => 30,\n 30 => 40,\n \"foobar\" => 50,\n \"coco\" => 60,\n}" formats "{\n 1 => 2,\n 10 => 30,\n 30 => 40,\n \"foobar\" => 50,\n \"coco\" => 60,\n}" + formats "foo.[1, 2] = 3" formats "foo.[1, 2] = 3" + formats "b &.[c]?.d" formats "b &.[c]?.d" + formats "x : {\"foo bar\": Int32}" formats "x : {\"foo bar\": Int32}" + formats " Array( {x: Int32, y: String } )" formats " Array( {x: Int32, y: String } )" + formats "class X; annotation FooAnnotation ; end ; end" formats "class X; annotation FooAnnotation ; end ; end" + formats "foo\n .bar(\n 1\n )" formats "foo\n .bar(\n 1\n )" + formats "case foo\nwhen 1\n # A\nelse\n# B\nend\n" formats "case foo\nwhen 1\n # A\nelse\n# B\nend\n" + formats "abstract def foo \n 1" formats "abstract def foo \n 1" + formats "def foo(\n &block\n)\nend" formats "def foo(\n &block\n)\nend" + formats "foo(a: //, b: //)" formats "foo(a: //, b: //)" + formats "foo((1..3))" formats "foo((1..3))" + formats "foo : ( A | B )" formats "foo : ( A | B )" + formats "foo do\n {% foo <<-X\n bar\n X\n %}\nend" formats "foo do\n {% foo <<-X\n bar\n X\n %}\nend" + formats "lib Foo\nfun foo () : Int32\nend" formats "lib Foo\nfun foo () : Int32\nend" + formats "macro foo\n {{ 1 + 2 }}\nend" formats "macro foo\n {{ 1 + 2 }}\nend" + formats "1\n..\n2" formats "1\n..\n2" + formats "foo(\n 1, 2,\n&block)" formats "foo(\n 1, 2,\n&block)" + formats "module Foo # foo\nend" formats "module Foo # foo\nend" + formats "if / /\nend" formats "if / /\nend" + formats "lib Foo\n fun Foo = Bar\nend" formats "lib Foo\n fun Foo = Bar\nend" + formats "{% if true %}\n # x\n # y\n{% end %}" formats "{% if true %}\n # x\n # y\n{% end %}" + formats "macro foo(\n a,\n **b,\n)\nend" formats "macro foo(\n a,\n **b,\n)\nend" + formats "{ 1 => 2 ,\n 3 => 4 }" formats "{ 1 => 2 ,\n 3 => 4 }" + formats "case 1 \n in Int32 \n 3 \n end" formats "case 1 \n in Int32 \n 3 \n end" + formats "alias X = ((Y, Z) ->)" formats "alias X = ((Y, Z) ->)" + formats "foo &.is_a?(T).bar" formats "foo &.is_a?(T).bar" + formats "-> { 1 }" formats "-> { 1 }" + formats "def foo(x) forall T # bar\n # baz\nend" formats "def foo(x) forall T # bar\n # baz\nend" + formats "1 # foo" formats "1 # foo" + formats "1\n.as?(Int32)" formats "1\n.as?(Int32)" + formats "a = case 1\nwhen 2\n3\nend" formats "a = case 1\nwhen 2\n3\nend" + formats "\"foo\" \\\n \"bar\"" formats "\"foo\" \\\n \"bar\"" + formats "a = while 1\n2\nend" formats "a = while 1\n2\nend" + formats "lib Foo\n fun foo = \"bar\"(Int32) : Int32\nend" formats "lib Foo\n fun foo = \"bar\"(Int32) : Int32\nend" + formats "{ } of A => B" formats "{ } of A => B" + formats "foo . bar( x , y )" formats "foo . bar( x , y )" + formats "case 1\nend" formats "case 1\nend" + formats "def func # comment\n (1 + 2) / 3\nend" formats "def func # comment\n (1 + 2) / 3\nend" + formats "foo.[ 1 , 2 ]" formats "foo.[ 1 , 2 ]" + formats "foo(\n 1,\n) do\n 2\nend" formats "foo(\n 1,\n) do\n 2\nend" + formats "a-1" formats "a-1" + formats "break( *1 , *2 )" formats "break( *1 , *2 )" + formats "\"\#{ # foo\n foo = 1\n}\"" formats "\"\#{ # foo\n foo = 1\n}\"" + formats "def foo( x , & block : Int32 )\nend" formats "def foo( x , & block : Int32 )\nend" + formats "unless a\n2; 3\nelse\n3\nend" formats "unless a\n2; 3\nelse\n3\nend" + formats "foo.\nbar" formats "foo.\nbar" + formats "p = Foo[1, 2, 3,\n 4, 5, 6,\n ]" formats "p = Foo[1, 2, 3,\n 4, 5, 6,\n ]" + formats "case 1 \n when 2 ,\n 3 \n 4 \n end" formats "case 1 \n when 2 ,\n 3 \n 4 \n end" + formats "macro bar\n 1\nend\n\ncase 1\nwhen 2 then 3\nwhen 45 then 6\nend" formats "macro bar\n 1\nend\n\ncase 1\nwhen 2 then 3\nwhen 45 then 6\nend" + formats "enum Foo; A = 1; end" formats "enum Foo; A = 1; end" + formats "[1, 2, 3]" formats "[1, 2, 3]" + formats "case\nelse\n 1\nend" formats "case\nelse\n 1\nend" + formats "def foo( & \n )\nend" formats "def foo( & \n )\nend" + formats "return *1" formats "return *1" + formats ":/" formats ":/" + formats "if 1\nfoo do | x , y | \n x \n end\nend" formats "if 1\nfoo do | x , y | \n x \n end\nend" + formats "def foo(\n @[MyAnn]\n bar\n); end" formats "def foo(\n @[MyAnn]\n bar\n); end" + formats "1\n2\n# foo" formats "1\n2\n# foo" + formats "a = 1;;; b = 2" formats "a = 1;;; b = 2" + formats "alias A = ( A | B )" formats "alias A = ( A | B )" + formats "foo = 1\n->foo.[](Int32)" formats "foo = 1\n->foo.[](Int32)" + formats "foo.[ 1 , 2 ] =3" formats "foo.[ 1 , 2 ] =3" + formats "Set { 1 , 2 }" formats "Set { 1 , 2 }" + formats " {% for x in y %} 2 {% end %}" formats " {% for x in y %} 2 {% end %}" + formats "# Hello\n#\n# ```crystal\n# 1\n# ```\n# Bye" formats "# Hello\n#\n# ```crystal\n# 1\n# ```\n# Bye" + formats "NamedTuple(\n a: Int32,\n)" formats "NamedTuple(\n a: Int32,\n)" + formats "foo &.bar" formats "foo &.bar" + formats "1 + # foo\n2" formats "1 + # foo\n2" + formats "->{ x }" formats "->{ x }" + formats "def foo( x , & : Int32 )\nend" formats "def foo( x , & : Int32 )\nend" + formats "10 ** a" formats "10 ** a" + formats "# foo\ndef foo\nend\n# bar\ndef bar\nend" formats "# foo\ndef foo\nend\n# bar\ndef bar\nend" + formats "FOO = 2 + 3\nA = 1 - 10" formats "FOO = 2 + 3\nA = 1 - 10" + formats "foo.as? Int32*" formats "foo.as? Int32*" + formats "->(x : Int32) {}" formats "->(x : Int32) {}" + formats "class Foo\n macro foo\n 1 + 2 \n end\n end" formats "class Foo\n macro foo\n 1 + 2 \n end\n end" + formats "args.any? &.name.baz" formats "args.any? &.name.baz" + formats "1.==() { 3 }" formats "1.==() { 3 }" + formats "1 + \\\n2" formats "1 + \\\n2" + formats "1.!= { 3 }" formats "1.!= { 3 }" + formats " 1" formats " 1" + formats "<<-HEREDOC\n \#{foo}\n H\#{bar}\n HEREDOC" formats "<<-HEREDOC\n \#{foo}\n H\#{bar}\n HEREDOC" + formats "{ 1 => 2 , 3 => 4 }" formats "{ 1 => 2 , 3 => 4 }" + formats "macro foo\n {{ 1 + 2 }}\\\nend" formats "macro foo\n {{ 1 + 2 }}\\\nend" + formats "if 1\nelse\n2 # foo\nend" formats "if 1\nelse\n2 # foo\nend" + formats "unless a\n2\n3\nend" formats "unless a\n2\n3\nend" + formats "def foo\n case x\n # z\n when 1\n end\nend" formats "def foo\n case x\n # z\n when 1\n end\nend" + formats "Foo::Bar?" formats "Foo::Bar?" + formats "foo \\\n foo: 1,\n bar: 2" formats "foo \\\n foo: 1,\n bar: 2" + formats "{\n query => <<-HEREDOC,\n foo\n HEREDOC\n}" formats "{\n query => <<-HEREDOC,\n foo\n HEREDOC\n}" + formats "def foo(x = __FILE__ )\nend" formats "def foo(x = __FILE__ )\nend" + formats "10**a" formats "10**a" + formats "join io, &.inspect" formats "join io, &.inspect" + formats "def foo \n end" formats "def foo \n end" + formats "while true\n1\n\n# foo\nend" formats "while true\n1\n\n# foo\nend" + formats "fun foo(\n x : Int32,\n ...\n) : Int32\n 1\nend" formats "fun foo(\n x : Int32,\n ...\n) : Int32\n 1\nend" + formats "{\n1 => 2 ,\n 3 => 4 }" formats "{\n1 => 2 ,\n 3 => 4 }" + formats "begin 0[1] rescue 2 end" formats "begin 0[1] rescue 2 end" + formats "enum Foo\n A; B; C\nend\n" formats "enum Foo\n A; B; C\nend\n" + formats "Foo( x: Int32 )" formats "Foo( x: Int32 )" + formats "enum Foo;end" formats "enum Foo;end" + formats "foo &.nil?()" formats "foo &.nil?()" + formats "a = foo(bar([\n 1,\n]))" formats "a = foo(bar([\n 1,\n]))" + formats "def foo( x , & block )\nend" formats "def foo( x , & block )\nend" + formats "def foo(\n @[MyAnn] bar\n); end" formats "def foo(\n @[MyAnn] bar\n); end" + formats "-> : Int32 { }" formats "-> : Int32 { }" + formats "Foo" formats "Foo" + formats "as Foo" formats "as Foo" + formats "&+ 1" formats "&+ 1" + formats "$~ = 1" formats "$~ = 1" + formats "@[Foo()]" formats "@[Foo()]" + formats "a &.b.c.as(C)" formats "a &.b.c.as(C)" + formats "1 +\n # foo\n 2" formats "1 +\n # foo\n 2" + formats "a &.b.c.as C" formats "a &.b.c.as C" + formats "if 1\n2\nend\nif 3\nend" formats "if 1\n2\nend\nif 3\nend" + formats "1.>= { 3 }" formats "1.>= { 3 }" + formats "asm(\"nop\" ::: \"eax\" , \"ebx\" : \"volatile\" , \"alignstack\" )" formats "asm(\"nop\" ::: \"eax\" , \"ebx\" : \"volatile\" , \"alignstack\" )" + formats "foo : (String -> Array(String)?) | (String -> Array(String)) | Nil" formats "foo : (String -> Array(String)?) | (String -> Array(String)) | Nil" + formats "a = # foo\n bar(1)" formats "a = # foo\n bar(1)" + formats "\n# hello\n\n\n1" formats "\n# hello\n\n\n1" + formats "enum Foo\n A = 10\n FOO = 123\n BARBAZ = 1234\nend\n" formats "enum Foo\n A = 10\n FOO = 123\n BARBAZ = 1234\nend\n" + formats "a = \nif 1\n2\nend" formats "a = \nif 1\n2\nend" + formats "lib Bar\n enum Foo\n A = 1\n end\nend" formats "lib Bar\n enum Foo\n A = 1\n end\nend" + formats "-> : Int32 {}" formats "-> : Int32 {}" + formats "break *1 , *2" formats "break *1 , *2" + formats "def foo ( @x, @y) \n end" formats "def foo ( @x, @y) \n end" + formats "{% verbatim do %}\n <<-FOO\n hello \n FOO\n{% end %}" formats "{% verbatim do %}\n <<-FOO\n hello \n FOO\n{% end %}" + formats "-> :: foo=" formats "-> :: foo=" + formats "10//a" formats "10//a" + formats "\"\" + <<-END\n bar\n END" formats "\"\" + <<-END\n bar\n END" + formats "foo a: 1\nb" formats "foo a: 1\nb" + formats "def foo(@[MyAnn] v); end" formats "def foo(@[MyAnn] v); end" + formats "def foo(a : T) forall T\n #\n\n\nend" formats "def foo(a : T) forall T\n #\n\n\nend" + formats "def foo ( ) \n1\nend" formats "def foo ( ) \n1\nend" + formats "def a\n b(\n 1, # x\n # y\n 2\n )\nend" formats "def a\n b(\n 1, # x\n # y\n 2\n )\nend" + formats "foo . bar = 1" formats "foo . bar = 1" + formats "lib Foo\n $foo = hello : Int32 \nend" formats "lib Foo\n $foo = hello : Int32 \nend" + formats "macro foo()\nend" formats "macro foo()\nend" + formats "foo.%(bar)" formats "foo.%(bar)" + formats "1.== { 3 }" formats "1.== { 3 }" + formats "if 1\n foo(\n bar\n # comment\n )\nend" formats "if 1\n foo(\n bar\n # comment\n )\nend" + formats "$0.bar" formats "$0.bar" + formats "{%\n unless true\n 1\n else\n 2\n end\n%}" formats "{%\n unless true\n 1\n else\n 2\n end\n%}" + formats "foo . is_a? ( Bar )" formats "foo . is_a? ( Bar )" + formats "as? Foo" formats "as? Foo" + formats "{\n foo: 1,\n b: 2,\n barbaz: 3,\n}" formats "{\n foo: 1,\n b: 2,\n barbaz: 3,\n}" + formats "A = 1\nFOO = 2\n\nEX = 3" formats "A = 1\nFOO = 2\n\nEX = 3" + formats "foo &.>=(2)" formats "foo &.>=(2)" + formats "enum E\n A # hello\n B # hello; C # hello\nend" formats "enum E\n A # hello\n B # hello; C # hello\nend" + formats "foo = [1, [2,\n 3],\n 4]" formats "foo = [1, [2,\n 3],\n 4]" + formats "[] of (Array(T))" formats "[] of (Array(T))" + formats "return" formats "return" + formats "asm(\"nop\" :::: \"volatile\" )" formats "asm(\"nop\" :::: \"volatile\" )" + formats "\"foo\#{\"bar\"} Baz \#{\"qux\"} \"" formats "\"foo\#{\"bar\"} Baz \#{\"qux\"} \"" + formats "Tuple()" formats "Tuple()" + formats "foo { | a, ( b , (c, d) ) | a + b + c }" formats "foo { | a, ( b , (c, d) ) | a + b + c }" + formats "x.is_a? T\n3\n" formats "x.is_a? T\n3\n" + formats "1 && 2" formats "1 && 2" + formats "-> :: Foo . foo?" formats "-> :: Foo . foo?" + formats "b &.[c].d" formats "b &.[c].d" + formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar,\n @[MyAnn] @[MyAnn] baz,\n @[MyAnn]\n @[MyAnn]\n biz\n); end" formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar,\n @[MyAnn] @[MyAnn] baz,\n @[MyAnn]\n @[MyAnn]\n biz\n); end" + formats "foo(\n # foo\n1,\n\n # bar\n2, \n)" formats "foo(\n # foo\n1,\n\n # bar\n2, \n)" + formats "foo { | a, ( b , c, ), | a + b + c }" formats "foo { | a, ( b , c, ), | a + b + c }" + formats "next *1 , *2" formats "next *1 , *2" + formats " <<-EOF\n 1\n EOF" formats " <<-EOF\n 1\n EOF" + formats "begin\n array[\n 0 # Zero\n ]\nend" formats "begin\n array[\n 0 # Zero\n ]\nend" + formats "{/ / => / /, / / => / /}" formats "{/ / => / /, / / => / /}" + formats "def foo(x @y)\nend" formats "def foo(x @y)\nend" + formats "Foo:: Bar" formats "Foo:: Bar" + formats "foo(baz(x, y) do\n 1 + 2\nend)" formats "foo(baz(x, y) do\n 1 + 2\nend)" + formats "+ a + d" formats "+ a + d" + formats "class Foo\n NamedTuple(\n a: Int32,\n )\nend" formats "class Foo\n NamedTuple(\n a: Int32,\n )\nend" + formats "@[Foo(\n foo: 1,\n)]\ndef foo\nend" formats "@[Foo(\n foo: 1,\n)]\ndef foo\nend" + formats "case 1\nwhen 2\n\n#comment\nend" formats "case 1\nwhen 2\n\n#comment\nend" + formats "foo : (String -> String?) | (String)" formats "foo : (String -> String?) | (String)" + formats "def a\n [\n 1, # x\n # y\n ]\nend" formats "def a\n [\n 1, # x\n # y\n ]\nend" + formats "def foo\n 1\n #\n\n\nrescue\nend" formats "def foo\n 1\n #\n\n\nrescue\nend" + formats "[\n1, # a\n2, # b\n 3 # c\n]" formats "[\n1, # a\n2, # b\n 3 # c\n]" + formats "def self . foo\nend" formats "def self . foo\nend" + formats "{{ foo <<-X\nbar\nX\n}}" formats "{{ foo <<-X\nbar\nX\n}}" + formats "next( *1 , *2 )" formats "next( *1 , *2 )" + formats "def foo\n ((((((((((((((((0_u64\n ) | ptr[0]) << 8\n ) | ptr[1]) << 8\n ) | ptr[2]) << 8\n ) | ptr[3]) << 8\n ) | ptr[4]) << 8\n ) | ptr[5]) << 8\n ) | ptr[6]) << 8\n ) | ptr[7])\nend" formats "def foo\n ((((((((((((((((0_u64\n ) | ptr[0]) << 8\n ) | ptr[1]) << 8\n ) | ptr[2]) << 8\n ) | ptr[3]) << 8\n ) | ptr[4]) << 8\n ) | ptr[5]) << 8\n ) | ptr[6]) << 8\n ) | ptr[7])\nend" + formats "a , b = 1 , 2" formats "a , b = 1 , 2" + formats "1.[]= { 3 }" formats "1.[]= { 3 }" + formats "def execute\n begin\n 1\n ensure\n 2\n end\n 3\nend" formats "def execute\n begin\n 1\n ensure\n 2\n end\n 3\nend" + formats "foo.bar.baz\n.qux" formats "foo.bar.baz\n.qux" + formats "foo &.as(T)" formats "foo &.as(T)" + formats "@x[ 1 ] ||= 2" formats "@x[ 1 ] ||= 2" + formats "foo(a: //)" formats "foo(a: //)" + formats "foo(1, 2,\n)" formats "foo(1, 2,\n)" + formats "1 if 2\n# foo" formats "1 if 2\n# foo" + formats "case 1\nwhen 2 # a\n # b\nend" formats "case 1\nwhen 2 # a\n # b\nend" + formats "begin\n begin\n a\n # b\n end\nend" formats "begin\n begin\n a\n # b\n end\nend" + formats "foo.bar\n .baz(\n 1\n )" formats "foo.bar\n .baz(\n 1\n )" + formats " {% if 1 %} 2 {% end %}" formats " {% if 1 %} 2 {% end %}" + formats "1 + \\\n2 + \\\n3" formats "1 + \\\n2 + \\\n3" + formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar,\n\n @[MyAnn] @[MyAnn] baz,\n\n @[MyAnn]\n\n @[MyAnn]\n\n biz\n); end" formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar,\n\n @[MyAnn] @[MyAnn] baz,\n\n @[MyAnn]\n\n @[MyAnn]\n\n biz\n); end" + formats "foo = 1\n->foo.foo" formats "foo = 1\n->foo.foo" + formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\\v\\f\\e\"" formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\\v\\f\\e\"" + formats "~ 1" formats "~ 1" + formats "1#foo" formats "1#foo" + formats "foo(bar(\n 1,\n 2,\n))" formats "foo(bar(\n 1,\n 2,\n))" + formats "macro foo\n %foo{x,y}\nend" formats "macro foo\n %foo{x,y}\nend" + formats "alias Foo::Bar =Baz" formats "alias Foo::Bar =Baz" + formats "$1.bar" formats "$1.bar" + formats " {% if 1 %} {% if 2 %} 2 {% end %} {% end %}" formats " {% if 1 %} {% if 2 %} 2 {% end %} {% end %}" + formats "[1,\n2,\n3]" formats "[1,\n2,\n3]" + formats "case 1\nwhen 1 then\n2\nwhen 3\n4\nend" formats "case 1\nwhen 1 then\n2\nwhen 3\n4\nend" + formats "macro flags\n {% if 1 %}\\\n 1 {% else %}\\\n {% end %}\\\nend" formats "macro flags\n {% if 1 %}\\\n 1 {% else %}\\\n {% end %}\\\nend" + formats "{ {% begin %}1{% end %}, nil }" formats "{ {% begin %}1{% end %}, nil }" + formats "1 ... 2" formats "1 ... 2" + formats "(1 .. )" formats "(1 .. )" + formats "foo()" formats "foo()" + formats "case 1\nwhen \"foo\" then 3\nwhen \"lalalala\" then 4\nelse 5\nend" formats "case 1\nwhen \"foo\" then 3\nwhen \"lalalala\" then 4\nelse 5\nend" + formats "def foo\nend\ndef bar\nend" formats "def foo\nend\ndef bar\nend" + formats "a.!" formats "a.!" + formats "lib Foo\nfun foo\nend" formats "lib Foo\nfun foo\nend" + formats "" formats "" + formats "def foo : Int32 \n end" formats "def foo : Int32 \n end" + formats "page= <<-HTML\n \#{1}foo\nHTML" formats "page= <<-HTML\n \#{1}foo\nHTML" + formats "[1,\n2,\n3\n]" formats "[1,\n2,\n3\n]" + formats "<<-FOO\nfoobar\nFOO" formats "<<-FOO\nfoobar\nFOO" + formats "class Foo # foo\nend" formats "class Foo # foo\nend" + formats "def foo ( @@select) \n end" formats "def foo ( @@select) \n end" + formats "->@@foo.foo!" formats "->@@foo.foo!" + formats "foo.responds_to? :bar\n1" formats "foo.responds_to? :bar\n1" + formats "class Foo\n@x : Int32\nend" formats "class Foo\n@x : Int32\nend" + formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar\n); end" formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar\n); end" + formats "alias Foo=Bar" formats "alias Foo=Bar" + formats "lib Bar\n enum Foo\n end\nend" formats "lib Bar\n enum Foo\n end\nend" + formats "foo{|x|\n x}" formats "foo{|x|\n x}" + formats "a&-1" formats "a&-1" + formats "alias Foo::Bar= Baz" formats "alias Foo::Bar= Baz" + formats "lib Foo\nfun foo(x : Int32,\ny : Float64) : Int32\nend" formats "lib Foo\nfun foo(x : Int32,\ny : Float64) : Int32\nend" + formats "begin\n call\n # comment\nrescue\n call\n # comment\nelse\n call\n # comment\nensure\n call\n # comment\nend" formats "begin\n call\n # comment\nrescue\n call\n # comment\nelse\n call\n # comment\nensure\n call\n # comment\nend" + formats " {%\na = 1 %}" formats " {%\na = 1 %}" + formats "1.=== { 3 }" formats "1.=== { 3 }" + formats "lib Foo\n fun foo =\n bar(Int32,\n Int32) : Int32\nend" formats "lib Foo\n fun foo =\n bar(Int32,\n Int32) : Int32\nend" + formats "yield 1" formats "yield 1" + formats "def foo ( x ) \n end" formats "def foo ( x ) \n end" + formats "def foo\n {% if flag?(:foo) %}\n foo + bar\n {% else %}\n baz + qux\n {% end %}\nend" formats "def foo\n {% if flag?(:foo) %}\n foo + bar\n {% else %}\n baz + qux\n {% end %}\nend" + formats "[foo <<-X\nbar\nX\n]" formats "[foo <<-X\nbar\nX\n]" + formats "{% for a in %w() %}\n <<-FOO\n hello \n FOO\n{% end %}" formats "{% for a in %w() %}\n <<-FOO\n hello \n FOO\n{% end %}" + formats "case 1\nelse # foo\n # bar\nend" formats "case 1\nelse # foo\n # bar\nend" + formats " _ , *_ ,\na.foo ,a.bar = 1 , 2,3" formats " _ , *_ ,\na.foo ,a.bar = 1 , 2,3" + formats "break { 1 , 2 }" formats "break { 1 , 2 }" + formats "lib Foo\n $foo : Int32 \nend" formats "lib Foo\n $foo : Int32 \nend" + formats "asm(\"nop\" : \"a\"(0) )" formats "asm(\"nop\" : \"a\"(0) )" + formats "x = <<-FOO\n hello\n FOO\n\ndef bar\nend" formats "x = <<-FOO\n hello\n FOO\n\ndef bar\nend" + formats "def foo(a,\n &block)\nend" formats "def foo(a,\n &block)\nend" + formats "foo\n .bar\n .baz(\n 1\n )" formats "foo\n .bar\n .baz(\n 1\n )" + formats "alias A = ((B(C | D) | E) | F)" formats "alias A = ((B(C | D) | E) | F)" + formats "a = 1 + # foo\n2" formats "a = 1 + # foo\n2" + formats " [ 1, \n 2 , \n 3 ] " formats " [ 1, \n 2 , \n 3 ] " + formats "class Foo\n macro foo\n 1\n end\nend" formats "class Foo\n macro foo\n 1\n end\nend" + formats "$1" formats "$1" + formats "bla.select(&.all?{ |x| x } )" formats "bla.select(&.all?{ |x| x } )" + formats ":&-" formats ":&-" + formats "case 1 \n when 2 ;\n 3 \n end" formats "case 1 \n when 2 ;\n 3 \n end" + formats "$~" formats "$~" + formats "Foo(\"bar\": Int32, \"baz qux\": Float64)" formats "Foo(\"bar\": Int32, \"baz qux\": Float64)" + formats "def foo ( x , y , ) \n end" formats "def foo ( x , y , ) \n end" + formats "foo(bar(baz3 do\nend))" formats "foo(bar(baz3 do\nend))" + formats "<<-HTML\n \#{\"foo\"}\n HTML" formats "<<-HTML\n \#{\"foo\"}\n HTML" + formats "def foo(a,\n **b)\nend" formats "def foo(a,\n **b)\nend" + formats "if 1\nelse\n# nothing\nend" formats "if 1\nelse\n# nothing\nend" + formats "[1, 2, 3, ]" formats "[1, 2, 3, ]" + formats "Hash{\n foo => <<-EOF,\n foo\n EOF\n}" formats "Hash{\n foo => <<-EOF,\n foo\n EOF\n}" + formats "macro foo\n {{1 + 2}}\nend" formats "macro foo\n {{1 + 2}}\nend" + formats "[\n <<-EOF,\n foo\n EOF\n]" formats "[\n <<-EOF,\n foo\n EOF\n]" + formats "foo { |x, *y| }" formats "foo { |x, *y| }" + formats "lib Foo\n fun foo =\n bar : Void\nend" formats "lib Foo\n fun foo =\n bar : Void\nend" + formats "struct Foo(T)\n# bar\n1\nend" formats "struct Foo(T)\n# bar\n1\nend" + formats "def foo\n a = 1; # foo\n a = 2; # bar\nend\n" formats "def foo\n a = 1; # foo\n a = 2; # bar\nend\n" + formats "lib Foo\n fun Bar\nend" formats "lib Foo\n fun Bar\nend" + formats "foo do # a\n # b\n bar\nend" formats "foo do # a\n # b\n bar\nend" + formats "foo do \n x \n end" formats "foo do \n x \n end" + formats "next { {1, 2}, {3, 4} }" formats "next { {1, 2}, {3, 4} }" + formats "'\\n'" formats "'\\n'" + formats "alias A = ({A, (B)})" formats "alias A = ({A, (B)})" + formats "offsetof( String, @length )" formats "offsetof( String, @length )" + formats "foo(1 ||\n # foo\n 2)" formats "foo(1 ||\n # foo\n 2)" + formats "asm(\"nop\" :: \"r\"(0))" formats "asm(\"nop\" :: \"r\"(0))" + formats "begin\n 1\nend\n\n1\n" formats "begin\n 1\nend\n\n1\n" + formats "alias Foo =Bar" formats "alias Foo =Bar" + formats "class X\n annotation FooAnnotation \n end \n end" formats "class X\n annotation FooAnnotation \n end \n end" + formats "foo self // 1" formats "foo self // 1" + formats "long_variable_name = [1, 2, 3, # foo\n 4, 5, 6]" formats "long_variable_name = [1, 2, 3, # foo\n 4, 5, 6]" + formats "NamedTuple()" formats "NamedTuple()" + formats "alias Foo::Bar = Baz" formats "alias Foo::Bar = Baz" + formats "return { {1, 2}, {3, 4} }" formats "return { {1, 2}, {3, 4} }" + formats "\"\#{foo = 1\n}\"" formats "\"\#{foo = 1\n}\"" + formats "case 1 \n when 2 , 3 \n 4 \n end" formats "case 1 \n when 2 , 3 \n 4 \n end" + formats "@[Foo( 1, 2, foo: 3 )]" formats "@[Foo( 1, 2, foo: 3 )]" + formats "def foo(a : T) forall T \n #\nend" formats "def foo(a : T) forall T \n #\nend" + formats ":&" formats ":&" + formats "def foo(&block: Int32)\nend" formats "def foo(&block: Int32)\nend" + formats "if 1\n2\nelsif\n3\n4\nelse\n6\nend" formats "if 1\n2\nelsif\n3\n4\nelse\n6\nend" + formats "lib Foo\nstruct Foo\nend\nend" formats "lib Foo\nstruct Foo\nend\nend" + formats "1 + \n2" formats "1 + \n2" + formats "if 1 # foo\nend" formats "if 1 # foo\nend" + formats "asm(\"a\" : : : : \"volatile\")" formats "asm(\"a\" : : : : \"volatile\")" + formats "foo(out x)" formats "foo(out x)" + formats "{% if z %}\n 1\n{% end %}\n\ndef foo\n z =\n 123 + # foo\n 4 # bar\n\n 1\nend" formats "{% if z %}\n 1\n{% end %}\n\ndef foo\n z =\n 123 + # foo\n 4 # bar\n\n 1\nend" + formats "select\nwhen foo # foo\n # bar\nelse # foo\n # bar\nend" formats "select\nwhen foo # foo\n # bar\nelse # foo\n # bar\nend" + formats "foo . bar()" formats "foo . bar()" + formats "a = 1\na ||= begin\n 1\nend" formats "a = 1\na ||= begin\n 1\nend" + formats "1" formats "1" + formats "x = 1\nx += 1" formats "x = 1\nx += 1" + formats "class Foo\n1\n\n# foo\nend" formats "class Foo\n1\n\n# foo\nend" + formats "foo (1; 2)" formats "foo (1; 2)" + formats "{ %w() }" formats "{ %w() }" + formats "lib Foo\n fun foo =\n\n\n bar(Int32) : Int32\nend" formats "lib Foo\n fun foo =\n\n\n bar(Int32) : Int32\nend" + formats "1&+2&*3" formats "1&+2&*3" + formats "-> :: foo!" formats "-> :: foo!" + formats "while 1 # foo\n # bar\n 2\nend" formats "while 1 # foo\n # bar\n 2\nend" + formats "foo = 1\n->foo.foo=" formats "foo = 1\n->foo.foo=" + formats "/ /" formats "/ /" + formats "foo = {1, {2,\n 3},\n 4}" formats "foo = {1, {2,\n 3},\n 4}" + formats "def foo(a : T) forall T\n #\n\nend" formats "def foo(a : T) forall T\n #\n\nend" + formats "macro foo\n def bar\n {{\n 1 + 2\n }}\n end\nend" formats "macro foo\n def bar\n {{\n 1 + 2\n }}\n end\nend" + formats "begin\n begin\n\n end\nend" formats "begin\n begin\n\n end\nend" + formats "%{hello}" formats "%{hello}" + formats "1 #=>2" formats "1 #=>2" + formats "foo . responds_to?( :bar )" formats "foo . responds_to?( :bar )" + formats "loop do\n 1\nrescue\n 2\nend" formats "loop do\n 1\nrescue\n 2\nend" + formats "asm(\"a\" : \"b\"(1), \"c\"(2) : \"d\"(3) : : \"volatile\")" formats "asm(\"a\" : \"b\"(1), \"c\"(2) : \"d\"(3) : : \"volatile\")" + formats "case 1 # foo\nwhen 2 then 3 # bar\nwhen 4 then 5 # baz\nelse 6 # zzz\nend" formats "case 1 # foo\nwhen 2 then 3 # bar\nwhen 4 then 5 # baz\nelse 6 # zzz\nend" + formats "case 1 \n when 2 \n 3 \n end" formats "case 1 \n when 2 \n 3 \n end" + formats "begin\n1\nensure\n2\nend" formats "begin\n1\nensure\n2\nend" + formats "foo(1 &- 2)" formats "foo(1 &- 2)" + formats "break *1" formats "break *1" + formats "until 1\n2\nend" formats "until 1\n2\nend" + formats "foo(1, ) do\nend" formats "foo(1, ) do\nend" + formats "foo = 1\n->foo.bar(Int32*)" formats "foo = 1\n->foo.bar(Int32*)" + formats "foo[x: 1, &.bar] ||= 1" formats "foo[x: 1, &.bar] ||= 1" + formats "-> :: Foo . foo=" formats "-> :: Foo . foo=" + formats "->@@foo.foo?" formats "->@@foo.foo?" + formats "foo . responds_to? :bar" formats "foo . responds_to? :bar" + formats "foo(bar([\n 1,\n]))" formats "foo(bar([\n 1,\n]))" + formats "foo do # hello\nend" formats "foo do # hello\nend" + formats "class Foo\nx = 1\nend" formats "class Foo\nx = 1\nend" + formats "Foo::Bar(T, U?)?" formats "Foo::Bar(T, U?)?" + formats "alias A = (B)" formats "alias A = (B)" + formats "1.>= do\nend" formats "1.>= do\nend" Crystal::Repl::Interpreter types - interprets crystal_type_id for virtual metaclass type (#12228) interprets crystal_type_id for virtual metaclass type (#12228) does class method on virtual metaclass casted to generic metaclass (#12302) does class method on virtual metaclass casted to generic metaclass (#12302) + discards .class discards .class + discards Path discards Path interprets path to type interprets path to type + interprets class for virtual_type type (struct) interprets class for virtual_type type (struct) + discards typeof discards typeof interprets class_crystal_instance_type_id interprets class_crystal_instance_type_id - interprets class for non-union type interprets class for non-union type discards class for virtual_type type discards class for virtual_type type - discards crystal_type_id discards crystal_type_id - interprets class for virtual_type type (struct) interprets class for virtual_type type (struct) - interprets crystal_type_id for nil interprets crystal_type_id for nil discards class for non-union type discards class for non-union type - discards .class discards .class - discards typeof discards typeof - discards Path discards Path discards generic discards generic + discards crystal_type_id discards crystal_type_id + interprets class for non-union type interprets class for non-union type + interprets crystal_type_id for nil interprets crystal_type_id for nil interprets crystal_type_id for non-nil interprets crystal_type_id for non-nil interprets class for module type (#12203) interprets class for module type (#12203) + interprets crystal_type_id for virtual metaclass type (#12228) interprets crystal_type_id for virtual metaclass type (#12228) interprets class for virtual_type type interprets class for virtual_type type -Code gen: asm - codegens with two inputs codegens with two inputs - codegens with two outputs codegens with two outputs - codegens without inputs codegens without inputs - codegens with intel dialect codegens with intel dialect - codegens with one input codegens with one input - passes correct string length to LLVM passes correct string length to LLVM -Semantic: c enum - types enum value with base type types enum value with base type - types enum value types enum value - errors if enum base type is not an integer errors if enum base type is not an integer - allows using an enum as a type in a struct allows using an enum as a type in a struct - errors if enum value is different from default (Int32) (#194) errors if enum value is different from default (Int32) (#194) - allows using an enum as a type in a fun allows using an enum as a type in a fun -Semantic: new - evaluates initialize default value at the instance scope (4) (#731) evaluates initialize default value at the instance scope (4) (#731) - inherits initialize and new methods if doesn't define new (#3238) inherits initialize and new methods if doesn't define new (#3238) - errors if using self call in default argument (2) errors if using self call in default argument (2) - evaluates initialize default value at the instance scope (6) (#731) evaluates initialize default value at the instance scope (6) (#731) - errors if using self call in default argument (3) errors if using self call in default argument (3) - evaluates initialize default value at the instance scope (2) (#731) evaluates initialize default value at the instance scope (2) (#731) - errors if using self call in default argument (1) errors if using self call in default argument (1) - doesn't have default new for inherited class from generic type doesn't have default new for inherited class from generic type - uses correct receiver for `initialize` in namespaced generic classes (#4086) uses correct receiver for `initialize` in namespaced generic classes (#4086) - evaluates initialize default value at the instance scope (3) (#731) evaluates initialize default value at the instance scope (3) (#731) - doesn't incorrectly redefines new for generic class doesn't incorrectly redefines new for generic class - evaluates initialize default value at the instance scope (1) (#731) evaluates initialize default value at the instance scope (1) (#731) - evaluates initialize default value at the instance scope (5) (#731) evaluates initialize default value at the instance scope (5) (#731) -Code gen: experimental - errors if missing link arguments errors if missing link arguments - errors if too many arguments errors if too many arguments - compiles with single string argument compiles with single string argument - errors if invalid argument type errors if invalid argument type - compiles with no argument compiles with no argument -Semantic: offsetof - errors on undefined instance variable errors on undefined instance variable - can be used with generic types can be used with generic types - gives error if using offsetof on something that's neither a class, a struct nor a Tuple gives error if using offsetof on something that's neither a class, a struct nor a Tuple - gives error if using offsetof on non-Tuples with an index gives error if using offsetof on non-Tuples with an index - gives error if using offsetof on Tuples with indexes greater than tuple size gives error if using offsetof on Tuples with indexes greater than tuple size - gives error if using offsetof on Tuples with negative indexes gives error if using offsetof on Tuples with negative indexes - types offsetof types offsetof - errors on typeof inside offsetof expression errors on typeof inside offsetof expression - can be used with classes can be used with classes - gives error if using offsetof on Tuples with instance variables gives error if using offsetof on Tuples with instance variables - errors on offsetof element of uninstantiated generic type errors on offsetof element of uninstantiated generic type - gives error if using offsetof on something that can't have instance variables gives error if using offsetof on something that can't have instance variables -Normalize: string interpolation - replaces through multiple levels replaces through multiple levels - replaces string constant replaces string constant - normalizes heredoc normalizes heredoc - normalizes string interpolation normalizes string interpolation - replaces string constant that results from macro expansion replaces string constant that results from macro expansion - normalizes string interpolation with multiple lines normalizes string interpolation with multiple lines -Code gen: next - codegens next conditionally with int type (2) codegens next conditionally with int type (2) - codegens next codegens next - codegens next with while inside block codegens next with while inside block - codegens next with break (1) codegens next with break (1) - codegens next with break (2) codegens next with break (2) - codegens next without expressions codegens next without expressions - codegens next conditionally codegens next conditionally - codegens next with break (3) codegens next with break (3) -Semantic: special vars - types $? when not defined as no return (2) types $? when not defined as no return (2) - types $~ when not defined as no return types $~ when not defined as no return - infers in block infers in block - types $~ when not defined as no return (2) types $~ when not defined as no return (2) - infers after block infers after block - infers in block with nested block infers in block with nested block - infers when assigning inside block infers when assigning inside block - errors if assigning $? at top level errors if assigning $? at top level - types $? when not defined as no return types $? when not defined as no return - errors if assigning $~ at top level errors if assigning $~ at top level - infers $~ infers $~ - infers $? infers $? -Normalize: def - expands def with reserved external name (#6559) expands def with reserved external name (#6559) - expands a def on request with default arguments and type restrictions expands a def on request with default arguments and type restrictions - expands with magic constant specifying one when not all are magic expands with magic constant specifying one when not all are magic - expands with magic constant with named arg expands with magic constant with named arg - expands with two named argument and one not expands with two named argument and one not - expands with more named arg which come in the correct order expands with more named arg which come in the correct order - expands a def with external names (1) expands a def with external names (1) - expands a def on request with default arguments that yields (external names) expands a def on request with default arguments that yields (external names) - expands a def with splat and double splat expands a def with splat and double splat - expands a def with double splat and two named args and regular args expands a def with double splat and two named args and regular args - expands with magic constant specifying one when all are magic expands with magic constant specifying one when all are magic - expands with one named arg that is the only one (2) expands with one named arg that is the only one (2) - expands a def on request with default arguments that yields (2) expands a def on request with default arguments that yields (2) - expands a def on request with default arguments (2) expands a def on request with default arguments (2) - expands a def on request with default arguments and type restrictions (2) expands a def on request with default arguments and type restrictions (2) - expands a def on request with default arguments (external names) expands a def on request with default arguments (external names) - expands with splat and default argument expands with splat and default argument - expands a def with double splat and no args expands a def with double splat and no args - expands with splat and zero expands with splat and zero - expands arg with default value after splat expands arg with default value after splat - expands with one named arg that is the only one (1) expands with one named arg that is the only one (1) - expands a def with external names (2) expands a def with external names (2) - expands a def on request with default arguments expands a def on request with default arguments - expands with splat with one arg before expands with splat with one arg before - expands with named argument and yield expands with named argument and yield - expands a new def with double splat and two named args and regular args expands a new def with double splat and two named args and regular args - expands with magic constant expands with magic constant - expands a def on request with default arguments that yields expands a def on request with default arguments that yields - expands a def with double splat and two named args expands a def with double splat and two named args - expands with named argument expands with named argument - expands with splat expands with splat - expands with two named argument expands with two named argument - uses bare * uses bare * - gives correct body location with - block instance var arg, without body block instance var arg, without body - splat arg, with body splat arg, with body - default arg with restriction, without body default arg with restriction, without body - default arg, with body default arg, with body - block instance var arg, with body block instance var arg, with body - splat arg, without body splat arg, without body - default arg, without body default arg, without body - default arg with restriction, with body default arg with restriction, with body - expands with magic constant with named arg with yield expands with magic constant with named arg with yield - expands default value after splat index expands default value after splat index -Semantic: while - types endless while with break with value types endless while with break with value - types endless while with multiple breaks with value types endless while with multiple breaks with value - finds all while cond assign targets in expressions (6) finds all while cond assign targets in expressions (6) - restricts type after `while` with `not` and `and` (#4242) restricts type after `while` with `not` and `and` (#4242) - types while with break without value types while with break without value - types while with assignment and && types while with assignment and && - uses var type inside while if endless loop uses var type inside while if endless loop - types while types while - finds while cond assign target in Not (#10345) finds while cond assign target in Not (#10345) - doesn't use type at end of endless while if variable is reassigned (2) doesn't use type at end of endless while if variable is reassigned (2) - types while with break with value types while with break with value - doesn't fail on Expressions condition (2) doesn't fail on Expressions condition (2) - doesn't use type at end of endless while if variable is reassigned (3) doesn't use type at end of endless while if variable is reassigned (3) - uses type at end of endless while if variable is reassigned, but not before first break uses type at end of endless while if variable is reassigned, but not before first break - types while with multiple breaks with value types while with multiple breaks with value - uses var type inside while if endless loop (2) uses var type inside while if endless loop (2) - types variable as nilable if raise before assign types variable as nilable if raise before assign - doesn't type var as nilable after break inside rescue doesn't type var as nilable after break inside rescue - restricts type after while (#4242) restricts type after while (#4242) - doesn't fail on nested conditionals inside typeof condition doesn't fail on nested conditionals inside typeof condition - reports next cannot be used outside a while reports next cannot be used outside a while - marks variable as nil if breaking before assigning to it in an endless loop marks variable as nil if breaking before assigning to it in an endless loop - doesn't fail on Expressions condition (1) doesn't fail on Expressions condition (1) - types while with && (#1425) types while with && (#1425) - finds all while cond assign targets in expressions (4) finds all while cond assign targets in expressions (4) - types endless while with break without value types endless while with break without value - restricts type after while with not (#4242) restricts type after while with not (#4242) - doesn't fail on new variables inside typeof condition doesn't fail on new variables inside typeof condition - doesn't modify var's type before while doesn't modify var's type before while - types while with assignment types while with assignment - marks variable as nil if breaking before assigning to it in an endless loop (2) marks variable as nil if breaking before assigning to it in an endless loop (2) - types while true as NoReturn types while true as NoReturn - types while (true) as NoReturn types while (true) as NoReturn - reports break cannot be used outside a while reports break cannot be used outside a while - finds all while cond assign targets in expressions (5) finds all while cond assign targets in expressions (5) - finds all while cond assign targets in expressions (3) finds all while cond assign targets in expressions (3) - types while with assignment and call types while with assignment and call - finds all while cond assign targets in expressions (#10350) finds all while cond assign targets in expressions (#10350) - finds all while cond assign targets in expressions (2) finds all while cond assign targets in expressions (2) - doesn't restrict type after while if there's a break (#4242) doesn't restrict type after while if there's a break (#4242) - doesn't use type at end of endless while if variable is reassigned doesn't use type at end of endless while if variable is reassigned - uses type at end of endless while if variable is reassigned, but not before first break (2) uses type at end of endless while if variable is reassigned, but not before first break (2) - rebinds condition variable after while body (#6158) rebinds condition variable after while body (#6158) - types while ((true)) as NoReturn types while ((true)) as NoReturn -Crystal::Repl::Interpreter - calls - inlines call that returns self inlines call that returns self - mutates through pointer (1) mutates through pointer (1) - mutates through inlined instance var without receiver mutates through inlined instance var without receiver - does call on var that's a struct, takes a pointer to instance var, inside if does call on var that's a struct, takes a pointer to instance var, inside if - does call on constant that's a struct, takes a pointer to instance var, inside if does call on constant that's a struct, takes a pointer to instance var, inside if - calls a top-level method with two arguments calls a top-level method with two arguments - inlines method that just reads an instance var, but produces side effects of args inlines method that just reads an instance var, but produces side effects of args - does Assign class var with wants_struct_pointer does Assign class var with wants_struct_pointer - mutates call argument mutates call argument - does call on ivar that's a struct, takes a pointer to instance var, inside if does call on ivar that's a struct, takes a pointer to instance var, inside if - does call on constant that's a struct, takes a pointer to instance var does call on constant that's a struct, takes a pointer to instance var - does call on instance var that's a struct, from a class does call on instance var that's a struct, from a class - does ReadInstanceVar with wants_struct_pointer does ReadInstanceVar with wants_struct_pointer - calls a top-level method without arguments but with local vars calls a top-level method without arguments but with local vars - interprets implicit self call for pointer interprets implicit self call for pointer - mutates through pointer (3) mutates through pointer (3) - interprets explicit self call for primitive types interprets explicit self call for primitive types - discards call with struct as obj discards call with struct as obj - does call on instance var that's a struct, from a struct does call on instance var that's a struct, from a struct - calls a top-level method without arguments and no local vars calls a top-level method without arguments and no local vars - mutates through pointer (2) mutates through pointer (2) - does call on read instance var that's a struct, takes a pointer to instance var does call on read instance var that's a struct, takes a pointer to instance var - interprets call with if interprets call with if - does call with struct as obj does call with struct as obj - mutates through read instance var mutates through read instance var - interprets call with default values interprets call with default values - puts struct pointer after tuple indexer puts struct pointer after tuple indexer - does Assign var with wants_struct_pointer does Assign var with wants_struct_pointer - does call on self that's a struct, takes a pointer to instance var, inside if does call on self that's a struct, takes a pointer to instance var, inside if - does call with struct as obj (2) does call with struct as obj (2) - inlines call that returns self (2) inlines call that returns self (2) - inlines method that just reads an instance var (2) inlines method that just reads an instance var (2) - interprets self for primitive types interprets self for primitive types - inlines method that just reads an instance var inlines method that just reads an instance var - does Assign instance var with wants_struct_pointer does Assign instance var with wants_struct_pointer - does call on Pointer#value that's a struct, takes a pointer to instance var does call on Pointer#value that's a struct, takes a pointer to instance var - mutates through inlined instance var with receiver mutates through inlined instance var with receiver - interprets call with named arguments interprets call with named arguments -Code gen: new - codegens instance method with allocate codegens instance method with allocate - evaluates initialize default value at the instance scope (3) (#731) evaluates initialize default value at the instance scope (3) (#731) - can create Reference can create Reference - codegens instance method with new and instance var codegens instance method with new and instance var - overloads new and initialize, 1 (#2489) overloads new and initialize, 1 (#2489) - can create Tuple with Tuple.new can create Tuple with Tuple.new can create Tuple with Tuple.new can create Tuple with Tuple.new can create Tuple with Tuple.new�� can create Tuple with Tuple.new���������� can create Tuple with Tuple.new can create Tuple with Tuple.new���� can create Tuple with Tuple.new can create Tuple with Tuple.new - inherits initialize inherits initialize - evaluates initialize default value at the instance scope (4) (#731) evaluates initialize default value at the instance scope (4) (#731) - inherits initialize for generic type inherits initialize for generic type - evaluates initialize default value at the instance scope (1) (#731) evaluates initialize default value at the instance scope (1) (#731) - codegens instance method with new codegens instance method with new - finds new in superclass if no initialize is defined (2) finds new in superclass if no initialize is defined (2) - overloads new and initialize, 3 (#2489) overloads new and initialize, 3 (#2489) - finds super in deep hierarchy finds super in deep hierarchy - finds new in superclass if no initialize is defined (1) finds new in superclass if no initialize is defined (1) - evaluates initialize default value at the instance scope (2) (#731) evaluates initialize default value at the instance scope (2) (#731) - defines new for module defines new for module - overloads new and initialize, 2 (#2489) overloads new and initialize, 2 (#2489) - finds new in superclass for Enum finds new in superclass for Enum -Normalize: multi assign - normalizes m to n, with *_ on left-hand side (3) normalizes m to n, with *_ on left-hand side (3) - normalizes n to splat on left-hand side normalizes n to splat on left-hand side - normalizes 1 to n, with *_ on left-hand side (3) normalizes 1 to n, with *_ on left-hand side (3) - normalizes m to n, with splat on left-hand side, splat is non-empty normalizes m to n, with splat on left-hand side, splat is non-empty - normalizes n to n normalizes n to n - normalizes m to n, with splat on left-hand side, splat is empty normalizes m to n, with splat on left-hand side, splat is empty - strict_multi_assign - normalizes 1 to n with [] normalizes 1 to n with [] - normalizes 1 to n with call normalizes 1 to n with call - normalizes 1 to n normalizes 1 to n - normalizes m to n, with *_ on left-hand side (2) normalizes m to n, with *_ on left-hand side (2) - normalizes 1 to n, with *_ on left-hand side (1) normalizes 1 to n, with *_ on left-hand side (1) - normalizes m to n, with *_ on left-hand side (1) normalizes m to n, with *_ on left-hand side (1) - normalizes n to n with [] normalizes n to n with [] - normalizes n to n with call normalizes n to n with call - without strict_multi_assign - normalizes 1 to n with [] normalizes 1 to n with [] - normalizes 1 to n normalizes 1 to n - normalizes 1 to n with call normalizes 1 to n with call - normalizes 1 to splat on left-hand side normalizes 1 to splat on left-hand side - normalizes 1 to *_ on left-hand side normalizes 1 to *_ on left-hand side - normalizes 1 to n, with splat on left-hand side, splat before other targets normalizes 1 to n, with splat on left-hand side, splat before other targets - normalizes 1 to n, with splat on left-hand side normalizes 1 to n, with splat on left-hand side - normalizes 1 to n, with splat on left-hand side, splat after other targets normalizes 1 to n, with splat on left-hand side, splat after other targets - normalizes 1 to n, with *_ on left-hand side (2) normalizes 1 to n, with *_ on left-hand side (2) - normalizes n to *_ on left-hand side normalizes n to *_ on left-hand side -Semantic: primitives - types 1 + 2 types 1 + 2 - types @[Primitive] method types @[Primitive] method - Slice.literal - with element type - types empty literal types empty literal - errors if element type is not primitive int or float errors if element type is not primitive int or float - errors if element is not number literal errors if element is not number literal - types primitive int literal types primitive int literal - errors if element is out of range errors if element is out of range - types primitive float literal types primitive float literal - types a float32 types a float32 - errors if @[Primitive] has no args errors if @[Primitive] has no args - errors if using instance variable inside primitive type errors if using instance variable inside primitive type - extends from Number and doesn't find + method extends from Number and doesn't find + method - correctly types first hash from type vars (bug) correctly types first hash from type vars (bug) - allows @[Primitive] on method that has body allows @[Primitive] on method that has body - types nil types nil - types an int32 types an int32 - types an expression types an expression - types char ord types char ord - extends from Number and doesn't find >= method extends from Number and doesn't find >= method - computes correct hash value type if it's a function literal (#320) computes correct hash value type if it's a function literal (#320) - extends from Number and doesn't find to_i method extends from Number and doesn't find to_i method - types nop types nop - types a symbol types a symbol - can invoke binary on primitive typedef (2) (#614) can invoke binary on primitive typedef (2) (#614) - can invoke binary on primitive typedef (#614) can invoke binary on primitive typedef (#614) - types pointer of int types pointer of int - types a char types a char - types va_arg primitive types va_arg primitive - types a string types a string - Reference.pre_initialize - errors on abstract type errors on abstract type - types with virtual reference type types with virtual reference type - types with reference type types with reference type - errors on uninstantiated generic type errors on uninstantiated generic type - looks up return type in correct scope (#13652) looks up return type in correct scope (#13652) - errors when comparing void (#225) errors when comparing void (#225) - types a int128 types a int128 - types a uint128 types a uint128 - types a int64 types a int64 - can invoke cast on primitive typedef (#614) can invoke cast on primitive typedef (#614) - types a bool types a bool - errors if @[Primitive] has non-symbol arg errors if @[Primitive] has non-symbol arg - types a float64 types a float64 +Code gen: c enum + codegens enum with 10 // 2 codegens enum with 10 // 2 + codegens enum with 3 &* 2 codegens enum with 3 &* 2 + codegens enum with ~1 codegens enum with ~1 + codegens enum that refers to another enum constant codegens enum that refers to another enum constant + codegens enum value codegens enum value + codegens enum with -1 codegens enum with -1 + codegens enum that refers to another constant codegens enum that refers to another constant + codegens enum with 10 ^ 3 codegens enum with 10 ^ 3 + codegens enum with +1 codegens enum with +1 + codegens enum value 3 codegens enum value 3 + codegens enum with (1 + 2) * 3 codegens enum with (1 + 2) * 3 + codegens enum with 3 &- 2 codegens enum with 3 &- 2 + codegens enum with 100 >> 3 codegens enum with 100 >> 3 + codegens enum with 10 | 3 codegens enum with 10 | 3 + codegens enum value 4 codegens enum value 4 + codegens enum with 3 - 2 codegens enum with 3 - 2 + codegens enum value 2 codegens enum value 2 + codegens enum with 3 * 2 codegens enum with 3 * 2 + codegens enum with 1 + 2 codegens enum with 1 + 2 + codegens enum with 1 &+ 2 codegens enum with 1 &+ 2 + codegens enum with 1 << 3 codegens enum with 1 << 3 + codegens enum with 10 & 3 codegens enum with 10 & 3 + codegens enum with 10 % 3 codegens enum with 10 % 3 +Lexer macro + lexes macro with embedded string with %[ lexes macro with embedded string with %[ + lexes macro var lexes macro var + lexes macro with nested macro lexes macro with nested macro + lexes macro with nested embedded string with %( lexes macro with nested embedded string with %( + lexes macro with embedded char and sharp lexes macro with embedded char and sharp + lexes macro with semicolon before end lexes macro with semicolon before end + lexes macro with curly escape lexes macro with curly escape + lexes begin end lexes begin end + lexes macro with embedded string with %< ignores begin lexes macro with embedded string with %< ignores begin + lexes with for inside escaped macro (#1029) lexes with for inside escaped macro (#1029) + lexes macro with embedded string lexes macro with embedded string + lexes macro with string interpolation and double curly brace lexes macro with string interpolation and double curly brace + lexes macro with nested annotation lexes macro with nested annotation + lexes macro with nested struct lexes macro with nested struct + reaches end reaches end + lexes macro with comments lexes macro with comments + doesn't lex macro var if escaped doesn't lex macro var if escaped + lexes with if/end inside escaped macro (#1029) lexes with if/end inside escaped macro (#1029) + lexes macro with embedded string with %[ ignores begin lexes macro with embedded string with %[ ignores begin + lexes macro with nested def lexes macro with nested def + lexes bug #654 lexes bug #654 + lexes macro with nested class lexes macro with nested class + lexes macro with nested while lexes macro with nested while + lexes macro with curly escape in comment lexes macro with curly escape in comment + lexes macro with embedded string and expression lexes macro with embedded string and expression + lexes macro with if as suffix after return lexes macro with if as suffix after return + lexes macro with nested abstract struct lexes macro with nested abstract struct + lexes macro without nested if lexes macro without nested if + lexes macro with embedded string and backslash lexes macro with embedded string and backslash + keeps correct line number after lexes the part of keyword and newline (#4656) keeps correct line number after lexes the part of keyword and newline (#4656) + lexes macro with nested abstract class lexes macro with nested abstract class + lexes macro with nested begin lexes macro with nested begin + skips whitespace skips whitespace + lexes macro with slash not followed by curly lexes macro with slash not followed by curly + lexes macro with if as suffix lexes macro with if as suffix + lexes macro with expression lexes macro with expression + lexes macro with nested lib lexes macro with nested lib + lexes macro with nested case lexes macro with nested case + lexes macro with comments and expressions lexes macro with comments and expressions + lexes macro with nested abstract def lexes macro with nested abstract def + lexes macro with nested union lexes macro with nested union + lexes macro with embedded string with %( ignores begin lexes macro with embedded string with %( ignores begin + lexes macro with nested do lexes macro with nested do + lexes macro with embedded string with %< lexes macro with embedded string with %< + lexes macro with embedded string with %( lexes macro with embedded string with %( + lexes macro with nested module lexes macro with nested module + keeps correct column and line numbers keeps correct column and line numbers + lexes macro with nested select lexes macro with nested select + lexes macro with if after assign lexes macro with if after assign + lexes macro with nested enum lexes macro with nested enum + lexes macro with nested fun lexes macro with nested fun + lexes macro with control lexes macro with control + lexes with unless inside escaped macro (#5664) lexes with unless inside escaped macro (#5664) + lexes macro with nested if lexes macro with nested if + lexes simple macro lexes simple macro + lexes macro with nested until lexes macro with nested until + lexes macro with nested unless lexes macro with nested unless + lexes escaped quote inside string (#895) lexes escaped quote inside string (#895) Parser doc - includes doc for fun def includes doc for fun def - includes doc for abstract class includes doc for abstract class - includes doc for class includes doc for class + includes doc for macro includes doc for macro + disables doc parsing inside defs disables doc parsing inside defs includes doc for def includes doc for def - includes doc for constant assign includes doc for constant assign - includes doc for alias includes doc for alias + includes doc for class includes doc for class includes doc for call without obj includes doc for call without obj - disables doc parsing inside defs disables doc parsing inside defs + includes doc for struct includes doc for struct + includes doc for constant assign includes doc for constant assign + includes doc for abstract class includes doc for abstract class + includes doc for fun def includes doc for fun def includes doc for module includes doc for module - includes doc for abstract def includes doc for abstract def - includes doc for private def includes doc for private def + includes doc for alias includes doc for alias includes doc for enum def includes doc for enum def - includes doc for struct includes doc for struct includes doc for annotation includes doc for annotation - includes doc for macro includes doc for macro -Semantic: class - allows using self in class scope allows using self in class scope - says wrong number of arguments for abstract class new says wrong number of arguments for abstract class new - uses number type var in class method uses number type var in class method - inherits self twice (#5495) inherits self twice (#5495) - errors if using underscore in generic class errors if using underscore in generic class - errors if declares class inside if errors if declares class inside if - doesn't mark instance variable as nilable if calling another initialize doesn't mark instance variable as nilable if calling another initialize - errors if reopening generic class with different splat index (2) errors if reopening generic class with different splat index (2) - doesn't error on new on abstract virtual type class doesn't error on new on abstract virtual type class - preserves order of instance vars (#3050) preserves order of instance vars (#3050) - allows defining classes inside modules or classes with :: allows defining classes inside modules or classes with :: - allows declaring a variable in an initialize and using it allows declaring a variable in an initialize and using it - errors if reopening generic class with different splat index (3) errors if reopening generic class with different splat index (3) - doesn't lookup new in supermetaclass doesn't lookup new in supermetaclass - can use short name for top-level type can use short name for top-level type - errors if inherits from metaclass errors if inherits from metaclass - types instance variable on getter types instance variable on getter - can invoke method on abstract generic type with subclasses but no instances can invoke method on abstract generic type with subclasses but no instances - can't reopen as module can't reopen as module - types recursive type types recursive type - errors if reopening non-generic class as generic errors if reopening non-generic class as generic - doesn't crash on instance variable assigned a proc, and never instantiated (#923) doesn't crash on instance variable assigned a proc, and never instantiated (#923) - reads an object instance var reads an object instance var - types type var union types type var union - types Const#new types Const#new - can mark initialize as private can mark initialize as private - does automatic type inference of new for generic types 2 does automatic type inference of new for generic types 2 - correctly types #680 correctly types #680 - infers generic type after instance was created with explicit type infers generic type after instance was created with explicit type - finds in global scope if includes module finds in global scope if includes module - can't use implicit initialize if defined in parent can't use implicit initialize if defined in parent - errors if reopening generic class with different type vars (2) errors if reopening generic class with different type vars (2) - can invoke method on abstract generic type without subclasses nor instances can invoke method on abstract generic type without subclasses nor instances - reads an object instance var from a union type reads an object instance var from a union type - types instance variable types instance variable - errors if reading ivar from non-ivar container errors if reading ivar from non-ivar container - types Const#new#method types Const#new#method - doesn't use initialize from base class doesn't use initialize from base class - errors if creating instance before typing instance variable errors if creating instance before typing instance variable - does automatic inference of new for generic types does automatic inference of new for generic types - errors when wrong arguments for new errors when wrong arguments for new - reports can't instantiate abstract class on allocate reports can't instantiate abstract class on allocate - errors when creating Value errors when creating Value - says wrong number of arguments for abstract class new (2) says wrong number of arguments for abstract class new (2) - can invoke method on abstract type without subclasses nor instances can invoke method on abstract type without subclasses nor instances - types as no return if calling method on abstract class with generic subclasses but no instances (#6996) types as no return if calling method on abstract class with generic subclasses but no instances (#6996) - types virtual method of generic class types virtual method of generic class - can't reopen as struct can't reopen as struct - errors on no method found on abstract class, class method (#2241) errors on no method found on abstract class, class method (#2241) - types Const#allocate types Const#allocate - types as no return if calling method on generic class with subclasses (#6996) types as no return if calling method on generic class with subclasses (#6996) - errors if reading non-existent ivar errors if reading non-existent ivar - does automatic type inference of new for nested generic type does automatic type inference of new for nested generic type - uses self as type var uses self as type var - allows instantiating generic class with number allows instantiating generic class with number - reports uninitialized constant reports uninitialized constant - reports undefined instance method reports undefined instance method - reads a virtual type instance var reads a virtual type instance var - errors if reopening generic class with different splat index errors if reopening generic class with different splat index - doesn't use initialize from base class with virtual type doesn't use initialize from base class with virtual type - says that instance vars are not allowed in metaclass says that instance vars are not allowed in metaclass - types as no return if calling method on abstract class with all abstract subclasses (#6996) types as no return if calling method on abstract class with all abstract subclasses (#6996) - types class and subclass as one type types class and subclass as one type - correctly types #680 (2) correctly types #680 (2) - types self inside method call without obj types self inside method call without obj - errors if reopening generic class with different type vars errors if reopening generic class with different type vars - types generic of generic type types generic of generic type - errors if inheriting Gen(self) and there's no self (#2890) errors if inheriting Gen(self) and there's no self (#2890) - doesn't mix classes on definition (#2352) doesn't mix classes on definition (#2352) - types class and subclass as one type types class and subclass as one type - types bug #168 (it inherits instance var even if not mentioned in initialize) types bug #168 (it inherits instance var even if not mentioned in initialize) - types as no return if calling method on abstract generic class (#6996) types as no return if calling method on abstract generic class (#6996) - doesn't crash with top-level initialize (#2601) doesn't crash with top-level initialize (#2601) - reports wrong number of arguments for initialize reports wrong number of arguments for initialize - types instance variable types instance variable - doesn't lookup type in parents' namespaces, and lookups and in program doesn't lookup type in parents' namespaces, and lookups and in program - types class and subclass as one type types class and subclass as one type - uses self as type var uses self as type var - errors if inherits from module errors if inherits from module - inherits self (#2890) inherits self (#2890) - inherits Gen(self) (#2890) inherits Gen(self) (#2890) - types class inside class types class inside class - reports undefined method when method inside a class reports undefined method when method inside a class - reports superclass mismatch reports superclass mismatch - reports can't instantiate abstract class on new reports can't instantiate abstract class on new - errors when creating Number errors when creating Number - says no overload matches for class new says no overload matches for class new - hoists instance variable initializer hoists instance variable initializer - errors if assigning superclass to declared instance var errors if assigning superclass to declared instance var - type def does not reopen type from parent namespace (#11181) type def does not reopen type from parent namespace (#11181) - errors if using read-instance-var with non-typed variable errors if using read-instance-var with non-typed variable - reports unknown class when extending reports unknown class when extending + includes doc for abstract def includes doc for abstract def + includes doc for private def includes doc for private def +Semantic: splat + overloads with type restriction and splat (7) overloads with type restriction and splat (7) + uses splat restriction with concrete type uses splat restriction with concrete type + matches with type var splat inside explicit Union, when one splat fails entirely matches with type var splat inside explicit Union, when one splat fails entirely + matches with type var splat inside explicit Union, when all splat elements match matches with type var splat inside explicit Union, when all splat elements match + overloads with splat against method with two arguments (#986) (2) overloads with splat against method with two arguments (#986) (2) + matches type splat with splat in generic type (2) matches type splat with splat in generic type (2) + works if matches splat with type restriction works if matches splat with type restriction + overloads with type restriction and splat (3) overloads with type restriction and splat (3) + splats splats + gives correct error when forwarding splat (2) gives correct error when forwarding splat (2) + errors with too few non-splat type arguments (2) errors with too few non-splat type arguments (2) + overloads with type restriction and splat (2) overloads with type restriction and splat (2) + says missing argument because positional args don't match past splat says missing argument because positional args don't match past splat + errors with too few non-splat type arguments (1) errors with too few non-splat type arguments (1) + Crystal::Splat + with splat with splat + without splat without splat + accesses T when empty, via module accesses T when empty, via module + doesn't shift a call's location doesn't shift a call's location + matches with tuple splat inside explicit Union matches with tuple splat inside explicit Union + calls super with implicit splat arg (#1001) calls super with implicit splat arg (#1001) + matches with type var splat inside explicit Union (2) matches with type var splat inside explicit Union (2) + overloads with type restriction and splat (5) overloads with type restriction and splat (5) + method with splat and optional named argument matches zero args call (#2746) method with splat and optional named argument matches zero args call (#2746) + errors with too many non-splat type arguments errors with too many non-splat type arguments + uses splat restriction after non-splat arguments (#5037) uses splat restriction after non-splat arguments (#5037) + matches type splat with splat in generic type (1) matches type splat with splat in generic type (1) + forwards tuple with an extra argument forwards tuple with an extra argument + overloads with type restriction and splat (4) overloads with type restriction and splat (4) + uses bare * uses bare * + matches with type var and splat of itself inside explicit Union matches with type var and splat of itself inside explicit Union + errors if using two splat indices on restriction errors if using two splat indices on restriction + splats arg and splat against splat (1) (#1042) splats arg and splat against splat (1) (#1042) + matches with splat matches with splat + matches with type var and splat of itself inside explicit Union (2) matches with type var and splat of itself inside explicit Union (2) + uses splat restriction, matches empty uses splat restriction, matches empty + says no overload matches on type restrictions past the splat arg says no overload matches on type restrictions past the splat arg + uses bare *, doesn't let more args uses bare *, doesn't let more args + uses splat restriction uses splat restriction + errors if doesn't match splat with type restriction errors if doesn't match splat with type restriction + overloads with type restriction and splat (6) overloads with type restriction and splat (6) + redefines method with splat (bug #248) redefines method with splat (bug #248) + gives correct error when forwarding splat gives correct error when forwarding splat + matches with type var splat inside explicit Union matches with type var splat inside explicit Union + errors if splatting non-tuple type in return values errors if splatting non-tuple type in return values + errors on zero args with named arg and splat errors on zero args with named arg and splat + allows default value after splat index allows default value after splat index + forwards tuple in return statement forwards tuple in return statement + matches with type var splat inside explicit Union, when non-splat vars fail matches with type var splat inside explicit Union, when non-splat vars fail + doesn't match splat in generic type with unsplatted tuple (#10164) doesn't match splat in generic type with unsplatted tuple (#10164) + matches with type var and splat of itself inside explicit Union (3) matches with type var and splat of itself inside explicit Union (3) + overloads with type restriction and splat (1) overloads with type restriction and splat (1) + matches instantiated generic with splat in generic type matches instantiated generic with splat in generic type + errors if doesn't match splat with type restriction because of zero arguments errors if doesn't match splat with type restriction because of zero arguments + can splat after type filter left it as a tuple (#442) can splat after type filter left it as a tuple (#442) + doesn't crash on non-match (#2521) doesn't crash on non-match (#2521) + splats arg and splat against splat (2) (#1042) splats arg and splat against splat (2) (#1042) + errors if splatting union errors if splatting union + matches partially instantiated generic with splat in generic type matches partially instantiated generic with splat in generic type + doesn't match free var type splats inside explicit Union doesn't match free var type splats inside explicit Union + errors if splatting non-tuple type in call arguments errors if splatting non-tuple type in call arguments + overloads with splat against method with two arguments (#986) (1) overloads with splat against method with two arguments (#986) (1) + method with default arguments and splat matches call with one arg (#2766) method with default arguments and splat matches call with one arg (#2766) +Semantic: yield with scope + infer type of block body infer type of block body + uses method of enclosing scope uses method of enclosing scope + infer type of block body with yield scope and arguments infer type of block body with yield scope and arguments + finds macro finds macro + errors if using instance variable at top level errors if using instance variable at top level + mentions with yield scope and current scope in error mentions with yield scope and current scope in error + passes #229 passes #229 + infer type of empty block body infer type of empty block body + invokes nested calls invokes nested calls + uses instance variable of enclosing scope uses instance variable of enclosing scope + infer type of block body with yield scope infer type of block body with yield scope +Crystal::Playground::Agent + should send json messages and return inspected value should send json messages and return inspected value +Code gen: regex literal spec + works in a class variable (#10951) works in a class variable (#10951) works in a class variable (#10951) works in a class variable (#10951) works in a class variable (#10951) works in a class variable (#10951) works in a class variable (#10951) works in a class variable (#10951) works in a class variable (#10951) works in a class variable (#10951) +Semantic: double splat + double splats named argument into arguments (1) double splats named argument into arguments (1) + errors if duplicate keys on call side with double splat and named args errors if duplicate keys on call side with double splat and named args + uses double splat restriction, matches empty uses double splat restriction, matches empty + uses restriction on double splat, doesn't match with empty named tuple (2) uses restriction on double splat, doesn't match with empty named tuple (2) + matches double splat on method with named args and regular args matches double splat on method with named args and regular args + uses restriction on double splat, means all types must be that type uses restriction on double splat, means all types must be that type + matches named args producing an empty double splat (#2678) matches named args producing an empty double splat (#2678) + matches double splat on method (empty) matches double splat on method (empty) + matches double splat with regular splat matches double splat with regular splat + errors if duplicate keys on call side with two double splats errors if duplicate keys on call side with two double splats + uses double splat in new uses double splat in new + errors missing argument with double splat errors missing argument with double splat + uses double splat restriction uses double splat restriction + matches double splat on method with named args matches double splat on method with named args + double splats named argument into arguments (2) double splats named argument into arguments (2) + overloads based on double splat restriction overloads based on double splat restriction + uses restriction on double splat, doesn't match with empty named tuple uses restriction on double splat, doesn't match with empty named tuple + uses double splat restriction with concrete type uses double splat restriction with concrete type +Crystal::Init::InitProject + correctly uses git config correctly uses git config + has proper contents has proper contents +Crystal::Command + clear_cache + clears any cached compiler files clears any cached compiler files +Code gen: void + codegens void assignment in case with local variable codegens void assignment in case with local variable codegens void assignment in case with local variable codegens void assignment in case with local variable codegens void assignment in case with local variable codegens void assignment in case with local variable codegens void assignment in case with local variable codegens void assignment in case with local variable codegens void assignment in case with local variable codegens void assignment in case with local variable + codegens unreachable code codegens unreachable code + allows passing void as argument to method allows passing void as argument to method + codegens no return assignment codegens no return assignment + codegens void assignment codegens void assignment + codegens void assignment in case codegens void assignment in case codegens void assignment in case codegens void assignment in case codegens void assignment in case codegens void assignment in case codegens void assignment in case codegens void assignment in case codegens void assignment in case codegens void assignment in case + returns void from nil functions, doesn't crash when passing value returns void from nil functions, doesn't crash when passing value +Semantic: ReferenceStorage + errors if T is a value type errors if T is a value type + errors if T is a struct type errors if T is a struct type + errors if T is a nilable type errors if T is a nilable type + allows a different name allows a different name + errors if T is a union type errors if T is a union type +Crystal::Repl::Interpreter + literals + interprets an UInt128 interprets an UInt128 + interprets a Float32 interprets a Float32 + interprets a bool (false) interprets a bool (false) + precomputes string literal length precomputes string literal length + interprets an UInt32 interprets an UInt32 + interprets an UInt64 interprets an UInt64 + interprets an Int16 interprets an Int16 + uses a string pool uses a string pool + interprets a Float64 interprets a Float64 + interprets an Int32 interprets an Int32 + interprets an Int64 interprets an Int64 + interprets a String literal interprets a String literal + interprets an Int8 interprets an Int8 + interprets an UInt16 interprets an UInt16 + interprets an Int128 interprets an Int128 + interprets an UInt8 interprets an UInt8 + interprets a char interprets a char + interprets a bool (true) interprets a bool (true) + interprets nil interprets nil + comparisons + interprets Int32 != UInt64 (true) interprets Int32 != UInt64 (true) + interprets UInt64 != Int32 (false) interprets UInt64 != Int32 (false) + interprets UInt8 < Int32 (false, right is less than zero) interprets UInt8 < Int32 (false, right is less than zero) + interprets Int32 == UInt64 (false) interprets Int32 == UInt64 (false) + interprets Int32 != UInt64 (false) interprets Int32 != UInt64 (false) + interprets UInt32 < Int32 (false) interprets UInt32 < Int32 (false) + interprets UInt64 > UInt32 (false) interprets UInt64 > UInt32 (false) + interprets Int32 != Int32 (true) interprets Int32 != Int32 (true) + interprets Int32 == UInt64 (true) interprets Int32 == UInt64 (true) + interprets UInt64 == Int32 (true when Int32 >= 0) interprets UInt64 == Int32 (true when Int32 >= 0) + interprets Bool != Bool (true) interprets Bool != Bool (true) + interprets Bool == Bool (false) interprets Bool == Bool (false) + interprets UInt8 < Int32 (false, right is greater than zero) interprets UInt8 < Int32 (false, right is greater than zero) + interprets UInt64 < Int32 (false, right is less than zero) interprets UInt64 < Int32 (false, right is less than zero) + interprets Char == Char (false) interprets Char == Char (false) + interprets Int32 == Int32 (true) interprets Int32 == Int32 (true) + interprets Int128 == Int128 (false) interprets Int128 == Int128 (false) + interprets UInt64.unsafe_mod(UInt64) interprets UInt64.unsafe_mod(UInt64) + discards comparison discards comparison + interprets Float64 < Float64 interprets Float64 < Float64 + interprets Int128 == Int128 (true) interprets Int128 == Int128 (true) + interprets UInt64 != Int32 (true) interprets UInt64 != Int32 (true) + interprets Float32 / Int32 interprets Float32 / Int32 + interprets UInt64 == Int32 (false when Int32 >= 0) interprets UInt64 == Int32 (false when Int32 >= 0) + interprets Int32 < Float64 interprets Int32 < Float64 + interprets UInt32 < Int32 (true) interprets UInt32 < Int32 (true) + interprets Float64 / Float64 interprets Float64 / Float64 + interprets Int32 < Int32 interprets Int32 < Int32 + interprets Float32 fdiv Float64 interprets Float32 fdiv Float64 + interprets UInt64 > UInt32 (true) interprets UInt64 > UInt32 (true) + interprets Float64 < Int32 interprets Float64 < Int32 + interprets Bool == Bool (true) interprets Bool == Bool (true) + interprets Bool != Bool (false) interprets Bool != Bool (false) + interprets Int32 > Float64 (true) interprets Int32 > Float64 (true) + interprets UInt64 < Int32 (false, right is greater than zero) interprets UInt64 < Int32 (false, right is greater than zero) + interprets Float64 fdiv Float32 interprets Float64 fdiv Float32 + interprets Int32 == Float64 (true) interprets Int32 == Float64 (true) + interprets UInt8 < Int32 (true, right is greater than zero) interprets UInt8 < Int32 (true, right is greater than zero) + interprets Int32 != Int32 (false) interprets Int32 != Int32 (false) + interprets UInt64 == Int32 (false when Int32 < 0) interprets UInt64 == Int32 (false when Int32 < 0) + interprets UInt64 < Int32 (true, right is greater than zero) interprets UInt64 < Int32 (true, right is greater than zero) + interprets Float32 / Float32 interprets Float32 / Float32 + interprets Int32 == Float64 (false) interprets Int32 == Float64 (false) + interprets Char == Char (true) interprets Char == Char (true) + interprets Int32 == Int32 (false) interprets Int32 == Int32 (false) + interprets Int32 > Float64 (false) interprets Int32 > Float64 (false) + local variables + interprets uninitialized interprets uninitialized + interprets variable set interprets variable set + doesn't declare variable with no type doesn't declare variable with no type + interprets variable set and get interprets variable set and get + assigns to underscore assigns to underscore + interprets variable set and get, second local var interprets variable set and get, second local var + interprets variable set with type restriction (#13023) interprets variable set with type restriction (#13023) + interprets at the class level interprets at the class level + doesn't declare variable with no type inside method doesn't declare variable with no type inside method + interprets local variable declaration (#12229) interprets local variable declaration (#12229) + interprets variable set and get with operations interprets variable set and get with operations + doesn't discard underscore right hand side doesn't discard underscore right hand side + conversion + interprets Int8::MIN#to_f32! interprets Int8::MIN#to_f32! + interprets Int8::MAX#to_f64! interprets Int8::MAX#to_f64! + interprets Int64::MIN#to_f64! interprets Int64::MIN#to_f64! + interprets Int64::MAX#to_i32! interprets Int64::MAX#to_i32! + interprets Int64::MAX#to_u64! interprets Int64::MAX#to_u64! + interprets Int32::MIN#to_i8! interprets Int32::MIN#to_i8! + interprets Int16::MAX#to_i! interprets Int16::MAX#to_i! + interprets Int32::MAX#to_u64! interprets Int32::MAX#to_u64! + interprets Int64::MAX#to_i8! interprets Int64::MAX#to_i8! + interprets Float64#to_i64! (negative) interprets Float64#to_i64! (negative) + interprets UInt8::MAX#to_f32! interprets UInt8::MAX#to_f32! + interprets UInt16::MAX#to_i! interprets UInt16::MAX#to_i! + interprets Int16::MAX#to_u32! interprets Int16::MAX#to_u32! + interprets Float64#to_i8! (negative) interprets Float64#to_i8! (negative) + interprets UInt16::MAX#to_u16! interprets UInt16::MAX#to_u16! + interprets UInt64::MAX#to_u64! interprets UInt64::MAX#to_u64! + interprets Int8::MIN#to_i16! interprets Int8::MIN#to_i16! + interprets Int64::MAX#to_u32! interprets Int64::MAX#to_u32! + interprets Int16::MAX#to_i64! interprets Int16::MAX#to_i64! + interprets Float64#to_i64! (positive) interprets Float64#to_i64! (positive) + interprets Int64::MIN#to_i16! interprets Int64::MIN#to_i16! + interprets Int64::MIN#to_u16! interprets Int64::MIN#to_u16! + interprets Int16::MIN#to_u64! interprets Int16::MIN#to_u64! + interprets Float32#to_f32! (negative) interprets Float32#to_f32! (negative) + interprets UInt64::MAX#to_f64! interprets UInt64::MAX#to_f64! + discards conversion discards conversion + interprets UInt8::MAX#to_i32! interprets UInt8::MAX#to_i32! + interprets UInt8::MAX#to_f64! interprets UInt8::MAX#to_f64! + interprets UInt32::MAX#to_i8! interprets UInt32::MAX#to_i8! + interprets Int32::MIN#to_u! interprets Int32::MIN#to_u! + interprets Int8::MAX#to_u16! interprets Int8::MAX#to_u16! + interprets UInt64::MAX#to_i64! interprets UInt64::MAX#to_i64! + interprets Int32::MAX#to_i16! interprets Int32::MAX#to_i16! + interprets Int16::MAX#to_i16! interprets Int16::MAX#to_i16! + interprets Float32#to_i32! (positive) interprets Float32#to_i32! (positive) + interprets Float32#to_i8! (positive) interprets Float32#to_i8! (positive) + interprets Float32#to_i16! (positive) interprets Float32#to_i16! (positive) + interprets Int32::MAX#to_u16! interprets Int32::MAX#to_u16! + interprets Int32::MIN#to_i! interprets Int32::MIN#to_i! + interprets Int16::MAX#to_i32! interprets Int16::MAX#to_i32! + interprets UInt32::MAX#to_u64! interprets UInt32::MAX#to_u64! + discards conversion with local var discards conversion with local var + interprets Int16::MIN#to_u8! interprets Int16::MIN#to_u8! + interprets UInt8::MAX#to_i8! interprets UInt8::MAX#to_i8! + interprets Int64::MIN#to_f32! interprets Int64::MIN#to_f32! + interprets Int64::MIN#to_u32! interprets Int64::MIN#to_u32! + interprets UInt8::MAX#to_i16! interprets UInt8::MAX#to_i16! + interprets Int64::MAX#to_i64! interprets Int64::MAX#to_i64! + interprets Float32#to_i! (negative) interprets Float32#to_i! (negative) + interprets Float32#to_u32! (positive) interprets Float32#to_u32! (positive) + interprets Float64#to_f64! (negative) interprets Float64#to_f64! (negative) + interprets Int32::MIN#to_u64! interprets Int32::MIN#to_u64! + interprets UInt8::MAX#to_u8! interprets UInt8::MAX#to_u8! + interprets Float32#to_f64! (positive) interprets Float32#to_f64! (positive) + interprets Int32::MIN#to_f64! interprets Int32::MIN#to_f64! + interprets Float64#to_u! (positive) interprets Float64#to_u! (positive) + interprets Float64#to_f32! (negative) interprets Float64#to_f32! (negative) + interprets Int64::MIN#to_u64! interprets Int64::MIN#to_u64! + interprets Int64::MIN#to_u! interprets Int64::MIN#to_u! + interprets Int8::MAX#to_i64! interprets Int8::MAX#to_i64! + interprets Float64#to_i32! (positive) interprets Float64#to_i32! (positive) + interprets UInt8::MAX#to_u64! interprets UInt8::MAX#to_u64! + interprets UInt16::MAX#to_i16! interprets UInt16::MAX#to_i16! + interprets Int8::MIN#to_u32! interprets Int8::MIN#to_u32! + interprets UInt32::MAX#to_u! interprets UInt32::MAX#to_u! + interprets Int32::MAX#to_i32! interprets Int32::MAX#to_i32! + interprets UInt64::MAX#to_i32! interprets UInt64::MAX#to_i32! + interprets UInt16::MAX#to_f64! interprets UInt16::MAX#to_f64! + interprets Int32::MIN#to_i64! interprets Int32::MIN#to_i64! + interprets UInt8::MAX#to_u16! interprets UInt8::MAX#to_u16! + interprets UInt16::MAX#to_u32! interprets UInt16::MAX#to_u32! + interprets UInt64::MAX#to_u8! interprets UInt64::MAX#to_u8! + interprets Float32#to_i32! (negative) interprets Float32#to_i32! (negative) + interprets UInt32::MAX#to_i16! interprets UInt32::MAX#to_i16! + interprets Int32::MIN#to_i16! interprets Int32::MIN#to_i16! + interprets Int16::MIN#to_u32! interprets Int16::MIN#to_u32! + interprets UInt64::MAX#to_i! interprets UInt64::MAX#to_i! + interprets UInt16::MAX#to_u64! interprets UInt16::MAX#to_u64! + Int32#unsafe_chr Int32#unsafe_chr + interprets UInt64::MAX#to_i8! interprets UInt64::MAX#to_i8! + interprets Int16::MIN#to_i64! interprets Int16::MIN#to_i64! + interprets Int64::MIN#to_u8! interprets Int64::MIN#to_u8! + interprets Int32::MIN#to_u8! interprets Int32::MIN#to_u8! + interprets Float32#to_i64! (negative) interprets Float32#to_i64! (negative) + interprets Float32#to_i64! (positive) interprets Float32#to_i64! (positive) + interprets UInt32::MAX#to_i! interprets UInt32::MAX#to_i! + interprets Int64::MAX#to_i! interprets Int64::MAX#to_i! + interprets Int64::MIN#to_i32! interprets Int64::MIN#to_i32! + interprets Int16::MAX#to_f32! interprets Int16::MAX#to_f32! + interprets Int64::MAX#to_u16! interprets Int64::MAX#to_u16! + interprets Int8::MAX#to_i32! interprets Int8::MAX#to_i32! + interprets Float32#to_i! (positive) interprets Float32#to_i! (positive) + interprets UInt32::MAX#to_u8! interprets UInt32::MAX#to_u8! + interprets Int32::MIN#to_i32! interprets Int32::MIN#to_i32! + interprets Int64::MAX#to_u! interprets Int64::MAX#to_u! + interprets Float64#to_f64! (positive) interprets Float64#to_f64! (positive) + interprets Int8::MIN#to_u8! interprets Int8::MIN#to_u8! + interprets UInt64::MAX#to_u32! interprets UInt64::MAX#to_u32! + interprets Float64#to_u64! (positive) interprets Float64#to_u64! (positive) + interprets Int16::MAX#to_i8! interprets Int16::MAX#to_i8! + interprets Int32::MIN#to_f32! interprets Int32::MIN#to_f32! + interprets Float32#to_f32! (positive) interprets Float32#to_f32! (positive) + interprets Int64::MIN#to_i! interprets Int64::MIN#to_i! + interprets Float64#to_u8! (positive) interprets Float64#to_u8! (positive) + interprets UInt32::MAX#to_u16! interprets UInt32::MAX#to_u16! + interprets Int64::MIN#to_i8! interprets Int64::MIN#to_i8! + interprets Float64#to_u32! (positive) interprets Float64#to_u32! (positive) + interprets Int64::MAX#to_u8! interprets Int64::MAX#to_u8! + interprets Int16::MAX#to_u8! interprets Int16::MAX#to_u8! + interprets Int8::MAX#to_u32! interprets Int8::MAX#to_u32! + interprets Int32::MAX#to_u32! interprets Int32::MAX#to_u32! + interprets Int8::MAX#to_u8! interprets Int8::MAX#to_u8! + interprets UInt16::MAX#to_u8! interprets UInt16::MAX#to_u8! + interprets Float64#to_f32! (positive) interprets Float64#to_f32! (positive) + interprets Int8::MAX#to_u64! interprets Int8::MAX#to_u64! + interprets Int8::MIN#to_i64! interprets Int8::MIN#to_i64! + interprets UInt16::MAX#to_u! interprets UInt16::MAX#to_u! + interprets Float32#to_u16! (positive) interprets Float32#to_u16! (positive) + interprets Float64#to_i! (negative) interprets Float64#to_i! (negative) + interprets Int8::MAX#to_u! interprets Int8::MAX#to_u! + interprets Int16::MIN#to_u! interprets Int16::MIN#to_u! + interprets Float32#to_u64! (positive) interprets Float32#to_u64! (positive) + interprets UInt64::MAX#to_i16! interprets UInt64::MAX#to_i16! + interprets Int32::MAX#to_u! interprets Int32::MAX#to_u! + interprets UInt8::MAX#to_u! interprets UInt8::MAX#to_u! + interprets Int8::MIN#to_u64! interprets Int8::MIN#to_u64! + interprets Int16::MAX#to_f64! interprets Int16::MAX#to_f64! + interprets Float64#to_i8! (positive) interprets Float64#to_i8! (positive) + interprets Int16::MIN#to_i32! interprets Int16::MIN#to_i32! + interprets Float32#to_i16! (negative) interprets Float32#to_i16! (negative) + interprets Int32::MAX#to_i64! interprets Int32::MAX#to_i64! + interprets Int16::MIN#to_f64! interprets Int16::MIN#to_f64! + interprets Int8::MAX#to_i16! interprets Int8::MAX#to_i16! + interprets Int16::MIN#to_f32! interprets Int16::MIN#to_f32! + interprets Int8::MIN#to_u16! interprets Int8::MIN#to_u16! + interprets UInt64::MAX#to_u16! interprets UInt64::MAX#to_u16! + interprets Float32#to_i8! (negative) interprets Float32#to_i8! (negative) + interprets Int64::MIN#to_i64! interprets Int64::MIN#to_i64! + interprets Int16::MAX#to_u64! interprets Int16::MAX#to_u64! + interprets UInt16::MAX#to_f32! interprets UInt16::MAX#to_f32! + interprets Int32::MIN#to_u16! interprets Int32::MIN#to_u16! + interprets UInt8::MAX#to_i64! interprets UInt8::MAX#to_i64! + interprets UInt16::MAX#to_i8! interprets UInt16::MAX#to_i8! + interprets UInt8::MAX#to_i! interprets UInt8::MAX#to_i! + interprets Int32::MIN#to_u32! interprets Int32::MIN#to_u32! + interprets UInt32::MAX#to_f32! interprets UInt32::MAX#to_f32! + interprets Int64::MAX#to_i16! interprets Int64::MAX#to_i16! + interprets UInt32::MAX#to_f64! interprets UInt32::MAX#to_f64! + interprets UInt32::MAX#to_i64! interprets UInt32::MAX#to_i64! + interprets Int32::MAX#to_i! interprets Int32::MAX#to_i! + interprets Int8::MIN#to_i! interprets Int8::MIN#to_i! + interprets UInt32::MAX#to_u32! interprets UInt32::MAX#to_u32! + interprets UInt8::MAX#to_u32! interprets UInt8::MAX#to_u32! + interprets Float32#to_f64! (negative) interprets Float32#to_f64! (negative) + interprets Int16::MIN#to_u16! interprets Int16::MIN#to_u16! + interprets UInt32::MAX#to_i32! interprets UInt32::MAX#to_i32! + interprets Int8::MAX#to_i8! interprets Int8::MAX#to_i8! + interprets Float64#to_i16! (negative) interprets Float64#to_i16! (negative) + interprets Int32::MAX#to_f64! interprets Int32::MAX#to_f64! + interprets Int32::MAX#to_i8! interprets Int32::MAX#to_i8! + interprets Int8::MIN#to_f64! interprets Int8::MIN#to_f64! + interprets Float64#to_i32! (negative) interprets Float64#to_i32! (negative) + interprets Int8::MIN#to_u! interprets Int8::MIN#to_u! + interprets Int64::MAX#to_f64! interprets Int64::MAX#to_f64! + interprets Int32::MAX#to_u8! interprets Int32::MAX#to_u8! + interprets Int8::MIN#to_i32! interprets Int8::MIN#to_i32! + interprets UInt16::MAX#to_i64! interprets UInt16::MAX#to_i64! + interprets Float32#to_u! (positive) interprets Float32#to_u! (positive) + interprets Int32::MAX#to_f32! interprets Int32::MAX#to_f32! + interprets Float64#to_u16! (positive) interprets Float64#to_u16! (positive) + interprets UInt64::MAX#to_f32! interprets UInt64::MAX#to_f32! + interprets Char#ord interprets Char#ord + interprets Int16::MAX#to_u! interprets Int16::MAX#to_u! + UInt8#unsafe_chr UInt8#unsafe_chr + interprets Float32#to_u8! (positive) interprets Float32#to_u8! (positive) + interprets UInt64::MAX#to_u! interprets UInt64::MAX#to_u! + interprets Float64#to_i16! (positive) interprets Float64#to_i16! (positive) + interprets Int8::MIN#to_i8! interprets Int8::MIN#to_i8! + interprets Int8::MAX#to_f32! interprets Int8::MAX#to_f32! + interprets Int16::MAX#to_u16! interprets Int16::MAX#to_u16! + interprets Float64#to_i! (positive) interprets Float64#to_i! (positive) + interprets UInt16::MAX#to_i32! interprets UInt16::MAX#to_i32! + interprets Int16::MIN#to_i! interprets Int16::MIN#to_i! + interprets Int64::MAX#to_f32! interprets Int64::MAX#to_f32! + interprets Int16::MIN#to_i16! interprets Int16::MIN#to_i16! + interprets Int16::MIN#to_i8! interprets Int16::MIN#to_i8! + interprets Int8::MAX#to_i! interprets Int8::MAX#to_i! + overflow + * + overlows on 20 * 214748364 overlows on 20 * 214748364 + overlows on 10_u16 * 6600 overlows on 10_u16 * 6600 + overlows on 10_i8 * 14 overlows on 10_i8 * 14 + overlows on 10_i16 * 3300 overlows on 10_i16 * 3300 + overlows on 20_u64 * 1844674407370955161_i64 overlows on 20_u64 * 1844674407370955161_i64 + overlows on 20_i64 * 922337203685477580_i64 overlows on 20_i64 * 922337203685477580_i64 + overlows on 20_u32 * 429496729 overlows on 20_u32 * 429496729 + overlows on 10_u8 * 26 overlows on 10_u8 * 26 + - + overlows on 1_i64 - 9223372036854775810_u64 overlows on 1_i64 - 9223372036854775810_u64 + overlows on 1_u16 - 2 overlows on 1_u16 - 2 + overlows on 1_i16 - 32770 overlows on 1_i16 - 32770 + overlows on 1_u64 - 2 overlows on 1_u64 - 2 + overlows on 1_u8 - 2 overlows on 1_u8 - 2 + overlows on 1_u32 - 2 overlows on 1_u32 - 2 + overlows on 1 - 2147483650_i64 overlows on 1 - 2147483650_i64 + overlows on 1_i8 - 256 overlows on 1_i8 - 256 + conversion + overlows on -1_i16.to_u64 overlows on -1_i16.to_u64 + overlows on 32768_f64.to_i16 overlows on 32768_f64.to_i16 + overlows on 128_f64.to_i8 overlows on 128_f64.to_i8 + overlows on 128_u32.to_i8 overlows on 128_u32.to_i8 + overlows on 256_f64.to_u8 overlows on 256_f64.to_u8 + overlows on -1_i8.to_u64 overlows on -1_i8.to_u64 + overlows on 65536_f32.to_u16 overlows on 65536_f32.to_u16 + overlows on 256_f32.to_u8 overlows on 256_f32.to_u8 + overlows on 2147483648_u32.to_i32 overlows on 2147483648_u32.to_i32 + overlows on 32768_u32.to_i16 overlows on 32768_u32.to_i16 + overlows on -1_i64.to_u8 overlows on -1_i64.to_u8 + overlows on -1.to_u32 overlows on -1.to_u32 + overlows on -1_i16.to_u16 overlows on -1_i16.to_u16 + overlows on 128_f32.to_i8 overlows on 128_f32.to_i8 + overlows on -1_i8.to_u8 overlows on -1_i8.to_u8 + overlows on 1.7976931348623157e+308.to_f32 overlows on 1.7976931348623157e+308.to_f32 + overlows on -1_i64.to_u16 overlows on -1_i64.to_u16 + overlows on 65536_f64.to_u16 overlows on 65536_f64.to_u16 + overlows on 128_u64.to_i8 overlows on 128_u64.to_i8 + overlows on 2147483648_f64.to_i32 overlows on 2147483648_f64.to_i32 + overlows on -1_i64.to_u64 overlows on -1_i64.to_u64 + overlows on -1.to_u64 overlows on -1.to_u64 + overlows on 32768_u64.to_i16 overlows on 32768_u64.to_i16 + overlows on -1.to_u16 overlows on -1.to_u16 + overlows on -1_i16.to_u8 overlows on -1_i16.to_u8 + overlows on 128_u16.to_i8 overlows on 128_u16.to_i8 + overlows on 2147483648_u64.to_i32 overlows on 2147483648_u64.to_i32 + overlows on 128_u8.to_i8 overlows on 128_u8.to_i8 + overlows on -1.to_u8 overlows on -1.to_u8 + overlows on -1_i8.to_u32 overlows on -1_i8.to_u32 + overlows on -1_i64.to_u32 overlows on -1_i64.to_u32 + overlows on 32768_f32.to_i16 overlows on 32768_f32.to_i16 + overlows on 9223372036854775808_u64.to_i64 overlows on 9223372036854775808_u64.to_i64 + overlows on 32768_u16.to_i16 overlows on 32768_u16.to_i16 + overlows on 4294967296_f64.to_u32 overlows on 4294967296_f64.to_u32 + overlows on -1_i8.to_u16 overlows on -1_i8.to_u16 + overlows on -1_i16.to_u32 overlows on -1_i16.to_u32 + + + overlows on 1_u8 + 255 overlows on 1_u8 + 255 + overlows on 1_u32 + 4294967295_i64 overlows on 1_u32 + 4294967295_i64 + overlows on 1_i64 + 9223372036854775807_i64 overlows on 1_i64 + 9223372036854775807_i64 + overlows on 1_u16 + 65535 overlows on 1_u16 + 65535 + overlows on 1_u64 + 18446744073709551615_u64 overlows on 1_u64 + 18446744073709551615_u64 + overlows on 1 + 2147483647 overlows on 1 + 2147483647 + overlows on 1_i16 + 32767 overlows on 1_i16 + 32767 + overlows on 1_i8 + 128 overlows on 1_i8 + 128 + logical operations + does math primitive on union does math primitive on union + interprets not for generic class instance type interprets not for generic class instance type + interprets not for bool false interprets not for bool false + interprets not for nilable proc type (false) interprets not for nilable proc type (false) + interprets not for mixed union (false) interprets not for mixed union (false) + interprets not for mixed union (true) interprets not for mixed union (true) + interprets not for generic module interprets not for generic module + interprets not for nilable type (true) interprets not for nilable type (true) + does math convert on union does math convert on union + interprets not for bool true interprets not for bool true + interprets not for bool false interprets not for bool false + interprets not for nilable type (true) interprets not for nilable type (true) + interprets not for nil type interprets not for nil type + discards nil not discards nil not + interprets not for generic module metaclass interprets not for generic module metaclass + interprets not for nilable type (false) interprets not for nilable type (false) + discards bool not discards bool not + interprets not for nilable proc type (true) interprets not for nilable proc type (true) + interprets not for mixed union (nil) interprets not for mixed union (nil) + interprets not for module (#12918) interprets not for module (#12918) + interprets not for nilable type (false) interprets not for nilable type (false) + interprets not for generic class instance metaclass interprets not for generic class instance metaclass + interprets not for mixed union (other) interprets not for mixed union (other) + interprets not for nil interprets not for nil + math + interprets Float64 * Float64 interprets Float64 * Float64 + interprets UInt32 - Int32 interprets UInt32 - Int32 + interprets Float64 + Float64 interprets Float64 + Float64 + interprets Int32 + Float64 interprets Int32 + Float64 + interprets UInt64 & Int32 interprets UInt64 & Int32 + interprets Float32 + Float64 interprets Float32 + Float64 + interprets Float64 - Float64 interprets Float64 - Float64 + interprets Int32 * Int32 interprets Int32 * Int32 + interprets Int128 + Int32 interprets Int128 + Int32 + interprets Int8 + Int8 interprets Int8 + Int8 + interprets Int32 &+ Int32 interprets Int32 &+ Int32 + interprets Int32.unsafe_shl(Int32) with self interprets Int32.unsafe_shl(Int32) with self + interprets UInt64 | UInt32 interprets UInt64 | UInt32 + interprets Float64 + Int32 interprets Float64 + Int32 + interprets Int64 + Int64 interprets Int64 + Int64 + interprets UInt8 | Int32 interprets UInt8 | Int32 + interprets Int32 &* Int32 interprets Int32 &* Int32 + interprets Int32 - Int32 interprets Int32 - Int32 + interprets Int32 + Int32 interprets Int32 + Int32 + discards math discards math + interprets UInt64 * Int32 interprets UInt64 * Int32 + interprets Int32 &- Int32 interprets Int32 &- Int32 +Semantic: NoReturn + computes NoReturn in a lazy way inside if then (#314) (4) computes NoReturn in a lazy way inside if then (#314) (4) + computes NoReturn in a lazy way inside if then (#314) (1) computes NoReturn in a lazy way inside if then (#314) (1) + computes NoReturn in a lazy way inside if then (#314) (3) computes NoReturn in a lazy way inside if then (#314) (3) + types union of NoReturn and something else types union of NoReturn and something else + computes NoReturn in a lazy way inside if else (#314) (4) computes NoReturn in a lazy way inside if else (#314) (4) + computes NoReturn in a lazy way inside if else (#314) (3) computes NoReturn in a lazy way inside if else (#314) (3) + computes NoReturn in a lazy way inside if then (#314) (5) computes NoReturn in a lazy way inside if then (#314) (5) + types as NoReturn even if Nil return type is forced (#3096) types as NoReturn even if Nil return type is forced (#3096) + computes NoReturn in a lazy way inside if else (#314) (1) computes NoReturn in a lazy way inside if else (#314) (1) + types as NoReturn if typeof(exp)'s exp is NoReturn types as NoReturn if typeof(exp)'s exp is NoReturn + assumes if condition's type filters when else is no return assumes if condition's type filters when else is no return + types call to LibC.exit as NoReturn types call to LibC.exit as NoReturn + types exception handler as NoReturn if ensure is NoReturn types exception handler as NoReturn if ensure is NoReturn + types with no return even if code follows types with no return even if code follows + types union of NoReturns types union of NoReturns + computes NoReturn in a lazy way inside if then (#314) (2) computes NoReturn in a lazy way inside if then (#314) (2) + computes NoReturn in a lazy way inside if else (#314) (5) computes NoReturn in a lazy way inside if else (#314) (5) + computes NoReturn in a lazy way inside if else (#314) (2) computes NoReturn in a lazy way inside if else (#314) (2) + types raise as NoReturn types raise as NoReturn +Code gen: hash literal spec + creates custom generic hash via alias (1) creates custom generic hash via alias (1) + assignment in hash-like literal works assignment in hash-like literal works assignment in hash-like literal works assignment in hash-like literal works assignment in hash-like literal works assignment in hash-like literal works assignment in hash-like literal works assignment in hash-like literal works assignment in hash-like literal works assignment in hash-like literal works + creates custom generic hash in module (#5684) creates custom generic hash in module (#5684) + creates custom generic hash with type vars creates custom generic hash with type vars + doesn't crash on hash literal with proc pointer (#646) doesn't crash on hash literal with proc pointer (#646) doesn't crash on hash literal with proc pointer (#646) doesn't crash on hash literal with proc pointer (#646) doesn't crash on hash literal with proc pointer (#646) doesn't crash on hash literal with proc pointer (#646) doesn't crash on hash literal with proc pointer (#646) doesn't crash on hash literal with proc pointer (#646) doesn't crash on hash literal with proc pointer (#646) doesn't crash on hash literal with proc pointer (#646) + creates custom non-generic hash creates custom non-generic hash + assignment in hash literal works assignment in hash literal works assignment in hash literal works assignment in hash literal works assignment in hash literal works assignment in hash literal works assignment in hash literal works assignment in hash literal works assignment in hash literal works assignment in hash literal works + creates custom generic hash creates custom generic hash + creates custom generic hash via alias (2) creates custom generic hash via alias (2) + creates custom non-generic hash in module creates custom non-generic hash in module unreachable - finds method called from proc finds method called from proc - finds methods with proc parameter finds methods with proc parameter - finds method called from block finds method called from block - finds method called from instance variable initializer finds method called from instance variable initializer - finds yielding methods finds yielding methods - finds abstract method finds abstract method - finds virtual method finds virtual method - finds method called from expanded macro expression finds method called from expanded macro expression - finds method with free variable finds method with free variable - finds methods in generic type finds methods in generic type - finds class methods finds class methods finds instance methods finds instance methods - tallies calls tallies calls - finds methods called from reachable code finds methods called from reachable code + finds method called from expanded macro finds method called from expanded macro + finds instance methods in nested types finds instance methods in nested types + finds method with `previous_def` finds method with `previous_def` + finds method called from expanded macro expression finds method called from expanded macro expression + finds top level methods finds top level methods finds initializer finds initializer ignores autogenerated enum predicates ignores autogenerated enum predicates - finds top level methods finds top level methods + finds method called from block finds method called from block + finds class methods finds class methods finds method with `super` finds method with `super` - finds method in abstract type finds method in abstract type - finds instance methods in nested types finds instance methods in nested types - finds method called from expanded macro finds method called from expanded macro handles circular hierarchy references (#14034) handles circular hierarchy references (#14034) + finds abstract method finds abstract method + finds virtual method finds virtual method + finds method called from proc finds method called from proc + tallies calls tallies calls finds shadowed method finds shadowed method - finds method with `previous_def` finds method with `previous_def` -codegen: previous_def - correctly passes named arguments correctly passes named arguments - codegens previous def when inside fun and forwards args codegens previous def when inside fun and forwards args - codegens previous def codegens previous def - codegens previous def when inside fun with self codegens previous def when inside fun with self -Crystal::Loader - .default_search_paths - LD_LIBRARY_PATH LD_LIBRARY_PATH - DYLD_LIBRARY_PATH DYLD_LIBRARY_PATH - .read_ld_conf - with include with include - basic basic - dynlib - does not find global symbols does not find global symbols - validate that lib handles are properly closed validate that lib handles are properly closed - #load_file? - finds function symbol finds function symbol - #load_library? - does not implicitly find dependencies does not implicitly find dependencies - full path full path - lookup in order lookup in order - library name library name - .parse - prepends directory paths before default search paths prepends directory paths before default search paths - parses library names parses library names - parses static parses static - parses file paths parses file paths - parses directory paths parses directory paths -Parser warnings - warns on missing space before colon - in block param type restriction in block param type restriction - in anonymous block param type restriction in anonymous block param type restriction - in type declaration in type declaration - in return type restriction in return type restriction - warns on suffix-less UInt64 literals > Int64::MAX warns on suffix-less UInt64 literals > Int64::MAX -Crystal::Repl::Interpreter - tuple - extends sign when doing to_i32 extends sign when doing to_i32 - interprets tuple literal and access by known index interprets tuple literal and access by known index - interprets tuple literal of different types (1) interprets tuple literal of different types (1) - interprets tuple metaclass indexer interprets tuple metaclass indexer - interprets tuple literal of different types (2) interprets tuple literal of different types (2) - discards tuple (#12383) discards tuple (#12383) - interprets tuple self interprets tuple self - discards tuple access discards tuple access - unpacks tuple in block arguments unpacks tuple in block arguments - interprets tuple metaclass range indexer interprets tuple metaclass range indexer - interprets tuple range indexer interprets tuple range indexer - interprets tuple range indexer (2) interprets tuple range indexer (2) - does tuple indexer on union does tuple indexer on union -read_file? - with relative path - reads file (doesn't exist) reads file (doesn't exist) - with absolute path - reads file (doesn't exist) reads file (doesn't exist) -Crystal::Repl::Interpreter - named tuple - discards named tuple (#12383) discards named tuple (#12383) - interprets named tuple literal and access by known index interprets named tuple literal and access by known index - interprets named tuple metaclass indexer interprets named tuple metaclass indexer -Codegen: responds_to? - works with generic virtual module (2) (#8334) works with generic virtual module (2) (#8334) - codegens responds_to? with nilable gives false because other type 1 codegens responds_to? with nilable gives false because other type 1 - works with generic virtual module (1) works with generic virtual module (1) - codegens responds_to? with generic class (2) codegens responds_to? with generic class (2) - works with virtual type works with virtual type - codegens responds_to? false for simple type codegens responds_to? false for simple type - works with generic virtual superclass (2) works with generic virtual superclass (2) - codegens responds_to? true for simple type codegens responds_to? true for simple type - works with generic virtual superclass (1) works with generic virtual superclass (1) - codegens responds_to? with generic class (1) codegens responds_to? with generic class (1) - doesn't error if result is discarded (#14113) doesn't error if result is discarded (#14113) - codegens responds_to? with union gives false codegens responds_to? with union gives false - works with two virtual types works with two virtual types - does for generic instance type metaclass (#4353) does for generic instance type metaclass (#4353) - codegens responds_to? with nilable gives false because other type 2 codegens responds_to? with nilable gives false because other type 2 - works with virtual class type (2) (#1926) works with virtual class type (2) (#1926) - works with module works with module - codegens responds_to? with union gives true codegens responds_to? with union gives true - codegens responds_to? with nilable gives true codegens responds_to? with nilable gives true - works with virtual class type (1) (#1926) works with virtual class type (1) (#1926) -Semantic: return - allows nilable return type to match subclasses (#1735) allows nilable return type to match subclasses (#1735) - can use type var as return type with an included generic module can use type var as return type with an included generic module - can use non-type free var in return type (2) (#6543) can use non-type free var in return type (2) (#6543) - forms a tuple from multiple return values forms a tuple from multiple return values - can use free var in return type (#2492) can use free var in return type (#2492) - errors on return in top level errors on return in top level - types bug (#1823) types bug (#1823) - allows returning NoReturn instead of the wanted type allows returning NoReturn instead of the wanted type - can use non-type free var in return type (#6543) can use non-type free var in return type (#6543) - can use type var as return type (#1226) can use type var as return type (#1226) - infers return type with many returns (1) infers return type with many returns (1) - infers return type infers return type - flattens splats inside multiple return values flattens splats inside multiple return values - errors if non-type free var cannot be inferred errors if non-type free var cannot be inferred - types return if true types return if true - doesn't confuse return type from base class doesn't confuse return type from base class - can use type var as return type with an inherited generic class can use type var as return type with an inherited generic class - infers return type with many returns (2) infers return type with many returns (2) -Crystal::TablePrint - colspan a cell that fits the available size colspan a cell that fits the available size - aligns cell content aligns cell content - single cell single cell - aligns columns borders aligns columns borders - single row with separator single row with separator - multiple rows with separator multiple rows with separator - rows with horizontal separators rows with horizontal separators -Crystal::Command::FlagsVisitor - different flags different flags - only macro only macro - unique flags unique flags -Code gen: var - codegens bug with instance vars and ssa codegens bug with instance vars and ssa - codegens ivar assignment when not-nil type filter applies codegens ivar assignment when not-nil type filter applies - codegens var codegens var - works with typeof with assignment (#828) works with typeof with assignment (#828) - codegens bug with var, while, if, break and ssa codegens bug with var, while, if, break and ssa - assigns to underscore assigns to underscore - codegens assignment that can never be reached codegens assignment that can never be reached - codegens var with type declaration codegens var with type declaration - codegens bug with union of int, nil and string (1): assigning nil to union must fill all zeros codegens bug with union of int, nil and string (1): assigning nil to union must fill all zeros - codegens bug with union of int, nil and string (2): assigning nil to union must fill all zeros codegens bug with union of int, nil and string (2): assigning nil to union must fill all zeros -.system - successful command with output successful command with output -sh: 1: commanddoesnotexist: not found - command does not exist command does not exist - successful command successful command - failing command failing command -Code gen: splat - splats with default value (3) splats with default value (3) - splats on call splats on call - does #2407 does #2407 - splats with default value splats with default value - splats in initialize splats in initialize - splats with another arg splats with another arg - splats splats - splats without args splats without args - splats with default value (2) splats with default value (2) - evaluates splat argument just once (#2677) evaluates splat argument just once (#2677) -Init invocation - doesn't error if files will be overwritten by a generated file and --force is used doesn't error if files will be overwritten by a generated file and --force is used - prints error if a file is already present prints error if a file is already present - honors the custom set directory name honors the custom set directory name - produces valid yaml file produces valid yaml file - doesn't error when asked to skip existing files doesn't error when asked to skip existing files - errors if files will be overwritten by a generated file errors if files will be overwritten by a generated file -Code gen: class - codegens method from another method without obj and accesses instance vars codegens method from another method without obj and accesses instance vars - doesn't crash on instance variable assigned a proc, and never instantiated (#923) doesn't crash on instance variable assigned a proc, and never instantiated (#923) - resolves type declaration when accessing instance var (#348) resolves type declaration when accessing instance var (#348) - uses number type var uses number type var - does to_s for class does to_s for class does to_s for class does to_s for class does to_s for class�������� does to_s for class���� does to_s for class does to_s for class���� does to_s for class does to_s for class - doesn't crash on #1216 (reduced) doesn't crash on #1216 (reduced) - reads a virtual type instance var reads a virtual type instance var - transfers initializer from generic module to non-generic class transfers initializer from generic module to non-generic class - does to_s for virtual metaclass type (2) does to_s for virtual metaclass type (2) does to_s for virtual metaclass type (2) does to_s for virtual metaclass type (2) does to_s for virtual metaclass type (2) does to_s for virtual metaclass type (2)�� does to_s for virtual metaclass type (2)������������ does to_s for virtual metaclass type (2)�� does to_s for virtual metaclass type (2) does to_s for virtual metaclass type (2) - reads a union type instance var (mixed union, first type) reads a union type instance var (mixed union, first type) - doesn't crash on abstract class never instantiated (#2840) doesn't crash on abstract class never instantiated (#2840) - runs with nil instance var when inheriting runs with nil instance var when inheriting - codegens virtual call that calls another method codegens virtual call that calls another method - reads a union type instance var (reference union, second type) reads a union type instance var (reference union, second type) - codegens singleton (#718) codegens singleton (#718) - codegens assignment of generic metaclasses (4) (#10394) codegens assignment of generic metaclasses (4) (#10394) - does to_s for virtual metaclass type (3) does to_s for virtual metaclass type (3) does to_s for virtual metaclass type (3) does to_s for virtual metaclass type (3) does to_s for virtual metaclass type (3) does to_s for virtual metaclass type (3) does to_s for virtual metaclass type (3)�������������� does to_s for virtual metaclass type (3)�� does to_s for virtual metaclass type (3) does to_s for virtual metaclass type (3) - transfers initializer from generic module to generic class transfers initializer from generic module to generic class - changes instance variable in method (ssa bug) changes instance variable in method (ssa bug) - doesn't skip false initializers (#3272) doesn't skip false initializers (#3272) - never considers read instance var as closure (#12181) never considers read instance var as closure (#12181) - invokes class method inside instance method (#1119) invokes class method inside instance method (#1119) - works with array in variable initializer in generic type (#855) works with array in variable initializer in generic type (#855) works with array in variable initializer in generic type (#855) works with array in variable initializer in generic type (#855) works with array in variable initializer in generic type (#855) works with array in variable initializer in generic type (#855)�� works with array in variable initializer in generic type (#855)���� works with array in variable initializer in generic type (#855)���������� works with array in variable initializer in generic type (#855) works with array in variable initializer in generic type (#855) - codegens assignment of generic metaclasses, base is non-generic (2) (#10394) codegens assignment of generic metaclasses, base is non-generic (2) (#10394) - reads other instance var reads other instance var - calls class method without self calls class method without self - assigns type to reference union type assigns type to reference union type - makes .class always be a virtual type even if no subclasses makes .class always be a virtual type even if no subclasses - doesn't crash on #1216 with pointerof doesn't crash on #1216 with pointerof - codegens assignment of generic metaclasses, base is non-generic (1) (#10394) codegens assignment of generic metaclasses, base is non-generic (1) (#10394) - doesn't crash on #1216 doesn't crash on #1216 - works with array in variable initializer in non-generic type (#855) works with array in variable initializer in non-generic type (#855) works with array in variable initializer in non-generic type (#855) works with array in variable initializer in non-generic type (#855) works with array in variable initializer in non-generic type (#855) works with array in variable initializer in non-generic type (#855)������������ works with array in variable initializer in non-generic type (#855)�� works with array in variable initializer in non-generic type (#855)�� works with array in variable initializer in non-generic type (#855) works with array in variable initializer in non-generic type (#855) - codegens assignment of generic metaclasses (2) (#10394) codegens assignment of generic metaclasses (2) (#10394) - codegens assignment of generic metaclasses (1) (#10394) codegens assignment of generic metaclasses (1) (#10394) - allows using self in class scope allows using self in class scope allows using self in class scope allows using self in class scope���� allows using self in class scope������ allows using self in class scope�� allows using self in class scope�� allows using self in class scope�� allows using self in class scope allows using self in class scope - codegens virtual class method codegens virtual class method - gets class of virtual type gets class of virtual type - builds generic class bug builds generic class bug - calls method on Class class calls method on Class class - can use a Main class (#1628) can use a Main class (#1628) can use a Main class (#1628) can use a Main class (#1628) can use a Main class (#1628) can use a Main class (#1628) can use a Main class (#1628)�������������� can use a Main class (#1628)�� can use a Main class (#1628) can use a Main class (#1628) - codegens method of class union including Int (#1476) codegens method of class union including Int (#1476) - codegens class with recursive tuple to class (#4520) codegens class with recursive tuple to class (#4520) - codegens virtual method of generic class codegens virtual method of generic class - codegens new which calls initialize codegens new which calls initialize - does to_s on class does to_s on class does to_s on class does to_s on class does to_s on class������ does to_s on class������ does to_s on class�� does to_s on class�� does to_s on class does to_s on class - codegens virtual generic class instance metaclass (#3819) codegens virtual generic class instance metaclass (#3819) - allows using self in class scope allows using self in class scope - codegens method call of instance var codegens method call of instance var - doesn't crash if not using undefined instance variable in superclass doesn't crash if not using undefined instance variable in superclass - codegens virtual metaclass union bug (#2597) codegens virtual metaclass union bug (#2597) - does to_s for virtual metaclass type (1) does to_s for virtual metaclass type (1) does to_s for virtual metaclass type (1) does to_s for virtual metaclass type (1) does to_s for virtual metaclass type (1) does to_s for virtual metaclass type (1) does to_s for virtual metaclass type (1)�������������� does to_s for virtual metaclass type (1)�� does to_s for virtual metaclass type (1) does to_s for virtual metaclass type (1) - doesn't skip zero initializers (#3272) doesn't skip zero initializers (#3272) - runs with nilable instance var runs with nilable instance var - allows fixing an instance variable's type allows fixing an instance variable's type - codegens bug #168 codegens bug #168 - codegens class method codegens class method - reads a union type instance var (mixed union, second type) reads a union type instance var (mixed union, second type) - calls class method without self (2) calls class method without self (2) - allows initializing var with constant allows initializing var with constant - codegens instance var codegens instance var - can assign virtual metaclass to virtual metaclass (#3007) can assign virtual metaclass to virtual metaclass (#3007) - notifies superclass recursively on inheritance (#576) notifies superclass recursively on inheritance (#576) - codegens initialize with instance var codegens initialize with instance var - reads a union type instance var (reference union, first type) reads a union type instance var (reference union, first type) - codegens assignment of generic metaclasses (3) (#10394) codegens assignment of generic metaclasses (3) (#10394) - transfers initializer from module to generic class transfers initializer from module to generic class - runs instance variable initializer at the class level, for generic type runs instance variable initializer at the class level, for generic type - codegens call to same instance codegens call to same instance - codegens recursive type codegens recursive type - runs instance variable initializer at the class level runs instance variable initializer at the class level -Crystal::Repl::Interpreter - symbol - symbol equality symbol equality - Symbol#to_i Symbol#to_i - Symbol#to_s Symbol#to_s -Semantic: sizeof - gives error if using instance_sizeof on a struct gives error if using instance_sizeof on a struct - gives error if using instance_sizeof on a union type (#8349) gives error if using instance_sizeof on a union type (#8349) - types sizeof types sizeof - gives error if using instance_sizeof on something that's not a class gives error if using instance_sizeof on something that's not a class - gives error if using instance_sizeof on an abstract struct (#11855) gives error if using instance_sizeof on an abstract struct (#11855) - types alignof NoReturn (missing type) (#5717) types alignof NoReturn (missing type) (#5717) - types instance_sizeof types instance_sizeof - types instance_sizeof NoReturn (missing type) (#5717) types instance_sizeof NoReturn (missing type) (#5717) - gives error if using instance_sizeof on a module gives error if using instance_sizeof on a module - errors on sizeof uninstantiated generic type (#6415) errors on sizeof uninstantiated generic type (#6415) - types instance_alignof NoReturn (missing type) (#5717) types instance_alignof NoReturn (missing type) (#5717) - gives error if using instance_sizeof on an abstract struct with multiple subtypes (#11855) gives error if using instance_sizeof on an abstract struct with multiple subtypes (#11855) - types alignof types alignof - types instance_alignof types instance_alignof - gives error if using instance_sizeof on a generic type without type vars gives error if using instance_sizeof on a generic type without type vars - types sizeof NoReturn (missing type) (#5717) types sizeof NoReturn (missing type) (#5717) - gives error if using instance_sizeof on a metaclass gives error if using instance_sizeof on a metaclass -Crystal::Doc::Macro - args_to_s - shows double splat arg shows double splat arg - shows external name of arg with quotes and escaping shows external name of arg with quotes and escaping - shows simple arg and splat arg shows simple arg and splat arg - shows simple args shows simple args - shows block arg shows block arg - shows simple arg and block arg shows simple arg and block arg - shows simple arg and double splat arg shows simple arg and double splat arg - shows double splat arg shows double splat arg - shows splat arg shows splat arg - shows default value with highlighting shows default value with highlighting - shows external name of arg shows external name of arg -Semantic: method_missing - finds method_missing with 'with ... yield' finds method_missing with 'with ... yield' - errors if method_missing expands to an incorrect method errors if method_missing expands to an incorrect method - does method missing for generic type does method missing for generic type - does error in method_missing if wrong number of params does error in method_missing if wrong number of params - does error in method_missing macro with virtual type does error in method_missing macro with virtual type - errors if method_missing expands to multiple methods errors if method_missing expands to multiple methods - doesn't look up method_missing in with_yield_scope if call has a receiver (#12097) doesn't look up method_missing in with_yield_scope if call has a receiver (#12097) -Normalize: chained comparisons - normalizes two comparisons with literal normalizes two comparisons with literal - normalizes one comparison with call normalizes one comparison with call - normalizes two comparisons with calls normalizes two comparisons with calls - normalizes one comparison with literal normalizes one comparison with literal - normalizes one comparison with var normalizes one comparison with var -Semantic: module - calls super on included generic module and finds type var (2) calls super on included generic module and finds type var (2) - instantiates generic variadic module, accesses T from instance method through generic include, more args instantiates generic variadic module, accesses T from instance method through generic include, more args - errors when extending self and self defines instance vars (#9568) errors when extending self and self defines instance vars (#9568) - instantiates generic variadic module, accesses T from instance method instantiates generic variadic module, accesses T from instance method - includes generic module with self (check argument type, success) includes generic module with self (check argument type, success) - errors when recursively extending module that defines instance vars errors when recursively extending module that defines instance vars - types pointer of module types pointer of module - allows overloading with included generic module allows overloading with included generic module - can use generic module as instance variable type (2) can use generic module as instance variable type (2) - includes generic module with self (check argument superclass type, success) includes generic module with self (check argument superclass type, success) - finds inner class from inherited one (#476) finds inner class from inherited one (#476) - can use generic module as instance variable type can use generic module as instance variable type - errors when extending generic module that defines instance vars errors when extending generic module that defines instance vars - works ok in a case where a typed-def type has an underlying type that has an included generic module (bug) works ok in a case where a typed-def type has an underlying type that has an included generic module (bug) - gives error when including self gives error when including self - includes generic module with self (check return subclass type, success) includes generic module with self (check return subclass type, success) - gives helpful error message when generic type var is missing in block spec gives helpful error message when generic type var is missing in block spec - gives error with cyclic include between non-generic and generic module (2) gives error with cyclic include between non-generic and generic module (2) - initializes variable in module, recursive initializes variable in module, recursive - calls super on included generic module calls super on included generic module - types pointer of module with generic type types pointer of module with generic type - finds nested type inside method in block inside module finds nested type inside method in block inside module - can restrict module with module (#3029) can restrict module with module (#3029) - includes generic module with self (check argument superclass type, success) includes generic module with self (check argument superclass type, success) - finds in module when included finds in module when included - includes generic module and errors in call includes generic module and errors in call - includes generic module with self (check return type, success) includes generic module with self (check return type, success) - errors if declares module inside if errors if declares module inside if - correctly types type var in included module, with a restriction with a free var (bug) correctly types type var in included module, with a restriction with a free var (bug) - gives error when including self, generic module gives error when including self, generic module - finds class method in block finds class method in block - works with range and map works with range and map - errors when extending module that defines instance vars (2) (#4065) errors when extending module that defines instance vars (2) (#4065) - doesn't look up initialize past module that defines initialize (#7007) doesn't look up initialize past module that defines initialize (#7007) - calls super on included generic module and finds type var calls super on included generic module and finds type var - types pointer of module with method with two including types types pointer of module with method with two including types - errors if reopening generic module with different splat index errors if reopening generic module with different splat index - extends self extends self - includes generic module with self includes generic module with self - gives error with cyclic include, generic module gives error with cyclic include, generic module - finds types close to included module finds types close to included module - uses :Module name for modules in errors uses :Module name for modules in errors - gives error when trying to instantiate with new gives error when trying to instantiate with new - declares module automatically if not previously declared when declaring a module declares module automatically if not previously declared when declaring a module - inherits instance var type annotation from generic to concrete with T inherits instance var type annotation from generic to concrete with T - types proc of module with generic class types proc of module with generic class - errors when extending self and self defines instance vars (2) (#9568) errors when extending self and self defines instance vars (2) (#9568) - doesn't lookup type in ancestor when matches in current type (#2982) doesn't lookup type in ancestor when matches in current type (#2982) - types proc of module after type changes types proc of module after type changes - inherits instance var type annotation from generic to concrete inherits instance var type annotation from generic to concrete - errors if reopening generic module with different splat index (3) errors if reopening generic module with different splat index (3) - errors when recursively extending module that defines instance vars (2) errors when recursively extending module that defines instance vars (2) - includes generic module with self (check argument type, error) includes generic module with self (check argument type, error) - errors if reopening generic module with different type vars errors if reopening generic module with different type vars - includes generic module with type includes generic module with type - includes module with Union(T*) includes module with Union(T*) - includes module but not generic includes module but not generic - includes generic module with another generic type includes generic module with another generic type - type def does not reopen type from parent namespace (#11181) type def does not reopen type from parent namespace (#11181) - can't reopen as class can't reopen as class - can't pass module class to virtual metaclass (#6113) can't pass module class to virtual metaclass (#6113) - works with int including enumerable works with int including enumerable - gives helpful error message when generic type var is missing gives helpful error message when generic type var is missing - errors if including generic module and not specifying type vars errors if including generic module and not specifying type vars - errors when extending module that defines instance vars (#4065) errors when extending module that defines instance vars (#4065) - finds constant in generic module included in another module finds constant in generic module included in another module - gives error when including instantiation of self, generic module gives error when including instantiation of self, generic module - errors if reopening generic module with different type vars (2) errors if reopening generic module with different type vars (2) - instantiates generic variadic module, accesses T from instance method, more args instantiates generic variadic module, accesses T from instance method, more args - initializes variable in module initializes variable in module - includes generic module explicitly includes generic module explicitly - can instantiate generic module can instantiate generic module - extends module from generic class and calls class method (#7167) extends module from generic class and calls class method (#7167) - uses type declaration inside module and gives error uses type declaration inside module and gives error - types union of module and class that includes it types union of module and class that includes it - includes generic module with self (check return type, error) includes generic module with self (check return type, error) - types pointer of module with method types pointer of module with method - instantiates generic variadic module, accesses T from class method instantiates generic variadic module, accesses T from class method - errors when extending generic module that defines instance vars (2) errors when extending generic module that defines instance vars (2) - gives error with cyclic include gives error with cyclic include - errors if reopening generic module with different splat index (2) errors if reopening generic module with different splat index (2) - includes generic module explicitly and errors includes generic module explicitly and errors - extends generic module from generic class and calls class method (#7167) extends generic module from generic class and calls class method (#7167) - errors when extending self and self defines instance vars (3) (#9568) errors when extending self and self defines instance vars (3) (#9568) - uses type declaration inside module uses type declaration inside module - includes module in a class includes module in a class - types pointer of module with generic type types pointer of module with generic type - includes generic module with self, and inherits it includes generic module with self, and inherits it - extends generic module from generic module and calls class method (#7167) extends generic module from generic module and calls class method (#7167) - instantiates generic variadic module, accesses T from instance method through generic include instantiates generic variadic module, accesses T from instance method through generic include - gives error with cyclic include between non-generic and generic module gives error with cyclic include between non-generic and generic module - includes generic module with self (check return subclass type, error) includes generic module with self (check return subclass type, error) - can't reopen as struct can't reopen as struct - gives error when trying to instantiate with allocate gives error when trying to instantiate with allocate - includes but not a module includes but not a module - declares module automatically if not previously declared when declaring a class declares module automatically if not previously declared when declaring a class - errors if reopening non-generic module as generic errors if reopening non-generic module as generic - instantiates generic variadic module, accesses T from class method through generic extend instantiates generic variadic module, accesses T from class method through generic extend - extends a module extends a module - includes module in a module includes module in a module - uses type declaration inside module, recursive, and gives error uses type declaration inside module, recursive, and gives error - includes module but can't access metaclass methods includes module but can't access metaclass methods - includes module but wrong number of arguments includes module but wrong number of arguments - reports can't use instance variables inside module reports can't use instance variables inside module - inherits instance var type annotation from generic to generic to concrete inherits instance var type annotation from generic to generic to concrete -Code gen: method_missing - does method_missing macro with block does method_missing macro with block - finds method_missing with 'with ... yield' finds method_missing with 'with ... yield' - does method_missing macro with virtual type (4) does method_missing macro with virtual type (4) - does method_missing macro without args (with call) does method_missing macro without args (with call) - does method_missing macro with args does method_missing macro with args - does method_missing macro with virtual type (5) does method_missing macro with virtual type (5) - does method_missing macro with virtual type (7) does method_missing macro with virtual type (7) - does method_missing macro with virtual type (6) does method_missing macro with virtual type (6) - does method_missing macro with top level method involved does method_missing macro with top level method involved - does method_missing macro with args (with call) does method_missing macro with args (with call) - does method_missing macro with virtual type (8) does method_missing macro with virtual type (8) - does method_missing macro with virtual type (3) does method_missing macro with virtual type (3) - does method_missing macro with included module does method_missing macro with included module - works with named arguments that aren't legal variable names (#10381) works with named arguments that aren't legal variable names (#10381) - does method_missing generating method does method_missing generating method - does method_missing with assignment (bug) does method_missing with assignment (bug) - does method_missing macro with module involved does method_missing macro with module involved - does method_missing macro without args does method_missing macro without args - works with named arguments (#3654) works with named arguments (#3654) - does method_missing macro with virtual type (1) does method_missing macro with virtual type (1) - forwards forwards - does method_missing macro with virtual type (2) does method_missing macro with virtual type (2) - does method_missing macro with block but not using it does method_missing macro with block but not using it - does method_missing with assignment (2) (bug) does method_missing with assignment (2) (bug) -Crystal::Playground::AgentInstrumentorTransformer - instrument literals instrument literals - instrument ivar with obj instrument ivar with obj - instrument typeof instrument typeof - instrument single variables expressions instrument single variables expressions - instrument unless statement instrument unless statement - instrument is_a? expressions instrument is_a? expressions - instrument nested blocks unless in same line instrument nested blocks unless in same line - allow visibility modifiers allow visibility modifiers - instrument case statement instrument case statement - instrument multi statement def instrument multi statement def - do not instrument constants assignments do not instrument constants assignments - instrument assignments in the rhs instrument assignments in the rhs - instrument instance variable and class variables reads and writes instrument instance variable and class variables reads and writes - instrument puts with args instrument puts with args - instrument single statement def instrument single statement def - instrument not expressions instrument not expressions - instrument unary expressions instrument unary expressions - instrument exceptions instrument exceptions - do not instrument macro calls in class do not instrument macro calls in class - do not instrument class/module declared macro do not instrument class/module declared macro - instrument blocks and but non multi yields instrument blocks and but non multi yields - instrument nested class defs instrument nested class defs - do not instrument records class do not instrument records class - instrument single statement var def instrument single statement var def - do not instrument class initializing arguments do not instrument class initializing arguments - instrument chained comparisons (#4663) instrument chained comparisons (#4663) - instrument print with args instrument print with args - instrument if statement instrument if statement - instrument string interpolations instrument string interpolations - do not instrument top level macro calls do not instrument top level macro calls - instrument literals with expression names instrument literals with expression names - instrument while statement instrument while statement - instrument class defs instrument class defs - instrument inside modules instrument inside modules - instrument multi assignments in the rhs instrument multi assignments in the rhs - instrument returns inside def instrument returns inside def - instrument binary expressions instrument binary expressions - instrument blocks and single yields instrument blocks and single yields -Semantic: lib - errors if assigning void lib call to var (#4414) errors if assigning void lib call to var (#4414) - raises on undefined fun raises on undefined fun - errors if missing arguments errors if missing arguments - errors if lib fun call is part of dispatch errors if lib fun call is part of dispatch - errors if parameter already specified errors if parameter already specified - error if passing non primitive type as varargs error if passing non primitive type as varargs - passes float as another integer type in variable passes float as another integer type in variable - passes int as another integer type with literal passes int as another integer type with literal - allows passing splat to LibC fun allows passing splat to LibC fun - defined fun with aliased type defined fun with aliased type - reports redefinition of fun with different signature reports redefinition of fun with different signature - error if passing type to LibC with to_unsafe but type doesn't match error if passing type to LibC with to_unsafe but type doesn't match - errors if fourth argument is not a bool errors if fourth argument is not a bool - overrides definition of fun overrides definition of fun - errors if second argument is not a string errors if second argument is not a string - reports error when changing instance var type and something breaks reports error when changing instance var type and something breaks - reports error on fun argument type not primitive like reports error on fun argument type not primitive like - allows passing double splat to LibC fun allows passing double splat to LibC fun - raises wrong number of arguments raises wrong number of arguments - reports error out can only be used with lib funs in named argument reports error out can only be used with lib funs in named argument - types fun returning nothing as nil types fun returning nothing as nil - allows invoking out with underscore allows invoking out with underscore - errors if invoking to_i32! and got error in that call errors if invoking to_i32! and got error in that call - errors if lib already specified with positional argument errors if lib already specified with positional argument - correctly attached link flags if there's a macro if correctly attached link flags if there's a macro if - types a varargs external types a varargs external - disallows passing nil or pointer to arg expecting pointer disallows passing nil or pointer to arg expecting pointer - errors if unknown named arg errors if unknown named arg - errors if using void as parameter (related to #508) errors if using void as parameter (related to #508) - gathers link annotations from macro expression gathers link annotations from macro expression - reopens lib and adds same link annotations reopens lib and adds same link annotations - allows dll argument allows dll argument - reopens lib and adds more link annotations reopens lib and adds more link annotations - specifies a call convention specifies a call convention + finds yielding methods finds yielding methods + finds methods called from reachable code finds methods called from reachable code + finds method called from instance variable initializer finds method called from instance variable initializer + finds method in abstract type finds method in abstract type + finds methods with proc parameter finds methods with proc parameter + finds method with free variable finds method with free variable + finds methods in generic type finds methods in generic type +Code gen: experimental + errors if too many arguments errors if too many arguments + compiles with single string argument compiles with single string argument errors if missing link arguments errors if missing link arguments - errors if using out with non-pointer errors if using out with non-pointer - errors if CallConvention argument is not a string errors if CallConvention argument is not a string - errors if CallConvention argument is not a valid string errors if CallConvention argument is not a valid string - reports error on fun argument type not primitive like, Nil (#2994) reports error on fun argument type not primitive like, Nil (#2994) - errors if defining incompatible funs with the same name in the same lib (#3045) errors if defining incompatible funs with the same name in the same lib (#3045) - errors if missing argument errors if missing argument - passes int as another integer type in variable passes int as another integer type in variable - can use macros inside lib can use macros inside lib - error if passing non primitive type as varargs invoking to_unsafe error if passing non primitive type as varargs invoking to_unsafe - reports error if using out with an already declared variable reports error if using out with an already declared variable - raises wrong argument type raises wrong argument type - types lib var set types lib var set - types fun returning void as nil types fun returning void as nil - reports error out can only be used with lib funs reports error out can only be used with lib funs - warns if @[Link(static: true)] is specified warns if @[Link(static: true)] is specified - errors if too many link arguments errors if too many link arguments - errors if using out with void pointer (#2424) errors if using out with void pointer (#2424) - errors if redefining fun with different signature (#2468) errors if redefining fun with different signature (#2468) - clears annotations after lib clears annotations after lib - types fun returning nil as nil types fun returning nil as nil - warns if Link annotations use positional arguments warns if Link annotations use positional arguments - reports error on struct field type not primitive like reports error on struct field type not primitive like - errors if using void via typedef as parameter (related to #508) errors if using void via typedef as parameter (related to #508) - errors if defining incompatible funs with the same name in different libs (#3045) errors if defining incompatible funs with the same name in different libs (#3045) - supports forward references with struct inside struct (#399) supports forward references with struct inside struct (#399) - errors if defines def on lib errors if defines def on lib - types lib var get with forward declaration types lib var get with forward declaration - errors if using out with void pointer through type errors if using out with void pointer through type - can use out with named args can use out with named args - supports forward references (#399) supports forward references (#399) - reports error on fun return type not primitive like reports error on fun return type not primitive like - defines lib funs before funs with body defines lib funs before funs with body - errors if wrong number of arguments for CallConvention errors if wrong number of arguments for CallConvention - errors if dll argument does not end with '.dll' errors if dll argument does not end with '.dll' - errors if passing void lib call to call argument (#4414) errors if passing void lib call to call argument (#4414) - specifies a call convention to a lib specifies a call convention to a lib - types lib var get types lib var get - reports error on typedef type not primitive like reports error on typedef type not primitive like - reports error when changing var type and something breaks reports error when changing var type and something breaks - can use tuple as fun return can use tuple as fun return - can use macros inside struct can use macros inside struct - errors if first argument is not a string errors if first argument is not a string - errors if dll argument contains directory separators errors if dll argument contains directory separators - errors if using named args with variadic function errors if using named args with variadic function - can list lib functions at the top level (#12395) can list lib functions at the top level (#12395) - doesn't try to invoke unsafe for c struct/union (#1362) doesn't try to invoke unsafe for c struct/union (#1362) - errors if third argument is not a bool errors if third argument is not a bool - errors if using unknown named param errors if using unknown named param - errors if using out with varargs errors if using out with varargs - errors if invoking to_i32! and got wrong type errors if invoking to_i32! and got wrong type - errors if lib named arg is not a String errors if lib named arg is not a String - can use named args can use named args - allows invoking lib call without obj inside lib allows invoking lib call without obj inside lib + compiles with no argument compiles with no argument + errors if invalid argument type errors if invalid argument type Crystal::Repl::Interpreter - pointers - interprets pointer set and get (int) interprets pointer set and get (int) - pointerof instance var pointerof instance var - interprets pointerof, mutates var, read pointer interprets pointerof, mutates var, read pointer - pointerof class var pointerof class var - interprets nilable pointer truthiness interprets nilable pointer truthiness - discards pointer malloc discards pointer malloc - interprets pointerof and mutates memory (there are more variables) interprets pointerof and mutates memory (there are more variables) - interprets pointerof, mutates pointer, read var interprets pointerof, mutates pointer, read var - discards pointer add discards pointer add - interprets pointer diff, negative interprets pointer diff, negative - interprets pointer set and get (clear stack) interprets pointer set and get (clear stack) - pointerof read `StaticArray#@buffer` (2) pointerof read `StaticArray#@buffer` (2) - pointerof read `StaticArray#@buffer` (1) pointerof read `StaticArray#@buffer` (1) - interprets pointer add interprets pointer add - interprets pointer new and pointer address interprets pointer new and pointer address - interprets pointer set and get (union type, setter value) interprets pointer set and get (union type, setter value) - interprets pointer diff interprets pointer diff - interprets pointer set and get (bool) interprets pointer set and get (bool) - discards pointerof discards pointerof - pointerof read instance var pointerof read instance var - discards pointer diff discards pointer diff - discards pointer set discards pointer set - discards pointer get discards pointer get - interprets pointer set and get (union type) interprets pointer set and get (union type) - discards pointer new discards pointer new - interprets pointer realloc wrapper interprets pointer realloc wrapper - discards pointer realloc discards pointer realloc - interprets pointer realloc interprets pointer realloc -Codegen: special vars - preserves special vars in macro expansion with call with default arguments (#824) preserves special vars in macro expansion with call with default arguments (#824) - codegens after block 2 codegens after block 2 - codegens after block codegens after block codegens after block codegens after block codegens after block codegens after block������������ codegens after block�� codegens after block�� codegens after block codegens after block - codegens $~ codegens $~ - codegens $? codegens $? - codegens with default argument codegens with default argument - codegens $~ with nilable (1) codegens $~ with nilable (1) codegens $~ with nilable (1) codegens $~ with nilable (1) codegens $~ with nilable (1)���������� codegens $~ with nilable (1) codegens $~ with nilable (1)���� codegens $~ with nilable (1)�� codegens $~ with nilable (1) codegens $~ with nilable (1) - codegens $? with nilable (1) codegens $? with nilable (1) codegens $? with nilable (1) codegens $? with nilable (1) codegens $? with nilable (1)���������� codegens $? with nilable (1) codegens $? with nilable (1)���� codegens $? with nilable (1)�� codegens $? with nilable (1) codegens $? with nilable (1) - codegens $~ two levels codegens $~ two levels - allows with struct allows with struct - allows with primitive allows with primitive - preserves special vars if initialized inside block (#2194) preserves special vars if initialized inside block (#2194) - codegens $~ with nilable (2) codegens $~ with nilable (2) codegens $~ with nilable (2) codegens $~ with nilable (2) codegens $~ with nilable (2)���������� codegens $~ with nilable (2) codegens $~ with nilable (2)���� codegens $~ with nilable (2)�� codegens $~ with nilable (2) codegens $~ with nilable (2) - codegens $? with nilable (2) codegens $? with nilable (2) codegens $? with nilable (2) codegens $? with nilable (2) codegens $? with nilable (2)���������� codegens $? with nilable (2) codegens $? with nilable (2)���� codegens $? with nilable (2)�� codegens $? with nilable (2) codegens $? with nilable (2) - codegens in block with nested block codegens in block with nested block codegens in block with nested block codegens in block with nested block codegens in block with nested block���������� codegens in block with nested block codegens in block with nested block���� codegens in block with nested block�� codegens in block with nested block codegens in block with nested block - codegens in block codegens in block codegens in block codegens in block codegens in block���������� codegens in block codegens in block���� codegens in block�� codegens in block codegens in block - works lazily works lazily���� works lazily works lazily works lazily works lazily works lazily works lazily������������ works lazily works lazily -semantic: case - checks exhaustiveness of union with bool checks exhaustiveness of union with bool - checks exhaustiveness of enum combined with another type checks exhaustiveness of enum combined with another type - can prove case is exhaustive for @[Flags] enum when matching type can prove case is exhaustive for @[Flags] enum when matching type - checks exhaustiveness of single type checks exhaustiveness of single type - checks exhaustiveness of bool type (missing false) checks exhaustiveness of bool type (missing false) - checks exhaustiveness of bool type with other types checks exhaustiveness of bool type with other types - checks exhaustiveness of enum through method (all cases covered) checks exhaustiveness of enum through method (all cases covered) - checks exhaustiveness for tuple literal of 3 elements, and warns checks exhaustiveness for tuple literal of 3 elements, and warns - checks exhaustiveness for tuple literal with bool and underscore at second position checks exhaustiveness for tuple literal with bool and underscore at second position - checks exhaustiveness for tuple literal with bool and underscore at second position checks exhaustiveness for tuple literal with bool and underscore at second position - covers all types covers all types - checks exhaustiveness of bool type (missing true) checks exhaustiveness of bool type (missing true) - checks exhaustiveness for tuple literal of 2 elements, first is enum checks exhaustiveness for tuple literal of 2 elements, first is enum - checks exhaustiveness for tuple literal with bool and underscore at first position checks exhaustiveness for tuple literal with bool and underscore at first position - checks exhaustiveness of union type with virtual type checks exhaustiveness of union type with virtual type - checks exhaustiveness for tuple literal with types and underscore at second position checks exhaustiveness for tuple literal with types and underscore at second position - doesn't check exhaustiveness when using 'when' doesn't check exhaustiveness when using 'when' - checks exhaustiveness, covers in base type covers checks exhaustiveness, covers in base type covers - can't prove case is exhaustive for @[Flags] enum can't prove case is exhaustive for @[Flags] enum - checks exhaustiveness of enum via question method checks exhaustiveness of enum via question method - checks exhaustiveness for tuple literal with bool and underscore at second position, with partial match checks exhaustiveness for tuple literal with bool and underscore at second position, with partial match - checks exhaustiveness of enum (all cases covered) checks exhaustiveness of enum (all cases covered) - can't prove case is exhaustive for @[Flags] enum, tuple case can't prove case is exhaustive for @[Flags] enum, tuple case - checks exhaustiveness of single type (T.class) checks exhaustiveness of single type (T.class) - checks exhaustiveness for tuple literal with bool and underscore at first position, partial match checks exhaustiveness for tuple literal with bool and underscore at first position, partial match - checks exhaustiveness for tuple literal with bool and underscore at first position, with partial match checks exhaustiveness for tuple literal with bool and underscore at first position, with partial match - checks exhaustiveness for tuple literal, and passes checks exhaustiveness for tuple literal, and passes - checks exhaustiveness of nilable type with nil literal checks exhaustiveness of nilable type with nil literal - checks exhaustiveness for tuple literal with bool and underscore at second position, partial match checks exhaustiveness for tuple literal with bool and underscore at second position, partial match - checks exhaustiveness, covers in base type covers (generic type) checks exhaustiveness, covers in base type covers (generic type) - checks exhaustiveness for tuple literal with types and underscore at first position checks exhaustiveness for tuple literal with types and underscore at first position - checks exhaustiveness for tuple literal, with call checks exhaustiveness for tuple literal, with call - checks exhaustiveness for tuple literal of 2 elements, and warns checks exhaustiveness for tuple literal of 2 elements, and warns - checks exhaustiveness for tuple literal of 2 elements, first is bool checks exhaustiveness for tuple literal of 2 elements, first is bool - checks exhaustiveness for tuple literal of 3 elements, all bool checks exhaustiveness for tuple literal of 3 elements, all bool - errors if casing against a constant errors if casing against a constant - checks exhaustiveness of enum via const checks exhaustiveness of enum via const - checks exhaustiveness for tuple literal with bool and underscore at first position checks exhaustiveness for tuple literal with bool and underscore at first position - checks exhaustiveness of single type (generic) checks exhaustiveness of single type (generic) - checks exhaustiveness for tuple literal of 3 elements, all enums checks exhaustiveness for tuple literal of 3 elements, all enums - checks exhaustiveness of single type (Foo(T).class) checks exhaustiveness of single type (Foo(T).class) - checks exhaustiveness of nil type with nil literal checks exhaustiveness of nil type with nil literal -Crystal - normalize_path - assert assert - assert assert - assert assert - assert assert -implementations - find const implementation find const implementation - find class defined by macro find class defined by macro - find module implementation find module implementation - find method calls inside while cond find method calls inside while cond - find method calls inside rescue find method calls inside rescue - find struct implementation find struct implementation - find implementation from macro expansions find implementation from macro expansions - find implementation inside contained file private method find implementation inside contained file private method - find implementation in generic class methods find implementation in generic class methods - find top level method calls find top level method calls - find method calls inside if find method calls inside if - find full trace for macro expansions find full trace for macro expansions - find class inside method find class inside method - find implementors of different classes find implementors of different classes - can display text output can display text output - can display json output can display json output - find implementation inside contained class' class method find implementation inside contained class' class method - find implementation in class methods find implementation in class methods - find method calls inside trailing if find method calls inside trailing if - find enum value implementation find enum value implementation - find enum implementation find enum implementation - find implementation inside a module class find implementation inside a module class - find class implementation find class implementation - find implementation inside contained file private class' class method find implementation inside contained file private class' class method - find implementors of classes that are only used find implementors of classes that are only used - find open class implementation find open class implementation - find alias implementation find alias implementation - find implementation in generic class find implementation in generic class - find method calls inside while find method calls inside while -.parse_args - DIR with path DIR with path - DIR (absolute) DIR (absolute) - DIR DIR - DIR (relative to home) DIR (relative to home) - NAME DIR NAME DIR - DIR = . DIR = . -Semantic: var - types an assign types an assign - declares local variable and then assigns it declares local variable and then assigns it - types an assign with type declaration types an assign with type declaration - errors if declaring generic type without type vars (with local var) errors if declaring generic type without type vars (with local var) - errors if reads from underscore errors if reads from underscore - reports variable always nil reports variable always nil - declares local variable and assigns wrong type declares local variable and assigns wrong type - declares local variable but doesn't assign it in all branches declares local variable but doesn't assign it in all branches - lets type on else side of if with a Bool | Nil union lets type on else side of if with a Bool | Nil union - errors if variable already exists errors if variable already exists - declares local variable with value declares local variable with value - reports there's no self reports there's no self - declares local variable and assigns it with if declares local variable and assigns it with if - errors if declaring var that is already declared errors if declaring var that is already declared - reports undefined local variable or method reports undefined local variable or method - parse local variable as method call even if local variable is declared in call arguments parse local variable as method call even if local variable is declared in call arguments - declares local variable and immediately reads it declares local variable and immediately reads it - types a variable types a variable -Codegen: super - codegens super inside closure forwarding args codegens super inside closure forwarding args - calls super in module method (#556) calls super in module method (#556) - calls super in metaclass (#1522) calls super in metaclass (#1522) calls super in metaclass (#1522) calls super in metaclass (#1522) calls super in metaclass (#1522) calls super in metaclass (#1522)������������ calls super in metaclass (#1522)�� calls super in metaclass (#1522)�� calls super in metaclass (#1522) calls super in metaclass (#1522) - codegens super without arguments codegens super without arguments - codegens super inside closure codegens super inside closure - calls super from virtual metaclass type (#2841) calls super from virtual metaclass type (#2841) - codegens super that calls subclass method 3 codegens super that calls subclass method 3 - codegens super that calls subclass method codegens super that calls subclass method - codegens super that calls subclass method 5 codegens super that calls subclass method 5 - calls super in generic module method calls super in generic module method - codegens super that calls subclass method 6 codegens super that calls subclass method 6 - codegens super without arguments and instance variable codegens super without arguments and instance variable - doesn't invoke super twice in inherited generic types (#942) doesn't invoke super twice in inherited generic types (#942) - codegens super that calls subclass method 2 codegens super that calls subclass method 2 - calls super with dispatch (#2318) calls super with dispatch (#2318) - codegens super without arguments but parent has arguments codegens super without arguments but parent has arguments - calls super on an object (#10004) calls super on an object (#10004) - does super in virtual type including module does super in virtual type including module - build super on generic class (bug) build super on generic class (bug) - codegens super that calls subclass method 4 codegens super that calls subclass method 4 -Semantic: is_a? - applies filter inside block applies filter inside block - restricts type inside if scope 2 restricts type inside if scope 2 - restricts type inside if else when used with module type restricts type inside if else when used with module type - restricts other types inside if else restricts other types inside if else - checks union with union checks union with union - types if is_a? preceded by return if (preserves nops) types if is_a? preceded by return if (preserves nops) - restricts type inside if scope 3 restricts type inside if scope 3 - restricts in assignment restricts in assignment - does is_a? from virtual metaclass to generic metaclass (#12302) does is_a? from virtual metaclass to generic metaclass (#12302) - doesn't fail on untyped is_a (#10317) doesn't fail on untyped is_a (#10317) - is bool is bool - applies negative condition filter if then is no return applies negative condition filter if then is no return - restricts type in else but lazily restricts type in else but lazily - restricts type inside if scope 1 restricts type inside if scope 1 - checks simple type with union checks simple type with union -Semantic: exception - types a var after begin rescue as having all possible types in begin and rescue (2) types a var after begin rescue as having all possible types in begin and rescue (2) - can use break inside block inside ensure (#4470) can use break inside block inside ensure (#4470) - can't return from block inside ensure (#4470) can't return from block inside ensure (#4470) - marks fun as raises marks fun as raises - marks method calling method that raises as raises marks method calling method that raises as raises - can't return from while inside ensure (#4470) can't return from while inside ensure (#4470) - doesn't crash on break inside rescue, in while (#2441) doesn't crash on break inside rescue, in while (#2441) - errors if caught exception is a union but not all types are valid errors if caught exception is a union but not all types are valid - type is union of main and rescue blocks type is union of main and rescue blocks - types var as nilable inside ensure (1) types var as nilable inside ensure (1) - remains nilable after rescue remains nilable after rescue - doesn't consider vars as nilable inside else (#610) doesn't consider vars as nilable inside else (#610) - marks method that calls another method that raises as raises, recursively marks method that calls another method that raises as raises, recursively - types a var after begin rescue as having all possible types in begin and rescue types a var after begin rescue as having all possible types in begin and rescue - shadows local variable (1) shadows local variable (1) - doesn't type instance variable as nilable if assigned inside an exception handler after being assigned doesn't type instance variable as nilable if assigned inside an exception handler after being assigned - types a var after rescue as being nilable types a var after rescue as being nilable - can't use next inside block inside ensure (#4470) can't use next inside block inside ensure (#4470) - marks def as raises marks def as raises - can use next inside block inside ensure (#4470) can use next inside block inside ensure (#4470) - type union with empty rescue block type union with empty rescue block - can't use break inside block inside ensure (#4470) can't use break inside block inside ensure (#4470) - types a var after begin rescue as having all possible types and nil in begin if read (2) types a var after begin rescue as having all possible types and nil in begin if read (2) - marks proc literal as raises marks proc literal as raises - marks method calling lib fun that raises as raises marks method calling lib fun that raises as raises - transform nodes in else block transform nodes in else block - detects reading nil-if-read variable after exception handler (#4723) detects reading nil-if-read variable after exception handler (#4723) - types instance variable as nilable if assigned inside an exception handler (#1845) types instance variable as nilable if assigned inside an exception handler (#1845) - errors if caught exception is not a subclass of Exception without var errors if caught exception is not a subclass of Exception without var - types exception var with no types types exception var with no types - correctly types variable assigned inside nested exception handler (#9769) correctly types variable assigned inside nested exception handler (#9769) - types exception with type types exception with type - can't return from ensure (#4470) can't return from ensure (#4470) - marks instance variable as nilable if assigned inside rescue inside initialize marks instance variable as nilable if assigned inside rescue inside initialize - says syntax error on "begin; rescue ex; rescue ex : Foo; end; ex" says syntax error on "begin; rescue ex; rescue ex : Foo; end; ex" - can't use break inside while inside ensure (#4470) can't use break inside while inside ensure (#4470) - types var assignment inside block inside exception handler (#3324) types var assignment inside block inside exception handler (#3324) - assigns var inside ensure (1) (#3919) assigns var inside ensure (1) (#3919) - type for exception handler for explicit types type for exception handler for explicit types - errors if caught exception is a nested union but not all types are valid errors if caught exception is a nested union but not all types are valid - says syntax error on "begin; rescue ex; rescue; end; ex" says syntax error on "begin; rescue ex; rescue; end; ex" - doesn't infect type to variable before handler (#4002) doesn't infect type to variable before handler (#4002) - assigns var inside ensure (2) (#3919) assigns var inside ensure (2) (#3919) - types var as nilable inside ensure (2) types var as nilable inside ensure (2) - errors if caught exception is not a subclass of Exception errors if caught exception is not a subclass of Exception - types var as nilable if previously nilable (2) types var as nilable if previously nilable (2) - can use break inside while inside ensure (#4470) can use break inside while inside ensure (#4470) - says syntax error on "begin; else; 1; end" says syntax error on "begin; else; 1; end" - types a var after begin rescue with no-return in rescue types a var after begin rescue with no-return in rescue - types code with abstract exception that delegates method types code with abstract exception that delegates method - types var as nilable if previously nilable (1) types var as nilable if previously nilable (1) - can use next inside while inside ensure (#4470) can use next inside while inside ensure (#4470) - type union with empty main block type union with empty main block - correctly types variables inside conditional inside exception handler with no-return rescue (#8012) correctly types variables inside conditional inside exception handler with no-return rescue (#8012) - can't use next inside while inside ensure (#4470) can't use next inside while inside ensure (#4470) - correctly types #1988 correctly types #1988 - gets a non-nilable type if all rescue are unreachable (#8751) gets a non-nilable type if all rescue are unreachable (#8751) - types var as not nil if defined inside begin and defined inside rescue types var as not nil if defined inside begin and defined inside rescue -Code gen: offsetof - returns offset allowing manual access of first struct field returns offset allowing manual access of first struct field - returns offset of extern union returns offset of extern union - returns offset allowing manual access of tuple items returns offset allowing manual access of tuple items - returns offset allowing manual access of first class field returns offset allowing manual access of first class field - returns offset of `StaticArray#@buffer` returns offset of `StaticArray#@buffer` - returns offset allowing manual access of struct field that isn't first returns offset allowing manual access of struct field that isn't first - returns offset allowing manual access of class field that isn't first returns offset allowing manual access of class field that isn't first -Code gen: virtual type - lookup instance variables in parent types lookup instance variables in parent types - can belong to union can belong to union - initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated�������������� initializes ivars to nil even if object never instantiated�� initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated - codegens new for virtual class with one type codegens new for virtual class with one type codegens new for virtual class with one type codegens new for virtual class with one type codegens new for virtual class with one type codegens new for virtual class with one type������ codegens new for virtual class with one type�������� codegens new for virtual class with one type�� codegens new for virtual class with one type codegens new for virtual class with one type - assign instance variable in virtual type assign instance variable in virtual type - dispatches on virtual metaclass (1) dispatches on virtual metaclass (1) - call base method call base method - codegens new for virtual class with two types codegens new for virtual class with two types codegens new for virtual class with two types codegens new for virtual class with two types codegens new for virtual class with two types codegens new for virtual class with two types codegens new for virtual class with two types�������������� codegens new for virtual class with two types�� codegens new for virtual class with two types codegens new for virtual class with two types - codegens new twice for virtual codegens new twice for virtual - casts union to virtual casts union to virtual - dispatch call with nilable virtual arg dispatch call with nilable virtual arg - codegens allocate for virtual type with custom new codegens allocate for virtual type with custom new - codegens virtual call with explicit self and nilable type codegens virtual call with explicit self and nilable type - casts virtual type to union casts virtual type to union - codegens non-virtual call that calls virtual call to another virtual call codegens non-virtual call that calls virtual call to another virtual call - calls class method 2 calls class method 2 - dispatches on virtual metaclass (2) dispatches on virtual metaclass (2) - codegens virtual call with explicit self codegens virtual call with explicit self - call overwritten method call overwritten method - codegens call to Object#to_s from virtual type codegens call to Object#to_s from virtual type codegens call to Object#to_s from virtual type codegens call to Object#to_s from virtual type codegens call to Object#to_s from virtual type codegens call to Object#to_s from virtual type������������ codegens call to Object#to_s from virtual type codegens call to Object#to_s from virtual type���� codegens call to Object#to_s from virtual type codegens call to Object#to_s from virtual type - casts virtual type to base virtual type casts virtual type to base virtual type - doesn't lookup in Value+ when virtual type is Object+ doesn't lookup in Value+ when virtual type is Object+ - codegens new for new on virtual abstract class (#3835) codegens new for new on virtual abstract class (#3835) codegens new for new on virtual abstract class (#3835) codegens new for new on virtual abstract class (#3835) codegens new for new on virtual abstract class (#3835) codegens new for new on virtual abstract class (#3835) codegens new for new on virtual abstract class (#3835)�������������� codegens new for new on virtual abstract class (#3835)�� codegens new for new on virtual abstract class (#3835) codegens new for new on virtual abstract class (#3835) - dispatch call with virtual type argument dispatch call with virtual type argument - call base overwritten method call base overwritten method - codegens virtual method of abstract metaclass codegens virtual method of abstract metaclass - calls class method 1 calls class method 1 - codegens new for simple type, then for virtual codegens new for simple type, then for virtual - casts metaclass union type to virtual metaclass type (#6298) casts metaclass union type to virtual metaclass type (#6298) - calls class method 3 calls class method 3 - codegens call to Object#to_s from nilable type codegens call to Object#to_s from nilable type codegens call to Object#to_s from nilable type codegens call to Object#to_s from nilable type codegens call to Object#to_s from nilable type codegens call to Object#to_s from nilable type������������ codegens call to Object#to_s from nilable type�� codegens call to Object#to_s from nilable type�� codegens call to Object#to_s from nilable type codegens call to Object#to_s from nilable type - correctly dispatch call with block when the obj is a virtual type correctly dispatch call with block when the obj is a virtual type - returns type with virtual type def type returns type with virtual type def type - dispatches on virtual metaclass (3) dispatches on virtual metaclass (3) -Crystal::Doc::Generator - .anchor_link - generates the correct anchor link generates the correct anchor link -Crystal::Doc::Generator - crystal repo - inserts pseudo methods inserts pseudo methods - #collect_constants - returns empty array when constants are private returns empty array when constants are private - #formatted_doc - with a Experimental annotation, and docs - should generate both the docs and Experimental tag should generate both the docs and Experimental tag - with a Deprecated annotation, and no docs - should generate just the Deprecated tag should generate just the Deprecated tag - with no annotation, and no docs - should generate nothing should generate nothing - should generate the full document should generate the full document - with a Experimental annotation, and no docs - should generate just the Experimental tag should generate just the Experimental tag - should generate the full document should generate the full document - with a Deprecated annotation, and docs - should generate both the docs and Deprecated tag should generate both the docs and Deprecated tag - #formatted_summary - should generate the first line should generate the first line - with a Deprecated annotation, and no docs - should generate just the Deprecated tag should generate just the Deprecated tag - should generate the first sentence should generate the first sentence - with a Deprecated annotation, and docs - should generate both the docs and Deprecated tag should generate both the docs and Deprecated tag - should exclude whitespace before the summary line should exclude whitespace before the summary line - with a Experimental annotation, and no docs - should generate just the Experimental tag should generate just the Experimental tag - with no annotation, and no docs - should generate nothing should generate nothing - with a Experimental annotation, and docs - should generate both the docs and Experimental tag should generate both the docs and Experimental tag - generates sitemap generates sitemap - #must_include_toplevel? - returns false if program has constant which is defined in other place returns false if program has constant which is defined in other place - returns false if program has nothing returns false if program has nothing - returns false if program has macro which is defined in other place returns false if program has macro which is defined in other place - returns true if program has constant returns true if program has constant - returns true if program has macro returns true if program has macro - returns true if program has method returns true if program has method - returns false if program has method which is defined in other place returns false if program has method which is defined in other place + structs + does call receiver by value from VirtualType abstract struct to union does call receiver by value from VirtualType abstract struct to union + does constructor does constructor + discards allocate discards allocate + does allocate, set instance var and get instance var does allocate, set instance var and get instance var + mutates struct inside union mutates struct inside union + interprets read instance var of struct interprets read instance var of struct + inlines struct method that returns self (#12253) inlines struct method that returns self (#12253) + does complex class instance var initializer does complex class instance var initializer + does simple class instance var initializer does simple class instance var initializer + does class instance var initializer inheritance does class instance var initializer inheritance + does call receiver by value from VirtualType abstract struct to concrete struct (#12190) does call receiver by value from VirtualType abstract struct to concrete struct (#12190) + sets multiple instance vars in virtual abstract struct call (#12187) sets multiple instance vars in virtual abstract struct call (#12187) + does simple struct instance var initializer does simple struct instance var initializer + mutates struct stored in class var mutates struct stored in class var + casts def body to def type casts def body to def type +Codegen: private + doesn't include filename for private types doesn't include filename for private types + codegens private def in same file codegens private def in same file + codegens class vars of private types with same name (#11620) codegens class vars of private types with same name (#11620) + codegens class var of private type with same name as public type (#11620) codegens class var of private type with same name as public type (#11620) + codegens overloaded private def in same file codegens overloaded private def in same file Semantic: const - errors if using const in var declaration errors if using const in var declaration - errors if using const in proc notation parameter type errors if using const in proc notation parameter type - can use constant defined later (#2906) can use constant defined later (#2906) + types a nested constant types a nested constant + finds current type only for first path item (2) finds current type only for first path item (2) + types a nested type with same name types a nested type with same name + doesn't error if using c enum doesn't error if using c enum doesn't errors if constant depends on another one defined later through method, but constant is simple (~ 2) doesn't errors if constant depends on another one defined later through method, but constant is simple (~ 2) - doesn't count parent types as current type doesn't count parent types as current type - doesn't errors if constant depends on another one defined later through method, but constant is simple (true) doesn't errors if constant depends on another one defined later through method, but constant is simple (true) + errors on dynamic constant assignment inside block errors on dynamic constant assignment inside block + doesn't errors if constant depends on another one defined later through method, but constant is simple (- 2) doesn't errors if constant depends on another one defined later through method, but constant is simple (- 2) + doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED &- 1) doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED &- 1) + errors if using const in proc notation parameter type errors if using const in proc notation parameter type + types a constant using Path types a constant using Path errors if constant has NoReturn type (#6139) errors if constant has NoReturn type (#6139) + doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED - 1) doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED - 1) + doesn't errors if constant depends on another one defined later through method, but constant is simple (1 + ZED) doesn't errors if constant depends on another one defined later through method, but constant is simple (1 + ZED) + errors if using const in restriction errors if using const in restriction + creates container module if not exist when using Path creates container module if not exist when using Path + finds current type before parents (#4086) finds current type before parents (#4086) finds current type first finds current type first - errors if using constant as generic type (#3240) errors if using constant as generic type (#3240) + types a nested constant using Path types a nested constant using Path + doesn't errors if constant depends on another one defined later through method, but constant is simple (+ 1) doesn't errors if constant depends on another one defined later through method, but constant is simple (+ 1) errors if can't infer constant type (#3240, #3948) errors if can't infer constant type (#3240, #3948) + doesn't crash with const used in initialize (bug) doesn't crash with const used in initialize (bug) + doesn't count parent types as current type doesn't count parent types as current type + finds nearest constant first finds nearest constant first + doesn't errors if constant depends on another one defined later through method, but constant is simple (true) doesn't errors if constant depends on another one defined later through method, but constant is simple (true) + doesn't errors if constant depends on another one defined later through method, but constant is simple (1) doesn't errors if constant depends on another one defined later through method, but constant is simple (1) + errors if using const in type declaration errors if using const in type declaration types a constant reference types a constant reference - errors on dynamic constant assignment inside if errors on dynamic constant assignment inside if - doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED &* 2) doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED &* 2) - doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED - 1) doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED - 1) errors if using const in uninitialized errors if using const in uninitialized + doesn't errors if constant depends on another one defined later through method, but constant is simple (1 &+ ZED) doesn't errors if constant depends on another one defined later through method, but constant is simple (1 &+ ZED) + finds constant in module that includes module (#205) finds constant in module that includes module (#205) doesn't errors if constant depends on another one defined later through method, but constant is simple (1 + 2) doesn't errors if constant depends on another one defined later through method, but constant is simple (1 + 2) - doesn't errors if constant depends on another one defined later through method, but constant is simple ('a') doesn't errors if constant depends on another one defined later through method, but constant is simple ('a') - finds current type only for first path item (2) finds current type only for first path item (2) - finds constant in class that extends class (#205) finds constant in class that extends class (#205) - errors if using return inside constant value (#5391) errors if using return inside constant value (#5391) - doesn't errors if constant depends on another one defined later through method, but constant is simple (1) doesn't errors if constant depends on another one defined later through method, but constant is simple (1) - finds nearest constant first finds nearest constant first - types a constant types a constant - keeps type of container when using Path keeps type of container when using Path - doesn't errors if constant depends on another one defined later through method, but constant is simple (- 2) doesn't errors if constant depends on another one defined later through method, but constant is simple (- 2) - doesn't crash with const used in initialize (bug) doesn't crash with const used in initialize (bug) - doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED // 2) doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED // 2) - doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED &- 1) doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED &- 1) - errors if using const in restriction errors if using const in restriction - types a nested type with same name types a nested type with same name - types a nested constant using Path types a nested constant using Path - types a constant using Path types a constant using Path - doesn't errors if constant depends on another one defined later through method, but constant is simple (nil) doesn't errors if constant depends on another one defined later through method, but constant is simple (nil) - doesn't errors if constant depends on another one defined later through method, but constant is simple (+ 1) doesn't errors if constant depends on another one defined later through method, but constant is simple (+ 1) - finds current type only for first path item (1) finds current type only for first path item (1) - types a nested constant types a nested constant - finds const from restriction finds const from restriction + doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED &* 2) doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED &* 2) doesn't errors if constant depends on another one defined later through method, but constant is simple ("foo") doesn't errors if constant depends on another one defined later through method, but constant is simple ("foo") - creates container module if not exist when using Path creates container module if not exist when using Path - doesn't error if using c enum doesn't error if using c enum + doesn't errors if constant depends on another one defined later through method, but constant is simple (nil) doesn't errors if constant depends on another one defined later through method, but constant is simple (nil) + doesn't errors if constant depends on another one defined later through method, but constant is simple ('a') doesn't errors if constant depends on another one defined later through method, but constant is simple ('a') doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED * 2) doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED * 2) - doesn't errors if constant depends on another one defined later through method, but constant is simple (1 + ZED) doesn't errors if constant depends on another one defined later through method, but constant is simple (1 + ZED) - doesn't share variables with global scope doesn't share variables with global scope - errors on dynamic constant assignment inside block errors on dynamic constant assignment inside block types a global constant reference in method types a global constant reference in method + can use constant defined later (#2906) can use constant defined later (#2906) types a global constant reference in static method types a global constant reference in static method - errors if using const in proc notation return type errors if using const in proc notation return type - doesn't errors if constant depends on another one defined later through method, but constant is simple (1 &+ ZED) doesn't errors if constant depends on another one defined later through method, but constant is simple (1 &+ ZED) - errors if using const in type declaration errors if using const in type declaration - finds current type before parents (#4086) finds current type before parents (#4086) - finds constant in module that includes module (#205) finds constant in module that includes module (#205) types a constant inside a def types a constant inside a def -error reporting - reports wrong number of arguments reports wrong number of arguments - reports wrong number of arguments, with optional parameters reports wrong number of arguments, with optional parameters - reports missing block reports missing block - reports unexpected named argument (2) reports unexpected named argument (2) - reports unexpected block reports unexpected block - reports unexpected named argument reports unexpected named argument - uses correct name for top-level macro methods uses correct name for top-level macro methods -Code gen: cast - allows casting nil to Void* allows casting nil to Void* - codegens class method when type id is available but not a virtual type (#3490) codegens class method when type id is available but not a virtual type (#3490) - downcasts from union to union with different alignment downcasts from union to union with different alignment downcasts from union to union with different alignment downcasts from union to union with different alignment downcasts from union to union with different alignment downcasts from union to union with different alignment������������ downcasts from union to union with different alignment downcasts from union to union with different alignment���� downcasts from union to union with different alignment downcasts from union to union with different alignment - casts between union types, where union has a tuple type (#3377) casts between union types, where union has a tuple type (#3377) - casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512)���������� casts from nilable type to virtual type (#3512)���� casts from nilable type to virtual type (#3512)�� casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) - casts with block var that changes type (#3341) casts with block var that changes type (#3341) - doesn't corrupt stack when downcasting union to union with different alignment (#14285) doesn't corrupt stack when downcasting union to union with different alignment (#14285) - casts from nilable to nil casts from nilable to nil casts from nilable to nil casts from nilable to nil casts from nilable to nil casts from nilable to nil������������ casts from nilable to nil�� casts from nilable to nil�� casts from nilable to nil casts from nilable to nil - casts (bug) casts (bug) casts (bug) casts (bug) casts (bug) casts (bug)������������ casts (bug) casts (bug)���� casts (bug) casts (bug) - casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError�������������� casts from union to another union raises TypeCastError�� casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError - casts from union to another union casts from union to another union casts from union to another union casts from union to another union casts from union to another union casts from union to another union���� casts from union to another union���������� casts from union to another union�� casts from union to another union casts from union to another union - casts from virtual to single type casts from virtual to single type casts from virtual to single type casts from virtual to single type casts from virtual to single type casts from virtual to single type������������ casts from virtual to single type�� casts from virtual to single type�� casts from virtual to single type casts from virtual to single type - sidecasts from union to union with different alignment sidecasts from union to union with different alignment sidecasts from union to union with different alignment sidecasts from union to union with different alignment sidecasts from union to union with different alignment sidecasts from union to union with different alignment������������ sidecasts from union to union with different alignment sidecasts from union to union with different alignment���� sidecasts from union to union with different alignment sidecasts from union to union with different alignment - casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError������ casts from virtual to single type raises TypeCastError�������� casts from virtual to single type raises TypeCastError�� casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError - can cast from Void* to virtual type (#3014) can cast from Void* to virtual type (#3014) - casts to module casts to module casts to module casts to module casts to module casts to module������������ casts to module casts to module���� casts to module casts to module - allows casting nilable type to Void* (3) allows casting nilable type to Void* (3) - casts from int to int casts from int to int casts from int to int casts from int to int casts from int to int casts from int to int�������� casts from int to int������ casts from int to int�� casts from int to int casts from int to int - upcasts from union to union with different alignment upcasts from union to union with different alignment upcasts from union to union with different alignment upcasts from union to union with different alignment upcasts from union to union with different alignment upcasts from union to union with different alignment������������ upcasts from union to union with different alignment�� upcasts from union to union with different alignment�� upcasts from union to union with different alignment upcasts from union to union with different alignment - casts from union to single type casts from union to single type casts from union to single type casts from union to single type casts from union to single type casts from union to single type������������ casts from union to single type�� casts from union to single type�� casts from union to single type casts from union to single type - allows casting object to pointer and back allows casting object to pointer and back - allows casting nilable type to Void* (2) allows casting nilable type to Void* (2) - cast virtual metaclass type to nilable virtual instance type (#12628) cast virtual metaclass type to nilable virtual instance type (#12628) - casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError���� casts from nilable to nil raises TypeCastError���� casts from nilable to nil raises TypeCastError������ casts from nilable to nil raises TypeCastError�� casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError - casts from pointer to pointer casts from pointer to pointer casts from pointer to pointer casts from pointer to pointer casts from pointer to pointer casts from pointer to pointer������������ casts from pointer to pointer�� casts from pointer to pointer�� casts from pointer to pointer casts from pointer to pointer - allows casting nilable type to Void* (1) allows casting nilable type to Void* (1) - upcasts type to virtual (#3304) upcasts type to virtual (#3304) - upcasts from non-generic to generic upcasts from non-generic to generic - casts to base class making it virtual casts to base class making it virtual - casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError������������ casts from union to single type raises TypeCastError�� casts from union to single type raises TypeCastError�� casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError - can cast to metaclass (#11121) can cast to metaclass (#11121) - upcasts type to virtual (2) (#3304) upcasts type to virtual (2) (#3304) - casts to bigger union casts to bigger union -Crystal::Codegen::Target - normalizes triples normalizes triples - parses incomplete triples parses incomplete triples - parses freebsd version parses freebsd version -Code gen: not - doesn't crash doesn't crash - codegens not pointer (false) codegens not pointer (false) - codegens not number codegens not number - codegens not pointer (true) codegens not pointer (true) - codegens not nilable type (true) codegens not nilable type (true) - codegens not with inlinable value (#6451) codegens not with inlinable value (#6451) - codegens not true codegens not true - codegens not nilable type (false) codegens not nilable type (false) - codegens not nil codegens not nil - codegens not false codegens not false -Code gen: named tuple - codegens tuple index codegens tuple index - does to_s for NamedTuple class does to_s for NamedTuple class does to_s for NamedTuple class does to_s for NamedTuple class does to_s for NamedTuple class���� does to_s for NamedTuple class�������� does to_s for NamedTuple class�� does to_s for NamedTuple class�� does to_s for NamedTuple class does to_s for NamedTuple class - upcasts named tuple union to compatible named tuple upcasts named tuple union to compatible named tuple - codegens tuple nilable index (3) codegens tuple nilable index (3) - provides T as a named tuple literal provides T as a named tuple literal - assigns named tuple union to compatible named tuple assigns named tuple union to compatible named tuple - merges two named tuple types with same keys but different types (2) merges two named tuple types with same keys but different types (2) - downcasts union inside tuple to value (#3907) downcasts union inside tuple to value (#3907) - upcasts named tuple inside union to union with compatible named tuple upcasts named tuple inside union to union with compatible named tuple - assigns two same-size named tuple types to a same var (#3132) assigns two same-size named tuple types to a same var (#3132) - gets keys at compile time (1) gets keys at compile time (1) - codegens union of tuple of float with tuple of tuple of float codegens union of tuple of float with tuple of tuple of float - codegens tuple nilable index (1) codegens tuple nilable index (1) - assigns named tuple to compatible named tuple assigns named tuple to compatible named tuple - codegens tuple nilable index (2) codegens tuple nilable index (2) - doesn't error if NamedTuple includes a non-generic module (#10380) doesn't error if NamedTuple includes a non-generic module (#10380) - gets keys at compile time (2) gets keys at compile time (2) - allows named tuple covariance allows named tuple covariance - assigns named tuple inside union to union with compatible named tuple assigns named tuple inside union to union with compatible named tuple - accesses T and creates instance from it accesses T and creates instance from it - upcasts named tuple inside compatible named tuple upcasts named tuple inside compatible named tuple - codegens tuple index another order codegens tuple index another order - passes named tuple to def passes named tuple to def - gets size at compile time gets size at compile time - merges two named tuple types with same keys but different types (1) merges two named tuple types with same keys but different types (1) - doesn't crash when overload doesn't match doesn't crash when overload doesn't match -Semantic: struct - doesn't make virtual for Struct doesn't make virtual for Struct - allows struct to participate in virtual allows struct to participate in virtual - can't reopen as class can't reopen as class - unifies type to virtual type unifies type to virtual type - errors if defining finalize for struct (#3840) errors if defining finalize for struct (#3840) - doesn't make virtual for Float doesn't make virtual for Float - passes subtype check with generic module type on virtual type passes subtype check with generic module type on virtual type - passes subtype check with generic module type on virtual type (3) passes subtype check with generic module type on virtual type (3) - types struct declaration types struct declaration - can't reopen as module can't reopen as module - types generic struct declaration types generic struct declaration - can't extend struct from class can't extend struct from class - can't be nilable can't be nilable - doesn't make virtual for Value doesn't make virtual for Value - passes subtype check with generic module type on virtual type (2) (#10302) passes subtype check with generic module type on virtual type (2) (#10302) - doesn't error if method is not found in abstract type doesn't error if method is not found in abstract type - doesn't make virtual for Int doesn't make virtual for Int - can't extend struct from non-abstract struct can't extend struct from non-abstract struct - can't extend class from struct can't extend class from struct - can cast to base abstract struct can cast to base abstract struct -Crystal::Macro - macro id methods - forwards methods to string forwards methods to string - compares with string compares with string - compares with symbol compares with symbol - proc notation methods - gets multiple inputs gets multiple inputs - gets empty output gets empty output - gets single input gets single input - executes resolve executes resolve - gets single output gets single output - executes resolve? executes resolve? - type declaration methods - executes type executes type - executes var when instance var executes var when instance var - executes var executes var - executes value executes value - responds_to methods - executes receiver executes receiver - executes name executes name - Crystal::ArrayLiteral - executes any? (false) executes any? (false) - executes find (finds) executes find (finds) - #+ - with TupleLiteral argument - concatenates the literals into an ArrayLiteral concatenates the literals into an ArrayLiteral - with ArrayLiteral argument - concatenates the literals into an ArrayLiteral concatenates the literals into an ArrayLiteral - executes empty? executes empty? - #each #each - executes splat with symbols and strings executes splat with symbols and strings - executes sort with strings executes sort with strings - executes last executes last - executes sort with ids executes sort with ids - executes sort with ids and strings executes sort with ids and strings - executes all? (false) executes all? (false) - executes join executes join - executes push executes push - executes identify executes identify - executes any? (true) executes any? (true) - executes map with constants executes map with constants - executes []= executes []= - executes uniq executes uniq - #map_with_index - without either argument - returns the resulting array returns the resulting array - with both arguments - returns the resulting array returns the resulting array - without the index argument - returns the resulting array returns the resulting array - without the element argument - returns the resulting array returns the resulting array - executes [] with two numbers executes [] with two numbers - executes type executes type - executes sort_by executes sort_by - executes find (doesn't find) executes find (doesn't find) - executes join with strings executes join with strings - #each_with_index - with both arguments - builds the correct array builds the correct array - without the element argument - builds the correct array builds the correct array - without the index argument - builds the correct array builds the correct array - without either argument - builds the correct array builds the correct array - executes includes? executes includes? - executes map with arg executes map with arg - executes sort with numbers executes sort with numbers - executes [] with incomplete range executes [] with incomplete range - executes splat with splat executes splat with splat - executes of executes of - executes of (nop) executes of (nop) - executes splat executes splat - executes select executes select - executes reject executes reject - executes map executes map - calls block exactly once for each element in #sort_by calls block exactly once for each element in #sort_by - executes index 0 executes index 0 - executes reduce with no initial value executes reduce with no initial value - executes type (nop) executes type (nop) - executes [] with computed range executes [] with computed range - #- - with ArrayLiteral argument - removes the elements in RHS from LHS into an ArrayLiteral removes the elements in RHS from LHS into an ArrayLiteral - with TupleLiteral argument - removes the elements in RHS from LHS into an ArrayLiteral removes the elements in RHS from LHS into an ArrayLiteral - executes all? (true) executes all? (true) - executes [] with range executes [] with range - executes size executes size - executes index 1 executes index 1 - executes is_a? executes is_a? - executes reduce with initial value executes reduce with initial value - executes first executes first - executes index out of bounds executes index out of bounds - creates an array literal with a var creates an array literal with a var - executes unshift executes unshift - Crystal::TypeOf - executes args executes args - and methods - executes right executes right - executes left executes left - Crystal::External - executes is_a? executes is_a? - instancevar methods - executes name executes name - symbol methods - executes symbol != symbol executes symbol != symbol - forwards methods to string forwards methods to string - executes symbol == symbol executes symbol == symbol - Crystal::TupleLiteral - executes splat with symbols and strings executes splat with symbols and strings - executes includes? executes includes? - executes map with constants executes map with constants - executes sort with ids and strings executes sort with ids and strings - executes splat executes splat - executes splat with splat executes splat with splat - executes [] with range executes [] with range - executes sort with numbers executes sort with numbers - executes first executes first - executes size executes size - executes [] with computed range executes [] with computed range - #- - with ArrayLiteral argument - removes the elements in RHS from LHS into a TupleLiteral removes the elements in RHS from LHS into a TupleLiteral - with TupleLiteral argument - removes the elements in RHS from LHS into a TupleLiteral removes the elements in RHS from LHS into a TupleLiteral - executes push executes push - executes join with strings executes join with strings - executes select executes select - #each_with_index - without the element argument - builds the correct array builds the correct array - without the index argument - builds the correct array builds the correct array - with both arguments - builds the correct array builds the correct array - without either argument - builds the correct array builds the correct array - #each #each - executes any? (false) executes any? (false) - executes uniq executes uniq - creates a tuple literal with a var creates a tuple literal with a var - executes [] with incomplete range executes [] with incomplete range - executes last executes last - executes reject executes reject - executes is_a? executes is_a? - executes [] with 0 executes [] with 0 - executes [] out of bounds executes [] out of bounds - executes sort with ids executes sort with ids - executes all? (true) executes all? (true) - executes map executes map - executes empty? executes empty? - #map_with_index - without the element argument - returns the resulting tuple returns the resulting tuple - without the index argument - returns the resulting tuple returns the resulting tuple - without either argument - returns the resulting tuple returns the resulting tuple - with both arguments - returns the resulting tuple returns the resulting tuple - executes splat with arg executes splat with arg - executes map with arg executes map with arg - executes sort with strings executes sort with strings - executes any? (true) executes any? (true) - executes find (doesn't find) executes find (doesn't find) - executes unshift executes unshift - #+ - with TupleLiteral argument - concatenates the literals into a TupleLiteral concatenates the literals into a TupleLiteral - with ArrayLiteral argument - concatenates the literals into a TupleLiteral concatenates the literals into a TupleLiteral - executes all? (false) executes all? (false) - executes join executes join - executes find (finds) executes find (finds) - executes [] with 1 executes [] with 1 - compares versions compares versions - Crystal::MacroLiteral - executes value executes value - regex methods - executes source executes source - executes options executes options - classvar methods - executes name executes name - executes assign executes assign - Crystal::EnumDef - executes body executes body - executes base_type executes base_type - executes name executes name - executes kind executes kind - control expression methods - executes exp executes exp - executes exp (nop) executes exp (nop) - Crystal::TypeDef - executes name executes name - executes type executes type - node methods - #doc - returns the call's docs if present (wants_doc = true) returns the call's docs if present (wants_doc = true) - returns a multiline comment returns a multiline comment - returns an empty string if there are no docs on the node (wants_doc = false) returns an empty string if there are no docs on the node (wants_doc = false) - executes == on numbers (true) executes == on numbers (true) - executes == on symbols (true) (#240) executes == on symbols (true) (#240) - id - expands macro with id call on call expands macro with id call on call - expands macro with id call on char expands macro with id call on char - expands macro with id call on global path expands macro with id call on global path - expands macro with id call on string expands macro with id call on string - expands macro with id call on symbol expands macro with id call on symbol - expands macro with id call on number expands macro with id call on number - expands macro with id call on path expands macro with id call on path - executes == on numbers (false) executes == on numbers (false) - executes != on numbers (true) executes != on numbers (true) - location - line_number line_number - end line_number end line_number - end column number end column number - column number column number - filename filename - symbolize - expands macro with symbolize call on string expands macro with symbolize call on string - expands macro with symbolize call on symbol expands macro with symbolize call on symbol - expands macro with symbolize call on id expands macro with symbolize call on id - #nil? - Nop Nop - NilLiteral NilLiteral - NumberLiteral NumberLiteral - class_name - executes class_name executes class_name - executes class_name executes class_name - executes class_name executes class_name - executes class_name executes class_name - executes class_name executes class_name - executes class_name executes class_name - executes == on symbols (false) (#240) executes == on symbols (false) (#240) - stringify - expands macro with stringify call on number expands macro with stringify call on number - expands macro with stringify call on symbol expands macro with stringify call on symbol - expands macro with stringify call on call expands macro with stringify call on call - expands macro with stringify call on string expands macro with stringify call on string - #is_a? - union argument, contains NoReturn union argument, contains NoReturn - union argument, undefined types union argument, undefined types - union argument union argument - union argument, duplicate type union argument, duplicate type - union argument, mergeable union argument, mergeable - union argument, unimplemented types union argument, unimplemented types - executes != on numbers (false) executes != on numbers (false) - #doc_comment - returns an empty MacroId if there are no docs on the node (wants_doc = false) returns an empty MacroId if there are no docs on the node (wants_doc = false) - ensures each newline has a `#` prefix ensures each newline has a `#` prefix - returns the call's docs if present as a MacroId (wants_doc = true) returns the call's docs if present as a MacroId (wants_doc = true) - offsetof methods - executes offset executes offset - executes type executes type - executes assign without output executes assign without output - nilable cast methods - executes obj executes obj - executes to executes to - arg methods - executes default_value executes default_value - executes name executes name - executes internal_name executes internal_name - executes restriction executes restriction - unary expression methods - executes exp executes exp - executes is_a? executes is_a? - require methods - executes path executes path - yield methods - executes scope (nop) executes scope (nop) - executes expressions executes expressions - executes scope executes scope - Crystal::MacroExpression - executes output? executes output? - executes exp executes exp - macro if methods - executes cond executes cond - executes then executes then - executes else executes else - or methods - executes left executes left - executes right executes right - while methods - executes cond executes cond - executes body executes body - Crystal::Primitive - executes name executes name - readinstancevar methods - executes obj executes obj - executes name executes name - Crystal::CStructOrUnionDef - executes name executes name - executes body executes body - executes kind executes kind - executes union? executes union? - Crystal::MacroVar - executes name executes name - executes expressions executes expressions - Crystal::AsmOperand - executes constraint executes constraint - executes exp executes exp - macro methods - executes name executes name - executes double_splat executes double_splat - executes args executes args - executes splat_index executes splat_index - executes block_arg executes block_arg - executes visibility executes visibility - executes body executes body - macro for methods - executes exp executes exp - executes vars executes vars - executes body executes body - Crystal::FunDef - executes real_name executes real_name - executes has_body? executes has_body? - executes args executes args - executes name executes name - executes body executes body - executes variadic? executes variadic? - executes return_type executes return_type - union methods - executes resolve executes resolve - executes resolve? executes resolve? - executes types executes types - string methods - executes camelcase with invalid lower arg type executes camelcase with invalid lower arg type - executes string != string executes string != string - executes to_i executes to_i - executes gsub executes gsub - executes string > macroid executes string > macroid - executes [] with inclusive range executes [] with inclusive range - executes camelcase executes camelcase - executes string starts_with? string (true) executes string starts_with? string (true) - executes string == string executes string == string - executes split with argument executes split with argument - executes string starts_with? string (false) executes string starts_with? string (false) - executes string includes? string (true) executes string includes? string (true) - executes [] with incomplete range executes [] with incomplete range - executes chars executes chars - executes to_utf16 executes to_utf16 - executes size executes size - executes string > string executes string > string - executes string + char executes string + char - executes upcase executes upcase - executes strip executes strip - executes string includes? char (false) executes string includes? char (false) - executes underscore executes underscore - executes string < string executes string < string - executes camelcase with lower executes camelcase with lower - executes string + string executes string + string - executes string < macroid executes string < macroid - executes string includes? string (false) executes string includes? string (false) - executes string chomp executes string chomp - executes [] with computed range executes [] with computed range - executes string ends_with? string (true) executes string ends_with? string (true) - executes count executes count - executes downcase executes downcase - executes lines executes lines - executes string starts_with? char (true) executes string starts_with? char (true) - executes empty executes empty - executes string includes? char (true) executes string includes? char (true) - executes split with char argument executes split with char argument - executes string =~ (true) executes string =~ (true) - executes string =~ (false) executes string =~ (false) - executes string ends_with? string (false) executes string ends_with? string (false) - executes [] with exclusive range executes [] with exclusive range - executes split without arguments executes split without arguments - executes string ends_with? char (true) executes string ends_with? char (true) - executes capitalize executes capitalize - executes string starts_with? char (false) executes string starts_with? char (false) - executes titleize executes titleize - executes to_i(base) executes to_i(base) - executes tr executes tr - executes string ends_with? char (false) executes string ends_with? char (false) - visibility modifier methods - executes exp executes exp - executes visibility executes visibility - if methods - executes then executes then - executes cond executes cond - executes else executes else - executes else (nop) executes else (nop) - annotation methods - executes [] with other ASTNode, but raises an error executes [] with other ASTNode, but raises an error - executes [] with SymbolLiteral executes [] with SymbolLiteral - executes name executes name - executes [] with MacroId executes [] with MacroId - executes [] with NumberLiteral executes [] with NumberLiteral - executes [] with StringLiteral executes [] with StringLiteral - splat methods - executes exp executes exp - uninitialized var methods - executes var executes var - executes type executes type - Crystal::Asm - executes inputs executes inputs - executes alignstack? executes alignstack? - executes can_throw? executes can_throw? - executes clobbers executes clobbers - executes intel? executes intel? - executes text executes text - executes outputs executes outputs - executes volatile? executes volatile? - printing - print print - p! p! - pp! pp! - puts puts - pp pp - p p - proc pointer methods - executes args when empty executes args when empty - executes args when not empty executes args when not empty - executes obj when present executes obj when present - executes global? executes global? - executes obj when absent executes obj when absent - executes name executes name - Crystal::ExternalVar - executes type executes type - executes name executes name - executes real_name executes real_name - assign methods - executes target executes target - executes value executes value - #parse_type - raises on extra unparsed tokens after the type raises on extra unparsed tokens after the type - generic generic - exposes syntax warnings exposes syntax warnings - path path - raises on extra unparsed tokens before the type raises on extra unparsed tokens before the type - union - | union - | - union - in generic union - in generic - metaclass metaclass - raises on non StringLiteral arguments raises on non StringLiteral arguments - proc proc - union - Union union - Union - raises on empty string raises on empty string - generic methods - executes resolve executes resolve - executes type_vars executes type_vars - executes types executes types - executes name executes name - executes named_args executes named_args - executes resolve? executes resolve? - cast methods - executes to executes to - executes obj executes obj - Crystal::TypeNode - executes instance executes instance - executes class_vars on symbol type executes class_vars on symbol type - #union? - false false - true true - executes >= executes >= - executes instance_vars executes instance_vars - #nilable? - true true - false false - executes == executes == - #name - simple type - returns the name of the type returns the name of the type - generic instance - does not print extra commas for empty splat type var (2) does not print extra commas for empty splat type var (2) - prints generic type arguments prints generic type arguments - prints empty splat type var prints empty splat type var - does not print extra commas for empty splat type var (3) does not print extra commas for empty splat type var (3) - prints multiple arguments for splat type var prints multiple arguments for splat type var - does not print extra commas for empty splat type var (1) does not print extra commas for empty splat type var (1) - namespaced type - should return the FQN of the type should return the FQN of the type - generic type - includes the generic_args of the instantiated type by default includes the generic_args of the instantiated type by default - includes the generic_args of the type by default includes the generic_args of the type by default - generic_args - true - includes the generic_args of the instantiated type includes the generic_args of the instantiated type - includes the generic_args of the type includes the generic_args of the type - false - does not include the generic_args of the type does not include the generic_args of the type - does not include the generic_args of the instantiated type does not include the generic_args of the instantiated type - with an invalid type argument - should raise the proper exception should raise the proper exception - executes methods executes methods - public? - false false - true true - executes resolve executes resolve - executes class vars (with inheritance) executes class vars (with inheritance) - visibility - public public - private private - #warning - emits a warning at a specific node emits a warning at a specific node - executes ancestors executes ancestors - #abstract? - Crystal::GenericClassType - struct - non-abstract non-abstract - abstract abstract - class - non-abstract non-abstract - abstract abstract - Crystal::NonGenericClassType - class - abstract abstract - non-abstract non-abstract - struct - abstract abstract - non-abstract non-abstract - Crystal::GenericModuleType Crystal::GenericModuleType - Crystal::NonGenericModuleType Crystal::NonGenericModuleType - #id - does not include trailing + for virtual type does not include trailing + for virtual type - executes instance_vars on symbol type executes instance_vars on symbol type - executes union_types (union) executes union_types (union) - executes superclass executes superclass - executes size of tuple executes size of tuple - executes < executes < - executes class vars executes class vars - #has_inner_pointers? - works on structs works on structs - works on primitive values works on primitive values - works on ReferenceStorage works on ReferenceStorage - works on references works on references - #struct? - Crystal::GenericModuleType Crystal::GenericModuleType - Crystal::GenericClassType - class class - struct struct - Crystal::NonGenericModuleType Crystal::NonGenericModuleType - Crystal::NonGenericClassType - struct struct - class class - executes class_vars on metaclass executes class_vars on metaclass - executes <= executes <= - executes resolve? executes resolve? - executes class methods executes class methods - executes > executes > - executes private? - false false - true true - executes class executes class - executes != executes != - executes size of tuple metaclass executes size of tuple metaclass - #class? - Crystal::NonGenericClassType - class class - struct struct - Crystal::GenericClassType - struct struct - class class - Crystal::GenericModuleType Crystal::GenericModuleType - Crystal::NonGenericModuleType Crystal::NonGenericModuleType - executes instance_vars on metaclass executes instance_vars on metaclass - executes type_vars executes type_vars - #module? - Crystal::NonGenericModuleType Crystal::NonGenericModuleType - Crystal::GenericClassType - struct struct - class class - Crystal::GenericModuleType Crystal::GenericModuleType - Crystal::NonGenericClassType - struct struct - class class - executes union_types (non-union) executes union_types (non-union) - #includers - returns an array of types `self` is directly included in returns an array of types `self` is directly included in - == and != devirtualize generic type arguments (#10730) == and != devirtualize generic type arguments (#10730) - executes ancestors (with generic) executes ancestors (with generic) - Crystal::LibDef - executes name executes name - executes body executes body - executes kind executes kind - proc literal methods - executes body executes body - executes args executes args - executes return_type executes return_type - path methods - executes names executes names - executes global? executes global? - executes resolve executes resolve - executes types executes types - executes global executes global - executes resolve? executes resolve? - Crystal::RangeLiteral - executes map executes map - executes to_a executes to_a - #each #each - executes begin executes begin - executes end executes end - executes excludes_end? executes excludes_end? - Crystal::ModuleDef - executes body executes body - executes splat_index executes splat_index - executes name executes name - executes kind executes kind - executes type_vars executes type_vars - metaclass methods - executes resolve executes resolve - executes resolve? executes resolve? - executes instance executes instance - block methods - executes body executes body - executes splat_index executes splat_index - executes args executes args - exception handler methods - executes else executes else - executes rescues executes rescues - executes ensure executes ensure - executes ensure (nop) executes ensure (nop) - executes rescue body executes rescue body - executes rescue name executes rescue name - executes rescue types executes rescue types - executes else (nop) executes else (nop) - executes body executes body - Crystal::NamedTupleLiteral - executes map executes map - executes size executes size - executes values executes values - executes double splat executes double splat - executes empty? executes empty? - executes to_a executes to_a - executes [] not found executes [] not found - executes keys executes keys - executes double splat executes double splat - executes has_key? executes has_key? - creates a named tuple literal with a var creates a named tuple literal with a var - executes double splat with arg executes double splat with arg - executes []= executes []= - executes [] executes [] - #each - without the key argument - builds the correct array builds the correct array - without the value argument - builds the correct array builds the correct array - with both arguments - builds the correct array builds the correct array - without either argument - builds the correct array builds the correct array - executes [] with invalid key type executes [] with invalid key type - executes is_a? executes is_a? - flag? - has flag has flag - doesn't have flag doesn't have flag - expressions methods - executes expressions executes expressions - metavar methods - executes name executes name - executes id executes id - executes nothing executes nothing - executes is_a? executes is_a? - call methods - executes block executes block - executes block arg (nop) executes block arg (nop) - executes global? executes global? - executes receiver executes receiver - executes name executes name - executes block arg executes block arg - executes args executes args - executes named args name executes named args name - executes named args executes named args - executes named args value executes named args value - env - has key has key - doesn't have key doesn't have key - Crystal::Include - executes name executes name - char methods - executes ord executes ord - #warning - emits a top level warning emits a top level warning - global methods - executes name executes name - Crystal::ClassDef - executes body executes body - executes splat_index executes splat_index - executes struct? executes struct? - executes superclass executes superclass - executes type_vars executes type_vars - executes abstract? executes abstract? - executes kind executes kind - executes name executes name - Crystal::Extend - executes name executes name - number methods - executes > (false) executes > (false) - executes // executes // - executes ^ executes ^ - executes > (true) executes > (true) - executes unary - executes unary - - executes >> executes >> - executes <=> executes <=> - executes kind executes kind - executes < (true) executes < (true) - executes ** executes ** - executes << executes << - preserves integer size (#10713) preserves integer size (#10713) - executes + executes + - executes % executes % - executes < (false) executes < (false) - executes unary ~ executes unary ~ - executes - executes - - executes unary + executes unary + - executes >= (true) executes >= (true) - executes <= (true) executes <= (true) - executes math operations using U/Int128 executes math operations using U/Int128 - executes <= (false) executes <= (false) - executes <=> (returns nil) executes <=> (returns nil) - executes | executes | - executes + and preserves type executes + and preserves type - executes * executes * - #to_number #to_number - executes + with float executes + with float - executes >= (false) executes >= (false) - executes & executes & - multi_assign methods - executes values executes values - executes targets executes targets - Crystal::Alias - executes type executes type - executes name executes name - is_a methods - executes arg executes arg - executes receiver executes receiver - Crystal::Select - executes whens executes whens - executes else executes else - Crystal::AnnotationDef - executes kind executes kind - executes body executes body - executes name executes name - instancevar methods - executes name executes name - def methods - executes abstract? executes abstract? - executes receiver executes receiver - executes return_type executes return_type - executes accepts_block? executes accepts_block? - executes splat_index executes splat_index - executes visibility executes visibility - executes block_arg executes block_arg - executes body executes body - executes args executes args - executes name executes name - executes double_splat executes double_splat - executes free_vars executes free_vars - Crystal::HashLiteral - executes has_key? executes has_key? - executes to_a executes to_a - executes of_value (nop) executes of_value (nop) - executes type executes type - executes values executes values - executes keys executes keys - creates a hash literal with a var creates a hash literal with a var - executes [] not found executes [] not found - executes of_key (nop) executes of_key (nop) - executes type (nop) executes type (nop) - executes of_key executes of_key - executes double splat with arg executes double splat with arg - #each - without the key argument - builds the correct array builds the correct array - without either argument - builds the correct array builds the correct array - with both arguments - builds the correct array builds the correct array - without the value argument - builds the correct array builds the correct array - executes is_a? executes is_a? - executes [] executes [] - executes size executes size - executes map executes map - executes []= executes []= - executes of_value executes of_value - executes empty? executes empty? - executes double splat executes double splat - executes double splat executes double splat - case methods - when - executes when exhaustive? executes when exhaustive? - executes cond executes cond - executes exhaustive? executes exhaustive? - executes whens executes whens - executes when conds executes when conds - executes when body executes when body - executes else executes else - in - executes when exhaustive? executes when exhaustive? - executes exhaustive? executes exhaustive? - executes whens executes whens -Code gen: or - codegens or with bool false and true codegens or with bool false and true - codegens or with bool union as left node 3 codegens or with bool union as left node 3 - codegens or with nilable as left node 1 codegens or with nilable as left node 1 - codegens or with bool false and false codegens or with bool false and false - codegens or with non-false union as left node codegens or with non-false union as left node - codegens or with bool union as left node 1 codegens or with bool union as left node 1 - codegens or with bool union as left node 1 codegens or with bool union as left node 1 - codegens or with primitive type other than bool with union codegens or with primitive type other than bool with union - codegens or with bool union as left node 2 codegens or with bool union as left node 2 - codegens or with nilable as left node 2 codegens or with nilable as left node 2 - codegens or with primitive type other than bool codegens or with primitive type other than bool - codegens or with bool union as left node 4 codegens or with bool union as left node 4 - codegens or with bool true and true codegens or with bool true and true - codegens or with bool true and false codegens or with bool true and false - codegens or with bool union as left node 2 codegens or with bool union as left node 2 - codegens or with primitive type other than bool codegens or with primitive type other than bool - codegens or with bool and int 2 codegens or with bool and int 2 - codegens or with bool union as left node 3 codegens or with bool union as left node 3 - codegens or with nil union as left node 2 codegens or with nil union as left node 2 - codegens or with bool and int 1 codegens or with bool and int 1 - codegens or with nil union as left node 1 codegens or with nil union as left node 1 -Semantic: nilable instance var - says self was used before instance var was initialized (3) says self was used before instance var was initialized (3) - says self was used before instance var was initialized (2) says self was used before instance var was initialized (2) - says instance var was not initialized in all of the initialize methods (2) says instance var was not initialized in all of the initialize methods (2) - says instance var was not initialized in all of the initialize methods, with var declaration says instance var was not initialized in all of the initialize methods, with var declaration - marks instance var as nilable if assigned inside proc literal marks instance var as nilable if assigned inside proc literal - doesn't consider as nil if initialized with catch-all doesn't consider as nil if initialized with catch-all - says instance var was used before initialized says instance var was used before initialized - says instance var was used before initialized (2) says instance var was used before initialized (2) - finds type that doesn't initialize instance var (#1222) finds type that doesn't initialize instance var (#1222) - marks instance var as nilable if assigned inside captured block (#1696) marks instance var as nilable if assigned inside captured block (#1696) - says instance var was not initialized in all of the initialize methods says instance var was not initialized in all of the initialize methods - says self was used before instance var was initialized says self was used before instance var was initialized -Code gen: and - codegens assign in right node, after if must be nilable codegens assign in right node, after if must be nilable - codegens and with primitive type other than bool with union codegens and with primitive type other than bool with union - codegens and with bool union as left node 1 codegens and with bool union as left node 1 - codegens assign in right node, inside if must not be nil codegens assign in right node, inside if must not be nil - codegens and with bool union as left node 3 codegens and with bool union as left node 3 - codegens and with bool true and true codegens and with bool true and true - codegens and with bool false and false codegens and with bool false and false - codegens and with nil union as left node 1 codegens and with nil union as left node 1 - codegens and with bool union as left node 3 codegens and with bool union as left node 3 - codegens and with primitive type other than bool codegens and with primitive type other than bool - codegens assign in right node, after must be nilable codegens assign in right node, after must be nilable - codegens and with bool union as left node 2 codegens and with bool union as left node 2 - codegens and with bool and int 2 codegens and with bool and int 2 - codegens and with bool false and true codegens and with bool false and true - codegens and with bool union as left node 2 codegens and with bool union as left node 2 - codegens and with nil union as left node 2 codegens and with nil union as left node 2 - codegens and with bool union as left node 1 codegens and with bool union as left node 1 - codegens and with nilable as left node 2 codegens and with nilable as left node 2 - codegens and with bool true and false codegens and with bool true and false - codegens and with bool and int 1 codegens and with bool and int 1 - codegens and with non-false union as left node codegens and with non-false union as left node - codegens and with nilable as left node 1 codegens and with nilable as left node 1 - codegens and with primitive type other than bool codegens and with primitive type other than bool - codegens and with bool union as left node 4 codegens and with bool union as left node 4 -Crystal::Doc::MarkdDocRenderer - renders code spans - renders "`<style>`" renders "`<style>`" - renders headline - renders "## Foo Bar" renders "## Foo Bar" - renders "## Foo Bar\n### Sub\n## Bar Baz\n### Sub" renders "## Foo Bar\n### Sub\n## Bar Baz\n### Sub" - renders code blocks - renders "```cr\nHello\nWorld\n```" renders "```cr\nHello\nWorld\n```" - renders "```\nHello\nWorld\n```" renders "```\nHello\nWorld\n```" - renders "```crystal\nHello\nWorld\n```" renders "```crystal\nHello\nWorld\n```" - renders html - renders "<h1 align=\"center\">Foo</h1>" renders "<h1 align=\"center\">Foo</h1>" - renders links - renders "[`Foo`](http://example.com/foo)" renders "[`Foo`](http://example.com/foo)" - renders "[foo](http://example.com/foo)" renders "[foo](http://example.com/foo)" - renders "[filter](https://docs.celestine.dev/Celestine/Meta/Context.html#filter(&block:Celestine::Filter-%3ECelestine::Filter)-instance-method)" renders "[filter](https://docs.celestine.dev/Celestine/Meta/Context.html#filter(&block:Celestine::Filter-%3ECelestine::Filter)-instance-method)" - expand_code_links - finds method with unspecified args finds method with unspecified args - finds method of an absolute type finds method of an absolute type - finds operator method with unspecified args finds operator method with unspecified args - finds sibling methods finds sibling methods - finds multiple kinds of things finds multiple kinds of things - finds absolute type finds absolute type - finds sibling methods with self receiver finds sibling methods with self receiver - does not break when referencing lib type (#9928) does not break when referencing lib type (#9928) - finds operator method finds operator method - matches methods on single-character class names matches methods on single-character class names - finds method with question mark finds method with question mark - finds nested type finds nested type - doesn't find method with wrong number of args doesn't find method with wrong number of args - doesn't find sibling methods of wrong type doesn't find sibling methods of wrong type - finds types from nested finds types from nested - finds method with exclamation mark finds method with exclamation mark - finds types from base finds types from base - finds method with args even with empty brackets finds method with args even with empty brackets - doesn't find parents' methods doesn't find parents' methods - doesn't find wrong absolute type doesn't find wrong absolute type - finds multiple methods with brackets finds multiple methods with brackets - doesn't find substrings for methods doesn't find substrings for methods - doesn't find parents' methods doesn't find parents' methods - finds methods of a type finds methods of a type - finds method with args finds method with args - doesn't find type not at word boundary doesn't find type not at word boundary - doesn't find wrong kind of methods doesn't find wrong kind of methods - doesn't match with different separator doesn't match with different separator - finds method with zero args finds method with zero args - doesn't find sibling methods with fake receiver doesn't find sibling methods with fake receiver - doesn't find method with wrong number of args doesn't find method with wrong number of args - finds constant finds constant - finds sibling methods finds sibling methods - doesn't find wrong kind of sibling methods doesn't find wrong kind of sibling methods - doesn't spuriously match range literals doesn't spuriously match range literals -Semantic: nilable cast - types as? with union types as? with union - types as? types as? - does upcast does upcast - doesn't introduce type filter for nilable cast object (#12661) doesn't introduce type filter for nilable cast object (#12661) - casts to module casts to module - types as? with nil types as? with nil - doesn't crash with typeof no-type (#7441) doesn't crash with typeof no-type (#7441) - types as? with NoReturn types as? with NoReturn -Semantic: def - allows recursion with arg allows recursion with arg - says can only defined def on types and self says can only defined def on types and self - reports no overload matches 2 reports no overload matches 2 - uses free variable and doesn't conflict with top-level type uses free variable and doesn't conflict with top-level type - errors when calling two functions with nil type errors when calling two functions with nil type - types call with global scope types call with global scope - reports no overload matches reports no overload matches - types putchar with Char types putchar with Char - shows free variables if no overload matches shows free variables if no overload matches - can't use self in toplevel method can't use self in toplevel method - uses free variable as block return type uses free variable as block return type - gives correct error for wrong number of arguments for program call inside type (#1024) gives correct error for wrong number of arguments for program call inside type (#1024) - points error at name (#6937) points error at name (#6937) - errors when default value is incompatible with type restriction errors when default value is incompatible with type restriction - types a call with an argument uses a new scope types a call with an argument uses a new scope - do not use body for the def type do not use body for the def type - defines class method defines class method - lookups methods in super modules lookups methods in super modules - says compile-time type on error says compile-time type on error - gives correct error for methods in Class (2) gives correct error for methods in Class (2) - types a call with an argument types a call with an argument - assigns def owner assigns def owner - defines class method with self defines class method with self - errors if return type doesn't match errors if return type doesn't match - types simple recursion 2 types simple recursion 2 - types a call with an int types a call with an int - gives correct error for methods in Class gives correct error for methods in Class - reports no block given reports no block given - is ok if returns Int32? with explicit return is ok if returns Int32? with explicit return - errors when default value is incompatible with non-type restriction errors when default value is incompatible with non-type restriction - types mutual infinite recursion types mutual infinite recursion - errors if return type doesn't match on instance method errors if return type doesn't match on instance method - types a call with a float types a call with a float - types getchar with Char types getchar with Char - uses free variable uses free variable - types simple recursion types simple recursion - types empty body def types empty body def - errors if declares def inside if errors if declares def inside if - allows recursion allows recursion - doesn't find type in namespace through free var doesn't find type in namespace through free var - errors if trying to declare method on generic class instance errors if trying to declare method on generic class instance - types call with union argument types call with union argument - types a call with a double types a call with a double - accesses free var of default argument (#1101) accesses free var of default argument (#1101) - clones regex literal value (#2384) clones regex literal value (#2384) - fixes bug #165 fixes bug #165 - reports block given reports block given - uses free variable with metaclass uses free variable with metaclass - errors if return type doesn't match on class method errors if return type doesn't match on class method - gives correct error for wrong number of arguments for program call inside type (2) (#1024) gives correct error for wrong number of arguments for program call inside type (2) (#1024) - types a call with an argument types a call with an argument - types mutual recursion types mutual recursion - uses free variable with metaclass and default value uses free variable with metaclass and default value - calls with default argument calls with default argument - reports undefined method reports undefined method -cleanup - strip named-tuple elements after unreachable element strip named-tuple elements after unreachable element - errors if assigning instance var to itself errors if assigning instance var to itself - strip tuple elements after unreachable element strip tuple elements after unreachable element - errors if assigning var to itself errors if assigning var to itself -Crystal::Repl::Interpreter - classes - does allocate, set instance var and get instance var does allocate, set instance var and get instance var - calls implicit struct self method calls implicit struct self method - does constructor does constructor - calls explicit struct self method calls explicit struct self method - discards allocate discards allocate - does object_id does object_id - calls implicit class self method calls implicit class self method - interprets read instance var interprets read instance var - downcasts virtual type to its only type (#12351) downcasts virtual type to its only type (#12351) - inlines instance var access from virtual type with a single type (#39520) inlines instance var access from virtual type with a single type (#39520) -Semantic: yield with scope - uses method of enclosing scope uses method of enclosing scope - yields virtual type (#2171) (2) yields virtual type (#2171) (2) - uses instance variable of enclosing scope uses instance variable of enclosing scope - generate right code when yielding struct as scope generate right code when yielding struct as scope - uses scope in instance method uses scope in instance method uses scope in instance method uses scope in instance method uses scope in instance method uses scope in instance method������������ uses scope in instance method�� uses scope in instance method�� uses scope in instance method uses scope in instance method - yields with dispatch (#2171) (1) yields with dispatch (#2171) (1) - doesn't explode if specifying &block but never using it (#181) doesn't explode if specifying &block but never using it (#181) - it uses self for instance method it uses self for instance method it uses self for instance method it uses self for instance method it uses self for instance method it uses self for instance method it uses self for instance method�������������� it uses self for instance method�� it uses self for instance method it uses self for instance method - uses scope in global method uses scope in global method uses scope in global method uses scope in global method uses scope in global method uses scope in global method uses scope in global method������������ uses scope in global method���� uses scope in global method uses scope in global method - uses method of with object uses method of with object - it invokes global method inside block of yield scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope�������������� it invokes global method inside block of yield scope�� it invokes global method inside block of yield scope it invokes global method inside block of yield scope -Semantic: did you mean - says did you mean finds most similar in type says did you mean finds most similar in type - says did you mean for instance var says did you mean for instance var - says did you mean for named argument says did you mean for named argument - doesn't suggest for operator doesn't suggest for operator - doesn't suggest when declaring var inside macro (#466) doesn't suggest when declaring var inside macro (#466) - suggest that there might be a typo for an initialize method suggest that there might be a typo for an initialize method - suggests a better alternative to logical operators (#2715) suggests a better alternative to logical operators (#2715) - says did you mean for one mistake in short word in instance method says did you mean for one mistake in short word in instance method - says did you mean for global method without parenthesis says did you mean for global method without parenthesis - says did you mean for class says did you mean for class - says did you mean finds most similar in def says did you mean finds most similar in def - says did you mean for global method with parenthesis says did you mean for global method with parenthesis - suggest that there might be a typo for an initialize method with overload suggest that there might be a typo for an initialize method with overload - says did you mean in instance var declaration says did you mean in instance var declaration - suggest that there might be a typo for an initialize method in inherited class suggest that there might be a typo for an initialize method in inherited class - doesn't suggest when declaring var with suffix if and using it (#946) doesn't suggest when declaring var with suffix if and using it (#946) - says did you mean for variable says did you mean for variable - says did you mean for two mistakes in long word in instance method says did you mean for two mistakes in long word in instance method - says did you mean for instance var in subclass says did you mean for instance var in subclass - suggests for class variable suggests for class variable - says did you mean for nested class says did you mean for nested class -Block inference - ignores void return type (3) (#427) ignores void return type (3) (#427) - reports mismatch with generic argument type in input type reports mismatch with generic argument type in input type - allows yielding multiple types when a union is expected allows yielding multiple types when a union is expected - errors if using (Object ->) as block return type (#2358) errors if using (Object ->) as block return type (#2358) - errors if proc is not instantiated errors if proc is not instantiated - error with self output type doesn't match error with self output type doesn't match - errors if splat parameter becomes a union errors if splat parameter becomes a union - allows initialize with yield (#224) allows initialize with yield (#224) - ignores block parameter if not used ignores block parameter if not used - infers type of block before call infers type of block before call - types empty block types empty block - errors if declares module inside block errors if declares module inside block - correctly types unpacked tuple block arg after block (#3339) correctly types unpacked tuple block arg after block (#3339) - reports error on method instantiate (#4543) reports error on method instantiate (#4543) - reports error if yields a type that's not that one in the block specification reports error if yields a type that's not that one in the block specification - break without value has nil type break without value has nil type - does next from block without value does next from block without value - doesn't crash on #2531 doesn't crash on #2531 - passes &->f passes &->f - errors when using local variable with block parameter name errors when using local variable with block parameter name - yields in overload, matches type yields in overload, matches type - binds to proc, not only to its body (#1796) binds to proc, not only to its body (#1796) - maps block of union types to union types maps block of union types to union types - types bug with yield not_nil! that is never not nil types bug with yield not_nil! that is never not nil - errors if declares alias inside block errors if declares alias inside block - doesn't auto-unpack tuple, more args doesn't auto-unpack tuple, more args - infer type of local variable infer type of local variable - error with self input type doesn't match error with self input type doesn't match - ignores void return type (#427) ignores void return type (#427) - infer type with self block arg infer type with self block arg - yields splat yields splat - returns from proc literal returns from proc literal - auto-unpacks tuple, captured block auto-unpacks tuple, captured block - reports error if yields a type that later changes and that's not that one in the block specification reports error if yields a type that later changes and that's not that one in the block specification - does next from block with value does next from block with value - errors if declares lib inside block errors if declares lib inside block - sets captured block type to that of restriction with alias sets captured block type to that of restriction with alias - uses splat in block parameter, but not enough yield expressions uses splat in block parameter, but not enough yield expressions - infer type of block body infer type of block body - auto-unpacks tuple, too many args auto-unpacks tuple, too many args - uses splat in block parameter, many args uses splat in block parameter, many args - recalculates call that uses block arg output as free var recalculates call that uses block arg output as free var - checks block type with virtual type checks block type with virtual type - errors on recursive yield with non ProcNotation restriction (#6896) errors on recursive yield with non ProcNotation restriction (#6896) - uses block var with same name as local var uses block var with same name as local var - errors if declares macro inside block errors if declares macro inside block - errors if alias is not a fun type errors if alias is not a fun type - yields splat and non splat yields splat and non splat - uses block arg, too many parameters uses block arg, too many parameters - doesn't mix local var with block var, using break (#2314) doesn't mix local var with block var, using break (#2314) - uses free var in return type in captured block uses free var in return type in captured block - can infer block type given that the method has a return type (#7160) can infer block type given that the method has a return type (#7160) - preserves type filters in block preserves type filters in block - errors if declares def inside block errors if declares def inside block - reports error if missing arguments to yield reports error if missing arguments to yield - allows invoking method on a object of a captured block with a type that was never instantiated allows invoking method on a object of a captured block with a type that was never instantiated - finds type inside module in block finds type inside module in block - allows alias as block fun type allows alias as block fun type - ignores void return type (4) ignores void return type (4) - infer type of yield infer type of yield - respects block arg restriction when block has a splat parameter (#6473) respects block arg restriction when block has a splat parameter (#6473) - auto-unpacks tuple, too many args, captured block auto-unpacks tuple, too many args, captured block - errors if declares class inside block errors if declares class inside block - errors if declares extend inside block errors if declares extend inside block - renders expected block return type of a free variable on mismatch renders expected block return type of a free variable on mismatch - passes #233: block with initialize with default args passes #233: block with initialize with default args - reports mismatch with generic argument type in output type reports mismatch with generic argument type in output type - errors if using Object as block return type (#2358) errors if using Object as block return type (#2358) - uses splat in block parameter uses splat in block parameter - auto-unpacks tuple, less than max auto-unpacks tuple, less than max - does next from captured block does next from captured block - passes #262 passes #262 - errors if declares fun inside block errors if declares fun inside block - infers type of block before call taking other args free vars into account infers type of block before call taking other args free vars into account - reports error if block didn't return expected type reports error if block didn't return expected type - errors if using ( -> Object) as block return type (#2358) errors if using ( -> Object) as block return type (#2358) - errors if declares include inside block errors if declares include inside block - errors if yields from top level errors if yields from top level - doesn't crash on cleaning up typeof node without dependencies (#8669) doesn't crash on cleaning up typeof node without dependencies (#8669) - matches block arg return type matches block arg return type - yields with different types yields with different types - auto-unpacks tuple auto-unpacks tuple - types recursive hash assignment types recursive hash assignment - auto-unpacks tuple, captured block with multiple statements auto-unpacks tuple, captured block with multiple statements - sets captured block type to that of restriction sets captured block type to that of restriction - reports error if block type doesn't match reports error if block type doesn't match - auto-unpacks with block arg type auto-unpacks with block arg type - doesn't mix local var with block var, using next (#2314) doesn't mix local var with block var, using next (#2314) - uses block return type as return type, even if can't infer block type uses block return type as return type, even if can't infer block type - errors if declares class inside captured block errors if declares class inside captured block - doesn't fail with 'already had enclosing call' (#11200) doesn't fail with 'already had enclosing call' (#11200) - reports error if block changes type reports error if block changes type - errors if breaks from captured block errors if breaks from captured block - errors if doing next in proc literal errors if doing next in proc literal - break from block without value break from block without value - matches block with generic type and free var matches block with generic type and free var - uses free var in return type with tuple type uses free var in return type with tuple type - infer type with union infer type with union - binds block return type free variable even if there are no block parameters (#1797) binds block return type free variable even if there are no block parameters (#1797) - errors if returns from captured block errors if returns from captured block - does next from block with value 2 does next from block with value 2 - errors if using Bar | Object as block return type (#2358) errors if using Bar | Object as block return type (#2358) - doesn't assign block variable type to last value (#694) doesn't assign block variable type to last value (#694) - errors on recursive yield errors on recursive yield - respects block arg restriction when block has a splat parameter (2) (#9524) respects block arg restriction when block has a splat parameter (2) (#9524) - errors if declares enum inside block errors if declares enum inside block - infer type of empty block body infer type of empty block body - auto-unpacks tuple, captured empty block auto-unpacks tuple, captured empty block - ignores void return type (2) (#427) ignores void return type (2) (#427) - errors on recursive yield with ProcNotation restriction errors on recursive yield with ProcNotation restriction - reports error if yields a type that's not that one in the block specification reports error if yields a type that's not that one in the block specification - auto-unpacks tuple, less than max, captured block auto-unpacks tuple, less than max, captured block - unpacks block argument unpacks block argument - infer type of block parameter infer type of block parameter - infers type of block with generic type infers type of block with generic type - allows underscore in block return type even if the return type can't be computed allows underscore in block return type even if the return type can't be computed - errors if invoking new with block when no initialize is defined errors if invoking new with block when no initialize is defined -Crystal::TextHierarchyPrinter - shows correct total size of generic class if known shows correct total size of generic class if known - shows correct size for Proc inside extern struct shows correct size for Proc inside extern struct - shows correct size for Bool member shows correct size for Bool member - shows correct size for members with bound types shows correct size for members with bound types - works works + errors if using return inside constant value (#5391) errors if using return inside constant value (#5391) + errors on dynamic constant assignment inside if errors on dynamic constant assignment inside if + keeps type of container when using Path keeps type of container when using Path + errors if using const in proc notation return type errors if using const in proc notation return type + finds const from restriction finds const from restriction + finds constant in class that extends class (#205) finds constant in class that extends class (#205) + doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED // 2) doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED // 2) + errors if using const in var declaration errors if using const in var declaration + errors if using constant as generic type (#3240) errors if using constant as generic type (#3240) + doesn't share variables with global scope doesn't share variables with global scope + types a constant types a constant + finds current type only for first path item (1) finds current type only for first path item (1) +Semantic: def overload + matches a generic module argument with free var matches a generic module argument with free var + filter union type with virtual filter union type with virtual + matches on partial union matches on partial union + does not consider global paths as free variables (2) does not consider global paths as free variables (2) + treats single splats with same restriction as equivalent (2) (#12579) treats single splats with same restriction as equivalent (2) (#12579) + types a call with overload self in included module other type types a call with overload self in included module other type + types a call with overload Object type first overload types a call with overload Object type first overload + matches a union argument with free var matches a union argument with free var + compare self type with others compare self type with others + says `no overload matches` instead of `can't instantiate abstract class` on wrong argument in new method says `no overload matches` instead of `can't instantiate abstract class` on wrong argument in new method + lookup matches in virtual type inside union lookup matches in virtual type inside union + uses long name when no overload matches and name is the same (#1030) uses long name when no overload matches and name is the same (#1030) + types a call with overload self types a call with overload self + types a call with overload with yield the other way types a call with overload with yield the other way + errors when binding free variable to different types (2) errors when binding free variable to different types (2) + types a call with overload type first overload types a call with overload type first overload + doesn't match tuples of different sizes doesn't match tuples of different sizes + matches types with free variables matches types with free variables + accepts overload with nilable type restriction accepts overload with nilable type restriction + can call overload with generic restriction can call overload with generic restriction + errors if union restriction has multiple free vars errors if union restriction has multiple free vars + prefers more specific overload than one with free variables prefers more specific overload than one with free variables + dispatches with named arg dispatches with named arg + gets free variable from union restriction without a union gets free variable from union restriction without a union + matches a generic module argument matches a generic module argument + restrict matches to minimum necessary 1 restrict matches to minimum necessary 1 + compare_strictness + subsumption conflicts + named vs named named vs named + single splat vs named single splat vs named + single splat vs double splat single splat vs double splat + positional vs positional positional vs positional + named vs double splat named vs double splat + positional vs named positional vs named + positional vs single splat positional vs single splat + positional vs double splat positional vs double splat + specificity conflicts, named vs named + (required > optional) vs (required > optional) (required > optional) vs (required > optional) + (required > splat) vs (optional > splat) (required > splat) vs (optional > splat) + (required > splat) vs (required > splat) (required > splat) vs (required > splat) + (optional > splat) vs (optional > splat) (optional > splat) vs (optional > splat) + (required > optional) vs (optional > splat) (required > optional) vs (optional > splat) + (required > optional) vs (required > splat) (required > optional) vs (required > splat) + specificity conflicts, positional vs named + (required > splat) vs (required > optional) (required > splat) vs (required > optional) + (optional > splat) vs (optional > splat) (optional > splat) vs (optional > splat) + (required > optional) vs (optional > splat) (required > optional) vs (optional > splat) + (required > splat) vs (required > splat) (required > splat) vs (required > splat) + (required > optional) vs (required > splat) (required > optional) vs (required > splat) + (required > splat) vs (optional > splat) (required > splat) vs (optional > splat) + (required > optional) vs (required > optional) (required > optional) vs (required > optional) + (optional > splat) vs (required > optional) (optional > splat) vs (required > optional) + (optional > splat) vs (required > splat) (optional > splat) vs (required > splat) + named parameters + named parameter with restriction vs double splat with stricter restriction named parameter with restriction vs double splat with stricter restriction + named parameter with stricter restriction vs double splat with restriction named parameter with stricter restriction vs double splat with restriction + named parameter vs double splat with restriction named parameter vs double splat with restriction + named parameter with restriction vs double splat (#5328) named parameter with restriction vs double splat (#5328) + double splat restriction vs double splat with stricter restriction double splat restriction vs double splat with stricter restriction + double splat vs double splat with restriction double splat vs double splat with restriction + specificity specificity + positional parameters + positional parameter vs single splat with restriction positional parameter vs single splat with restriction + specificity specificity + single splat restriction vs single splat with stricter restriction single splat restriction vs single splat with stricter restriction + positional parameter with restriction vs single splat with stricter restriction positional parameter with restriction vs single splat with stricter restriction + positional parameter with stricter restriction vs single splat with restriction positional parameter with stricter restriction vs single splat with restriction + positional parameter with restriction vs single splat positional parameter with restriction vs single splat + single splat vs single splat with restriction (#3134) single splat vs single splat with restriction (#3134) + subsumption has higher precedence over specificity + same positional parameter, optional > single splat same positional parameter, optional > single splat + named vs (required positional > optional positional) named vs (required positional > optional positional) + named vs (optional named > double splat) named vs (optional named > double splat) + single splat vs (optional named > double splat) single splat vs (optional named > double splat) + positional vs (optional named > double splat) positional vs (optional named > double splat) + positional vs (optional positional > single splat) positional vs (optional positional > single splat) + same positional parameter, required > single splat same positional parameter, required > single splat + same named parameter, required > double splat same named parameter, required > double splat + positional vs (required positional > optional positional) positional vs (required positional > optional positional) + single splat vs (required named > double splat) single splat vs (required named > double splat) + double splat vs (required positional > single splat) double splat vs (required positional > single splat) + double splat vs (required positional > optional positional) double splat vs (required positional > optional positional) + single splat vs (required named > optional named) single splat vs (required named > optional named) + positional vs (required positional > single splat) positional vs (required positional > single splat) + positional vs (required named > optional named) positional vs (required named > optional named) + double splat vs (optional positional > single splat) double splat vs (optional positional > single splat) + same named parameter, optional > double splat same named parameter, optional > double splat + named vs (required positional > single splat) named vs (required positional > single splat) + named vs (required named > optional named) named vs (required named > optional named) + positional vs (required named > double splat) positional vs (required named > double splat) + named vs (optional positional > single splat) named vs (optional positional > single splat) + named vs (required named > double splat) named vs (required named > double splat) + same positional parameter, required > optional same positional parameter, required > optional + same named parameter, required > optional same named parameter, required > optional + types a call with overload self in included module types a call with overload self in included module + includes splat symbol in error message includes splat symbol in error message + resets free vars after a partial match is rejected (#10270) resets free vars after a partial match is rejected (#10270) + restrict virtual type with virtual type restrict virtual type with virtual type + types a call with overload types a call with overload + types a call with overload selecting the most restrictive types a call with overload selecting the most restrictive + uses method defined in base class if the restriction doesn't match uses method defined in base class if the restriction doesn't match + overloads on metaclass (#2916) overloads on metaclass (#2916) + matches a union argument with free var, more types (1) matches a union argument with free var, more types (1) + matches tuples and uses free var matches tuples and uses free var + types a call with overload selecting the most restrictive 2 types a call with overload selecting the most restrictive 2 + matches virtual type to union matches virtual type to union + types a call with overload matches virtual 2 types a call with overload matches virtual 2 + does not consider global paths as free variables (1) does not consider global paths as free variables (1) + matches tuples of different sizes matches tuples of different sizes + can call overload with aliased generic restriction can call overload with aliased generic restriction + gets free variable from union restriction gets free variable from union restriction + matches a generic module argument with free var (2) matches a generic module argument with free var (2) + gives correct error message, looking up parent defs, when no overload matches gives correct error message, looking up parent defs, when no overload matches + types a call with overload self with inherited type types a call with overload self with inherited type + overloads with named argument (#4465) overloads with named argument (#4465) + restricts union to generic class restricts union to generic class + overloads union against non-union (#2904) overloads union against non-union (#2904) + types a call with overload with yield after typing another call without yield types a call with overload with yield after typing another call without yield + types a call with overload matches virtual 3 types a call with overload matches virtual 3 + restricts on generic type without type arg restricts on generic type without type arg + gets free variable from union restriction (2) gets free variable from union restriction (2) + resets free vars after a partial match is rejected (2) (#10185) resets free vars after a partial match is rejected (2) (#10185) + doesn't match with wrong number of type arguments (#313) doesn't match with wrong number of type arguments (#313) + types a call with overload type second overload types a call with overload type second overload + errors if no overload matches on union against named arg with external param name (#10516) errors if no overload matches on union against named arg with external param name (#10516) + finds method after including module in generic module (#1201) finds method after including module in generic module (#1201) + treats single splats with same restriction as equivalent (#12579) treats single splats with same restriction as equivalent (#12579) + errors when binding free variable to different types errors when binding free variable to different types + gives better error message with consecutive arguments sizes gives better error message with consecutive arguments sizes + doesn't crash on unknown metaclass doesn't crash on unknown metaclass + dispatch call to def with restrictions dispatch call to def with restrictions + considers NamedTuple in a module's including types (#10380) considers NamedTuple in a module's including types (#10380) + overloads on metaclass (2) (#2916) overloads on metaclass (2) (#2916) + types a call with overload matches virtual types a call with overload matches virtual + matches a union metaclass argument with free var (#8071) matches a union metaclass argument with free var (#8071) + single type restriction wins over union single type restriction wins over union + types a call with overload with yield types a call with overload with yield + matches tuple with underscore matches tuple with underscore + matches a union argument with free var, more types (2) matches a union argument with free var, more types (2) + types a call with overload self other match types a call with overload self other match + errors if generic type doesn't match errors if generic type doesn't match + reports no overload matches with correct method owner (#2083) reports no overload matches with correct method owner (#2083) + errors if union restriction has multiple free vars (2) errors if union restriction has multiple free vars (2) + dispatch call to def with restrictions dispatch call to def with restrictions + errors if no overload matches on union against named arg (#2640) errors if no overload matches on union against named arg (#2640) + overloads on metaclass (3) (#2916) overloads on metaclass (3) (#2916) + matches generic class instance type with another one matches generic class instance type with another one + restricts on generic type with free type arg restricts on generic type with free type arg +Parser + parses "foo.responds_to? :foo" parses "foo.responds_to? :foo" + parses ":foo" parses ":foo" + parses "x = 1; foo x { }" parses "x = 1; foo x { }" + parses "foo &.[0] = 1" parses "foo &.[0] = 1" + parses "a : Foo()*" parses "a : Foo()*" + parses "def self.===; end;" parses "def self.===; end;" + parses "-@foo" parses "-@foo" + parses "case :foo; when :bar; 2; end" parses "case :foo; when :bar; 2; end" + parses "Set() {1, 2, 3}" parses "Set() {1, 2, 3}" + says syntax error on "def foo\nabstract\nend" says syntax error on "def foo\nabstract\nend" + parses "{% begin %}%i{ %s }{% end %}" parses "{% begin %}%i{ %s }{% end %}" + parses "a = 1\ncase 1\nwhen a then 1\nend" parses "a = 1\ncase 1\nwhen a then 1\nend" + parses "property lib : Int32" parses "property lib : Int32" + parses "a, *b = 1" parses "a, *b = 1" + parses "foo.==(1, 2)" parses "foo.==(1, 2)" + parses "def foo(@@var); 1; end" parses "def foo(@@var); 1; end" + parses "break 1 if true" parses "break 1 if true" + parses "foo.<(1, 2)" parses "foo.<(1, 2)" + parses "foo(&.as(T))" parses "foo(&.as(T))" + parses ":\"\\\"foo\"" parses ":\"\\\"foo\"" + parses ":&**" parses ":&**" + sets correct location of global path in annotation sets correct location of global path in annotation + says syntax error on "def foo(self); end" says syntax error on "def foo(self); end" + parses "Int[8, 4,]" parses "Int[8, 4,]" + says syntax error on "break ? 1 : 2" says syntax error on "break ? 1 : 2" + says syntax error on "def foo(foo private); end" says syntax error on "def foo(foo private); end" + parses "\"hello \\\n world\"" parses "\"hello \\\n world\"" + parses ":>" parses ":>" + parses "if (\ntrue\n)\n1\nend" parses "if (\ntrue\n)\n1\nend" + parses "def self./; end;" parses "def self./; end;" + parses "{% begin %}%Q< %s >{% end %}" parses "{% begin %}%Q< %s >{% end %}" + parses "/foo/imximx" parses "/foo/imximx" + parses "foo[\n1\n]" parses "foo[\n1\n]" + says syntax error on "foo { |(false)| }" says syntax error on "foo { |(false)| }" + parses "{\"foo\": 1, \"bar\": 2}" parses "{\"foo\": 1, \"bar\": 2}" + parses "Foo(T, 1, U)" parses "Foo(T, 1, U)" + says syntax error on "pointerof(self)" says syntax error on "pointerof(self)" + parses "1 <= 2" parses "1 <= 2" + parses "foo(z: 0, a: n &** 2)" parses "foo(z: 0, a: n &** 2)" + parses "def !=; end;" parses "def !=; end;" + parses "def foo(x @@end); end" parses "def foo(x @@end); end" + says syntax error on "*a, b, c, d, e = 1, 2" says syntax error on "*a, b, c, d, e = 1, 2" + says syntax error on "macro foo(x y z); end" says syntax error on "macro foo(x y z); end" + parses "foo 1;" parses "foo 1;" + parses "+ 1" parses "+ 1" + says syntax error on "def foo(unless); end" says syntax error on "def foo(unless); end" + parses "{% begin %}%w[ %s ]{% end %}" parses "{% begin %}%w[ %s ]{% end %}" + parses "x[0] ? 1 : 0" parses "x[0] ? 1 : 0" + parses "macro foo; 1 + 2; end" parses "macro foo; 1 + 2; end" + parses "def foo(\nvar\n); end" parses "def foo(\nvar\n); end" + parses "foo(z: 0, a: n >> 2)" parses "foo(z: 0, a: n >> 2)" + parses "def foo(x @@lib); end" parses "def foo(x @@lib); end" + parses "@[Foo(\n1, foo: 2\n)]" parses "@[Foo(\n1, foo: 2\n)]" + says syntax error on "def foo(**a foo); end" says syntax error on "def foo(**a foo); end" + parses "foo.=== do end" parses "foo.=== do end" + parses "{% begin %}%i[ %s ]{% end %}" parses "{% begin %}%i[ %s ]{% end %}" + parses "foo { |(_, c)| c }" parses "foo { |(_, c)| c }" + parses "foo.< do end" parses "foo.< do end" + parses "foo = 1; ->foo.>(Int32)" parses "foo = 1; ->foo.>(Int32)" + parses "foo.^(1, 2) { 3 }" parses "foo.^(1, 2) { 3 }" + parses "macro foo;unless %var;true;end;end" parses "macro foo;unless %var;true;end;end" + parses "foo.- do end" parses "foo.- do end" + parses "foo &.each {\n}" parses "foo &.each {\n}" + parses "/fo\\so/" parses "/fo\\so/" + parses "def self.&(); end;" parses "def self.&(); end;" + says syntax error on "def foo(macro); end" says syntax error on "def foo(macro); end" + says syntax error on "foo { |(require)| }" says syntax error on "foo { |(require)| }" + says syntax error on "1 while 3" says syntax error on "1 while 3" + parses "{{ foo.nil? }}" parses "{{ foo.nil? }}" + parses "nil : Int32" parses "nil : Int32" + parses "def foo(x @if); end" parses "def foo(x @if); end" + parses "1.foo do; 1; end" parses "1.foo do; 1; end" + parses "*a = 1" parses "*a = 1" + parses "def foo(x = 1, *y); 1; end" parses "def foo(x = 1, *y); 1; end" + parses "def =~; end" parses "def =~; end" + says syntax error on "<<-HERE\n One\n wrong\n Zero\n HERE" says syntax error on "<<-HERE\n One\n wrong\n Zero\n HERE" + parses "class Foo(T1); end" parses "class Foo(T1); end" + parses "def foo;{{@type}};end" parses "def foo;{{@type}};end" + parses "foo.+(1, 2)" parses "foo.+(1, 2)" + parses "fun foo : Int32; 1; end; 2" parses "fun foo : Int32; 1; end; 2" + parses "macro foo\n'\\''\nend" parses "macro foo\n'\\''\nend" + parses "when : Int32" parses "when : Int32" + parses "-1" parses "-1" + parses "{%\na = 1\n%}" parses "{%\na = 1\n%}" + parses "macro &;end" parses "macro &;end" + parses "Foo({x: X, typeof: Y})" parses "Foo({x: X, typeof: Y})" + parses "lib LibC; {{ 1 }}; end" parses "lib LibC; {{ 1 }}; end" + says syntax error on "macro foo(**x, y)" says syntax error on "macro foo(**x, y)" + parses "as(Bar)" parses "as(Bar)" + parses "macro foo(a, @[Foo] var);end" parses "macro foo(a, @[Foo] var);end" + says syntax error on "case 1 == 1; when 2 a; end" says syntax error on "case 1 == 1; when 2 a; end" + parses "{% x if 1 %}" parses "{% x if 1 %}" + parses "1;-2" parses "1;-2" + parses "def foo(x @until); end" parses "def foo(x @until); end" + parses "enum Foo; @[Bar]; end" parses "enum Foo; @[Bar]; end" + parses "lib LibC\nfun SomeFun\nend" parses "lib LibC\nfun SomeFun\nend" + says syntax error on "foo { |yield| }" says syntax error on "foo { |yield| }" + parses "1 ^ 2" parses "1 ^ 2" + says syntax error on "Hash {foo: 1} of Int32 => Int32" says syntax error on "Hash {foo: 1} of Int32 => Int32" + says syntax error on "return[0]" says syntax error on "return[0]" + sets correct location of annotation in lib sets correct location of annotation in lib + parses "->Foo.foo?" parses "->Foo.foo?" + parses "macro : Int32" parses "macro : Int32" + parses "begin; 1; rescue ::Foo; 2; end" parses "begin; 1; rescue ::Foo; 2; end" + parses "extend self" parses "extend self" + parses "foo.>" parses "foo.>" + parses "macro foo(x, *y);end" parses "macro foo(x, *y);end" + parses "1.as Bar" parses "1.as Bar" + says syntax error on "class Foo(T U)" says syntax error on "class Foo(T U)" + parses "sizeof(X)" parses "sizeof(X)" + says syntax error on "a, b, c, d, *e = 1, 2, 3" says syntax error on "a, b, c, d, *e = 1, 2, 3" + parses "1 +2.0" parses "1 +2.0" + parses "def foo(@end); end" parses "def foo(@end); end" + parses "macro foo;bar{% if x %}body{% end %}baz;end" parses "macro foo;bar{% if x %}body{% end %}baz;end" + parses "<<-HERE\n \#{1}One\n \#{2}Zero\n HERE" parses "<<-HERE\n \#{1}One\n \#{2}Zero\n HERE" + parses "def self.=~; end;" parses "def self.=~; end;" + parses "def foo(x, *, y); 1; end" parses "def foo(x, *, y); 1; end" + parses "&+ 1" parses "&+ 1" + parses "abstract def foo : Int32" parses "abstract def foo : Int32" + says syntax error on "macro is_a?; end" says syntax error on "macro is_a?; end" + parses "def foo(a, &block : Int, Float -> Double); end" parses "def foo(a, &block : Int, Float -> Double); end" + parses "@foo/2" parses "@foo/2" + parses "property require : Int32" parses "property require : Int32" + says syntax error on "return << 1" says syntax error on "return << 1" + parses "->Foo.===(Int32)" parses "->Foo.===(Int32)" + parses "lib LibC; struct Foo; {% if 1 %}2{% end %}; end; end" parses "lib LibC; struct Foo; {% if 1 %}2{% end %}; end; end" + says syntax error on "macro foo.bar;end" says syntax error on "macro foo.bar;end" + parses "property macro : Int32" parses "property macro : Int32" + parses "1 !~ 2" parses "1 !~ 2" + says syntax error on "foo { |select| }" says syntax error on "foo { |select| }" + parses "alias : Int32" parses "alias : Int32" + parses "a = 1; a &+= 1" parses "a = 1; a &+= 1" + parses "[] of ->\n1" parses "[] of ->\n1" + parses "macro %;end" parses "macro %;end" + parses ":[]?" parses ":[]?" + parses "def foo(@@true); end" parses "def foo(@@true); end" + says syntax error on "break when true" says syntax error on "break when true" + says syntax error on "A = foo { B = 1 }" says syntax error on "A = foo { B = 1 }" + parses "begin\n1\nend\nif true; end" parses "begin\n1\nend\nif true; end" + parses "foo.=~ 1, 2" parses "foo.=~ 1, 2" + parses "foo %i" parses "foo %i" + says syntax error on "return - 1" says syntax error on "return - 1" + says syntax error on "def as; end" says syntax error on "def as; end" + parses "foo = 1; ->foo.foo=" parses "foo = 1; ->foo.foo=" + parses "<<-HERE\r\n One\r\n Zero\r\n HERE" parses "<<-HERE\r\n One\r\n Zero\r\n HERE" + parses "foo./(1, 2) { 3 }" parses "foo./(1, 2) { 3 }" + parses "foo +1.0" parses "foo +1.0" + parses "def &(); end" parses "def &(); end" + says syntax error on "foo { |(case)| }" says syntax error on "foo { |(case)| }" + parses "def &; end;" parses "def &; end;" + parses "-> do; 1; rescue; 2; end" parses "-> do; 1; rescue; 2; end" + parses "def ^(); end;" parses "def ^(); end;" + says syntax error on "foo { |pointerof| }" says syntax error on "foo { |pointerof| }" + parses "select\nwhen foo\n2\nwhen bar\n4\nend" parses "select\nwhen foo\n2\nwhen bar\n4\nend" + parses "foo = 1; ->foo.-(Int32)" parses "foo = 1; ->foo.-(Int32)" + parses "case : Int32" parses "case : Int32" + parses "lib LibC; struct Foo; end end" parses "lib LibC; struct Foo; end end" + parses "def foo(def foo); end" parses "def foo(def foo); end" + parses "def foo(select foo); end" parses "def foo(select foo); end" + says syntax error on "def foo(instance_sizeof); end" says syntax error on "def foo(instance_sizeof); end" + parses "::A::B" parses "::A::B" + parses "case\nend" parses "case\nend" + parses "1 || 2" parses "1 || 2" + says syntax error on "def foo(x y, x z); end" says syntax error on "def foo(x y, x z); end" + parses "foo.<=" parses "foo.<=" + parses "foo.*(1, 2)" parses "foo.*(1, 2)" + parses "{1 =>\n2, 3 =>\n4}" parses "{1 =>\n2, 3 =>\n4}" + parses ":<=>" parses ":<=>" + parses "def : Int32" parses "def : Int32" + parses "def foo(@private); end" parses "def foo(@private); end" + parses "def foo(@lib); end" parses "def foo(@lib); end" + parses "`foo\#{1}bar`" parses "`foo\#{1}bar`" + says syntax error on "foo(&block) {}" says syntax error on "foo(&block) {}" + says syntax error on "foo { |class| }" says syntax error on "foo { |class| }" + parses "a = 1; a[2] ||= 3" parses "a = 1; a[2] ||= 3" + parses "yield : Int32" parses "yield : Int32" + says syntax error on "a = 1; b = 2; a, b += 1, 2" says syntax error on "a = 1; b = 2; a, b += 1, 2" + parses "def ~(); end;" parses "def ~(); end;" + says syntax error on "def foo(foo abstract); end" says syntax error on "def foo(foo abstract); end" + says syntax error on "foo { |lib| }" says syntax error on "foo { |lib| }" + says syntax error on "foo { |offsetof| }" says syntax error on "foo { |offsetof| }" + parses "a ? 1 : b ? 2 : c ? 3 : 0" parses "a ? 1 : b ? 2 : c ? 3 : 0" + parses "macro !=;end" parses "macro !=;end" + parses "property return : Int32" parses "property return : Int32" + parses "case 1\nelse\n2\nend" parses "case 1\nelse\n2\nend" + parses "begin; 1; rescue ex; 2; end" parses "begin; 1; rescue ex; 2; end" + parses "module Foo(T); end" parses "module Foo(T); end" + parses "def foo(lib foo); end" parses "def foo(lib foo); end" + parses "1 > 2" parses "1 > 2" + says syntax error on "<<-HERE\n One\nwrong\n Zero\n HERE" says syntax error on "<<-HERE\n One\nwrong\n Zero\n HERE" + sets correct location of tuple type sets correct location of tuple type + parses "def foo(@instance_sizeof); end" parses "def foo(@instance_sizeof); end" + parses "begin; / /; end" parses "begin; / /; end" + parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) : \"eax\", \"ebx\" : \"volatile\", \"alignstack\", \"intel\")" parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) : \"eax\", \"ebx\" : \"volatile\", \"alignstack\", \"intel\")" + parses "def foo(abstract foo); end" parses "def foo(abstract foo); end" + parses "enum Foo : UInt16; end" parses "enum Foo : UInt16; end" + says syntax error on "def foo(foo break); end" says syntax error on "def foo(foo break); end" + parses "def self.~; end;" parses "def self.~; end;" + says syntax error on "a.b() = 1" says syntax error on "a.b() = 1" + parses "foo.+ 1, 2" parses "foo.+ 1, 2" + parses "def foo; yield(1); end" parses "def foo; yield(1); end" + parses "1 / -2" parses "1 / -2" + parses "foo a, / /" parses "foo a, / /" + parses "1 +2_i64" parses "1 +2_i64" + parses "foo %q()" parses "foo %q()" + says syntax error on "<<-FOO\n1\nFOO + 2" says syntax error on "<<-FOO\n1\nFOO + 2" + parses "n >= 2" parses "n >= 2" + parses "`foo`" parses "`foo`" + parses "foo.!~ 1, 2" parses "foo.!~ 1, 2" + parses "def []=(*args, **opts, &); end" parses "def []=(*args, **opts, &); end" + parses "call(foo : A, end : B)" parses "call(foo : A, end : B)" + says syntax error on "case 1\nin 1; 2" says syntax error on "case 1\nin 1; 2" + says syntax error on "case 1\nin Int32; 2; when 2" says syntax error on "case 1\nin Int32; 2; when 2" + says syntax error on "@@foo :: Foo" says syntax error on "@@foo :: Foo" + parses "def foo(@nil); end" parses "def foo(@nil); end" + parses "a : Foo" parses "a : Foo" + parses "def foo(return foo); end" parses "def foo(return foo); end" + parses "def foo(@return); end" parses "def foo(@return); end" + parses "def self.^(); end;" parses "def self.^(); end;" + parses "[1, 2] of Int" parses "[1, 2] of Int" + says syntax error on "Foo(T, x: U)" says syntax error on "Foo(T, x: U)" + parses "def foo(fun foo); end" parses "def foo(fun foo); end" + parses "puts %w{one two}" parses "puts %w{one two}" + parses "a = 1; a >>=\n1" parses "a = 1; a >>=\n1" + parses "class Foo\ndef foo; end; end" parses "class Foo\ndef foo; end; end" + parses "macro foo(a, @[Foo] &block);end" parses "macro foo(a, @[Foo] &block);end" + parses "def self.&; end;" parses "def self.&; end;" + parses "def foo(x @@offsetof); end" parses "def foo(x @@offsetof); end" + says syntax error on "a {} = 1" says syntax error on "a {} = 1" + says syntax error on "def foo(fun); end" says syntax error on "def foo(fun); end" + says syntax error on "next + 1" says syntax error on "next + 1" + parses "asm(\"nop\" ::)" parses "asm(\"nop\" ::)" + parses "->(x : Int32) : Int32 { }" parses "->(x : Int32) : Int32 { }" + parses "def <(); end;" parses "def <(); end;" + parses "asm(\"nop\" ::::)" parses "asm(\"nop\" ::::)" + parses "x, y, z = <<-FOO, <<-BAR, <<-BAZ\nhello\nFOO\nworld\nBAR\n!\nBAZ" parses "x, y, z = <<-FOO, <<-BAR, <<-BAZ\nhello\nFOO\nworld\nBAR\n!\nBAZ" + says syntax error on "def foo(x : U) forall U,; end" says syntax error on "def foo(x : U) forall U,; end" + parses "foo.> 1, 2" parses "foo.> 1, 2" + says syntax error on "a.[]() += 1" says syntax error on "a.[]() += 1" + parses "nil" parses "nil" + parses "foo % i()" parses "foo % i()" + parses "foo[0] = 1" parses "foo[0] = 1" + parses "a.foo(&block)" parses "a.foo(&block)" + parses "property sizeof : Int32" parses "property sizeof : Int32" + parses "foo(n > 2)" parses "foo(n > 2)" + parses "property fun : Int32" parses "property fun : Int32" + parses "foo(a: n &** 2)" parses "foo(a: n &** 2)" + parses "def []?; end" parses "def []?; end" + parses "def foo(@@protected); end" parses "def foo(@@protected); end" + parses "def foo(x @@abstract); end" parses "def foo(x @@abstract); end" + parses "def foo(@def); end" parses "def foo(@def); end" + parses "foo { |(a, *b, c)| }" parses "foo { |(a, *b, c)| }" + parses "def foo(x @yield); end" parses "def foo(x @yield); end" + parses "def -; end;" parses "def -; end;" + parses "foo(0, n == 2)" parses "foo(0, n == 2)" + parses "protected def foo; end" parses "protected def foo; end" + parses "foo { |(a, (b, (c, d)))| }" parses "foo { |(a, (b, (c, d)))| }" + parses "def foo(@@next); end" parses "def foo(@@next); end" + parses "x.foo(a: 1, b: 2)" parses "x.foo(a: 1, b: 2)" + parses "foo.==(1, 2) { 3 }" parses "foo.==(1, 2) { 3 }" + parses "%q{hello \#{foo} world}" parses "%q{hello \#{foo} world}" + says syntax error on "foo(foo(&.block)" says syntax error on "foo(foo(&.block)" + parses "Foo(X, instance_sizeof(Int32))" parses "Foo(X, instance_sizeof(Int32))" + parses "A = 1" parses "A = 1" + parses "fun : Int32" parses "fun : Int32" + says syntax error on "next === 1" says syntax error on "next === 1" + parses "def |; end;" parses "def |; end;" + parses "foo(0, n > 2)" parses "foo(0, n > 2)" + parses "def foo(@@def); end" parses "def foo(@@def); end" + parses "yield if true" parses "yield if true" + parses "foo.=~(1, 2)" parses "foo.=~(1, 2)" + parses "Foo(T?)" parses "Foo(T?)" + parses "n ** 2" parses "n ** 2" + parses "Foo(_)" parses "Foo(_)" + parses "begin\n1\nensure\n2\nend" parses "begin\n1\nensure\n2\nend" + says syntax error on "{a: 1, \"\": 2}" says syntax error on "{a: 1, \"\": 2}" + parses "@[Foo(1, foo: 2)]" parses "@[Foo(1, foo: 2)]" + says syntax error on "def foo(class); end" says syntax error on "def foo(class); end" + says syntax error on "alias Foo?" says syntax error on "alias Foo?" + parses "foo.>= do end" parses "foo.>= do end" + parses "foo 1, **bar" parses "foo 1, **bar" + parses "1 &* 2" parses "1 &* 2" + parses "foo(0, n ^ 2)" parses "foo(0, n ^ 2)" + parses "a = 1\nfoo -a" parses "a = 1\nfoo -a" + parses "Set(Int32) {1, 2, 3}" parses "Set(Int32) {1, 2, 3}" + parses "[\n1\n]" parses "[\n1\n]" + parses "foo(a: n >> 2)" parses "foo(a: n >> 2)" + parses "def foo; a; end" parses "def foo; a; end" + parses "def foo(macro foo); end" parses "def foo(macro foo); end" + says syntax error on "def foo(foo next); end" says syntax error on "def foo(foo next); end" + parses "->@foo.foo" parses "->@foo.foo" + parses "T/1" parses "T/1" + parses ":===" parses ":===" + parses "+1.0" parses "+1.0" + parses "->foo!" parses "->foo!" + parses "<<-'EOF'.x\n foo\nEOF" parses "<<-'EOF'.x\n foo\nEOF" + parses "@[Foo()]" parses "@[Foo()]" + parses "extend Foo" parses "extend Foo" + says syntax error on "def foo(**args = 1); end" says syntax error on "def foo(**args = 1); end" + parses "->@@foo.foo" parses "->@@foo.foo" + parses "def foo(a, &block : -> Double); end" parses "def foo(a, &block : -> Double); end" + parses "def foo(@@select); end" parses "def foo(@@select); end" + parses "begin; 1; rescue; 2; else; 3; end" parses "begin; 1; rescue; 2; else; 3; end" + parses "foo x do\n//\nend" parses "foo x do\n//\nend" + says syntax error on "def foo(foo include); end" says syntax error on "def foo(foo include); end" + parses "def foo(x @end); end" parses "def foo(x @end); end" + parses "foo.!=" parses "foo.!=" + parses "select\nwhen foo\n2\nelse\n3\nend" parses "select\nwhen foo\n2\nelse\n3\nend" + says syntax error on "foo[1] = break" says syntax error on "foo[1] = break" + parses "def foo(protected foo); end" parses "def foo(protected foo); end" + parses "@[Foo(1, foo: 2\n)]" parses "@[Foo(1, foo: 2\n)]" + parses "def &*(); end" parses "def &*(); end" + says syntax error on "if next; end" says syntax error on "if next; end" + parses "next 1, *2" parses "next 1, *2" + sets correct location of named tuple type sets correct location of named tuple type + says syntax error on "-> :Int32 { }" says syntax error on "-> :Int32 { }" + says syntax error on "foo { |case| }" says syntax error on "foo { |case| }" + parses "macro foo;bar{% for x in y %}body{% end %}baz;end" parses "macro foo;bar{% for x in y %}body{% end %}baz;end" + parses "def !~; end;" parses "def !~; end;" + parses "macro *;end" parses "macro *;end" + parses "def -(); end" parses "def -(); end" + parses "Foo(\nx:\nT,\ny:\nU,\n)" parses "Foo(\nx:\nT,\ny:\nU,\n)" + sets correct location of annotation in enum sets correct location of annotation in enum + parses "foo(z: 0, a: n < 2)" parses "foo(z: 0, a: n < 2)" + says syntax error on "[\n\"foo\"\n\"bar\"\n]" says syntax error on "[\n\"foo\"\n\"bar\"\n]" + parses "{\"foo\": 1}" parses "{\"foo\": 1}" + says syntax error on "return // 1" says syntax error on "return // 1" + parses "next if true" parses "next if true" + parses "foo = 1; ->foo.>=(Int32)" parses "foo = 1; ->foo.>=(Int32)" + parses "next 1, 2" parses "next 1, 2" + parses "def ==; end;" parses "def ==; end;" + parses "->Foo.^(Int32)" parses "->Foo.^(Int32)" + says syntax error on "class Foo(); end" says syntax error on "class Foo(); end" + parses "f.x //= 2" parses "f.x //= 2" + parses "def foo(x @@self); end" parses "def foo(x @@self); end" + says syntax error on "def foo(foo lib); end" says syntax error on "def foo(foo lib); end" + parses "property false : Int32" parses "property false : Int32" + parses "foo { |a, (b, c), (d, e)| a; b; c; d; e }" parses "foo { |a, (b, c), (d, e)| a; b; c; d; e }" + says syntax error on "offsetof(X, 1.0)" says syntax error on "offsetof(X, 1.0)" + parses "def ~; end;" parses "def ~; end;" + parses "foo.bar" parses "foo.bar" + says syntax error on "x[1:-2]" says syntax error on "x[1:-2]" + parses "def self./(); end;" parses "def self./(); end;" + says syntax error on "macro nil?; end" says syntax error on "macro nil?; end" + says syntax error on "$foo :: Foo" says syntax error on "$foo :: Foo" + parses "a.b &*=\n1" parses "a.b &*=\n1" + parses "def /(); end;" parses "def /(); end;" + says syntax error on "next ^ 1" says syntax error on "next ^ 1" + parses ":>>" parses ":>>" + parses "def foo(x @@macro); end" parses "def foo(x @@macro); end" + parses "foo(0, n !~ 2)" parses "foo(0, n !~ 2)" + says syntax error on "[1 1]" says syntax error on "[1 1]" + parses "break if true" parses "break if true" + parses "foo ensure 2" parses "foo ensure 2" + parses "def foo(x); end; x" parses "def foo(x); end; x" + parses "foo(n >= 2)" parses "foo(n >= 2)" + parses "{% begin %}%x< %s >{% end %}" parses "{% begin %}%x< %s >{% end %}" + parses "foo(\n1)" parses "foo(\n1)" + parses "<<-HERE\n One\n \n Zero\n HERE" parses "<<-HERE\n One\n \n Zero\n HERE" + says syntax error on "def foo\nfun\nend" says syntax error on "def foo\nfun\nend" + parses "next;" parses "next;" + parses "def foo(x @@protected); end" parses "def foo(x @@protected); end" + parses "foo(n == 2)" parses "foo(n == 2)" + parses "typeof(\n 1\n)" parses "typeof(\n 1\n)" + parses "\"hello \" \\\r\n \"world\"" parses "\"hello \" \\\r\n \"world\"" + says syntax error on "macro foo(**x, **y)" says syntax error on "macro foo(**x, **y)" + parses "lib LibC\n$errno : B, C -> D\nend" parses "lib LibC\n$errno : B, C -> D\nend" + says syntax error on "break >= 1" says syntax error on "break >= 1" + parses "Foo({\"foo\": X, \"bar\": Y})" parses "Foo({\"foo\": X, \"bar\": Y})" + parses "->foo?" parses "->foo?" + says syntax error on "def self.nil?; end" says syntax error on "def self.nil?; end" + parses "foo(\"foo bar\": 1, \"baz\": 2)" parses "foo(\"foo bar\": 1, \"baz\": 2)" + says syntax error on " (1, 2, 3 end" says syntax error on " (1, 2, 3 end" + says syntax error on "a = a" says syntax error on "a = a" + parses "def foo(@in); end" parses "def foo(@in); end" + parses "a.b <<=\n1" parses "a.b <<=\n1" + parses "foo[0] = 1 if 2" parses "foo[0] = 1 if 2" + parses "foo.==" parses "foo.==" + parses "next" parses "next" + parses "foo.===" parses "foo.===" + parses "def foo(@false); end" parses "def foo(@false); end" + parses "%r(foo(bar))" parses "%r(foo(bar))" + parses "lib LibC; struct Foo; x, y, z : Int; end end" parses "lib LibC; struct Foo; x, y, z : Int; end end" + parses "def %(); end;" parses "def %(); end;" + says syntax error on "foo { |(break)| }" says syntax error on "foo { |(break)| }" + parses "1 rescue 2" parses "1 rescue 2" + parses "1 ensure 2" parses "1 ensure 2" + parses "def foo(next foo); end" parses "def foo(next foo); end" + says syntax error on "while 1 == 1 a; end" says syntax error on "while 1 == 1 a; end" + parses "lib LibC; type A = B*; end" parses "lib LibC; type A = B*; end" + parses "def foo(x = 1, **args)\n1\nend" parses "def foo(x = 1, **args)\n1\nend" + parses "->Foo.-(Int32)" parses "->Foo.-(Int32)" + parses "case \nwhen 1\n2\nend" parses "case \nwhen 1\n2\nend" + parses "def foo(include foo); end" parses "def foo(include foo); end" + says syntax error on "break[]" says syntax error on "break[]" + parses "a.foo &block" parses "a.foo &block" + parses "-1.0" parses "-1.0" + parses "foo(&.is_a?(T))" parses "foo(&.is_a?(T))" + says syntax error on "x { |*a, *b| }" says syntax error on "x { |*a, *b| }" + parses "{% x unless 1 %}" parses "{% x unless 1 %}" + parses "def self.**(); end;" parses "def self.**(); end;" + parses "foo % r()" parses "foo % r()" + parses "->Foo.*(Int32)" parses "->Foo.*(Int32)" + parses "(1 .. )" parses "(1 .. )" + parses "[] of {String, ->}" parses "[] of {String, ->}" + parses "typeof(1)" parses "typeof(1)" + says syntax error on "->::@foo.foo" says syntax error on "->::@foo.foo" + parses "a/b" parses "a/b" + parses "def foo(private foo); end" parses "def foo(private foo); end" + parses "->::foo" parses "->::foo" + says syntax error on "{1 => 2, 3 => 4 5 => 6}" says syntax error on "{1 => 2, 3 => 4 5 => 6}" + says syntax error on "return == 1" says syntax error on "return == 1" + says syntax error on "{a: 1, a: 2}" says syntax error on "{a: 1, a: 2}" + parses "if : Int32" parses "if : Int32" + says syntax error on "foo { |x, x| }" says syntax error on "foo { |x, x| }" + parses "def <=(*args, **opts); end" parses "def <=(*args, **opts); end" + parses "def foo(var : (Int, Float -> Double)); end" parses "def foo(var : (Int, Float -> Double)); end" + parses "1 if 3" parses "1 if 3" + parses "foo(/ /, / /)" parses "foo(/ /, / /)" + parses "def /(); end" parses "def /(); end" + parses "->Foo.**(Int32)" parses "->Foo.**(Int32)" + parses "def foo(x : *T -> R); end" parses "def foo(x : *T -> R); end" + parses "def foo(@@self); end" parses "def foo(@@self); end" + parses "return *1" parses "return *1" + parses "foo.=~(1, 2) { 3 }" parses "foo.=~(1, 2) { 3 }" + parses "foo.-(1, 2)" parses "foo.-(1, 2)" + parses "foo(a: n > 2)" parses "foo(a: n > 2)" + parses "a ? 1\n : b ? 2\n : c ? 3\n : 0" parses "a ? 1\n : b ? 2\n : c ? 3\n : 0" + says syntax error on "break <= 1" says syntax error on "break <= 1" + parses "f.x <<= 2" parses "f.x <<= 2" + parses "a { |x| x } / b" parses "a { |x| x } / b" + parses "foo &.block[0]" parses "foo &.block[0]" + parses "def *(); end" parses "def *(); end" + sets correct location of argument in named tuple type sets correct location of argument in named tuple type + parses "def foo(x @out); end" parses "def foo(x @out); end" + parses "def foo(x @@struct); end" parses "def foo(x @@struct); end" + parses "foo(a: n + 2)" parses "foo(a: n + 2)" + parses "case {1}\nin {nil}; 2; end" parses "case {1}\nin {nil}; 2; end" + parses "foo.** do end" parses "foo.** do end" + parses "property offsetof : Int32" parses "property offsetof : Int32" + parses "foo(x: result : Int32); result" parses "foo(x: result : Int32); result" + parses "def foo(var = 1); end" parses "def foo(var = 1); end" + parses "foo = 1; foo &x" parses "foo = 1; foo &x" + parses "foo(\n1\n)" parses "foo(\n1\n)" + parses "def foo(x @private); end" parses "def foo(x @private); end" + parses "foo x do\nend" parses "foo x do\nend" + parses "\"hello \"\\\r\n\"world\"" parses "\"hello \"\\\r\n\"world\"" + parses "(1 ... )" parses "(1 ... )" + says syntax error on "case 1; when return; end; end" says syntax error on "case 1; when return; end; end" + parses "foo { a = 1 }; a" parses "foo { a = 1 }; a" + parses "1.[]=(2, 3)" parses "1.[]=(2, 3)" + parses "call \"foo\"" parses "call \"foo\"" + says syntax error on "def foo(foo instance_sizeof); end" says syntax error on "def foo(foo instance_sizeof); end" + says syntax error on "foo { |unless| }" says syntax error on "foo { |unless| }" + parses "foo.+ do end" parses "foo.+ do end" + parses "if foo; 1; end" parses "if foo; 1; end" + says syntax error on "def self.is_a?; end" says syntax error on "def self.is_a?; end" + parses "foo%w" parses "foo%w" + parses "def [](x); end" parses "def [](x); end" + parses "def foo(@@yield); end" parses "def foo(@@yield); end" + says syntax error on "foo { |(fun)| }" says syntax error on "foo { |(fun)| }" + parses "macro foo\n{%\nif 1\n2\nelse\n3\nend\n%}end" parses "macro foo\n{%\nif 1\n2\nelse\n3\nend\n%}end" + says syntax error on "def foo(foo pointerof); end" says syntax error on "def foo(foo pointerof); end" + parses "break 1, 2" parses "break 1, 2" + parses "1.x; foo do\nend" parses "1.x; foo do\nend" + says syntax error on "self, x = 1, 2" says syntax error on "self, x = 1, 2" + parses "def foo(x @@private); end" parses "def foo(x @@private); end" + parses "case;end" parses "case;end" + says syntax error on "x : String, a = 4" says syntax error on "x : String, a = 4" + parses ":-" parses ":-" + says syntax error on "->(x : Int32, x : Int32) {}" says syntax error on "->(x : Int32, x : Int32) {}" + parses "a.b /2/" parses "a.b /2/" + says syntax error on "{a: 1, b: 2 c: 3}" says syntax error on "{a: 1, b: 2 c: 3}" + says syntax error on "macro foo;{%end};end" says syntax error on "macro foo;{%end};end" + parses "->Foo.==(Int32)" parses "->Foo.==(Int32)" + parses "a = 1; b = 2; c = 3; a-b -c" parses "a = 1; b = 2; c = 3; a-b -c" + parses "property do : Int32" parses "property do : Int32" + parses ":!" parses ":!" + parses "@foo = 1" parses "@foo = 1" + parses "a = 1; a %=\n1" parses "a = 1; a %=\n1" + parses "{% begin %}%w< %s >{% end %}" parses "{% begin %}%w< %s >{% end %}" + parses "begin; 1; rescue Foo | Bar; 2; end" parses "begin; 1; rescue Foo | Bar; 2; end" + parses "def foo; 1; 2; end" parses "def foo; 1; 2; end" + says syntax error on "def !; end" says syntax error on "def !; end" + says syntax error on "next - 1" says syntax error on "next - 1" + parses "def foo(@@out); end" parses "def foo(@@out); end" + parses "asm(\"nop\" : \"a\"(0) : \"b\"(1), \"c\"(2))" parses "asm(\"nop\" : \"a\"(0) : \"b\"(1), \"c\"(2))" + parses "property module : Int32" parses "property module : Int32" + parses "->() : Int32 do end" parses "->() : Int32 do end" + parses "foo 1.bar do\nend" parses "foo 1.bar do\nend" + parses "def foo(@out); end" parses "def foo(@out); end" + says syntax error on "def foo\nmacro\nend" says syntax error on "def foo\nmacro\nend" + parses "macro -;end" parses "macro -;end" + parses "def foo(@require); end" parses "def foo(@require); end" + parses "&- 1" parses "&- 1" + parses ":+" parses ":+" + parses "_, _ = 1, 2" parses "_, _ = 1, 2" + parses "foo(n &* 2)" parses "foo(n &* 2)" + parses "def foo(a, & : Int -> Double); end" parses "def foo(a, & : Int -> Double); end" + parses ":foo" parses ":foo" + says syntax error on "A = foo(B = 1)" says syntax error on "A = foo(B = 1)" + parses "1.as?(Bar)" parses "1.as?(Bar)" + parses "->foo(Void*)" parses "->foo(Void*)" + parses "a.b **=\n1" parses "a.b **=\n1" + parses "puts ~1" parses "puts ~1" + parses "def foo(@macro); end" parses "def foo(@macro); end" + parses "with : Int32" parses "with : Int32" + parses "n >> 2" parses "n >> 2" + parses "a, b = 1, 2 if 3" parses "a, b = 1, 2 if 3" + says syntax error on "def foo 1; end" says syntax error on "def foo 1; end" + parses "{% a = 1 if 2 %}" parses "{% a = 1 if 2 %}" + parses "->foo(Int32, Float64)" parses "->foo(Int32, Float64)" + parses "- 1" parses "- 1" + parses "foo.[]=(1, 2)" parses "foo.[]=(1, 2)" + sets correct location of annotation on method parameter sets correct location of annotation on method parameter + parses "->::Foo.foo" parses "->::Foo.foo" + parses "foo % x()" parses "foo % x()" + says syntax error on "def foo!=; end" says syntax error on "def foo!=; end" + parses "foo.[]= 1, 2" parses "foo.[]= 1, 2" + parses "1 + /foo/" parses "1 + /foo/" + parses "def foo(begin foo); end" parses "def foo(begin foo); end" + parses "def foo(@@abstract); end" parses "def foo(@@abstract); end" + says syntax error on "def foo(foo require); end" says syntax error on "def foo(foo require); end" + calls with blocks within index operator (#12818) + parses "foo[bar { 1 }]" parses "foo[bar { 1 }]" + parses "foo.[](bar do; 1; end)" parses "foo.[](bar do; 1; end)" + parses "foo.[bar { 1 }]" parses "foo.[bar { 1 }]" + parses "foo.[bar do; 1; end]" parses "foo.[bar do; 1; end]" + parses "foo.[](bar { 1 })" parses "foo.[](bar { 1 })" + parses "foo[bar do; 1; end]" parses "foo[bar do; 1; end]" + parses "foo(a: n <= 2)" parses "foo(a: n <= 2)" + parses "foo.!~(1, 2) { 3 }" parses "foo.!~(1, 2) { 3 }" + parses "def foo(&@block); end" parses "def foo(&@block); end" + parses "foo(n << 2)" parses "foo(n << 2)" + parses "foo(Bar { 1 })" parses "foo(Bar { 1 })" + says syntax error on "foo[1] = return" says syntax error on "foo[1] = return" + says syntax error on "break &* 1" says syntax error on "break &* 1" + says syntax error on "foo { |(protected)| }" says syntax error on "foo { |(protected)| }" + parses "1 * 2" parses "1 * 2" + parses "->Foo.>>(Int32)" parses "->Foo.>>(Int32)" + parses "*_ = 1, 2" parses "*_ = 1, 2" + parses "while true; end\nif true; end" parses "while true; end\nif true; end" + parses "foo = 1; ->foo.|(Int32)" parses "foo = 1; ->foo.|(Int32)" + parses "foo %Q" parses "foo %Q" + parses "foo.&(1, 2) { 3 }" parses "foo.&(1, 2) { 3 }" + parses "foo(a: n // 2)" parses "foo(a: n // 2)" + parses "def foo(x @macro); end" parses "def foo(x @macro); end" + parses "def self.|; end;" parses "def self.|; end;" + parses "a.b ^=\n1" parses "a.b ^=\n1" + parses "foo(bar:\"a\", baz:\"b\")" parses "foo(bar:\"a\", baz:\"b\")" + says syntax error on ":bar foo" says syntax error on ":bar foo" + says syntax error on "1 ? : 2 : 3" says syntax error on "1 ? : 2 : 3" + says syntax error on "enum Foo < UInt16; end" says syntax error on "enum Foo < UInt16; end" + says syntax error on "def foo(include); end" says syntax error on "def foo(include); end" + parses "foo do; 1; end" parses "foo do; 1; end" + parses "macro foo; 1 + 2 {{ foo }} 3 + 4; end" parses "macro foo; 1 + 2 {{ foo }} 3 + 4; end" + parses "foo.<= 1, 2" parses "foo.<= 1, 2" + parses "def foo(x @in); end" parses "def foo(x @in); end" + parses "abstract struct Foo; end" parses "abstract struct Foo; end" + parses "lib LibC\nfun getchar(...)\nend" parses "lib LibC\nfun getchar(...)\nend" + says syntax error on "a.[]() = 1" says syntax error on "a.[]() = 1" + parses "def foo : Int32\n1\nend" parses "def foo : Int32\n1\nend" + parses "@@foo = 1" parses "@@foo = 1" + says syntax error on "foo { |(a b)| }" says syntax error on "foo { |(a b)| }" + parses "x.y=(1).to_s" parses "x.y=(1).to_s" + parses "foo.is_a?(Foo | Bar)" parses "foo.is_a?(Foo | Bar)" + parses "->Foo.foo!" parses "->Foo.foo!" + parses "Foo.bar x.y do\nend" parses "Foo.bar x.y do\nend" + says syntax error on "Foo(T U)" says syntax error on "Foo(T U)" + parses ":!=" parses ":!=" + says syntax error on "next % 1" says syntax error on "next % 1" + parses "lib LibC\n$errno : Int32\n$errno2 : Int32\nend" parses "lib LibC\n$errno : Int32\n$errno2 : Int32\nend" + parses "abstract def foo(x) : Int32" parses "abstract def foo(x) : Int32" + says syntax error on "foo(**bar, out x)" says syntax error on "foo(**bar, out x)" + parses "macro foo;var unless true;end" parses "macro foo;var unless true;end" + says syntax error on "1 unless break" says syntax error on "1 unless break" + parses "foo(n - 2)" parses "foo(n - 2)" + says syntax error on "<<-HERE\n One\n \#{1}\n wrong\n HERE" says syntax error on "<<-HERE\n One\n \#{1}\n wrong\n HERE" + says syntax error on "{1, ->do\n|x| x\end }" says syntax error on "{1, ->do\n|x| x\end }" + parses "f.x ^= 2" parses "f.x ^= 2" + parses "foo./ 1, 2" parses "foo./ 1, 2" + parses "1.tap do; 1; rescue; 2; end" parses "1.tap do; 1; rescue; 2; end" + parses "asm(\"nop\" \n)" parses "asm(\"nop\" \n)" + parses "foo { |a, b| 1 }" parses "foo { |a, b| 1 }" + parses "def foo(x @@next); end" parses "def foo(x @@next); end" + parses "def foo(@@struct); end" parses "def foo(@@struct); end" + parses "yield;" parses "yield;" + says syntax error on "1 2" says syntax error on "1 2" + parses "lib LibC\nfun getchar : (->)?\nend" parses "lib LibC\nfun getchar : (->)?\nend" + says syntax error on "foo { |(out)| }" says syntax error on "foo { |(out)| }" + parses "1 \\\n + 2" parses "1 \\\n + 2" + parses "{\n1\n}" parses "{\n1\n}" + parses "foo = 1; ->foo.&*(Int32)" parses "foo = 1; ->foo.&*(Int32)" + parses "a.b -=\n1" parses "a.b -=\n1" + parses "1.=~(2)" parses "1.=~(2)" + says syntax error on "def foo(**x, &x); end" says syntax error on "def foo(**x, &x); end" + says syntax error on "foo **bar, 1" says syntax error on "foo **bar, 1" + parses "foo\n\n .bar" parses "foo\n\n .bar" + parses "~ 1" parses "~ 1" + parses "foo &.!" parses "foo &.!" + says syntax error on "a = 1; a += return" says syntax error on "a = 1; a += return" + parses "foo(n ^ 2)" parses "foo(n ^ 2)" + parses "{} of Int32 -> Int32 => Int32" parses "{} of Int32 -> Int32 => Int32" + says syntax error on "macro foo&&;end" says syntax error on "macro foo&&;end" + parses "-> do end" parses "-> do end" + says syntax error on "def foo @@var, █ end" says syntax error on "def foo @@var, █ end" + parses "f.x = - 1" parses "f.x = - 1" + parses "foo(0, n * 2)" parses "foo(0, n * 2)" + parses "Foo::Bar" parses "Foo::Bar" + parses "def >; end;" parses "def >; end;" + parses "foo(regex: //)" parses "foo(regex: //)" + says syntax error on "next.foo" says syntax error on "next.foo" + says syntax error on "def foo var\n end" says syntax error on "def foo var\n end" + says syntax error on "foo { |nil| }" says syntax error on "foo { |nil| }" + parses "macro foo;bar{% unless x %}body{% end %}baz;end" parses "macro foo;bar{% unless x %}body{% end %}baz;end" + parses "instance_alignof(\n Int32\n)" parses "instance_alignof(\n Int32\n)" + parses "def foo(x @asm); end" parses "def foo(x @asm); end" + parses "->::foo!" parses "->::foo!" + parses "asm : Int32" parses "asm : Int32" + says syntax error on "def foo\nstruct\nend" says syntax error on "def foo\nstruct\nend" + says syntax error on "foo { |(macro)| }" says syntax error on "foo { |(macro)| }" + parses "foo.<(1, 2) { 3 }" parses "foo.<(1, 2) { 3 }" + says syntax error on "self += 1" says syntax error on "self += 1" + parses "lib LibC; Foo = 1; end" parses "lib LibC; Foo = 1; end" + parses "def foo(@@asm); end" parses "def foo(@@asm); end" + parses "foo(z: 0, a: n ** 2)" parses "foo(z: 0, a: n ** 2)" + parses "def -(); end;" parses "def -(); end;" + says syntax error on "foo { |(unless)| }" says syntax error on "foo { |(unless)| }" + says syntax error on "Foo(x: T y: U)" says syntax error on "Foo(x: T y: U)" + parses "as?(Bar)" parses "as?(Bar)" + parses "property else : Int32" parses "property else : Int32" + parses "@a : Foo" parses "@a : Foo" + parses "def +; end;" parses "def +; end;" + parses "a = 1; class Foo; @x = a; end" parses "a = 1; class Foo; @x = a; end" + says syntax error on "def foo &block ; end" says syntax error on "def foo &block ; end" + says syntax error on "return ** 1" says syntax error on "return ** 1" + parses "responds_to?(:foo)" parses "responds_to?(:foo)" + parses "def foo(var : self?); end" parses "def foo(var : self?); end" + parses "{A::B => 1, C::D => 2}" parses "{A::B => 1, C::D => 2}" + parses "/foo/m" parses "/foo/m" + parses "{a: 1}" parses "{a: 1}" + parses "<<-HERE\n \#{1} \#{2}\n HERE" parses "<<-HERE\n \#{1} \#{2}\n HERE" + parses "enum Foo; A = 1\ndef foo; 1; end\ndef bar; 2; end\nend" parses "enum Foo; A = 1\ndef foo; 1; end\ndef bar; 2; end\nend" + says syntax error on "foo { |(def)| }" says syntax error on "foo { |(def)| }" + parses "foo do |a|; 1; end" parses "foo do |a|; 1; end" + says syntax error on "@:Foo" says syntax error on "@:Foo" + parses "foo &./(1)" parses "foo &./(1)" + parses "def foo(@@offsetof); end" parses "def foo(@@offsetof); end" + parses "def foo(var : self); end" parses "def foo(var : self); end" + parses "call ->foo" parses "call ->foo" + parses "def =~(); end" parses "def =~(); end" + parses "def foo(@[Foo] *args); end" parses "def foo(@[Foo] *args); end" + parses "foo(z: 0, a: n ^ 2)" parses "foo(z: 0, a: n ^ 2)" + parses "case 1\nin nil; 2; end" parses "case 1\nin nil; 2; end" + parses "def foo(@pointerof); end" parses "def foo(@pointerof); end" + parses "def foo(bar = 1\n); 2; end" parses "def foo(bar = 1\n); 2; end" + parses "foo.*" parses "foo.*" + parses "'a'" parses "'a'" + parses "def foo(@select); end" parses "def foo(@select); end" + parses "property with : Int32" parses "property with : Int32" + parses "def self.~(); end;" parses "def self.~(); end;" + says syntax error on "def foo?=(x); end" says syntax error on "def foo?=(x); end" + says syntax error on "if 1\n foo 1,\nend" says syntax error on "if 1\n foo 1,\nend" + parses "f.x **= 2" parses "f.x **= 2" + parses "<<-HERE\nHERE" parses "<<-HERE\nHERE" + parses "break 1" parses "break 1" + parses "macro foo(\na = 0\n)\nend" parses "macro foo(\na = 0\n)\nend" + says syntax error on "break << 1" says syntax error on "break << 1" + parses "case {1}\nin {_}; 2; end" parses "case {1}\nin {_}; 2; end" + parses "lib LibC\nfun getchar(a : Int, b : Float) : Int\nend" parses "lib LibC\nfun getchar(a : Int, b : Float) : Int\nend" + says syntax error on "case 1 == 1 a; when 2; end" says syntax error on "case 1 == 1 a; when 2; end" + parses " macro foo(\n @[Foo]\n id,\n @[Bar] name\n );end" parses " macro foo(\n @[Foo]\n id,\n @[Bar] name\n );end" + says syntax error on "return[0]= 1" says syntax error on "return[0]= 1" + parses "def foo(@until); end" parses "def foo(@until); end" + parses "macro foo(x)\n 1 + 2; end" parses "macro foo(x)\n 1 + 2; end" + parses "def self.>(); end;" parses "def self.>(); end;" + parses "lib LibC\nfun getchar\nend" parses "lib LibC\nfun getchar\nend" + parses "a = 1; a +=\n1" parses "a = 1; a +=\n1" + parses "a = 1; a ||= 1" parses "a = 1; a ||= 1" + parses "foo.[]=(1, 2) { 3 }" parses "foo.[]=(1, 2) { 3 }" + parses "x = 0; a, b = x += 1" parses "x = 0; a, b = x += 1" + says syntax error on "require 1" says syntax error on "require 1" + parses "foo &.as(T)" parses "foo &.as(T)" + parses " def foo(\n @[Foo]\n id : Int32,\n @[Bar] name : String\n ); end" parses " def foo(\n @[Foo]\n id : Int32,\n @[Bar] name : String\n ); end" + parses "{% begin %}%x[ %s ]{% end %}" parses "{% begin %}%x[ %s ]{% end %}" + parses "1 ensure 2 if 3" parses "1 ensure 2 if 3" + parses "{{ foo.nil?(foo) }}" parses "{{ foo.nil?(foo) }}" + parses "def >=(*args, **opts); end" parses "def >=(*args, **opts); end" + parses "foo(z: 0, a: n << 2)" parses "foo(z: 0, a: n << 2)" + says syntax error on "{a: 1 b: 2}" says syntax error on "{a: 1 b: 2}" + parses "(a;\nb)" parses "(a;\nb)" + parses "def foo(require foo); end" parses "def foo(require foo); end" + parses "foo (1 + 2), 3" parses "foo (1 + 2), 3" + parses "Foo(\"foo bar\": U)" parses "Foo(\"foo bar\": U)" + parses "foo(a: 1, &block)" parses "foo(a: 1, &block)" + parses "a = 1; a |=\n1" parses "a = 1; a |=\n1" + says syntax error on "def foo(private); end" says syntax error on "def foo(private); end" + parses "def <=(*args, **opts, &); end" parses "def <=(*args, **opts, &); end" + parses "f.x %= 2" parses "f.x %= 2" + parses "Foo({->})" parses "Foo({->})" + parses "break;" parses "break;" + parses "def foo; x { |_| 1 }; end" parses "def foo; x { |_| 1 }; end" + parses "class Foo; end" parses "class Foo; end" + parses "case 1\nwhen .as(T)\n2\nend" parses "case 1\nwhen .as(T)\n2\nend" + parses "foo.<= do end" parses "foo.<= do end" + parses "foo &.nil?" parses "foo &.nil?" + parses "def self.=~(); end;" parses "def self.=~(); end;" + parses "foo(z: 0, a: n - 2)" parses "foo(z: 0, a: n - 2)" + says syntax error on "<<-'HERE\n" says syntax error on "<<-'HERE\n" + parses "macro <<;end" parses "macro <<;end" + parses "a = 1; a ^= 1" parses "a = 1; a ^= 1" + parses "instance_sizeof : Int32" parses "instance_sizeof : Int32" + says syntax error on "{one: :two, three: :four} of Symbol => Symbol" says syntax error on "{one: :two, three: :four} of Symbol => Symbol" + parses "foo(z: 0, a: n &* 2)" parses "foo(z: 0, a: n &* 2)" + parses "typeof(a = 1); a" parses "typeof(a = 1); a" + parses "def foo(a, &block : Int -> ); end" parses "def foo(a, &block : Int -> ); end" + says syntax error on "foo **bar, out x" says syntax error on "foo **bar, out x" + parses "def foo(nil foo); end" parses "def foo(nil foo); end" + parses ":&" parses ":&" + says syntax error on "foo { |x, (x)| }" says syntax error on "foo { |x, (x)| }" + parses "foo[\nfoo[\n1\n]\n]" parses "foo[\nfoo[\n1\n]\n]" + says syntax error on "until break; end" says syntax error on "until break; end" + parses "macro foo(x); 1 + 2; end" parses "macro foo(x); 1 + 2; end" + parses "def self.<=; end;" parses "def self.<=; end;" + parses "lib LibC; fun foo : Int**; end" parses "lib LibC; fun foo : Int**; end" + parses "foo.[0]" parses "foo.[0]" + says syntax error on "*a, *b = 1" says syntax error on "*a, *b = 1" + parses "{\n{1}\n}" parses "{\n{1}\n}" + parses "foo(&.bar.baz)" parses "foo(&.bar.baz)" + parses "1 &+ 2" parses "1 &+ 2" + parses "<<-'HERE COMES HEREDOC'\n hello \\n world\n \#{1}\n HERE COMES HEREDOC" parses "<<-'HERE COMES HEREDOC'\n hello \\n world\n \#{1}\n HERE COMES HEREDOC" + says syntax error on "next &** 1" says syntax error on "next &** 1" + says syntax error on "+break" says syntax error on "+break" + says syntax error on "def foo(foo offsetof); end" says syntax error on "def foo(foo offsetof); end" + parses "-1.0_f32" parses "-1.0_f32" + parses "/=/" parses "/=/" + says syntax error on "break.foo" says syntax error on "break.foo" + parses "foo..2" parses "foo..2" + parses "foo &.block = 0" parses "foo &.block = 0" + parses "qux \"foo\#{bar do end}baz\"" parses "qux \"foo\#{bar do end}baz\"" + parses "a = 1; a //= 1" parses "a = 1; a //= 1" + parses "*a.foo, a.bar = 1" parses "*a.foo, a.bar = 1" + parses "def self.foo=()\n1\nend" parses "def self.foo=()\n1\nend" + parses "Foo(typeof(1))" parses "Foo(typeof(1))" + says syntax error on "return < 1" says syntax error on "return < 1" + parses "foo[*baz]" parses "foo[*baz]" + says syntax error on "{% unless 1 %} 2 {% elsif 3 %} 3 {% end %}" says syntax error on "{% unless 1 %} 2 {% elsif 3 %} 3 {% end %}" + parses "@[Foo(\"hello\")]" parses "@[Foo(\"hello\")]" + parses "def self.+(); end;" parses "def self.+(); end;" + parses "def foo(x @@return); end" parses "def foo(x @@return); end" + parses "foo\n #comment\n .bar" parses "foo\n #comment\n .bar" + parses "a = 1; a -= 1" parses "a = 1; a -= 1" + parses "puts {{1}}" parses "puts {{1}}" + parses "1.as(\n Int32\n)" parses "1.as(\n Int32\n)" + parses "foo &.block(1)" parses "foo &.block(1)" + parses "macro foo\n\"\\\\\"\nend" parses "macro foo\n\"\\\\\"\nend" + parses "puts ::foo" parses "puts ::foo" + parses "a : Foo()[12]" parses "a : Foo()[12]" + parses "{{ 1 // 2 }}" parses "{{ 1 // 2 }}" + parses "enum Foo; macro foo;end; end" parses "enum Foo; macro foo;end; end" + parses "def >>(); end" parses "def >>(); end" + parses "def foo(@self); end" parses "def foo(@self); end" + parses "{% begin %}%q< %s >{% end %}" parses "{% begin %}%q< %s >{% end %}" + parses "next *{1, 2}" parses "next *{1, 2}" + parses "foo /;/" parses "foo /;/" + parses "{% begin %}{% if true %}if true{% end %}\n{% if true %}end{% end %}{% end %}" parses "{% begin %}{% if true %}if true{% end %}\n{% if true %}end{% end %}{% end %}" + says syntax error on "*a" says syntax error on "*a" + parses "def foo(x @nil); end" parses "def foo(x @nil); end" + parses "def foo(\n&block\n); end" parses "def foo(\n&block\n); end" + parses "def foo(var : self*); end" parses "def foo(var : self*); end" + parses "foo &.block=(0)" parses "foo &.block=(0)" + parses "->::Foo.foo=" parses "->::Foo.foo=" + parses "foo(1, **bar, &block)" parses "foo(1, **bar, &block)" + parses "f.x -= 2" parses "f.x -= 2" + parses "->Foo.>=(Int32)" parses "->Foo.>=(Int32)" + parses "foo.responds_to?(:foo)" parses "foo.responds_to?(:foo)" + parses "macro <;end" parses "macro <;end" + parses "property case : Int32" parses "property case : Int32" + parses "macro &**;end" parses "macro &**;end" + parses "a = 1; a **= 1" parses "a = 1; a **= 1" + parses "def foo(@alias); end" parses "def foo(@alias); end" + says syntax error on "def foo\nalias\nend" says syntax error on "def foo\nalias\nend" + parses "def foo(yield foo); end" parses "def foo(yield foo); end" + parses "{% begin %}%( %s ){% end %}" parses "{% begin %}%( %s ){% end %}" + parses "foo%q" parses "foo%q" + parses "def foo(@include); end" parses "def foo(@include); end" + parses "asm(\"nop\" : : )" parses "asm(\"nop\" : : )" + says syntax error on "def foo(foo end); end" says syntax error on "def foo(foo end); end" + parses "{% begin %}%q{ %s }{% end %}" parses "{% begin %}%q{ %s }{% end %}" + parses "property begin : Int32" parses "property begin : Int32" + parses "x = 1; foo x {\n}" parses "x = 1; foo x {\n}" + parses "foo(0, n / 2)" parses "foo(0, n / 2)" + parses "<<-HERE\nHello, mom! I am HERE.\nHER dress is beautiful.\nHE is OK.\n HERESY\nHERE" parses "<<-HERE\nHello, mom! I am HERE.\nHER dress is beautiful.\nHE is OK.\n HERESY\nHERE" + says syntax error on "1 until 3" says syntax error on "1 until 3" + parses "foo 1\n" parses "foo 1\n" + parses "class Foo(T, *U); end" parses "class Foo(T, *U); end" + parses "lib LibC; {% if 1 %}2{% end %}; end" parses "lib LibC; {% if 1 %}2{% end %}; end" + says syntax error on "{{ {% begin %} }}" says syntax error on "{{ {% begin %} }}" + parses "def foo\n1\nend\nif 1\nend" parses "def foo\n1\nend\nif 1\nend" + parses "/foo/i" parses "/foo/i" + parses "\"hello \" \\\n \"world\"" parses "\"hello \" \\\n \"world\"" + parses "1 / 2" parses "1 / 2" + parses "{[] of Foo, ::foo}" parses "{[] of Foo, ::foo}" + says syntax error on "def foo(offsetof); end" says syntax error on "def foo(offsetof); end" + parses "a.b /=\n1" parses "a.b /=\n1" + parses "foo(0, n >= 2)" parses "foo(0, n >= 2)" + says syntax error on "def foo(x = 1, y); end" says syntax error on "def foo(x = 1, y); end" + says syntax error on "return 1 foo" says syntax error on "return 1 foo" + parses "1 - 2" parses "1 - 2" + parses "abstract def foo" parses "abstract def foo" + parses "a = 1; a %= 1" parses "a = 1; a %= 1" + says syntax error on "break ** 1" says syntax error on "break ** 1" + parses "asm(\"nop\" :: : :)" parses "asm(\"nop\" :: : :)" + says syntax error on "next[0]= 1" says syntax error on "next[0]= 1" + parses "foo.bar(1).baz" parses "foo.bar(1).baz" + parses "foo %x" parses "foo %x" + parses "false : Int32" parses "false : Int32" + says syntax error on "foo { |(return)| }" says syntax error on "foo { |(return)| }" + parses "foo(0, n & 2)" parses "foo(0, n & 2)" + parses "require \"foo\"" parses "require \"foo\"" + parses "foo(0, n &- 2)" parses "foo(0, n &- 2)" + parses "(bar do\nend)" parses "(bar do\nend)" + parses "lib LibC\nfun getchar(Int, Float)\nend" parses "lib LibC\nfun getchar(Int, Float)\nend" + says syntax error on "self = 1" says syntax error on "self = 1" + says syntax error on "1 as? Bar" says syntax error on "1 as? Bar" + parses "[1] /2" parses "[1] /2" + says syntax error on "{1, ->{ |x| x } }" says syntax error on "{1, ->{ |x| x } }" + parses "property break : Int32" parses "property break : Int32" + parses "__DIR__" parses "__DIR__" + parses "foo out x; x" parses "foo out x; x" + parses "foo &.as?(T)" parses "foo &.as?(T)" + parses "yield 1" parses "yield 1" + parses "property true : Int32" parses "property true : Int32" + says syntax error on "1 if return" says syntax error on "1 if return" + parses "foo -1.0, -2.0" parses "foo -1.0, -2.0" + says syntax error on "<<-FOO\n1\nFOO.bar" says syntax error on "<<-FOO\n1\nFOO.bar" + parses "foo.Bar" parses "foo.Bar" + says syntax error on "next | 1" says syntax error on "next | 1" + parses "x = 1; foo x do\nend" parses "x = 1; foo x do\nend" + parses ":!~" parses ":!~" + parses "x : *T -> R" parses "x : *T -> R" + says syntax error on "return <= 1" says syntax error on "return <= 1" + parses "def foo(@@instance_sizeof); end" parses "def foo(@@instance_sizeof); end" + parses "1\n-2" parses "1\n-2" + says syntax error on "def foo(foo nil); end" says syntax error on "def foo(foo nil); end" + parses "def self.!~; end;" parses "def self.!~; end;" + parses "{% begin %}%Q[ %s ]{% end %}" parses "{% begin %}%Q[ %s ]{% end %}" + says syntax error on "return[]" says syntax error on "return[]" + parses "x = 2; foo do bar x end" parses "x = 2; foo do bar x end" + parses "foo *bar" parses "foo *bar" + parses "enum Foo; A = 1\ndef foo; 1; end; end" parses "enum Foo; A = 1\ndef foo; 1; end; end" + parses "->::Foo.foo?" parses "->::Foo.foo?" + parses "foo &.bar.baz" parses "foo &.bar.baz" + parses "foo(a: n / 2)" parses "foo(a: n / 2)" + parses "f.x *= 2" parses "f.x *= 2" + parses "foo = 1; ->foo.&+(Int32)" parses "foo = 1; ->foo.&+(Int32)" + parses "{% begin %}%q| %s |{% end %}" parses "{% begin %}%q| %s |{% end %}" + says syntax error on "def is_a?; end" says syntax error on "def is_a?; end" + parses "<<-SOME\n Sa\n Se\n SOME" parses "<<-SOME\n Sa\n Se\n SOME" + says syntax error on "select\nwhen 1\n2\nend" says syntax error on "select\nwhen 1\n2\nend" + parses "asm(\"nop\" : \"a\"(0), \"b\"(1) : \"c\"(2), \"d\"(3))" parses "asm(\"nop\" : \"a\"(0), \"b\"(1) : \"c\"(2), \"d\"(3))" + parses "alias Foo::Bar = Baz" parses "alias Foo::Bar = Baz" + parses "{% a = 1 %}" parses "{% a = 1 %}" + parses "case / /\nwhen / /\n/ /\nelse\n/ /\nend" parses "case / /\nwhen / /\n/ /\nelse\n/ /\nend" + parses "def >=(other, file = 1); end" parses "def >=(other, file = 1); end" + parses "def self.<; end;" parses "def self.<; end;" + parses "def foo(@@if); end" parses "def foo(@@if); end" + says syntax error on "foo { |(begin)| }" says syntax error on "foo { |(begin)| }" + parses "macro foo\n'\\\\'\nend" parses "macro foo\n'\\\\'\nend" + parses "next : Int32" parses "next : Int32" + says syntax error on "Set {1, 2, 3} of Int32" says syntax error on "Set {1, 2, 3} of Int32" + says syntax error on "return % 1" says syntax error on "return % 1" + says syntax error on "def foo(foo protected); end" says syntax error on "def foo(foo protected); end" + parses "foo(a: n * 2)" parses "foo(a: n * 2)" + parses "def foo(x @module); end" parses "def foo(x @module); end" + parses "macro foo;%var{1, x} = hello;end" parses "macro foo;%var{1, x} = hello;end" + parses "1 +\n2" parses "1 +\n2" + parses "call foo : A, end : B" parses "call foo : A, end : B" + parses "require \"foo\"; [1]" parses "require \"foo\"; [1]" + says syntax error on "{a[]: 1}" says syntax error on "{a[]: 1}" + parses "Foo(typeof(1), typeof(2))" parses "Foo(typeof(1), typeof(2))" + says syntax error on "def foo(typeof); end" says syntax error on "def foo(typeof); end" + parses "1..;" parses "1..;" + says syntax error on "def foo x y; end" says syntax error on "def foo x y; end" + parses "->@foo.foo?" parses "->@foo.foo?" + parses "2 * 3 + 4 * 5" parses "2 * 3 + 4 * 5" + parses "case 1; when 1 then 2; else; 3; end" parses "case 1; when 1 then 2; else; 3; end" + parses "foo 1" parses "foo 1" + parses "foo(n + 2)" parses "foo(n + 2)" + parses "n &+ 2" parses "n &+ 2" + parses "macro foo;%var if true;end" parses "macro foo;%var if true;end" + parses "[] of ->\n" parses "[] of ->\n" + parses "def foo(@protected); end" parses "def foo(@protected); end" + parses "a.b() /3" parses "a.b() /3" + parses "[1, 2]" parses "[1, 2]" + parses "1/2" parses "1/2" + parses "[..2]" parses "[..2]" + says syntax error on "next ** 1" says syntax error on "next ** 1" + parses "def foo(while foo); end" parses "def foo(while foo); end" + parses "foo(bar:a, baz:b)" parses "foo(bar:a, baz:b)" + parses "def foo(@fun); end" parses "def foo(@fun); end" + parses "->::foo=" parses "->::foo=" + says syntax error on "macro def foo : String; 1; end" says syntax error on "macro def foo : String; 1; end" + parses "macro >;end" parses "macro >;end" + parses "foo.|" parses "foo.|" + parses "begin; 1; rescue ex : Foo | Bar; 2; end" parses "begin; 1; rescue ex : Foo | Bar; 2; end" + parses "case {1, 2}\nwhen {.foo, .bar}\n5\nend" parses "case {1, 2}\nwhen {.foo, .bar}\n5\nend" + parses "def foo; yield 1; end" parses "def foo; yield 1; end" + says syntax error on "def foo(foo true); end" says syntax error on "def foo(foo true); end" + parses "n - 2" parses "n - 2" + parses "@[Foo::Bar]" parses "@[Foo::Bar]" + says syntax error on "def foo(in); end" says syntax error on "def foo(in); end" + parses "macro foo;unless var;true;end;end" parses "macro foo;unless var;true;end;end" + parses "macro foo;bar{% for x, y in z %}body{% end %}baz;end" parses "macro foo;bar{% for x, y in z %}body{% end %}baz;end" + parses "n ^ 2" parses "n ^ 2" + parses "<<-HERE1; <<-HERE2\nHERE1\nHERE2" parses "<<-HERE1; <<-HERE2\nHERE1\nHERE2" + says syntax error on "foo { |protected| }" says syntax error on "foo { |protected| }" + parses "foo.** 1, 2" parses "foo.** 1, 2" + says syntax error on "def foo &block : Int -> Double ; end" says syntax error on "def foo &block : Int -> Double ; end" + parses "def foo(x) : Int32\n1\nend" parses "def foo(x) : Int32\n1\nend" + parses "foo.**(1, 2) { 3 }" parses "foo.**(1, 2) { 3 }" + parses "def foo(x @var); end" parses "def foo(x @var); end" + parses "until : Int32" parses "until : Int32" + parses "1 % 2" parses "1 % 2" + says syntax error on "*a, 1 = 2" says syntax error on "*a, 1 = 2" + parses "a = 1; a <<= 1" parses "a = 1; a <<= 1" + parses "1 -2.0" parses "1 -2.0" + says syntax error on "until next; end" says syntax error on "until next; end" + parses "{% if true %}\n{% end %}\n{% if true %}\n{% end %}" parses "{% if true %}\n{% end %}\n{% if true %}\n{% end %}" + parses "return {1 => 2}" parses "return {1 => 2}" + parses "foo.is_a?(Const)" parses "foo.is_a?(Const)" + parses "def foo(a, &block : Foo); end" parses "def foo(a, &block : Foo); end" + says syntax error on "offsetof(X, 'c')" says syntax error on "offsetof(X, 'c')" + parses "macro |;end" parses "macro |;end" + parses "property next : Int32" parses "property next : Int32" + parses "->@@foo.foo?" parses "->@@foo.foo?" + says syntax error on "foo(next)" says syntax error on "foo(next)" + parses "<<-'HERE'\n hello \\n world\n \#{1}\n HERE" parses "<<-'HERE'\n hello \\n world\n \#{1}\n HERE" + parses "def foo(x @select); end" parses "def foo(x @select); end" + parses "def !=(*args, **opts, &); end" parses "def !=(*args, **opts, &); end" + parses "lib LibC; fun foo(a : Int**); end" parses "lib LibC; fun foo(a : Int**); end" + says syntax error on "def foo(foo yield); end" says syntax error on "def foo(foo yield); end" + parses "case\nwhen true\n1\nend" parses "case\nwhen true\n1\nend" + parses "->::Foo.foo!" parses "->::Foo.foo!" + says syntax error on "->::@@foo.foo" says syntax error on "->::@@foo.foo" + says syntax error on "foo **bar, *x" says syntax error on "foo **bar, *x" + parses "macro foo;bar{% if x %}body{% else %}body2{%end%}baz;end" parses "macro foo;bar{% if x %}body{% else %}body2{%end%}baz;end" + parses "def foo(x @@instance_sizeof); end" parses "def foo(x @@instance_sizeof); end" + says syntax error on "A = B = 1" says syntax error on "A = B = 1" + parses "def foo(x @def); end" parses "def foo(x @def); end" + parses "instance_alignof(X)" parses "instance_alignof(X)" + parses "{1}" parses "{1}" + parses "self" parses "self" + says syntax error on "enum Foo; A B; end" says syntax error on "enum Foo; A B; end" + parses "[\n1,2\n]" parses "[\n1,2\n]" + parses "/foo/" parses "/foo/" + says syntax error on "break &** 1" says syntax error on "break &** 1" + parses "foo %x()" parses "foo %x()" + says syntax error on "def f end" says syntax error on "def f end" + sets correct location of private method in enum sets correct location of private method in enum + parses "1 & 2" parses "1 & 2" + parses "def foo(@case); end" parses "def foo(@case); end" + parses "property if : Int32" parses "property if : Int32" + says syntax error on "def self.responds_to?; end" says syntax error on "def self.responds_to?; end" + parses "foo(0, n | 2)" parses "foo(0, n | 2)" + parses "def foo(@@include); end" parses "def foo(@@include); end" + parses "{% begin %}%q[ %s ]{% end %}" parses "{% begin %}%q[ %s ]{% end %}" + parses "property end : Int32" parses "property end : Int32" + parses "n &** 2" parses "n &** 2" + parses "break 1, *2" parses "break 1, *2" + parses "b.c &&= 1" parses "b.c &&= 1" + parses "abstract : Int32" parses "abstract : Int32" + parses "->Foo.[](Int32)" parses "->Foo.[](Int32)" + parses "a : Foo | Int32" parses "a : Foo | Int32" + parses "1 ? a : b ? c : 3" parses "1 ? a : b ? c : 3" + says syntax error on "{\n1 => 2\n3 => 4\n}" says syntax error on "{\n1 => 2\n3 => 4\n}" + says syntax error on "a() += 1" says syntax error on "a() += 1" + parses "foo.as(Bar)" parses "foo.as(Bar)" + parses "{% if x %}body{% end %}" parses "{% if x %}body{% end %}" + parses "def foo(var1, var2); end" parses "def foo(var1, var2); end" + says syntax error on "foo { |(typeof)| }" says syntax error on "foo { |(typeof)| }" + parses "foo &->bar" parses "foo &->bar" + says syntax error on "def self.as?; end" says syntax error on "def self.as?; end" + says syntax error on "foo { |out| }" says syntax error on "foo { |out| }" + parses "->Foo.foo=" parses "->Foo.foo=" + parses "def ^(); end" parses "def ^(); end" + parses ":\"foo\"" parses ":\"foo\"" + says syntax error on "{\n}" says syntax error on "{\n}" + parses "def !=(other, file = 1); end" parses "def !=(other, file = 1); end" + single splats inside container literals + parses "{*1, 2}" parses "{*1, 2}" + parses "{*1 * 2}" parses "{*1 * 2}" + parses "[*1]" parses "[*1]" + parses "[*1, *2]" parses "[*1, *2]" + parses "[1, *2]" parses "[1, *2]" + parses "x = {*1}" parses "x = {*1}" + parses "{*1, *2}" parses "{*1, *2}" + parses "{1, *2, 3, *4, 5}" parses "{1, *2, 3, *4, 5}" + says syntax error on "{*a: 1}" says syntax error on "{*a: 1}" + says syntax error on "case {1}\nwhen {*2}; 3; end" says syntax error on "case {1}\nwhen {*2}; 3; end" + parses "[*1 ** 2]" parses "[*1 ** 2]" + parses "Set {*1, 2, *3}" parses "Set {*1, 2, *3}" + parses "Set {*{1} * 2}" parses "Set {*{1} * 2}" + says syntax error on "{*1 => 2}" says syntax error on "{*1 => 2}" + parses "[1, *2, 3, *4, 5]" parses "[1, *2, 3, *4, 5]" + parses "{1, *2}" parses "{1, *2}" + says syntax error on "{a: 1, *2}" says syntax error on "{a: 1, *2}" + parses "case 1\nwhen {*2}; 3; end" parses "case 1\nwhen {*2}; 3; end" + says syntax error on "{1 => 2, *3}" says syntax error on "{1 => 2, *3}" + parses "[*[*[1]], *[2]]" parses "[*[*[1]], *[2]]" + parses "{*1}" parses "{*1}" + says syntax error on "case {*1}\nwhen {2}; 3; end" says syntax error on "case {*1}\nwhen {2}; 3; end" + parses "[*1, 2]" parses "[*1, 2]" + says syntax error on "def foo(break); end" says syntax error on "def foo(break); end" + parses "a b() {}" parses "a b() {}" + parses "lib LibC\nalias Foo = Bar\nend" parses "lib LibC\nalias Foo = Bar\nend" + says syntax error on "unless next; end" says syntax error on "unless next; end" + parses "{% begin %}%Q| %s |{% end %}" parses "{% begin %}%Q| %s |{% end %}" + parses "def foo(x : U) forall U; end" parses "def foo(x : U) forall U; end" + parses "def foo(@@break); end" parses "def foo(@@break); end" + says syntax error on "def foo(foo fun); end" says syntax error on "def foo(foo fun); end" + parses "def foo(@[Foo] &@block); end" parses "def foo(@[Foo] &@block); end" + parses "foo(z: 0, a: n | 2)" parses "foo(z: 0, a: n | 2)" + parses "def foo(x @@fun); end" parses "def foo(x @@fun); end" + parses "def Foo.foo\n1\nend" parses "def Foo.foo\n1\nend" + parses "1.[](2)" parses "1.[](2)" + parses "/fo\#{1}o/" parses "/fo\#{1}o/" + parses "property yield : Int32" parses "property yield : Int32" + says syntax error on "def =\nend" says syntax error on "def =\nend" + parses "(baz; bar do\nend)" parses "(baz; bar do\nend)" + says syntax error on "*a, b, c, d = 1, 2" says syntax error on "*a, b, c, d = 1, 2" + parses "def []=(value); end" parses "def []=(value); end" + parses "{1 => 2 / 3}" parses "{1 => 2 / 3}" + parses "def foo; x { |a| a }; end" parses "def foo; x { |a| a }; end" + parses "foo = 1; foo a: 1" parses "foo = 1; foo a: 1" + parses ":[]=" parses ":[]=" + parses "macro =~;end" parses "macro =~;end" + says syntax error on "yield break" says syntax error on "yield break" + says syntax error on "def foo(module); end" says syntax error on "def foo(module); end" + says syntax error on "if return; end" says syntax error on "if return; end" + says syntax error on "+next" says syntax error on "+next" + parses "r = 1; r.x += 2" parses "r = 1; r.x += 2" + parses "def foo(x @enum); end" parses "def foo(x @enum); end" + says syntax error on "def foo(foo macro); end" says syntax error on "def foo(foo macro); end" + parses "foo.!~(1, 2)" parses "foo.!~(1, 2)" + parses "def self.%; end;" parses "def self.%; end;" + says syntax error on "case 1; when next; end; end" says syntax error on "case 1; when next; end; end" + parses "1 =~ 2" parses "1 =~ 2" + parses "def foo(x @self); end" parses "def foo(x @self); end" + parses "begin; 1; rescue Foo; 2; end" parses "begin; 1; rescue Foo; 2; end" + says syntax error on "def foo(x : U) forall U, U; end" says syntax error on "def foo(x : U) forall U, U; end" + says syntax error on "foo 1," says syntax error on "foo 1," + parses "...2" parses "...2" + parses "1 <=> 2" parses "1 <=> 2" + says syntax error on "foo { |fun| }" says syntax error on "foo { |fun| }" + parses "macro foo;end" parses "macro foo;end" + parses "def foo(x @alias); end" parses "def foo(x @alias); end" + parses "def |(); end;" parses "def |(); end;" + parses "def foo(var : Int**); end" parses "def foo(var : Int**); end" + parses "foo = 1; foo -1" parses "foo = 1; foo -1" + says syntax error on "def foo=(a = 1, b = 2); end" says syntax error on "def foo=(a = 1, b = 2); end" + parses "a = 1\nfoo - a" parses "a = 1\nfoo - a" + parses "(bar do\nend)" parses "(bar do\nend)" + parses "yield 1 if true" parses "yield 1 if true" + parses ":|" parses ":|" + parses "macro foo; bar class: 1; end" parses "macro foo; bar class: 1; end" + parses "protected : Int32" parses "protected : Int32" + parses "var.@foo" parses "var.@foo" + says syntax error on "class Foo; require \"bar\"; end" says syntax error on "class Foo; require \"bar\"; end" + parses "asm(\n\"nop\"\n:\n\"a\"(0)\n:\n\"b\"(1),\n\"c\"(2)\n)" parses "asm(\n\"nop\"\n:\n\"a\"(0)\n:\n\"b\"(1),\n\"c\"(2)\n)" + says syntax error on "foo {1, 2}" says syntax error on "foo {1, 2}" + parses "def <=(); end" parses "def <=(); end" + parses "case a\nwhen b\n1 / 2\nelse\n1 / 2\nend" parses "case a\nwhen b\n1 / 2\nelse\n1 / 2\nend" + says syntax error on "def foo @var, █ end" says syntax error on "def foo @var, █ end" + parses "macro foo=;end" parses "macro foo=;end" + parses "a = 1; pointerof(a)" parses "a = 1; pointerof(a)" + parses "foo(1, **bar)" parses "foo(1, **bar)" + parses "<<-FOO\n \t1\n \tFOO" parses "<<-FOO\n \t1\n \tFOO" + parses "1.responds_to?(\n :foo\n)" parses "1.responds_to?(\n :foo\n)" + parses "lib LibC; struct Foo; include Bar; end; end" parses "lib LibC; struct Foo; include Bar; end; end" + says syntax error on "a, b, *c, d = 1, 2" says syntax error on "a, b, *c, d = 1, 2" + parses "a = 1; a /b" parses "a = 1; a /b" + says syntax error on "def foo(\"\" y); y; end" says syntax error on "def foo(\"\" y); y; end" + parses "1 ... 2" parses "1 ... 2" + parses ":~" parses ":~" + parses "case {1, 2}\nwhen foo\n5\nend" parses "case {1, 2}\nwhen foo\n5\nend" + parses "def foo(if foo); end" parses "def foo(if foo); end" + parses "1 < 2" parses "1 < 2" + parses "foo(n <= 2)" parses "foo(n <= 2)" + parses "begin; 1; ensure; 2; end" parses "begin; 1; ensure; 2; end" + says syntax error on "->::foo.foo" says syntax error on "->::foo.foo" + parses "def ===(other, file = 1); end" parses "def ===(other, file = 1); end" + parses "def foo(var : Int, Float -> Double); end" parses "def foo(var : Int, Float -> Double); end" + parses "{% begin %}%r{\\A}{% end %}" parses "{% begin %}%r{\\A}{% end %}" + says syntax error on "break * 1" says syntax error on "break * 1" + parses "macro &*;end" parses "macro &*;end" + parses "def foo(x @@until); end" parses "def foo(x @@until); end" + says syntax error on "foo { |with| }" says syntax error on "foo { |with| }" + parses "def foo(x @next); end" parses "def foo(x @next); end" + parses "1 / 2" parses "1 / 2" + says syntax error on "foo { |instance_sizeof| }" says syntax error on "foo { |instance_sizeof| }" + parses "enum Foo; @@foo = 1\n A \n end" parses "enum Foo; @@foo = 1\n A \n end" + parses "<<-HERE\n One\n Zero\n HERE" parses "<<-HERE\n One\n Zero\n HERE" + parses "Foo??" parses "Foo??" + parses "lib LibC\n$errno = Foo : Int32\nend" parses "lib LibC\n$errno = Foo : Int32\nend" + says syntax error on "def foo() :String\nend" says syntax error on "def foo() :String\nend" + parses "->Foo.>(Int32)" parses "->Foo.>(Int32)" + parses "Foo(x: U)" parses "Foo(x: U)" + parses "foo %i()" parses "foo %i()" + parses "def foo(x @@begin); end" parses "def foo(x @@begin); end" + parses "break {1, 2}" parses "break {1, 2}" + says syntax error on "{\n1 => 2, 3 => 4\n5 => 6}" says syntax error on "{\n1 => 2, 3 => 4\n5 => 6}" + parses "foo = 1; foo {}" parses "foo = 1; foo {}" + parses "+1" parses "+1" + says syntax error on "foo { |in| }" says syntax error on "foo { |in| }" + parses "foo.>(1, 2) { 3 }" parses "foo.>(1, 2) { 3 }" + parses "foo(x) do\n//\nend" parses "foo(x) do\n//\nend" + parses "case 1; end" parses "case 1; end" + says syntax error on "next &- 1" says syntax error on "next &- 1" + says syntax error on "next.as(Int32)" says syntax error on "next.as(Int32)" + parses "foo(n &- 2)" parses "foo(n &- 2)" + parses "foo.bar= *baz" parses "foo.bar= *baz" + parses "foo(n | 2)" parses "foo(n | 2)" + parses "foo(n &** 2)" parses "foo(n &** 2)" + parses "def foo(&block : Int ->\n); end" parses "def foo(&block : Int ->\n); end" + parses "foo = 1; ->foo.*(Int32)" parses "foo = 1; ->foo.*(Int32)" + parses "a = 1; a *=\n1" parses "a = 1; a *=\n1" + says syntax error on "return === 1" says syntax error on "return === 1" + says syntax error on "*a if true" says syntax error on "*a if true" + parses "def foo(@true); end" parses "def foo(@true); end" + parses "a = 1; a <<=\n1" parses "a = 1; a <<=\n1" + parses "def self.>; end;" parses "def self.>; end;" + parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) : \"eax\", \"ebx\"\n: \"volatile\", \"alignstack\"\n,\n\"intel\"\n)" parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) : \"eax\", \"ebx\"\n: \"volatile\", \"alignstack\"\n,\n\"intel\"\n)" + says syntax error on "def foo\nmodule\nend" says syntax error on "def foo\nmodule\nend" + says syntax error on "def foo(foo false); end" says syntax error on "def foo(foo false); end" + says syntax error on "next > 1" says syntax error on "next > 1" + parses "foo(z: 0, a: n >= 2)" parses "foo(z: 0, a: n >= 2)" + parses "{% if 1; 2; end %}" parses "{% if 1; 2; end %}" + parses "def self.%(); end;" parses "def self.%(); end;" + parses "def foo(x @@in); end" parses "def foo(x @@in); end" + parses "->Foo.!~(Int32)" parses "->Foo.!~(Int32)" + says syntax error on "a.b(), c.d = 1" says syntax error on "a.b(), c.d = 1" + parses "property private : Int32" parses "property private : Int32" + parses "foo %w()" parses "foo %w()" + parses "a.foo, a.bar = 1, 2" parses "a.foo, a.bar = 1, 2" + says syntax error on "{foo: 1, bar: 2\nbaz: 3}" says syntax error on "{foo: 1, bar: 2\nbaz: 3}" + says syntax error on "def foo(*x, **x); end" says syntax error on "def foo(*x, **x); end" + parses "x = 1 ensure 2" parses "x = 1 ensure 2" + says syntax error on "a = return" says syntax error on "a = return" + parses "def foo(); 1; rescue; 2; end" parses "def foo(); 1; rescue; 2; end" + parses "end : Int32" parses "end : Int32" + parses "begin; 1; rescue ::Foo | ::Bar; 2; end" parses "begin; 1; rescue ::Foo | ::Bar; 2; end" + says syntax error on "macro foo *y;end" says syntax error on "macro foo *y;end" + parses "def foo; a = 1; a; end" parses "def foo; a = 1; a; end" + parses "case {1}\nin {Int32.class}; 2; end" parses "case {1}\nin {Int32.class}; 2; end" + parses "enum Foo; def foo; 1; end; end" parses "enum Foo; def foo; 1; end; end" + parses "def foo(x @@extend); end" parses "def foo(x @@extend); end" + parses "{/ /, / /}" parses "{/ /, / /}" + parses "def Foo::Bar.foo\n1\nend" parses "def Foo::Bar.foo\n1\nend" + parses "1.as?(\n Int32\n)" parses "1.as?(\n Int32\n)" + says syntax error on "foo { |(module)| }" says syntax error on "foo { |(module)| }" + says syntax error on "case next; when 1; end; end" says syntax error on "case next; when 1; end; end" + says syntax error on "1 .. break" says syntax error on "1 .. break" + parses "foo.bar=(*baz)" parses "foo.bar=(*baz)" + says syntax error on "fun foo\nFoo = 1" says syntax error on "fun foo\nFoo = 1" + parses "sizeof(\n Int32\n)" parses "sizeof(\n Int32\n)" + parses ":\"\\a\\b\\n\\r\\t\\v\\f\\e\"" parses ":\"\\a\\b\\n\\r\\t\\v\\f\\e\"" + parses "{% for x in y %}body{% end %}" parses "{% for x in y %}body{% end %}" + parses "def !=(); end;" parses "def !=(); end;" + parses "Foo({String, ->, ->})" parses "Foo({String, ->, ->})" + parses "foo result : Int32; result" parses "foo result : Int32; result" + parses "case a\nwhen b\n/ /\n\nelse\n/ /\nend" parses "case a\nwhen b\n/ /\n\nelse\n/ /\nend" + parses "def ===(); end;" parses "def ===(); end;" + parses "Foo?" parses "Foo?" + parses "->Foo.&(Int32)" parses "->Foo.&(Int32)" + parses "foo.!=(1, 2)" parses "foo.!=(1, 2)" + parses "a() /3" parses "a() /3" + says syntax error on "\"foo\" \"bar\"" says syntax error on "\"foo\" \"bar\"" + parses "x[1, ..2]" parses "x[1, ..2]" + parses "lib LibC; union Foo; end end" parses "lib LibC; union Foo; end end" + parses "Foo(T, 1)" parses "Foo(T, 1)" + parses "1.!(\n)" parses "1.!(\n)" + says syntax error on "def foo; A = 1; end" says syntax error on "def foo; A = 1; end" + parses "def foo(a, &block); end" parses "def foo(a, &block); end" + says syntax error on "foo { |while| }" says syntax error on "foo { |while| }" + parses "\"hello \"\\\n\"world\"" parses "\"hello \"\\\n\"world\"" + parses "property abstract : Int32" parses "property abstract : Int32" + parses "def foo(@[Foo] var : Int32); end" parses "def foo(@[Foo] var : Int32); end" + parses "foo(a: n & 2)" parses "foo(a: n & 2)" + parses "asm(\"nop\" : \"a\"(0) : \"b\"(1))" parses "asm(\"nop\" : \"a\"(0) : \"b\"(1))" + says syntax error on "def foo(foo out); end" says syntax error on "def foo(foo out); end" + parses "macro `;end" parses "macro `;end" + parses "def foo(x @pointerof); end" parses "def foo(x @pointerof); end" + parses "foo(1 + 2)" parses "foo(1 + 2)" + parses "foo(a: n < 2)" parses "foo(a: n < 2)" + parses "def **; end;" parses "def **; end;" + parses "a.b //=\n1" parses "a.b //=\n1" + parses "def foo(x, *, y, &); 1; end" parses "def foo(x, *, y, &); 1; end" + parses "1 if /x/" parses "1 if /x/" + parses "foo z: out x; x" parses "foo z: out x; x" + says syntax error on "def foo(begin); end" says syntax error on "def foo(begin); end" + parses "return 1.bar do\nend" parses "return 1.bar do\nend" + parses "def foo(@struct); end" parses "def foo(@struct); end" + parses "foo = 1; foo(+1)" parses "foo = 1; foo(+1)" + parses "def ==(); end;" parses "def ==(); end;" + parses "`foo\\``" parses "`foo\\``" + says syntax error on "foo { |(if)| }" says syntax error on "foo { |(if)| }" + says syntax error on "'''" says syntax error on "'''" + parses "f.x /= 2" parses "f.x /= 2" + says syntax error on "def foo(pointerof); end" says syntax error on "def foo(pointerof); end" + says syntax error on "next >= 1" says syntax error on "next >= 1" + says syntax error on "def foo=(&block); end" says syntax error on "def foo=(&block); end" + parses "foo.|(1, 2) { 3 }" parses "foo.|(1, 2) { 3 }" + parses "def foo(x @@module); end" parses "def foo(x @@module); end" + parses "foo.- 1, 2" parses "foo.- 1, 2" + parses "foo = 1; ->foo.[]=(Int32)" parses "foo = 1; ->foo.[]=(Int32)" + parses "def foo(@unless); end" parses "def foo(@unless); end" + parses "while : Int32" parses "while : Int32" + parses "puts %w(one two)" parses "puts %w(one two)" + parses "x[a: 1, b: 2,]" parses "x[a: 1, b: 2,]" + parses "def []=(other, file = 1); end" parses "def []=(other, file = 1); end" + parses "foo(a: n == 2)" parses "foo(a: n == 2)" + parses "foo(0, n >> 2)" parses "foo(0, n >> 2)" + says syntax error on "def foo(x @x); 1; end" says syntax error on "def foo(x @x); 1; end" + parses "foo.>=(1, 2)" parses "foo.>=(1, 2)" + parses "unless foo; 1; else; 2; end" parses "unless foo; 1; else; 2; end" + says syntax error on "def responds_to?; end" says syntax error on "def responds_to?; end" + says syntax error on "def foo var; end" says syntax error on "def foo var; end" + parses "->() : Int32 { }" parses "->() : Int32 { }" + parses "def foo; yield 1; yield; end" parses "def foo; yield 1; yield; end" + parses "foo.===(1, 2)" parses "foo.===(1, 2)" + parses "property asm : Int32" parses "property asm : Int32" + parses "f.x >>= 2" parses "f.x >>= 2" + parses "->@foo.foo!" parses "->@foo.foo!" + parses "def foo(offsetof foo); end" parses "def foo(offsetof foo); end" + parses "foo &.@bar" parses "foo &.@bar" + says syntax error on "def foo(foo unless); end" says syntax error on "def foo(foo unless); end" + global regex match data + says syntax error on "$0, a = {1, 2}" says syntax error on "$0, a = {1, 2}" + parses "$? = 1" parses "$? = 1" + parses "$~" parses "$~" + parses "$~ = 1" parses "$~ = 1" + parses "$?" parses "$?" + says syntax error on "$99999999999999999999999?" says syntax error on "$99999999999999999999999?" + parses "foo $?" parses "foo $?" + parses "foo $1" parses "foo $1" + parses "$1" parses "$1" + says syntax error on "$0, $1 = [1, 2]" says syntax error on "$0, $1 = [1, 2]" + says syntax error on "$2147483648" says syntax error on "$2147483648" + parses "$0" parses "$0" + says syntax error on "$0 = 1" says syntax error on "$0 = 1" + parses "$1?" parses "$1?" + parses "$?.foo" parses "$?.foo" + parses "$~.foo" parses "$~.foo" + parses "foo { |a, b, | 1 }" parses "foo { |a, b, | 1 }" + says syntax error on "def foo\nclass\nend" says syntax error on "def foo\nclass\nend" + parses "def <<(); end" parses "def <<(); end" + parses "foo.>(1, 2)" parses "foo.>(1, 2)" + parses "foo = 1; ->foo.bar(Int32)" parses "foo = 1; ->foo.bar(Int32)" + says syntax error on "asm(\"\" ::: \"\"(var))" says syntax error on "asm(\"\" ::: \"\"(var))" + parses "case {1}\nin {.bar?}; 2; end" parses "case {1}\nin {.bar?}; 2; end" + parses "foo a: b(1) do\nend" parses "foo a: b(1) do\nend" + says syntax error on "def foo(var = 1 : Int32); end" says syntax error on "def foo(var = 1 : Int32); end" + parses "def foo(a); a; end" parses "def foo(a); a; end" + parses "def foo(**args)\n1\nend" parses "def foo(**args)\n1\nend" + parses "{% begin %}%[ %s ]{% end %}" parses "{% begin %}%[ %s ]{% end %}" + parses "a.b/2" parses "a.b/2" + says syntax error on "foo { |self| }" says syntax error on "foo { |self| }" + parses "n =~ 2" parses "n =~ 2" + parses "property unless : Int32" parses "property unless : Int32" + parses ":*" parses ":*" + says syntax error on "break | 1" says syntax error on "break | 1" + parses "enum Foo; {% if 1 %}2{% end %}; end" parses "enum Foo; {% if 1 %}2{% end %}; end" + parses "/ /" parses "/ /" + parses "<<-FOO\n\t 1\n\t FOO" parses "<<-FOO\n\t 1\n\t FOO" + parses "{{ //.options }}" parses "{{ //.options }}" + says syntax error on "return & 1" says syntax error on "return & 1" + parses "def foo(@@alias); end" parses "def foo(@@alias); end" + parses "foo(n < 2)" parses "foo(n < 2)" + parses "foo + 1" parses "foo + 1" + parses "def foo(struct foo); end" parses "def foo(struct foo); end" + parses "def foo(x @@out); end" parses "def foo(x @@out); end" + parses "foo if 3" parses "foo if 3" + parses "def foo(**args : **Foo)\n1\nend" parses "def foo(**args : **Foo)\n1\nend" + parses "foo.=== 1, 2" parses "foo.=== 1, 2" + parses "foo(&.as?(T))" parses "foo(&.as?(T))" + parses "ensure : Int32" parses "ensure : Int32" + parses "%r(\\/)" parses "%r(\\/)" + parses "lib LibC; enum Foo; A\nB; C\nD = 1; end end" parses "lib LibC; enum Foo; A\nB; C\nD = 1; end end" + parses "{% unless 1; 2; end %}" parses "{% unless 1; 2; end %}" + parses "case 1\nwhen .as?(T)\n2\nend" parses "case 1\nwhen .as?(T)\n2\nend" + parses "foo.| 1, 2" parses "foo.| 1, 2" + parses "n // 2" parses "n // 2" + says syntax error on "foo x: 1, x: 1" says syntax error on "foo x: 1, x: 1" + parses "!1" parses "!1" + parses "{{ nil?(foo) }}" parses "{{ nil?(foo) }}" + says syntax error on "def foo(false); end" says syntax error on "def foo(false); end" + parses "struct : Int32" parses "struct : Int32" + parses "foo.& do end" parses "foo.& do end" + says syntax error on "foo { |struct| }" says syntax error on "foo { |struct| }" + parses "def !~(); end" parses "def !~(); end" + parses "a = 1; a &-= 1" parses "a = 1; a &-= 1" + parses "case when 1\n2\nend" parses "case when 1\n2\nend" + parses "def foo(@@class); end" parses "def foo(@@class); end" + parses "offsetof(\n Foo,\n @foo\n)" parses "offsetof(\n Foo,\n @foo\n)" + says syntax error on "Hash{\"foo\": 1}" says syntax error on "Hash{\"foo\": 1}" + parses "foo[] /2" parses "foo[] /2" + parses "def foo(@@lib); end" parses "def foo(@@lib); end" + says syntax error on "foo[next]" says syntax error on "foo[next]" + parses "foo out @x; @x" parses "foo out @x; @x" + says syntax error on "foo[1] = next" says syntax error on "foo[1] = next" + says syntax error on "def foo(foo extend); end" says syntax error on "def foo(foo extend); end" + says syntax error on "a() = 1" says syntax error on "a() = 1" + parses "until true; 1; end;" parses "until true; 1; end;" + parses "foo.bar(1, 2) { 3 }" parses "foo.bar(1, 2) { 3 }" + parses "@a : Foo | Int32" parses "@a : Foo | Int32" + says syntax error on "1 unless return" says syntax error on "1 unless return" + parses "->Foo.&**(Int32)" parses "->Foo.&**(Int32)" + parses "foo(0, n + 2)" parses "foo(0, n + 2)" + sets correct location of parameter in proc literal sets correct location of parameter in proc literal + parses "def foo(x @@require); end" parses "def foo(x @@require); end" + parses "def foo(@sizeof); end" parses "def foo(@sizeof); end" + says syntax error on "def foo(lib); end" says syntax error on "def foo(lib); end" + says syntax error on "case when .foo? then 1; end" says syntax error on "case when .foo? then 1; end" + parses "a.b |=\n1" parses "a.b |=\n1" + says syntax error on "def foo(foo with); end" says syntax error on "def foo(foo with); end" + says syntax error on "foo { |a b| }" says syntax error on "foo { |a b| }" + parses "n << 2" parses "n << 2" + parses "foo.-(1, 2) { 3 }" parses "foo.-(1, 2) { 3 }" + says syntax error on "1 unless next" says syntax error on "1 unless next" + says syntax error on "A = begin; 1; rescue; B = 1; end" says syntax error on "A = begin; 1; rescue; B = 1; end" + parses "a = 1; a &*= 1" parses "a = 1; a &*= 1" + says syntax error on "a = break" says syntax error on "a = break" + parses "sizeof : Int32" parses "sizeof : Int32" + parses "foo(0, n &+ 2)" parses "foo(0, n &+ 2)" + parses "x[+ 1]" parses "x[+ 1]" + parses "_, *_, _, _ = 1, 2, 3" parses "_, *_, _, _ = 1, 2, 3" + parses "def foo(@with); end" parses "def foo(@with); end" + parses "macro !~;end" parses "macro !~;end" + parses "f.x &*= 2" parses "f.x &*= 2" + parses "def foo(x @@alias); end" parses "def foo(x @@alias); end" + parses "a = 1; a /=\n1" parses "a = 1; a /=\n1" + parses "property nil : Int32" parses "property nil : Int32" + says syntax error on "foo { |if| }" says syntax error on "foo { |if| }" + parses "foo.* 1, 2" parses "foo.* 1, 2" + parses "a[0], a[1] = 1, 2" parses "a[0], a[1] = 1, 2" + parses "property alias : Int32" parses "property alias : Int32" + parses "def foo(@[Foo] var); end" parses "def foo(@[Foo] var); end" + parses "/ /\n/ /" parses "/ /\n/ /" + parses "macro foo;bar{% if x %}body{% elsif y %}body2{%end%}baz;end" parses "macro foo;bar{% if x %}body{% elsif y %}body2{%end%}baz;end" + says syntax error on "1 if next" says syntax error on "1 if next" + parses "[1,\n 2,]" parses "[1,\n 2,]" + sets correct location of instance variable in proc pointer sets correct location of instance variable in proc pointer + parses "def foo(x @@var); end" parses "def foo(x @@var); end" + parses "def foo(@class); end" parses "def foo(@class); end" + parses "a = 1; pointerof(a)" parses "a = 1; pointerof(a)" + parses "@a, b = 1, 2" parses "@a, b = 1, 2" + parses "def &-(); end" parses "def &-(); end" + parses "def foo(x, **args)\n1\nend" parses "def foo(x, **args)\n1\nend" + parses ":\"\\\"foo\\\"\"" parses ":\"\\\"foo\\\"\"" + says syntax error on "def foo(enum); end" says syntax error on "def foo(enum); end" + parses "def <=(); end;" parses "def <=(); end;" + parses "lib LibC; enum Foo; A = 1; B; end end" parses "lib LibC; enum Foo; A = 1; B; end end" + parses "<<-HERE\n One \\n Two\n Zero\n HERE" parses "<<-HERE\n One \\n Two\n Zero\n HERE" + says syntax error on "def foo(sizeof); end" says syntax error on "def foo(sizeof); end" + says syntax error on "foo { |(struct)| }" says syntax error on "foo { |(struct)| }" + parses "1.tap do |x|; 1; rescue; x; end" parses "1.tap do |x|; 1; rescue; x; end" + parses "1.as? Bar" parses "1.as? Bar" + parses "foo %q" parses "foo %q" + parses "1 - 2" parses "1 - 2" + parses "foo.>=(1, 2) { 3 }" parses "foo.>=(1, 2) { 3 }" + parses "::Foo{\"x\" => \"y\"}" parses "::Foo{\"x\" => \"y\"}" + says syntax error on "return | 1" says syntax error on "return | 1" + says syntax error on "foo { |(instance_sizeof)| }" says syntax error on "foo { |(instance_sizeof)| }" + parses "Foo({X: X, Y: Y})" parses "Foo({X: X, Y: Y})" + parses "def foo(@@return); end" parses "def foo(@@return); end" + parses "{1 => 2, 3 => 4}" parses "{1 => 2, 3 => 4}" + parses "if foo\n1\nend" parses "if foo\n1\nend" + parses "foo(a: n ** 2)" parses "foo(a: n ** 2)" + parses "def foo(@@sizeof); end" parses "def foo(@@sizeof); end" + parses "foo.**(1, 2)" parses "foo.**(1, 2)" + parses "def foo; x { |a, *b| b }; end" parses "def foo; x { |a, *b| b }; end" + parses "def foo(@begin); end" parses "def foo(@begin); end" + parses "def foo(@@with); end" parses "def foo(@@with); end" + parses "foo(n =~ 2)" parses "foo(n =~ 2)" + says syntax error on "foo { |(until)| }" says syntax error on "foo { |(until)| }" + parses "!a && b" parses "!a && b" + parses "def foo(@@nil); end" parses "def foo(@@nil); end" + parses "%x(`which(foo)`)" parses "%x(`which(foo)`)" + parses "a : Foo = 1" parses "a : Foo = 1" + parses "def foo(@extend); end" parses "def foo(@extend); end" + parses "return 1" parses "return 1" + says syntax error on "asm(\"nop\" ::: \"\#{foo}\")" says syntax error on "asm(\"nop\" ::: \"\#{foo}\")" + parses ":**" parses ":**" + parses "foo.**" parses "foo.**" + parses "def foo(a, @[Foo] var); end" parses "def foo(a, @[Foo] var); end" + parses "foo.>=" parses "foo.>=" + parses "<<-HERE\n foo\#{1}bar\n baz\n HERE" parses "<<-HERE\n foo\#{1}bar\n baz\n HERE" + parses "macro foo(@[Foo] var);end" parses "macro foo(@[Foo] var);end" + parses "foo = 1; ->foo.===(Int32)" parses "foo = 1; ->foo.===(Int32)" + parses "puts {{\n1\n}}" parses "puts {{\n1\n}}" + says syntax error on "foo { |(pointerof)| }" says syntax error on "foo { |(pointerof)| }" + parses "foo(z: 0, a: n !~ 2)" parses "foo(z: 0, a: n !~ 2)" + parses "a = 1; (a)/b" parses "a = 1; (a)/b" + parses "macro foo(@[Foo] var);end" parses "macro foo(@[Foo] var);end" + parses "def foo(x @struct); end" parses "def foo(x @struct); end" + says syntax error on "def foo(foo if); end" says syntax error on "def foo(foo if); end" + parses "\"hello \#{1}\" \\\r\n \"\#{2} world\"" parses "\"hello \#{1}\" \\\r\n \"\#{2} world\"" + parses "foo.nil?( )" parses "foo.nil?( )" + parses "break" parses "break" + says syntax error on "lib LibC\n$Errno : Int32\nend" says syntax error on "lib LibC\n$Errno : Int32\nend" + parses "a.b &+=\n1" parses "a.b &+=\n1" + parses "foo(0, n <= 2)" parses "foo(0, n <= 2)" + parses "Foo(X: U, Y: V)" parses "Foo(X: U, Y: V)" + parses "abstract class Foo; end" parses "abstract class Foo; end" + parses "def foo(x @require); end" parses "def foo(x @require); end" + parses "def foo(x @class); end" parses "def foo(x @class); end" + says syntax error on "a = 1, b = 2" says syntax error on "a = 1, b = 2" + parses ":<<" parses ":<<" + parses "case 1; when 2 then /foo/; end" parses "case 1; when 2 then /foo/; end" + parses "[/ /, / /]" parses "[/ /, / /]" + parses "1 ** 2" parses "1 ** 2" + says syntax error on "break > 1" says syntax error on "break > 1" + parses "def foo(x @@if); end" parses "def foo(x @@if); end" + parses "n / 2" parses "n / 2" + says syntax error on "next <= 1" says syntax error on "next <= 1" + parses "return *{1, 2}" parses "return *{1, 2}" + parses "{% begin %}%x( %s ){% end %}" parses "{% begin %}%x( %s ){% end %}" + parses ":foo!" parses ":foo!" + parses "next 1" parses "next 1" + says syntax error on "def foo(foo in); end" says syntax error on "def foo(foo in); end" + parses "def foo(enum foo); end" parses "def foo(enum foo); end" + says syntax error on "next < 1" says syntax error on "next < 1" + parses "def foo(\"bar qux\" y); y; end" parses "def foo(\"bar qux\" y); y; end" + parses "f.x &= 2" parses "f.x &= 2" + parses "def foo(pointerof foo); end" parses "def foo(pointerof foo); end" + parses "def foo(x @@include); end" parses "def foo(x @@include); end" + parses ":\u304B\u305F\u306A" parses ":\u304B\u305F\u306A" + parses "1 == 2 == 3 == 4" parses "1 == 2 == 3 == 4" + parses "def self.foo\n1\nend" parses "def self.foo\n1\nend" + parses ":\"\"" parses ":\"\"" + parses "lib LibC\nfun getchar(a : Int)\nend" parses "lib LibC\nfun getchar(a : Int)\nend" + says syntax error on "return + 1" says syntax error on "return + 1" + parses "<<-HERE\n \#{1} \\n \#{2}\n HERE" parses "<<-HERE\n \#{1} \\n \#{2}\n HERE" + says syntax error on "case 1\nwhen Int32; 2; in 2" says syntax error on "case 1\nwhen Int32; 2; in 2" + says syntax error on "return > 1" says syntax error on "return > 1" + parses "lib LibC; struct Foo; x : Int**; end end" parses "lib LibC; struct Foo; x : Int**; end end" + says syntax error on "<<-HERE\n One\n \#{1}\n HERE" says syntax error on "<<-HERE\n One\n \#{1}\n HERE" + parses "call @foo.bar" parses "call @foo.bar" + parses "1;+2" parses "1;+2" + says syntax error on "\"\#{<<-HERE}\"\nHERE" says syntax error on "\"\#{<<-HERE}\"\nHERE" + parses "lib LibC; fun foo : Int*; end" parses "lib LibC; fun foo : Int*; end" + says syntax error on "while next; end" says syntax error on "while next; end" + parses "1 .. 2" parses "1 .. 2" + parses "foo +1_i64" parses "foo +1_i64" + parses "lib LibC; struct Foo; x : Int*; end end" parses "lib LibC; struct Foo; x : Int*; end end" + parses "{[] of Foo, self.foo}" parses "{[] of Foo, self.foo}" + parses "foo rescue 2" parses "foo rescue 2" + parses "->::foo?" parses "->::foo?" + says syntax error on "case break; when 1; end; end" says syntax error on "case break; when 1; end; end" + parses "foo { 1 }" parses "foo { 1 }" + parses "a.b +=\n1" parses "a.b +=\n1" + says syntax error on "def foo; require \"bar\"; end" says syntax error on "def foo; require \"bar\"; end" + parses "<<-HERE\r\n One\r\n Zero\r\n HERE\r\n" parses "<<-HERE\r\n One\r\n Zero\r\n HERE\r\n" + parses "def **(); end;" parses "def **(); end;" + parses "foo.!" parses "foo.!" + says syntax error on "A = begin; B = 1; end" says syntax error on "A = begin; B = 1; end" + parses "n &- 2" parses "n &- 2" + parses "(bar {})" parses "(bar {})" + parses "macro foo(x = __LINE__);end" parses "macro foo(x = __LINE__);end" + parses "foo = 1; ->foo.%(Int32)" parses "foo = 1; ->foo.%(Int32)" + parses "extend : Int32" parses "extend : Int32" + says syntax error on "def foo(struct); end" says syntax error on "def foo(struct); end" + parses "{/ / => / /, / / => / /}" parses "{/ / => / /, / / => / /}" + parses "foo unless 3" parses "foo unless 3" + says syntax error on "{foo: 1\nbar: 2}" says syntax error on "{foo: 1\nbar: 2}" + parses "foo.=~ do end" parses "foo.=~ do end" + says syntax error on "foo &.&&()" says syntax error on "foo &.&&()" + says syntax error on "def foo():String\nend" says syntax error on "def foo():String\nend" + parses "foo(/ /)" parses "foo(/ /)" + parses "struct Foo; end" parses "struct Foo; end" + parses "next {1 => 2}" parses "next {1 => 2}" + says syntax error on "return .. 1" says syntax error on "return .. 1" + says syntax error on "def foo(foo class); end" says syntax error on "def foo(foo class); end" + parses "class Foo(Type); end" parses "class Foo(Type); end" + parses "macro foo\n\"\\'\"\nend" parses "macro foo\n\"\\'\"\nend" + parses "def foo; with a yield 1; end" parses "def foo; with a yield 1; end" + parses "-1_i64" parses "-1_i64" + parses "def ===(*args, **opts); end" parses "def ===(*args, **opts); end" + parses "/ hi /" parses "/ hi /" + parses "@@foo/2" parses "@@foo/2" + parses "def foo(until foo); end" parses "def foo(until foo); end" + parses "yield foo do\nend" parses "yield foo do\nend" + parses "def !=(*args, **opts); end" parses "def !=(*args, **opts); end" + says syntax error on "foo { |(enum)| }" says syntax error on "foo { |(enum)| }" + parses "class Foo\nend" parses "class Foo\nend" + parses "n + 2" parses "n + 2" + parses "Int[]" parses "Int[]" + parses "1 >> 2" parses "1 >> 2" + parses "f.x Foo.new" parses "f.x Foo.new" + parses "foo = 1; ->foo.foo!" parses "foo = 1; ->foo.foo!" + parses "def >(); end" parses "def >(); end" + parses "foo.> do end" parses "foo.> do end" + parses "def foo(x)\n x\nend; foo = 1; b = 2; foo +b" parses "def foo(x)\n x\nend; foo = 1; b = 2; foo +b" + says syntax error on "case {1, 2}; when {3}; 4; end" says syntax error on "case {1, 2}; when {3}; 4; end" + parses "n == 2" parses "n == 2" + parses "a[], a[] = 1, 2" parses "a[], a[] = 1, 2" + parses "\"foo\#{\"bar\"}baz\"" parses "\"foo\#{\"bar\"}baz\"" + parses "private def foo; end" parses "private def foo; end" + parses "foo(//)" parses "foo(//)" + parses "foo = 1; ->foo.**(Int32)" parses "foo = 1; ->foo.**(Int32)" + says syntax error on "case 1\nin .nil?; 2" says syntax error on "case 1\nin .nil?; 2" + says syntax error on "b, 1 == 2, a = 4" says syntax error on "b, 1 == 2, a = 4" + parses "return if true" parses "return if true" + parses "@a = uninitialized Foo" parses "@a = uninitialized Foo" + parses "property pointerof : Int32" parses "property pointerof : Int32" + says syntax error on "Hash{\"foo\": 1, \"bar\": 2}" says syntax error on "Hash{\"foo\": 1, \"bar\": 2}" + parses "foo[1] /2" parses "foo[1] /2" + parses "case 1\nwhen 1\n2\nelse\n3\nend" parses "case 1\nwhen 1\n2\nelse\n3\nend" + parses "def foo(with foo); end" parses "def foo(with foo); end" + parses "x([] of Foo, Bar.new)" parses "x([] of Foo, Bar.new)" + parses "foo %w" parses "foo %w" + parses "foo x, y do\nend" parses "foo x, y do\nend" + parses "a; if / /\n/ /\nelsif / /\n/ /\nend" parses "a; if / /\n/ /\nelsif / /\n/ /\nend" + parses "foo = 1; foo +1" parses "foo = 1; foo +1" + parses "foo(a: 1\n)" parses "foo(a: 1\n)" + parses "def foo(@[Foo] var); end" parses "def foo(@[Foo] var); end" + parses "macro foo;if var;true;end;end" parses "macro foo;if var;true;end;end" + says syntax error on "def foo(foo module); end" says syntax error on "def foo(foo module); end" + says syntax error on "break // 1" says syntax error on "break // 1" + parses "def foo(false foo); end" parses "def foo(false foo); end" + parses "lib LibC\nfun getchar : Int\nend" parses "lib LibC\nfun getchar : Int\nend" + parses "2 * (3 + 4)" parses "2 * (3 + 4)" + parses "foo(z: 0, a: n & 2)" parses "foo(z: 0, a: n & 2)" + says syntax error on "unless 1 == 1 a; end" says syntax error on "unless 1 == 1 a; end" + parses "def foo(asm foo); end" parses "def foo(asm foo); end" + says syntax error on "foo { |include| }" says syntax error on "foo { |include| }" + parses "def foo(*y : *T); 1; end" parses "def foo(*y : *T); 1; end" + parses "1 | 2" parses "1 | 2" + parses "foo = 1; ->foo.<(Int32)" parses "foo = 1; ->foo.<(Int32)" + parses "<<-FOO\n\t1\n\tFOO" parses "<<-FOO\n\t1\n\tFOO" + parses "property enum : Int32" parses "property enum : Int32" + says syntax error on "def foo(*a foo); end" says syntax error on "def foo(*a foo); end" + parses "foo(z: 0, a: n &+ 2)" parses "foo(z: 0, a: n &+ 2)" + parses "foo = 1; ->foo.[](Int32)" parses "foo = 1; ->foo.[](Int32)" + parses "def ^; end;" parses "def ^; end;" + parses ":<=" parses ":<=" + parses "2 / 3 + 4 / 5" parses "2 / 3 + 4 / 5" + parses "1.~" parses "1.~" + parses "macro /;end" parses "macro /;end" + says syntax error on "def foo(\"bar\");end" says syntax error on "def foo(\"bar\");end" + says syntax error on "a, B = 1, 2" says syntax error on "a, B = 1, 2" + parses "def foo ; 1 ; end" parses "def foo ; 1 ; end" + parses "def self.|(); end;" parses "def self.|(); end;" + says syntax error on "break / 1" says syntax error on "break / 1" + parses "b.c ||= 1" parses "b.c ||= 1" + parses "asm(\"nop\" ::: :)" parses "asm(\"nop\" ::: :)" + parses "T::U/1" parses "T::U/1" + says syntax error on "foo { |sizeof| }" says syntax error on "foo { |sizeof| }" + parses "Foo(\nT\n)" parses "Foo(\nT\n)" + says syntax error on "case return; when 1; end; end" says syntax error on "case return; when 1; end; end" + parses "def foo(x, *y : Int32); 1; end" parses "def foo(x, *y : Int32); 1; end" + says syntax error on "foo { |return| }" says syntax error on "foo { |return| }" + parses "{% begin %}%{ %s }{% end %}" parses "{% begin %}%{ %s }{% end %}" + parses "def =~(); end;" parses "def =~(); end;" + says syntax error on "foo(1 2)" says syntax error on "foo(1 2)" + parses "self / number" parses "self / number" + parses "foo ..2" parses "foo ..2" + parses "begin : Int32" parses "begin : Int32" + parses "foo(x, *bar, *baz, y)" parses "foo(x, *bar, *baz, y)" + parses "case 1\nwhen .foo\n2\nend" parses "case 1\nwhen .foo\n2\nend" + parses "lib LibC\nfun getch = \"get.char\" : Int32\nend" parses "lib LibC\nfun getch = \"get.char\" : Int32\nend" + parses "macro foo(**args)\n1\nend" parses "macro foo(**args)\n1\nend" + says syntax error on "def foo\nlib\nend" says syntax error on "def foo\nlib\nend" + says syntax error on "macro foo x\n 1 + 2; end" says syntax error on "macro foo x\n 1 + 2; end" + parses "foo x, *bar" parses "foo x, *bar" + says syntax error on "return.foo" says syntax error on "return.foo" + parses "lib LibC\nfun getch = GetChar\nend" parses "lib LibC\nfun getch = GetChar\nend" + says syntax error on "a {}, b = 1" says syntax error on "a {}, b = 1" + parses "{% for _, x, _ in y %}body{% end %}" parses "{% for _, x, _ in y %}body{% end %}" + parses "a : Foo[12]" parses "a : Foo[12]" + parses "def foo; with a yield; end" parses "def foo; with a yield; end" + parses "false" parses "false" + says syntax error on "$foo" says syntax error on "$foo" + parses "Foo(\n)" parses "Foo(\n)" + says syntax error on "return.as(Int32)" says syntax error on "return.as(Int32)" + parses "[] of ->;" parses "[] of ->;" + parses "foo%Q" parses "foo%Q" + parses "foo 1, **bar, &block" parses "foo 1, **bar, &block" + parses "foo = 1; ->foo.^(Int32)" parses "foo = 1; ->foo.^(Int32)" + parses "lib LibC\nfun getch = \"get.char\"\nend" parses "lib LibC\nfun getch = \"get.char\"\nend" + parses "foo \"foo bar\": 1, \"baz\": 2" parses "foo \"foo bar\": 1, \"baz\": 2" + parses "a.b *=\n1" parses "a.b *=\n1" + parses "a == / /" parses "a == / /" + parses "1_i64" parses "1_i64" + says syntax error on "foo { |typeof| }" says syntax error on "foo { |typeof| }" + parses "macro []=;end" parses "macro []=;end" + parses "foo Bar { 1 }" parses "foo Bar { 1 }" + parses "lib LibFoo\nend\nif true\nend" parses "lib LibFoo\nend\nif true\nend" + parses "def foo(@@unless); end" parses "def foo(@@unless); end" + says syntax error on "while break; end" says syntax error on "while break; end" + says syntax error on "{\"foo\" => 1, \"bar\": 2}" says syntax error on "{\"foo\" => 1, \"bar\": 2}" + parses "enum Foo::Bar; A = 1; end" parses "enum Foo::Bar; A = 1; end" + parses "macro foo;bar{% if x %}body{% elsif y %}body2{% else %}body3{%end%}baz;end" parses "macro foo;bar{% if x %}body{% elsif y %}body2{% else %}body3{%end%}baz;end" + parses "macro [];end" parses "macro [];end" + parses "foo.!= do end" parses "foo.!= do end" + parses "a = 1; yield a rescue a" parses "a = 1; yield a rescue a" + parses "enum Foo; A\nB; C\nD = 1; end" parses "enum Foo; A\nB; C\nD = 1; end" + parses "case;when true;1;end" parses "case;when true;1;end" + parses "{% if 1\n x\nend %}" parses "{% if 1\n x\nend %}" + says syntax error on "a.b {}, c = 1" says syntax error on "a.b {}, c = 1" + says syntax error on "def self.as; end" says syntax error on "def self.as; end" + parses "def foo; end" parses "def foo; end" + parses "foo.!( )" parses "foo.!( )" + parses "\"\"" parses "\"\"" + parses "%r(\\ )" parses "%r(\\ )" + parses "Int[8]" parses "Int[8]" + parses "foo.&(1, 2)" parses "foo.&(1, 2)" + parses "def foo(@@end); end" parses "def foo(@@end); end" + parses "::foo" parses "::foo" + parses "def foo(x @offsetof); end" parses "def foo(x @offsetof); end" + parses "def foo(@asm); end" parses "def foo(@asm); end" + parses "{{a = 1 if 2}}" parses "{{a = 1 if 2}}" + parses "foo.*(1, 2) { 3 }" parses "foo.*(1, 2) { 3 }" + parses "macro ===;end" parses "macro ===;end" + parses "foo.[]=" parses "foo.[]=" + parses "def &**(); end" parses "def &**(); end" + parses "def foo(var : Int32 = 1); end" parses "def foo(var : Int32 = 1); end" + parses "a = 1; yield a ensure a" parses "a = 1; yield a ensure a" + parses "x[a: 1, b: 2]" parses "x[a: 1, b: 2]" + says syntax error on "foo { |(offsetof)| }" says syntax error on "foo { |(offsetof)| }" + parses "foo.[]= do end" parses "foo.[]= do end" + parses "a.b >>=\n1" parses "a.b >>=\n1" + parses "x = 1; foo.bar x do\nend" parses "x = 1; foo.bar x do\nend" + says syntax error on "foo(**bar, *x)" says syntax error on "foo(**bar, *x)" + parses "instance_sizeof(X)" parses "instance_sizeof(X)" + says syntax error on "fun Foo : Int64\nend" says syntax error on "fun Foo : Int64\nend" + parses "def self.<(); end;" parses "def self.<(); end;" + parses "\"foo\#{bar}baz\"" parses "\"foo\#{bar}baz\"" + parses "x : Foo(A, *B, C)" parses "x : Foo(A, *B, C)" + parses "->Foo.|(Int32)" parses "->Foo.|(Int32)" + parses "{% begin %}%w{ %s }{% end %}" parses "{% begin %}%w{ %s }{% end %}" + parses "property typeof : Int32" parses "property typeof : Int32" + parses "break *1, 2" parses "break *1, 2" + parses "/ /; / /" parses "/ /; / /" + parses "case {1}\nin {false}; 2; end" parses "case {1}\nin {false}; 2; end" + says syntax error on "A = (B = 1)" says syntax error on "A = (B = 1)" + parses "foo(n / 2)" parses "foo(n / 2)" + parses "\u3042.\u3044, \u3046.\u3048.\u304A = 1, 2" parses "\u3042.\u3044, \u3046.\u3048.\u304A = 1, 2" + parses "<<-EOF.x\n foo\nEOF" parses "<<-EOF.x\n foo\nEOF" + parses "case {1}\nin {Int32}; 2; end" parses "case {1}\nin {Int32}; 2; end" + parses "->@@foo.foo=" parses "->@@foo.foo=" + parses "case 1\nwhen 1\n2\nend" parses "case 1\nwhen 1\n2\nend" + parses "Foo({*X, *{Y}})" parses "Foo({*X, *{Y}})" + parses "def foo(**args : Foo)\n1\nend" parses "def foo(**args : Foo)\n1\nend" + parses "def foo(@var); 1; end" parses "def foo(@var); 1; end" + parses "a = / /" parses "a = / /" + parses "+1_i64" parses "+1_i64" + parses "def foo(instance_sizeof foo); end" parses "def foo(instance_sizeof foo); end" + parses "foo.!.!" parses "foo.!.!" + parses ":\"\\u{61}\"" parses ":\"\\u{61}\"" + parses "foo.<" parses "foo.<" + says syntax error on "fun foo\nclass" says syntax error on "fun foo\nclass" + parses "@@a : Foo" parses "@@a : Foo" + says syntax error on "nil foo" says syntax error on "nil foo" + parses "__FILE__" parses "__FILE__" + parses "case\n1\nwhen 1\n2\nend\nif a\nend" parses "case\n1\nwhen 1\n2\nend\nif a\nend" + parses "foo(0, n &* 2)" parses "foo(0, n &* 2)" + parses "asm(\"nop\" : \"a\"(0))" parses "asm(\"nop\" : \"a\"(0))" + parses "def self.[]?; end" parses "def self.[]?; end" + parses "1 >= 2" parses "1 >= 2" + parses "2.3_f32" parses "2.3_f32" + says syntax error on "a {} += 1" says syntax error on "a {} += 1" + parses "foo % q()" parses "foo % q()" + parses "{% begin %}%< %s >{% end %}" parses "{% begin %}%< %s >{% end %}" + parses "foo(**bar)" parses "foo(**bar)" + parses "foo.bar = (1).abs" parses "foo.bar = (1).abs" + parses "Foo({X, Y,})" parses "Foo({X, Y,})" + parses "1_u128" parses "1_u128" + parses "def foo(@typeof); end" parses "def foo(@typeof); end" + says syntax error on "foo { |(select)| }" says syntax error on "foo { |(select)| }" + parses "{% begin %}%x| %s |{% end %}" parses "{% begin %}%x| %s |{% end %}" + says syntax error on "return ? 1 : 2" says syntax error on "return ? 1 : 2" + parses "def foo(x @@def); end" parses "def foo(x @@def); end" + parses "a = 1; a &*=\n1" parses "a = 1; a &*=\n1" + says syntax error on "def foo(end); end" says syntax error on "def foo(end); end" + says syntax error on "foo(\"bar\" \"baz\")" says syntax error on "foo(\"bar\" \"baz\")" + parses "x, y = <<-FOO, <<-BAR\nhello\nFOO\nworld\nBAR" parses "x, y = <<-FOO, <<-BAR\nhello\nFOO\nworld\nBAR" + parses "def %(); end" parses "def %(); end" + parses "{% begin %}%x{ %s }{% end %}" parses "{% begin %}%x{ %s }{% end %}" + parses "@foo" parses "@foo" + sets correct location of protected macro in enum sets correct location of protected macro in enum + parses "foo %Q()" parses "foo %Q()" + says syntax error on "{\"\": 1}" says syntax error on "{\"\": 1}" + parses "1\\\r\n + 2" parses "1\\\r\n + 2" + parses "macro foo; 1 + 2 {{foo}} 3 + 4; end" parses "macro foo; 1 + 2 {{foo}} 3 + 4; end" + parses "def foo(x @@pointerof); end" parses "def foo(x @@pointerof); end" + parses "case 1\nwhen 1\n2\nend\nif a\nend" parses "case 1\nwhen 1\n2\nend\nif a\nend" + parses "def ==(other, file = 1); end" parses "def ==(other, file = 1); end" + says syntax error on "1 ... return" says syntax error on "1 ... return" + says syntax error on "\"hello\" foo" says syntax error on "\"hello\" foo" + parses "def foo(out foo); end" parses "def foo(out foo); end" + says syntax error on "def foo(foo while); end" says syntax error on "def foo(foo while); end" + parses "def foo(@next); end" parses "def foo(@next); end" + parses "include Foo" parses "include Foo" + says syntax error on "def foo(foo case); end" says syntax error on "def foo(foo case); end" + parses "_ = 1" parses "_ = 1" + parses "1 + 2" parses "1 + 2" + parses "<<-HERE\n One\n\n Zero\n HERE" parses "<<-HERE\n One\n\n Zero\n HERE" + parses "->(x : Int32) { }" parses "->(x : Int32) { }" + says syntax error on "macro Foo.bar;end" says syntax error on "macro Foo.bar;end" + parses "foo &.block" parses "foo &.block" + parses "a.b &=\n1" parses "a.b &=\n1" + parses "class Foo < self; end" parses "class Foo < self; end" + says syntax error on "def foo\ndef\nend" says syntax error on "def foo\ndef\nend" + parses "def |(); end" parses "def |(); end" + parses "begin; 1; 2; 3; end;" parses "begin; 1; 2; 3; end;" + parses "@@a = uninitialized Foo" parses "@@a = uninitialized Foo" + parses "a.b %=\n1" parses "a.b %=\n1" + parses "Int[8]?" parses "Int[8]?" + parses "->Foo.=~(Int32)" parses "->Foo.=~(Int32)" + parses "1.[]?(2)" parses "1.[]?(2)" + parses "def foo(x @@typeof); end" parses "def foo(x @@typeof); end" + parses "a = 1; a &= 1" parses "a = 1; a &= 1" + parses "%q{hello \\n world}" parses "%q{hello \\n world}" + says syntax error on "while return; end" says syntax error on "while return; end" + parses "def foo(var : Int -> Double); end" parses "def foo(var : Int -> Double); end" + parses "1" parses "1" + says syntax error on "def foo(out); end" says syntax error on "def foo(out); end" + parses "{A: 1, B: 2}" parses "{A: 1, B: 2}" + says syntax error on " {1, 2, 3 end" says syntax error on " {1, 2, 3 end" + parses "->Foo.<=(Int32)" parses "->Foo.<=(Int32)" + parses "{a: 1, b: 2}" parses "{a: 1, b: 2}" + parses "return 1, *2" parses "return 1, *2" + parses "def /(); end;" parses "def /(); end;" + parses "def self.*(); end;" parses "def self.*(); end;" + parses "abstract def foo\n1" parses "abstract def foo\n1" + parses "asm(\"bl trap\" :::: \"unwind\")" parses "asm(\"bl trap\" :::: \"unwind\")" + parses "Foo({X, Y})" parses "Foo({X, Y})" + parses "foo = 1; ->foo.foo?" parses "foo = 1; ->foo.foo?" + parses "{1.. => 2};" parses "{1.. => 2};" + says syntax error on "{a[0]: 1}" says syntax error on "{a[0]: 1}" + parses "macro []?;end" parses "macro []?;end" + parses "foo(a: n =~ 2)" parses "foo(a: n =~ 2)" + parses "1 << 2" parses "1 << 2" + parses "+1.0_f32" parses "+1.0_f32" + parses "class Foo(T); end" parses "class Foo(T); end" + parses "is_a?(Const)" parses "is_a?(Const)" + parses "{%\nif 1; 2; end\n%}" parses "{%\nif 1; 2; end\n%}" + parses "1 // 2" parses "1 // 2" + says syntax error on "{1 2}" says syntax error on "{1 2}" + parses "macro foo\n <<-FOO, <<-BAR + \"\"\n FOO\n BAR\nend" parses "macro foo\n <<-FOO, <<-BAR + \"\"\n FOO\n BAR\nend" + parses "offsetof : Int32" parses "offsetof : Int32" + parses "foo = 1; ->foo.<=(Int32)" parses "foo = 1; ->foo.<=(Int32)" + parses "n <= 2" parses "n <= 2" + parses "macro //;end" parses "macro //;end" + parses "foo(&.as?(T).bar)" parses "foo(&.as?(T).bar)" + says syntax error on "def as?; end" says syntax error on "def as?; end" + says syntax error on "macro foo(x : Int32); end" says syntax error on "macro foo(x : Int32); end" + parses "def foo(x = __FILE__); end" parses "def foo(x = __FILE__); end" + says syntax error on "next &* 1" says syntax error on "next &* 1" + parses "foo.%(1, 2)" parses "foo.%(1, 2)" + parses "macro foo;%var;end" parses "macro foo;%var;end" + parses "a.b / 2" parses "a.b / 2" + says syntax error on "asm(\"\" : 1)" says syntax error on "asm(\"\" : 1)" + parses "foo = 1; ->foo.=~(Int32)" parses "foo = 1; ->foo.=~(Int32)" + parses "foo(0, n < 2)" parses "foo(0, n < 2)" + parses "1.is_a?(\n Int32\n)" parses "1.is_a?(\n Int32\n)" + parses "1 * -2" parses "1 * -2" + parses "def foo(x @@unless); end" parses "def foo(x @@unless); end" + says syntax error on "def foo(abstract); end" says syntax error on "def foo(abstract); end" + parses "foo out _" parses "foo out _" + parses "%r(/)" parses "%r(/)" + parses "return;" parses "return;" + says syntax error on "def foo=(a,b); end" says syntax error on "def foo=(a,b); end" + parses "foo(a: n ^ 2)" parses "foo(a: n ^ 2)" + says syntax error on "{\"x\": [] of Int32,\n}\n1.foo(" says syntax error on "{\"x\": [] of Int32,\n}\n1.foo(" + parses "while true; end;" parses "while true; end;" + parses "def foo(@if); end" parses "def foo(@if); end" + parses "%Q{hello \\n world}" parses "%Q{hello \\n world}" + says syntax error on "if break; end" says syntax error on "if break; end" + parses "property class : Int32" parses "property class : Int32" + says syntax error on "def foo(nil); end" says syntax error on "def foo(nil); end" + parses "def foo(@@pointerof); end" parses "def foo(@@pointerof); end" + says syntax error on "break % 1" says syntax error on "break % 1" + parses "a ?\n b ? b1 : b2\n : c ? 3\n : 0" parses "a ?\n b ? b1 : b2\n : c ? 3\n : 0" + parses "a = 1; a >>= 1" parses "a = 1; a >>= 1" + parses "->Foo.+(Int32)" parses "->Foo.+(Int32)" + parses "def foo\n1\nend" parses "def foo\n1\nend" + parses "macro <=>;end" parses "macro <=>;end" + says syntax error on "1 ... next" says syntax error on "1 ... next" + parses "/foo/x" parses "/foo/x" + parses "lib Foo::Bar\nend" parses "lib Foo::Bar\nend" + parses "n | 2" parses "n | 2" + parses "foo 1, 2" parses "foo 1, 2" + parses "enum Foo; A = 1\ndef self.foo; 1; end\nend" parses "enum Foo; A = 1\ndef self.foo; 1; end\nend" + parses "asm(\"nop\" :::: \"volatile\")" parses "asm(\"nop\" :::: \"volatile\")" + parses "->foo=" parses "->foo=" + parses "def foo(x = __DIR__); end" parses "def foo(x = __DIR__); end" + parses "def self.!=(); end;" parses "def self.!=(); end;" + parses "def foo(&block :\n Int ->); end" parses "def foo(&block :\n Int ->); end" + parses "->Foo.&+(Int32)" parses "->Foo.&+(Int32)" + parses "foo = 1; ->foo.+(Int32)" parses "foo = 1; ->foo.+(Int32)" + parses "var.@foo.@bar" parses "var.@foo.@bar" + says syntax error on "def foo(protected); end" says syntax error on "def foo(protected); end" + parses "->@foo.foo=" parses "->@foo.foo=" + parses "def ===; end;" parses "def ===; end;" + parses "lib LibC\nfun getch = \"get.char\"(x : Int32)\nend" parses "lib LibC\nfun getch = \"get.char\"(x : Int32)\nend" + parses "{{ foo }}" parses "{{ foo }}" + says syntax error on "return >= 1" says syntax error on "return >= 1" + parses "foo.bar [1]" parses "foo.bar [1]" + parses "@@a, b = 1, 2" parses "@@a, b = 1, 2" + parses "1_i128" parses "1_i128" + parses "Set {1, 2, 3}" parses "Set {1, 2, 3}" + parses "a = uninitialized Foo; a" parses "a = uninitialized Foo; a" + says syntax error on "A = begin; 1; ensure; B = 1; end" says syntax error on "A = begin; 1; ensure; B = 1; end" + parses "next {1, 2}" parses "next {1, 2}" + parses "foo(a: n - 2)" parses "foo(a: n - 2)" + parses "Foo::Bar?" parses "Foo::Bar?" + says syntax error on "1 == 2, a = 4" says syntax error on "1 == 2, a = 4" + says syntax error on "1 then" says syntax error on "1 then" + parses "{foo:'a', bar:'b'}" parses "{foo:'a', bar:'b'}" + says syntax error on "return &- 1" says syntax error on "return &- 1" + parses "lib LibC; type A = B**; end" parses "lib LibC; type A = B**; end" + parses "yield" parses "yield" + parses "foo.===(1, 2) { 3 }" parses "foo.===(1, 2) { 3 }" + parses "def foo(x @@nil); end" parses "def foo(x @@nil); end" + parses "foo\n .bar" parses "foo\n .bar" + parses "def self.!=; end;" parses "def self.!=; end;" + parses "->(x : Int32) { x }" parses "->(x : Int32) { x }" + says syntax error on "break + 1" says syntax error on "break + 1" + parses "macro ^;end" parses "macro ^;end" + parses "foo(n // 2)" parses "foo(n // 2)" + parses "def foo;bar(end: 1);end" parses "def foo;bar(end: 1);end" + parses "def foo(a, b = a); end" parses "def foo(a, b = a); end" + parses "{% begin %}%q( %s ){% end %}" parses "{% begin %}%q( %s ){% end %}" + says syntax error on "break & 1" says syntax error on "break & 1" + says syntax error on "foo[break]" says syntax error on "foo[break]" + says syntax error on "1 if break" says syntax error on "1 if break" + parses "*a = 1, 2" parses "*a = 1, 2" + says syntax error on "return ... 1" says syntax error on "return ... 1" + says syntax error on "foo { |(nil)| }" says syntax error on "foo { |(nil)| }" + parses "abstract def foo(x)" parses "abstract def foo(x)" + parses "1 -2" parses "1 -2" + says syntax error on "1 as Bar" says syntax error on "1 as Bar" + parses "{%\n1\n2\n3\n%}" parses "{%\n1\n2\n3\n%}" + says syntax error on "foo { |(while)| }" says syntax error on "foo { |(while)| }" + parses "->Foo::Bar::Baz.foo" parses "->Foo::Bar::Baz.foo" + parses "{foo:\"a\", bar:\"b\"}" parses "{foo:\"a\", bar:\"b\"}" + parses "foo *{1}" parses "foo *{1}" + parses "unless : Int32" parses "unless : Int32" + parses "def &+(); end" parses "def &+(); end" + parses "def foo(x = / /); end" parses "def foo(x = / /); end" + says syntax error on "foo { |(asm)| }" says syntax error on "foo { |(asm)| }" + parses "foo(n % 2)" parses "foo(n % 2)" + parses "begin; 1; rescue; 2; end" parses "begin; 1; rescue; 2; end" + parses "a\nwhile / /; / /; end" parses "a\nwhile / /; / /; end" + parses "alignof(\n Int32\n)" parses "alignof(\n Int32\n)" + parses "def foo(x @instance_sizeof); end" parses "def foo(x @instance_sizeof); end" + says syntax error on "foo { |(self)| }" says syntax error on "foo { |(self)| }" + parses "{[] of Foo, Bar::Baz.new}" parses "{[] of Foo, Bar::Baz.new}" + sets correct location of global path in class def sets correct location of global path in class def + parses "break *{1, 2}" parses "break *{1, 2}" + parses "def foo(x @true); end" parses "def foo(x @true); end" + parses "foo(1, a: 1, b: 2)" parses "foo(1, a: 1, b: 2)" + says syntax error on "macro responds_to?; end" says syntax error on "macro responds_to?; end" + parses "foo do\n//\nend" parses "foo do\n//\nend" + parses "{% begin %}%| %s |{% end %}" parses "{% begin %}%| %s |{% end %}" + parses "def >=(*args, **opts, &); end" parses "def >=(*args, **opts, &); end" + parses "{% begin %}%w| %s |{% end %}" parses "{% begin %}%w| %s |{% end %}" + parses "1\n+2" parses "1\n+2" + parses "foo.% 1, 2" parses "foo.% 1, 2" + parses "macro foo;bar{% begin %}body{% end %}baz;end" parses "macro foo;bar{% begin %}body{% end %}baz;end" + parses "{% begin %}%r(\\A){% end %}" parses "{% begin %}%r(\\A){% end %}" + parses "include Foo\nif true; end" parses "include Foo\nif true; end" + says syntax error on "def foo(if); end" says syntax error on "def foo(if); end" + parses "foo(a: n % 2)" parses "foo(a: n % 2)" + parses "if foo.responds_to? :foo\nx = 1\nend" parses "if foo.responds_to? :foo\nx = 1\nend" + says syntax error on "{1, ->{ |_| x } }" says syntax error on "{1, ->{ |_| x } }" + says syntax error on "(1, 2 3)" says syntax error on "(1, 2 3)" + says syntax error on "break - 1" says syntax error on "break - 1" + parses "def `(cmd); 1; end" parses "def `(cmd); 1; end" + says syntax error on "foo { |(next)| }" says syntax error on "foo { |(next)| }" + parses "def foo(@@macro); end" parses "def foo(@@macro); end" + sets correct location of splat in multiple assignment sets correct location of splat in multiple assignment + parses "def foo; end; if false; 1; else; 2; end" parses "def foo; end; if false; 1; else; 2; end" + parses "macro foo;if %var;true;end;end" parses "macro foo;if %var;true;end;end" + parses "->Foo./(Int32)" parses "->Foo./(Int32)" + parses "def foo(a, &block : self -> self); end" parses "def foo(a, &block : self -> self); end" + parses "def foo(@yield); end" parses "def foo(@yield); end" + parses "a = /=/" parses "a = /=/" + parses "macro foo(@[Foo] **args);end" parses "macro foo(@[Foo] **args);end" + parses "foo(1)" parses "foo(1)" + parses "->Foo.&-(Int32)" parses "->Foo.&-(Int32)" + parses "def foo(x, *args, y = 2); 1; end" parses "def foo(x, *args, y = 2); 1; end" + says syntax error on "break >> 1" says syntax error on "break >> 1" + parses "a, b, *c = 1, 2" parses "a, b, *c = 1, 2" + says syntax error on "def foo(def); end" says syntax error on "def foo(def); end" + parses "def **(); end" parses "def **(); end" + says syntax error on "1 .. return" says syntax error on "1 .. return" + says syntax error on "next ? 1 : 2" says syntax error on "next ? 1 : 2" + parses "1 ? 2 : 3" parses "1 ? 2 : 3" + parses "foo(z: 0, a: n =~ 2)" parses "foo(z: 0, a: n =~ 2)" + says syntax error on "1 ... break" says syntax error on "1 ... break" + parses "1.as(Bar)" parses "1.as(Bar)" + parses "macro foo;bar{% for x in y %}\\ \n body{% end %}\\ baz;end" parses "macro foo;bar{% for x in y %}\\ \n body{% end %}\\ baz;end" + parses ":[]=" parses ":[]=" + says syntax error on "macro foo(\"\" y); end" says syntax error on "macro foo(\"\" y); end" + parses "macro foo\n <<-FOO\n %foo\n FOO\nend" parses "macro foo\n <<-FOO\n %foo\n FOO\nend" + says syntax error on "foo &.||()" says syntax error on "foo &.||()" + says syntax error on "def foo(case); end" says syntax error on "def foo(case); end" + parses "/ /" parses "/ /" + parses "{\"\".id}" parses "{\"\".id}" + parses "offsetof(X, 1)" parses "offsetof(X, 1)" + parses ":/" parses ":/" + parses "def foo(x @lib); end" parses "def foo(x @lib); end" + says syntax error on "next << 1" says syntax error on "next << 1" + parses "foo(z: 0, a: n + 2)" parses "foo(z: 0, a: n + 2)" + parses "foo(*bar)" parses "foo(*bar)" + parses "elsif : Int32" parses "elsif : Int32" + says syntax error on "def foo(until); end" says syntax error on "def foo(until); end" + parses "class Foo; end\nwhile true; end" parses "class Foo; end\nwhile true; end" + parses "n &* 2" parses "n &* 2" + parses "def foo(x, *y); 1; end" parses "def foo(x, *y); 1; end" + parses "def foo(@break); end" parses "def foo(@break); end" + parses "def foo(x, *args, y = 2, w, z = 3); 1; end" parses "def foo(x, *args, y = 2, w, z = 3); 1; end" + parses "foo.| do end" parses "foo.| do end" + says syntax error on "foo &.||" says syntax error on "foo &.||" + parses "foo(&.as(T).bar)" parses "foo(&.as(T).bar)" + parses "{} of Int => Double" parses "{} of Int => Double" + parses "-> : Int32 { }" parses "-> : Int32 { }" + parses "enum : Int32" parses "enum : Int32" + parses "foo.>= 1, 2" parses "foo.>= 1, 2" + says syntax error on "foo { |(include)| }" says syntax error on "foo { |(include)| }" + says syntax error on "return &* 1" says syntax error on "return &* 1" + says syntax error on "def foo(yield); end" says syntax error on "def foo(yield); end" + parses ":foo?" parses ":foo?" + parses "def foo(x @with); end" parses "def foo(x @with); end" + says syntax error on "if 1 == 1 a; end" says syntax error on "if 1 == 1 a; end" + parses "macro foo;{% verbatim do %}1{% foo %}2{% end %};end" parses "macro foo;{% verbatim do %}1{% foo %}2{% end %};end" + parses "enum Foo; private def foo; 1; end; end" parses "enum Foo; private def foo; 1; end; end" + parses "def +(); end;" parses "def +(); end;" + says syntax error on "foo.responds_to?" says syntax error on "foo.responds_to?" + parses "def self.^; end;" parses "def self.^; end;" + parses "def foo(x @while); end" parses "def foo(x @while); end" + says syntax error on "next // 1" says syntax error on "next // 1" + parses "def foo(@var); end" parses "def foo(@var); end" + parses "Foo(Bar(T | U))" parses "Foo(Bar(T | U))" + says syntax error on "foo &.&&" says syntax error on "foo &.&&" + parses "a, *b = 1, 2" parses "a, *b = 1, 2" + parses "property include : Int32" parses "property include : Int32" + parses "begin\n/ /\nend" parses "begin\n/ /\nend" + parses "->() { }" parses "->() { }" + parses "foo = 1; ->foo.//(Int32)" parses "foo = 1; ->foo.//(Int32)" + parses "{% unless 1; 2; else 3; end %}" parses "{% unless 1; 2; else 3; end %}" + parses "property elsif : Int32" parses "property elsif : Int32" + parses "foo.-" parses "foo.-" + parses "foo { |(_, c, )| c }" parses "foo { |(_, c, )| c }" + says syntax error on "def self.!; end" says syntax error on "def self.!; end" + parses "def =~; end;" parses "def =~; end;" + parses "def foo(x y); y; end" parses "def foo(x y); y; end" + parses "def []; end" parses "def []; end" + says syntax error on "foo { |asm| }" says syntax error on "foo { |asm| }" + parses "a = 1; a &-=\n1" parses "a = 1; a &-=\n1" + parses "enum Foo; {{1}}; end" parses "enum Foo; {{1}}; end" + parses "def foo(&block); end" parses "def foo(&block); end" + parses "1 unless 3" parses "1 unless 3" + says syntax error on "{1, 2 3}" says syntax error on "{1, 2 3}" + parses "foo = 1; ->foo.&(Int32)" parses "foo = 1; ->foo.&(Int32)" + says syntax error on "asm(\"nop\" :::: \"\#{volatile}\")" says syntax error on "asm(\"nop\" :::: \"\#{volatile}\")" + parses "foo = 1; ->foo.&-(Int32)" parses "foo = 1; ->foo.&-(Int32)" + parses "x.foo a: 1, b: 2 " parses "x.foo a: 1, b: 2 " + parses "return 1 if true" parses "return 1 if true" + says syntax error on "def foo\ninclude\nend" says syntax error on "def foo\ninclude\nend" + parses "a.b &-=\n1" parses "a.b &-=\n1" + says syntax error on "foo { |alias| }" says syntax error on "foo { |alias| }" + parses "foo(out x); x" parses "foo(out x); x" + parses "enum Foo; protected def foo; 1; end; end" parses "enum Foo; protected def foo; 1; end; end" + parses "foo(a: n << 2)" parses "foo(a: n << 2)" + parses "case {1}\nin {Foo(Int32)}; 2; end" parses "case {1}\nin {Foo(Int32)}; 2; end" + parses "def foo; a = 1; x { a }; end" parses "def foo; a = 1; x { a }; end" + parses "n !~ 2" parses "n !~ 2" + parses "def foo(x @@while); end" parses "def foo(x @@while); end" + says syntax error on "return &+ 1" says syntax error on "return &+ 1" + parses "def self.>=; end;" parses "def self.>=; end;" + parses "foo &.%(1)" parses "foo &.%(1)" + parses "def foo(@@require); end" parses "def foo(@@require); end" + parses "def type(type); end" parses "def type(type); end" + parses "return {1, 2}" parses "return {1, 2}" + parses "macro foo(@[Foo] *args);end" parses "macro foo(@[Foo] *args);end" + parses ":\"\\\\foo\"" parses ":\"\\\\foo\"" + says syntax error on "next * 1" says syntax error on "next * 1" + parses "(1)\nif true; end" parses "(1)\nif true; end" + parses "macro foo;var if true;end" parses "macro foo;var if true;end" + says syntax error on "foo { |(abstract)| }" says syntax error on "foo { |(abstract)| }" + parses "def foo(@@while); end" parses "def foo(@@while); end" + says syntax error on "foo { |(extend)| }" says syntax error on "foo { |(extend)| }" + parses "def foo(@@enum); end" parses "def foo(@@enum); end" + says syntax error on "def foo(var : Foo+); end" says syntax error on "def foo(var : Foo+); end" + parses "def ==(*args, **opts); end" parses "def ==(*args, **opts); end" + says syntax error on "def foo(**args, x); end" says syntax error on "def foo(**args, x); end" + says syntax error on "foo { |def| }" says syntax error on "foo { |def| }" + parses "->Foo.&*(Int32)" parses "->Foo.&*(Int32)" + says syntax error on "a = next" says syntax error on "a = next" + parses "module Foo(*T); end" parses "module Foo(*T); end" + says syntax error on "def foo\nextend\nend" says syntax error on "def foo\nextend\nend" + says syntax error on "next &+ 1" says syntax error on "next &+ 1" + parses "->Foo.foo" parses "->Foo.foo" + parses "break : Int32" parses "break : Int32" + says syntax error on "'a' foo" says syntax error on "'a' foo" + says syntax error on "foo { |private| }" says syntax error on "foo { |private| }" + says syntax error on "foo { |break| }" says syntax error on "foo { |break| }" + says syntax error on "def foo(with); end" says syntax error on "def foo(with); end" + says syntax error on "a = 1, 2, 3" says syntax error on "a = 1, 2, 3" + parses "puts __LINE__" parses "puts __LINE__" + parses "-> { }" parses "-> { }" + parses "def foo(x : U) : Int32 forall T, U; end" parses "def foo(x : U) : Int32 forall T, U; end" + parses "def self.!~(); end;" parses "def self.!~(); end;" + parses "f.x += 2" parses "f.x += 2" + parses ":>=" parses ":>=" + parses "<<-HERE1; <<-HERE2\nHERE1\nhere2\nHERE2" parses "<<-HERE1; <<-HERE2\nHERE1\nhere2\nHERE2" + says syntax error on "a, b.<=" says syntax error on "a, b.<=" + parses "->Foo.<<(Int32)" parses "->Foo.<<(Int32)" + parses "def self.<=(); end;" parses "def self.<=(); end;" + says syntax error on "foo { |false| }" says syntax error on "foo { |false| }" + says syntax error on "foo { |require| }" says syntax error on "foo { |require| }" + says syntax error on "def foo(foo asm); end" says syntax error on "def foo(foo asm); end" + parses "def ===(); end" parses "def ===(); end" + parses "lib LibC; fun getchar(a : Int, b : Float) : Int; end" parses "lib LibC; fun getchar(a : Int, b : Float) : Int; end" + parses "foo &.as(T).bar" parses "foo &.as(T).bar" + parses "def self./; end;" parses "def self./; end;" + parses "@a : Foo = 1" parses "@a : Foo = 1" + parses "foo.^ 1, 2" parses "foo.^ 1, 2" + says syntax error on "*a if true = 2" says syntax error on "*a if true = 2" + parses "foo(&.responds_to?(:foo))" parses "foo(&.responds_to?(:foo))" + parses "foo(0, n === 2)" parses "foo(0, n === 2)" + parses "require : Int32" parses "require : Int32" + parses "lib LibC; fun foo(a : Int*); end" parses "lib LibC; fun foo(a : Int*); end" + says syntax error on "def foo(x x); 1; end" says syntax error on "def foo(x x); 1; end" + says syntax error on "break === 1" says syntax error on "break === 1" + parses "foo(0, n - 2)" parses "foo(0, n - 2)" + says syntax error on "foo { |(with)| }" says syntax error on "foo { |(with)| }" + parses "foo()" parses "foo()" + says syntax error on "foo { |(alias)| }" says syntax error on "foo { |(alias)| }" + parses "puts __FILE__" parses "puts __FILE__" + parses "foo bar.baz(1) do\nend" parses "foo bar.baz(1) do\nend" + parses "macro foo;%var unless true;end" parses "macro foo;%var unless true;end" + parses "puts {{*1}}" parses "puts {{*1}}" + parses "a = b = 2" parses "a = b = 2" + parses "1 && 2" parses "1 && 2" + parses "asm(\"nop\" :: \"b\"(1), \"c\"(2))" parses "asm(\"nop\" :: \"b\"(1), \"c\"(2))" + parses "def foo; a = 1; a {}; end" parses "def foo; a = 1; a {}; end" + parses "foo.<=(1, 2) { 3 }" parses "foo.<=(1, 2) { 3 }" + parses "macro ==;end" parses "macro ==;end" + parses "def foo(a, &block : *Int -> ); end" parses "def foo(a, &block : *Int -> ); end" + parses "/(fo\#{\"bar\"}\#{1}o)/" parses "/(fo\#{\"bar\"}\#{1}o)/" + parses "foo.%(1, 2) { 3 }" parses "foo.%(1, 2) { 3 }" + parses "def foo(@@typeof); end" parses "def foo(@@typeof); end" + parses "a = 1; b = 2; c = 3; a-b-c" parses "a = 1; b = 2; c = 3; a-b-c" + parses "foo = 1; ->foo.>>(Int32)" parses "foo = 1; ->foo.>>(Int32)" + says syntax error on "Foo({x: X, x: Y})" says syntax error on "Foo({x: X, x: Y})" + parses "foo.is_a? Const" parses "foo.is_a? Const" + says syntax error on "def foo :String\nend" says syntax error on "def foo :String\nend" + parses "f.x &+= 2" parses "f.x &+= 2" + says syntax error on "\n lib LibFoo\n fun foo(x : Int32\n y : Float64)\n end\n " says syntax error on "\n lib LibFoo\n fun foo(x : Int32\n y : Float64)\n end\n " + says syntax error on "def foo(x : U) forall; end" says syntax error on "def foo(x : U) forall; end" + parses "foo(0, n &** 2)" parses "foo(0, n &** 2)" + parses "def foo; yield; end" parses "def foo; yield; end" + parses "1 &- 2" parses "1 &- 2" + parses "pointerof(@a)" parses "pointerof(@a)" + parses "{[] of Foo, ::Bar::Baz.new}" parses "{[] of Foo, ::Bar::Baz.new}" + parses "foo(Foo: 1, Bar: 2)" parses "foo(Foo: 1, Bar: 2)" + parses "->\n:\nInt32\n{\n}" parses "->\n:\nInt32\n{\n}" + parses "x = 1; ->{ x }" parses "x = 1; ->{ x }" + parses "foo = 1; b = 2; foo +b" parses "foo = 1; b = 2; foo +b" + parses "(foo bar do\nend)" parses "(foo bar do\nend)" + parses "foo(*{1})" parses "foo(*{1})" + parses "case 1\nin Int32.class; 2; end" parses "case 1\nin Int32.class; 2; end" + parses "pointerof(@a)" parses "pointerof(@a)" + parses "a()/3" parses "a()/3" + parses "(/ /)" parses "(/ /)" + parses "def foo=(value); end" parses "def foo=(value); end" + parses "foo.!= 1, 2" parses "foo.!= 1, 2" + parses "1\\\n + 2" parses "1\\\n + 2" + says syntax error on "yield return" says syntax error on "yield return" + parses "foo &.as?(T).bar" parses "foo &.as?(T).bar" + parses "begin; 1; end;" parses "begin; 1; end;" + parses "def self.==; end;" parses "def self.==; end;" + parses "(1; 2; 3)" parses "(1; 2; 3)" + parses "def foo(x : U) forall T, U; end" parses "def foo(x : U) forall T, U; end" + says syntax error on "foo[return]" says syntax error on "foo[return]" + parses "foo(\n &.block\n)" parses "foo(\n &.block\n)" + parses "foo(\na: 1,\n)" parses "foo(\na: 1,\n)" + parses "class Foo < Bar; end" parses "class Foo < Bar; end" + parses "case {1}\nin {true}; 2; end" parses "case {1}\nin {true}; 2; end" + parses "foo.^(1, 2)" parses "foo.^(1, 2)" + parses "foo.% do end" parses "foo.% do end" + parses "f ->{ a do\n end\n }" parses "f ->{ a do\n end\n }" + parses "foo.* do end" parses "foo.* do end" + says syntax error on "def foo(next); end" says syntax error on "def foo(next); end" + parses "macro foo;bar(end: 1);end" parses "macro foo;bar(end: 1);end" + parses "foo(a: n | 2)" parses "foo(a: n | 2)" + parses "foo(z: 0, a: n <= 2)" parses "foo(z: 0, a: n <= 2)" + parses "foo%r" parses "foo%r" + parses "def foo(self foo); end" parses "def foo(self foo); end" + says syntax error on "[\n]" says syntax error on "[\n]" + parses "Foo(X, alignof(Int32))" parses "Foo(X, alignof(Int32))" + parses "macro **;end" parses "macro **;end" + says syntax error on "return ^ 1" says syntax error on "return ^ 1" + parses "Foo{\"x\" => \"y\"}" parses "Foo{\"x\" => \"y\"}" + parses "begin; rescue; end" parses "begin; rescue; end" + parses "class : Int32" parses "class : Int32" + parses "foo(..2)" parses "foo(..2)" + parses "1 !~ 2" parses "1 !~ 2" + parses "foo(0, n // 2)" parses "foo(0, n // 2)" + parses "macro foo\n <<-FOO\n \#{ %var }\n FOO\nend" parses "macro foo\n <<-FOO\n \#{ %var }\n FOO\nend" + parses "Foo(X, instance_alignof(Int32))" parses "Foo(X, instance_alignof(Int32))" + says syntax error on "FOO, BAR = 1, 2" says syntax error on "FOO, BAR = 1, 2" + parses "foo(0, n ** 2)" parses "foo(0, n ** 2)" + says syntax error on "break ^ 1" says syntax error on "break ^ 1" + parses "{% unless 1\n x\nend %}" parses "{% unless 1\n x\nend %}" + parses "macro x\n%{}\nend" parses "macro x\n%{}\nend" + parses "def foo(@var = 1); 1; end" parses "def foo(@var = 1); 1; end" + parses "a.foo, *a.bar = 1" parses "a.foo, *a.bar = 1" + parses "a, b = 1, 2" parses "a, b = 1, 2" + parses "def foo(var : (Int, Float) -> Double); end" parses "def foo(var : (Int, Float) -> Double); end" + parses "def foo(@@false); end" parses "def foo(@@false); end" + parses "foo &block" parses "foo &block" + parses "nil?" parses "nil?" + says syntax error on "foo { |(sizeof)| }" says syntax error on "foo { |(sizeof)| }" + parses "def foo(x @fun); end" parses "def foo(x @fun); end" + parses "Foo(T)" parses "Foo(T)" + says syntax error on "<<-HERE\n One\n \#{1}\n Zero\n HERE" says syntax error on "<<-HERE\n One\n \#{1}\n Zero\n HERE" + parses "def self.**; end;" parses "def self.**; end;" + parses "\"hello \\\r\n world\"" parses "\"hello \\\r\n world\"" + parses "property extend : Int32" parses "property extend : Int32" + parses "Foo(X, sizeof(Int32))" parses "Foo(X, sizeof(Int32))" + parses "{A::B}" parses "{A::B}" + parses "def self.-; end;" parses "def self.-; end;" + parses "def foo(var : Int?); end" parses "def foo(var : Int?); end" + parses "break *1" parses "break *1" + parses "Foo(T | U)" parses "Foo(T | U)" + parses "f.x &-= 2" parses "f.x &-= 2" + says syntax error on "next == 1" says syntax error on "next == 1" + parses "lib LibC; type A = B.class; end" parses "lib LibC; type A = B.class; end" + parses "1 rescue 2 if 3" parses "1 rescue 2 if 3" + says syntax error on "foo { |next| }" says syntax error on "foo { |next| }" + parses "macro foo; 1 + 2 {{foo}}\\ 3 + 4; end" parses "macro foo; 1 + 2 {{foo}}\\ 3 + 4; end" + parses "case 1\nin .bar?; 2; end" parses "case 1\nin .bar?; 2; end" + parses ":=~" parses ":=~" + parses "a = 1; a *= 1" parses "a = 1; a *= 1" + parses "def *(); end;" parses "def *(); end;" + parses "lib LibC; fun foo(a : ::B, ::C -> ::D); end" parses "lib LibC; fun foo(a : ::B, ::C -> ::D); end" + parses "def <(); end" parses "def <(); end" + parses "property def : Int32" parses "property def : Int32" + says syntax error on "def foo(foo struct); end" says syntax error on "def foo(foo struct); end" + parses "Int[8, 4]" parses "Int[8, 4]" + parses "foo = 1; ->foo.foo" parses "foo = 1; ->foo.foo" + parses "f.x |= 2" parses "f.x |= 2" + parses "def foo(extend foo); end" parses "def foo(extend foo); end" + parses "n & 2" parses "n & 2" + parses "module Foo; end" parses "module Foo; end" + parses "1+0" parses "1+0" + parses "module : Int32" parses "module : Int32" + says syntax error on "foo { |(x, x)| }" says syntax error on "foo { |(x, x)| }" + parses "\"foo\"" parses "\"foo\"" + parses "foo.bar = {} of Int32 => Int32" parses "foo.bar = {} of Int32 => Int32" + parses "def foo(@@in); end" parses "def foo(@@in); end" + parses "def self.+; end;" parses "def self.+; end;" + parses "property protected : Int32" parses "property protected : Int32" + parses "1..\n2.." parses "1..\n2.." + says syntax error on "case 1\nin Int32; 2; else" says syntax error on "case 1\nin Int32; 2; else" + parses "->Foo.<(Int32)" parses "->Foo.<(Int32)" + says syntax error on "foo { |until| }" says syntax error on "foo { |until| }" + says syntax error on "case 1\nin _;" says syntax error on "case 1\nin _;" + says syntax error on "next .. 1" says syntax error on "next .. 1" + parses "case 1\nin Foo(Int32); 2; end" parses "case 1\nin Foo(Int32); 2; end" + parses "true" parses "true" + parses "foo %r()" parses "foo %r()" + parses "call(foo.as Bar, Baz)" parses "call(foo.as Bar, Baz)" + parses "n < 2" parses "n < 2" + says syntax error on "foo { |module| }" says syntax error on "foo { |module| }" + parses "foo(a: n !~ 2)" parses "foo(a: n !~ 2)" + parses "def foo(@@extend); end" parses "def foo(@@extend); end" + parses "def ==(*args, **opts, &); end" parses "def ==(*args, **opts, &); end" + says syntax error on "@foo :: Foo" says syntax error on "@foo :: Foo" + parses "foo(&block)" parses "foo(&block)" + parses "Foo(T, U, 1)" parses "Foo(T, U, 1)" + says syntax error on "foo { |(private)| }" says syntax error on "foo { |(private)| }" + parses "->Foo.[]=(Int32)" parses "->Foo.[]=(Int32)" + parses "puts _" parses "puts _" + says syntax error on "{\n\"foo\"\n\"bar\"\n}" says syntax error on "{\n\"foo\"\n\"bar\"\n}" + parses "def foo(var : Char[N]); end" parses "def foo(var : Char[N]); end" + says syntax error on "macro foo" says syntax error on "macro foo" + parses "def %; end;" parses "def %; end;" + parses "foo(a: n >= 2)" parses "foo(a: n >= 2)" + parses "property instance_sizeof : Int32" parses "property instance_sizeof : Int32" + parses "foo(z: 0, a: n > 2)" parses "foo(z: 0, a: n > 2)" + parses "foo &.+(2)" parses "foo &.+(2)" + parses "foo./(1, 2)" parses "foo./(1, 2)" + parses "def <; end;" parses "def <; end;" + says syntax error on "def foo(x @@x); 1; end" says syntax error on "def foo(x @@x); 1; end" + parses "1 &** 2" parses "1 &** 2" + parses "Foo(\"foo\": U, \"bar\": V)" parses "Foo(\"foo\": U, \"bar\": V)" + parses "foo +1" parses "foo +1" + parses "->foo" parses "->foo" + parses "[\n1, 2]" parses "[\n1, 2]" + parses "foo(&.block)" parses "foo(&.block)" + says syntax error on "def foo(x :Int32); end" says syntax error on "def foo(x :Int32); end" + says syntax error on "->(x, y z) { }" says syntax error on "->(x, y z) { }" + parses "a = 1; a &+=\n1" parses "a = 1; a &+=\n1" + parses "property struct : Int32" parses "property struct : Int32" + parses "foo = 1; ->foo./(Int32)" parses "foo = 1; ->foo./(Int32)" + parses "foo.bar.as(Bar)" parses "foo.bar.as(Bar)" + says syntax error on "def foo(true); end" says syntax error on "def foo(true); end" + says syntax error on "Foo{one: :two, three: :four}" says syntax error on "Foo{one: :two, three: :four}" + parses "1 === 2" parses "1 === 2" + says syntax error on "foo { |abstract| }" says syntax error on "foo { |abstract| }" + parses "case 1\nwhen .!()\n2\nend" parses "case 1\nwhen .!()\n2\nend" + says syntax error on "def foo(x, *); 1; end" says syntax error on "def foo(x, *); 1; end" + parses "foo[*baz] = 1" parses "foo[*baz] = 1" + says syntax error on "foo { |(true)| }" says syntax error on "foo { |(true)| }" + parses "def foo(@@var = 1); 1; end" parses "def foo(@@var = 1); 1; end" + says syntax error on "foo { |enum| }" says syntax error on "foo { |enum| }" + parses "else : Int32" parses "else : Int32" + parses "unless foo; 1; end" parses "unless foo; 1; end" + parses "def foo(x @case); end" parses "def foo(x @case); end" + parses "return *1, 2" parses "return *1, 2" + parses "\"\#{1\n}\"" parses "\"\#{1\n}\"" + parses "pointerof : Int32" parses "pointerof : Int32" + parses "1+2*3" parses "1+2*3" + parses "def foo(var : self.class); end" parses "def foo(var : self.class); end" + parses "foo = 1; ->foo.!~(Int32)" parses "foo = 1; ->foo.!~(Int32)" + parses "def foo(@abstract); end" parses "def foo(@abstract); end" + parses "a = 1; a += 1" parses "a = 1; a += 1" + parses "a, b, *c = 1" parses "a, b, *c = 1" + says syntax error on "macro as; end" says syntax error on "macro as; end" + parses "\"hello \#{1}\" \\\n \"\#{2} world\"" parses "\"hello \#{1}\" \\\n \"\#{2} world\"" + parses "a = 1; a ^=\n1" parses "a = 1; a ^=\n1" + parses "puts %i(one two)" parses "puts %i(one two)" + parses "def foo(x @@select); end" parses "def foo(x @@select); end" + parses "def foo(var : Int); end" parses "def foo(var : Int); end" + parses "lib LibC\nend" parses "lib LibC\nend" + parses "foo(z: 0, a: n % 2)" parses "foo(z: 0, a: n % 2)" + says syntax error on "return >> 1" says syntax error on "return >> 1" + parses "def self.*; end;" parses "def self.*; end;" + parses "def foo(x @@enum); end" parses "def foo(x @@enum); end" + parses "if foo; 1; elsif bar; 2; else 3; end" parses "if foo; 1; elsif bar; 2; else 3; end" + parses "def foo(x @extend); end" parses "def foo(x @extend); end" + parses "a = 1; a &&= 1" parses "a = 1; a &&= 1" + says syntax error on "def foo:String\nend" says syntax error on "def foo:String\nend" + parses "/\\ /" parses "/\\ /" + parses "1 * 2" parses "1 * 2" + says syntax error on "->(x y) { }" says syntax error on "->(x y) { }" + parses "property rescue : Int32" parses "property rescue : Int32" + parses "begin; 1; rescue ex; 2; end; ex" parses "begin; 1; rescue ex; 2; end; ex" + parses "Foo(1)" parses "Foo(1)" + parses "a = 1; a += 10 if a += 20" parses "a = 1; a += 10 if a += 20" + parses "1 -\n2" parses "1 -\n2" + parses "2**3**4" parses "2**3**4" + says syntax error on "a.b() += 1" says syntax error on "a.b() += 1" + parses "def >=; end;" parses "def >=; end;" + parses "next 1 if true" parses "next 1 if true" + parses "foo.+(1, 2) { 3 }" parses "foo.+(1, 2) { 3 }" + says syntax error on "def Foo(Int32).bar;end" says syntax error on "def Foo(Int32).bar;end" + parses "Foo(\nT,\nU,\n)" parses "Foo(\nT,\nU,\n)" + parses "def //(); end" parses "def //(); end" + says syntax error on "a = 1; a += next" says syntax error on "a = 1; a += next" + says syntax error on "def foo(extend); end" says syntax error on "def foo(extend); end" + says syntax error on "Foo(T, U V)" says syntax error on "Foo(T, U V)" + says syntax error on "false foo" says syntax error on "false foo" + parses "def foo; / /; end" parses "def foo; / /; end" + parses "def foo(\nvar); end" parses "def foo(\nvar); end" + parses "foo(z: 0, a: n / 2)" parses "foo(z: 0, a: n / 2)" + parses "foo(&.!)" parses "foo(&.!)" + parses "Foo(*T)" parses "Foo(*T)" + says syntax error on "foo { |(end)| }" says syntax error on "foo { |(end)| }" + says syntax error on "def foo(*args = 1); end" says syntax error on "def foo(*args = 1); end" + parses "foo(n ** 2)" parses "foo(n ** 2)" + parses "a = 1; a //=\n1" parses "a = 1; a //=\n1" + says syntax error on "foo.&&()" says syntax error on "foo.&&()" + says syntax error on "fun foo(Int32); end" says syntax error on "fun foo(Int32); end" + parses "/\\//" parses "/\\//" + parses "def self.==(); end;" parses "def self.==(); end;" + parses "case / /; when / /; / /; else; / /; end" parses "case / /; when / /; / /; else; / /; end" + parses "def foo(@module); end" parses "def foo(@module); end" + parses "foo.!~ do end" parses "foo.!~ do end" + says syntax error on "def foo(foo typeof); end" says syntax error on "def foo(foo typeof); end" + parses "def foo(x @false); end" parses "def foo(x @false); end" + parses "foo.nil?" parses "foo.nil?" + parses "def <=(other, file = 1); end" parses "def <=(other, file = 1); end" + says syntax error on " {1 => end" says syntax error on " {1 => end" + parses "foo.!=(1, 2) { 3 }" parses "foo.!=(1, 2) { 3 }" + says syntax error on "return do\nend" says syntax error on "return do\nend" + parses "def downto(n)\n1\nend" parses "def downto(n)\n1\nend" + parses "macro >>;end" parses "macro >>;end" + says syntax error on "a = 1; a += break" says syntax error on "a = 1; a += break" + parses "n % 2" parses "n % 2" + says syntax error on "foo.&&" says syntax error on "foo.&&" + says syntax error on "case 1; when break; end; end" says syntax error on "case 1; when break; end; end" + parses "def foo(x @break); end" parses "def foo(x @break); end" + parses "{% begin %}%i( %s ){% end %}" parses "{% begin %}%i( %s ){% end %}" + parses "def foo; a = 1; with a yield a; end" parses "def foo; a = 1; with a yield a; end" + parses "Foo(T)?" parses "Foo(T)?" + says syntax error on "macro foo(x, *); 1; end" says syntax error on "macro foo(x, *); 1; end" + parses "begin; 1; rescue ex : ::Foo | ::Bar; 2; end" parses "begin; 1; rescue ex : ::Foo | ::Bar; 2; end" + says syntax error on "foo { |begin| }" says syntax error on "foo { |begin| }" + parses "foo./ do end" parses "foo./ do end" + parses "macro &-;end" parses "macro &-;end" + parses "1 \\\r\n + 2" parses "1 \\\r\n + 2" + says syntax error on "a += 1" says syntax error on "a += 1" + says syntax error on "return * 1" says syntax error on "return * 1" + parses "def foo(true foo); end" parses "def foo(true foo); end" + parses "[] of Int" parses "[] of Int" + parses "foo(0, n % 2)" parses "foo(0, n % 2)" + parses "foo !false" parses "foo !false" + parses "case 1\nwhen .is_a?(T)\n2\nend" parses "case 1\nwhen .is_a?(T)\n2\nend" + says syntax error on "def foo(foo begin); end" says syntax error on "def foo(foo begin); end" + parses "macro >=;end" parses "macro >=;end" + parses "def /; end;" parses "def /; end;" + parses "a = 1; a /= 1" parses "a = 1; a /= 1" + parses "foo(a: n &* 2)" parses "foo(a: n &* 2)" + says syntax error on "def foo(alias); end" says syntax error on "def foo(alias); end" + parses "Foo(X, offsetof(Foo, @a))" parses "Foo(X, offsetof(Foo, @a))" + parses "def foo(@[Foo] @var); end" parses "def foo(@[Foo] @var); end" + parses "foo(0, n =~ 2)" parses "foo(0, n =~ 2)" + parses "foo(1.., 2)" parses "foo(1.., 2)" + parses "-@@foo" parses "-@@foo" + parses "foo.^ do end" parses "foo.^ do end" + says syntax error on "macro !;end" says syntax error on "macro !;end" + parses "pointerof(\n foo\n)" parses "pointerof(\n foo\n)" + parses "def foo(@@module); end" parses "def foo(@@module); end" + parses "foo(0, n << 2)" parses "foo(0, n << 2)" + parses "macro +;end" parses "macro +;end" + parses "def !~(); end;" parses "def !~(); end;" + parses "foo.bar(1, 2)" parses "foo.bar(1, 2)" + says syntax error on "def foo(asm); end" says syntax error on "def foo(asm); end" + parses "a, b = 1" parses "a, b = 1" + parses "a = 1; a/b" parses "a = 1; a/b" + parses "foo a: 1, b: 2" parses "foo a: 1, b: 2" + parses "def foo(x @@yield); end" parses "def foo(x @@yield); end" + parses "foo\n.bar" parses "foo\n.bar" + says syntax error on "return false foo" says syntax error on "return false foo" + parses "def foo(alias foo); end" parses "def foo(alias foo); end" + says syntax error on "x--" says syntax error on "x--" + parses "Foo({String, ->})" parses "Foo({String, ->})" + parses "foo = 1; ->foo.<<(Int32)" parses "foo = 1; ->foo.<<(Int32)" + parses ":[]?" parses ":[]?" + says syntax error on "break &- 1" says syntax error on "break &- 1" + parses "n * 2" parses "n * 2" + parses "def self.foo=\n1\nend" parses "def self.foo=\n1\nend" + parses "def self./(); end;" parses "def self./(); end;" + parses "case {1, 2}\nwhen {3, 4}, {5, 6}\n7\nend" parses "case {1, 2}\nwhen {3, 4}, {5, 6}\n7\nend" + says syntax error on "lib Foo; fun foo(x : Int32, x : Int64); end" says syntax error on "lib Foo; fun foo(x : Int32, x : Int64); end" + parses "foo(bar { })" parses "foo(bar { })" + parses "foo.%" parses "foo.%" + parses "def foo(x @begin); end" parses "def foo(x @begin); end" + parses "def *; end;" parses "def *; end;" + parses ":%" parses ":%" + parses "while true; 1; end;" parses "while true; 1; end;" + parses "def foo(sizeof foo); end" parses "def foo(sizeof foo); end" + parses "def foo(@[Foo] **args); end" parses "def foo(@[Foo] **args); end" + parses "{% begin %}%r[\\A]{% end %}" parses "{% begin %}%r[\\A]{% end %}" + parses "def self.[]; end" parses "def self.[]; end" + parses "if foo; 1; else; 2; end" parses "if foo; 1; else; 2; end" + says syntax error on "break ... 1" says syntax error on "break ... 1" + parses "def foo(in foo); end" parses "def foo(in foo); end" + parses "def foo(x @@asm); end" parses "def foo(x @@asm); end" + parses "a @b-1\nc" parses "a @b-1\nc" + parses "next *1, 2" parses "next *1, 2" + says syntax error on "{% unless 1; 2; elsif 3; 4; end %}" says syntax error on "{% unless 1; 2; elsif 3; 4; end %}" + parses "enum Foo; A = 1; B; end" parses "enum Foo; A = 1; B; end" + says syntax error on "def foo=(**kwargs); end" says syntax error on "def foo=(**kwargs); end" + parses "1.nil?(\n)" parses "1.nil?(\n)" + end locations + gets corrects end location for "alias Foo = Bar" gets corrects end location for "alias Foo = Bar" + sets correct location of `else` of unless statement sets correct location of `else` of unless statement + says syntax error on "case x; when X; 2; when X; end" says syntax error on "case x; when X; 2; when X; end" + gets corrects end location for "include Foo" gets corrects end location for "include Foo" + gets corrects end location for "def foo; rescue ex; end" gets corrects end location for "def foo; rescue ex; end" + parses "%i{foo\\nbar baz}" parses "%i{foo\\nbar baz}" + gets corrects end location for "sizeof(Foo)" gets corrects end location for "sizeof(Foo)" + gets corrects end location for "foo.bar(x) do; end" gets corrects end location for "foo.bar(x) do; end" + gets corrects end location for "->{ }" gets corrects end location for "->{ }" + sets correct location of var in proc pointer sets correct location of var in proc pointer + gets corrects end location for "x : Foo(A, *B, C)" gets corrects end location for "x : Foo(A, *B, C)" + gets corrects end location for "foo 1, 2" gets corrects end location for "foo 1, 2" + sets location of += sets location of += + gets corrects end location for "foo.bar= *baz" gets corrects end location for "foo.bar= *baz" + gets corrects end location for "f.x=(*foo)" gets corrects end location for "f.x=(*foo)" + gets corrects end location for "x : Foo ->" gets corrects end location for "x : Foo ->" + gets corrects end location for "nil" gets corrects end location for "nil" + says syntax error on "case x; when 1, _; end" says syntax error on "case x; when 1, _; end" + says syntax error on "Foo(x: X\n,y: Y)" says syntax error on "Foo(x: X\n,y: Y)" + sets correct location of call name sets correct location of call name + says syntax error on "{1 => 2\n,3 => 4}" says syntax error on "{1 => 2\n,3 => 4}" + gets corrects end location for block with do ... end gets corrects end location for block with do ... end + gets corrects end location for "pointerof(@foo)" gets corrects end location for "pointerof(@foo)" + gets corrects end location for "1 rescue 2" gets corrects end location for "1 rescue 2" + gets corrects end location for block with { ... } gets corrects end location for block with { ... } + gets correct location of empty exception handler inside def gets correct location of empty exception handler inside def + sets correct location and end location of parenthesized block sets correct location and end location of parenthesized block + gets corrects end location for "'a'" gets corrects end location for "'a'" + gets corrects end location for "@a = uninitialized Foo" gets corrects end location for "@a = uninitialized Foo" + parses "%w{one two}" parses "%w{one two}" + says syntax error on "case x; when 1..2; 2; when 1..2; end" says syntax error on "case x; when 1..2; 2; when 1..2; end" + gets corrects end location for "begin; 1; end" gets corrects end location for "begin; 1; end" + sets correct location of element in array literal sets correct location of element in array literal + sets correct location of `else` of if statement sets correct location of `else` of if statement + gets corrects end location for "foo bar, out baz" gets corrects end location for "foo bar, out baz" + says syntax error on "def foo(x : Array({sizeof(Int32), 2})); end" says syntax error on "def foo(x : Array({sizeof(Int32), 2})); end" + says syntax error on "case x; when 'a'; 2; when 'a'; end" says syntax error on "case x; when 'a'; 2; when 'a'; end" + parses "%i{(one two)}" parses "%i{(one two)}" + gets corrects end location for "begin; 1; 2; 3; end" gets corrects end location for "begin; 1; 2; 3; end" + gets corrects end location for "1 if 2" gets corrects end location for "1 if 2" + gets corrects end location for "foo" gets corrects end location for "foo" + gets corrects end location for "[1, 2]" gets corrects end location for "[1, 2]" + gets corrects end location for "123.45" gets corrects end location for "123.45" + gets corrects end location for "foo ->self.bar=" gets corrects end location for "foo ->self.bar=" + gets corrects end location for "{} of Int32 => String" gets corrects end location for "{} of Int32 => String" + gets corrects end location for "puts obj.foo" gets corrects end location for "puts obj.foo" + says syntax error on "case x; when :a; 2; when :a; end" says syntax error on "case x; when :a; 2; when :a; end" + says syntax error on "%w{one}}" says syntax error on "%w{one}}" + gets corrects end location for "/foo/" gets corrects end location for "/foo/" + gets corrects end location for "f.x=(foo).bar" gets corrects end location for "f.x=(foo).bar" + gets corrects end location for "a && b" gets corrects end location for "a && b" + gets corrects end location for "foo ->@bar.baz" gets corrects end location for "foo ->@bar.baz" + gets corrects end location for "[] of Int32" gets corrects end location for "[] of Int32" + gets corrects end location for var + var gets corrects end location for var + var + gets corrects end location for "yield" gets corrects end location for "yield" + sets correct location of var in type declaration sets correct location of var in type declaration + sets correct location for fun def with body sets correct location for fun def with body + gets corrects end location for "class Foo; end" gets corrects end location for "class Foo; end" + sets correct location of call name in operator assignment sets correct location of call name in operator assignment + gets corrects end location for "123" gets corrects end location for "123" + sets location of enum method sets location of enum method + gets corrects end location for "1..3" gets corrects end location for "1..3" + sets location of top-level fun name sets location of top-level fun name + gets corrects end location for "return 1" gets corrects end location for "return 1" + gets corrects end location for "foo.nil?" gets corrects end location for "foo.nil?" + gets corrects end location for "foo.[0] = 1" gets corrects end location for "foo.[0] = 1" + gets corrects end location for "foo ->@@bar.baz=" gets corrects end location for "foo ->@@bar.baz=" + gets corrects end location for "1.." gets corrects end location for "1.." + sets correct location for fun def sets correct location for fun def + gets corrects end location for "struct Foo; end" gets corrects end location for "struct Foo; end" + gets corrects end location for "foo ->Bar.baz=" gets corrects end location for "foo ->Bar.baz=" + sets correct locations of macro if / else sets correct locations of macro if / else + says syntax error on "case x; when {1, 2}; 2; when {1, 2}; end" says syntax error on "case x; when {1, 2}; 2; when {1, 2}; end" + gets corrects end location for "foo : Foo.class" gets corrects end location for "foo : Foo.class" + gets corrects end location for "x : Foo -> Bar" gets corrects end location for "x : Foo -> Bar" + gets corrects end location for "foo.responds_to?(:foo)" gets corrects end location for "foo.responds_to?(:foo)" + gets corrects end location for "@@foo" gets corrects end location for "@@foo" + gets corrects end location for "{a: 1}" gets corrects end location for "{a: 1}" + gets corrects end location for "def foo; 1; end" gets corrects end location for "def foo; 1; end" + says syntax error on "%w(" says syntax error on "%w(" + says syntax error on "case x; when 1; when _; end" says syntax error on "case x; when 1; when _; end" + sets correct location and end location of `begin` block sets correct location and end location of `begin` block + sets correct location for fun def with return type sets correct location for fun def with return type + gets corrects end location for "a = 123" gets corrects end location for "a = 123" + gets corrects end location for "foo : Foo?" gets corrects end location for "foo : Foo?" + sets correct location and end location of parenthesized empty block sets correct location and end location of parenthesized empty block + gets corrects end location for "abstract def foo(x)" gets corrects end location for "abstract def foo(x)" + says syntax error on "foo(1\n,2)" says syntax error on "foo(1\n,2)" + sets correct location of trailing rescue sets correct location of trailing rescue + says syntax error on "def foo(x : Int32 | (Int32, Int32)); end" says syntax error on "def foo(x : Int32 | (Int32, Int32)); end" + sets correct locations of macro if / elsif sets correct locations of macro if / elsif + sets correct location of vars in C struct sets correct location of vars in C struct + says syntax error on "macro foo(x\n,y); 1; end" says syntax error on "macro foo(x\n,y); 1; end" + gets corrects end location for "f.x = foo" gets corrects end location for "f.x = foo" + says syntax error on "%r(" says syntax error on "%r(" + says syntax error on "case x; when /x/; 2; when /x/; end" says syntax error on "case x; when /x/; 2; when /x/; end" + parses "annotation Foo; end" parses "annotation Foo; end" + sets correct locations of keywords of exception handler sets correct locations of keywords of exception handler + gets corrects end location for "foo.nil?( )" gets corrects end location for "foo.nil?( )" + gets corrects end location for "foo.responds_to? :foo" gets corrects end location for "foo.responds_to? :foo" + gets corrects end location for "unless 1; 2; end" gets corrects end location for "unless 1; 2; end" + gets corrects end location for "[1, 2,]" gets corrects end location for "[1, 2,]" + gets corrects end location for "macro foo;end" gets corrects end location for "macro foo;end" + says syntax error on "def foo(x : {sizeof(Int32), 2}); end" says syntax error on "def foo(x : {sizeof(Int32), 2}); end" + says syntax error on "case x; when 1; 2; when 1; end" says syntax error on "case x; when 1; 2; when 1; end" + says syntax error on "%Q(" says syntax error on "%Q(" + says syntax error on "{\"a\" : 1}" says syntax error on "{\"a\" : 1}" + says syntax error on "Foo(X\n,Y)" says syntax error on "Foo(X\n,Y)" + says syntax error on "{1\n,2}" says syntax error on "{1\n,2}" + gets corrects end location for "@foo" gets corrects end location for "@foo" + sets location of obj.x += as call sets location of obj.x += as call + says syntax error on "case x; when true; 2; when true; end" says syntax error on "case x; when true; 2; when true; end" + gets corrects end location for "if 1; else; 2; end" gets corrects end location for "if 1; else; 2; end" + parses "annotation Foo\nend\nrequire \"bar\"" parses "annotation Foo\nend\nrequire \"bar\"" + gets corrects end location for "\"hello\"" gets corrects end location for "\"hello\"" + gets corrects end location for "foo.!" gets corrects end location for "foo.!" + says syntax error on "[1\n,2]" says syntax error on "[1\n,2]" + sets correct location of implicit tuple literal of multi-return sets correct location of implicit tuple literal of multi-return + says syntax error on "%i{one}}" says syntax error on "%i{one}}" + says syntax error on "def foo(x\n,y); 1; end" says syntax error on "def foo(x\n,y); 1; end" + gets corrects end location for "if 1; elseif; 2; end" gets corrects end location for "if 1; elseif; 2; end" + says syntax error on "<<-HEREDOC\n" says syntax error on "<<-HEREDOC\n" + gets corrects end location for "offsetof(Foo, @a)" gets corrects end location for "offsetof(Foo, @a)" + gets corrects end location for "!foo" gets corrects end location for "!foo" + gets corrects end location for "{1, 2}" gets corrects end location for "{1, 2}" + parses "annotation Foo::Bar\n\nend" parses "annotation Foo::Bar\n\nend" + gets corrects end location for "foo(\n &.block\n)" gets corrects end location for "foo(\n &.block\n)" + gets corrects end location for "offsetof({X, Y}, 1)" gets corrects end location for "offsetof({X, Y}, 1)" + gets corrects end location for "foo.@foo" gets corrects end location for "foo.@foo" + says syntax error on "%w{{one}" says syntax error on "%w{{one}" + gets corrects end location for "foo : Foo**" gets corrects end location for "foo : Foo**" + gets corrects end location for ":foo" gets corrects end location for ":foo" + says syntax error on "{\"a\": 1, \"b\" : 2}" says syntax error on "{\"a\": 1, \"b\" : 2}" + sets correct location of var in macro for loop sets correct location of var in macro for loop + sets correct location of `elsif` of if statement sets correct location of `elsif` of if statement + says syntax error on "case x; when \"a\"; 2; when \"a\"; end" says syntax error on "case x; when \"a\"; 2; when \"a\"; end" + sets correct location of receiver var in method def sets correct location of receiver var in method def + gets corrects end location for "macro foo; 123; end" gets corrects end location for "macro foo; 123; end" + says syntax error on "def foo(x : *Int32); end" says syntax error on "def foo(x : *Int32); end" + gets corrects end location for "foo ->@bar.baz=" gets corrects end location for "foo ->@bar.baz=" + gets corrects end location for "module Foo; end" gets corrects end location for "module Foo; end" + gets corrects end location for "{%\nif foo\n bar\n end\n%}" gets corrects end location for "{%\nif foo\n bar\n end\n%}" + gets corrects end location for "a, b = 1, 2" gets corrects end location for "a, b = 1, 2" + says syntax error on "case x; when [1, 2]; 2; when [1, 2]; end" says syntax error on "case x; when [1, 2]; 2; when [1, 2]; end" + gets corrects end location for "false" gets corrects end location for "false" + says syntax error on "%x(" says syntax error on "%x(" + gets corrects end location for "require \"foo\"" gets corrects end location for "require \"foo\"" + gets corrects end location for "foo ->Bar.baz" gets corrects end location for "foo ->Bar.baz" + gets correct location after macro with yield gets correct location after macro with yield + gets corrects end location for "foo(1, 2)" gets corrects end location for "foo(1, 2)" + gets corrects end location for "::foo" gets corrects end location for "::foo" + says syntax error on "{1, 2\n,3}" says syntax error on "{1, 2\n,3}" + sets correct location of trailing ensure sets correct location of trailing ensure + says syntax error on "case x; when nil; 2; when nil; end" says syntax error on "case x; when nil; 2; when nil; end" + gets corrects end location for "@@a = uninitialized Foo" gets corrects end location for "@@a = uninitialized Foo" + gets corrects end location for "return" gets corrects end location for "return" + sets correct locations of macro if / else / elsif sets correct locations of macro if / else / elsif + gets corrects end location for "foo.!()" gets corrects end location for "foo.!()" + gets corrects end location for "foo ->bar=" gets corrects end location for "foo ->bar=" + gets corrects of ~ gets corrects of ~ + gets corrects end location for "extend Foo" gets corrects end location for "extend Foo" + says syntax error on "%i{{one}" says syntax error on "%i{{one}" + gets corrects end location for "Foo?" gets corrects end location for "Foo?" + says syntax error on "def foo(x : Int32, Int32); end" says syntax error on "def foo(x : Int32, Int32); end" + says syntax error on "def foo(x : (Int32, Int32) | Int32); end" says syntax error on "def foo(x : (Int32, Int32) | Int32); end" + gets corrects end location for "a, b = 1, 2 if 3" gets corrects end location for "a, b = 1, 2 if 3" + parses "%w{one{} two}" parses "%w{one{} two}" + gets corrects end location for "while 1; end" gets corrects end location for "while 1; end" + gets correct location with + (#1558) gets correct location with + (#1558) + gets corrects end location for var gets corrects end location for var + parses "%w{one\ttwo}" parses "%w{one\ttwo}" + parses "%i(foo(bar) baz)" parses "%i(foo(bar) baz)" + gets corrects end location for "yield 1" gets corrects end location for "yield 1" + parses "%w{\n}" parses "%w{\n}" + sets location of lib fun name sets location of lib fun name + gets corrects end location for "Int[8]?" gets corrects end location for "Int[8]?" + gets corrects end location for "abstract def foo : Int32" gets corrects end location for "abstract def foo : Int32" + gets corrects end location for "abstract def foo" gets corrects end location for "abstract def foo" + says syntax error on "class Foo(X\n,Y); 1; end" says syntax error on "class Foo(X\n,Y); 1; end" + says syntax error on "%q(" says syntax error on "%q(" + says syntax error on "def foo(x : (Int32, Int32)); end" says syntax error on "def foo(x : (Int32, Int32)); end" + gets corrects end location for "foo ->@@bar.baz" gets corrects end location for "foo ->@@bar.baz" + gets corrects end location for "foo ->self.bar" gets corrects end location for "foo ->self.bar" + gets corrects end location for "a || b" gets corrects end location for "a || b" + parses "annotation Foo\n\nend" parses "annotation Foo\n\nend" + says syntax error on "def foo(x : (*Int32)); end" says syntax error on "def foo(x : (*Int32)); end" + gets correct location after macro with yield gets correct location after macro with yield + correctly computes line number after `\{% +` (#9857) correctly computes line number after `\{% +` (#9857) + says syntax error on "foo(a: 1\n,b: 2)" says syntax error on "foo(a: 1\n,b: 2)" + parses "%w{\\{one}" parses "%w{\\{one}" + says syntax error on "def foo(x : 1); end" says syntax error on "def foo(x : 1); end" + gets corrects end location for "1.as(Int32)" gets corrects end location for "1.as(Int32)" + gets corrects end location for "foo ->bar" gets corrects end location for "foo ->bar" + gets corrects end location for "foo : Foo[42]" gets corrects end location for "foo : Foo[42]" + parses "%w{one\\ two}" parses "%w{one\\ two}" + gets corrects end location for "Foo { 1 }" gets corrects end location for "Foo { 1 }" + gets corrects end location for "foo : Foo*" gets corrects end location for "foo : Foo*" + gets corrects end location for "foo ->bar(Baz)" gets corrects end location for "foo ->bar(Baz)" + says syntax error on "%i(" says syntax error on "%i(" + gets corrects end location for "typeof(1)" gets corrects end location for "typeof(1)" + gets corrects end location for "foo **bar" gets corrects end location for "foo **bar" + gets corrects end location for "Foo" gets corrects end location for "Foo" + parses "%w{one\ntwo}" parses "%w{one\ntwo}" + says syntax error on "<<-HEREDOC" says syntax error on "<<-HEREDOC" + gets corrects end location for "%w(one two)" gets corrects end location for "%w(one two)" + says syntax error on "case x; when _; end" says syntax error on "case x; when _; end" + doesn't override yield with macro yield doesn't override yield with macro yield + sets correct location of proc literal sets correct location of proc literal + parses "%w{one\\}}" parses "%w{one\\}}" + says syntax error on "def foo(x : {Int32, (Int32, Int32)}); end" says syntax error on "def foo(x : {Int32, (Int32, Int32)}); end" + gets corrects end location for "Foo(A)" gets corrects end location for "Foo(A)" + gets corrects end location for "def foo; end" gets corrects end location for "def foo; end" + parses "%i(one\\ two)" parses "%i(one\\ two)" + gets corrects end location for "foo *bar" gets corrects end location for "foo *bar" + gets corrects end location for "1 ensure 2" gets corrects end location for "1 ensure 2" + sets correct location for fun def on multiple lines sets correct location for fun def on multiple lines + parses "%i((one two))" parses "%i((one two))" + parses "def foo(x)\n x\nend; foo = 1; b = 2; foo -b" parses "def foo(x)\n x\nend; foo = 1; b = 2; foo -b" + parses "fun foo(x : Int32) : Int64\nx\nend" parses "fun foo(x : Int32) : Int64\nx\nend" + says syntax error on "def foo(x, **x); end" says syntax error on "def foo(x, **x); end" + parses "Foo()?" parses "Foo()?" + parses "foo % Q()" parses "foo % Q()" + parses "def foo(@enum); end" parses "def foo(@enum); end" + parses "a\nwhile / /\n/ /\nend" parses "a\nwhile / /\n/ /\nend" + parses "foo.=~" parses "foo.=~" + parses "a : Foo*" parses "a : Foo*" + says syntax error on "foo { |true| }" says syntax error on "foo { |true| }" + parses "def >=(); end" parses "def >=(); end" + parses "Int" parses "Int" + parses "property until : Int32" parses "property until : Int32" + parses "def foo(@@fun); end" parses "def foo(@@fun); end" + parses "def ==(); end" parses "def ==(); end" + says syntax error on "next[]" says syntax error on "next[]" + parses "->(x) { x }" parses "->(x) { x }" + parses "typeof : Int32" parses "typeof : Int32" + says syntax error on "next[0]" says syntax error on "next[0]" + parses "Foo({x: X})" parses "Foo({x: X})" + parses "a = 1; a ensure a" parses "a = 1; a ensure a" + parses "4./(2)" parses "4./(2)" + parses "foo &.block[0] = 1" parses "foo &.block[0] = 1" + parses "lib : Int32" parses "lib : Int32" + parses "Foo(T, {x: X})" parses "Foo(T, {x: X})" + says syntax error on "/foo)/" says syntax error on "/foo)/" + parses "def foo(x @@case); end" parses "def foo(x @@case); end" + parses "case 1; when x then 2; else; 3; end" parses "case 1; when x then 2; else; 3; end" + parses "foo a: 1, &block" parses "foo a: 1, &block" + parses "lib LibC\nfun getchar(a : Int, b : Float)\nend" parses "lib LibC\nfun getchar(a : Int, b : Float)\nend" + parses "1 ? a : b" parses "1 ? a : b" + parses "abstract def foo; 1" parses "abstract def foo; 1" + parses "def foo(x @@with); end" parses "def foo(x @@with); end" + says syntax error on "*a == 1" says syntax error on "*a == 1" + parses ":==" parses ":==" + says syntax error on "foo(return)" says syntax error on "foo(return)" + parses "{% begin %}%r|\\A|{% end %}" parses "{% begin %}%r|\\A|{% end %}" + parses "puts {{**1}}" parses "puts {{**1}}" + parses "def foo(unless foo); end" parses "def foo(unless foo); end" + parses "def foo(x @@break); end" parses "def foo(x @@break); end" + says syntax error on "foo { |(in)| }" says syntax error on "foo { |(in)| }" + says syntax error on "1 .. next" says syntax error on "1 .. next" + parses "case foo; end" parses "case foo; end" + parses "def foo(break foo); end" parses "def foo(break foo); end" + parses "foo(x:\n begin\n result : Int32 = 1\n result\n end\n )" parses "foo(x:\n begin\n result : Int32 = 1\n result\n end\n )" + parses "foo [1]" parses "foo [1]" + says syntax error on "*a === 1" says syntax error on "*a === 1" + parses "..2" parses "..2" + says syntax error on " [1, 2, 3 end" says syntax error on " [1, 2, 3 end" + says syntax error on "def foo(foo def); end" says syntax error on "def foo(foo def); end" + parses "<<-FOO\n \t 1\n \t FOO" parses "<<-FOO\n \t 1\n \t FOO" + parses "def foo(x @@sizeof); end" parses "def foo(x @@sizeof); end" + says syntax error on "x++" says syntax error on "x++" + says syntax error on "def foo(&a foo); end" says syntax error on "def foo(&a foo); end" + parses "foo(a: n &- 2)" parses "foo(a: n &- 2)" + says syntax error on "def foo(foo alias); end" says syntax error on "def foo(foo alias); end" + parses "foo %r" parses "foo %r" + says syntax error on "A = begin; 1; rescue; 1; else; B = 1; end" says syntax error on "A = begin; 1; rescue; 1; else; B = 1; end" + parses "a = 1; a **=\n1" parses "a = 1; a **=\n1" + says syntax error on "def foo(foo sizeof); end" says syntax error on "def foo(foo sizeof); end" + parses "{foo:a, bar:b}" parses "{foo:a, bar:b}" + parses "@@foo" parses "@@foo" + says syntax error on "def foo(require); end" says syntax error on "def foo(require); end" + parses "def foo(class foo); end" parses "def foo(class foo); end" + parses "foo &.each do\nend" parses "foo &.each do\nend" + parses "foo(a: n === 2)" parses "foo(a: n === 2)" + parses "return 1, 2" parses "return 1, 2" + parses "a = 1; a |= 1" parses "a = 1; a |= 1" + parses "Foo({x: X, y: Y})" parses "Foo({x: X, y: Y})" + parses "if foo\n1\nelse\n2\nend" parses "if foo\n1\nelse\n2\nend" + parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) ::)" parses "asm(\"nop\" :: \"b\"(1), \"c\"(2) ::)" + says syntax error on "foo(\"\": 1)" says syntax error on "foo(\"\": 1)" + says syntax error on "def foo(foo enum); end" says syntax error on "def foo(foo enum); end" + parses "foo%i" parses "foo%i" + parses "foo(n & 2)" parses "foo(n & 2)" + parses "{% begin %}%i< %s >{% end %}" parses "{% begin %}%i< %s >{% end %}" + parses "->@@foo.foo!" parses "->@@foo.foo!" + says syntax error on "macro foo x; 1 + 2; end" says syntax error on "macro foo x; 1 + 2; end" + says syntax error on "def foo(foo self); end" says syntax error on "def foo(foo self); end" + parses "lib LibC\n@[Bar]; end" parses "lib LibC\n@[Bar]; end" + parses "foo = 1; b = 2; foo -b" parses "foo = 1; b = 2; foo -b" + parses "foo(n === 2)" parses "foo(n === 2)" + parses "Foo()" parses "Foo()" + parses "@[Foo(1)]" parses "@[Foo(1)]" + parses "{..2}" parses "{..2}" + parses "foo.|(1, 2)" parses "foo.|(1, 2)" + parses "def <=; end;" parses "def <=; end;" + parses "def foo(&\n); end" parses "def foo(&\n); end" + parses "foo(n * 2)" parses "foo(n * 2)" + parses "def foo(x @typeof); end" parses "def foo(x @typeof); end" + parses "::T/1" parses "::T/1" + says syntax error on "break.as(Int32)" says syntax error on "break.as(Int32)" + parses "def foo(x @@class); end" parses "def foo(x @@class); end" + parses "foo = 1; ->foo.==(Int32)" parses "foo = 1; ->foo.==(Int32)" + parses "def &(); end;" parses "def &(); end;" + parses "instance_sizeof(\n Int32\n)" parses "instance_sizeof(\n Int32\n)" + parses "puts a if true" parses "puts a if true" + parses "x = 1 rescue 2" parses "x = 1 rescue 2" + parses "foo { |a| 1 }" parses "foo { |a| 1 }" + parses "a = 1; a[2] &&= 3" parses "a = 1; a[2] &&= 3" + says syntax error on "yield next" says syntax error on "yield next" + parses "foo(\n begin\n result : Int32 = 1\n result\n end\n )" parses "foo(\n begin\n result : Int32 = 1\n result\n end\n )" + parses "lib LibC; struct Foo; x : Int; y : Float; end end" parses "lib LibC; struct Foo; x : Int; y : Float; end end" + parses "1 rescue 2" parses "1 rescue 2" + says syntax error on "next >> 1" says syntax error on "next >> 1" + parses "1.0" parses "1.0" + parses "foo &.baz.qux do\nend" parses "foo &.baz.qux do\nend" + parses "def foo(@[Foo] outer inner); end" parses "def foo(@[Foo] outer inner); end" + parses ":<" parses ":<" + parses "x[{1}]" parses "x[{1}]" + says syntax error on "{{ {{ 1 }} }}" says syntax error on "{{ {{ 1 }} }}" + parses "macro <=;end" parses "macro <=;end" + parses "module Foo\ndef foo; end; end" parses "module Foo\ndef foo; end; end" + parses "case 1; when 1; 2; else; 3; end" parses "case 1; when 1; 2; else; 3; end" + parses "1 +2" parses "1 +2" + says syntax error on "break[0]" says syntax error on "break[0]" + parses "lib LibC; struct Foo; {{ 1 }}; end; end" parses "lib LibC; struct Foo; {{ 1 }}; end; end" + parses "a ? 1 :\n b ? 2 :\n c ? 3\n : 0" parses "a ? 1 :\n b ? 2 :\n c ? 3\n : 0" + parses "foo.!~" parses "foo.!~" + parses "def self.foo()\n1\nend" parses "def self.foo()\n1\nend" + parses "def foo(case foo); end" parses "def foo(case foo); end" + parses "a; if / /; / /; elsif / /; / /; end" parses "a; if / /; / /; elsif / /; / /; end" + says syntax error on "next / 1" says syntax error on "next / 1" + says syntax error on "lib Foo%end" says syntax error on "lib Foo%end" + parses "\n class Foo\n def bar\n print as Foo\n end\n end\n " parses "\n class Foo\n def bar\n print as Foo\n end\n end\n " + says syntax error on "def foo(_ y); y; end" says syntax error on "def foo(_ y); y; end" + says syntax error on "macro foo; {% foo = 1 }; end" says syntax error on "macro foo; {% foo = 1 }; end" + parses "1 -2_i64" parses "1 -2_i64" + parses "foo.+" parses "foo.+" + parses "until true; end;" parses "until true; end;" + says syntax error on "unless return; end" says syntax error on "unless return; end" + parses "foo(n &+ 2)" parses "foo(n &+ 2)" + parses "foo(z: 0, a: n &- 2)" parses "foo(z: 0, a: n &- 2)" + parses "def foo(var : Int32 -> = 1); end" parses "def foo(var : Int32 -> = 1); end" + parses "def foo(x @@true); end" parses "def foo(x @@true); end" + parses "foo /a/" parses "foo /a/" + parses "def foo(a, &block : Int -> Double); end" parses "def foo(a, &block : Int -> Double); end" + parses "def foo(x @return); end" parses "def foo(x @return); end" + says syntax error on "break &+ 1" says syntax error on "break &+ 1" + parses "a = 1; a -=\n1" parses "a = 1; a -=\n1" + parses "foo(a: 1, b: 2)" parses "foo(a: 1, b: 2)" + parses "a = 1; a &=\n1" parses "a = 1; a &=\n1" + says syntax error on "x, self = 1, 2" says syntax error on "x, self = 1, 2" + says syntax error on "def foo(return); end" says syntax error on "def foo(return); end" + parses "def self.>=(); end;" parses "def self.>=(); end;" + parses "{[] of Foo, Bar::Baz ** 2}" parses "{[] of Foo, Bar::Baz ** 2}" + says syntax error on "a.b, c.d() = 1" says syntax error on "a.b, c.d() = 1" + parses "()" parses "()" + parses "Foo({\"foo bar\": X})" parses "Foo({\"foo bar\": X})" + says syntax error on "{1 => 2 3 => 4}" says syntax error on "{1 => 2 3 => 4}" + says syntax error on "foo { |extend| }" says syntax error on "foo { |extend| }" + parses "a = 1; a rescue a" parses "a = 1; a rescue a" + parses "foo.== do end" parses "foo.== do end" + says syntax error on "macro foo(*x, *y); end" says syntax error on "macro foo(*x, *y); end" + parses "{[] of Foo, Bar::Baz * 2}" parses "{[] of Foo, Bar::Baz * 2}" + parses "1.0_f32" parses "1.0_f32" + parses "def foo(typeof foo); end" parses "def foo(typeof foo); end" + parses "def foo(var : Int*); end" parses "def foo(var : Int*); end" + parses "macro foo;bar{% for x in y %}\\ \n body{% end %}baz;end" parses "macro foo;bar{% for x in y %}\\ \n body{% end %}baz;end" + parses ":[]" parses ":[]" + parses "def foo(var : Char[256]); end" parses "def foo(var : Char[256]); end" + says syntax error on "def foo(\"bar \#{1} qux\" y); y; end" says syntax error on "def foo(\"bar \#{1} qux\" y); y; end" + parses "foo.bar.baz" parses "foo.bar.baz" + parses "break {1 => 2}" parses "break {1 => 2}" + parses "case {1, 2}\nwhen {3, 4}\n5\nend" parses "case {1, 2}\nwhen {3, 4}\n5\nend" + parses "def foo(**args)\nargs\nend" parses "def foo(**args)\nargs\nend" + parses "a\nunless / /\n/ /\nelse\n/ /\nend" parses "a\nunless / /\n/ /\nelse\n/ /\nend" + says syntax error on "def foo(**args, *x); end" says syntax error on "def foo(**args, *x); end" + says syntax error on "macro as?; end" says syntax error on "macro as?; end" + parses "def foo(x @sizeof); end" parses "def foo(x @sizeof); end" + parses "1.!" parses "1.!" + parses "property ensure : Int32" parses "property ensure : Int32" + parses "true : Int32" parses "true : Int32" + parses "foo **bar" parses "foo **bar" + parses "foo(/a/)" parses "foo(/a/)" + parses "def foo(x = __LINE__); end" parses "def foo(x = __LINE__); end" + parses "def foo(a, &block : Int, self -> Double); end" parses "def foo(a, &block : Int, self -> Double); end" + parses "alignof(X)" parses "alignof(X)" + parses "foo.<=(1, 2)" parses "foo.<=(1, 2)" + parses "1 + 2" parses "1 + 2" + parses "case 1; when 0, 1; 2; else; 3; end" parses "case 1; when 0, 1; 2; else; 3; end" + parses "foo(n >> 2)" parses "foo(n >> 2)" + says syntax error on "def foo(foo return); end" says syntax error on "def foo(foo return); end" + parses "{1, 2, 3}" parses "{1, 2, 3}" + parses "foo.^" parses "foo.^" + parses "<<-HERE1; <<-HERE2\nhere1\nHERE1\nHERE2" parses "<<-HERE1; <<-HERE2\nhere1\nHERE1\nHERE2" + parses "foo.[0] = 1" parses "foo.[0] = 1" + parses "lib LibC; type A = B; end" parses "lib LibC; type A = B; end" + says syntax error on "class Foo(*T, *U); end" says syntax error on "class Foo(*T, *U); end" + parses "def foo(@offsetof); end" parses "def foo(@offsetof); end" + parses "->Foo.%(Int32)" parses "->Foo.%(Int32)" + says syntax error on "def nil?; end" says syntax error on "def nil?; end" + parses "case 1\nin false; 2; end" parses "case 1\nin false; 2; end" + parses "*a, b = 1" parses "*a, b = 1" + says syntax error on "def foo(var = x : Int); end" says syntax error on "def foo(var = x : Int); end" + parses "extend Foo\nif true; end" parses "extend Foo\nif true; end" + says syntax error on "next ... 1" says syntax error on "next ... 1" + parses "def ===(*args, **opts, &); end" parses "def ===(*args, **opts, &); end" + says syntax error on "def foo(x: Int32); end" says syntax error on "def foo(x: Int32); end" + says syntax error on "break == 1" says syntax error on "break == 1" + parses "nil?( )" parses "nil?( )" + says syntax error on "def foo(foo until); end" says syntax error on "def foo(foo until); end" + parses "foo(z: 0, a: n == 2)" parses "foo(z: 0, a: n == 2)" + parses "1 == 2" parses "1 == 2" + says syntax error on "break[0]= 1" says syntax error on "break[0]= 1" + parses "foo 1, a: 1, b: 2\n1" parses "foo 1, a: 1, b: 2\n1" + parses "n > 2" parses "n > 2" + says syntax error on "*1, a = 2" says syntax error on "*1, a = 2" + parses "*a, b = 1, 2, 3, 4" parses "*a, b = 1, 2, 3, 4" + parses "def foo(@@private); end" parses "def foo(@@private); end" + parses "begin 1 end / 2" parses "begin 1 end / 2" + says syntax error on "unless break; end" says syntax error on "unless break; end" + parses "foo begin\nbar do\nend\nend" parses "foo begin\nbar do\nend\nend" + parses "def >(); end;" parses "def >(); end;" + parses "{[] of Foo, Bar::Baz + 2}" parses "{[] of Foo, Bar::Baz + 2}" + parses "{% begin %}%Q( %s ){% end %}" parses "{% begin %}%Q( %s ){% end %}" + sets correct location of instance variable in proc pointer sets correct location of instance variable in proc pointer + parses "foo = 1; foo(-1)" parses "foo = 1; foo(-1)" + parses "{% begin %}%r<\\A>{% end %}" parses "{% begin %}%r<\\A>{% end %}" + says syntax error on "class Foo(T, T); end" says syntax error on "class Foo(T, T); end" + parses "foo(z: 0, a: n // 2)" parses "foo(z: 0, a: n // 2)" + parses "foo(a: n &+ 2)" parses "foo(a: n &+ 2)" + parses "property while : Int32" parses "property while : Int32" + parses "foo%x" parses "foo%x" + says syntax error on "@[Foo(\"\": 1)]" says syntax error on "@[Foo(\"\": 1)]" + parses "foo 1, a: 1, b: 2" parses "foo 1, a: 1, b: 2" + parses "{% begin %}%i| %s |{% end %}" parses "{% begin %}%i| %s |{% end %}" + says syntax error on "macro Foo;end" says syntax error on "macro Foo;end" + parses "my_def def foo\nloop do\nend\nend" parses "my_def def foo\nloop do\nend\nend" + parses "1 ** -x" parses "1 ** -x" + says syntax error on "Foo(\"\": T)" says syntax error on "Foo(\"\": T)" + says syntax error on "foo(break)" says syntax error on "foo(break)" + parses "private : Int32" parses "private : Int32" + parses "def foo(module foo); end" parses "def foo(module foo); end" + parses "Foo(Bar())" parses "Foo(Bar())" + parses "Foo.foo(count: 3).bar { }" parses "Foo.foo(count: 3).bar { }" + parses "rescue : Int32" parses "rescue : Int32" + parses "a = 1" parses "a = 1" + parses "->Foo.//(Int32)" parses "->Foo.//(Int32)" + says syntax error on "enum Foo\n A, B, C\nend\n" says syntax error on "enum Foo\n A, B, C\nend\n" + says syntax error on "foo { |end| }" says syntax error on "foo { |end| }" + parses "def foo(end foo); end" parses "def foo(end foo); end" + says syntax error on "foo :: Foo" says syntax error on "foo :: Foo" + says syntax error on "module Foo; require \"bar\"; end" says syntax error on "module Foo; require \"bar\"; end" + parses "alias Foo = Bar" parses "alias Foo = Bar" + parses "f.x = Foo.new" parses "f.x = Foo.new" + parses "\n\n__LINE__" parses "\n\n__LINE__" + says syntax error on "break .. 1" says syntax error on "break .. 1" + parses "macro ~;end" parses "macro ~;end" + says syntax error on "b! = 1" says syntax error on "b! = 1" + parses "macro foo(@[Foo] outer inner);end" parses "macro foo(@[Foo] outer inner);end" + says syntax error on "foo { |(lib)| }" says syntax error on "foo { |(lib)| }" + parses "foo % w()" parses "foo % w()" + says syntax error on "foo(**bar, 1)" says syntax error on "foo(**bar, 1)" + parses "case 1\nin true; 2; end" parses "case 1\nin true; 2; end" + parses "foo(out @x); @x" parses "foo(out @x); @x" + parses "def foo(&); end" parses "def foo(&); end" + says syntax error on "+return" says syntax error on "+return" + says syntax error on "until return; end" says syntax error on "until return; end" + parses "a; unless / /; / /; else; / /; end" parses "a; unless / /; / /; else; / /; end" + parses "def foo(var : Int | Double); end" parses "def foo(var : Int | Double); end" + parses "def []=(*args, **opts); end" parses "def []=(*args, **opts); end" + parses "Foo?" parses "Foo?" + says syntax error on "foo(1, 2, 3 end" says syntax error on "foo(1, 2, 3 end" + parses "def foo(@@var); end" parses "def foo(@@var); end" + says syntax error on "def foo(*x, &x); end" says syntax error on "def foo(*x, &x); end" + says syntax error on "<<-HERE\n One\n \#{1}\n wrong\#{1}\n HERE" says syntax error on "<<-HERE\n One\n \#{1}\n wrong\#{1}\n HERE" + parses "foo.bar do end" parses "foo.bar do end" + parses "next *1" parses "next *1" + parses "x[..2]" parses "x[..2]" + parses "case 1\nwhen .responds_to?(:foo)\n2\nend" parses "case 1\nwhen .responds_to?(:foo)\n2\nend" + parses "asm(\n\"nop\"\n:\n\"a\"(0),\n\"b\"(1)\n:\n\"c\"(2),\n\"d\"(3)\n)" parses "asm(\n\"nop\"\n:\n\"a\"(0),\n\"b\"(1)\n:\n\"c\"(2),\n\"d\"(3)\n)" + says syntax error on "foo { |(yield)| }" says syntax error on "foo { |(yield)| }" + parses "foo.bar 1, 2" parses "foo.bar 1, 2" + parses "property when : Int32" parses "property when : Int32" + parses "def self.===(); end;" parses "def self.===(); end;" + parses "foo.< 1, 2" parses "foo.< 1, 2" + parses "def foo(x @include); end" parses "def foo(x @include); end" + parses "{% begin %}%w( %s ){% end %}" parses "{% begin %}%w( %s ){% end %}" + parses "def /; end;" parses "def /; end;" + parses "def >=(); end;" parses "def >=(); end;" + says syntax error on "def foo(foo select); end" says syntax error on "def foo(foo select); end" + parses ":^" parses ":^" + parses "def foo(@@until); end" parses "def foo(@@until); end" + says syntax error on "return &** 1" says syntax error on "return &** 1" + parses "foo.& 1, 2" parses "foo.& 1, 2" + parses "@@a : Foo = 1" parses "@@a : Foo = 1" + says syntax error on "foo.||()" says syntax error on "foo.||()" + parses "foo(z: 0, a: n === 2)" parses "foo(z: 0, a: n === 2)" + parses "def foo(@while); end" parses "def foo(@while); end" + parses "def foo(var); end" parses "def foo(var); end" + parses "def foo(x, **args, &block)\n1\nend" parses "def foo(x, **args, &block)\n1\nend" + parses "def foo(n); foo(n -1); end" parses "def foo(n); foo(n -1); end" + parses "foo(z: 0, a: n * 2)" parses "foo(z: 0, a: n * 2)" + parses "def foo(x @@false); end" parses "def foo(x @@false); end" + parses "puts __DIR__" parses "puts __DIR__" + parses "select\nwhen foo\n2\nend" parses "select\nwhen foo\n2\nend" + parses "macro foo\neenum\nend" parses "macro foo\neenum\nend" + says syntax error on "b? = 1" says syntax error on "b? = 1" + parses "1 <= 2 <= 3" parses "1 <= 2 <= 3" + parses "foo(bar do\nend)" parses "foo(bar do\nend)" + says syntax error on "->() :Int32 { }" says syntax error on "->() :Int32 { }" + parses "include : Int32" parses "include : Int32" + says syntax error on "foo.||" says syntax error on "foo.||" + parses "foo = 1; ->foo.&**(Int32)" parses "foo = 1; ->foo.&**(Int32)" + parses "class Foo(*T); end" parses "class Foo(*T); end" + parses "A.new(\"x\", B.new(\"y\"))" parses "A.new(\"x\", B.new(\"y\"))" + parses "{\n1,\n2\n}" parses "{\n1,\n2\n}" + parses "macro &+;end" parses "macro &+;end" + says syntax error on "def foo(select); end" says syntax error on "def foo(select); end" + parses "def foo(@[Foo] @[Bar] var : Int32); end" parses "def foo(@[Foo] @[Bar] var : Int32); end" + says syntax error on "fun foo(x : Int32, x : Int64); end" says syntax error on "fun foo(x : Int32, x : Int64); end" + parses "1 =~ 2" parses "1 =~ 2" + parses "a ? 1\n : b" parses "a ? 1\n : b" + parses "def foo(a, @[Foo] &block); end" parses "def foo(a, @[Foo] &block); end" + parses "def foo(@@begin); end" parses "def foo(@@begin); end" + parses "foo./" parses "foo./" + parses "foo &.[0]" parses "foo &.[0]" + says syntax error on "def foo(**args, **args2); end" says syntax error on "def foo(**args, **args2); end" + parses "{% begin %}%Q{ %s }{% end %}" parses "{% begin %}%Q{ %s }{% end %}" + parses "offsetof(X, @a)" parses "offsetof(X, @a)" + says syntax error on "def foo=(*args); end" says syntax error on "def foo=(*args); end" + says syntax error on "next & 1" says syntax error on "next & 1" + parses "foo" parses "foo" + parses "return : Int32" parses "return : Int32" + says syntax error on "1 foo" says syntax error on "1 foo" + parses "foo(Bar) { 1 }" parses "foo(Bar) { 1 }" + parses "return" parses "return" + parses "foo.== 1, 2" parses "foo.== 1, 2" + says syntax error on "foo { |macro| }" says syntax error on "foo { |macro| }" + parses "def foo(@@case); end" parses "def foo(@@case); end" + says syntax error on "def foo(x, x); end" says syntax error on "def foo(x, x); end" + parses "Foo(x: U, y: V)" parses "Foo(x: U, y: V)" + parses "foo.&" parses "foo.&" + parses "def +(); end" parses "def +(); end" + says syntax error on "class Foo(T, U V)" says syntax error on "class Foo(T, U V)" + parses "def foo(x @abstract); end" parses "def foo(x @abstract); end" + says syntax error on "foo { |(class)| }" says syntax error on "foo { |(class)| }" + says syntax error on "return / 1" says syntax error on "return / 1" + parses "def foo(x @unless); end" parses "def foo(x @unless); end" + parses "def self.-(); end;" parses "def self.-(); end;" + says syntax error on "macro foo x y; end" says syntax error on "macro foo x y; end" + parses "@[Foo]" parses "@[Foo]" + parses "do : Int32" parses "do : Int32" + parses "def foo(x @protected); end" parses "def foo(x @protected); end" + says syntax error on "break < 1" says syntax error on "break < 1" + parses "case 1\nin Int32; 2; end" parses "case 1\nin Int32; 2; end" + parses "{{ foo &.nil? }}" parses "{{ foo &.nil? }}" + says syntax error on "def foo *y; 1; end" says syntax error on "def foo *y; 1; end" + parses "n === 2" parses "n === 2" + says syntax error on "def foo(while); end" says syntax error on "def foo(while); end" + parses "foo(n !~ 2)" parses "foo(n !~ 2)" +Semantic: generic class + can use type var that resolves to number in restriction (#6502) can use type var that resolves to number in restriction (#6502) + initializes instance variable of generic type using type var (#961) initializes instance variable of generic type using type var (#961) + errors if using Tuple in a generic type errors if using Tuple in a generic type + errors if using Number in recursive alias errors if using Number in recursive alias + errors if using Proc in a generic type errors if using Proc in a generic type + unifies generic metaclass types unifies generic metaclass types + inherits from generic with forwarding (1) inherits from generic with forwarding (1) + gives helpful error message when generic type var is missing (#1526) gives helpful error message when generic type var is missing (#1526) + can use virtual type for generic class can use virtual type for generic class + allows T::Type with T a generic type allows T::Type with T a generic type + errors if using Number in a generic type errors if using Number in a generic type + disallow using a non-instantiated generic type as a generic type argument disallow using a non-instantiated generic type as a generic type argument + finds generic type argument from method with default value finds generic type argument from method with default value + restricts generic to generic with free var restricts generic to generic with free var + inherits instance var type annotation from generic to generic to concrete inherits instance var type annotation from generic to generic to concrete + inherits class methods from generic class inherits class methods from generic class + never types Generic as virtual outside generic type parameter (#3989) never types Generic as virtual outside generic type parameter (#3989) + errors on too nested generic instance, with union type errors on too nested generic instance, with union type + errors if inheriting from generic and incorrect number of type vars errors if inheriting from generic and incorrect number of type vars + shows error due to generic instantiation (#7083) shows error due to generic instantiation (#7083) + doesn't crash when matching restriction against number literal (2) (#3157) doesn't crash when matching restriction against number literal (2) (#3157) + defines empty initialize on inherited generic class defines empty initialize on inherited generic class + inherits instance var type annotation from generic to concrete inherits instance var type annotation from generic to concrete + doesn't duplicate overload on generic class with class method (#2385) doesn't duplicate overload on generic class with class method (#2385) + errors if inheriting generic type and not specifying type vars (#460) errors if inheriting generic type and not specifying type vars (#460) + can use type var that resolves to number in restriction using Int128 can use type var that resolves to number in restriction using Int128 + instantiates generic variadic class, accesses T from instance method through superclass instantiates generic variadic class, accesses T from instance method through superclass + inherits twice inherits twice + errors if passing integer literal to Proc as generic argument (#1120) errors if passing integer literal to Proc as generic argument (#1120) + doesn't find unbound type parameter in main code inside generic type (#6168) doesn't find unbound type parameter in main code inside generic type (#6168) + calls super on generic type when superclass has no initialize (#933) calls super on generic type when superclass has no initialize (#933) + inherits non-generic to generic (2) inherits non-generic to generic (2) + errors if using Reference in a generic type errors if using Reference in a generic type + restricts virtual generic instance type against generic (#3351) restricts virtual generic instance type against generic (#3351) + can define instance var forward declared (#962) can define instance var forward declared (#962) + inherits from generic with forwarding (2) inherits from generic with forwarding (2) + instantiates generic class with default argument in initialize (#394) instantiates generic class with default argument in initialize (#394) + never types Path as virtual outside generic type parameter (#3989) never types Path as virtual outside generic type parameter (#3989) + inherits instance var type annotation from generic to concrete with T inherits instance var type annotation from generic to concrete with T + inherits from generic with instantiation inherits from generic with instantiation + instantiates generic variadic class, accesses T from instance method, more args (2) instantiates generic variadic class, accesses T from instance method, more args (2) + errors if invoking new on private new in generic type (#3485) errors if invoking new on private new in generic type (#3485) + errors if using Enum in a generic type errors if using Enum in a generic type + recomputes on new subclass recomputes on new subclass + errors if using Float in a generic type errors if using Float in a generic type + instantiates generic variadic class, accesses T from instance method, more args instantiates generic variadic class, accesses T from instance method, more args + inherits from generic with instantiation with instance var inherits from generic with instantiation with instance var + instantiates generic variadic class, accesses T from class method through superclass instantiates generic variadic class, accesses T from class method through superclass + allows initializing instance variable in inherited generic type allows initializing instance variable in inherited generic type + errors if using Int in a generic type errors if using Int in a generic type + errors if splatting a non-tuple (#9853) errors if splatting a non-tuple (#9853) + creates pointer of generic type and uses it (2) creates pointer of generic type and uses it (2) + resolves T through metaclass inheritance (#7914) resolves T through metaclass inheritance (#7914) + instantiates generic variadic class, accesses T from instance method through superclass, more args instantiates generic variadic class, accesses T from instance method through superclass, more args + types macro def with generic instance types macro def with generic instance + creates pointer of generic type and uses it creates pointer of generic type and uses it + instantiates generic variadic class, accesses T from class method instantiates generic variadic class, accesses T from class method + inherits non-generic to generic (1) inherits non-generic to generic (1) + errors on too nested generic instance errors on too nested generic instance + instantiates generic variadic class, accesses T from instance method instantiates generic variadic class, accesses T from instance method + errors if using Value in a generic type errors if using Value in a generic type + errors if using StaticArray in a generic type errors if using StaticArray in a generic type + errors if using Class in a generic type errors if using Class in a generic type + restricts non-generic to generic restricts non-generic to generic + replaces type parameters for virtual types (#3235) replaces type parameters for virtual types (#3235) + disallow using a non-instantiated module type as a generic type argument disallow using a non-instantiated module type as a generic type argument + errors if passing integer literal to Union as generic argument errors if passing integer literal to Union as generic argument + errors if using Number in alias errors if using Number in alias + restricts non-generic to generic with free var restricts non-generic to generic with free var + correctly checks argument count when target type has a splat (#9855) correctly checks argument count when target type has a splat (#9855) + doesn't consider unbound generic instantiations as concrete (#7200) doesn't consider unbound generic instantiations as concrete (#7200) + doesn't compute generic instance var initializers in formal superclass's context (#4753) doesn't compute generic instance var initializers in formal superclass's context (#4753) + nests generics with the same type var (#3297) nests generics with the same type var (#3297) + errors if using Object in a generic type errors if using Object in a generic type + errors if passing integer literal to Tuple as generic argument (#1120) errors if passing integer literal to Tuple as generic argument (#1120) + doesn't find T type parameter of current type in superclass (#4604) doesn't find T type parameter of current type in superclass (#4604) + errors if using Number | String in a generic type errors if using Number | String in a generic type + gives helpful error message when generic type var is missing in block spec (#1526) gives helpful error message when generic type var is missing in block spec (#1526) + doesn't crash when matching restriction against number literal (#3157) doesn't crash when matching restriction against number literal (#3157) + errors if inheriting from generic when it is non-generic errors if inheriting from generic when it is non-generic + errors on too nested tuple instance errors on too nested tuple instance + subclasses twice with same generic class (#3423) subclasses twice with same generic class (#3423) + errors if using Struct in a generic type errors if using Struct in a generic type + splats generic type var splats generic type var + allows initializing instance variable (#665) allows initializing instance variable (#665) + error on T::Type with T a generic type that's a union error on T::Type with T a generic type that's a union + restricts generic type argument through alias in a non-strict way restricts generic type argument through alias in a non-strict way + errors if using Pointer in a generic type errors if using Pointer in a generic type + doesn't allow union of generic class with module to be assigned to a generic class with module (#2425) doesn't allow union of generic class with module to be assigned to a generic class with module (#2425) + replaces type parameters in virtual metaclasses (#10691) replaces type parameters in virtual metaclasses (#10691) + virtual metaclass type implements super virtual metaclass type (#3007) virtual metaclass type implements super virtual metaclass type (#3007) +Normalize: case + normalizes select with assign and bang method normalizes select with assign and bang method + normalizes select with assign and question method normalizes select with assign and question method + normalizes select with call normalizes select with call + normalizes select with assign normalizes select with assign + normalizes select with else normalizes select with else +Semantic: c enum + errors if enum value is different from default (Int32) (#194) errors if enum value is different from default (Int32) (#194) + types enum value with base type types enum value with base type + allows using an enum as a type in a struct allows using an enum as a type in a struct + errors if enum base type is not an integer errors if enum base type is not an integer + allows using an enum as a type in a fun allows using an enum as a type in a fun + types enum value types enum value +MacroExpander + expands macro with char expands macro with char + expands macro with range expands macro with range + expands macro with string interpolation expands macro with string interpolation + for + expands macro with for over range literal expands macro with for over range literal + expands macro with for over range literal, evaluating elements expands macro with for over range literal, evaluating elements + expands macro with for over array literal with index expands macro with for over array literal with index + expands macro with for over range literal, evaluating elements (exclusive) expands macro with for over range literal, evaluating elements (exclusive) + expands macro with for over tuple literal expands macro with for over tuple literal + expands macro with for over embedded array literal expands macro with for over embedded array literal + expands macro with for over hash literal with index expands macro with for over hash literal with index + expands macro with for over array literal expands macro with for over array literal + expands macro with for over hash literal expands macro with for over hash literal + does not expand when macro expression is {% ... %} does not expand when macro expression is {% ... %} + expands macro with or (1) expands macro with or (1) + expands macro with tuple expands macro with tuple + does regular unless does regular unless + expands macro with and (1) expands macro with and (1) + expands macro with var substitution expands macro with var substitution + expands simple macro expands simple macro + expands macro with nil expands macro with nil + does regular if does regular if + expands macro with and (2) expands macro with and (2) + expands macro with boolean expands macro with boolean + expands macro with symbol substitution expands macro with symbol substitution + expands macro with argument-less call substitution expands macro with argument-less call substitution + expands macro with array expands macro with array + can't use `yield` outside a macro can't use `yield` outside a macro + expands macro with or (2) expands macro with or (2) + expands macro with string substitution expands macro with string substitution + expands macro with symbol expands macro with symbol + outputs invisible location pragmas outputs invisible location pragmas + expands macro with string expands macro with string + if + expands macro with if when falsey expands macro with if when falsey + expands macro with if with nop expands macro with if with nop + expands macro with if with not expands macro with if with not + expands macro with if when truthy expands macro with if when truthy + expands macro with if else when falsey expands macro with if else when falsey + expands macro with integer expands macro with integer + expands macro with hash expands macro with hash +Code gen: named args + sends two regular arguments as named arguments sends two regular arguments as named arguments + sends one regular argument as named argument sends one regular argument as named argument + sends two regular arguments as named arguments in inverted position (1) sends two regular arguments as named arguments in inverted position (1) + sends two regular arguments as named arguments in inverted position (2) sends two regular arguments as named arguments in inverted position (2) + overloads based on required named args overloads based on required named args + calls twice with different types calls twice with different types + calls new with named arg calls new with named arg + calls with named arg and other args calls with named arg and other args + uses bare splat in new (2) uses bare splat in new (2) + uses named args in dispatch uses named args in dispatch + overloads based on required named args, with restrictions overloads based on required named args, with restrictions + calls with named arg as object method calls with named arg as object method + calls with named arg calls with named arg Crystal::Repl::Interpreter - extern - interprets primitive struct_or_union_set and get (struct) interprets primitive struct_or_union_set and get (struct) - sets struct field through pointer sets struct field through pointer - discards primitive struct_or_union_set and get (struct) discards primitive struct_or_union_set and get (struct) - interprets primitive struct_or_union_set and get (union) interprets primitive struct_or_union_set and get (union) - does automatic C cast does automatic C cast - discards primitive struct_or_union_set because it's a copy discards primitive struct_or_union_set because it's a copy - sets extern struct proc field sets extern struct proc field -Semantic: external/internal - overloads based on external name (#2610) overloads based on external name (#2610) - can call with external name and use with internal can call with external name and use with internal - macros - can call positionally can call positionally - can call with external name and use with internal can call with external name and use with internal - can call with external name and use with internal, after splat can call with external name and use with internal, after splat - can call positionally can call positionally - can call with external name and use with internal, after splat can call with external name and use with internal, after splat + variadic calls + promotes enum promotes enum + promotes float promotes float + promotes int promotes int + command expansion + expands ldflags expands ldflags +Code gen: splat + splats in initialize splats in initialize + splats without args splats without args + splats splats + evaluates splat argument just once (#2677) evaluates splat argument just once (#2677) + splats with default value (2) splats with default value (2) + splats with another arg splats with another arg + splats on call splats on call + splats with default value splats with default value + does #2407 does #2407 + splats with default value (3) splats with default value (3) +Visibility modifiers + allows setting visibility modifier to macro that generates many methods (2) allows setting visibility modifier to macro that generates many methods (2) + allows invoking protected method from subclass allows invoking protected method from subclass + allows setting visibility modifier to macro that generates many methods (1) allows setting visibility modifier to macro that generates many methods (1) + allows invoking protected method from namespaced type to namespace allows invoking protected method from namespaced type to namespace + handles virtual types (#8561) handles virtual types (#8561) + allows invoking private method from the same class allows invoking private method from the same class + errors if applying visibility modifier to non-def or non-call errors if applying visibility modifier to non-def or non-call + allows setting visibility modifier to macro allows setting visibility modifier to macro + allows invoking protected method from subclass (2) allows invoking protected method from subclass (2) + allows invoking protected method from the same class allows invoking protected method from the same class + errors if invoking protected method from top-level errors if invoking protected method from top-level + disallows invoking private method disallows invoking private method + errors if invoking protected method from non-subclass errors if invoking protected method from non-subclass + allows invoking private setter with self allows invoking private setter with self + allows invoking protected from instance to class allows invoking protected from instance to class + allows calling protected method from nested generic class (1) allows calling protected method from nested generic class (1) + allows invoking protected method from virtual type allows invoking protected method from virtual type + allows invoking protected method between types in the same namespace allows invoking protected method between types in the same namespace + gives correct error on unknown call (#2838) gives correct error on unknown call (#2838) + allows invoking protected method between types in the same namespace when inheriting allows invoking protected method between types in the same namespace when inheriting + automatically makes initialize be protected automatically makes initialize be protected + allows invoking protected method from namespace to namespaced type allows invoking protected method from namespace to namespaced type + allows calling protected method from nested generic class (2) allows calling protected method from nested generic class (2) + errors if invoking protected method from non-subclass, generated with macro that generates a macro errors if invoking protected method from non-subclass, generated with macro that generates a macro + defines protected initialize (#7501) defines protected initialize (#7501) +codegen: previous_def + codegens previous def codegens previous def + correctly passes named arguments correctly passes named arguments + codegens previous def when inside fun with self codegens previous def when inside fun with self + codegens previous def when inside fun and forwards args codegens previous def when inside fun and forwards args Semantic: named tuples - matches in type restriction, different order (1) matches in type restriction, different order (1) - matches in type restriction and gets free var matches in type restriction and gets free var - can assign to union of compatible named tuple can assign to union of compatible named tuple - merges two named tuple with same keys but different types merges two named tuple with same keys but different types gives error when indexing with an unknown name gives error when indexing with an unknown name - types named tuple access (1) types named tuple access (1) - types nilable named tuple access (5) types nilable named tuple access (5) - doesn't error if NamedTuple has no args doesn't error if NamedTuple has no args - doesn't match in type restriction doesn't match in type restriction - merges two named tuples with the same keys and types merges two named tuples with the same keys and types - matches in type restriction, different order (2) matches in type restriction, different order (2) - doesn't match type restriction with instance doesn't match type restriction with instance - types nilable named tuple access (1) types nilable named tuple access (1) - gives error when using named args on a type other than NamedTuple gives error when using named args on a type other than NamedTuple - types nilable named tuple access (6) types nilable named tuple access (6) + doesn't unify named tuple metaclasses (#5384) doesn't unify named tuple metaclasses (#5384) can write generic type for NamedTuple can write generic type for NamedTuple - accept named tuple in type restriction accept named tuple in type restriction + gives error when using named args on a type other than NamedTuple gives error when using named args on a type other than NamedTuple + types nilable named tuple access (1) types nilable named tuple access (1) gives error when using positional args with NamedTuple gives error when using positional args with NamedTuple - gets type at compile time gets type at compile time - types T as a tuple of metaclasses types T as a tuple of metaclasses - matches in type restriction matches in type restriction - types named tuple of one element types named tuple of one element types named tuple of two elements, follows names order types named tuple of two elements, follows names order - types nilable named tuple access (3) types nilable named tuple access (3) - doesn't crash on named tuple in not executed block (#6718) doesn't crash on named tuple in not executed block (#6718) - accepts named tuple covariance in array accepts named tuple covariance in array - types named tuple of two elements types named tuple of two elements + doesn't match in type restriction doesn't match in type restriction types nilable named tuple access (2) types nilable named tuple access (2) - doesn't unify named tuple metaclasses (#5384) doesn't unify named tuple metaclasses (#5384) + matches in type restriction matches in type restriction + matches in type restriction, different order (2) matches in type restriction, different order (2) + merges two named tuple with same keys but different types merges two named tuple with same keys but different types + types named tuple of two elements types named tuple of two elements + matches in type restriction, different order (1) matches in type restriction, different order (1) + matches in type restriction and gets free var matches in type restriction and gets free var + types nilable named tuple access (6) types nilable named tuple access (6) + types named tuple of one element types named tuple of one element types named tuple access (4) types named tuple access (4) - types nilable named tuple access (4) types nilable named tuple access (4) + allows tuple covariance allows tuple covariance + doesn't error if NamedTuple has no args doesn't error if NamedTuple has no args + types named tuple access (2) types named tuple access (2) + merges two named tuples with the same keys and types merges two named tuples with the same keys and types + doesn't crash on named tuple in not executed block (#6718) doesn't crash on named tuple in not executed block (#6718) doesn't crash on named tuple type recursion (#7162) doesn't crash on named tuple type recursion (#7162) types named tuple access (3) types named tuple access (3) - types named tuple access (2) types named tuple access (2) - allows tuple covariance allows tuple covariance -Normalize: until - normalizes until normalizes until + types nilable named tuple access (4) types nilable named tuple access (4) + can assign to union of compatible named tuple can assign to union of compatible named tuple + accepts named tuple covariance in array accepts named tuple covariance in array + types T as a tuple of metaclasses types T as a tuple of metaclasses + gets type at compile time gets type at compile time + doesn't match type restriction with instance doesn't match type restriction with instance + types named tuple access (1) types named tuple access (1) + accept named tuple in type restriction accept named tuple in type restriction + types nilable named tuple access (3) types nilable named tuple access (3) + types nilable named tuple access (5) types nilable named tuple access (5) +Code gen: magic constants + does __LINE__ when specifying one default arg with __FILE__ does __LINE__ when specifying one default arg with __FILE__ + does __DIR__ in macro does __DIR__ in macro + does __DIR__ does __DIR__ + does __LINE__ does __LINE__ + does __LINE__ when specifying one middle argument does __LINE__ when specifying one middle argument + does __LINE__ with dispatch does __LINE__ with dispatch + does __END_LINE__ without block does __END_LINE__ without block + does __END_LINE__ in macro without block does __END_LINE__ in macro without block + does __FILE__ does __FILE__ + does __LINE__ in macro does __LINE__ in macro + does __LINE__ when specifying one normal default arg does __LINE__ when specifying one normal default arg + does __END_LINE__ with block does __END_LINE__ with block + does __END_LINE__ in macro with block does __END_LINE__ in macro with block + does __FILE__ in macro does __FILE__ in macro +Code gen: next + codegens next without expressions codegens next without expressions + codegens next conditionally with int type (2) codegens next conditionally with int type (2) + codegens next conditionally codegens next conditionally + codegens next with break (2) codegens next with break (2) + codegens next with while inside block codegens next with while inside block + codegens next codegens next + codegens next with break (3) codegens next with break (3) + codegens next with break (1) codegens next with break (1) +Code gen: generic class type + recomputes two calls that look the same due to generic type being instantiated (#7728) recomputes two calls that look the same due to generic type being instantiated (#7728) recomputes two calls that look the same due to generic type being instantiated (#7728) recomputes two calls that look the same due to generic type being instantiated (#7728) recomputes two calls that look the same due to generic type being instantiated (#7728) recomputes two calls that look the same due to generic type being instantiated (#7728) recomputes two calls that look the same due to generic type being instantiated (#7728) recomputes two calls that look the same due to generic type being instantiated (#7728) recomputes two calls that look the same due to generic type being instantiated (#7728) recomputes two calls that look the same due to generic type being instantiated (#7728) + invokes super in generic class (#2354) invokes super in generic class (#2354) + codegens inherited generic class instance var codegens inherited generic class instance var + doesn't use virtual + in type arguments (#2839) doesn't use virtual + in type arguments (#2839) + doesn't consider abstract generic instantiation when restricting type (#5190) doesn't consider abstract generic instantiation when restricting type (#5190) + doesn't use virtual + in type arguments for NamedTuple (#2839) doesn't use virtual + in type arguments for NamedTuple (#2839) + doesn't consider abstract types for including types (#7200) doesn't consider abstract types for including types (#7200) + runs generic instance var initializers in superclass's metaclass context (#4753) runs generic instance var initializers in superclass's metaclass context (#4753) + codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 + uses big integer as generic type argument (#2353) uses big integer as generic type argument (#2353) uses big integer as generic type argument (#2353) uses big integer as generic type argument (#2353) uses big integer as generic type argument (#2353) uses big integer as generic type argument (#2353) uses big integer as generic type argument (#2353) uses big integer as generic type argument (#2353) uses big integer as generic type argument (#2353) uses big integer as generic type argument (#2353) + doesn't override guessed instance var in generic type if already declared in superclass (#9431) doesn't override guessed instance var in generic type if already declared in superclass (#9431) + inherited instance var initialize from generic to generic to concrete (#2128) inherited instance var initialize from generic to generic to concrete (#2128) + inherited instance var initialize from generic to concrete (#2128) inherited instance var initialize from generic to concrete (#2128) + declares instance var with virtual T (#1675) declares instance var with virtual T (#1675) + codegens static array size after instantiating codegens static array size after instantiating + doesn't crash on generic type restriction with initially no subtypes (#8411) doesn't crash on generic type restriction with initially no subtypes (#8411) + instantiates generic class with default argument in initialize (#394) instantiates generic class with default argument in initialize (#394) + allows initializing instance variable in inherited generic type allows initializing instance variable in inherited generic type + codegens virtual generic metaclass macro method call codegens virtual generic metaclass macro method call + doesn't crash on generic type restriction with no subtypes (#7583) doesn't crash on generic type restriction with no subtypes (#7583) + doesn't run generic instance var initializers in formal superclass's context (#4753) doesn't run generic instance var initializers in formal superclass's context (#4753) + runs generic instance var initializers in superclass's metaclass context (2) (#6482) runs generic instance var initializers in superclass's metaclass context (2) (#6482) + doesn't use virtual + in type arguments for Tuple (#2839) doesn't use virtual + in type arguments for Tuple (#2839) + allows initializing instance variable (#665) allows initializing instance variable (#665) Code gen: array literal spec - creates custom generic array via alias (2) creates custom generic array via alias (2) creates custom non-generic array in module creates custom non-generic array in module - assignment in array literal works assignment in array literal works assignment in array literal works assignment in array literal works assignment in array literal works assignment in array literal works������������ assignment in array literal works�� assignment in array literal works�� assignment in array literal works assignment in array literal works - creates custom generic array, with splats creates custom generic array, with splats - creates custom non-generic array creates custom non-generic array - creates custom generic array in module (#5684) creates custom generic array in module (#5684) - creates custom non-generic array, with splats creates custom non-generic array, with splats + creates custom generic array via alias (2) creates custom generic array via alias (2) + creates custom generic array creates custom generic array creates custom non-generic array in nested module creates custom non-generic array in nested module + creates typed array creates typed array creates typed array creates typed array creates typed array creates typed array creates typed array creates typed array creates typed array creates typed array + creates custom non-generic array, with splats creates custom non-generic array, with splats creates custom generic array with type var creates custom generic array with type var - creates typed array creates typed array creates typed array creates typed array creates typed array creates typed array������������ creates typed array�� creates typed array�� creates typed array creates typed array creates custom generic array via alias creates custom generic array via alias - assignment in array-like literal works assignment in array-like literal works assignment in array-like literal works assignment in array-like literal works assignment in array-like literal works assignment in array-like literal works assignment in array-like literal works�������������� assignment in array-like literal works�� assignment in array-like literal works assignment in array-like literal works - creates custom generic array creates custom generic array -Code gen: C ABI - returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret���� returns struct bigger than 128 bits with sret���������� returns struct bigger than 128 bits with sret�� returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret - returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real)�������������� returns struct less than 64 bits (for real)�� returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) - accepts large struct in a callback (for real) accepts large struct in a callback (for real) accepts large struct in a callback (for real) accepts large struct in a callback (for real) accepts large struct in a callback (for real) accepts large struct in a callback (for real)������������ accepts large struct in a callback (for real)�� accepts large struct in a callback (for real)�� accepts large struct in a callback (for real) accepts large struct in a callback (for real) - passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type)���������� passes struct after many other args when returning a large struct (sret return type)������ passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) - passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real)���������������� passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) - promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742)������������ promotes variadic args (i8 to i32) (#9742)�� promotes variadic args (i8 to i32) (#9742)�� promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) - promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742)�������������� promotes variadic args (u16 to i32) (#9742)�� promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) - promotes variadic args (float to double) promotes variadic args (float to double) promotes variadic args (float to double) promotes variadic args (float to double) promotes variadic args (float to double) promotes variadic args (float to double)������������ promotes variadic args (float to double)�� promotes variadic args (float to double)�� promotes variadic args (float to double) promotes variadic args (float to double) - promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742)������������ promotes variadic args (u8 to i32) (#9742)�� promotes variadic args (u8 to i32) (#9742)�� promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) - returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real)������������ returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real)���� returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) - passes struct after many other args (for real) passes struct after many other args (for real) passes struct after many other args (for real) passes struct after many other args (for real) passes struct after many other args (for real) passes struct after many other args (for real)������������ passes struct after many other args (for real)�� passes struct after many other args (for real)�� passes struct after many other args (for real) passes struct after many other args (for real) - passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real)�������������� passes struct between 64 and 128 bits (for real)�� passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) - passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) passes struct less than 64 bits (for real)������������ passes struct less than 64 bits (for real) passes struct less than 64 bits (for real)���� passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) - promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742)������������ promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742)���� promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) -Semantic: c union - errors if using void via typedef in union field type errors if using void via typedef in union field type - errors if using void in union field type errors if using void in union field type - errors if setting closure errors if setting closure - types c union types c union - errors on empty c union (#633) errors on empty c union (#633) - types Union#new types Union#new - types union getter via pointer types union getter via pointer - types union setter types union setter - types union setter via pointer types union setter via pointer - types union getter types union getter -Code gen: C ABI x86_64 - returns struct between 64 and 128 bits as { i64, i64 } returns struct between 64 and 128 bits as { i64, i64 } - returns struct less than 64 bits as { i64 } returns struct less than 64 bits as { i64 } - passes struct less than 64 bits as { i64 } passes struct less than 64 bits as { i64 } - returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret - passes struct less than 64 bits as { i64 } in varargs passes struct less than 64 bits as { i64 } in varargs - passes struct between 64 and 128 bits as { i64, i64 } passes struct between 64 and 128 bits as { i64, i64 } - passes struct bigger than128 bits with byval passes struct bigger than128 bits with byval - passes struct between 64 and 128 bits as { i64, i64 } (with multiple modules/contexts) passes struct between 64 and 128 bits as { i64, i64 } (with multiple modules/contexts) -Semantic: tuples - allows tuple covariance allows tuple covariance - errors on recursive splat expansion (2) (#361) errors on recursive splat expansion (2) (#361) - types tuple of three elements types tuple of three elements - doesn't unify tuple metaclasses (#5384) doesn't unify tuple metaclasses (#5384) - can name a tuple type can name a tuple type - doesn't crash on tuple in not executed block (#6718) doesn't crash on tuple in not executed block (#6718) - errors if non-tuple is splatted inside tuple (2) errors if non-tuple is splatted inside tuple (2) - accepts tuple covariance in array accepts tuple covariance in array - types tuple of one element types tuple of one element - errors if using two splat indices on restriction errors if using two splat indices on restriction - can call [] on T can call [] on T - #[](NumberLiteral) - types, out of bound, nilable types, out of bound, nilable - types, inbound index types, inbound index - gives error when indexing out of range gives error when indexing out of range - gives error when indexing out of range on empty tuple gives error when indexing out of range on empty tuple - types, inbound index, nilable types, inbound index, nilable - types, metaclass index types, metaclass index - doesn't trigger recursive splat expansion error (#7164) doesn't trigger recursive splat expansion error (#7164) - gives error when using named args on Tuple gives error when using named args on Tuple - errors on recursive splat expansion (1) (#361) errors on recursive splat expansion (1) (#361) - accept tuple in type restriction accept tuple in type restriction - can iterate T can iterate T - errors if non-tuple is splatted inside tuple errors if non-tuple is splatted inside tuple - #[](Path) - works for named tuple indexer works for named tuple indexer - works for tuple indexer works for tuple indexer - errors on recursive splat expansion (#218) errors on recursive splat expansion (#218) - merges two tuple types of same size merges two tuple types of same size - matches tuple with splat (#2932) matches tuple with splat (#2932) - errors on tuple too big (#3816) errors on tuple too big (#3816) - errors on named tuple too big errors on named tuple too big - #[](RangeLiteral) - gives error when begin index is out of range gives error when begin index is out of range - types, begin-less, end-less types, begin-less, end-less - types, begin-less types, begin-less - types, inbound begin, nilable types, inbound begin, nilable - types, out of bound begin, nilable types, out of bound begin, nilable - types, metaclass index types, metaclass index - types, exclusive range types, exclusive range - types, inbound begin, end-less types, inbound begin, end-less - types, inbound begin types, inbound begin - matches tuple with splat (2) (#2932) matches tuple with splat (2) (#2932) - doesn't error if Tuple has no args doesn't error if Tuple has no args - types T as a tuple of metaclasses types T as a tuple of metaclasses - types tuple of one element and then two elements types tuple of one element and then two elements - types tuple with splats inside types tuple with splats inside -Crystal::Command - clear_cache - clears any cached compiler files clears any cached compiler files -Semantic: warnings - deprecated macros - deprecation reason is optional deprecation reason is optional - informs warnings once per call site location (b) informs warnings once per call site location (b) - detects top-level deprecated macros detects top-level deprecated macros - detects deprecated macros with named arguments detects deprecated macros with named arguments - detects deprecated generic class macros detects deprecated generic class macros - detects deprecated class macros detects deprecated class macros - informs warnings once per call site location (a) informs warnings once per call site location (a) - detects deprecated module macros detects deprecated module macros - errors if invalid named argument errors if invalid named argument - ignore deprecation excluded locations ignore deprecation excluded locations - errors if invalid argument type errors if invalid argument type - errors if too many arguments errors if too many arguments - exposes syntax warnings after macro interpolation exposes syntax warnings after macro interpolation - abstract def positional parameter name mismatch - stops warning after implementation with matching parameters is found (#12150) - different single splats different single splats - exact match exact match - reordered named parameters reordered named parameters - contravariant restrictions contravariant restrictions - doesn't warn if current type is abstract (#12266) doesn't warn if current type is abstract (#12266) - informs warnings once per matching overload (1) informs warnings once per matching overload (1) - detects mismatch within many parameters detects mismatch within many parameters - continues warning if implementation with matching parameters is not found (#12150) - double splat double splat - single splat single splat - not a full implementation not a full implementation - informs warnings once per matching overload (2) informs warnings once per matching overload (2) - doesn't warn if external parameter name matches (1) doesn't warn if external parameter name matches (1) - doesn't warn if external parameter name matches (2) doesn't warn if external parameter name matches (2) - doesn't warn if current type is a module (#12266) doesn't warn if current type is a module (#12266) - detects multiple mismatches detects multiple mismatches - doesn't compare single splats doesn't compare single splats - doesn't compare positional parameters to single splat doesn't compare positional parameters to single splat - detects mismatch with single parameter detects mismatch with single parameter - respects external names of positional parameters (2) respects external names of positional parameters (2) - respects external names of positional parameters (1) respects external names of positional parameters (1) - deprecated methods - detects deprecated initialize detects deprecated initialize - deprecation reason is optional deprecation reason is optional - detects top-level deprecated methods detects top-level deprecated methods - detects deprecated instance methods detects deprecated instance methods - errors if invalid argument type errors if invalid argument type - detects deprecated generic class methods detects deprecated generic class methods - detects deprecated generic instance methods detects deprecated generic instance methods - informs warnings once per call site location (b) informs warnings once per call site location (b) - ignore deprecation excluded locations ignore deprecation excluded locations - informs warnings once per target type informs warnings once per target type - detects deprecated methods with named arguments detects deprecated methods with named arguments - detects deprecated initialize with named arguments detects deprecated initialize with named arguments - informs warnings once per yield informs warnings once per yield - detects deprecated module methods detects deprecated module methods - ignores nested calls to deprecated methods ignores nested calls to deprecated methods - detects deprecated class methods detects deprecated class methods - errors if too many arguments errors if too many arguments - errors if invalid named arguments errors if invalid named arguments - informs warnings once per call site location (a) informs warnings once per call site location (a) - deprecated constants - detects deprecated constants in type declarations (3) detects deprecated constants in type declarations (3) - detects deprecated constants inside macros detects deprecated constants inside macros - detects deprecated constants detects deprecated constants - detects deprecated constants in type declarations (2) detects deprecated constants in type declarations (2) - detects deprecated constants in type declarations (1) detects deprecated constants in type declarations (1) - exposes syntax warnings exposes syntax warnings - deprecated annotations - detects deprecated annotations detects deprecated annotations - detects deprecated namespaced annotations detects deprecated namespaced annotations -Semantic: double splat - uses restriction on double splat, means all types must be that type uses restriction on double splat, means all types must be that type - double splats named argument into arguments (1) double splats named argument into arguments (1) - errors if duplicate keys on call side with double splat and named args errors if duplicate keys on call side with double splat and named args - matches double splat on method (empty) matches double splat on method (empty) - double splats named argument into arguments (2) double splats named argument into arguments (2) - uses double splat restriction, matches empty uses double splat restriction, matches empty - matches double splat on method with named args and regular args matches double splat on method with named args and regular args - uses double splat restriction uses double splat restriction - uses double splat restriction with concrete type uses double splat restriction with concrete type - matches named args producing an empty double splat (#2678) matches named args producing an empty double splat (#2678) - matches double splat on method with named args matches double splat on method with named args - overloads based on double splat restriction overloads based on double splat restriction - uses restriction on double splat, doesn't match with empty named tuple uses restriction on double splat, doesn't match with empty named tuple - uses double splat in new uses double splat in new - errors if duplicate keys on call side with two double splats errors if duplicate keys on call side with two double splats - errors missing argument with double splat errors missing argument with double splat - matches double splat with regular splat matches double splat with regular splat - uses restriction on double splat, doesn't match with empty named tuple (2) uses restriction on double splat, doesn't match with empty named tuple (2) -Semantic: enum - allows class vars in enum allows class vars in enum - disallows implicit conversion of int to enum disallows implicit conversion of int to enum - doesn't overflow on flags member (#7877) doesn't overflow on flags member (#7877) - finds method in enum type finds method in enum type - errors if reopening enum with different base type (2) errors if reopening enum with different base type (2) - errors if reopen and tries to define constant errors if reopen and tries to define constant - doesn't error when defining a non-flags enum with None or All doesn't error when defining a non-flags enum with None or All - can use macro for inside enum can use macro for inside enum - errors if declaring type inside enum (#3127) errors if declaring type inside enum (#3127) - reopens enum without base type (1) reopens enum without base type (1) - doesn't break assigned values in enum flags when a member has value 0 (#5767) doesn't break assigned values in enum flags when a member has value 0 (#5767) - errors if enum value is too big for type (#678) errors if enum value is too big for type (#678) - gives error on signed flags enum overflow after a member with value gives error on signed flags enum overflow after a member with value - disallows All value for @[Flags] enum disallows All value for @[Flags] enum - reopens an enum reopens an enum - finds class method in enum type finds class method in enum type - doesn't overflow when going from negative to zero (#7874) doesn't overflow when going from negative to zero (#7874) - can use macro expression inside enum can use macro expression inside enum - defines method on enum defines method on enum - errors on enum without members (#3447) errors on enum without members (#3447) - defines class method on enum defines class method on enum - has All value when defined as @[Flags] has All value when defined as @[Flags] - types enum value types enum value - reopens enum with same base type (2) reopens enum with same base type (2) - gives error on enum overflow gives error on enum overflow - allows redefining None to 0 for @[Flags] enum allows redefining None to 0 for @[Flags] enum - errors if reopening enum with different base type (1) errors if reopening enum with different base type (1) - has None value when defined as @[Flags] has None value when defined as @[Flags] - errors if using a name twice errors if using a name twice - doesn't error when defining a method for an enum with flags doesn't error when defining a method for an enum with flags - attaches annotation to enum method (#6690) attaches annotation to enum method (#6690) - marks as flags with base type (#2185) marks as flags with base type (#2185) - creates enum from value creates enum from value - doesn't visit enum members generated by macros twice (#10104) doesn't visit enum members generated by macros twice (#10104) - disallows redefining None to non-0 for @[Flags] enum disallows redefining None to non-0 for @[Flags] enum - errors if reopen but not enum errors if reopen but not enum - errors if defining initialize in Enum (#7238) errors if defining initialize in Enum (#7238) - gives error on flags enum overflow gives error on flags enum overflow - errors if inheriting Enum (#3592) errors if inheriting Enum (#3592) - reopens enum with same base type (1) reopens enum with same base type (1) - errors if declaring type inside enum, nested (#3127) errors if declaring type inside enum, nested (#3127) - gives error on enum overflow after a member with value gives error on enum overflow after a member with value - errors if invoking private enum method errors if invoking private enum method - gives error on unsigned flags enum overflow after a member with value gives error on unsigned flags enum overflow after a member with value - doesn't error when defining a flags enum in a lib with None or All doesn't error when defining a flags enum in a lib with None or All - can redefine Enum.new can redefine Enum.new - types enum types enum - errors if using instance var inside enum (#991) errors if using instance var inside enum (#991) - reopens enum without base type (2) reopens enum without base type (2) -Codegen: while - break with value, condition fails break with value, condition fails - doesn't crash on #2767 (2) doesn't crash on #2767 (2) - codegens endless while codegens endless while - codegens def with while codegens def with while - codegens while with declared var 2 codegens while with declared var 2 - doesn't crash on #2767 doesn't crash on #2767 - endless conditional break with value endless conditional break with value - codegens while with declared var 3 codegens while with declared var 3 - conditional break with value conditional break with value - doesn't crash on a = NoReturn doesn't crash on a = NoReturn - conditional break without value conditional break without value - doesn't crash on #2767 (3) doesn't crash on #2767 (3) - codegens while with non-false condition codegens while with non-false condition - break without value break without value - doesn't crash on while true begin break rescue (#7786) doesn't crash on while true begin break rescue (#7786) - endless break with value endless break with value - codegens while with false codegens while with false - skip block with next skip block with next - codegens while with declared var 1 codegens while with declared var 1 - doesn't crash on #2767 (4) doesn't crash on #2767 (4) - break with value break with value -Semantic: initialize - doesn't mark instance variable as nilable when using self.class in method doesn't mark instance variable as nilable when using self.class in method - finishes when analyzing recursive calls finishes when analyzing recursive calls - types initializer of recursive generic type types initializer of recursive generic type - marks instance variable as nilable in initialize if assigning self marks instance variable as nilable in initialize if assigning self - doesn't mark instance variable as nilable when using self.class doesn't mark instance variable as nilable when using self.class - doesn't type instance var as nilable if used after global method call doesn't type instance var as nilable if used after global method call - doesn't type instance var as nilable if used after method call that doesn't read var doesn't type instance var as nilable if used after method call that doesn't read var - types instance vars as nilable if doesn't invoke super in initialize types instance vars as nilable if doesn't invoke super in initialize - types instance var as nilable if used after method call that reads var (2) types instance var as nilable if used after method call that reads var (2) - types instance var as nilable if used after method call that reads var types instance var as nilable if used after method call that reads var - doesn't type instance var as nilable if not used in method call doesn't type instance var as nilable if not used in method call - types instance var as nilable if used before assignment types instance var as nilable if used before assignment - doesn't type instance var as nilable if out doesn't type instance var as nilable if out - errors if found matches for initialize but doesn't cover all (bug #204) errors if found matches for initialize but doesn't cover all (bug #204) - marks instance variable as nilable when using self in super marks instance variable as nilable when using self in super - types instance var as nilable if used after method call that reads var through other calls types instance var as nilable if used after method call that reads var through other calls - doesn't type instance var as nilable if assigned before method call doesn't type instance var as nilable if assigned before method call - types instance var as non-nilable if calls super and super defines it, with one level of indirection types instance var as non-nilable if calls super and super defines it, with one level of indirection - types instance var as not-nilable if assigned in block but previously assigned types instance var as not-nilable if assigned in block but previously assigned - types instance var as nilable if used in first of two method calls types instance var as nilable if used in first of two method calls - marks instance variable as nilable in initialize if using self in method marks instance variable as nilable in initialize if using self in method - types instance var as nilable if assigned in block types instance var as nilable if assigned in block - checks instance vars of included modules checks instance vars of included modules - types initializer of generic type after instantiated types initializer of generic type after instantiated - doesn't type instance var as nilable if used after method call inside typeof doesn't type instance var as nilable if used after method call inside typeof - types instance vars as nilable if doesn't invoke super in initialize with deep subclass types instance vars as nilable if doesn't invoke super in initialize with deep subclass - doesn't type ivar as nilable if super call present and parent has already typed ivar (#4764) doesn't type ivar as nilable if super call present and parent has already typed ivar (#4764) - doesn't type ivar having initializer as nilable even if it is used before assigned inside initialize (#5112) doesn't type ivar having initializer as nilable even if it is used before assigned inside initialize (#5112) - errors on default new when using named arguments (#2245) errors on default new when using named arguments (#2245) - types instance var as non-nilable if calls super and super defines it types instance var as non-nilable if calls super and super defines it - doesn't type instance var as nilable if used after method call that assigns var doesn't type instance var as nilable if used after method call that assigns var - types instance var as nilable if not always assigned types instance var as nilable if not always assigned - marks instance variable as nilable in initialize if using self marks instance variable as nilable in initialize if using self - types instance vars as nilable if doesn't invoke super with default arguments types instance vars as nilable if doesn't invoke super with default arguments -Semantic: virtual metaclass - types virtual metaclass method types virtual metaclass method - merges metaclass types merges metaclass types - allows passing metaclass to virtual metaclass restriction allows passing metaclass to virtual metaclass restriction - types virtual metaclass types virtual metaclass - restricts virtual metaclass to Class (#11376) restricts virtual metaclass to Class (#11376) - types metaclass node types metaclass node - allows passing metaclass to virtual metaclass restriction allows passing metaclass to virtual metaclass restriction - allows allocating virtual type when base class is abstract allows allocating virtual type when base class is abstract - merges metaclass types with 3 types merges metaclass types with 3 types - yields virtual type in block arg if class is abstract yields virtual type in block arg if class is abstract -Crystal::Repl - can return static and runtime type information for - UnionType UnionType - MixedUnionType MixedUnionType - Non Union Non Union - VirtualType VirtualType - can parse and evaluate snippets can parse and evaluate snippets -Normalize: case - normalizes case with implicit call normalizes case with implicit call - normalizes case with multiple expressions with underscore normalizes case with multiple expressions with underscore - normalizes case with multiple expressions with all underscores normalizes case with multiple expressions with all underscores - normalizes case with multiple expressions and non-tuple normalizes case with multiple expressions and non-tuple - normalizes case with implicit as? (#3040) normalizes case with implicit as? (#3040) - normalizes case with Generic.class to is_a? normalizes case with Generic.class to is_a? - normalizes case with var in cond normalizes case with var in cond - normalizes case with multiple expressions and types normalizes case with multiple expressions and types - normalizes case with Path.class to is_a? (in) normalizes case with Path.class to is_a? (in) - normalizes case with multiple expressions normalizes case with multiple expressions - normalizes case without cond, when and else normalizes case without cond, when and else - normalizes case with generic to is_a? normalizes case with generic to is_a? - normalizes case with Path.class to is_a? normalizes case with Path.class to is_a? - normalizes case without cond, when but else normalizes case without cond, when but else - normalizes case with assignment wrapped by paren normalizes case with assignment wrapped by paren - normalizes case with call normalizes case with call - normalizes case with nil to is_a? normalizes case with nil to is_a? - normalizes case with implicit as (#3040) normalizes case with implicit as (#3040) - normalizes case with Path to is_a? normalizes case with Path to is_a? - normalizes case with assignment normalizes case with assignment - normalizes case with implicit responds_to? (#3040) normalizes case with implicit responds_to? (#3040) - normalizes case with multiple expressions with all underscores twice normalizes case with multiple expressions with all underscores twice - normalizes case with implicit is_a? (#3040) normalizes case with implicit is_a? (#3040) - normalizes case with many expressions in when normalizes case with many expressions in when - normalizes case without when and else normalizes case without when and else - normalizes case with multiple expressions and comma normalizes case with multiple expressions and comma - normalizes case without when but else normalizes case without when but else - normalizes case with multiple expressions and implicit obj normalizes case with multiple expressions and implicit obj - normalizes case without value with many expressions in when normalizes case without value with many expressions in when - normalizes case with implicit ! normalizes case with implicit ! - normalizes case without value normalizes case without value -Semantic: annotation - #annotations - of a specific type - finds annotations in lib finds annotations in lib - finds annotations in class finds annotations in class - find annotations on method parameters find annotations on method parameters - overrides annotations value in type overrides annotations value in type - collects annotations values in type collects annotations values in type - finds annotations in generic parent (#7885) finds annotations in generic parent (#7885) - uses annotations value, positional uses annotations value, positional - finds annotations in enum finds annotations in enum - adds annotations on def adds annotations on def - can't find annotations on def can't find annotations on def - can't find annotations in instance var, when other annotations are present can't find annotations in instance var, when other annotations are present - finds annotations in instance var (declaration) finds annotations in instance var (declaration) - uses annotations value, keyword uses annotations value, keyword - finds annotations in instance var (declaration, generic) finds annotations in instance var (declaration, generic) - can't find annotations on def, when other annotations are present can't find annotations on def, when other annotations are present - can't find annotations in instance var can't find annotations in instance var - finds annotations in struct finds annotations in struct - finds annotations on a module finds annotations on a module - returns an empty array if there are none defined returns an empty array if there are none defined - all types - adds annotations on def adds annotations on def - find annotations on method parameters find annotations on method parameters - finds annotations on a class finds annotations on a class - finds annotations in generic parent (#7885) finds annotations in generic parent (#7885) - finds annotations on a struct finds annotations on a struct - finds annotations in instance var (declaration, generic) finds annotations in instance var (declaration, generic) - finds annotations on a lib finds annotations on a lib - finds annotations in instance var (declaration) finds annotations in instance var (declaration) - returns an empty array if there are none defined returns an empty array if there are none defined - finds annotations on a enum finds annotations on a enum - finds annotations on a module finds annotations on a module - errors if wanting to add type inside annotation (2) (#8614) errors if wanting to add type inside annotation (2) (#8614) - errors when annotate instance variable in subclass errors when annotate instance variable in subclass - arguments - #named_args - returns a NamedTupleLiteral if there are named arguments defined returns a NamedTupleLiteral if there are named arguments defined - returns an empty NamedTupleLiteral if there are none defined returns an empty NamedTupleLiteral if there are none defined - #args - returns an empty TupleLiteral if there are none defined returns an empty TupleLiteral if there are none defined - returns a TupleLiteral if there are positional arguments defined returns a TupleLiteral if there are positional arguments defined - returns a correctly with named and positional args returns a correctly with named and positional args - declares annotation declares annotation - #annotation - adds annotation on def adds annotation on def - finds annotation in class finds annotation in class - finds annotation in instance var (declaration, generic) finds annotation in instance var (declaration, generic) - doesn't carry link annotation from lib to fun doesn't carry link annotation from lib to fun - finds annotation in generic parent (#7885) finds annotation in generic parent (#7885) - can't find annotation in instance var can't find annotation in instance var - finds annotation in instance var (declaration) finds annotation in instance var (declaration) - can't find annotation in module can't find annotation in module - uses annotation value, positional uses annotation value, positional - errors if annotation doesn't exist errors if annotation doesn't exist - uses annotation value, keyword uses annotation value, keyword - finds annotation on method arg finds annotation on method arg - finds annotation in enum finds annotation in enum - finds annotation on method splat arg finds annotation on method splat arg - finds annotation in module finds annotation in module - finds annotation in struct finds annotation in struct - errors if annotation doesn't point to an annotation type errors if annotation doesn't point to an annotation type - errors if using invalid annotation on fun errors if using invalid annotation on fun - overrides annotation value in type overrides annotation value in type - errors if using annotation other than ThreadLocal for class vars errors if using annotation other than ThreadLocal for class vars - finds annotation on an restricted method block arg finds annotation on an restricted method block arg - finds annotation on method double splat arg finds annotation on method double splat arg - overrides annotation in instance var overrides annotation in instance var - finds annotation in lib finds annotation in lib - can't find annotation in module, when other annotations are present can't find annotation in module, when other annotations are present - can't find annotation on def can't find annotation on def - finds annotation in instance var (assignment) finds annotation in instance var (assignment) - can't find annotation on def, when other annotations are present can't find annotation on def, when other annotations are present - can't find annotation in instance var, when other annotations are present can't find annotation in instance var, when other annotations are present - doesn't bleed annotation from class into class variable (#8314) doesn't bleed annotation from class into class variable (#8314) - errors if wanting to add type inside annotation (1) (#8614) errors if wanting to add type inside annotation (1) (#8614) -Semantic: fun - errors if defining class inside fun through macro (#6874) errors if defining class inside fun through macro (#6874) -Crystal::Config - .host_target .host_target - .linux_runtime_libc .linux_runtime_libc -Semantic: array - types array literal of int types array literal of int - types array literal size correctly types array literal size correctly - types array literal of union types array literal of union - types array literal of int with splats types array literal of int with splats - types array literal with splats types array literal with splats - assignment in array literal works (#3195) assignment in array literal works (#3195) - types empty typed array literal of int32 types empty typed array literal of int32 - types non-empty typed array literal of int types non-empty typed array literal of int - types non-empty typed array literal of int types non-empty typed array literal of int - types array literal with splats (2) types array literal with splats (2) -Crystal::Formatter - formats "lib Foo\n fun bar = Bar\nend" formats "lib Foo\n fun bar = Bar\nend" - formats "next 1, {2, 3}" formats "next 1, {2, 3}" - formats "\n # hello\n\n1" formats "\n # hello\n\n1" - formats "macro foo\n {% if 1 %}\\ 2 {% else %}\\ 3 {% end %}\\\nend" formats "macro foo\n {% if 1 %}\\ 2 {% else %}\\ 3 {% end %}\\\nend" - formats "next *1 ,2" formats "next *1 ,2" - formats "case 1\nwhen 1 then 1\nwhen 123 then 2\nwhen 1..123 then 3\nelse 4\nend" formats "case 1\nwhen 1 then 1\nwhen 123 then 2\nwhen 1..123 then 3\nelse 4\nend" - formats " {%\na = 1\n %}" formats " {%\na = 1\n %}" - formats "-> : {Int32} { String }" formats "-> : {Int32} { String }" - formats "def foo\n {% if flag?(:foo) %}\n foo + bar\n {% else %}\n baz + qux\n {% end %}\nend" formats "def foo\n {% if flag?(:foo) %}\n foo + bar\n {% else %}\n baz + qux\n {% end %}\nend" - formats "begin\nend\n\n# a\n" formats "begin\nend\n\n# a\n" - formats " {% for x in y %} 2 {% end %}" formats " {% for x in y %} 2 {% end %}" - formats "select \n when foo \n 2 \n end" formats "select \n when foo \n 2 \n end" - formats "->( ){ x }" formats "->( ){ x }" - formats "b &.[c]?.d" formats "b &.[c]?.d" - formats "foo do | x | \n x \n end" formats "foo do | x | \n x \n end" - formats "begin 0[1] rescue 2 end" formats "begin 0[1] rescue 2 end" - formats "lib Foo\n $foo : Int32 \nend" formats "lib Foo\n $foo : Int32 \nend" - formats "{%\n unless true\n 1\n end\n%}" formats "{%\n unless true\n 1\n end\n%}" - formats "foo(\"bar\" \\\n\"baz\")" formats "foo(\"bar\" \\\n\"baz\")" - formats "'a'" formats "'a'" - formats "if 1\n {% for x in y %} {% end %}\nend" formats "if 1\n {% for x in y %} {% end %}\nend" - formats "\"\\a\\c\\b\\d\"" formats "\"\\a\\c\\b\\d\"" - formats "# Hello\n#\n# ```cr\n# 1\n# ```\n# Bye" formats "# Hello\n#\n# ```cr\n# 1\n# ```\n# Bye" - formats "class Foo\n enum Bar\n A; B; C;\n D; E; F\nend\nend\n" formats "class Foo\n enum Bar\n A; B; C;\n D; E; F\nend\nend\n" - formats "a &.b.c.as(C)" formats "a &.b.c.as(C)" - formats "p = Foo[1, 2, 3,\n 4, 5, 6,\n ]" formats "p = Foo[1, 2, 3,\n 4, 5, 6,\n ]" - formats ":&" formats ":&" - formats "def foo\n # Comment\n\n\nend" formats "def foo\n # Comment\n\n\nend" - formats "[\n] of \n Foo " formats "[\n] of \n Foo " - formats "@[Foo( 1, 2 )]" formats "@[Foo( 1, 2 )]" - formats "a = foo &.bar do\n 1 + 2\nend" formats "a = foo &.bar do\n 1 + 2\nend" - formats "case 1 # foo\nwhen 2 then 3 # bar\nwhen 4 then 5 # baz\nelse 6 # zzz\nend" formats "case 1 # foo\nwhen 2 then 3 # bar\nwhen 4 then 5 # baz\nelse 6 # zzz\nend" - formats "X(typeof(begin\n e.is_a?(Y) ? 1 : 2\nend))" formats "X(typeof(begin\n e.is_a?(Y) ? 1 : 2\nend))" - formats "foo \\\n 1,\n 2\n\nbar \\\n foo: 1,\n bar: 2" formats "foo \\\n 1,\n 2\n\nbar \\\n foo: 1,\n bar: 2" - formats "def foo\n <<-FOO\n foo \#{1}\n FOO\nend" formats "def foo\n <<-FOO\n foo \#{1}\n FOO\nend" - formats "1 &&\n2 &&\n3" formats "1 &&\n2 &&\n3" - formats "x : A | B" formats "x : A | B" - formats "\n\n1" formats "\n\n1" - formats "def foo : A | B(C)\n nil\nend" formats "def foo : A | B(C)\n nil\nend" - formats "-> :: Foo . foo=" formats "-> :: Foo . foo=" - formats "def foo(x @@y)\nend" formats "def foo(x @@y)\nend" - formats "foo &bar" formats "foo &bar" - formats "long_variable_name = [1, 2, 3,\n 4, 5, 6]" formats "long_variable_name = [1, 2, 3,\n 4, 5, 6]" - formats "-> : Int32 | String { 1 }" formats "-> : Int32 | String { 1 }" - formats ":foo" formats ":foo" - formats "if a\n2\n3\nelse\n4\n5\nend" formats "if a\n2\n3\nelse\n4\n5\nend" - formats "next 1 , 2" formats "next 1 , 2" - formats "next 1" formats "next 1" - formats "1 if 2\n# foo" formats "1 if 2\n# foo" - formats " {% if 1 %} {% if 2 %} 2 {% end %} {% end %}" formats " {% if 1 %} {% if 2 %} 2 {% end %} {% end %}" - formats "1.!= do\nend" formats "1.!= do\nend" - formats "1 + \n2" formats "1 + \n2" - formats "foo.as?(T).bar" formats "foo.as?(T).bar" - formats "foo(->do\n 1 + 2\nend)" formats "foo(->do\n 1 + 2\nend)" - formats "class Foo\nend\nclass Bar\nend" formats "class Foo\nend\nclass Bar\nend" - formats "def foo(a : T, b : U) forall T, U\n #\nend" formats "def foo(a : T, b : U) forall T, U\n #\nend" - formats "if 1\n {% if 2 %} {% end %}\nend" formats "if 1\n {% if 2 %} {% end %}\nend" - formats "def foo\n 1 #\nrescue\nend" formats "def foo\n 1 #\nrescue\nend" - formats "foo(bar(\n 1,\n baz(2,\n 3,\n )\n))" formats "foo(bar(\n 1,\n baz(2,\n 3,\n )\n))" - formats "->Foo.foo" formats "->Foo.foo" - formats "Foo::Bar?" formats "Foo::Bar?" - formats "run(\"a\", 1)" formats "run(\"a\", 1)" - formats " {%\na = 1 %}" formats " {%\na = 1 %}" - formats "@x[ 1 ] ||= 2" formats "@x[ 1 ] ||= 2" - formats "def foo(*y, **z)\nend" formats "def foo(*y, **z)\nend" - formats "foo (1)" formats "foo (1)" - formats "next { {1, 2}, {3, 4} }, 5" formats "next { {1, 2}, {3, 4} }, 5" - formats "1 && # foo\n 2 &&\n 3" formats "1 && # foo\n 2 &&\n 3" - formats "foo : Pointer(Foo)*" formats "foo : Pointer(Foo)*" - formats "lib Bar\n enum Foo\n end\nend" formats "lib Bar\n enum Foo\n end\nend" - formats "<<-HTML\n \#{\"foo\"}\n \#{\"bar\"}\n HTML" formats "<<-HTML\n \#{\"foo\"}\n \#{\"bar\"}\n HTML" - formats "getter foo : Int32 # comment\n\ndef foo\nend" formats "getter foo : Int32 # comment\n\ndef foo\nend" - formats "{ } of A => B" formats "{ } of A => B" - formats "Hash{\n foo => <<-EOF,\n foo\n EOF\n}" formats "Hash{\n foo => <<-EOF,\n foo\n EOF\n}" - formats "asm(\n\"nop\"\n)" formats "asm(\n\"nop\"\n)" - formats "lib Foo\nalias Foo = Bar -> \n$a : Int32\nend" formats "lib Foo\nalias Foo = Bar -> \n$a : Int32\nend" - formats " {% begin %} 2 {% end %}" formats " {% begin %} 2 {% end %}" - formats "foo.[]" formats "foo.[]" - formats "foo\n .bar\n .baz(\n 1\n )" formats "foo\n .bar\n .baz(\n 1\n )" - formats "asm(\"nop\" : \"a\"(0),\n\"b\"(1)\n: \"c\"(2), \"d\"(3) )" formats "asm(\"nop\" : \"a\"(0),\n\"b\"(1)\n: \"c\"(2), \"d\"(3) )" - formats "next {1, 2}, {3, 4}" formats "next {1, 2}, {3, 4}" - formats "{% foo <<-X\nbar\nX\n%}" formats "{% foo <<-X\nbar\nX\n%}" - formats "1 # foo" formats "1 # foo" - formats "&+ 1" formats "&+ 1" - formats "case 1\nwhen a; 2\nelse; ; b\nend" formats "case 1\nwhen a; 2\nelse; ; b\nend" - formats "macro foo\n {{x}} <<-FOO\n hello \n FOO\nend" formats "macro foo\n {{x}} <<-FOO\n hello \n FOO\nend" - formats "lib LibFoo\n {% begin %}\n fun x = y(Int32)\n {% end %}\nend" formats "lib LibFoo\n {% begin %}\n fun x = y(Int32)\n {% end %}\nend" - formats "long_variable_name = [1, 2, 3, # foo\n 4, 5, 6]" formats "long_variable_name = [1, 2, 3, # foo\n 4, 5, 6]" - formats "@[Foo]\ndef foo\nend" formats "@[Foo]\ndef foo\nend" - formats "lib Foo\nunion Foo\nend\nend" formats "lib Foo\nunion Foo\nend\nend" - formats "macro foo\n if 1\n 1 + 2\n end\nend" formats "macro foo\n if 1\n 1 + 2\n end\nend" - formats "1.===() { 3 }" formats "1.===() { 3 }" - formats " Array( {x: Int32, y: String } )" formats " Array( {x: Int32, y: String } )" - formats "def foo : Int32\n 1\nend" formats "def foo : Int32\n 1\nend" - formats "1*2" formats "1*2" - formats "foo{|x| x}" formats "foo{|x| x}" - formats "case 1 \n when 2 ;\n 3 \n end" formats "case 1 \n when 2 ;\n 3 \n end" - formats "->@foo.foo!" formats "->@foo.foo!" - formats "def foo(x @y)\nend" formats "def foo(x @y)\nend" - formats "x, y = <<-FOO, <<-BAR\n hello\n FOO\n world\n BAR" formats "x, y = <<-FOO, <<-BAR\n hello\n FOO\n world\n BAR" - formats "enum Foo\nA = 1\nend" formats "enum Foo\nA = 1\nend" - formats "foo x: 1" formats "foo x: 1" - formats "foo : Foo * * * * *" formats "foo : Foo * * * * *" - formats "return { 1 , 2 }" formats "return { 1 , 2 }" - formats "foo(/ /)" formats "foo(/ /)" - formats "foo = 1\n->foo.[]=(Int32)" formats "foo = 1\n->foo.[]=(Int32)" - formats "x : Int32[ 8 ]" formats "x : Int32[ 8 ]" - formats "begin\n 1 \\\n + 2\n 3\nend" formats "begin\n 1 \\\n + 2\n 3\nend" - formats "a || b" formats "a || b" - formats "inner &.color=(@color)\n1" formats "inner &.color=(@color)\n1" - formats "lib Foo\nfun foo () : Int32\nend" formats "lib Foo\nfun foo () : Int32\nend" - formats "{\n foo: 1,\n b: 2,\n barbaz: 3,\n}" formats "{\n foo: 1,\n b: 2,\n barbaz: 3,\n}" - formats "<<-HTML\n hello \n world \n HTML" formats "<<-HTML\n hello \n world \n HTML" - formats "foo[&.bar] ||= 1" formats "foo[&.bar] ||= 1" - formats "def foo( x , & block : Int32 ->)\nend" formats "def foo( x , & block : Int32 ->)\nend" - formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar,\n\n @[MyAnn] @[MyAnn] baz,\n\n @[MyAnn]\n @[MyAnn]\n biz\n); end" formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar,\n\n @[MyAnn] @[MyAnn] baz,\n\n @[MyAnn]\n @[MyAnn]\n biz\n); end" - formats "bar = foo({\n 1 => 2,\n 3 => 4,\n 5 => 6,\n })" formats "bar = foo({\n 1 => 2,\n 3 => 4,\n 5 => 6,\n })" - formats "class Foo\n # ```\n # 1\n # ```\nend\n" formats "class Foo\n # ```\n # 1\n # ```\nend\n" - formats "foo 1, do\n2\nend" formats "foo 1, do\n2\nend" - formats "->@@foo.foo?" formats "->@@foo.foo?" - formats "unless a\n # hello\n 2\nend" formats "unless a\n # hello\n 2\nend" - formats "def foo(x, **z, &block)\nend" formats "def foo(x, **z, &block)\nend" - formats ":<<" formats ":<<" - formats "bar = foo([\n 1,\n 2,\n 3,\n])" formats "bar = foo([\n 1,\n 2,\n 3,\n])" - formats "foo &.nil?" formats "foo &.nil?" - formats "1 #=> 2" formats "1 #=> 2" - formats "{\n <<-KEY => 1,\n key\n KEY\n}" formats "{\n <<-KEY => 1,\n key\n KEY\n}" - formats "enum Foo;end" formats "enum Foo;end" - formats "class Foo\n NamedTuple(\n a: Int32,\n )\nend" formats "class Foo\n NamedTuple(\n a: Int32,\n )\nend" - formats "def foo(x y)\nend" formats "def foo(x y)\nend" - formats "::Tuple(T)" formats "::Tuple(T)" - formats "~ 1" formats "~ 1" - formats "def foo (\nx ,\n y ) \n end" formats "def foo (\nx ,\n y ) \n end" - formats "long_variable_name = [\n {\n :foo => 1,\n },\n {\n :bar => 2,\n },\n]" formats "long_variable_name = [\n {\n :foo => 1,\n },\n {\n :bar => 2,\n },\n]" - formats "select\n# when foo\nwhen bar\n break\nend" formats "select\n# when foo\nwhen bar\n break\nend" - formats "[\n1, # a\n2, # b\n 3 # c\n]" formats "[\n1, # a\n2, # b\n 3 # c\n]" - formats "x = <<-EOF\n 1\nEOF" formats "x = <<-EOF\n 1\nEOF" - formats "asm(\"a\" : \"b\"(c)\n)" formats "asm(\"a\" : \"b\"(c)\n)" - formats " {{\n1 + 2\n }}" formats " {{\n1 + 2\n }}" - formats "if 1\n1\n\n# foo\nend" formats "if 1\n1\n\n# foo\nend" - formats "1.!=() { 3 }" formats "1.!=() { 3 }" - formats "@@a" formats "@@a" - formats "__DIR__" formats "__DIR__" - formats "foo(\n # foo\n1,\n\n # bar\n2, \n)" formats "foo(\n # foo\n1,\n\n # bar\n2, \n)" - formats "foo &.bar.is_a?(Baz)" formats "foo &.bar.is_a?(Baz)" - formats "a.b &.[c]?\n1" formats "a.b &.[c]?\n1" - formats "1 ? 2 : 3" formats "1 ? 2 : 3" - formats "a = 1\nb, c = 2, 3\n{% begin %}\n a |= 1\n b |= 2\n c |= 3\n{% end %}" formats "a = 1\nb, c = 2, 3\n{% begin %}\n a |= 1\n b |= 2\n c |= 3\n{% end %}" - formats "-> :: Foo . foo" formats "-> :: Foo . foo" - formats "def foo( x , & block : Int32->Float64)\nend" formats "def foo( x , & block : Int32->Float64)\nend" - formats "return 1\n# end" formats "return 1\n# end" - formats "foo = 1\n->foo.foo=" formats "foo = 1\n->foo.foo=" - formats "foo \\\n foo: 1,\n bar: 2" formats "foo \\\n foo: 1,\n bar: 2" - formats "{ \"foo\" => 1 }" formats "{ \"foo\" => 1 }" - formats "begin\n select\n when foo\n # foo\n # bar\n else\n # foo\n # bar\n end\nend" formats "begin\n select\n when foo\n # foo\n # bar\n else\n # foo\n # bar\n end\nend" - formats "lib Foo\n fun foo =\n\n\n bar : Void\nend" formats "lib Foo\n fun foo =\n\n\n bar : Void\nend" - formats "def foo(\n @[MyAnn] bar\n); end" formats "def foo(\n @[MyAnn] bar\n); end" - formats "foo &.[]" formats "foo &.[]" - formats "foo(\n 1, 2)" formats "foo(\n 1, 2)" - formats "def func # comment\n (1 + 2) / 3\nend" formats "def func # comment\n (1 + 2) / 3\nend" - formats "def foo(x = __FILE__ )\nend" formats "def foo(x = __FILE__ )\nend" - formats "foo(\n1,\n 2 \n)" formats "foo(\n1,\n 2 \n)" - formats "module Foo\n 1 # bar\nend\n\nmodule Foo\n 1\n # bar\nend\n\nmodule Foo\n 1\n\n # bar\nend\n\nmodule Foo\n 1\n 2\n # bar\nend\n\nmodule Foo\n 1\n 2\n\n # bar\nend\n\nif 1\n 1\n # bar\nend\n\nif 1\n 1\n\n # bar\nend\n\n1\n2\n# foo\n\n1\n2\n\n# foo\n" formats "module Foo\n 1 # bar\nend\n\nmodule Foo\n 1\n # bar\nend\n\nmodule Foo\n 1\n\n # bar\nend\n\nmodule Foo\n 1\n 2\n # bar\nend\n\nmodule Foo\n 1\n 2\n\n # bar\nend\n\nif 1\n 1\n # bar\nend\n\nif 1\n 1\n\n # bar\nend\n\n1\n2\n# foo\n\n1\n2\n\n# foo\n" - formats "alias Foo::Bar= Baz" formats "alias Foo::Bar= Baz" - formats "foo = 1\n->foo.bar=(Int32)" formats "foo = 1\n->foo.bar=(Int32)" - formats "1.!=(2) { 3 }" formats "1.!=(2) { 3 }" - formats "next" formats "next" - formats "1/2" formats "1/2" - formats "struct Foo\n # bar\n # baz\n1\nend" formats "struct Foo\n # bar\n # baz\n1\nend" - formats "getter foo # comment\n\ndef foo\nend" formats "getter foo # comment\n\ndef foo\nend" - formats "page= <<-HTML\n foo\nHTML" formats "page= <<-HTML\n foo\nHTML" - formats "foo.bar. as? Int32" formats "foo.bar. as? Int32" - formats "a+1" formats "a+1" - formats ":/" formats ":/" - formats "foo a: 1\nb" formats "foo a: 1\nb" - formats "foo &.is_a?(T)" formats "foo &.is_a?(T)" - formats "def foo(\n\n#foo\nx,\n\n#bar\nz\n)\nend" formats "def foo(\n\n#foo\nx,\n\n#bar\nz\n)\nend" - formats "if a\n2\nend" formats "if a\n2\nend" - formats "foo &.[]?( 1, 2 )" formats "foo &.[]?( 1, 2 )" - formats "foo[a, b: 2]" formats "foo[a, b: 2]" - formats "macro flags\n {% if 1 %}\\\n {% end %}\\\nend" formats "macro flags\n {% if 1 %}\\\n {% end %}\\\nend" - formats "next {1, 2}, 3" formats "next {1, 2}, 3" - formats "def foo(a : T, b : U) forall T, U #\n #\nend" formats "def foo(a : T, b : U) forall T, U #\n #\nend" - formats "def foo\nend\ndef bar\nend" formats "def foo\nend\ndef bar\nend" - formats " {% if 1 %} 2 {% end %}" formats " {% if 1 %} 2 {% end %}" - formats "\"foo \#{ 1 + 2 }\"" formats "\"foo \#{ 1 + 2 }\"" - formats "1.[]= { 3 }" formats "1.[]= { 3 }" - formats "\"\#{\n foo = 1}\"" formats "\"\#{\n foo = 1}\"" - formats "bar = foo(->{\n 1 + 2\n})" formats "bar = foo(->{\n 1 + 2\n})" - formats "x : {A, B}" formats "x : {A, B}" - formats "1 + # foo\n2" formats "1 + # foo\n2" - formats "def foo\n ((((((((((((((((0_u64\n ) | ptr[0]) << 8\n ) | ptr[1]) << 8\n ) | ptr[2]) << 8\n ) | ptr[3]) << 8\n ) | ptr[4]) << 8\n ) | ptr[5]) << 8\n ) | ptr[6]) << 8\n ) | ptr[7])\nend" formats "def foo\n ((((((((((((((((0_u64\n ) | ptr[0]) << 8\n ) | ptr[1]) << 8\n ) | ptr[2]) << 8\n ) | ptr[3]) << 8\n ) | ptr[4]) << 8\n ) | ptr[5]) << 8\n ) | ptr[6]) << 8\n ) | ptr[7])\nend" - formats "a = # foo\n bar(1)" formats "a = # foo\n bar(1)" - formats "foo = 1\n->foo.foo!" formats "foo = 1\n->foo.foo!" - formats "case 1\nelse # foo\n # bar\nend" formats "case 1\nelse # foo\n # bar\nend" - formats "if 1\n2\nelsif\n3\n4\nend" formats "if 1\n2\nelsif\n3\n4\nend" - formats "asm(\"nop\" :: \"r\"(0))" formats "asm(\"nop\" :: \"r\"(0))" - formats "macro flags\n {% if 1 %}{{1}}a{{2}}{% end %}\\\nend" formats "macro flags\n {% if 1 %}{{1}}a{{2}}{% end %}\\\nend" - formats "break *1 , *2" formats "break *1 , *2" - formats "case\n# hello\nwhen 1\n 2\nend" formats "case\n# hello\nwhen 1\n 2\nend" - formats "break( *1 , *2 )" formats "break( *1 , *2 )" - formats "foo = 1\n->foo.bar(Int32)" formats "foo = 1\n->foo.bar(Int32)" - formats "asm(\"a\" :::: \"volatile\"\n)" formats "asm(\"a\" :::: \"volatile\"\n)" - formats "foo &.as(T)" formats "foo &.as(T)" - formats "[\n 1, # foo\n 3,\n]" formats "[\n 1, # foo\n 3,\n]" - formats "case 1 \n when 2 then 3 \n end" formats "case 1 \n when 2 then 3 \n end" - formats "%w(one two three)" formats "%w(one two three)" - formats "a = 1;;; b = 2" formats "a = 1;;; b = 2" - formats "def foo(\n a,\n b\n)\nend" formats "def foo(\n a,\n b\n)\nend" - adds trailing comma to def multi-line normal, splat, and double splat parameters - formats "def foo(\n a,\n b\n)\nend" formats "def foo(\n a,\n b\n)\nend" - formats "def foo(\n a : Int32,\n b : Int32 = 1\n)\nend" formats "def foo(\n a : Int32,\n b : Int32 = 1\n)\nend" - formats "def foo(\n a,\n @[Ann]\n b\n)\nend" formats "def foo(\n a,\n @[Ann]\n b\n)\nend" - formats "def foo(\n a,\n *b\n)\nend" formats "def foo(\n a,\n *b\n)\nend" - formats "macro foo(\n a,\n *b\n)\nend" formats "macro foo(\n a,\n *b\n)\nend" - formats "def foo(a, *args)\nend" formats "def foo(a, *args)\nend" - formats "def foo(a, &block)\nend" formats "def foo(a, &block)\nend" - formats "def foo(\n a,\n @[Ann] b\n)\nend" formats "def foo(\n a,\n @[Ann] b\n)\nend" - formats "def foo(a, b)\nend" formats "def foo(a, b)\nend" - formats "def foo(\n a, b,\n c, d\n)\nend" formats "def foo(\n a, b,\n c, d\n)\nend" - formats "def foo(\n a,\n &block\n)\nend" formats "def foo(\n a,\n &block\n)\nend" - formats "def foo(\n a,\n b c\n)\nend" formats "def foo(\n a,\n b c\n)\nend" - formats "def foo(\n a, # Foo\n b # Bar\n)\nend" formats "def foo(\n a, # Foo\n b # Bar\n)\nend" - formats "fun foo(\n a : Int32,\n ...\n)\nend" formats "fun foo(\n a : Int32,\n ...\n)\nend" - formats "def foo(\n a : Int32,\n b : Int32\n)\nend" formats "def foo(\n a : Int32,\n b : Int32\n)\nend" - formats "def foo(\n a, b\n)\nend" formats "def foo(\n a, b\n)\nend" - formats "def foo(\n a,\n **b\n)\nend" formats "def foo(\n a,\n **b\n)\nend" - formats "macro foo(\n a,\n b\n)\nend" formats "macro foo(\n a,\n b\n)\nend" - formats "def foo(a, *args, &block)\nend" formats "def foo(a, *args, &block)\nend" - formats "def foo(a)\nend" formats "def foo(a)\nend" - formats "def foo(a, **kwargs)\nend" formats "def foo(a, **kwargs)\nend" - formats "def foo(a, **kwargs, &block)\nend" formats "def foo(a, **kwargs, &block)\nend" - formats "def foo(\n a,\n)\nend" formats "def foo(\n a,\n)\nend" - formats "fun foo(\n a : Int32,\n b : Int32\n)\nend" formats "fun foo(\n a : Int32,\n b : Int32\n)\nend" - formats "lib Foo\nfun foo : Int32\nend" formats "lib Foo\nfun foo : Int32\nend" - formats "asm(\"nop\" : \"a\"(0) )" formats "asm(\"nop\" : \"a\"(0) )" - formats "$~" formats "$~" - formats "FOO = 2\nA = 1" formats "FOO = 2\nA = 1" - formats "foo { |x, *y| }" formats "foo { |x, *y| }" - formats "foo : ( A | B )" formats "foo : ( A | B )" - formats "lib Foo\nfun foo(x : Int32, ... ) : Int32\nend" formats "lib Foo\nfun foo(x : Int32, ... ) : Int32\nend" - formats "[foo <<-X\nbar\nX\n]" formats "[foo <<-X\nbar\nX\n]" - formats "begin\n1\nrescue ex\n3\nend" formats "begin\n1\nrescue ex\n3\nend" - formats "next 1 , *2" formats "next 1 , *2" - formats "x : Int32**" formats "x : Int32**" - formats "def foo( @[MyAnn] v ); end" formats "def foo( @[MyAnn] v ); end" - formats "foo &.bar.as?(T)" formats "foo &.bar.as?(T)" - formats "if 1\n ->{ 1 }\nend" formats "if 1\n ->{ 1 }\nend" - formats "_ = 1" formats "_ = 1" - formats "<<-FOO\nfoo\nfoo\nFOO" formats "<<-FOO\nfoo\nfoo\nFOO" - formats "1 && 2" formats "1 && 2" - formats "foo \\\n 1,\n 2" formats "foo \\\n 1,\n 2" - formats "enum Foo\nend" formats "enum Foo\nend" - formats "return *1" formats "return *1" - formats "Foo( A , 1 )" formats "Foo( A , 1 )" - formats "def foo(a,\n &block)\nend" formats "def foo(a,\n &block)\nend" - formats "foo(\n1,\n\n 2 \n)" formats "foo(\n1,\n\n 2 \n)" - formats "{% if true %}\n # x\n{% end %}" formats "{% if true %}\n # x\n{% end %}" - formats "1.[]= do\nend" formats "1.[]= do\nend" - formats "return {1, 2}, 3" formats "return {1, 2}, 3" - formats "begin\n # Comment\n\n\nend" formats "begin\n # Comment\n\n\nend" - formats "foo(\n [\n 1,\n 2,\n ],\n [\n 3,\n 4,\n ]\n)" formats "foo(\n [\n 1,\n 2,\n ],\n [\n 3,\n 4,\n ]\n)" - formats "->@foo.foo" formats "->@foo.foo" - formats "foo (1).bar" formats "foo (1).bar" - formats "macro foo=(x)\nend" formats "macro foo=(x)\nend" - formats "Hash{\n foo => <<-EOF,\n foo\n EOF\n bar => <<-BAR,\n bar\n BAR\n}" formats "Hash{\n foo => <<-EOF,\n foo\n EOF\n bar => <<-BAR,\n bar\n BAR\n}" - formats "unless a\n2\nelse\n3\nend" formats "unless a\n2\nelse\n3\nend" - formats "x : A?" formats "x : A?" - formats "1 > 2" formats "1 > 2" - formats "def foo ( x : Int32 ) \n end" formats "def foo ( x : Int32 ) \n end" - formats "module Foo\n1\n\n# foo\nend" formats "module Foo\n1\n\n# foo\nend" - formats "asm(\"a\" ::: \"f\"\n)" formats "asm(\"a\" ::: \"f\"\n)" - formats "->{\nx\n}" formats "->{\nx\n}" - formats "@[Foo]" formats "@[Foo]" - formats "case 1\nwhen \"foo\" ; 3\nwhen \"lalalala\"; 4\nelse 5\nend" formats "case 1\nwhen \"foo\" ; 3\nwhen \"lalalala\"; 4\nelse 5\nend" - formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\#{foo}\\v\\f\\e\"" formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\#{foo}\\v\\f\\e\"" - formats "foo\n.bar\n.baz" formats "foo\n.bar\n.baz" - formats "foo &.[]=(1, 2)" formats "foo &.[]=(1, 2)" - formats " [ 1, \n 2 , \n 3 ] " formats " [ 1, \n 2 , \n 3 ] " - formats "a = 1\ndef bar\nend" formats "a = 1\ndef bar\nend" - formats "@[::Foo::Bar]" formats "@[::Foo::Bar]" - formats "foo bar, \\\nbaz" formats "foo bar, \\\nbaz" - formats "page= <<-HTML\n \#{1}foo\nHTML" formats "page= <<-HTML\n \#{1}foo\nHTML" - formats "case\nend" formats "case\nend" - formats "def foo(x : (A | B)) \n end" formats "def foo(x : (A | B)) \n end" - formats ":>>" formats ":>>" - formats "-> { 1 }" formats "-> { 1 }" - formats ":\"foo\"" formats ":\"foo\"" - formats "[\n1,\n\n2]" formats "[\n1,\n\n2]" - formats "a = 1\na ||= begin\n 1\nend" formats "a = 1\na ||= begin\n 1\nend" - formats "foo x: 1, y: 2" formats "foo x: 1, y: 2" - formats "yield (1).foo" formats "yield (1).foo" - formats "foo[x: 1, &.bar]" formats "foo[x: 1, &.bar]" - formats "def /(x)\n 1\nend" formats "def /(x)\n 1\nend" - formats "next *1" formats "next *1" - formats "def foo(\n foo,\n @[MyAnn]\n &block\n); end" formats "def foo(\n foo,\n @[MyAnn]\n &block\n); end" - formats "a = 1 if 1 == 2 ||\n 3 == 4\n" formats "a = 1 if 1 == 2 ||\n 3 == 4\n" - formats "->do\nend" formats "->do\nend" - formats "x = a do\n 1 ||\n 2\nend" formats "x = a do\n 1 ||\n 2\nend" - formats "class Foo\ndef foo (\nx ,\n y ) \n end\nend" formats "class Foo\ndef foo (\nx ,\n y ) \n end\nend" - formats "foo &.[]=( 1, 2 )" formats "foo &.[]=( 1, 2 )" - formats "1.== { 3 }" formats "1.== { 3 }" - formats "1 ensure 2" formats "1 ensure 2" - formats ":*" formats ":*" - formats "def foo(a, # comment\n *b)\nend" formats "def foo(a, # comment\n *b)\nend" - formats "if a\nif b\nelse\n4\nend\nend" formats "if a\nif b\nelse\n4\nend\nend" - formats "x = uninitialized Int32" formats "x = uninitialized Int32" - formats "x, y, z = <<-FOO, <<-BAR, <<-BAZ\n hello\n FOO\n world\n BAR\n qux\nBAZ" formats "x, y, z = <<-FOO, <<-BAR, <<-BAZ\n hello\n FOO\n world\n BAR\n qux\nBAZ" - formats ":&-" formats ":&-" - formats "def foo(@[MyAnn] v); end" formats "def foo(@[MyAnn] v); end" - formats "alias Foo::Bar=Baz" formats "alias Foo::Bar=Baz" - formats "def foo : Int32 \n end" formats "def foo : Int32 \n end" - formats "1 == / /" formats "1 == / /" - formats "foo(\"bar\": 1, \"baz qux\": 2)" formats "foo(\"bar\": 1, \"baz qux\": 2)" - formats "\n# hello\n\n\n1" formats "\n# hello\n\n\n1" - formats "-> :: foo!" formats "-> :: foo!" - formats "\"hel\\nlo\"" formats "\"hel\\nlo\"" - formats "-> : {Int32, String} {}" formats "-> : {Int32, String} {}" - formats "module Foo; 1; end" formats "module Foo; 1; end" - formats "break {1, 2}, {3, 4}" formats "break {1, 2}, {3, 4}" - formats "if 1 # foo\nend" formats "if 1 # foo\nend" - formats "args.any? &.name.baz" formats "args.any? &.name.baz" - formats "" formats "" - formats "foo a , *b" formats "foo a , *b" - formats "def foo ( x , y ) \n end" formats "def foo ( x , y ) \n end" - formats "def foo(\nx, #foo\nz #bar\n)\nend" formats "def foo(\nx, #foo\nz #bar\n)\nend" - formats "alias X = ((Y, Z) ->)" formats "alias X = ((Y, Z) ->)" - formats "/foo \#{ bar }/" formats "/foo \#{ bar }/" - formats "next { 1 , 2 }" formats "next { 1 , 2 }" - formats "def foo\nend;def bar\nend" formats "def foo\nend;def bar\nend" - formats "`foo \#{ bar }`" formats "`foo \#{ bar }`" - formats "foo[] =1" formats "foo[] =1" - formats "def foo(@x)\n\nrescue\nend" formats "def foo(@x)\n\nrescue\nend" - formats "1\nyield\n2" formats "1\nyield\n2" - formats "foo . responds_to?( :bar )" formats "foo . responds_to?( :bar )" - formats "{ \"foo\": 1 }" formats "{ \"foo\": 1 }" - formats "{1, 2, 3}" formats "{1, 2, 3}" - formats "->foo!" formats "->foo!" - formats "macro foo\n {% unless 1 %} 2 {% end %}\nend" formats "macro foo\n {% unless 1 %} 2 {% end %}\nend" - formats "! 1" formats "! 1" - formats "asm(\"a\" : :: : \"volatile\")" formats "asm(\"a\" : :: : \"volatile\")" - formats "foo.bar(&.%(baz))" formats "foo.bar(&.%(baz))" - formats "foo.bar # comment\n .baz" formats "foo.bar # comment\n .baz" - formats "case 1\nwhen \"foo\" then 3\nwhen \"lalalala\" then 4\nelse 5\nend" formats "case 1\nwhen \"foo\" then 3\nwhen \"lalalala\" then 4\nelse 5\nend" - formats "foo (1), 2" formats "foo (1), 2" - formats "abstract def foo \n 1" formats "abstract def foo \n 1" - formats "private def foo\nend\nprivate def bar\nend" formats "private def foo\nend\nprivate def bar\nend" - formats "1\n.." formats "1\n.." - formats "1 # foo\n/ 1 /" formats "1 # foo\n/ 1 /" - formats "def foo # bar\n # baz\nend" formats "def foo # bar\n # baz\nend" - formats "class Foo\nx = 1\nend" formats "class Foo\nx = 1\nend" - formats "enum E\n A # hello\n B # hello; C # hello\nend" formats "enum E\n A # hello\n B # hello; C # hello\nend" - formats "[\n a() # b\n]" formats "[\n a() # b\n]" - formats "yield(1 , \n2)" formats "yield(1 , \n2)" - formats "Foo( Bar( ) )" formats "Foo( Bar( ) )" - formats "NamedTuple()" formats "NamedTuple()" - formats "-> : Int32 {}" formats "-> : Int32 {}" - formats "$0" formats "$0" - formats "\" \" * 2" formats "\" \" * 2" - formats "{% if 1 %}\n 2\n{% end %}\ndef foo\nend" formats "{% if 1 %}\n 2\n{% end %}\ndef foo\nend" - formats "if 0\n1 &&\n2 &&\n3\nend" formats "if 0\n1 &&\n2 &&\n3\nend" - formats "fun foo(x : Int32) : Int32\n 1\nend" formats "fun foo(x : Int32) : Int32\n 1\nend" - formats "select \n when foo \n 2 \n else \n 3 \n end" formats "select \n when foo \n 2 \n else \n 3 \n end" - formats "foo(\n 1, 2,\n&block)" formats "foo(\n 1, 2,\n&block)" - formats "macro foo( x = 1, y = 2, &block)\nend" formats "macro foo( x = 1, y = 2, &block)\nend" - formats "if 1\n node.is_a?(T)\nend" formats "if 1\n node.is_a?(T)\nend" - formats "{ {% begin %}1{% end %}, nil }" formats "{ {% begin %}1{% end %}, nil }" - formats "a &.a.!" formats "a &.a.!" - formats "1 // 2" formats "1 // 2" - formats "asm(\"nop\")" formats "asm(\"nop\")" - formats "def foo( & )\nend" formats "def foo( & )\nend" - formats "foo a , b , x: 1" formats "foo a , b , x: 1" - formats "{} of A => B\n{} of Foo => Bar" formats "{} of A => B\n{} of Foo => Bar" - formats "@[ Foo ]\ndef foo\nend" formats "@[ Foo ]\ndef foo\nend" - formats "def foo ( x : Int32 = 1 ) \n end" formats "def foo ( x : Int32 = 1 ) \n end" - formats "a = [\n1,\n2]" formats "a = [\n1,\n2]" - formats "alias Foo::Bar = Baz" formats "alias Foo::Bar = Baz" - formats "if 1\n2\nend\nif 3\nend" formats "if 1\n2\nend\nif 3\nend" - formats "foo(1, 2, {\n foo: 1,\n bar: 2,\n})" formats "foo(1, 2, {\n foo: 1,\n bar: 2,\n})" - formats "$1" formats "$1" - formats "alias Foo= Bar" formats "alias Foo= Bar" - formats "x = <<-FOO\n hello\n FOO\n\ndef bar\nend" formats "x = <<-FOO\n hello\n FOO\n\ndef bar\nend" - formats "bar do\n call(foo <<-X\n bar\n X\n )\nend" formats "bar do\n call(foo <<-X\n bar\n X\n )\nend" - formats "{\n variables => true,\n query => <<-HEREDOC,\n foo\n HEREDOC\n}" formats "{\n variables => true,\n query => <<-HEREDOC,\n foo\n HEREDOC\n}" - formats "->Foo.foo=" formats "->Foo.foo=" - formats "{% if true %}\n # x\n # y\n{% end %}" formats "{% if true %}\n # x\n # y\n{% end %}" - formats "as Foo" formats "as Foo" - formats "break {1, 2}, 3" formats "break {1, 2}, 3" - formats "foo()" formats "foo()" - formats "foo.foo1(\n bar\n .bar1\n .bar2)" formats "foo.foo1(\n bar\n .bar1\n .bar2)" - formats "def foo(x, *, z)\nend" formats "def foo(x, *, z)\nend" - formats "if 1;\n2;\nelse;\n3;\nend" formats "if 1;\n2;\nelse;\n3;\nend" - formats "foo.bar = \n1" formats "foo.bar = \n1" - formats "1.==(2) { 3 }" formats "1.==(2) { 3 }" - formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\\v\\f\\e\"" formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\\v\\f\\e\"" - formats "def foo(**z)\nend" formats "def foo(**z)\nend" - formats ":+" formats ":+" - formats "-> :: Foo . foo?" formats "-> :: Foo . foo?" - formats "\"hel\nlo\"" formats "\"hel\nlo\"" - formats "macro foo\n def bar \n end \n end" formats "macro foo\n def bar \n end \n end" - formats "@x[ 1 ] &&= 2" formats "@x[ 1 ] &&= 2" - formats "def foo(\n @[MyAnn] bar\n); end" formats "def foo(\n @[MyAnn] bar\n); end" - formats "1 if 2\n# foo\n3" formats "1 if 2\n# foo\n3" - formats "def foo(**a,)\n 1\nend" formats "def foo(**a,)\n 1\nend" - formats "begin\n #hola\n 1\nend\n" formats "begin\n #hola\n 1\nend\n" - formats "{x => self // 1}" formats "{x => self // 1}" - formats "def //(x)\n 1\nend" formats "def //(x)\n 1\nend" - formats "def a\n b(\n 1, # x\n # y\n )\nend" formats "def a\n b(\n 1, # x\n # y\n )\nend" - formats "NamedTuple(\n a: Int32,)" formats "NamedTuple(\n a: Int32,)" - formats "foo.responds_to? :bar\n1" formats "foo.responds_to? :bar\n1" - formats "<<-FOO\nbarfoobar\nFOO" formats "<<-FOO\nbarfoobar\nFOO" - formats "%(\n1\n)\n\n{\n 1 => 2,\n 234 => 5,\n}" formats "%(\n1\n)\n\n{\n 1 => 2,\n 234 => 5,\n}" - formats "a-1" formats "a-1" - formats "select\nwhen foo # foo\n # bar\nelse # foo\n # bar\nend" formats "select\nwhen foo # foo\n # bar\nelse # foo\n # bar\nend" - formats "case\nelse\n 1\nend" formats "case\nelse\n 1\nend" - formats "begin\n ()\nend" formats "begin\n ()\nend" - formats "%r(foo \#{ bar })" formats "%r(foo \#{ bar })" - formats "foo do # a\n # b\n bar\nend" formats "foo do # a\n # b\n bar\nend" - formats "def foo(x : self ?) \n end" formats "def foo(x : self ?) \n end" - formats "foo({\n 1 => 2,\n 3 => {\n 4 => 5,\n },\n})" formats "foo({\n 1 => 2,\n 3 => {\n 4 => 5,\n },\n})" - formats "\"1\#{\"\#{\"2\"}\"}3\#{\"4\"}5\"" formats "\"1\#{\"\#{\"2\"}\"}3\#{\"4\"}5\"" - formats "{% verbatim do %}{{1}} + {{2}}{% end %}" formats "{% verbatim do %}{{1}} + {{2}}{% end %}" - formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar\n); end" formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar\n); end" - formats "1 &&\n2" formats "1 &&\n2" - formats "foo &.bar( 1 , 2 )" formats "foo &.bar( 1 , 2 )" - formats "1 #foo \n2 #bar" formats "1 #foo \n2 #bar" - formats "lib Foo\nstruct Foo\nend\nend" formats "lib Foo\nstruct Foo\nend\nend" - formats "foo.as(T).bar" formats "foo.as(T).bar" - formats "lib Foo\n fun foo =\n\n\n bar(Int32) : Int32\nend" formats "lib Foo\n fun foo =\n\n\n bar(Int32) : Int32\nend" - formats "foo.bar\n.baz" formats "foo.bar\n.baz" - formats "->(){}" formats "->(){}" - formats "%i(one two three)" formats "%i(one two three)" - formats "{ 1 => 2 ,\n\n 3 => 4 }" formats "{ 1 => 2 ,\n\n 3 => 4 }" - formats "lib Bar\n enum Foo\n A\n end\nend" formats "lib Bar\n enum Foo\n A\n end\nend" - formats "asm(\"a\" ::: \"a\"\n : \"volatile\",\n \"intel\")" formats "asm(\"a\" ::: \"a\"\n : \"volatile\",\n \"intel\")" - formats "def foo(\"bar baz\" qux)\nend" formats "def foo(\"bar baz\" qux)\nend" - formats " <<-HTML\n foo\n HTML" formats " <<-HTML\n foo\n HTML" - formats "foo.as? ( Int32* )" formats "foo.as? ( Int32* )" - formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n : \"f\")" formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n : \"f\")" - formats "true" formats "true" - formats "foo { |x| (x).a }" formats "foo { |x| (x).a }" - formats "case 1 \n when 2 ; 3 \n end" formats "case 1 \n when 2 ; 3 \n end" - formats "return {1, 2}, {3, 4}" formats "return {1, 2}, {3, 4}" - formats "foo &.bar.nil?()" formats "foo &.bar.nil?()" - formats " <<-HTML\n hello \n world \n HTML" formats " <<-HTML\n hello \n world \n HTML" - formats "1\n2 \n # foo" formats "1\n2 \n # foo" - formats "while 1 &&\n2 &&\n3\n4\nend" formats "while 1 &&\n2 &&\n3\n4\nend" - formats "if a\n2\n3\nend" formats "if a\n2\n3\nend" - formats "lib Foo\n fun foo(Int32) : Int32\nend" formats "lib Foo\n fun foo(Int32) : Int32\nend" - formats "@x ||= 1" formats "@x ||= 1" - formats "alias A = ((B(C | D) | E) | F)" formats "alias A = ((B(C | D) | E) | F)" - formats "->\n:\nInt32\n{\n}" formats "->\n:\nInt32\n{\n}" - formats "$0.bar" formats "$0.bar" - formats "case / /\nwhen / /, /x/\n / /\nend" formats "case / /\nwhen / /, /x/\n / /\nend" - formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar,\n\n @[MyAnn] @[MyAnn] baz,\n\n @[MyAnn]\n\n @[MyAnn]\n\n biz\n); end" formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar,\n\n @[MyAnn] @[MyAnn] baz,\n\n @[MyAnn]\n\n @[MyAnn]\n\n biz\n); end" - formats "yield( 1 )" formats "yield( 1 )" - formats "begin\n array[\n 0, # Zero\n ]\nend" formats "begin\n array[\n 0, # Zero\n ]\nend" - formats "__LINE__" formats "__LINE__" - formats "def foo\n case x\n # z\n when 1\n end\nend" formats "def foo\n case x\n # z\n when 1\n end\nend" - formats "def foo(a,\n **b)\nend" formats "def foo(a,\n **b)\nend" - formats "case 1\nwhen 2\n\n#comment\nend" formats "case 1\nwhen 2\n\n#comment\nend" - formats "a(&.b.c.as C)" formats "a(&.b.c.as C)" - formats "def foo(a : T) forall T\n #\n\nend" formats "def foo(a : T) forall T\n #\n\nend" - formats "macro foo\n {%1 + 2%}\\\nend" formats "macro foo\n {%1 + 2%}\\\nend" - formats "{ {{FOO}}, nil}" formats "{ {{FOO}}, nil}" - formats "foo(\n# x\n1,\n\n# y\nz: 2,\n\n# a\nb: 3)" formats "foo(\n# x\n1,\n\n# y\nz: 2,\n\n# a\nb: 3)" - formats "a.!" formats "a.!" - formats "foo[1, &.bar] ||= 1" formats "foo[1, &.bar] ||= 1" - formats "foo.bar.baz\n.qux" formats "foo.bar.baz\n.qux" - formats "SomeLib.UppercasedFunCall" formats "SomeLib.UppercasedFunCall" - formats "case 1\nend" formats "case 1\nend" - formats "class Actor\n macro inherited\nend\nend\n" formats "class Actor\n macro inherited\nend\nend\n" - formats "break { 1 , 2 }" formats "break { 1 , 2 }" - formats "case 1\nwhen 8 then 1\nwhen 16 then 2\nwhen 256 then 3\nwhen 'a' then 5\nwhen \"foo\" then 6\nelse 4\nend" formats "case 1\nwhen 8 then 1\nwhen 16 then 2\nwhen 256 then 3\nwhen 'a' then 5\nwhen \"foo\" then 6\nelse 4\nend" - formats "foo(&.@bar)" formats "foo(&.@bar)" - formats "module Ton\n macro foo\n class {{name.id}}\n end\n end\nend" formats "module Ton\n macro foo\n class {{name.id}}\n end\n end\nend" - formats "foo.[] =1" formats "foo.[] =1" - formats "class Foo\n macro foo\n 1\n end\nend" formats "class Foo\n macro foo\n 1\n end\nend" - formats "a = \"\n\"\n1 # 1\n12 # 2\n" formats "a = \"\n\"\n1 # 1\n12 # 2\n" - formats "foo do;\n1; end" formats "foo do;\n1; end" - formats "asm(\"a\" :: \"d\"(e)\n)" formats "asm(\"a\" :: \"d\"(e)\n)" - formats "foo(\n 1,\n) {\n 2\n}" formats "foo(\n 1,\n) {\n 2\n}" - formats "foo do\n bar do\n foo <<-X\n bar\n X\n end\nend" formats "foo do\n bar do\n foo <<-X\n bar\n X\n end\nend" - formats "@[Foo(\n foo: 1\n)]\ndef foo\nend" formats "@[Foo(\n foo: 1\n)]\ndef foo\nend" - formats "<<-HTML\n \#{\"foo\"}\#{1}\n HTML" formats "<<-HTML\n \#{\"foo\"}\#{1}\n HTML" - formats "return( 1 )" formats "return( 1 )" - formats "def `(x)\n 1\nend" formats "def `(x)\n 1\nend" - formats "foo &.[]( 1, 2 )" formats "foo &.[]( 1, 2 )" - formats "%<hello>" formats "%<hello>" - formats "typeof( 1, 2, 3 )" formats "typeof( 1, 2, 3 )" - formats "->( x , y ) { x }" formats "->( x , y ) { x }" - formats "foo {;1}" formats "foo {;1}" - formats "foo.bar=(2)\n1" formats "foo.bar=(2)\n1" - formats "{%\n unless true\n 1\n else\n 2\n end\n%}" formats "{%\n unless true\n 1\n else\n 2\n end\n%}" - formats " _ , *_ ,\na.foo ,a.bar = 1 , 2,3" formats " _ , *_ ,\na.foo ,a.bar = 1 , 2,3" - formats "yield 1\n2" formats "yield 1\n2" - formats "begin\n a\nend.b { }\nc" formats "begin\n a\nend.b { }\nc" - formats "foo(->{\n 1 + 2\n})" formats "foo(->{\n 1 + 2\n})" - formats "1 ;\n 2" formats "1 ;\n 2" - formats "foo do\n # bar\nend" formats "foo do\n # bar\nend" - formats "select # some comment\nwhen bar\n break\nend" formats "select # some comment\nwhen bar\n break\nend" - formats "case 1 \n when 2 \n 3 \n end" formats "case 1 \n when 2 \n 3 \n end" - formats "__FILE__" formats "__FILE__" - formats "\"foo\" \\\n \"bar\"" formats "\"foo\" \\\n \"bar\"" - formats "{\n query => <<-HEREDOC,\n foo\n HEREDOC\n}" formats "{\n query => <<-HEREDOC,\n foo\n HEREDOC\n}" - formats "def foo ( x ) \n end" formats "def foo ( x ) \n end" - formats "def a\n [\n 1, # x\n # y\n ]\nend" formats "def a\n [\n 1, # x\n # y\n ]\nend" - formats "x = 1\nx += 1" formats "x = 1\nx += 1" - formats "macro foo\n <<-FOO\n hello \n FOO\nend" formats "macro foo\n <<-FOO\n hello \n FOO\nend" - formats "$? = 1" formats "$? = 1" - formats "lib Foo\ntype Foo = Bar\nend" formats "lib Foo\ntype Foo = Bar\nend" - formats "foo.[1]" formats "foo.[1]" - formats "def foo(**b, # comment\n &block)\nend" formats "def foo(**b, # comment\n &block)\nend" - formats "x : (A -> B)?" formats "x : (A -> B)?" - formats "1 || 2" formats "1 || 2" - formats "{ {1, 2, 3} }" formats "{ {1, 2, 3} }" - formats "def foo\n {% for x in y %}\n foo + bar\n {% end %}\nend" formats "def foo\n {% for x in y %}\n foo + bar\n {% end %}\nend" - formats "[1, 2, 3, ]" formats "[1, 2, 3, ]" - formats "def foo(\n **a # comment\n)\n 1\nend" formats "def foo(\n **a # comment\n)\n 1\nend" - formats "struct Foo \n\n 1 \n\nend" formats "struct Foo \n\n 1 \n\nend" - formats "foo &.bar do\n 1 + 2\nend" formats "foo &.bar do\n 1 + 2\nend" - formats " [ 1 , 2 , 3 ] " formats " [ 1 , 2 , 3 ] " - formats "foo : A(B)\nbar : C" formats "foo : A(B)\nbar : C" - formats "...\n2" formats "...\n2" - formats "macro []=(x, y)\nend" formats "macro []=(x, y)\nend" - formats " .. 2" formats " .. 2" - formats "def foo(x) # bar\n # baz\nend" formats "def foo(x) # bar\n # baz\nend" - formats "begin\n1\nrescue ex : Int32 \n3\nend" formats "begin\n1\nrescue ex : Int32 \n3\nend" - formats "foo = 1\n->foo.foo" formats "foo = 1\n->foo.foo" - formats "::Tuple()" formats "::Tuple()" - formats ":-" formats ":-" - formats "asm(\n# foo\n\"nop\"\n# bar\n)" formats "asm(\n# foo\n\"nop\"\n# bar\n)" - formats "def foo\nend\n\n\n\ndef bar\nend" formats "def foo\nend\n\n\n\ndef bar\nend" - formats "def foo : (A | B(C))\n nil\nend" formats "def foo : (A | B(C))\n nil\nend" - formats "def foo\n1\nrescue\n2\nend" formats "def foo\n1\nrescue\n2\nend" - formats "<<-HTML\n \#{__FILE__}\n HTML" formats "<<-HTML\n \#{__FILE__}\n HTML" - formats "1 * 2" formats "1 * 2" - formats "\"foo \#{bar}\" \\\n \"baz\"" formats "\"foo \#{bar}\" \\\n \"baz\"" - formats "lib Foo\nfun foo() : Int32\nend" formats "lib Foo\nfun foo() : Int32\nend" - formats "lib Foo\n fun foo =\n \"bar\"(Int32) : Int32\nend" formats "lib Foo\n fun foo =\n \"bar\"(Int32) : Int32\nend" - formats "foo &.bar.nil?" formats "foo &.bar.nil?" - formats "->do\nx\nend" formats "->do\nx\nend" - formats "foo {;;1}" formats "foo {;;1}" - formats "a = \nif 1\n2\nend" formats "a = \nif 1\n2\nend" - formats "foo(\n 1,\n &.foo\n)" formats "foo(\n 1,\n &.foo\n)" - formats "# foo\na = 1 # bar" formats "# foo\na = 1 # bar" - formats "{1 => foo <<-X\nbar\nX\n}" formats "{1 => foo <<-X\nbar\nX\n}" - formats "def foo\nend\n\ndef bar\nend\n\n# foo" formats "def foo\nend\n\ndef bar\nend\n\n# foo" - formats "def foo(x)\n case 1\n when self // 2\n 3\n end\nend" formats "def foo(x)\n case 1\n when self // 2\n 3\n end\nend" - formats "x : {\"foo bar\": Int32}" formats "x : {\"foo bar\": Int32}" - formats "def foo=(x)\nend" formats "def foo=(x)\nend" - formats "foo &.bar.as(T)" formats "foo &.bar.as(T)" - formats "foo(bar([\n 1,\n]))" formats "foo(bar([\n 1,\n]))" - formats "1.=== do\nend" formats "1.=== do\nend" - formats "$~ = 1" formats "$~ = 1" - formats "foo do\n {{ foo <<-X\n bar\n X\n }}\nend" formats "foo do\n {{ foo <<-X\n bar\n X\n }}\nend" - formats "foo.[ 1 , 2 ]" formats "foo.[ 1 , 2 ]" - formats "foo = {1, {2,\n 3},\n 4}" formats "foo = {1, {2,\n 3},\n 4}" - formats "/foo/" formats "/foo/" - formats "foo : self? | A" formats "foo : self? | A" - formats "foo do | x , y | \n x \n end" formats "foo do | x , y | \n x \n end" - formats "macro foo # bar\n baz\nend" formats "macro foo # bar\n baz\nend" - formats "macro foo\n {% if true %}if true{% end %}\n {% if true %}end{% end %}\nend" formats "macro foo\n {% if true %}if true{% end %}\n {% if true %}end{% end %}\nend" - formats "-> : Int32 { }" formats "-> : Int32 { }" - formats "foo 1 , &bar" formats "foo 1 , &bar" - formats "foo[bar.baz]\n .qux" formats "foo[bar.baz]\n .qux" - formats "a = begin\n1\n2\nend" formats "a = begin\n1\n2\nend" - formats "if # some comment\n 2 # another\n 3 # final \n end # end " formats "if # some comment\n 2 # another\n 3 # final \n end # end " - formats "def foo(**z : Foo)\nend" formats "def foo(**z : Foo)\nend" - formats "{% if z %}\n 1\n{% end %}\n\ndef foo\n z =\n 123 + # foo\n 4 # bar\n\n 1\nend" formats "{% if z %}\n 1\n{% end %}\n\ndef foo\n z =\n 123 + # foo\n 4 # bar\n\n 1\nend" - formats "[\n <<-EOF,\n foo\n EOF\n]" formats "[\n <<-EOF,\n foo\n EOF\n]" - formats "unless a\nelse\n2\nend" formats "unless a\nelse\n2\nend" - formats ":^" formats ":^" - formats "@foo : Int32 # comment\n\ndef foo\nend" formats "@foo : Int32 # comment\n\ndef foo\nend" - formats "1 ||\n # foo\n 2" formats "1 ||\n # foo\n 2" - formats "if 1\nelse\n2\nend\n3" formats "if 1\nelse\n2\nend\n3" - formats "def foo(\n **a\n\n # comment\n)\n 1\nend" formats "def foo(\n **a\n\n # comment\n)\n 1\nend" - formats "foo &.as(T).bar" formats "foo &.as(T).bar" - formats "if a\n2; 3\nelse\n3\nend" formats "if a\n2; 3\nelse\n3\nend" - formats "foo &.[](1, 2)" formats "foo &.[](1, 2)" - formats "if 1\nfoo do | x , y | \n x \n end\nend" formats "if 1\nfoo do | x , y | \n x \n end\nend" - formats "if / /\nend" formats "if / /\nend" - formats "break" formats "break" - formats "[ # foo\n 1,\n]" formats "[ # foo\n 1,\n]" - formats "while 1\n2\nend" formats "while 1\n2\nend" - formats "1 + \\\n2 + \\\n3" formats "1 + \\\n2 + \\\n3" - formats "macro flags\n {% if 1 %}\\\n 1 {% else %}\\\n {% end %}\\\nend" formats "macro flags\n {% if 1 %}\\\n 1 {% else %}\\\n {% end %}\\\nend" - formats "foo[ 1 , 2 ] =3" formats "foo[ 1 , 2 ] =3" - formats "loop do\n 1\n loop do\n 2\n rescue\n 3\n end\n 4\nend" formats "loop do\n 1\n loop do\n 2\n rescue\n 3\n end\n 4\nend" - formats "case nil\nelse nil; nil # comment\nend" formats "case nil\nelse nil; nil # comment\nend" - formats "def %(x)\n 1\nend" formats "def %(x)\n 1\nend" - formats "while 1 # foo\nend" formats "while 1 # foo\nend" - formats "while 1 # foo\n # bar\n 2\nend" formats "while 1 # foo\n # bar\n 2\nend" - formats "def foo(\n foo,\n\n @[MyAnn]\n &block\n); end" formats "def foo(\n foo,\n\n @[MyAnn]\n &block\n); end" - formats "if 1\nbegin\n2\nensure\n3\nend\nend" formats "if 1\nbegin\n2\nensure\n3\nend\nend" - formats "alias X = (A, B) ->\nbar : C" formats "alias X = (A, B) ->\nbar : C" - formats "module Readline\n @@completion_proc : (String -> Array(String)?) | (String -> Array(String)) | Nil\nend" formats "module Readline\n @@completion_proc : (String -> Array(String)?) | (String -> Array(String)) | Nil\nend" - formats "call(foo <<-X\nbar\nX\n)" formats "call(foo <<-X\nbar\nX\n)" - formats "def foo(a, **b, # comment\n &block)\nend" formats "def foo(a, **b, # comment\n &block)\nend" - formats "# Hello\n#\n# ```\n# puts 1+2 # bye\n# 1+2 # hello\n#\n# 1+2\n# ```\n\n# ```\n# puts 1+2\n\n# ```\n# puts 1+2\n\n# Hola\n#\n# 1+2\n# foo do\n# 3+4\n# end\n\n# Hey\n#\n# 1+2\n# foo do\n# 3+4\n# end\n#\n# ```\n# 1+2\n# ```\n#\n# 1+2\n#\n# Bye\n" formats "# Hello\n#\n# ```\n# puts 1+2 # bye\n# 1+2 # hello\n#\n# 1+2\n# ```\n\n# ```\n# puts 1+2\n\n# ```\n# puts 1+2\n\n# Hola\n#\n# 1+2\n# foo do\n# 3+4\n# end\n\n# Hey\n#\n# 1+2\n# foo do\n# 3+4\n# end\n#\n# ```\n# 1+2\n# ```\n#\n# 1+2\n#\n# Bye\n" - formats "foo . is_a? ( Bar )" formats "foo . is_a? ( Bar )" - formats "1 # foo\n1234 # bar\n\n10 # bar" formats "1 # foo\n1234 # bar\n\n10 # bar" - formats "macro foo( x , y )\nend" formats "macro foo( x , y )\nend" - formats "def foo ( bar @select) \n end" formats "def foo ( bar @select) \n end" - formats "false" formats "false" - formats "next( 1 )" formats "next( 1 )" - formats "select \n when foo \n 2 \n when bar \n 3 \n end" formats "select \n when foo \n 2 \n when bar \n 3 \n end" - formats "if 1\n foo(\n 1,\n 2 # lala\n )\nend\n" formats "if 1\n foo(\n 1,\n 2 # lala\n )\nend\n" - formats "macro foo(x)\n {% if 1 %} 2 {% end %}\nend" formats "macro foo(x)\n {% if 1 %} 2 {% end %}\nend" - formats "foo.bar(1) # comment\n .baz" formats "foo.bar(1) # comment\n .baz" - formats "foo(a: 1 // 2)" formats "foo(a: 1 // 2)" - formats "if 1;\n2; end" formats "if 1;\n2; end" - formats "def foo(x)\n case //\n when //\n 3\n end\nend" formats "def foo(x)\n case //\n when //\n 3\n end\nend" - formats "1.<= { 3 }" formats "1.<= { 3 }" - formats "a = case 1\nwhen 2\n3\nend" formats "a = case 1\nwhen 2\n3\nend" - formats "if 1\n2 && 3\nend" formats "if 1\n2 && 3\nend" - formats "[c.x]\n .foo" formats "[c.x]\n .foo" - formats "def foo(&: Int32)\nend" formats "def foo(&: Int32)\nend" - formats "unless a\n2\n3\nend" formats "unless a\n2\n3\nend" - formats "->@@foo.foo=" formats "->@@foo.foo=" - formats "def foo\n\n1\n\nend" formats "def foo\n\n1\n\nend" - formats "-> : Int32 {}" formats "-> : Int32 {}" - formats "@x &&= 1" formats "@x &&= 1" - formats "<<-FOO\nfoo\n1\nFOO" formats "<<-FOO\nfoo\n1\nFOO" - formats "macro foo(\n a,\n *b,\n)\nend" formats "macro foo(\n a,\n *b,\n)\nend" - formats "{1 => 2, 3 => 4}\n{5234234 => 234098234, 7 => 8}" formats "{1 => 2, 3 => 4}\n{5234234 => 234098234, 7 => 8}" - formats "foo 1,\n2" formats "foo 1,\n2" - formats "1.as? Int32" formats "1.as? Int32" - formats "foo x, self // 1" formats "foo x, self // 1" - formats "@[Foo( 1, 2, foo: 3 )]" formats "@[Foo( 1, 2, foo: 3 )]" - formats "def foo(x)\n {% if true %}\n x = x + 2\n {% end %}\nend" formats "def foo(x)\n {% if true %}\n x = x + 2\n {% end %}\nend" - formats "if 1 # foo\n2\nend" formats "if 1 # foo\n2\nend" - formats "[] of (((Array(T))))" formats "[] of (((Array(T))))" - formats "->( x : Int32 , y ) { x }" formats "->( x : Int32 , y ) { x }" - formats "foo : StaticArray(Foo, 12)[34]" formats "foo : StaticArray(Foo, 12)[34]" - formats "{ {1}.foo, 2 }" formats "{ {1}.foo, 2 }" - formats "{\n1 => 2 ,\n 3 => 4 }" formats "{\n1 => 2 ,\n 3 => 4 }" - formats "foo(1 ||\n # foo\n 2)" formats "foo(1 ||\n # foo\n 2)" - formats "-> :: foo?" formats "-> :: foo?" - formats "<<-HTML\n \#{1}x\n y\n z\n HTML" formats "<<-HTML\n \#{1}x\n y\n z\n HTML" - formats "lib Foo\n fun foo = \"bar\"(Int32) : Int32\nend" formats "lib Foo\n fun foo = \"bar\"(Int32) : Int32\nend" - formats "foo(1,\n &.bar)" formats "foo(1,\n &.bar)" - formats "foo[1, &.bar]?" formats "foo[1, &.bar]?" - formats "[\n# foo\n] of String" formats "[\n# foo\n] of String" - formats "begin\n begin\n a\n # b\n end\nend" formats "begin\n begin\n a\n # b\n end\nend" - formats "foo : (Array(String)?) | String" formats "foo : (Array(String)?) | String" - formats "foo.bar &.baz( 1 , 2 )" formats "foo.bar &.baz( 1 , 2 )" - formats "def foo(\n a,\n &block\n)\nend" formats "def foo(\n a,\n &block\n)\nend" - formats "foo(A |\nB |\nC)" formats "foo(A |\nB |\nC)" - formats "case 1 \n in Int32 \n 3 \n end" formats "case 1 \n in Int32 \n 3 \n end" - formats "def foo\n 1\nend\n\n# Comment\n\ndef bar\n 2\nend" formats "def foo\n 1\nend\n\n# Comment\n\ndef bar\n 2\nend" - formats "a(&.b.c.as(C))" formats "a(&.b.c.as(C))" - formats " <<-EOF\n 1\n EOF" formats " <<-EOF\n 1\n EOF" - formats "def foo(a : T) forall T\n #\n\n\nend" formats "def foo(a : T) forall T\n #\n\n\nend" - formats "foo ( )" formats "foo ( )" - formats "foo(\n <<-HERE,\n hello\n HERE\n # foo\n foo: 1,\n)" formats "foo(\n <<-HERE,\n hello\n HERE\n # foo\n foo: 1,\n)" - formats "(())" formats "(())" - formats "unless a\n2\nend" formats "unless a\n2\nend" - formats "foo({\n 1 => 2,\n 3 => 4,\n 5 => 6,\n})" formats "foo({\n 1 => 2,\n 3 => 4,\n 5 => 6,\n})" - formats "foo : (A) | D" formats "foo : (A) | D" - formats "lib Foo\n fun foo = bar(Int32) : Int32\nend" formats "lib Foo\n fun foo = bar(Int32) : Int32\nend" - formats "begin\n 1\n # Comment\n\n\nend" formats "begin\n 1\n # Comment\n\n\nend" - formats "Foo::Bar(T, U?)?" formats "Foo::Bar(T, U?)?" - formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar,\n\n @[MyAnn] baz\n); end" formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar,\n\n @[MyAnn] baz\n); end" - formats "lib LibFoo\n {% begin %}\n fun foo : Int32\n {% end %}\nend" formats "lib LibFoo\n {% begin %}\n fun foo : Int32\n {% end %}\nend" - formats "module Moo ( T )\nend" formats "module Moo ( T )\nend" - formats "break *1 ,2" formats "break *1 ,2" - formats "1 +\n # foo\n 2" formats "1 +\n # foo\n 2" - formats " ( 1; 2; 3 ) " formats " ( 1; 2; 3 ) " - formats "def foo(x)\n {% if true %}\n \\{% if true %}\n x = 1\n \\{% else %}\n x = 2\n \\{% end %}\n \\{% for x in y %}\n x = 1\n \\{% end %}\n \\{{x}}\n \\{% x %}\n {% end %}\nend" formats "def foo(x)\n {% if true %}\n \\{% if true %}\n x = 1\n \\{% else %}\n x = 2\n \\{% end %}\n \\{% for x in y %}\n x = 1\n \\{% end %}\n \\{{x}}\n \\{% x %}\n {% end %}\nend" - formats "if 1 &&\n (2 || 3)\n 1\nelse\n 2\nend" formats "if 1 &&\n (2 || 3)\n 1\nelse\n 2\nend" - formats "{\n \"a\" => 1, \"b\" => 2,\n \"foo\" => 3, \"bar\" => 4,\n \"coconio\" => 5, \"lala\" => 6,\n}\n" formats "{\n \"a\" => 1, \"b\" => 2,\n \"foo\" => 3, \"bar\" => 4,\n \"coconio\" => 5, \"lala\" => 6,\n}\n" - formats "Foo" formats "Foo" - formats "break( 1 )" formats "break( 1 )" - formats "a = / /" formats "a = / /" - formats "while 1;\n2; end" formats "while 1;\n2; end" - formats "foo 1,\na: 1,\nb: 2,\nc: 3" formats "foo 1,\na: 1,\nb: 2,\nc: 3" - formats "def foo(@[AnnOne] @[AnnTwo] v); end" formats "def foo(@[AnnOne] @[AnnTwo] v); end" - formats "foo({\nbar: 1,\n})" formats "foo({\nbar: 1,\n})" - formats "{%\n if 1\n 2\n end\n%}" formats "{%\n if 1\n 2\n end\n%}" - formats "<<-HEREDOC\n \#{foo}\n H\#{bar}\n HEREDOC" formats "<<-HEREDOC\n \#{foo}\n H\#{bar}\n HEREDOC" - formats "- 1" formats "- 1" - formats "foo self // 1" formats "foo self // 1" - formats "asm(\"a\" : : :: \"volatile\")" formats "asm(\"a\" : : :: \"volatile\")" - formats "abstract class Foo\nend" formats "abstract class Foo\nend" - formats "def foo(a,\n *b)\nend" formats "def foo(a,\n *b)\nend" - formats "lib Foo\nfun foo( ... ) : Int32\nend" formats "lib Foo\nfun foo( ... ) : Int32\nend" - formats "def foo\n a = 1; # foo\n a = 2; # bar\nend\n" formats "def foo\n a = 1; # foo\n a = 2; # bar\nend\n" - formats "{ # foo\n 1 => 2,\n}" formats "{ # foo\n 1 => 2,\n}" - formats "a = 1\n;\nb = 2" formats "a = 1\n;\nb = 2" - formats "next *1 , *2" formats "next *1 , *2" - formats "1 \\\n+ 2" formats "1 \\\n+ 2" - formats "foo : Foo*****" formats "foo : Foo*****" - formats "begin\n1\nensure\n2\nend" formats "begin\n1\nensure\n2\nend" - formats "&- 1" formats "&- 1" - formats "macro foo\n {% if 1 %} 2 {% else %} 3 {% end %}\nend" formats "macro foo\n {% if 1 %} 2 {% else %} 3 {% end %}\nend" - formats "[1, 2, 3] of Foo" formats "[1, 2, 3] of Foo" - formats "case 1\nwhen 2\n#comment\nend" formats "case 1\nwhen 2\n#comment\nend" - formats "def foo\na = bar do\n1\nend\nend" formats "def foo\na = bar do\n1\nend\nend" - formats "10 / a" formats "10 / a" - formats "if a\nelse\n2\nend" formats "if a\nelse\n2\nend" - formats "def a\n b(\n 1, # x\n # y\n 2\n )\nend" formats "def a\n b(\n 1, # x\n # y\n 2\n )\nend" - formats "begin; 1; end" formats "begin; 1; end" - formats "+ 1" formats "+ 1" - formats "def foo ( @select) \n end" formats "def foo ( @select) \n end" - formats "A = 1\nFOO = 2\n\nEX = 3" formats "A = 1\nFOO = 2\n\nEX = 3" - formats "asm(\"nop\" ::: \"eax\" )" formats "asm(\"nop\" ::: \"eax\" )" - formats "def foo\n 1\n #\nrescue\nend" formats "def foo\n 1\n #\nrescue\nend" - formats "[\n # foo\n 1,\n\n # bar\n 2,\n]" formats "[\n # foo\n 1,\n\n # bar\n 2,\n]" - formats "def execute\n begin\n 1\n ensure\n 2\n end\n 3\nend" formats "def execute\n begin\n 1\n ensure\n 2\n end\n 3\nend" - formats "foo : self?" formats "foo : self?" - formats "\"\#{foo = 1\n}\"" formats "\"\#{foo = 1\n}\"" - formats "foo.% bar" formats "foo.% bar" - formats "def foo(x) : Int32 # bar\n # baz\nend" formats "def foo(x) : Int32 # bar\n # baz\nend" - formats "def foo\n 1\n # Comment\n\n\nend" formats "def foo\n 1\n # Comment\n\n\nend" - formats "a = foo(bar(\n 1,\n 2,\n))" formats "a = foo(bar(\n 1,\n 2,\n))" - formats "break 1" formats "break 1" - formats "{%\n if true\n 1\n else\n 2\n end\n%}" formats "{%\n if true\n 1\n else\n 2\n end\n%}" - formats "<<-HTML\n \#{\"fo\#{\"o\"}\"}\n HTML" formats "<<-HTML\n \#{\"fo\#{\"o\"}\"}\n HTML" - formats "if 1\n[ 1 , 2 , 3 ]\nend" formats "if 1\n[ 1 , 2 , 3 ]\nend" - formats "lib Foo\n fun foo =\n \"bar\"(Int32) : Int32\n # comment\nend" formats "lib Foo\n fun foo =\n \"bar\"(Int32) : Int32\n # comment\nend" - formats "{\n 1 => 2,\n 10 => 30,\n 30 => 40,\n \"foobar\" => 50,\n \"coco\" => 60,\n}" formats "{\n 1 => 2,\n 10 => 30,\n 30 => 40,\n \"foobar\" => 50,\n \"coco\" => 60,\n}" - formats "::NamedTuple()" formats "::NamedTuple()" - formats "def foo(a : T) forall T \n #\nend" formats "def foo(a : T) forall T \n #\nend" - formats " 1" formats " 1" - formats "while / /\nend" formats "while / /\nend" - formats "foo 1, a: 1,\nb: 2,\nc: 3" formats "foo 1, a: 1,\nb: 2,\nc: 3" - formats "foo(\n 1,\n # 2,\n 3,\n)" formats "foo(\n 1,\n # 2,\n 3,\n)" - formats "1 + 2" formats "1 + 2" - formats "\n# hello\n\n1" formats "\n# hello\n\n1" - formats "foo(1 &- 2)" formats "foo(1 &- 2)" - formats "->{}" formats "->{}" - formats "foo &.nil?()" formats "foo &.nil?()" - formats "break 1 , *2" formats "break 1 , *2" - formats "[\n a(),\n]" formats "[\n a(),\n]" - formats "include Foo" formats "include Foo" - formats "b &.[c].d" formats "b &.[c].d" - formats "class Foo # foo\nend" formats "class Foo # foo\nend" - formats "foo(\"b\#{1}\" \\\n\"baz\")" formats "foo(\"b\#{1}\" \\\n\"baz\")" - formats "asm(\"nop\" : : )" formats "asm(\"nop\" : : )" - formats "lib Bar\n enum Foo\n A = 1\n end\nend" formats "lib Bar\n enum Foo\n A = 1\n end\nend" - formats "# ```text\n# 1 + 2\n# ```" formats "# ```text\n# 1 + 2\n# ```" - formats "foo . bar = 1" formats "foo . bar = 1" - formats "lib Foo\n fun Foo = Bar\nend" formats "lib Foo\n fun Foo = Bar\nend" - formats "foo . bar( x , y )" formats "foo . bar( x , y )" - formats "lib Foo\nfun foo\nend" formats "lib Foo\nfun foo\nend" - formats "def foo ( x , y , ) \n end" formats "def foo ( x , y , ) \n end" - formats "[1,\n2,\n3]" formats "[1,\n2,\n3]" - formats "foo do\n [foo <<-X\n bar\n X\n ]\nend" formats "foo do\n [foo <<-X\n bar\n X\n ]\nend" - formats "alias Foo::Bar =Baz" formats "alias Foo::Bar =Baz" - formats "10/a" formats "10/a" - formats "macro foo\n def bar\n {{\n 1 + 2\n }}\n end\nend" formats "macro foo\n def bar\n {{\n 1 + 2\n }}\n end\nend" - formats "def foo( x , & block : ->)\nend" formats "def foo( x , & block : ->)\nend" - formats "def foo(x : (self)?)\nend" formats "def foo(x : (self)?)\nend" - formats "foo(a: //)" formats "foo(a: //)" - formats "Foo(\"bar\": Int32, \"baz qux\": Float64)" formats "Foo(\"bar\": Int32, \"baz qux\": Float64)" - formats "if 1\ncase 1\nwhen 2\n3\nend\nend" formats "if 1\ncase 1\nwhen 2\n3\nend\nend" - formats "def foo(@[AnnOne] @[AnnTwo] & ); end" formats "def foo(@[AnnOne] @[AnnTwo] & ); end" - formats "->{1}" formats "->{1}" - formats "begin\n1\nrescue Int32 \n3\nend" formats "begin\n1\nrescue Int32 \n3\nend" - formats "def foo\n 1\n #\n\n\nrescue\nend" formats "def foo\n 1\n #\n\n\nrescue\nend" - adds `&` to yielding methods that don't have a block parameter (#8764) - formats "def foo\n yield\nend" formats "def foo\n yield\nend" - formats "def foo(a, **b)\n yield\nend" formats "def foo(a, **b)\n yield\nend" - formats "def foo(x,\ny,)\n yield\nend" formats "def foo(x,\ny,)\n yield\nend" - formats "def foo(\nx)\n yield\nend" formats "def foo(\nx)\n yield\nend" - formats "def foo(\nx,\n)\n yield\nend" formats "def foo(\nx,\n)\n yield\nend" - formats "def foo(\nx, y)\n yield\nend" formats "def foo(\nx, y)\n yield\nend" - formats "def foo(\nx,\ny)\n yield\nend" formats "def foo(\nx,\ny)\n yield\nend" - formats "def foo(x ,)\n yield\nend" formats "def foo(x ,)\n yield\nend" - formats "def foo # bar\n yield\nend" formats "def foo # bar\n yield\nend" - formats "def foo()\n yield\nend" formats "def foo()\n yield\nend" - formats "def foo(\n)\n yield\nend" formats "def foo(\n)\n yield\nend" - formats "def foo(x)\n yield\nend" formats "def foo(x)\n yield\nend" - formats "macro f\n yield\n {{ yield }}\nend" formats "macro f\n yield\n {{ yield }}\nend" - formats "def foo(x\n)\n yield\nend" formats "def foo(x\n)\n yield\nend" - formats "def foo(x,\ny)\n yield\nend" formats "def foo(x,\ny)\n yield\nend" - formats "def foo(x,\n)\n yield\nend" formats "def foo(x,\n)\n yield\nend" - formats "module Foo;end" formats "module Foo;end" - formats "return *1 , *2" formats "return *1 , *2" - formats "{\n 1 => 2, 3 => 4,\n 567 => 8910,\n}" formats "{\n 1 => 2, 3 => 4,\n 567 => 8910,\n}" - formats "a &.b.c.as C" formats "a &.b.c.as C" - formats "'\\n'" formats "'\\n'" - formats "if 1\n return foo(\n 1,\n 2,\n )\nend" formats "if 1\n return foo(\n 1,\n 2,\n )\nend" - formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1),\n\"c\"(2) )" formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1),\n\"c\"(2) )" - formats "a = if 1\n2\nelse\n3\nend" formats "a = if 1\n2\nelse\n3\nend" - formats " * a = 1 " formats " * a = 1 " - formats "macro foo\n %foo{x,y}\nend" formats "macro foo\n %foo{x,y}\nend" - formats "class Foo \n\n 1 \n\nend" formats "class Foo \n\n 1 \n\nend" - formats "%{hello}" formats "%{hello}" - formats "lib Foo\n fun foo = bar(Int32) : Int32\nend" formats "lib Foo\n fun foo = bar(Int32) : Int32\nend" - formats "a = b = 1\na, b =\n b, a" formats "a = b = 1\na, b =\n b, a" - formats "enum Foo : Int32\nA = 1\ndef foo\n1\nend\nend" formats "enum Foo : Int32\nA = 1\ndef foo\n1\nend\nend" - formats "foo(\n 1, # hola\n2, # chau\n )" formats "foo(\n 1, # hola\n2, # chau\n )" - formats "foo(1 &+ \n2)" formats "foo(1 &+ \n2)" - formats "{ foo: 1 }" formats "{ foo: 1 }" - formats "class Bar\nprotected def foo(x)\na=b(c)\nend\nend" formats "class Bar\nprotected def foo(x)\na=b(c)\nend\nend" - formats "foo(bar(\n 1,\n baz(\n 2,\n 3,\n )\n))" formats "foo(bar(\n 1,\n baz(\n 2,\n 3,\n )\n))" - formats "x : Int32 = 1" formats "x : Int32 = 1" - formats "def foo ( x : Foo.class ) \n end" formats "def foo ( x : Foo.class ) \n end" - formats "asm(\n\"nop\" : \"a\"(0), \"b\"(1) )" formats "asm(\n\"nop\" : \"a\"(0), \"b\"(1) )" - formats "1 if nil?\na.b + c" formats "1 if nil?\na.b + c" - formats "if a\n2\nelse\nend" formats "if a\n2\nelse\nend" - formats "10 ** a" formats "10 ** a" - formats "enum Foo; A = 1; end" formats "enum Foo; A = 1; end" - formats "asm(\"a\" : \"b\"(c) : \"d\"(e) :: \"volatile\")" formats "asm(\"a\" : \"b\"(c) : \"d\"(e) :: \"volatile\")" - formats "1#foo" formats "1#foo" - formats "foo([\n 1,\n 2,\n 3,\n])" formats "foo([\n 1,\n 2,\n 3,\n])" - formats "a, b = \nif 1\n2\nend" formats "a, b = \nif 1\n2\nend" - formats "if 1\n foo(\n bar\n # comment\n )\nend" formats "if 1\n foo(\n bar\n # comment\n )\nend" - formats "class Foo\n def foo\n # nothing\n end\nend" formats "class Foo\n def foo\n # nothing\n end\nend" - formats "Foo( )" formats "Foo( )" - formats "begin\n query = <<-HEREDOC\n foo\n HEREDOC\nend" formats "begin\n query = <<-HEREDOC\n foo\n HEREDOC\nend" - formats "->Foo.foo?" formats "->Foo.foo?" - formats "def foo(\n **a\n # comment\n)\n 1\nend" formats "def foo(\n **a\n # comment\n)\n 1\nend" - formats "foo(1 + \n2)" formats "foo(1 + \n2)" - formats "yield 1 , \n2" formats "yield 1 , \n2" - formats "x 1, \\\n 2" formats "x 1, \\\n 2" - formats "->Foo.foo!" formats "->Foo.foo!" - formats ":&*" formats ":&*" - formats "foo(<<-X,\na\nX\n 1)" formats "foo(<<-X,\na\nX\n 1)" - formats "coco.lala\nfoo\n .bar" formats "coco.lala\nfoo\n .bar" - formats "if 1\n ((1) + 2)\nend" formats "if 1\n ((1) + 2)\nend" - formats "unless a\nunless b\nelse\n4\nend\nend" formats "unless a\nunless b\nelse\n4\nend\nend" - formats "NamedTuple(a: Int32,)" formats "NamedTuple(a: Int32,)" - formats "macro foo\n {{ 1 + 2 }}\nend" formats "macro foo\n {{ 1 + 2 }}\nend" - formats "%[hello]" formats "%[hello]" - formats "Union(Foo::Bar?, Baz?, Qux(T, U?))" formats "Union(Foo::Bar?, Baz?, Qux(T, U?))" - formats "foo([\n 1, 2,\n 3, 4,\n])" formats "foo([\n 1, 2,\n 3, 4,\n])" - formats "{% begin %}\n \"\n foo\"\n{% end %}" formats "{% begin %}\n \"\n foo\"\n{% end %}" - formats "\"foo\#{\"bar\"} Baz \#{\"qux\"} \"" formats "\"foo\#{\"bar\"} Baz \#{\"qux\"} \"" - formats "<<-HTML\n \#{\"foo\"}\n HTML" formats "<<-HTML\n \#{\"foo\"}\n HTML" - formats "asm(\"nop\" : \"a\"(0) : \"b\"(1), \"c\"(2) )" formats "asm(\"nop\" : \"a\"(0) : \"b\"(1), \"c\"(2) )" - formats "<<-FOO\n1\nFOO\n\n{\n 1 => 2,\n 10 => 3,\n}" formats "<<-FOO\n1\nFOO\n\n{\n 1 => 2,\n 10 => 3,\n}" - formats "def foo \n end" formats "def foo \n end" - formats "{ # foo\n 1,\n}" formats "{ # foo\n 1,\n}" - formats "foo &.as?(T).bar" formats "foo &.as?(T).bar" - formats "foo[x: 1, &.bar] = 1" formats "foo[x: 1, &.bar] = 1" - formats "def foo(a, &@b)\nend" formats "def foo(a, &@b)\nend" - formats "foo.as? Int32*" formats "foo.as? Int32*" - formats "foo.[ 1 , 2 ] =3" formats "foo.[ 1 , 2 ] =3" - formats "1.=== { 3 }" formats "1.=== { 3 }" - formats "nil" formats "nil" - formats " ((1) + 2)" formats " ((1) + 2)" - formats "module Foo ( U, *T ); 1; end" formats "module Foo ( U, *T ); 1; end" - formats "if 1\n2 # foo\nend" formats "if 1\n2 # foo\nend" - formats "next( 1 , 2 )" formats "next( 1 , 2 )" - formats "$1?" formats "$1?" - formats "a = 1 + # foo\n2" formats "a = 1 + # foo\n2" - formats "def a\n b(\n 1, # x\n # y\n a: 1, # x\n # y\n b: 2 # z\n )\nend" formats "def a\n b(\n 1, # x\n # y\n a: 1, # x\n # y\n b: 2 # z\n )\nend" - formats "1.[]=(2) { 3 }" formats "1.[]=(2) { 3 }" - formats "foo : (String -> Array(String)?) | (String -> Array(String)) | Nil" formats "foo : (String -> Array(String)?) | (String -> Array(String)) | Nil" - formats "{ 1 => 2 , 3 => 4 }" formats "{ 1 => 2 , 3 => 4 }" - formats "def foo(x)\n case self // x\n when 2\n 3\n end\nend" formats "def foo(x)\n case self // x\n when 2\n 3\n end\nend" - formats "macro foo\n {% for x in y %}\\ 2 {% end %}\\\nend" formats "macro foo\n {% for x in y %}\\ 2 {% end %}\\\nend" - formats "x\n# foo\n\n# bar" formats "x\n# foo\n\n# bar" - formats "1\n\n2" formats "1\n\n2" - formats "{ %() }" formats "{ %() }" - formats "1 + \\\n2" formats "1 + \\\n2" - formats "macro foo\n %foo{x.id+2}\nend" formats "macro foo\n %foo{x.id+2}\nend" - formats "if 1 &&\n2 &&\n3\n4\nend" formats "if 1 &&\n2 &&\n3\n4\nend" - formats "foo(1, ) { }" formats "foo(1, ) { }" - formats "foo(1, / /)" formats "foo(1, / /)" - formats "a=1" formats "a=1" - formats "def foo : self | Nil\n nil\nend" formats "def foo : self | Nil\n nil\nend" - formats "%(hello)" formats "%(hello)" - formats "foo &.[]?" formats "foo &.[]?" - formats "class Foo\n macro foo\n 1 + 2 \n end\n end" formats "class Foo\n macro foo\n 1 + 2 \n end\n end" - formats "a &.b.as(C)" formats "a &.b.as(C)" - formats "\"\#{\"foo\"}\"" formats "\"\#{\"foo\"}\"" - formats "alias A = ({A, (B)})" formats "alias A = ({A, (B)})" - formats "foo({% verbatim do %}{{1}} + {{2}}{% end %})" formats "foo({% verbatim do %}{{1}} + {{2}}{% end %})" - formats "foo.[] = 1" formats "foo.[] = 1" - formats "foo = 1\n->foo.bar(Int32*)" formats "foo = 1\n->foo.bar(Int32*)" - formats "fun foo(\n x : Int32,\n ...\n) : Int32\n 1\nend" formats "fun foo(\n x : Int32,\n ...\n) : Int32\n 1\nend" - formats "def foo\n 1\n 2\nrescue IO\n 1\nend" formats "def foo\n 1\n 2\nrescue IO\n 1\nend" - formats "$?.bar" formats "$?.bar" - formats "def foo(x)\n {% if true %}\n # comment\n Foo = 1\n B = 2\n {% end %}\nend" formats "def foo(x)\n {% if true %}\n # comment\n Foo = 1\n B = 2\n {% end %}\nend" - formats "Set{ # foo\n 1,\n}" formats "Set{ # foo\n 1,\n}" - formats "1.==() { 3 }" formats "1.==() { 3 }" - formats " case 1\n when 2\n 3\n else #:newline, :eof\n 1 if 2\n return 3\n end\n" formats " case 1\n when 2\n 3\n else #:newline, :eof\n 1 if 2\n return 3\n end\n" - formats "1 +\n # foo\n 2" formats "1 +\n # foo\n 2" - formats "{ 1 => 2 }" formats "{ 1 => 2 }" - formats "->{\n # first comment\n puts \"hi\"\n # second comment\n}" formats "->{\n # first comment\n puts \"hi\"\n # second comment\n}" - formats "foo(\n 1,\n # 2,\n # 3,\n)" formats "foo(\n 1,\n # 2,\n # 3,\n)" - formats "->(x : Int32) { }" formats "->(x : Int32) { }" - formats "foo . responds_to? :bar" formats "foo . responds_to? :bar" - formats "foo &.[]?(1, 2)" formats "foo &.[]?(1, 2)" - formats "a = if 1\n2\nelsif 3\n4\nend" formats "a = if 1\n2\nelsif 3\n4\nend" - formats "1 && (\n 2 || 3\n)" formats "1 && (\n 2 || 3\n)" - formats "yield *1" formats "yield *1" - formats "yield( *1 , *2 )" formats "yield( *1 , *2 )" - formats "0i64" formats "0i64" - formats "offsetof( String, @length )" formats "offsetof( String, @length )" - formats "Foo( * T, { * A ,*\n B } )" formats "Foo( * T, { * A ,*\n B } )" - formats "a = foo(bar(baz3 do\nend))" formats "a = foo(bar(baz3 do\nend))" - formats "x : {A, B, }" formats "x : {A, B, }" - formats "macro foo\n \\{\nend" formats "macro foo\n \\{\nend" - formats " macro foo\n end\n\n :+" formats " macro foo\n end\n\n :+" - formats "foo.as ( Int32* )" formats "foo.as ( Int32* )" - formats "def foo(\n @[MyAnn]\n bar\n); end" formats "def foo(\n @[MyAnn]\n bar\n); end" - formats "instance_alignof( Int32 )" formats "instance_alignof( Int32 )" - formats "alias A = ( A | B )" formats "alias A = ( A | B )" - formats "def foo : A(B)\n nil\nend" formats "def foo : A(B)\n nil\nend" - formats "foo(\n <<-HERE,\n hello\n HERE\n foo: 1,\n)" formats "foo(\n <<-HERE,\n hello\n HERE\n foo: 1,\n)" - formats "begin\n 1 + \\\n 2\n 3\nend" formats "begin\n 1 + \\\n 2\n 3\nend" - formats "x : (A -> )" formats "x : (A -> )" - formats "asm(\"nop\" :: )" formats "asm(\"nop\" :: )" - formats "bla.select(&.all?{ |x| x } )" formats "bla.select(&.all?{ |x| x } )" - formats "macro foo()\n {% if 1 %} 2 {% end %}\nend" formats "macro foo()\n {% if 1 %} 2 {% end %}\nend" - formats "foo = 1\n->foo.[](Int32)" formats "foo = 1\n->foo.[](Int32)" - formats "class Foo\n@x : Int32\nend" formats "class Foo\n@x : Int32\nend" - formats "a = while 1\n2\nend" formats "a = while 1\n2\nend" - formats "def foo(\n **a\n)\n 1\nend" formats "def foo(\n **a\n)\n 1\nend" - formats "foo 1, a: 1,\nb: 2,\nc: 3,\n&block" formats "foo 1, a: 1,\nb: 2,\nc: 3,\n&block" - formats "+ a + d" formats "+ a + d" - formats "\n# hello\n1" formats "\n# hello\n1" - formats "asm(\"nop\" ::: \"eax\" , \"ebx\" : \"volatile\" , \"alignstack\" )" formats "asm(\"nop\" ::: \"eax\" , \"ebx\" : \"volatile\" , \"alignstack\" )" - formats "def foo ( x : self ) \n end" formats "def foo ( x : self ) \n end" - formats "lib Foo\n fun foo =\n bar : Void\nend" formats "lib Foo\n fun foo =\n bar : Void\nend" - formats "class X; annotation FooAnnotation ; end ; end" formats "class X; annotation FooAnnotation ; end ; end" - formats "lib Foo::Bar\nend" formats "lib Foo::Bar\nend" - formats "String???" formats "String???" - formats "macro foo(x, *, z)\nend" formats "macro foo(x, *, z)\nend" - formats "# Hello\n#\n# ```crystal\n# 1\n# ```\n# Bye" formats "# Hello\n#\n# ```crystal\n# 1\n# ```\n# Bye" - formats "def foo ( x , y ,\n) \n end" formats "def foo ( x , y ,\n) \n end" - formats "a = if 1\n2\n3\nend" formats "a = if 1\n2\n3\nend" - formats "macro foo\nend" formats "macro foo\nend" - formats "def foo(@[MyAnn] &block); end" formats "def foo(@[MyAnn] &block); end" - formats "def foo(x : X) forall X , Y; end" formats "def foo(x : X) forall X , Y; end" - formats "1 \\\nensure 2" formats "1 \\\nensure 2" - formats "String?" formats "String?" - formats "foo : (A -> B)\nbar : C" formats "foo : (A -> B)\nbar : C" - formats "a[1] , b[2] = 1 , 2" formats "a[1] , b[2] = 1 , 2" - formats "macro foo\n 1 \n {{ \n 42 \n }} \n 2 \nend" formats "macro foo\n 1 \n {{ \n 42 \n }} \n 2 \nend" - formats "def foo\nselect \n when foo \n 2 \n else \n 3 \nend\nend" formats "def foo\nselect \n when foo \n 2 \n else \n 3 \nend\nend" - formats "require \"foo\"" formats "require \"foo\"" - formats "1.<= do\nend" formats "1.<= do\nend" - formats "def foo\n1\nend" formats "def foo\n1\nend" - formats "foo . is_a? Bar" formats "foo . is_a? Bar" - formats "0_u64" formats "0_u64" - formats "foo(out x)" formats "foo(out x)" - formats "alias Foo = Bar" formats "alias Foo = Bar" - formats "class X\n annotation FooAnnotation \n end \n end" formats "class X\n annotation FooAnnotation \n end \n end" - formats "foo . bar" formats "foo . bar" - formats "0u64" formats "0u64" - formats "[1, 2,\n 3, 4]\n" formats "[1, 2,\n 3, 4]\n" - formats "1.!= { 3 }" formats "1.!= { 3 }" - formats "\"\" + <<-END\n bar\n END" formats "\"\" + <<-END\n bar\n END" - formats "foo ((1) ? 2 : 3)" formats "foo ((1) ? 2 : 3)" - formats "def foo(x)\n self // x\nend" formats "def foo(x)\n self // x\nend" - formats "asm(\"nop\"\n: \"a\"(0) )" formats "asm(\"nop\"\n: \"a\"(0) )" - formats "->@foo.foo?" formats "->@foo.foo?" - formats "def foo(a, **b : Int32)\nend" formats "def foo(a, **b : Int32)\nend" - formats "x.is_a? T\n3\n" formats "x.is_a? T\n3\n" - formats "{% if z %}\n class Foo\n end\n{% end %}" formats "{% if z %}\n class Foo\n end\n{% end %}" - formats "class Foo\n1\n\n# foo\nend" formats "class Foo\n1\n\n# foo\nend" - formats "break { {1, 2}, {3, 4} }, 5" formats "break { {1, 2}, {3, 4} }, 5" - formats "foo.bar += \n1" formats "foo.bar += \n1" - formats "{\n variables => true,\n query => <<-HEREDOC,\n foo\n HEREDOC\n foo => true,\n}" formats "{\n variables => true,\n query => <<-HEREDOC,\n foo\n HEREDOC\n foo => true,\n}" - formats "10//a" formats "10//a" - formats " <<-HTML\n \#{1}\n HTML" formats " <<-HTML\n \#{1}\n HTML" - formats "asm(\"nop\" ::: \"eax\" , \"ebx\" )" formats "asm(\"nop\" ::: \"eax\" , \"ebx\" )" - formats "Foo:: Bar" formats "Foo:: Bar" - formats "1 ; 2" formats "1 ; 2" - formats "foo { | a, ( b , c, ), | a + b + c }" formats "foo { | a, ( b , c, ), | a + b + c }" - formats "foo(1,\n2,\n)" formats "foo(1,\n2,\n)" - formats "-> do\nend" formats "-> do\nend" - formats "struct Foo(T)\n# bar\n1\nend" formats "struct Foo(T)\n# bar\n1\nend" - formats "unless a\n2; 3\nelse\n3\nend" formats "unless a\n2; 3\nelse\n3\nend" - formats "foo bar # comment\n\n# doc\ndef baz; end" formats "foo bar # comment\n\n# doc\ndef baz; end" - formats "break { {1, 2}, {3, 4} }" formats "break { {1, 2}, {3, 4} }" - formats "a &.!" formats "a &.!" - formats "foo.@bar" formats "foo.@bar" - formats "def foo ( @@select) \n end" formats "def foo ( @@select) \n end" - formats "1\n2\n# foo" formats "1\n2\n# foo" - formats "alias A = (B(C, (C | D)) | E)" formats "alias A = (B(C, (C | D)) | E)" - formats "{% if flag?(:freebsd) %}\n 1 + 2\n{% end %}\n\ncase x\nwhen 1234 then 1\nelse x\nend" formats "{% if flag?(:freebsd) %}\n 1 + 2\n{% end %}\n\ncase x\nwhen 1234 then 1\nelse x\nend" - formats "asm(\"nop\" : \"a\"(0), \"b\"(1) )" formats "asm(\"nop\" : \"a\"(0), \"b\"(1) )" - formats "Set { 1 , 2 }" formats "Set { 1 , 2 }" - formats "ary.size = (1).to_i" formats "ary.size = (1).to_i" - formats "module Moo \n\n 1 \n\nend" formats "module Moo \n\n 1 \n\nend" - formats "1_234" formats "1_234" - formats "foo(1, # foo\n &.bar)" formats "foo(1, # foo\n &.bar)" - formats "@x[ 1 ] += 2" formats "@x[ 1 ] += 2" - gives proper line number in syntax error inside macro gives proper line number in syntax error inside macro - formats "alias A = (B) -> C" formats "alias A = (B) -> C" - formats "foo.as Int32*" formats "foo.as Int32*" - formats "alias Foo=\nBar" formats "alias Foo=\nBar" - formats "@[Foo()]" formats "@[Foo()]" - formats "foo { | a, ( b , c ) | a + b + c }" formats "foo { | a, ( b , c ) | a + b + c }" - formats "foo.bar. as Int32" formats "foo.bar. as Int32" - formats "::foo(1, 2)" formats "::foo(1, 2)" - formats "if 1\nelse\n2 # foo\nend" formats "if 1\nelse\n2 # foo\nend" - formats "def foo ( @x) \n end" formats "def foo ( @x) \n end" - formats "enum Foo\n A; B; C\nend\n" formats "enum Foo\n A; B; C\nend\n" - formats "is_a? Foo" formats "is_a? Foo" - formats "<<-HTML\n hello \n HTML" formats "<<-HTML\n hello \n HTML" - formats "\"hello\"" formats "\"hello\"" - formats "foo\n .foo1(bar\n .bar1\n .bar2)" formats "foo\n .foo1(bar\n .bar1\n .bar2)" - formats "\"1\#{\"4\#{\"\#{\"2\"}\"}3\"}3\#{__DIR__}4\#{5}6\"" formats "\"1\#{\"4\#{\"\#{\"2\"}\"}3\"}3\#{__DIR__}4\#{5}6\"" - formats "1.>= do\nend" formats "1.>= do\nend" - formats "class Foo ( T )\nend" formats "class Foo ( T )\nend" - formats ":&+" formats ":&+" - formats "return" formats "return" - formats "foo(\n 1, 2, &block)" formats "foo(\n 1, 2, &block)" - formats "def foo\n1\nensure\n2\nend" formats "def foo\n1\nensure\n2\nend" - formats "bar = foo(->do\n 1 + 2\nend)" formats "bar = foo(->do\n 1 + 2\nend)" - formats "select\nwhen foo\n # foo\n # bar\nelse\n # foo\n # bar\nend" formats "select\nwhen foo\n # foo\n # bar\nelse\n # foo\n # bar\nend" - formats "-> { }" formats "-> { }" - formats "->() do x end" formats "->() do x end" - formats "def foo : (A, B) ->\n nil\nend" formats "def foo : (A, B) ->\n nil\nend" - formats "#### ###" formats "#### ###" - formats "1+2*3" formats "1+2*3" - formats "lib Foo\nstruct Foo\nx , y : Int32\nend\nend" formats "lib Foo\nstruct Foo\nx , y : Int32\nend\nend" - formats "{\n a: 1,\n foo: bar,\n}" formats "{\n a: 1,\n foo: bar,\n}" - formats "foo[ 1, 2 ]?" formats "foo[ 1, 2 ]?" - formats "a.b &.[c]\n1" formats "a.b &.[c]\n1" - formats "1 ?\n 2 : \n 3" formats "1 ?\n 2 : \n 3" - formats "foo : (F(A)) | D" formats "foo : (F(A)) | D" - assert assert - formats "foo { | a, ( _ , c ) | a + c }" formats "foo { | a, ( _ , c ) | a + c }" - formats "def foo(x : ( A | B )) : ( A | B )\nend" formats "def foo(x : ( A | B )) : ( A | B )\nend" - formats "foo(\n# x\n1,\n\n# y\nz: 2\n)" formats "foo(\n# x\n1,\n\n# y\nz: 2\n)" - formats "#!shebang\n1 + 2" formats "#!shebang\n1 + 2" - formats "%w{one( two( three)}" formats "%w{one( two( three)}" - formats "1..\n2" formats "1..\n2" - formats " {{\n1 + 2 }}" formats " {{\n1 + 2 }}" - formats "-> : Int32[1] {}" formats "-> : Int32[1] {}" - formats "macro foo\n{% verbatim do %}1 + 2{% end %}\nend" formats "macro foo\n{% verbatim do %}1 + 2{% end %}\nend" - formats "a[b] ||= c" formats "a[b] ||= c" - formats "foo(&.bar)" formats "foo(&.bar)" - formats "macro foo\n {% for x in y %} 2 {% end %}\nend" formats "macro foo\n {% for x in y %} 2 {% end %}\nend" - formats "foo 1 , 2" formats "foo 1 , 2" - formats "lib Foo\nfun foo(x : Int32,\ny : Float64) : Int32\nend" formats "lib Foo\nfun foo(x : Int32,\ny : Float64) : Int32\nend" - formats "x: Int32" formats "x: Int32" - formats "{ * 1 * 2,\n*\n3, 4 }" formats "{ * 1 * 2,\n*\n3, 4 }" - formats "def foo ( ) \n1\nend" formats "def foo ( ) \n1\nend" - formats "-> : {x: Int32, y: String} {}" formats "-> : {x: Int32, y: String} {}" - formats "a = \\\n # foo\n bar(1)" formats "a = \\\n # foo\n bar(1)" - formats "[\n1,\n2,\n3]" formats "[\n1,\n2,\n3]" - formats "def foo(x : A(B), y)\nend" formats "def foo(x : A(B), y)\nend" - formats "enum Foo : Int32\nA = 1\nend" formats "enum Foo : Int32\nA = 1\nend" - formats "asm(\"nop\" :::: \"volatile\" )" formats "asm(\"nop\" :::: \"volatile\" )" - formats "as? Foo" formats "as? Foo" - formats "case 1 \n when 2 , 3 \n 4 \n end" formats "case 1 \n when 2 , 3 \n 4 \n end" - formats "case 1\nwhen 1 then\n2\nwhen 3\n4\nend" formats "case 1\nwhen 1 then\n2\nwhen 3\n4\nend" - formats "@[Foo(\n 1,\n)]" formats "@[Foo(\n 1,\n)]" - formats "1\n.as?(Int32)" formats "1\n.as?(Int32)" - formats "sizeof( Int32 )" formats "sizeof( Int32 )" - formats "unless a\n2\nelse\nend" formats "unless a\n2\nelse\nend" - formats "lib LibFoo\n struct Bar\n {% begin %}\n x : Int32\n {% end %}\n end\nend" formats "lib LibFoo\n struct Bar\n {% begin %}\n x : Int32\n {% end %}\n end\nend" - formats "{% for a in %w() %}\n <<-FOO\n hello \n FOO\n{% end %}" formats "{% for a in %w() %}\n <<-FOO\n hello \n FOO\n{% end %}" - formats "module Foo # foo\nend" formats "module Foo # foo\nend" - formats "1 + \\\n2\n3" formats "1 + \\\n2\n3" - formats "1\n\n\n2" formats "1\n\n\n2" - formats "<<-FOO\nfoo\nFOO" formats "<<-FOO\nfoo\nFOO" - formats "yield 1 , 2" formats "yield 1 , 2" - formats "until 1\n2\nend" formats "until 1\n2\nend" - formats "/\#{1}/imx" formats "/\#{1}/imx" - formats "foo do\n {% foo <<-X\n bar\n X\n %}\nend" formats "foo do\n {% foo <<-X\n bar\n X\n %}\nend" - formats "1 # foo\n2 # bar" formats "1 # foo\n2 # bar" - formats "-> : Int32* {}" formats "-> : Int32* {}" - formats "-> : Array(Int32) {}" formats "-> : Array(Int32) {}" - formats "1 rescue 2" formats "1 rescue 2" - formats "{ {1 => 2} }" formats "{ {1 => 2} }" - formats "foo do\n {1 => foo <<-X\n bar\n X\n }\nend" formats "foo do\n {1 => foo <<-X\n bar\n X\n }\nend" - formats "foo[ 1 , 2 ]" formats "foo[ 1 , 2 ]" - formats "case 1 \n when 2 \n 3 \n when 4 \n 5 \n end" formats "case 1 \n when 2 \n 3 \n when 4 \n 5 \n end" - formats "class Foo;end" formats "class Foo;end" - formats "foo &.[a] = 1" formats "foo &.[a] = 1" - formats "if 1\n {{1 + 2}}\nend" formats "if 1\n {{1 + 2}}\nend" - formats "[] of (Array(T))" formats "[] of (Array(T))" - formats "a = %w(\n one two\n three four\n)" formats "a = %w(\n one two\n three four\n)" - formats "lib Foo\nstruct Foo\nx : Int32\nend\nend" formats "lib Foo\nstruct Foo\nx : Int32\nend\nend" - formats "foo a , **b" formats "foo a , **b" - formats "def foo(x) forall T # bar\n # baz\nend" formats "def foo(x) forall T # bar\n # baz\nend" - formats "foo \\\nbar" formats "foo \\\nbar" - formats "-> :: foo" formats "-> :: foo" - formats "{ A: 1 }\n" formats "{ A: 1 }\n" - formats "def foo(\n foo,\n @[MyAnn] &block\n); end" formats "def foo(\n foo,\n @[MyAnn] &block\n); end" - formats "foo.bar / 2\n" formats "foo.bar / 2\n" - formats "%x(foo \#{ bar })" formats "%x(foo \#{ bar })" - formats "(size - 1).downto(0) do |i|\n yield @buffer[i]\nend" formats "(size - 1).downto(0) do |i|\n yield @buffer[i]\nend" - formats ":&**" formats ":&**" - formats "yield *1 ,2" formats "yield *1 ,2" - formats "break( 1 , 2 )" formats "break( 1 , 2 )" - formats "foo(baz1 do\nend)" formats "foo(baz1 do\nend)" - formats "private FOO = 2\nprivate A = 1" formats "private FOO = 2\nprivate A = 1" - formats "foo = 1\n->foo.foo?" formats "foo = 1\n->foo.foo?" - formats "a &.b[c]?" formats "a &.b[c]?" - formats "join io, &.inspect" formats "join io, &.inspect" - formats "yield *1 , *2" formats "yield *1 , *2" - formats "private getter foo" formats "private getter foo" - formats "def foo\n# hello\n1\nend" formats "def foo\n# hello\n1\nend" - formats "def bar\n foo(<<-X,\n a\n X\n 1)\nend" formats "def bar\n foo(<<-X,\n a\n X\n 1)\nend" - formats "a = foo(1, 2, {\n foo: 1,\n bar: 2,\n})" formats "a = foo(1, 2, {\n foo: 1,\n bar: 2,\n})" - formats "macro foo\n {% 1 + 2 %}\nend" formats "macro foo\n {% 1 + 2 %}\nend" - formats "A = 10\nFOO = 123\nBARBAZ = 1234\n" formats "A = 10\nFOO = 123\nBARBAZ = 1234\n" - formats "case 1\nend" formats "case 1\nend" - formats "foo(bar(\n 1,\n 2,\n))" formats "foo(bar(\n 1,\n 2,\n))" - formats "[1,\n2,\n3\n]" formats "[1,\n2,\n3\n]" - formats "if 1\n foo(\n bar,\n # comment\n )\nend" formats "if 1\n foo(\n bar,\n # comment\n )\nend" - formats "x : (A | B)" formats "x : (A | B)" - formats "[\n 1, 2, # foo\n 3,\n]" formats "[\n 1, 2, # foo\n 3,\n]" - formats "unless a\n2\n3\nelse\n4\n5\nend" formats "unless a\n2\n3\nelse\n4\n5\nend" - formats "alias Foo=Bar" formats "alias Foo=Bar" - formats "x : Int32*" formats "x : Int32*" - formats "foo[x: 1, &.bar] ||= 1" formats "foo[x: 1, &.bar] ||= 1" - formats "foo{}" formats "foo{}" - formats "10 // a" formats "10 // a" - formats "asm(\"a\" : : : : \"volatile\")" formats "asm(\"a\" : : : : \"volatile\")" - formats "begin\n1\n2\n3\nend" formats "begin\n1\n2\n3\nend" - formats "foo([\n 1,\n bar do\n end,\n [\n 2,\n ],\n])" formats "foo([\n 1,\n bar do\n end,\n [\n 2,\n ],\n])" - formats "<<-FOO\nFOO" formats "<<-FOO\nFOO" - formats "1234 # foo\n1 # bar" formats "1234 # foo\n1 # bar" - formats "a&-1" formats "a&-1" - formats "(\n a = 1\n a\n)" formats "(\n a = 1\n a\n)" - formats "(a).b { }\nc" formats "(a).b { }\nc" - formats " <<-EOF\n 1\nEOF" formats " <<-EOF\n 1\nEOF" - formats "foo" formats "foo" - formats "1 #=>2" formats "1 #=>2" - formats "foo(\n 1,\n) do\n 2\nend" formats "foo(\n 1,\n) do\n 2\nend" - formats "1&+2&*3" formats "1&+2&*3" - formats "x : Int32" formats "x : Int32" - formats "{ {1, 2, 3} => 4 }" formats "{ {1, 2, 3} => 4 }" - formats "\"\#{ # foo\n foo = 1\n}\"" formats "\"\#{ # foo\n foo = 1\n}\"" - formats "\"foo \#{ 1 } \#{ __DIR__ }\"" formats "\"foo \#{ 1 } \#{ __DIR__ }\"" - formats "::StaticArray(T)" formats "::StaticArray(T)" - formats "begin\n1\nrescue\n3\nensure\n2\nend" formats "begin\n1\nrescue\n3\nensure\n2\nend" - formats "@a" formats "@a" - formats " <<-HTML\n \#{1} \#{2}\n HTML" formats " <<-HTML\n \#{1} \#{2}\n HTML" - formats "::Pointer(T)" formats "::Pointer(T)" - formats " <<-EOF\n 1\n 2\n EOF" formats " <<-EOF\n 1\n 2\n EOF" - formats "class Actor\n macro inherited\n\nend\nend\n" formats "class Actor\n macro inherited\n\nend\nend\n" - formats "enum Foo\nA \nend" formats "enum Foo\nA \nend" - formats "->@@foo.foo" formats "->@@foo.foo" - formats "X(typeof(begin\n e.is_a?(Y)\nend))" formats "X(typeof(begin\n e.is_a?(Y)\nend))" - formats "<<-HTML\n \#{1}x\n y\n HTML" formats "<<-HTML\n \#{1}x\n y\n HTML" - formats "case / /\nwhen /x/, / /\n / /\nend" formats "case / /\nwhen /x/, / /\n / /\nend" - formats "begin\n call\n # comment\nrescue\n call\n # comment\nelse\n call\n # comment\nensure\n call\n # comment\nend" formats "begin\n call\n # comment\nrescue\n call\n # comment\nelse\n call\n # comment\nensure\n call\n # comment\nend" - formats "select \n when foo then 2 \n end" formats "select \n when foo then 2 \n end" - formats "break 1, {2, 3}" formats "break 1, {2, 3}" - formats "def a\n b(\n a: 1, # x\n # y\n b: 2\n )\nend" formats "def a\n b(\n a: 1, # x\n # y\n b: 2\n )\nend" - formats "foo(1, &.bar)" formats "foo(1, &.bar)" - formats "def foo ( @x, @y) \n end" formats "def foo ( @x, @y) \n end" - formats "-> :: foo=" formats "-> :: foo=" - formats "def foo\n@x = uninitialized Int32\nend" formats "def foo\n@x = uninitialized Int32\nend" - formats "foo do # hello\nend" formats "foo do # hello\nend" - formats "begin\n1\nrescue ex\n3\nelse\n4\nend" formats "begin\n1\nrescue ex\n3\nelse\n4\nend" - formats "foo &.bar" formats "foo &.bar" - formats "if a\n # hello\n 2\nend" formats "if a\n # hello\n 2\nend" - formats "foo &.responds_to?(:foo)" formats "foo &.responds_to?(:foo)" - formats "1.<=() { 3 }" formats "1.<=() { 3 }" - formats "`foo`" formats "`foo`" - formats "->{}" formats "->{}" - formats "def foo(x, *, y, **z)\nend" formats "def foo(x, *, y, **z)\nend" - formats "1 / 2" formats "1 / 2" - formats "->: Int32 do\nx\nend" formats "->: Int32 do\nx\nend" - formats "foo : (String -> String?) | (String)" formats "foo : (String -> String?) | (String)" - formats "a , b = 1 , 2" formats "a , b = 1 , 2" - formats "begin\n1 ? 2 : 3\nend" formats "begin\n1 ? 2 : 3\nend" - formats "case 1 \n when 2 then \n 3 \n end" formats "case 1 \n when 2 then \n 3 \n end" - formats "foo.[]" formats "foo.[]" - formats "a = case 1\nwhen 2\n3\nelse\n4\nend" formats "a = case 1\nwhen 2\n3\nelse\n4\nend" - formats "\"foo\" \\\n \"bar\" \\\n \"baz\"" formats "\"foo\" \\\n \"bar\" \\\n \"baz\"" - formats "(1 .. )" formats "(1 .. )" - formats "macro bar\n 1\nend\n\ncase 1\nwhen 2 then 3\nwhen 45 then 6\nend" formats "macro bar\n 1\nend\n\ncase 1\nwhen 2 then 3\nwhen 45 then 6\nend" - formats "[\n a(), # b\n]" formats "[\n a(), # b\n]" - formats "->@@foo.foo!" formats "->@@foo.foo!" - formats "case 1\nwhen a; 2\nelse; b\nend" formats "case 1\nwhen a; 2\nelse; b\nend" - formats "'\\u{0123}'" formats "'\\u{0123}'" - formats "def foo(x, **z)\nend" formats "def foo(x, **z)\nend" - formats "->{}" formats "->{}" - formats "foo do \n x \n end" formats "foo do \n x \n end" - formats "1.as Int32" formats "1.as Int32" - formats "bar do\n foo <<-X\n bar\n X\nend" formats "bar do\n foo <<-X\n bar\n X\nend" - formats "foo &.bar.responds_to?(:baz)" formats "foo &.bar.responds_to?(:baz)" - formats "macro foo\n {% for value, i in values %}\\\n {% if true %}\\\n {% end %}\\\n {{ 1 }}/\n {% end %}\\\nend\n\n{\n 1 => 2,\n 1234 => 5,\n}\n" formats "macro foo\n {% for value, i in values %}\\\n {% if true %}\\\n {% end %}\\\n {{ 1 }}/\n {% end %}\\\nend\n\n{\n 1 => 2,\n 1234 => 5,\n}\n" - formats "break 1 , 2" formats "break 1 , 2" - formats "1 if 2" formats "1 if 2" - formats "x[ y ] += 1" formats "x[ y ] += 1" - formats "{ {% for x in 1..2 %}3{% end %}, nil }" formats "{ {% for x in 1..2 %}3{% end %}, nil }" - formats "alias A = (B)" formats "alias A = (B)" - formats "case 1\nwhen 2\n 3\n # foo\nelse\n 4\n # bar\nend" formats "case 1\nwhen 2\n 3\n # foo\nelse\n 4\n # bar\nend" - formats "foo.bar do\n baz\n .b\nend" formats "foo.bar do\n baz\n .b\nend" - formats "foo((1..3))" formats "foo((1..3))" - formats "-> : Int32? {}" formats "-> : Int32? {}" - formats "x : (A -> B)" formats "x : (A -> B)" - formats "lib Foo\n $foo = hello : Int32 \nend" formats "lib Foo\n $foo = hello : Int32 \nend" - formats "1.>=(2) { 3 }" formats "1.>=(2) { 3 }" - formats "macro foo\n {{ 1 + 2 }}\\\n 1\n end" formats "macro foo\n {{ 1 + 2 }}\\\n 1\n end" - formats "foo.[1, 2] = 3" formats "foo.[1, 2] = 3" - formats "macro foo\n 1 + 2\nend" formats "macro foo\n 1 + 2\nend" - formats "class Foo\ndef foo\n1\nensure\n2\nend\nend" formats "class Foo\ndef foo\n1\nensure\n2\nend\nend" - formats "case 1\nwhen 2 # a\n # b\nend" formats "case 1\nwhen 2 # a\n # b\nend" - formats "foo(baz(x, y) do\n 1 + 2\nend)" formats "foo(baz(x, y) do\n 1 + 2\nend)" - formats "foo( 1 , 2 )" formats "foo( 1 , 2 )" - formats " {{ 1 + 2 }}" formats " {{ 1 + 2 }}" - formats "def foo(\n &block\n)\nend" formats "def foo(\n &block\n)\nend" - formats "foo (1; 2)" formats "foo (1; 2)" - formats "def foo ( x ) : Int32 \n end" formats "def foo ( x ) : Int32 \n end" - formats "if 1;\n2;\nelsif 3;\n4;\nend" formats "if 1;\n2;\nelsif 3;\n4;\nend" - formats "def run\n\nrescue\n 2\n 3\nend" formats "def run\n\nrescue\n 2\n 3\nend" - formats "foo.bar += 2" formats "foo.bar += 2" - formats "return *1 ,2" formats "return *1 ,2" - formats "begin\n1\nrescue ex : Int32 | Float64 \n3\nend" formats "begin\n1\nrescue ex : Int32 | Float64 \n3\nend" - formats "foo.[ 1, 2 ]?" formats "foo.[ 1, 2 ]?" - formats "1\n..2" formats "1\n..2" - formats "[\n <<-EOF,\n foo\n EOF\n <<-BAR,\n bar\n BAR\n]" formats "[\n <<-EOF,\n foo\n EOF\n <<-BAR,\n bar\n BAR\n]" - formats "1 # foo\n1234 # bar" formats "1 # foo\n1234 # bar" - does not add `&` without flag `method_signature_yield` - formats "def foo(\n)\n yield\nend" formats "def foo(\n)\n yield\nend" - formats "def foo(x ,)\n yield\nend" formats "def foo(x ,)\n yield\nend" - formats "def foo(a, **b)\n yield\nend" formats "def foo(a, **b)\n yield\nend" - formats "def foo(\nx)\n yield\nend" formats "def foo(\nx)\n yield\nend" - formats "def foo(\nx, y)\n yield\nend" formats "def foo(\nx, y)\n yield\nend" - formats "def foo(x\n)\n yield\nend" formats "def foo(x\n)\n yield\nend" - formats "def foo(\nx,\n)\n yield\nend" formats "def foo(\nx,\n)\n yield\nend" - formats "def foo(x,\n)\n yield\nend" formats "def foo(x,\n)\n yield\nend" - formats "def foo\n yield\nend" formats "def foo\n yield\nend" - formats "def foo(\nx,\ny)\n yield\nend" formats "def foo(\nx,\ny)\n yield\nend" - formats "def foo(x,\n y)\n yield\nend" formats "def foo(x,\n y)\n yield\nend" - formats "def foo(x,\ny,)\n yield\nend" formats "def foo(x,\ny,)\n yield\nend" - formats "def foo(x)\n yield\nend" formats "def foo(x)\n yield\nend" - formats "def foo # bar\n yield\nend" formats "def foo # bar\n yield\nend" - formats "def foo()\n yield\nend" formats "def foo()\n yield\nend" - formats "def foo ( x = 1 ) \n end" formats "def foo ( x = 1 ) \n end" - formats "pointerof( @a )" formats "pointerof( @a )" - formats "def foo\n 1 #\nrescue\nend" formats "def foo\n 1 #\nrescue\nend" - formats "a = \\\n # foo\n nil" formats "a = \\\n # foo\n nil" - formats "begin\n / /\nend" formats "begin\n / /\nend" - formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar,\n @[MyAnn] @[MyAnn] baz,\n @[MyAnn]\n @[MyAnn]\n biz\n); end" formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar,\n @[MyAnn] @[MyAnn] baz,\n @[MyAnn]\n @[MyAnn]\n biz\n); end" - formats "def foo(@[AnnOne] @[AnnTwo] v); end" formats "def foo(@[AnnOne] @[AnnTwo] v); end" - formats "bar = foo(->{\n 1 + 2\n})" formats "bar = foo(->{\n 1 + 2\n})" - formats "return 1" formats "return 1" - formats "foo 1" formats "foo 1" - formats ":\"foo bar\"" formats ":\"foo bar\"" - formats "%i{one( two( three)}" formats "%i{one( two( three)}" - formats "-> :: Foo . foo!" formats "-> :: Foo . foo!" - formats "macro foo\n 1 + 2 \n end" formats "macro foo\n 1 + 2 \n end" - formats "foo . bar()" formats "foo . bar()" - formats "foo 1, # comment\n # bar\n do\n end" formats "foo 1, # comment\n # bar\n do\n end" - formats "foo\n \nbar" formats "foo\n \nbar" - formats "begin\n 0[1] rescue 2 end" formats "begin\n 0[1] rescue 2 end" - formats "enum Foo\n {% begin %}\n A\n B\n C\n {% end %}\nend" formats "enum Foo\n {% begin %}\n A\n B\n C\n {% end %}\nend" - formats "SomeLib.UppercasedFunCall 1, 2" formats "SomeLib.UppercasedFunCall 1, 2" - formats "[/ /, / /]" formats "[/ /, / /]" - formats "yield( 1 , 2 )" formats "yield( 1 , 2 )" - formats "case 1 \n when 2 ,\n 3 \n 4 \n end" formats "case 1 \n when 2 ,\n 3 \n 4 \n end" - formats "foo(a: //, b: //)" formats "foo(a: //, b: //)" - formats "break *1" formats "break *1" - formats "class Foo\n# nothing\nend" formats "class Foo\n# nothing\nend" - formats "def foo(@[MyAnn] &); end" formats "def foo(@[MyAnn] &); end" - formats "%w(\n one two\n three four\n)" formats "%w(\n one two\n three four\n)" - formats "yield 1 , *2" formats "yield 1 , *2" - formats "foo[]" formats "foo[]" - formats "a &.b.as C" formats "a &.b.as C" - formats "def foo: Int32\nend" formats "def foo: Int32\nend" - formats "asm(\"nop\" :::: \"volatile\" , \"alignstack\" , \"intel\" )" formats "asm(\"nop\" :::: \"volatile\" , \"alignstack\" , \"intel\" )" - formats "foo { | ( a, *b , c ) | a }" formats "foo { | ( a, *b , c ) | a }" - formats "foo[&.bar] = 1" formats "foo[&.bar] = 1" - formats "1 &+ 2" formats "1 &+ 2" - formats "()" formats "()" - formats "->{ x }" formats "->{ x }" - formats "a = foo(bar([\n 1,\n]))" formats "a = foo(bar([\n 1,\n]))" - formats "macro [](x)\nend" formats "macro [](x)\nend" - formats "Tuple()" formats "Tuple()" - formats "asm(\"nop\" : \"a\"(0), \"b\"(1)\n: \"c\"(2), \"d\"(3) )" formats "asm(\"nop\" : \"a\"(0), \"b\"(1)\n: \"c\"(2), \"d\"(3) )" - formats "def foo()\n1\nend" formats "def foo()\n1\nend" - formats "\"\\a\\c\#{foo}\\b\\d\"" formats "\"\\a\\c\#{foo}\\b\\d\"" - formats "def foo ( &@block) \n end" formats "def foo ( &@block) \n end" - formats "1" formats "1" - formats "[\n {\n 1 => 2,\n }, {\n 3 => 4,\n }, {\n 5 => 6,\n },\n]" formats "[\n {\n 1 => 2,\n }, {\n 3 => 4,\n }, {\n 5 => 6,\n },\n]" - formats "def foo( & block )\nend" formats "def foo( & block )\nend" - formats "enum Baz\nA = 1\nFOO = 2\n\nEX = 3\nend" formats "enum Baz\nA = 1\nFOO = 2\n\nEX = 3\nend" - formats "def foo(\n @[MyAnn]\n bar\n); end" formats "def foo(\n @[MyAnn]\n bar\n); end" - formats "/foo/imx" formats "/foo/imx" - formats "# ```text\n# 1 + 2\n# ```\n#\n# ```\n# 3 + 4\n# ```" formats "# ```text\n# 1 + 2\n# ```\n#\n# ```\n# 3 + 4\n# ```" - formats "asm(\n # the assembly template string, following the\n # syntax for LLVM's integrated assembler\n \"nop\" : # output operands\n\"=r\"(foo), \"=r\"(bar) : # input operands\n\"r\"(1), \"r\"(baz) : # names of clobbered registers\n\"eax\", \"memory\" : # optional flags, corresponding to the LLVM IR\n # sideeffect / alignstack / inteldialect / unwind attributes\n\"volatile\", \"alignstack\", \"intel\", \"unwind\"\n)" formats "asm(\n # the assembly template string, following the\n # syntax for LLVM's integrated assembler\n \"nop\" : # output operands\n\"=r\"(foo), \"=r\"(bar) : # input operands\n\"r\"(1), \"r\"(baz) : # names of clobbered registers\n\"eax\", \"memory\" : # optional flags, corresponding to the LLVM IR\n # sideeffect / alignstack / inteldialect / unwind attributes\n\"volatile\", \"alignstack\", \"intel\", \"unwind\"\n)" - formats "unless a\nunless b\n3\nelse\n4\nend\nend" formats "unless a\nunless b\n3\nelse\n4\nend\nend" - formats "$?" formats "$?" - formats "lib Foo\nstruct Foo\nx : Int32\ny : Float64\nend\nend" formats "lib Foo\nstruct Foo\nx : Int32\ny : Float64\nend\nend" - formats "x.try &.[]= 123, 456" formats "x.try &.[]= 123, 456" - formats "def foo( x , & : Int32 )\nend" formats "def foo( x , & : Int32 )\nend" - formats "macro foo\n {{\n1 + 2 }}\nend" formats "macro foo\n {{\n1 + 2 }}\nend" - formats "@x : A(B | C)?" formats "@x : A(B | C)?" - formats "macro foo(\n a,\n **b,\n)\nend" formats "macro foo(\n a,\n **b,\n)\nend" - formats ":|" formats ":|" - formats "foo[1, &.bar] = 1" formats "foo[1, &.bar] = 1" - formats "{% if true %}\n # x\n #\n{% end %}\n\n# ```\n# x\n# ```" formats "{% if true %}\n # x\n #\n{% end %}\n\n# ```\n# x\n# ```" - formats "case foo\nwhen 1\n # A\nelse\n# B\nend\n" formats "case foo\nwhen 1\n # A\nelse\n# B\nend\n" - formats "yield 1" formats "yield 1" - formats "p = Foo[\n 1, 2, 3,\n 4, 5, 6\n]\n" formats "p = Foo[\n 1, 2, 3,\n 4, 5, 6\n]\n" - formats "macro foo\n %foo\nend" formats "macro foo\n %foo\nend" - formats "case 1\nwhen 1, # 1\n 2, # 2\n 3 # 3\n 1\nend" formats "case 1\nwhen 1, # 1\n 2, # 2\n 3 # 3\n 1\nend" - formats "macro foo\n macro bar\n \\{% begin %}\n \\\\{% puts %}\n \\{% end %}\n end\nend" formats "macro foo\n macro bar\n \\{% begin %}\n \\\\{% puts %}\n \\{% end %}\n end\nend" - formats "macro foo()\nend" formats "macro foo()\nend" - formats "1.===(2) { 3 }" formats "1.===(2) { 3 }" - formats "{{ foo <<-X\nbar\nX\n}}" formats "{{ foo <<-X\nbar\nX\n}}" - formats "あ.い = 1" formats "あ.い = 1" - formats "def foo(\n @[MyAnn]\n bar\n); end" formats "def foo(\n @[MyAnn]\n bar\n); end" - formats "lib Foo\n fun Bar\nend" formats "lib Foo\n fun Bar\nend" - formats "class Foo ( *T, U )\nend" formats "class Foo ( *T, U )\nend" - formats "a &.!.!" formats "a &.!.!" - formats "foo[1, &.bar]" formats "foo[1, &.bar]" - formats "def +(x)\nend" formats "def +(x)\nend" - formats "a&+1" formats "a&+1" - formats "extend Foo" formats "extend Foo" - formats "foo(\n a: 1,\n b: 2,\n )\n" formats "foo(\n a: 1,\n b: 2,\n )\n" - formats "return 1, {2, 3}" formats "return 1, {2, 3}" - formats "foo.%(bar)" formats "foo.%(bar)" - formats "@[Foo(\n foo: 1,\n)]\ndef foo\nend" formats "@[Foo(\n foo: 1,\n)]\ndef foo\nend" - formats "begin\n 1\nend\n\n1\n" formats "begin\n 1\nend\n\n1\n" - formats "case 1 \n when 2 \n 3 \n else \n 4 \n end" formats "case 1 \n when 2 \n 3 \n else \n 4 \n end" - formats "def a\n {\n 1, # x\n # y\n }\nend" formats "def a\n {\n 1, # x\n # y\n }\nend" - formats "Foo( x: Int32 , y: Float64 )" formats "Foo( x: Int32 , y: Float64 )" - formats "{ %w() }" formats "{ %w() }" - formats "foo(self // 1)" formats "foo(self // 1)" - formats "a = case 1\n when 1, # 1\n 2, # 2\n 3 # 3\n 1\n end" formats "a = case 1\n when 1, # 1\n 2, # 2\n 3 # 3\n 1\n end" - formats "\"\#{\"\#{foo}\"}\"" formats "\"\#{\"\#{foo}\"}\"" - formats "foo(\n 1,\n 2\n) do\n 1\nend" formats "foo(\n 1,\n 2\n) do\n 1\nend" - formats "1.[]=() { 3 }" formats "1.[]=() { 3 }" - formats "def self . foo\nend" formats "def self . foo\nend" - formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar,\n @[MyAnn] baz\n); end" formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar,\n @[MyAnn] baz\n); end" - formats "abstract def foo\nabstract def bar" formats "abstract def foo\nabstract def bar" - formats "x.try &.[] 123" formats "x.try &.[] 123" - formats "macro foo\n {{1 + 2}}\nend" formats "macro foo\n {{1 + 2}}\nend" - formats "foo(1, 2,\n)" formats "foo(1, 2,\n)" - formats "foo &.as?(T)" formats "foo &.as?(T)" - formats "foo 1, # comment\n do\n end" formats "foo 1, # comment\n do\n end" - formats "::Foo:: Bar" formats "::Foo:: Bar" - formats "{1 => 2,\n 3 => 4, # lala\n}\n" formats "{1 => 2,\n 3 => 4, # lala\n}\n" - formats "foo[x: 1, &.bar]?" formats "foo[x: 1, &.bar]?" - formats "lib Foo\nstruct Foo\nx , y , z : Int32\nend\nend" formats "lib Foo\nstruct Foo\nx , y , z : Int32\nend\nend" - formats "def foo(@[AnnOne] @[AnnTwo] &block : Int32 -> ); end" formats "def foo(@[AnnOne] @[AnnTwo] &block : Int32 -> ); end" - formats "[1, 2, 3]" formats "[1, 2, 3]" - formats "x = {% if flag?(:foo) %}\n foo + bar\n {% else %}\n baz + qux\n {% end %}" formats "x = {% if flag?(:foo) %}\n foo + bar\n {% else %}\n baz + qux\n {% end %}" - formats "->@foo.foo=" formats "->@foo.foo=" - formats "0x1234_u32" formats "0x1234_u32" - formats "if a\n2\nelse\n3\nend" formats "if a\n2\nelse\n3\nend" - formats "next { {1, 2}, {3, 4} }" formats "next { {1, 2}, {3, 4} }" - formats "asm(\"a\" :: : : \"volatile\")" formats "asm(\"a\" :: : : \"volatile\")" - formats "lib Foo\n fun foo =\n bar(Int32) : Int32\nend" formats "lib Foo\n fun foo =\n bar(Int32) : Int32\nend" - formats "case 1\nelse\n 2\nend" formats "case 1\nelse\n 2\nend" - formats "def x(@y = ->(z) {})\nend" formats "def x(@y = ->(z) {})\nend" - formats "case nil\nelse nil; nil\n# comment\nend" formats "case nil\nelse nil; nil\n# comment\nend" - formats "def foo( x , & block )\nend" formats "def foo( x , & block )\nend" - formats "class Foo; 1; end" formats "class Foo; 1; end" - formats "foo{|x|\n x}" formats "foo{|x|\n x}" - formats "10**a" formats "10**a" - formats "[\n [\n 1,\n ], [\n 2,\n ], [\n 3,\n ],\n]" formats "[\n [\n 1,\n ], [\n 2,\n ], [\n 3,\n ],\n]" - formats "def foo ( bar @@select) \n end" formats "def foo ( bar @@select) \n end" - formats "with foo yield bar" formats "with foo yield bar" - formats "Foo( x: Int32 )" formats "Foo( x: Int32 )" - formats "#######" formats "#######" - formats "nil?" formats "nil?" - formats "x : Int32 |\nString" formats "x : Int32 |\nString" - formats "Hash{\n foo => <<-EOF\n foo\n EOF\n}" formats "Hash{\n foo => <<-EOF\n foo\n EOF\n}" - formats "@[Foo::Bar]" formats "@[Foo::Bar]" - formats "foo \"bar\": 1, \"baz qux\": 2" formats "foo \"bar\": 1, \"baz qux\": 2" - formats "def foo ( x ,\n y ) \n end" formats "def foo ( x ,\n y ) \n end" - formats "class Foo < \n Bar \n\n 1 \n\nend" formats "class Foo < \n Bar \n\n 1 \n\nend" - formats "def foo\n1\n2\n# foo\nend" formats "def foo\n1\n2\n# foo\nend" - formats "def foo(\n foo,\n\n @[MyAnn]\n @[MyAnn]\n & : Nil -> Nil\n); end" formats "def foo(\n foo,\n\n @[MyAnn]\n @[MyAnn]\n & : Nil -> Nil\n); end" - formats "return { {1, 2}, {3, 4} }" formats "return { {1, 2}, {3, 4} }" - formats "foo[&.bar]?" formats "foo[&.bar]?" - formats "def foo ( @@x) \n end" formats "def foo ( @@x) \n end" - formats "def foo\n {{@type}}\nend" formats "def foo\n {{@type}}\nend" - formats "->foo" formats "->foo" - formats "case\nend" formats "case\nend" - formats "def foo(**z, &block)\nend" formats "def foo(**z, &block)\nend" - formats "def foo( & \n )\nend" formats "def foo( & \n )\nend" - formats "macro foo\n {% if 1 %} 2 {% elsif 3 %} 4 {% else %} 5 {% end %}\nend" formats "macro foo\n {% if 1 %} 2 {% elsif 3 %} 4 {% else %} 5 {% end %}\nend" - formats "long_variable_name = [\n {\n :foo => 1,\n }, {\n :bar => 2,\n },\n]" formats "long_variable_name = [\n {\n :foo => 1,\n }, {\n :bar => 2,\n },\n]" - formats "lib Foo\n fun foo =\n bar(Int32,\n Int32) : Int32\nend" formats "lib Foo\n fun foo =\n bar(Int32,\n Int32) : Int32\nend" - formats "loop do\n 1\nrescue\n 2\nend" formats "loop do\n 1\nrescue\n 2\nend" - formats "a = begin\n 1\nend\n\na =\nbegin\n 1\nend\n\na = if 1\n 2\nend\n\nb = 1\nb ||= begin\n 2\nend\n\nb ||= if 1\n 2\nend\n\nb += if 1\n 2\nend\n\nb +=\nif 1\n 2\nend\n\na, b = begin\n 1\nend\n\na, b =\nbegin\n 1\nend\n\nc[x] = begin\n 2\nend\n\nc[x] =\nbegin\n 2\nend\n\nc[x] = if 1\n 2\nend\n\nc[x] ||= begin 1\n 2\nend\n\nc[x] ||= if 1\n 2\nend\n\nc[x] += if 1\n 2\nend\n\nc[x] += begin 1\n 2\nend\n\nc[x] +=\nbegin\n 1\n 2\nend\n\nfoo.bar = begin\nend\n\nfoo.bar =\nbegin\nend\n\nfoo.bar = if\n 2\nend\n\nfoo.bar += begin\n 2\nend\n\nfoo.bar += if\n 2\nend\n\n" formats "a = begin\n 1\nend\n\na =\nbegin\n 1\nend\n\na = if 1\n 2\nend\n\nb = 1\nb ||= begin\n 2\nend\n\nb ||= if 1\n 2\nend\n\nb += if 1\n 2\nend\n\nb +=\nif 1\n 2\nend\n\na, b = begin\n 1\nend\n\na, b =\nbegin\n 1\nend\n\nc[x] = begin\n 2\nend\n\nc[x] =\nbegin\n 2\nend\n\nc[x] = if 1\n 2\nend\n\nc[x] ||= begin 1\n 2\nend\n\nc[x] ||= if 1\n 2\nend\n\nc[x] += if 1\n 2\nend\n\nc[x] += begin 1\n 2\nend\n\nc[x] +=\nbegin\n 1\n 2\nend\n\nfoo.bar = begin\nend\n\nfoo.bar =\nbegin\nend\n\nfoo.bar = if\n 2\nend\n\nfoo.bar += begin\n 2\nend\n\nfoo.bar += if\n 2\nend\n\n" - formats "def foo( x , * y )\nend" formats "def foo( x , * y )\nend" - formats "::NamedTuple(T)" formats "::NamedTuple(T)" - formats "while 1\n2 # foo\nend" formats "while 1\n2 # foo\nend" - formats "foo( )" formats "foo( )" - formats "->(x : Int32) {}" formats "->(x : Int32) {}" - formats "class Foo\n@x : Int32\nend" formats "class Foo\n@x : Int32\nend" - formats "lib Foo\n {% if 1 %}\n fun foo\n {% end %}\nend\n\nmacro bar\n 1\nend" formats "lib Foo\n {% if 1 %}\n fun foo\n {% end %}\nend\n\nmacro bar\n 1\nend" - formats " <<-HTML\n foo\nHTML" formats " <<-HTML\n foo\nHTML" - formats "[\n # foo\n] of String" formats "[\n # foo\n] of String" - formats "# Here is the doc of a method, and contains an example:\n#\n# ```\n# result = foo\n#\n# puts result\n# ```\ndef foo\n # ...\nend\n" formats "# Here is the doc of a method, and contains an example:\n#\n# ```\n# result = foo\n#\n# puts result\n# ```\ndef foo\n # ...\nend\n" - formats "asm(\"nop\" : \"a\"(0) : \"b\"(1) )" formats "asm(\"nop\" : \"a\"(0) : \"b\"(1) )" - formats "\"\#{\n foo = 1\n}\"" formats "\"\#{\n foo = 1\n}\"" - formats "return( 1 , 2 )" formats "return( 1 , 2 )" - formats "def foo(\n a,\n b,\n)\nend" formats "def foo(\n a,\n b,\n)\nend" - formats "<<-FOO\nbarfoo\nFOO" formats "<<-FOO\nbarfoo\nFOO" - formats "1 .. 2" formats "1 .. 2" - formats "def foo\n2 # foo\nend" formats "def foo\n2 # foo\nend" - formats "foo ()" formats "foo ()" - formats "foo &.>=(2)" formats "foo &.>=(2)" - formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n : \"f\",\n \"g\")" formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n : \"f\",\n \"g\")" - formats "def foo\n@x : Int32\nend" formats "def foo\n@x : Int32\nend" - formats "1 \\\nif 2" formats "1 \\\nif 2" - formats "if a\nif b\n3\nelse\n4\nend\nend" formats "if a\nif b\n3\nelse\n4\nend\nend" - formats "case 0\nwhen 0 then 1; 2\n# Comments\nend" formats "case 0\nwhen 0 then 1; 2\n# Comments\nend" - formats "if 1\n# nothing\nend" formats "if 1\n# nothing\nend" - formats "{% verbatim do %}\n <<-FOO\n hello \n FOO\n{% end %}" formats "{% verbatim do %}\n <<-FOO\n hello \n FOO\n{% end %}" - formats "if 1\n2\nelsif\n3\n4\nelsif 5\n6\nend" formats "if 1\n2\nelsif\n3\n4\nelsif 5\n6\nend" - formats "<<-FOO\nfoobar\nFOO" formats "<<-FOO\nfoobar\nFOO" - formats "1\n..\n2" formats "1\n..\n2" - formats "foo\n .bar(\n 1\n )" formats "foo\n .bar(\n 1\n )" - formats "1\n.as(Int32)" formats "1\n.as(Int32)" - formats "# foo\ndef foo\nend\n# bar\ndef bar\nend" formats "# foo\ndef foo\nend\n# bar\ndef bar\nend" - formats "if a\n b &c\nend" formats "if a\n b &c\nend" - formats "1 unless 2" formats "1 unless 2" - formats "next( *1 , *2 )" formats "next( *1 , *2 )" - formats "[ * [ * [ 1 ] ], * \n[ 2] ]" formats "[ * [ * [ 1 ] ], * \n[ 2] ]" - formats "foo(bar(baz3 do\nend))" formats "foo(bar(baz3 do\nend))" - formats "1 ... 2" formats "1 ... 2" - formats "lib Foo\nfun foo(x : Int32, y : Float64) : Int32\nend" formats "lib Foo\nfun foo(x : Int32, y : Float64) : Int32\nend" - formats "foo &.@bar" formats "foo &.@bar" - Unicode bi-directional control characters - formats "%(\u2068)" formats "%(\u2068)" - formats "\"\\c\u202C\#{1}\"" formats "\"\\c\u202C\#{1}\"" - formats "\"\\c\u202A\#{1}\"" formats "\"\\c\u202A\#{1}\"" - formats "def foo(\"\u202E\" x)\nend" formats "def foo(\"\u202E\" x)\nend" - formats "%r(\u202C)" formats "%r(\u202C)" - formats "%Q(\u202E\#{1})" formats "%Q(\u202E\#{1})" - formats "<<-EOS\n\u2066\nEOS" formats "<<-EOS\n\u2066\nEOS" - formats "%Q(\u202D\#{1})" formats "%Q(\u202D\#{1})" - formats "\"\\c\u2067\#{1}\"" formats "\"\\c\u2067\#{1}\"" - formats "{\"\u2067\": 1}" formats "{\"\u2067\": 1}" - formats "foo(\"\u2068\": 1)" formats "foo(\"\u2068\": 1)" - formats "%r(\u2067\#{1})" formats "%r(\u2067\#{1})" - formats "foo(\"\u202A\": 1)" formats "foo(\"\u202A\": 1)" - formats "%i(\u202A)" formats "%i(\u202A)" - formats "\"\u2068\"" formats "\"\u2068\"" - formats "\"\\c\u202B\#{1}\"" formats "\"\\c\u202B\#{1}\"" - formats "%w(\u2069)" formats "%w(\u2069)" - formats "/\u202A\#{1}/" formats "/\u202A\#{1}/" - formats "%q(\u2068)" formats "%q(\u2068)" - formats "\"\\c\u202B\"" formats "\"\\c\u202B\"" - formats "%Q(\u202E)" formats "%Q(\u202E)" - formats "\"\\c\u2069\#{1}\"" formats "\"\\c\u2069\#{1}\"" - formats "%i(\u2069)" formats "%i(\u2069)" - formats "<<-'EOS'\n\u202E\nEOS" formats "<<-'EOS'\n\u202E\nEOS" - formats "\"\u202B\"" formats "\"\u202B\"" - formats "%q(\u2069)" formats "%q(\u2069)" - formats "NamedTuple(\"\u2069\": Int32)" formats "NamedTuple(\"\u2069\": Int32)" - formats "%r(\u2068\#{1})" formats "%r(\u2068\#{1})" - formats "%q(\u202A)" formats "%q(\u202A)" - formats "/\u202A/" formats "/\u202A/" - formats "%(\u2067)" formats "%(\u2067)" - formats "NamedTuple(\"\u202D\": Int32)" formats "NamedTuple(\"\u202D\": Int32)" - formats "%Q(\u202C)" formats "%Q(\u202C)" - formats "\"\u2066\#{1}\"" formats "\"\u2066\#{1}\"" - formats "%Q(\u2067)" formats "%Q(\u2067)" - formats "/\u202C/" formats "/\u202C/" - formats "<<-EOS\n\u202A\nEOS" formats "<<-EOS\n\u202A\nEOS" - formats "%r(\u202B)" formats "%r(\u202B)" - formats "NamedTuple(\"\u2068\": Int32)" formats "NamedTuple(\"\u2068\": Int32)" - formats "%i(\u2066)" formats "%i(\u2066)" - formats "%Q(\u202C\#{1})" formats "%Q(\u202C\#{1})" - formats "%Q(\u2068)" formats "%Q(\u2068)" - formats "<<-EOS\n\u2068\nEOS" formats "<<-EOS\n\u2068\nEOS" - formats "%r(\u202E\#{1})" formats "%r(\u202E\#{1})" - formats "NamedTuple(\"\u202A\": Int32)" formats "NamedTuple(\"\u202A\": Int32)" - formats "%r(\u2069)" formats "%r(\u2069)" - formats "<<-EOS\n\u202B\nEOS" formats "<<-EOS\n\u202B\nEOS" - formats "foo(\"\u2066\": 1)" formats "foo(\"\u2066\": 1)" - formats "def foo(\"\u202C\" x)\nend" formats "def foo(\"\u202C\" x)\nend" - formats "%r(\u202A\#{1})" formats "%r(\u202A\#{1})" - formats "{\"\u202E\": 1}" formats "{\"\u202E\": 1}" - formats "%Q(\u2066\#{1})" formats "%Q(\u2066\#{1})" - formats "%i(\u202D)" formats "%i(\u202D)" - formats "%i(\u202B)" formats "%i(\u202B)" - formats "<<-'EOS'\n\u202B\nEOS" formats "<<-'EOS'\n\u202B\nEOS" - formats "%q(\u202C)" formats "%q(\u202C)" - formats "/\u202C\#{1}/" formats "/\u202C\#{1}/" - formats "foo(\"\u202C\": 1)" formats "foo(\"\u202C\": 1)" - formats "<<-'EOS'\n\u202A\nEOS" formats "<<-'EOS'\n\u202A\nEOS" - formats "\"\\c\u2069\"" formats "\"\\c\u2069\"" - formats "%Q(\u2068\#{1})" formats "%Q(\u2068\#{1})" - formats "foo(\"\u202D\": 1)" formats "foo(\"\u202D\": 1)" - formats "%Q(\u2067\#{1})" formats "%Q(\u2067\#{1})" - formats "%Q(\u2069\#{1})" formats "%Q(\u2069\#{1})" - formats "{\"\u2069\": 1}" formats "{\"\u2069\": 1}" - formats "\"\u202E\#{1}\"" formats "\"\u202E\#{1}\"" - formats "def foo(\"\u202B\" x)\nend" formats "def foo(\"\u202B\" x)\nend" - formats "<<-'EOS'\n\u202C\nEOS" formats "<<-'EOS'\n\u202C\nEOS" - formats "%w(\u202B)" formats "%w(\u202B)" - formats "%Q(\u2069)" formats "%Q(\u2069)" - formats "%Q(\u2066)" formats "%Q(\u2066)" - formats "\"\\c\u202E\#{1}\"" formats "\"\\c\u202E\#{1}\"" - formats "<<-EOS\n\u2068\#{1}\nEOS" formats "<<-EOS\n\u2068\#{1}\nEOS" - formats "\"\u2069\"" formats "\"\u2069\"" - formats "<<-'EOS'\n\u202D\nEOS" formats "<<-'EOS'\n\u202D\nEOS" - formats "\"\\c\u2066\#{1}\"" formats "\"\\c\u2066\#{1}\"" - formats "\"\\c\u2067\"" formats "\"\\c\u2067\"" - formats "<<-EOS\n\u2067\nEOS" formats "<<-EOS\n\u2067\nEOS" - formats "<<-'EOS'\n\u2068\nEOS" formats "<<-'EOS'\n\u2068\nEOS" - formats "%w(\u2068)" formats "%w(\u2068)" - formats "\"\\c\u202E\"" formats "\"\\c\u202E\"" - formats "\"\\c\u202D\#{1}\"" formats "\"\\c\u202D\#{1}\"" - formats "{\"\u2066\": 1}" formats "{\"\u2066\": 1}" - formats "%r(\u2067)" formats "%r(\u2067)" - formats "/\u2067\#{1}/" formats "/\u2067\#{1}/" - formats "%q(\u202E)" formats "%q(\u202E)" - formats "%(\u202E)" formats "%(\u202E)" - formats "\"\u202A\"" formats "\"\u202A\"" - formats "%Q(\u202D)" formats "%Q(\u202D)" - formats "def foo(\"\u202A\" x)\nend" formats "def foo(\"\u202A\" x)\nend" - formats "%r(\u202E)" formats "%r(\u202E)" - formats "<<-EOS\n\u202E\nEOS" formats "<<-EOS\n\u202E\nEOS" - formats "\"\\c\u2066\"" formats "\"\\c\u2066\"" - formats "%i(\u2068)" formats "%i(\u2068)" - formats "\"\u2067\#{1}\"" formats "\"\u2067\#{1}\"" - formats "<<-EOS\n\u202D\nEOS" formats "<<-EOS\n\u202D\nEOS" - formats "%i(\u202E)" formats "%i(\u202E)" - formats "%w(\u202A)" formats "%w(\u202A)" - formats "NamedTuple(\"\u202B\": Int32)" formats "NamedTuple(\"\u202B\": Int32)" - formats "<<-'EOS'\n\u2069\nEOS" formats "<<-'EOS'\n\u2069\nEOS" - formats "\"\u202A\#{1}\"" formats "\"\u202A\#{1}\"" - formats "{\"\u202B\": 1}" formats "{\"\u202B\": 1}" - formats "/\u202E\#{1}/" formats "/\u202E\#{1}/" - formats "\"\u2066\"" formats "\"\u2066\"" - formats "foo(\"\u202B\": 1)" formats "foo(\"\u202B\": 1)" - formats "%w(\u2066)" formats "%w(\u2066)" - formats "%(\u202B)" formats "%(\u202B)" - formats "def foo(\"\u2067\" x)\nend" formats "def foo(\"\u2067\" x)\nend" - formats "%(\u202D)" formats "%(\u202D)" - formats "<<-EOS\n\u2069\nEOS" formats "<<-EOS\n\u2069\nEOS" - formats "<<-'EOS'\n\u2067\nEOS" formats "<<-'EOS'\n\u2067\nEOS" - formats "%Q(\u202A)" formats "%Q(\u202A)" - formats "<<-EOS\n\u202C\nEOS" formats "<<-EOS\n\u202C\nEOS" - formats "%r(\u2066)" formats "%r(\u2066)" - formats "foo(\"\u2067\": 1)" formats "foo(\"\u2067\": 1)" - formats "/\u2066/" formats "/\u2066/" - formats "%Q(\u202B)" formats "%Q(\u202B)" - formats "/\u202D/" formats "/\u202D/" - formats "<<-EOS\n\u202D\#{1}\nEOS" formats "<<-EOS\n\u202D\#{1}\nEOS" - formats "<<-EOS\n\u202B\#{1}\nEOS" formats "<<-EOS\n\u202B\#{1}\nEOS" - formats "{\"\u202A\": 1}" formats "{\"\u202A\": 1}" - formats "%r(\u202C\#{1})" formats "%r(\u202C\#{1})" - formats "%Q(\u202B\#{1})" formats "%Q(\u202B\#{1})" - formats "%r(\u2069\#{1})" formats "%r(\u2069\#{1})" - formats "%(\u2069)" formats "%(\u2069)" - formats "/\u2066\#{1}/" formats "/\u2066\#{1}/" - formats "%r(\u2068)" formats "%r(\u2068)" - formats "\"\\c\u202C\"" formats "\"\\c\u202C\"" - formats "\"\u2069\#{1}\"" formats "\"\u2069\#{1}\"" - formats "/\u2068\#{1}/" formats "/\u2068\#{1}/" - formats "%r(\u202B\#{1})" formats "%r(\u202B\#{1})" - formats "<<-EOS\n\u2067\#{1}\nEOS" formats "<<-EOS\n\u2067\#{1}\nEOS" - formats "/\u2069/" formats "/\u2069/" - formats "foo(\"\u2069\": 1)" formats "foo(\"\u2069\": 1)" - formats "/\u202D\#{1}/" formats "/\u202D\#{1}/" - formats "<<-EOS\n\u202A\#{1}\nEOS" formats "<<-EOS\n\u202A\#{1}\nEOS" - formats "NamedTuple(\"\u2067\": Int32)" formats "NamedTuple(\"\u2067\": Int32)" - formats "<<-EOS\n\u202C\#{1}\nEOS" formats "<<-EOS\n\u202C\#{1}\nEOS" - formats "%r(\u202D)" formats "%r(\u202D)" - formats "/\u2068/" formats "/\u2068/" - formats "<<-EOS\n\u2066\#{1}\nEOS" formats "<<-EOS\n\u2066\#{1}\nEOS" - formats "{\"\u202C\": 1}" formats "{\"\u202C\": 1}" - formats "%i(\u2067)" formats "%i(\u2067)" - formats "\"\u202D\"" formats "\"\u202D\"" - formats "<<-EOS\n\u2069\#{1}\nEOS" formats "<<-EOS\n\u2069\#{1}\nEOS" - formats "%w(\u2067)" formats "%w(\u2067)" - formats "/\u202E/" formats "/\u202E/" - formats "\"\u202B\#{1}\"" formats "\"\u202B\#{1}\"" - formats "%Q(\u202A\#{1})" formats "%Q(\u202A\#{1})" - formats "%r(\u202A)" formats "%r(\u202A)" - formats "/\u202B/" formats "/\u202B/" - formats "%r(\u202D\#{1})" formats "%r(\u202D\#{1})" - formats "%q(\u2066)" formats "%q(\u2066)" - formats "\"\\c\u202A\"" formats "\"\\c\u202A\"" - formats "\"\u202C\#{1}\"" formats "\"\u202C\#{1}\"" - formats "<<-'EOS'\n\u2066\nEOS" formats "<<-'EOS'\n\u2066\nEOS" - formats "{\"\u202D\": 1}" formats "{\"\u202D\": 1}" - formats "\"\u202D\#{1}\"" formats "\"\u202D\#{1}\"" - formats "NamedTuple(\"\u202E\": Int32)" formats "NamedTuple(\"\u202E\": Int32)" - formats "NamedTuple(\"\u2066\": Int32)" formats "NamedTuple(\"\u2066\": Int32)" - formats "%r(\u2066\#{1})" formats "%r(\u2066\#{1})" - formats "def foo(\"\u2069\" x)\nend" formats "def foo(\"\u2069\" x)\nend" - formats "/\u2067/" formats "/\u2067/" - formats "%(\u202A)" formats "%(\u202A)" - formats "%w(\u202C)" formats "%w(\u202C)" - formats "\"\\c\u2068\#{1}\"" formats "\"\\c\u2068\#{1}\"" - formats "%w(\u202E)" formats "%w(\u202E)" - formats "def foo(\"\u2066\" x)\nend" formats "def foo(\"\u2066\" x)\nend" - formats "%q(\u202B)" formats "%q(\u202B)" - formats "%w(\u202D)" formats "%w(\u202D)" - formats "{\"\u2068\": 1}" formats "{\"\u2068\": 1}" - formats "/\u2069\#{1}/" formats "/\u2069\#{1}/" - formats "\"\u202E\"" formats "\"\u202E\"" - formats "NamedTuple(\"\u202C\": Int32)" formats "NamedTuple(\"\u202C\": Int32)" - formats "\"\\c\u202D\"" formats "\"\\c\u202D\"" - formats "\"\u202C\"" formats "\"\u202C\"" - formats "%(\u2066)" formats "%(\u2066)" - formats "foo(\"\u202E\": 1)" formats "foo(\"\u202E\": 1)" - formats "\"\u2068\#{1}\"" formats "\"\u2068\#{1}\"" - formats "\"\\c\u2068\"" formats "\"\\c\u2068\"" - formats "def foo(\"\u2068\" x)\nend" formats "def foo(\"\u2068\" x)\nend" - formats "/\u202B\#{1}/" formats "/\u202B\#{1}/" - formats "%q(\u2067)" formats "%q(\u2067)" - formats "def foo(\"\u202D\" x)\nend" formats "def foo(\"\u202D\" x)\nend" - formats "%(\u202C)" formats "%(\u202C)" - formats "<<-EOS\n\u202E\#{1}\nEOS" formats "<<-EOS\n\u202E\#{1}\nEOS" - formats "\"\u2067\"" formats "\"\u2067\"" - formats "%q(\u202D)" formats "%q(\u202D)" - formats "%i(\u202C)" formats "%i(\u202C)" - formats "@[ Foo(foo: 1) ]\ndef foo\nend" formats "@[ Foo(foo: 1) ]\ndef foo\nend" - formats "$~.bar" formats "$~.bar" - formats "foo : (self)?" formats "foo : (self)?" - formats "foo bar:baz, qux:other" formats "foo bar:baz, qux:other" - formats "1.<=(2) { 3 }" formats "1.<=(2) { 3 }" - formats "a = 1\ncase\nwhen 2\nelse\n a /= 3\nend" formats "a = 1\ncase\nwhen 2\nelse\n a /= 3\nend" - formats "return 1 , *2" formats "return 1 , *2" - formats "return( *1 , *2 )" formats "return( *1 , *2 )" - formats "asm(\"a\" : \"b\"(1), \"c\"(2) : \"d\"(3) : : \"volatile\")" formats "asm(\"a\" : \"b\"(1), \"c\"(2) : \"d\"(3) : : \"volatile\")" - formats "->foo=" formats "->foo=" - formats "{ 1 => 2 ,\n 3 => 4 }" formats "{ 1 => 2 ,\n 3 => 4 }" - formats "case 1 \n when 2 \n 3 \n else 4 \n end" formats "case 1 \n when 2 \n 3 \n else 4 \n end" - formats "if 1\n2\nelsif\n3\n4\nelse\n6\nend" formats "if 1\n2\nelsif\n3\n4\nelse\n6\nend" - formats "macro foo\n {% if 1 %} 2 {% end %}\nend" formats "macro foo\n {% if 1 %} 2 {% end %}\nend" - formats "alias Foo =Bar" formats "alias Foo =Bar" - formats "NamedTuple(\n a: Int32,\n)" formats "NamedTuple(\n a: Int32,\n)" - formats "foo.bar(&.% baz)" formats "foo.bar(&.% baz)" - formats "module Foo\n# nothing\nend" formats "module Foo\n# nothing\nend" - formats "[\n 1, 2, # foo\n 3, 4,\n]" formats "[\n 1, 2, # foo\n 3, 4,\n]" - formats "yield(\n1 , \n2)" formats "yield(\n1 , \n2)" - formats "[] of Int32\n1" formats "[] of Int32\n1" - formats "foo.bar(&.baz)" formats "foo.bar(&.baz)" - formats "begin\n array[\n 0 # Zero\n ]\nend" formats "begin\n array[\n 0 # Zero\n ]\nend" - formats "if 1\n2\n3\n# foo\nend" formats "if 1\n2\n3\n# foo\nend" - formats "{\n \"foo\": 1,\n \"babraz\": 2,\n}" formats "{\n \"foo\": 1,\n \"babraz\": 2,\n}" - formats "foo &.bar" formats "foo &.bar" - formats "1 # foo\n/ 1 /" formats "1 # foo\n/ 1 /" - formats "FOO = 2 + 3\nA = 1 - 10" formats "FOO = 2 + 3\nA = 1 - 10" - formats "foo(\n <<-HERE,\n hello\n HERE\n 1,\n)" formats "foo(\n <<-HERE,\n hello\n HERE\n 1,\n)" - formats "あ.い, う.え.お = 1, 2" formats "あ.い, う.え.お = 1, 2" - formats "foo(\n 1,\n a: 1,\n b: 2,\n)" formats "foo(\n 1,\n a: 1,\n b: 2,\n)" - formats "{% if true %}\n <<-FOO\n hello \n FOO\n{% end %}" formats "{% if true %}\n <<-FOO\n hello \n FOO\n{% end %}" - formats "require \"foo\"\n\n@x : Int32\n\nclass Bar\nend" formats "require \"foo\"\n\n@x : Int32\n\nclass Bar\nend" - formats "foo { | a, ( b , (c, d) ) | a + b + c }" formats "foo { | a, ( b , (c, d) ) | a + b + c }" - formats "return 1 , 2" formats "return 1 , 2" - formats "self.as(Int32)" formats "self.as(Int32)" - formats "a = foo(baz1 do\nend)" formats "a = foo(baz1 do\nend)" - formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1), \"c\"(2) )" formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1), \"c\"(2) )" - formats "1 \\\nrescue 2" formats "1 \\\nrescue 2" - formats "<<-HTML\n \#{1}x\n HTML" formats "<<-HTML\n \#{1}x\n HTML" - formats "case 1 \n when 2 ; 3 \n when 4 ; 5\nend" formats "case 1 \n when 2 ; 3 \n when 4 ; 5\nend" - formats "\"foo \#{ __DIR__ }\"" formats "\"foo \#{ __DIR__ }\"" - formats "foo &.responds_to?(:foo).bar" formats "foo &.responds_to?(:foo).bar" - formats "[] of Foo" formats "[] of Foo" - formats "Foo:: Bar" formats "Foo:: Bar" - formats "alignof( Int32 )" formats "alignof( Int32 )" - formats "def foo(@[MyAnn] & : String -> Nil); end" formats "def foo(@[MyAnn] & : String -> Nil); end" - formats "(1)" formats "(1)" - formats "lib Foo\nend" formats "lib Foo\nend" - formats "def foo(&block: Int32)\nend" formats "def foo(&block: Int32)\nend" - formats "foo(//, //)" formats "foo(//, //)" - formats "if 1\n [\n 1,\n ].none?\nend" formats "if 1\n [\n 1,\n ].none?\nend" - formats "<<-HTML\n foo\n \#{\"foo\"}\n HTML" formats "<<-HTML\n foo\n \#{\"foo\"}\n HTML" - formats "yield" formats "yield" - formats "case 1 \n when .foo? \n 3 \n end" formats "case 1 \n when .foo? \n 3 \n end" - formats "->foo?" formats "->foo?" - formats "return { {1, 2}, {3, 4} }, 5" formats "return { {1, 2}, {3, 4} }, 5" - formats "foo.bar\n .baz(\n 1\n )" formats "foo.bar\n .baz(\n 1\n )" - formats "responds_to? :foo" formats "responds_to? :foo" - formats "instance_sizeof( Int32 )" formats "instance_sizeof( Int32 )" - formats "foo = [1, [2,\n 3],\n 4]" formats "foo = [1, [2,\n 3],\n 4]" - formats "1.>= { 3 }" formats "1.>= { 3 }" - formats "foo[&.bar]" formats "foo[&.bar]" - formats "# ```\n# macro foo\n# 1\n# end\n# ```\n" formats "# ```\n# macro foo\n# 1\n# end\n# ```\n" - formats "/ /" formats "/ /" - formats "Union(Int32, String)?" formats "Union(Int32, String)?" - formats "while true\n1\n\n# foo\nend" formats "while true\n1\n\n# foo\nend" - formats "select \n when foo ; 2 \n end" formats "select \n when foo ; 2 \n end" - formats "if 1\n[\n a() # b\n]\nend" formats "if 1\n[\n a() # b\n]\nend" - formats "macro foo\n {{ 1 + 2 }}\\\nend" formats "macro foo\n {{ 1 + 2 }}\\\nend" - formats "foo &.is_a?(T).bar" formats "foo &.is_a?(T).bar" - formats "case 1 # foo\nwhen 2\nend" formats "case 1 # foo\nwhen 2\nend" - formats "if 1\nelse\n# nothing\nend" formats "if 1\nelse\n# nothing\nend" - formats "while 1\n# nothing\nend" formats "while 1\n# nothing\nend" - formats "{ {foo: 2} }" formats "{ {foo: 2} }" - formats "def foo( x , & block : Int32 )\nend" formats "def foo( x , & block : Int32 )\nend" - formats "1\n# hello\n\n\n" formats "1\n# hello\n\n\n" - formats "foo(1, ) do\nend" formats "foo(1, ) do\nend" - formats "1.>=() { 3 }" formats "1.>=() { 3 }" - formats "module M\n @[MyAnn(\n 1\n\n )]\nend" formats "module M\n @[MyAnn(\n 1\n\n )]\nend" - formats "if 1\nif 2\n3 # foo\nend\nend" formats "if 1\nif 2\n3 # foo\nend\nend" - formats "1.== do\nend" formats "1.== do\nend" - formats "x : { {A, B}, {C, D} }" formats "x : { {A, B}, {C, D} }" - formats "$1.bar" formats "$1.bar" - formats "enum Baz\nA = 1\nFOO\n\nEX = 3\nend" formats "enum Baz\nA = 1\nFOO\n\nEX = 3\nend" - formats "foo(1, 2,)" formats "foo(1, 2,)" - formats "enum Foo\n A = 10\n FOO = 123\n BARBAZ = 1234\nend\n" formats "enum Foo\n A = 10\n FOO = 123\n BARBAZ = 1234\nend\n" - formats "long_variable_name = [{\n :foo => 1,\n}, {\n :bar => 2,\n}]" formats "long_variable_name = [{\n :foo => 1,\n}, {\n :bar => 2,\n}]" - formats "->( x )\n:\nInt32 { }" formats "->( x )\n:\nInt32 { }" - formats "foo &.==(2)" formats "foo &.==(2)" - formats "{/ / => / /, / / => / /}" formats "{/ / => / /, / / => / /}" - formats "begin\n begin\n\n end\nend" formats "begin\n begin\n\n end\nend" - formats "foo.\nbar" formats "foo.\nbar" -Semantic: abstract def - errors if abstract method is not implemented by subclass of subclass errors if abstract method is not implemented by subclass of subclass - doesn't error if implements with included module doesn't error if implements with included module - errors if implementation doesn't match keyword argument type errors if implementation doesn't match keyword argument type - doesn't error if implements a NoReturn param doesn't error if implements a NoReturn param - errors if abstract method of private type is not implemented by subclass errors if abstract method of private type is not implemented by subclass - doesn't error if abstract method with args is implemented by subclass (restriction -> no restriction) doesn't error if abstract method with args is implemented by subclass (restriction -> no restriction) - implements through extend (considers original type for generic lookup) (#8096) implements through extend (considers original type for generic lookup) (#8096) - doesn't error if abstract method with args is implemented by subclass doesn't error if abstract method with args is implemented by subclass - matches instantiated generic module matches instantiated generic module - doesn't error if implements with generic included module instance doesn't error if implements with generic included module instance - errors if abstract method with arguments is not implemented by subclass (block difference) errors if abstract method with arguments is not implemented by subclass (block difference) - doesn't error if abstract method is implemented by subclass doesn't error if abstract method is implemented by subclass - allow double splat when abstract doesn't have it allow double splat when abstract doesn't have it - doesn't error if abstract method is not implemented by including module doesn't error if abstract method is not implemented by including module - extra keyword arguments must have compatible type to double splat extra keyword arguments must have compatible type to double splat - finds implements in included module in disorder (#4052) finds implements in included module in disorder (#4052) - errors if using abstract def on subclass that also defines it as abstract errors if using abstract def on subclass that also defines it as abstract - error shows full signature of block parameter error shows full signature of block parameter - doesn't error if implements with parent class doesn't error if implements with parent class - works on abstract def on sub-subclass works on abstract def on sub-subclass - doesn't error if implements with generic parent class instance doesn't error if implements with generic parent class instance - matches generic types matches generic types - doesn't error if implementation have default value doesn't error if implementation have default value - errors if different return type errors if different return type - allow double splat argument allow double splat argument - errors if using abstract def on non-abstract class errors if using abstract def on non-abstract class - errors if implementation doesn't have the same default value errors if implementation doesn't have the same default value - gives correct error when no overload matches, when an abstract method is implemented (#1406) gives correct error when no overload matches, when an abstract method is implemented (#1406) - doesn't error if implements with parent module doesn't error if implements with parent module - double splat must match keyword argument type double splat must match keyword argument type - errors if abstract method is not implemented by subclass (nested in module) errors if abstract method is not implemented by subclass (nested in module) - matches instantiated generic types matches instantiated generic types - implements through extend (considers original type for generic lookup) (2) (#8096) implements through extend (considers original type for generic lookup) (2) (#8096) - errors if implementation doesn't have a splat errors if implementation doesn't have a splat - matches generic return type matches generic return type - errors if abstract method of private type is not implemented by including class errors if abstract method of private type is not implemented by including class - doesn't error if abstract method with args is implemented by subclass (don't check subclasses) doesn't error if abstract method with args is implemented by subclass (don't check subclasses) - errors if abstract method is not implemented by including class errors if abstract method is not implemented by including class - errors if implementation doesn't have keyword arguments errors if implementation doesn't have keyword arguments - errors if using abstract def on subclass errors if using abstract def on subclass - errors if abstract method is not implemented by subclass errors if abstract method is not implemented by subclass - errors if abstract method with arguments is not implemented by subclass errors if abstract method with arguments is not implemented by subclass - matches generic module (a bit more complex) matches generic module (a bit more complex) - doesn't error if abstract method is implemented by including class doesn't error if abstract method is implemented by including class - errors if abstract method with arguments is not implemented by subclass (wrong type) errors if abstract method with arguments is not implemented by subclass (wrong type) - doesn't error if free var in arg restriction shadows another type (#10153) doesn't error if free var in arg restriction shadows another type (#10153) - doesn't error if implementation matches keyword argument doesn't error if implementation matches keyword argument - errors if double splat type doesn't match errors if double splat type doesn't match - errors if using abstract def on metaclass errors if using abstract def on metaclass - errors if abstract method with arguments is not implemented by subclass (wrong number of arguments) errors if abstract method with arguments is not implemented by subclass (wrong number of arguments) - errors if can't find parent return type errors if can't find parent return type - errors if implementation doesn't match splat type errors if implementation doesn't match splat type - can implement even if yield comes later in macro code can implement even if yield comes later in macro code - matches generic module matches generic module - can implement by block signature even if yield comes later in macro code can implement by block signature even if yield comes later in macro code - errors if missing return type errors if missing return type - errors if implementation adds type restriction errors if implementation adds type restriction - doesn't error if abstract method is implemented by subclass via module inclusion doesn't error if abstract method is implemented by subclass via module inclusion - doesn't error if implementation have keyword arguments in different order doesn't error if implementation have keyword arguments in different order - doesn't error if implementation has more keyword arguments with default values doesn't error if implementation has more keyword arguments with default values - doesn't error with splat and args with default value doesn't error with splat and args with default value - works on abstract method on abstract class works on abstract method on abstract class - implementation is not inherited from supertype - nongeneric module nongeneric module - nongeneric class nongeneric class - generic module generic module - generic class generic class - allow splat instead of keyword argument allow splat instead of keyword argument - errors if implementation has more keyword arguments errors if implementation has more keyword arguments - allows arguments to be collapsed into splat allows arguments to be collapsed into splat - errors if implementation doesn't have a keyword argument errors if implementation doesn't have a keyword argument - doesn't error if abstract method with args is implemented by subclass (with one default arg) doesn't error if abstract method with args is implemented by subclass (with one default arg) - can return a more specific type can return a more specific type - errors if keyword argument doesn't have the same default value errors if keyword argument doesn't have the same default value - errors if can't find child return type errors if can't find child return type - errors if implementation doesn't have default value errors if implementation doesn't have default value - errors if missing a return type in subclass of generic subclass errors if missing a return type in subclass of generic subclass - errors if implementation misses the double splat errors if implementation misses the double splat - doesn't error with splat doesn't error with splat -Normalize: unless - normalizes unless normalizes unless -immutability of returned container literals (#10818) - ProcPointer#args ProcPointer#args - When#conds When#conds - MultiAssign#targets MultiAssign#targets - Union#types Union#types - Annotation#args Annotation#args - Generic#type_vars Generic#type_vars - StringInterpolation#expressions StringInterpolation#expressions - MultiAssign#values MultiAssign#values - ProcNotation#inputs ProcNotation#inputs -Code gen: multi assign - supports m to n assignment, with splat on left-hand side (3) supports m to n assignment, with splat on left-hand side (3) - supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1)������������ supports 1 to n assignment, raises if out of bounds (1)�� supports 1 to n assignment, raises if out of bounds (1)�� supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) - supports m to n assignment, splat is empty tuple (2) supports m to n assignment, splat is empty tuple (2) - supports m to n assignment, with splat on left-hand side (2) supports m to n assignment, with splat on left-hand side (2) - supports 1 to n assignment, with splat on left-hand side (2) supports 1 to n assignment, with splat on left-hand side (2) - supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1)������������ supports 1 to n assignment, splat is empty (1)�� supports 1 to n assignment, splat is empty (1)�� supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) - supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short������������ supports 1 to n assignment, raises if too short�� supports 1 to n assignment, raises if too short�� supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short - supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1)������������ supports 1 to n assignment, with splat on left-hand side (1)�� supports 1 to n assignment, with splat on left-hand side (1)�� supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) - strict_multi_assign - raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count���������� raises if value size in 1 to n assignment doesn't match target count���� raises if value size in 1 to n assignment doesn't match target count�� raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count - supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment���������� supports 1 to n assignment���� supports 1 to n assignment�� supports 1 to n assignment supports 1 to n assignment - supports m to n assignment, splat is empty tuple (1) supports m to n assignment, splat is empty tuple (1) - supports m to n assignment, splat is empty tuple (3) supports m to n assignment, splat is empty tuple (3) - supports m to n assignment, with splat on left-hand side (1) supports m to n assignment, with splat on left-hand side (1) - supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2)������������ supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2)���� supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) - supports 1 to n assignment, splat is empty (3) supports 1 to n assignment, splat is empty (3) - supports n to n assignment supports n to n assignment - supports 1 to n assignment, with splat on left-hand side (3) supports 1 to n assignment, with splat on left-hand side (3) - without strict_multi_assign - doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count�������������� doesn't raise if value size in 1 to n assignment doesn't match target count�� doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count - supports 1 to n assignment supports 1 to n assignment - supports 1 to n assignment, splat is empty (2) supports 1 to n assignment, splat is empty (2) -Crystal::Command::FormatCommand - formats stdin (invalid byte sequence error) formats stdin (invalid byte sequence error) - formats files formats files - formats files (error) formats files (error) - formats stdin formats stdin - checks files format (excludes) checks files format (excludes) - formats files (bug + show-stacktrace) formats files (bug + show-stacktrace) - checks files format (ok) checks files format (ok) - formats stdin (syntax error) formats stdin (syntax error) - formats files (dir) formats files (dir) - checks files format (excludes + includes) checks files format (excludes + includes) - formats stdin (bug) formats stdin (bug) - formats stdin (formatted) formats stdin (formatted) - formats files (bug) formats files (bug) - checks files format checks files format - formats stdin (bug + show-backtrace) formats stdin (bug + show-backtrace) -Codegen: is_a? - codegens is_a? with nilable gives false because other type 2 codegens is_a? with nilable gives false because other type 2 - codegens is_a? true for simple type codegens is_a? true for simple type - codegens is_a? from virtual type to module codegens is_a? from virtual type to module - does is_a? for virtual generic instance type against generic does is_a? for virtual generic instance type against generic - does is_a?(generic type) for nested generic inheritance, through upcast (2) does is_a?(generic type) for nested generic inheritance, through upcast (2) - codegens is_a? false for simple type codegens is_a? false for simple type - gives false if generic type doesn't match exactly gives false if generic type doesn't match exactly - codegens is_a? on right side of and codegens is_a? on right side of and - works with inherited generic class against an instantiation works with inherited generic class against an instantiation - doesn't work with inherited generic class against an instantiation (2) doesn't work with inherited generic class against an instantiation (2) - doesn't consider generic type to be a generic type of a recursive alias (#3524) doesn't consider generic type to be a generic type of a recursive alias (#3524) - doesn't error if result is discarded (#14113) doesn't error if result is discarded (#14113) - codegens is_a? with nilable gives true codegens is_a? with nilable gives true - transforms then if condition is always truthy transforms then if condition is always truthy - codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true������������ codegens is_a? with a Const does comparison and gives true�� codegens is_a? with a Const does comparison and gives true�� codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true - evaluates method on filtered union type 2 evaluates method on filtered union type 2 - codegens is_a? from nilable reference union type to nil codegens is_a? from nilable reference union type to nil - codegens is_a? with union gives true codegens is_a? with union gives true - passes is_a? with generic module type on virtual type (#10302) passes is_a? with generic module type on virtual type (#10302) - codegens untyped var (#4009) codegens untyped var (#4009) - visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364)���� visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364)������ visits 1.to_s twice, may trigger enclosing_call (#4364)�� visits 1.to_s twice, may trigger enclosing_call (#4364)�� visits 1.to_s twice, may trigger enclosing_call (#4364)�� visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364) - evaluate method on filtered type nilable type nil evaluate method on filtered type nilable type nil - does is_a?/responds_to? twice (#1451) does is_a?/responds_to? twice (#1451) - codegens is_a? casts union to nilable codegens is_a? casts union to nilable - codegens is_a? from nilable reference union type to type codegens is_a? from nilable reference union type to type - does is_a? with union type as Union(X, Y), don't resolve to virtual type (#10244) does is_a? with union type as Union(X, Y), don't resolve to virtual type (#10244) - does is_a? with generic class metaclass does is_a? with generic class metaclass - doesn't skip assignment when used in combination with .is_a? and && (#1121) doesn't skip assignment when used in combination with .is_a? and && (#1121) - codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used������������ codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used���� codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used - does is_a? with union type, don't resolve to virtual type (#10244) does is_a? with union type, don't resolve to virtual type (#10244) - codegens is_a? with nilable gives false because other type 1 codegens is_a? with nilable gives false because other type 1 - doesn't skip assignment when used in combination with .is_a? (false case) (#1121) doesn't skip assignment when used in combination with .is_a? (false case) (#1121) - says false for value.is_a?(Class) says false for value.is_a?(Class) - codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false������������ codegens is_a? with a Const does comparison and gives false�� codegens is_a? with a Const does comparison and gives false�� codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false - restricts virtual metaclass against virtual metaclass type restricts virtual metaclass against virtual metaclass type - does is_a? with && and true condition does is_a? with && and true condition - codegens is_a? with union gives false codegens is_a? with union gives false - codegens is_a? with union gives true codegens is_a? with union gives true - codegens is_a? with virtual and module codegens is_a? with virtual and module - transforms else if condition is always falsey transforms else if condition is always falsey - codegens is_a? casts union to nilable in method codegens is_a? casts union to nilable in method - says true for Class.is_a?(Class.class.class) (#4374) says true for Class.is_a?(Class.class.class) (#4374) - restricts type in else but lazily restricts type in else but lazily - does is_a?(generic type) for nested generic inheritance (2) does is_a?(generic type) for nested generic inheritance (2) - says true for Class.is_a?(Class.class) (#4374) says true for Class.is_a?(Class.class) (#4374) - evaluates method on filtered union type evaluates method on filtered union type - codegens is_a? with union gives false codegens is_a? with union gives false - restricts metaclass against virtual metaclass type restricts metaclass against virtual metaclass type - evaluates method on filtered union type 3 evaluates method on filtered union type 3 evaluates method on filtered union type 3 evaluates method on filtered union type 3 evaluates method on filtered union type 3 evaluates method on filtered union type 3������������ evaluates method on filtered union type 3�� evaluates method on filtered union type 3�� evaluates method on filtered union type 3 evaluates method on filtered union type 3 - restricts union metaclass to metaclass (#12295) restricts union metaclass to metaclass (#12295) - codegens is_a? with virtual and nil codegens is_a? with virtual and nil - codegens is_a? with nilable gives false because no type codegens is_a? with nilable gives false because no type - evaluate method on filtered type evaluate method on filtered type - does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304)������������ does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304)���� does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) - says false for GenericChild(Base).is_a?(GenericBase(Child)) (#1294) says false for GenericChild(Base).is_a?(GenericBase(Child)) (#1294) - restricts union with union restricts union with union - virtual metaclass type is not virtual instance type (#12628) virtual metaclass type is not virtual instance type (#12628) - evaluate method on filtered type nilable type not-nil evaluate method on filtered type nilable type not-nil - does is_a?(generic type) for nested generic inheritance, through upcast (1) does is_a?(generic type) for nested generic inheritance, through upcast (1) - codegens is_a? with nilable gives false because no type codegens is_a? with nilable gives false because no type - does is_a?(generic type) for nested generic inheritance (1) (#9660) does is_a?(generic type) for nested generic inheritance (1) (#9660) - resets truthy state after visiting nodes (bug) resets truthy state after visiting nodes (bug) - doesn't skip assignment when used in combination with .is_a? (true case, then) (#1121) doesn't skip assignment when used in combination with .is_a? (true case, then) (#1121) - works with inherited generic class against an instantiation (3) works with inherited generic class against an instantiation (3) - restricts simple type with union restricts simple type with union - doesn't type merge (1) (#548) doesn't type merge (1) (#548) - doesn't skip assignment when used in combination with .is_a? (true case, else) (#1121) doesn't skip assignment when used in combination with .is_a? (true case, else) (#1121) - does is_a? with more strict virtual type does is_a? with more strict virtual type - doesn't type merge (2) (#548) doesn't type merge (2) (#548) - codegens is_a? with virtual codegens is_a? with virtual - does is_a? for union of module and type does is_a? for union of module and type + assignment in array literal works assignment in array literal works assignment in array literal works assignment in array literal works assignment in array literal works assignment in array literal works assignment in array literal works assignment in array literal works assignment in array literal works assignment in array literal works + creates custom generic array in module (#5684) creates custom generic array in module (#5684) + creates custom generic array, with splats creates custom generic array, with splats + assignment in array-like literal works assignment in array-like literal works assignment in array-like literal works assignment in array-like literal works assignment in array-like literal works assignment in array-like literal works assignment in array-like literal works assignment in array-like literal works assignment in array-like literal works assignment in array-like literal works + creates custom non-generic array creates custom non-generic array +Normalize: proc pointer + normalizes proc pointer with parameters, without object normalizes proc pointer with parameters, without object + normalizes proc pointer with const receiver normalizes proc pointer with const receiver + normalizes proc pointer with global const receiver normalizes proc pointer with global const receiver + normalizes proc pointer with ivar receiver normalizes proc pointer with ivar receiver + normalizes proc pointer with cvar receiver normalizes proc pointer with cvar receiver + normalizes proc pointer with variable receiver normalizes proc pointer with variable receiver + normalizes proc pointer without object normalizes proc pointer without object + normalizes proc pointer of global call normalizes proc pointer of global call +Semantic: if + types an if with else of different type types an if with else of different type + doesn't fail on new variables inside typeof condition doesn't fail on new variables inside typeof condition + restricts || of more than 2 clauses (#8864) restricts || of more than 2 clauses (#8864) + doesn't filter and recombine when variables don't change in if doesn't filter and recombine when variables don't change in if + passes bug (related to #1729) passes bug (related to #1729) + doesn't consider nil type in else branch with if with && (#7434) doesn't consider nil type in else branch with if with && (#7434) + types variable after unreachable else of && (#3360) types variable after unreachable else of && (#3360) + doesn't fail on Expressions condition (1) doesn't fail on Expressions condition (1) + restricts && else in sub && (right) restricts && else in sub && (right) + restricts type with !var.is_a?(...) and && restricts type with !var.is_a?(...) and && + doesn't restrict || else in sub && (right) doesn't restrict || else in sub && (right) + restricts with || but doesn't unify types to base class restricts with || but doesn't unify types to base class + doesn't restrict with || on different vars doesn't restrict with || on different vars + types an if without else types an if without else + types an if with else of same type types an if with else of same type + restricts || else in sub || (left) restricts || else in sub || (left) + restricts || else (1) (#3266) restricts || else (1) (#3266) + doesn't fail on nested conditionals inside typeof condition doesn't fail on nested conditionals inside typeof condition + doesn't restrict || else in sub && (left) doesn't restrict || else in sub && (left) + restricts with || (#2464) restricts with || (#2464) + restricts type with !var and || restricts type with !var and || + restricts && of !var.is_a(...) restricts && of !var.is_a(...) + restricts the type of the right hand side of an || when using is_a? (#1728) restricts the type of the right hand side of an || when using is_a? (#1728) + correctly filters type of variable if there's a raise with an interpolation that can't be typed correctly filters type of variable if there's a raise with an interpolation that can't be typed + doesn't fail on Expressions condition (2) doesn't fail on Expressions condition (2) + restricts || else (2) (#3266) restricts || else (2) (#3266) + restricts and doesn't unify union types restricts and doesn't unify union types + errors if requires inside if errors if requires inside if + types `if` with `&&` and assignment types `if` with `&&` and assignment + restricts with && always falsey restricts with && always falsey + can invoke method on var that is declared on the right hand side of an and can invoke method on var that is declared on the right hand side of an and + doesn't restrict with || on var and non-restricting condition doesn't restrict with || on var and non-restricting condition + restricts || else (3) (#3266) restricts || else (3) (#3266) + restricts && else in sub && (left) restricts && else in sub && (left) + includes pointer types in falsey branch includes pointer types in falsey branch + restricts type with !var.is_a?(...) and || restricts type with !var.is_a?(...) and || + restricts || else in sub || (right) restricts || else in sub || (right) +.validate_name + digits digits + empty empty + underscores underscores + dashes dashes + uppercase uppercase + invalid character invalid character + length length +Call errors + says type mismatch for symbol against enum (did you mean) says type mismatch for symbol against enum (did you mean) + replaces generic type var in named argument replaces generic type var in named argument + says type mismatch for positional argument with two options says type mismatch for positional argument with two options + says missing named arguments says missing named arguments + says no parameter named says no parameter named + says missing named argument says missing named argument + says argument already specified says argument already specified + says type mismatch for positional argument says type mismatch for positional argument + replaces free variables in positional argument replaces free variables in positional argument + errors on argument if argument matches in all overloads but with different types in other arguments errors on argument if argument matches in all overloads but with different types in other arguments + says type mismatch for positional argument even if there are overloads that don't match says type mismatch for positional argument even if there are overloads that don't match + errors on argument if more types are given than expected errors on argument if more types are given than expected + replaces generic type var in positional argument replaces generic type var in positional argument + method signatures in error traces + expands single splat argument expands single splat argument + expands positional and single splat argument expands positional and single splat argument + expands positional and single splat argument, more elements expands positional and single splat argument, more elements + expands double splat argument, more elements expands double splat argument, more elements + uses `T.method` instead of `T.class#method` uses `T.method` instead of `T.class#method` + includes positional and named argument includes positional and named argument + expands positional and double splat argument, more elements expands positional and double splat argument, more elements + expands single splat argument, more elements expands single splat argument, more elements + includes named argument includes named argument + uses `T.method` instead of `T:module#method` uses `T.method` instead of `T:module#method` + expands positional and double splat argument, empty named tuple expands positional and double splat argument, empty named tuple + expands positional and double splat argument expands positional and double splat argument + expands single splat argument, empty tuple expands single splat argument, empty tuple + includes named arguments includes named arguments + expands double splat argument expands double splat argument + expands double splat argument, empty named tuple expands double splat argument, empty named tuple + expands positional and single splat argument, empty tuple expands positional and single splat argument, empty tuple + says type mismatch for positional argument with three options says type mismatch for positional argument with three options + says no parameters named says no parameters named + says not expected to be invoked with a block says not expected to be invoked with a block + says wrong number of arguments even if other overloads don't match by block says wrong number of arguments even if other overloads don't match by block + says type mismatch for symbol against enum (list all possibilities when 10 or less) says type mismatch for symbol against enum (list all possibilities when 10 or less) + says type mismatch for symbol against enum, named argument case says type mismatch for symbol against enum, named argument case + errors on argument if more types are given than expected, shows all expected types errors on argument if more types are given than expected, shows all expected types + says type mismatch for named argument says type mismatch for named argument + says expected to be invoked with a block says expected to be invoked with a block + says wrong number of arguments (to few arguments) says wrong number of arguments (to few arguments) + replaces free variables in named argument replaces free variables in named argument +Crystal::Repl::Interpreter + pointers + pointerof class var pointerof class var + pointerof read `StaticArray#@buffer` (1) pointerof read `StaticArray#@buffer` (1) + interprets pointer diff, negative interprets pointer diff, negative + pointerof instance var pointerof instance var + interprets pointerof, mutates pointer, read var interprets pointerof, mutates pointer, read var + interprets pointer set and get (union type, setter value) interprets pointer set and get (union type, setter value) + interprets pointer diff interprets pointer diff + interprets pointer set and get (union type) interprets pointer set and get (union type) + discards pointer diff discards pointer diff + interprets pointerof and mutates memory (there are more variables) interprets pointerof and mutates memory (there are more variables) + discards pointerof discards pointerof + discards pointer malloc discards pointer malloc + interprets pointer set and get (bool) interprets pointer set and get (bool) + interprets pointer realloc interprets pointer realloc + interprets pointer set and get (int) interprets pointer set and get (int) + interprets pointer set and get (clear stack) interprets pointer set and get (clear stack) + pointerof read instance var pointerof read instance var + pointerof read `StaticArray#@buffer` (2) pointerof read `StaticArray#@buffer` (2) + interprets pointer new and pointer address interprets pointer new and pointer address + interprets pointerof, mutates var, read pointer interprets pointerof, mutates var, read pointer + discards pointer get discards pointer get + discards pointer set discards pointer set + interprets nilable pointer truthiness interprets nilable pointer truthiness + discards pointer add discards pointer add + discards pointer new discards pointer new + interprets pointer realloc wrapper interprets pointer realloc wrapper + discards pointer realloc discards pointer realloc + interprets pointer add interprets pointer add +Semantic: class var + allows class var in primitive types (#612) allows class var in primitive types (#612) + errors if using self as type var but there's no self errors if using self as type var but there's no self + errors if redefining class var type in subclass errors if redefining class var type in subclass + declares class variable declares class variable + types as nilable if doesn't have initializer types as nilable if doesn't have initializer + can find class var in subclass can find class var in subclass + errors if using class variable at the top level errors if using class variable at the top level + errors if redefining class var type in included module errors if redefining class var type in included module + types class var types class var + says undefined class variable says undefined class variable + errors if redefining class var type in subclass, with guess errors if redefining class var type in subclass, with guess + errors when typing a class variable inside a method errors when typing a class variable inside a method + allows self.class as type var in class body (#537) allows self.class as type var in class body (#537) + gives correct error when trying to use Int as a class variable type gives correct error when trying to use Int as a class variable type + errors on undefined constant (2) errors on undefined constant (2) + infers type from T.new infers type from T.new + declares uninitialized (#2935) declares uninitialized (#2935) + types class var inside instance method types class var inside instance method + doesn't error if accessing class variable before defined (#2941) doesn't error if accessing class variable before defined (#2941) + declares class var in generic class declares class var in generic class + declares class variable (2) declares class variable (2) + errors on undefined constant (1) errors on undefined constant (1) + can access constant from generic metaclass (#3719) can access constant from generic metaclass (#3719) + infers in multiple assign for tuple type (1) infers in multiple assign for tuple type (1) + errors if class variable not nilable without initializer errors if class variable not nilable without initializer + doesn't error on recursive dependency if var is nilable (#2943) doesn't error on recursive dependency if var is nilable (#2943) + declares class var in generic module declares class var in generic module + redefines class variable type redefines class variable type + errors if using local variable in initializer errors if using local variable in initializer + types class var as nil if not assigned at the top level types class var as nil if not assigned at the top level + infers type from number literal infers type from number literal + errors when using Class (#2605) errors when using Class (#2605) + types class var inside proc literal inside class types class var inside proc literal inside class + can find class var through included module can find class var through included module + can assign to class variable if this type can be up-casted to ancestors class variable type (#4869) can assign to class variable if this type can be up-casted to ancestors class variable type (#4869) + types class var as nil if assigned for the first time inside method (#2059) types class var as nil if assigned for the first time inside method (#2059) +Code gen: exception + rescues with types defaults to generic rescue rescues with types defaults to generic rescue rescues with types defaults to generic rescue rescues with types defaults to generic rescue rescues with types defaults to generic rescue rescues with types defaults to generic rescue rescues with types defaults to generic rescue rescues with types defaults to generic rescue rescues with types defaults to generic rescue rescues with types defaults to generic rescue + executes ensure of next inside while inside body executes ensure of next inside while inside body executes ensure of next inside while inside body executes ensure of next inside while inside body executes ensure of next inside while inside body executes ensure of next inside while inside body executes ensure of next inside while inside body executes ensure of next inside while inside body executes ensure of next inside while inside body executes ensure of next inside while inside body + can use argument in rescue, with a different type (2) (#2844) can use argument in rescue, with a different type (2) (#2844) can use argument in rescue, with a different type (2) (#2844) can use argument in rescue, with a different type (2) (#2844) can use argument in rescue, with a different type (2) (#2844) can use argument in rescue, with a different type (2) (#2844) can use argument in rescue, with a different type (2) (#2844) can use argument in rescue, with a different type (2) (#2844) can use argument in rescue, with a different type (2) (#2844) can use argument in rescue, with a different type (2) (#2844) + executes ensure of break inside while inside rescue executes ensure of break inside while inside rescue executes ensure of break inside while inside rescue executes ensure of break inside while inside rescue executes ensure of break inside while inside rescue executes ensure of break inside while inside rescue executes ensure of break inside while inside rescue executes ensure of break inside while inside rescue executes ensure of break inside while inside rescue executes ensure of break inside while inside rescue + executes ensure when exception is unhandled (1) executes ensure when exception is unhandled (1) executes ensure when exception is unhandled (1) executes ensure when exception is unhandled (1) executes ensure when exception is unhandled (1) executes ensure when exception is unhandled (1) executes ensure when exception is unhandled (1) executes ensure when exception is unhandled (1) executes ensure when exception is unhandled (1) executes ensure when exception is unhandled (1) + codegens exception handler with return codegens exception handler with return codegens exception handler with return codegens exception handler with return codegens exception handler with return codegens exception handler with return codegens exception handler with return codegens exception handler with return codegens exception handler with return codegens exception handler with return + can use argument in rescue (#2844) can use argument in rescue (#2844) can use argument in rescue (#2844) can use argument in rescue (#2844) can use argument in rescue (#2844) can use argument in rescue (#2844) can use argument in rescue (#2844) can use argument in rescue (#2844) can use argument in rescue (#2844) can use argument in rescue (#2844) + receives exception object receives exception object receives exception object receives exception object receives exception object receives exception object receives exception object receives exception object receives exception object receives exception object + executes ensure when exception is raised (2) executes ensure when exception is raised (2) executes ensure when exception is raised (2) executes ensure when exception is raised (2) executes ensure when exception is raised (2) executes ensure when exception is raised (2) executes ensure when exception is raised (2) executes ensure when exception is raised (2) executes ensure when exception is raised (2) executes ensure when exception is raised (2) + types parenthesized expression (#5511) types parenthesized expression (#5511) types parenthesized expression (#5511) types parenthesized expression (#5511) types parenthesized expression (#5511) types parenthesized expression (#5511) types parenthesized expression (#5511) types parenthesized expression (#5511) types parenthesized expression (#5511) types parenthesized expression (#5511) + doesn't execute else if exception is raised (2) doesn't execute else if exception is raised (2) doesn't execute else if exception is raised (2) doesn't execute else if exception is raised (2) doesn't execute else if exception is raised (2) doesn't execute else if exception is raised (2) doesn't execute else if exception is raised (2) doesn't execute else if exception is raised (2) doesn't execute else if exception is raised (2) doesn't execute else if exception is raised (2) + codegens return from rescue with value codegens return from rescue with value codegens return from rescue with value codegens return from rescue with value codegens return from rescue with value codegens return from rescue with value codegens return from rescue with value codegens return from rescue with value codegens return from rescue with value codegens return from rescue with value + rescues a valid nested union rescues a valid nested union rescues a valid nested union rescues a valid nested union rescues a valid nested union rescues a valid nested union rescues a valid nested union rescues a valid nested union rescues a valid nested union rescues a valid nested union + executes ensure of break inside while inside body with nested handlers executes ensure of break inside while inside body with nested handlers executes ensure of break inside while inside body with nested handlers executes ensure of break inside while inside body with nested handlers executes ensure of break inside while inside body with nested handlers executes ensure of break inside while inside body with nested handlers executes ensure of break inside while inside body with nested handlers executes ensure of break inside while inside body with nested handlers executes ensure of break inside while inside body with nested handlers executes ensure of break inside while inside body with nested handlers + doesn't crash on #1988 doesn't crash on #1988 doesn't crash on #1988 doesn't crash on #1988 doesn't crash on #1988 doesn't crash on #1988 doesn't crash on #1988 doesn't crash on #1988 doesn't crash on #1988 doesn't crash on #1988 + doesn't execute else if exception is raised conditionally (1) doesn't execute else if exception is raised conditionally (1) doesn't execute else if exception is raised conditionally (1) doesn't execute else if exception is raised conditionally (1) doesn't execute else if exception is raised conditionally (1) doesn't execute else if exception is raised conditionally (1) doesn't execute else if exception is raised conditionally (1) doesn't execute else if exception is raised conditionally (1) doesn't execute else if exception is raised conditionally (1) doesn't execute else if exception is raised conditionally (1) + does ensure after rescue which returns (#171) does ensure after rescue which returns (#171) does ensure after rescue which returns (#171) does ensure after rescue which returns (#171) does ensure after rescue which returns (#171) does ensure after rescue which returns (#171) does ensure after rescue which returns (#171) does ensure after rescue which returns (#171) does ensure after rescue which returns (#171) does ensure after rescue which returns (#171) + does not rescue just any module does not rescue just any module does not rescue just any module does not rescue just any module does not rescue just any module does not rescue just any module does not rescue just any module does not rescue just any module does not rescue just any module does not rescue just any module + executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block + executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns + can use argument in rescue, with a different type (1) (#2844) can use argument in rescue, with a different type (1) (#2844) can use argument in rescue, with a different type (1) (#2844) can use argument in rescue, with a different type (1) (#2844) can use argument in rescue, with a different type (1) (#2844) can use argument in rescue, with a different type (1) (#2844) can use argument in rescue, with a different type (1) (#2844) can use argument in rescue, with a different type (1) (#2844) can use argument in rescue, with a different type (1) (#2844) can use argument in rescue, with a different type (1) (#2844) + executes ensure when exception is raised (1) executes ensure when exception is raised (1) executes ensure when exception is raised (1) executes ensure when exception is raised (1) executes ensure when exception is raised (1) executes ensure when exception is raised (1) executes ensure when exception is raised (1) executes ensure when exception is raised (1) executes ensure when exception is raised (1) executes ensure when exception is raised (1) + handles exception in outer block (2) handles exception in outer block (2) handles exception in outer block (2) handles exception in outer block (2) handles exception in outer block (2) handles exception in outer block (2) handles exception in outer block (2) handles exception in outer block (2) handles exception in outer block (2) handles exception in outer block (2) + executes else if no exception is raised (2) executes else if no exception is raised (2) executes else if no exception is raised (2) executes else if no exception is raised (2) executes else if no exception is raised (2) executes else if no exception is raised (2) executes else if no exception is raised (2) executes else if no exception is raised (2) executes else if no exception is raised (2) executes else if no exception is raised (2) + executes ensure when raising inside rescue executes ensure when raising inside rescue executes ensure when raising inside rescue executes ensure when raising inside rescue executes ensure when raising inside rescue executes ensure when raising inside rescue executes ensure when raising inside rescue executes ensure when raising inside rescue executes ensure when raising inside rescue executes ensure when raising inside rescue + executes ensure when no exception is raised (1) executes ensure when no exception is raised (1) executes ensure when no exception is raised (1) executes ensure when no exception is raised (1) executes ensure when no exception is raised (1) executes ensure when no exception is raised (1) executes ensure when no exception is raised (1) executes ensure when no exception is raised (1) executes ensure when no exception is raised (1) executes ensure when no exception is raised (1) + runs NoReturn ensure (#3082) runs NoReturn ensure (#3082) runs NoReturn ensure (#3082) runs NoReturn ensure (#3082) runs NoReturn ensure (#3082) runs NoReturn ensure (#3082) runs NoReturn ensure (#3082) runs NoReturn ensure (#3082) runs NoReturn ensure (#3082) runs NoReturn ensure (#3082) + doesn't execute else if exception is raised conditionally (2) doesn't execute else if exception is raised conditionally (2) doesn't execute else if exception is raised conditionally (2) doesn't execute else if exception is raised conditionally (2) doesn't execute else if exception is raised conditionally (2) doesn't execute else if exception is raised conditionally (2) doesn't execute else if exception is raised conditionally (2) doesn't execute else if exception is raised conditionally (2) doesn't execute else if exception is raised conditionally (2) doesn't execute else if exception is raised conditionally (2) + executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block executes ensure of next inside block + executes ensure of calling method when doing break inside block (#1233) executes ensure of calling method when doing break inside block (#1233) executes ensure of calling method when doing break inside block (#1233) executes ensure of calling method when doing break inside block (#1233) executes ensure of calling method when doing break inside block (#1233) executes ensure of calling method when doing break inside block (#1233) executes ensure of calling method when doing break inside block (#1233) executes ensure of calling method when doing break inside block (#1233) executes ensure of calling method when doing break inside block (#1233) executes ensure of calling method when doing break inside block (#1233) + can result into union (1) can result into union (1) can result into union (1) can result into union (1) can result into union (1) can result into union (1) can result into union (1) can result into union (1) can result into union (1) can result into union (1) + ensure without rescue ensure without rescue ensure without rescue ensure without rescue ensure without rescue ensure without rescue ensure without rescue ensure without rescue ensure without rescue ensure without rescue + codegens issue #118 (2) codegens issue #118 (2) + handles nested exceptions handles nested exceptions handles nested exceptions handles nested exceptions handles nested exceptions handles nested exceptions handles nested exceptions handles nested exceptions handles nested exceptions handles nested exceptions + executes ensure from return until target executes ensure from return until target executes ensure from return until target executes ensure from return until target executes ensure from return until target executes ensure from return until target executes ensure from return until target executes ensure from return until target executes ensure from return until target executes ensure from return until target + closures rescue variable (#8141) closures rescue variable (#8141) + executes rescue if something is raised unconditionally executes rescue if something is raised unconditionally executes rescue if something is raised unconditionally executes rescue if something is raised unconditionally executes rescue if something is raised unconditionally executes rescue if something is raised unconditionally executes rescue if something is raised unconditionally executes rescue if something is raised unconditionally executes rescue if something is raised unconditionally executes rescue if something is raised unconditionally + executes ensure of break inside while inside body executes ensure of break inside while inside body executes ensure of break inside while inside body executes ensure of break inside while inside body executes ensure of break inside while inside body executes ensure of break inside while inside body executes ensure of break inside while inside body executes ensure of break inside while inside body executes ensure of break inside while inside body executes ensure of break inside while inside body + handles subclass handles subclass handles subclass handles subclass handles subclass handles subclass handles subclass handles subclass handles subclass handles subclass + executes ensure when no exception is raised (2) executes ensure when no exception is raised (2) executes ensure when no exception is raised (2) executes ensure when no exception is raised (2) executes ensure when no exception is raised (2) executes ensure when no exception is raised (2) executes ensure when no exception is raised (2) executes ensure when no exception is raised (2) executes ensure when no exception is raised (2) executes ensure when no exception is raised (2) + executes rescue if something is raised conditionally executes rescue if something is raised conditionally executes rescue if something is raised conditionally executes rescue if something is raised conditionally executes rescue if something is raised conditionally executes rescue if something is raised conditionally executes rescue if something is raised conditionally executes rescue if something is raised conditionally executes rescue if something is raised conditionally executes rescue if something is raised conditionally + does not rescue just any union does not rescue just any union does not rescue just any union does not rescue just any union does not rescue just any union does not rescue just any union does not rescue just any union does not rescue just any union does not rescue just any union does not rescue just any union + can result into union (2) can result into union (2) can result into union (2) can result into union (2) can result into union (2) can result into union (2) can result into union (2) can result into union (2) can result into union (2) can result into union (2) + handle multiple exception types (1) handle multiple exception types (1) handle multiple exception types (1) handle multiple exception types (1) handle multiple exception types (1) handle multiple exception types (1) handle multiple exception types (1) handle multiple exception types (1) handle multiple exception types (1) handle multiple exception types (1) + executes ensure of break inside while inside body with block executes ensure of break inside while inside body with block executes ensure of break inside while inside body with block executes ensure of break inside while inside body with block executes ensure of break inside while inside body with block executes ensure of break inside while inside body with block executes ensure of break inside while inside body with block executes ensure of break inside while inside body with block executes ensure of break inside while inside body with block executes ensure of break inside while inside body with block + executes return inside rescue, executing ensure executes return inside rescue, executing ensure executes return inside rescue, executing ensure executes return inside rescue, executing ensure executes return inside rescue, executing ensure executes return inside rescue, executing ensure executes return inside rescue, executing ensure executes return inside rescue, executing ensure executes return inside rescue, executing ensure executes return inside rescue, executing ensure + handles rescuing union between module types handles rescuing union between module types handles rescuing union between module types handles rescuing union between module types handles rescuing union between module types handles rescuing union between module types handles rescuing union between module types handles rescuing union between module types handles rescuing union between module types handles rescuing union between module types + handle exception raised by proc literal handle exception raised by proc literal handle exception raised by proc literal handle exception raised by proc literal handle exception raised by proc literal handle exception raised by proc literal handle exception raised by proc literal handle exception raised by proc literal handle exception raised by proc literal handle exception raised by proc literal + executes ensure from return until target executes ensure from return until target executes ensure from return until target executes ensure from return until target executes ensure from return until target executes ensure from return until target executes ensure from return until target executes ensure from return until target executes ensure from return until target executes ensure from return until target + handles rescuing module type handles rescuing module type handles rescuing module type handles rescuing module type handles rescuing module type handles rescuing module type handles rescuing module type handles rescuing module type handles rescuing module type handles rescuing module type + executes ensure of break inside block executes ensure of break inside block executes ensure of break inside block executes ensure of break inside block executes ensure of break inside block executes ensure of break inside block executes ensure of break inside block executes ensure of break inside block executes ensure of break inside block executes ensure of break inside block + can rescue TypeCastError (#2607) can rescue TypeCastError (#2607) can rescue TypeCastError (#2607) can rescue TypeCastError (#2607) can rescue TypeCastError (#2607) can rescue TypeCastError (#2607) can rescue TypeCastError (#2607) can rescue TypeCastError (#2607) can rescue TypeCastError (#2607) can rescue TypeCastError (#2607) + catches exception thrown by as inside method (#4030) catches exception thrown by as inside method (#4030) catches exception thrown by as inside method (#4030) catches exception thrown by as inside method (#4030) catches exception thrown by as inside method (#4030) catches exception thrown by as inside method (#4030) catches exception thrown by as inside method (#4030) catches exception thrown by as inside method (#4030) catches exception thrown by as inside method (#4030) catches exception thrown by as inside method (#4030) + codegens issue #118 (1) codegens issue #118 (1) + executes ensure of break inside while inside else executes ensure of break inside while inside else executes ensure of break inside while inside else executes ensure of break inside while inside else executes ensure of break inside while inside else executes ensure of break inside while inside else executes ensure of break inside while inside else executes ensure of break inside while inside else executes ensure of break inside while inside else executes ensure of break inside while inside else + executes ensure when exception is unhandled (2) executes ensure when exception is unhandled (2) executes ensure when exception is unhandled (2) executes ensure when exception is unhandled (2) executes ensure when exception is unhandled (2) executes ensure when exception is unhandled (2) executes ensure when exception is unhandled (2) executes ensure when exception is unhandled (2) executes ensure when exception is unhandled (2) executes ensure when exception is unhandled (2) + uses exception after rescue uses exception after rescue uses exception after rescue uses exception after rescue uses exception after rescue uses exception after rescue uses exception after rescue uses exception after rescue uses exception after rescue uses exception after rescue + runs #2441 runs #2441 runs #2441 runs #2441 runs #2441 runs #2441 runs #2441 runs #2441 runs #2441 runs #2441 + doesn't execute else if exception is raised (1) doesn't execute else if exception is raised (1) doesn't execute else if exception is raised (1) doesn't execute else if exception is raised (1) doesn't execute else if exception is raised (1) doesn't execute else if exception is raised (1) doesn't execute else if exception is raised (1) doesn't execute else if exception is raised (1) doesn't execute else if exception is raised (1) doesn't execute else if exception is raised (1) + codegens rescue specific leaf exception codegens rescue specific leaf exception codegens rescue specific leaf exception codegens rescue specific leaf exception codegens rescue specific leaf exception codegens rescue specific leaf exception codegens rescue specific leaf exception codegens rescue specific leaf exception codegens rescue specific leaf exception codegens rescue specific leaf exception + executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns executes ensure when the main block returns + executes body if nothing raised (1) executes body if nothing raised (1) executes body if nothing raised (1) executes body if nothing raised (1) executes body if nothing raised (1) executes body if nothing raised (1) executes body if nothing raised (1) executes body if nothing raised (1) executes body if nothing raised (1) executes body if nothing raised (1) + executes else if no exception is raised (1) executes else if no exception is raised (1) executes else if no exception is raised (1) executes else if no exception is raised (1) executes else if no exception is raised (1) executes else if no exception is raised (1) executes else if no exception is raised (1) executes else if no exception is raised (1) executes else if no exception is raised (1) executes else if no exception is raised (1) + handle multiple exception types (2) handle multiple exception types (2) handle multiple exception types (2) handle multiple exception types (2) handle multiple exception types (2) handle multiple exception types (2) handle multiple exception types (2) handle multiple exception types (2) handle multiple exception types (2) handle multiple exception types (2) + propagates raise status (#2074) propagates raise status (#2074) propagates raise status (#2074) propagates raise status (#2074) propagates raise status (#2074) propagates raise status (#2074) propagates raise status (#2074) propagates raise status (#2074) propagates raise status (#2074) propagates raise status (#2074) + rescues with type rescues with type rescues with type rescues with type rescues with type rescues with type rescues with type rescues with type rescues with type rescues with type + rescues a valid union rescues a valid union rescues a valid union rescues a valid union rescues a valid union rescues a valid union rescues a valid union rescues a valid union rescues a valid union rescues a valid union + executes ensure when the main block yields and returns executes ensure when the main block yields and returns executes ensure when the main block yields and returns executes ensure when the main block yields and returns executes ensure when the main block yields and returns executes ensure when the main block yields and returns executes ensure when the main block yields and returns executes ensure when the main block yields and returns executes ensure when the main block yields and returns executes ensure when the main block yields and returns + doesn't codegen duplicated ensure if unreachable (#709) doesn't codegen duplicated ensure if unreachable (#709) + captures exception thrown from proc captures exception thrown from proc captures exception thrown from proc captures exception thrown from proc captures exception thrown from proc captures exception thrown from proc captures exception thrown from proc captures exception thrown from proc captures exception thrown from proc captures exception thrown from proc + handles rescuing union between module type and class type handles rescuing union between module type and class type handles rescuing union between module type and class type handles rescuing union between module type and class type handles rescuing union between module type and class type handles rescuing union between module type and class type handles rescuing union between module type and class type handles rescuing union between module type and class type handles rescuing union between module type and class type handles rescuing union between module type and class type + handles exception in outer block (1) handles exception in outer block (1) handles exception in outer block (1) handles exception in outer block (1) handles exception in outer block (1) handles exception in outer block (1) handles exception in outer block (1) handles exception in outer block (1) handles exception in outer block (1) handles exception in outer block (1) +Normalize: regex literal + StringLiteral + expands to const expands to const + simple simple + options + im im + empty empty + i i + x x + imx imx + StringInterpolation + simple simple +Crystal::Doc::Macro + args_to_s + shows simple arg and double splat arg shows simple arg and double splat arg + shows simple args shows simple args + shows simple arg and splat arg shows simple arg and splat arg + shows external name of arg with quotes and escaping shows external name of arg with quotes and escaping + shows external name of arg shows external name of arg + shows simple arg and block arg shows simple arg and block arg + shows block arg shows block arg + shows double splat arg shows double splat arg + shows default value with highlighting shows default value with highlighting + shows double splat arg shows double splat arg + shows splat arg shows splat arg +Code gen: debug + correctly restores debug location after fun change (#4254) correctly restores debug location after fun change (#4254) + has debug info in closure inside if (#5593) has debug info in closure inside if (#5593) + stores and restores debug location after jumping to main (3) stores and restores debug location after jumping to main (3) + codegens extern union (#7335) codegens extern union (#7335) + stores and restores debug location after jumping to main (2) stores and restores debug location after jumping to main (2) + doesn't emit incorrect debug info for closured self doesn't emit incorrect debug info for closured self + codegens abstract struct (#3578) codegens abstract struct (#3578) + doesn't fail on constant read calls (#11416) doesn't fail on constant read calls (#11416) + codegens lib union (#7335) codegens lib union (#7335) + has correct debug location after constant initialization in call with block (#4719) has correct debug location after constant initialization in call with block (#4719) + codegens correct debug info for new with custom allocate (#3945) codegens correct debug info for new with custom allocate (#3945) + stores and restores debug location after jumping to main (#6920) stores and restores debug location after jumping to main (#6920) + codegens correct debug info for untyped expression (#4007 and #4008) codegens correct debug info for untyped expression (#4007 and #4008) + doesn't fail on splat expansions inside array-like literals doesn't fail on splat expansions inside array-like literals doesn't fail on splat expansions inside array-like literals doesn't fail on splat expansions inside array-like literals doesn't fail on splat expansions inside array-like literals doesn't fail on splat expansions inside array-like literals doesn't fail on splat expansions inside array-like literals doesn't fail on splat expansions inside array-like literals doesn't fail on splat expansions inside array-like literals doesn't fail on splat expansions inside array-like literals + doesn't emit debug info for unused variable declarations (#9882) doesn't emit debug info for unused variable declarations (#9882) + inlines instance var access through getter in debug mode inlines instance var access through getter in debug mode +Lexer: location + pushes and pops its location pushes and pops its location + stores column numbers stores column numbers + locations in same files are comparable based on line locations in same files are comparable based on line + stores line numbers stores line numbers + overrides location with pragma overrides location with pragma + locations in different files have no order locations in different files have no order + Location.parse + raises ArgumentError if missing part raises ArgumentError if missing part + parses location from string parses location from string + raises ArgumentError if missing colon raises ArgumentError if missing colon + raises ArgumentError if line number is invalid raises ArgumentError if line number is invalid + raises ArgumentError if column number is invalid raises ArgumentError if column number is invalid + locations with virtual files should be comparable locations with virtual files should be comparable + assigns correct loc location to node assigns correct loc location to node + parses var/call right after loc (#491) parses var/call right after loc (#491) + uses two consecutive loc pragma uses two consecutive loc pragma +Crystal::Doc::MarkdDocRenderer + renders headline + renders "## Foo Bar\n### Sub\n## Bar Baz\n### Sub" renders "## Foo Bar\n### Sub\n## Bar Baz\n### Sub" + renders "## Foo Bar" renders "## Foo Bar" + renders code blocks + renders "```\nHello\nWorld\n```" renders "```\nHello\nWorld\n```" + renders "```cr\nHello\nWorld\n```" renders "```cr\nHello\nWorld\n```" + renders "```crystal\nHello\nWorld\n```" renders "```crystal\nHello\nWorld\n```" + renders links + renders "[foo](http://example.com/foo)" renders "[foo](http://example.com/foo)" + renders "[`Foo`](http://example.com/foo)" renders "[`Foo`](http://example.com/foo)" + renders "[filter](https://docs.celestine.dev/Celestine/Meta/Context.html#filter(&block:Celestine::Filter-%3ECelestine::Filter)-instance-method)" renders "[filter](https://docs.celestine.dev/Celestine/Meta/Context.html#filter(&block:Celestine::Filter-%3ECelestine::Filter)-instance-method)" + renders html + renders "<h1 align=\"center\">Foo</h1>" renders "<h1 align=\"center\">Foo</h1>" + renders code spans + renders "`<style>`" renders "`<style>`" + expand_code_links + finds method with question mark finds method with question mark + finds method with args even with empty brackets finds method with args even with empty brackets + finds operator method finds operator method + does not break when referencing lib type (#9928) does not break when referencing lib type (#9928) + doesn't find parents' methods doesn't find parents' methods + doesn't spuriously match range literals doesn't spuriously match range literals + finds types from base finds types from base + finds sibling methods with self receiver finds sibling methods with self receiver + finds operator method with unspecified args finds operator method with unspecified args + doesn't find wrong absolute type doesn't find wrong absolute type + finds nested type finds nested type + doesn't match with different separator doesn't match with different separator + finds constant finds constant + finds method of an absolute type finds method of an absolute type + finds method with zero args finds method with zero args + doesn't find sibling methods of wrong type doesn't find sibling methods of wrong type + doesn't find wrong kind of sibling methods doesn't find wrong kind of sibling methods + finds method with args finds method with args + doesn't find wrong kind of methods doesn't find wrong kind of methods + doesn't find method with wrong number of args doesn't find method with wrong number of args + finds sibling methods finds sibling methods + doesn't find substrings for methods doesn't find substrings for methods + matches methods on single-character class names matches methods on single-character class names + finds methods of a type finds methods of a type + doesn't find sibling methods with fake receiver doesn't find sibling methods with fake receiver + finds method with exclamation mark finds method with exclamation mark + finds multiple kinds of things finds multiple kinds of things + doesn't find type not at word boundary doesn't find type not at word boundary + doesn't find parents' methods doesn't find parents' methods + finds multiple methods with brackets finds multiple methods with brackets + finds method with unspecified args finds method with unspecified args + finds absolute type finds absolute type + finds types from nested finds types from nested + doesn't find method with wrong number of args doesn't find method with wrong number of args + finds sibling methods finds sibling methods +Semantic: abstract def + errors if implementation misses the double splat errors if implementation misses the double splat + errors if implementation doesn't match splat type errors if implementation doesn't match splat type + errors if implementation doesn't have a keyword argument errors if implementation doesn't have a keyword argument + doesn't error if implementation have default value doesn't error if implementation have default value + can implement by block signature even if yield comes later in macro code can implement by block signature even if yield comes later in macro code + doesn't error if abstract method is not implemented by including module doesn't error if abstract method is not implemented by including module + errors if implementation adds type restriction errors if implementation adds type restriction + errors if implementation doesn't match keyword argument type errors if implementation doesn't match keyword argument type + errors if abstract method is not implemented by subclass errors if abstract method is not implemented by subclass + doesn't error if abstract method is implemented by including class doesn't error if abstract method is implemented by including class + allow splat instead of keyword argument allow splat instead of keyword argument + doesn't error if implements with parent module doesn't error if implements with parent module + error shows full signature of block parameter error shows full signature of block parameter + doesn't error if abstract method with args is implemented by subclass (don't check subclasses) doesn't error if abstract method with args is implemented by subclass (don't check subclasses) + gives correct error when no overload matches, when an abstract method is implemented (#1406) gives correct error when no overload matches, when an abstract method is implemented (#1406) + matches generic return type matches generic return type + errors if implementation has more keyword arguments errors if implementation has more keyword arguments + allows arguments to be collapsed into splat allows arguments to be collapsed into splat + errors if abstract method is not implemented by including class errors if abstract method is not implemented by including class + can implement even if yield comes later in macro code can implement even if yield comes later in macro code + doesn't error if implements with included module doesn't error if implements with included module + errors if different return type errors if different return type + doesn't error if abstract method with args is implemented by subclass (with one default arg) doesn't error if abstract method with args is implemented by subclass (with one default arg) + errors if abstract method of private type is not implemented by including class errors if abstract method of private type is not implemented by including class + works on abstract def on sub-subclass works on abstract def on sub-subclass + errors if missing a return type in subclass of generic subclass errors if missing a return type in subclass of generic subclass + doesn't error if implements with parent class doesn't error if implements with parent class + errors if double splat type doesn't match errors if double splat type doesn't match + errors if using abstract def on non-abstract class errors if using abstract def on non-abstract class + allow double splat argument allow double splat argument + extra keyword arguments must have compatible type to double splat extra keyword arguments must have compatible type to double splat + errors if abstract method with arguments is not implemented by subclass (wrong type) errors if abstract method with arguments is not implemented by subclass (wrong type) + errors if abstract method is not implemented by subclass of subclass errors if abstract method is not implemented by subclass of subclass + errors if abstract method of private type is not implemented by subclass errors if abstract method of private type is not implemented by subclass + doesn't error if implements with generic included module instance doesn't error if implements with generic included module instance + can return a more specific type can return a more specific type + errors if implementation doesn't have default value errors if implementation doesn't have default value + matches instantiated generic types matches instantiated generic types + errors if using abstract def on metaclass errors if using abstract def on metaclass + errors if using abstract def on subclass that also defines it as abstract errors if using abstract def on subclass that also defines it as abstract + matches generic module (a bit more complex) matches generic module (a bit more complex) + matches instantiated generic module matches instantiated generic module + errors if can't find parent return type errors if can't find parent return type + implements through extend (considers original type for generic lookup) (2) (#8096) implements through extend (considers original type for generic lookup) (2) (#8096) + implements through extend (considers original type for generic lookup) (#8096) implements through extend (considers original type for generic lookup) (#8096) + errors if using abstract def on subclass errors if using abstract def on subclass + works on abstract method on abstract class works on abstract method on abstract class + doesn't error with splat and args with default value doesn't error with splat and args with default value + doesn't error if abstract method is implemented by subclass via module inclusion doesn't error if abstract method is implemented by subclass via module inclusion + doesn't error if abstract method with args is implemented by subclass doesn't error if abstract method with args is implemented by subclass + implementation is not inherited from supertype + generic module generic module + nongeneric module nongeneric module + generic class generic class + nongeneric class nongeneric class + finds implements in included module in disorder (#4052) finds implements in included module in disorder (#4052) + errors if abstract method with arguments is not implemented by subclass (block difference) errors if abstract method with arguments is not implemented by subclass (block difference) + doesn't error if implementation has more keyword arguments with default values doesn't error if implementation has more keyword arguments with default values + errors if keyword argument doesn't have the same default value errors if keyword argument doesn't have the same default value + doesn't error if implements with generic parent class instance doesn't error if implements with generic parent class instance + errors if abstract method with arguments is not implemented by subclass errors if abstract method with arguments is not implemented by subclass + doesn't error if abstract method with args is implemented by subclass (restriction -> no restriction) doesn't error if abstract method with args is implemented by subclass (restriction -> no restriction) + allow double splat when abstract doesn't have it allow double splat when abstract doesn't have it + doesn't error if implementation have keyword arguments in different order doesn't error if implementation have keyword arguments in different order + doesn't error if abstract method is implemented by subclass doesn't error if abstract method is implemented by subclass + errors if implementation doesn't have keyword arguments errors if implementation doesn't have keyword arguments + double splat must match keyword argument type double splat must match keyword argument type + doesn't error if free var in arg restriction shadows another type (#10153) doesn't error if free var in arg restriction shadows another type (#10153) + doesn't error if implementation matches keyword argument doesn't error if implementation matches keyword argument + matches generic module matches generic module + errors if missing return type errors if missing return type + doesn't error if implements a NoReturn param doesn't error if implements a NoReturn param + errors if implementation doesn't have the same default value errors if implementation doesn't have the same default value + matches generic types matches generic types + errors if abstract method is not implemented by subclass (nested in module) errors if abstract method is not implemented by subclass (nested in module) + errors if can't find child return type errors if can't find child return type + doesn't error with splat doesn't error with splat + errors if abstract method with arguments is not implemented by subclass (wrong number of arguments) errors if abstract method with arguments is not implemented by subclass (wrong number of arguments) + errors if implementation doesn't have a splat errors if implementation doesn't have a splat +Code gen: enum + codegens enum bitflags (2) codegens enum bitflags (2) + can use macro calls inside enum value (#424) can use macro calls inside enum value (#424) + adds a none? method to flags enum adds a none? method to flags enum + codegens enum All redefined codegens enum All redefined + uses enum value before declaration (hoisting) uses enum value before declaration (hoisting) + automatically defines question method for each enum member (flags, false case) automatically defines question method for each enum member (flags, false case) + can define flags enum : UInt64 with more than 32 values (#7268) can define flags enum : UInt64 with more than 32 values (#7268) + codegens enum value codegens enum value + codegens enum bitflags All codegens enum bitflags All + can define flags enum : UInt128 with 128 values can define flags enum : UInt128 with 128 values + automatically defines question method for each enum member (false case) automatically defines question method for each enum member (false case) + casts All value to base type casts All value to base type + codegens enum codegens enum + codegens enum bitflags (4) codegens enum bitflags (4) + can redefine Enum.new and use previous_def can redefine Enum.new and use previous_def + can use macro calls inside enum value, macro defined outside enum (#424) can use macro calls inside enum value, macro defined outside enum (#424) + codegens enum bitflags (1) codegens enum bitflags (1) + can define flags enum : UInt128 with compile-time interpreted values can define flags enum : UInt128 with compile-time interpreted values + codegens enum None redefined codegens enum None redefined + automatically defines question method for each enum member (flags, true case) automatically defines question method for each enum member (flags, true case) + codegens enum without explicit value codegens enum without explicit value + creates enum from value creates enum from value + does ~ at compile time for enum member does ~ at compile time for enum member + allows class vars in enum allows class vars in enum + codegens enum bitflags None codegens enum bitflags None + automatically defines question method for each enum member (true case) automatically defines question method for each enum member (true case) + can use macro calls inside enum value, with receiver (#424) can use macro calls inside enum value, with receiver (#424) +Normalize: expressions + normalizes expressions with begin/end normalizes expressions with begin/end + normalizes an empty expression with begin/end normalizes an empty expression with begin/end + normalizes an expression normalizes an expression +Code gen: or + codegens or with bool union as left node 3 codegens or with bool union as left node 3 + codegens or with primitive type other than bool codegens or with primitive type other than bool + codegens or with bool true and true codegens or with bool true and true + codegens or with bool union as left node 2 codegens or with bool union as left node 2 + codegens or with nil union as left node 2 codegens or with nil union as left node 2 + codegens or with non-false union as left node codegens or with non-false union as left node + codegens or with bool union as left node 2 codegens or with bool union as left node 2 + codegens or with bool union as left node 3 codegens or with bool union as left node 3 + codegens or with bool union as left node 1 codegens or with bool union as left node 1 + codegens or with bool union as left node 4 codegens or with bool union as left node 4 + codegens or with bool false and false codegens or with bool false and false + codegens or with bool union as left node 1 codegens or with bool union as left node 1 + codegens or with bool true and false codegens or with bool true and false + codegens or with nilable as left node 1 codegens or with nilable as left node 1 + codegens or with bool false and true codegens or with bool false and true + codegens or with bool and int 2 codegens or with bool and int 2 + codegens or with nil union as left node 1 codegens or with nil union as left node 1 + codegens or with primitive type other than bool with union codegens or with primitive type other than bool with union + codegens or with nilable as left node 2 codegens or with nilable as left node 2 + codegens or with primitive type other than bool codegens or with primitive type other than bool + codegens or with bool and int 1 codegens or with bool and int 1 +Semantic: class + type def does not reopen type from parent namespace (#11181) type def does not reopen type from parent namespace (#11181) + doesn't mix classes on definition (#2352) doesn't mix classes on definition (#2352) + types generic of generic type types generic of generic type + types Const#new types Const#new + doesn't lookup new in supermetaclass doesn't lookup new in supermetaclass + types class and subclass as one type types class and subclass as one type + reports uninitialized constant reports uninitialized constant + errors if inheriting Gen(self) and there's no self (#2890) errors if inheriting Gen(self) and there's no self (#2890) + errors if using underscore in generic class errors if using underscore in generic class + correctly types #680 correctly types #680 + uses self as type var uses self as type var + says that instance vars are not allowed in metaclass says that instance vars are not allowed in metaclass + can invoke method on abstract generic type without subclasses nor instances can invoke method on abstract generic type without subclasses nor instances + reports unknown class when extending reports unknown class when extending + doesn't mark instance variable as nilable if calling another initialize doesn't mark instance variable as nilable if calling another initialize + errors if reading non-existent ivar errors if reading non-existent ivar + errors when creating Number errors when creating Number + errors when wrong arguments for new errors when wrong arguments for new + reads a virtual type instance var reads a virtual type instance var + says wrong number of arguments for abstract class new says wrong number of arguments for abstract class new + types type var union types type var union + types instance variable types instance variable + errors if reopening non-generic class as generic errors if reopening non-generic class as generic + types class inside class types class inside class + allows defining classes inside modules or classes with :: allows defining classes inside modules or classes with :: + errors if reopening generic class with different splat index (3) errors if reopening generic class with different splat index (3) + errors if reopening generic class with different splat index errors if reopening generic class with different splat index + allows using self in class scope allows using self in class scope + doesn't error on new on abstract virtual type class doesn't error on new on abstract virtual type class + infers generic type after instance was created with explicit type infers generic type after instance was created with explicit type + doesn't lookup type in parents' namespaces, and lookups and in program doesn't lookup type in parents' namespaces, and lookups and in program + can invoke method on abstract type without subclasses nor instances can invoke method on abstract type without subclasses nor instances + hoists instance variable initializer hoists instance variable initializer + can't reopen as module can't reopen as module + says wrong number of arguments for abstract class new (2) says wrong number of arguments for abstract class new (2) + reads an object instance var from a union type reads an object instance var from a union type + does automatic type inference of new for generic types 2 does automatic type inference of new for generic types 2 + doesn't crash with top-level initialize (#2601) doesn't crash with top-level initialize (#2601) + inherits self twice (#5495) inherits self twice (#5495) + reports undefined method when method inside a class reports undefined method when method inside a class + types as no return if calling method on abstract class with generic subclasses but no instances (#6996) types as no return if calling method on abstract class with generic subclasses but no instances (#6996) + can't use implicit initialize if defined in parent can't use implicit initialize if defined in parent + types as no return if calling method on abstract class with all abstract subclasses (#6996) types as no return if calling method on abstract class with all abstract subclasses (#6996) + types Const#allocate types Const#allocate + errors if reopening generic class with different type vars (2) errors if reopening generic class with different type vars (2) + says no overload matches for class new says no overload matches for class new + uses self as type var uses self as type var + reports undefined instance method reports undefined instance method + types class and subclass as one type types class and subclass as one type + inherits Gen(self) (#2890) inherits Gen(self) (#2890) + errors if inherits from metaclass errors if inherits from metaclass + uses number type var in class method uses number type var in class method + errors if inherits from module errors if inherits from module + finds in global scope if includes module finds in global scope if includes module + allows declaring a variable in an initialize and using it allows declaring a variable in an initialize and using it + types Const#new#method types Const#new#method + doesn't use initialize from base class doesn't use initialize from base class + does automatic inference of new for generic types does automatic inference of new for generic types + types virtual method of generic class types virtual method of generic class + reports superclass mismatch reports superclass mismatch + types instance variable on getter types instance variable on getter + types self inside method call without obj types self inside method call without obj + types class and subclass as one type types class and subclass as one type + doesn't crash on instance variable assigned a proc, and never instantiated (#923) doesn't crash on instance variable assigned a proc, and never instantiated (#923) + errors when creating Value errors when creating Value + errors if reading ivar from non-ivar container errors if reading ivar from non-ivar container + reports can't instantiate abstract class on allocate reports can't instantiate abstract class on allocate + does automatic type inference of new for nested generic type does automatic type inference of new for nested generic type + can mark initialize as private can mark initialize as private + types as no return if calling method on generic class with subclasses (#6996) types as no return if calling method on generic class with subclasses (#6996) + doesn't use initialize from base class with virtual type doesn't use initialize from base class with virtual type + can invoke method on abstract generic type with subclasses but no instances can invoke method on abstract generic type with subclasses but no instances + correctly types #680 (2) correctly types #680 (2) + reports wrong number of arguments for initialize reports wrong number of arguments for initialize + reads an object instance var reads an object instance var + types as no return if calling method on abstract generic class (#6996) types as no return if calling method on abstract generic class (#6996) + types recursive type types recursive type + errors if using read-instance-var with non-typed variable errors if using read-instance-var with non-typed variable + can't reopen as struct can't reopen as struct + inherits self (#2890) inherits self (#2890) + types bug #168 (it inherits instance var even if not mentioned in initialize) types bug #168 (it inherits instance var even if not mentioned in initialize) + reports can't instantiate abstract class on new reports can't instantiate abstract class on new + can use short name for top-level type can use short name for top-level type + errors if creating instance before typing instance variable errors if creating instance before typing instance variable + errors if reopening generic class with different type vars errors if reopening generic class with different type vars + errors if assigning superclass to declared instance var errors if assigning superclass to declared instance var + errors if declares class inside if errors if declares class inside if + errors on no method found on abstract class, class method (#2241) errors on no method found on abstract class, class method (#2241) + errors if reopening generic class with different splat index (2) errors if reopening generic class with different splat index (2) + allows instantiating generic class with number allows instantiating generic class with number + types instance variable types instance variable + preserves order of instance vars (#3050) preserves order of instance vars (#3050) +Semantic: doc + :ditto: + amend previous doc (without empty line) amend previous doc (without empty line) + stores doc for macro stores doc for macro + stores doc for const stores doc for const + :ditto: references last non-ditto doc :ditto: references last non-ditto doc + stores doc for def stores doc for def + amend previous doc amend previous doc + overwrites doc for module when reopening overwrites doc for module when reopening + stores doc for enum with @[Flags] stores doc for enum with @[Flags] + stores doc for class stores doc for class + overwrites doc for def when redefining overwrites doc for def when redefining + stores doc for macro stores doc for macro + stores doc for abstract class stores doc for abstract class + doc before annotation + attached to struct/class attached to struct/class + attached to enum attached to enum + attached to constant attached to constant + attached to macro call attached to macro call + attached to module attached to module + attached to alias attached to alias + attached to macro call that produces multiple types attached to macro call that produces multiple types + attached to def attached to def + attached to macro attached to macro + attaches doc in double macro expansion (#8463) attaches doc in double macro expansion (#8463) + stores doc for constant stores doc for constant + stores doc for macro defined in macro call stores doc for macro defined in macro call + stores doc for alias stores doc for alias + overwrites doc for struct when reopening overwrites doc for struct when reopening + stores doc for enum when reopening stores doc for enum when reopening + stores doc for flags enum with base type stores doc for flags enum with base type + overwrites doc for enum when reopening overwrites doc for enum when reopening + stores doc for nodes defined in macro call (2) stores doc for nodes defined in macro call (2) + attaches doc to annotation in macro expansion (#9628) attaches doc to annotation in macro expansion (#9628) + stores doc for fun def stores doc for fun def + stores doc for enum member stores doc for enum member + stores location for implicit flag enum members stores location for implicit flag enum members + stores locations for auto-generated module stores locations for auto-generated module + stores doc for def with annotation stores doc for def with annotation + stores doc for abstract def stores doc for abstract def + stores doc for struct stores doc for struct + stores doc for class when reopening stores doc for class when reopening + stores doc for nodes defined in macro call stores doc for nodes defined in macro call + overwrites doc for class when reopening overwrites doc for class when reopening + stores doc for module when reopening stores doc for module when reopening + stores doc for module stores doc for module + stores doc for def stores doc for def + stores doc for def with annotation stores doc for def with annotation + stores doc for enum stores doc for enum + overwrites doc for macro when redefining overwrites doc for macro when redefining + stores doc for struct when reopening stores doc for struct when reopening + stores doc for enum and doesn't mix with value stores doc for enum and doesn't mix with value + stores doc for def with visibility stores doc for def with visibility +Semantic: return + infers return type with many returns (2) infers return type with many returns (2) + flattens splats inside multiple return values flattens splats inside multiple return values + infers return type with many returns (1) infers return type with many returns (1) + errors on return in top level errors on return in top level + errors if non-type free var cannot be inferred errors if non-type free var cannot be inferred + can use type var as return type with an included generic module can use type var as return type with an included generic module + can use type var as return type with an inherited generic class can use type var as return type with an inherited generic class + types bug (#1823) types bug (#1823) + can use non-type free var in return type (#6543) can use non-type free var in return type (#6543) + infers return type infers return type + allows nilable return type to match subclasses (#1735) allows nilable return type to match subclasses (#1735) + can use type var as return type (#1226) can use type var as return type (#1226) + types return if true types return if true + can use non-type free var in return type (2) (#6543) can use non-type free var in return type (2) (#6543) + doesn't confuse return type from base class doesn't confuse return type from base class + can use free var in return type (#2492) can use free var in return type (#2492) + allows returning NoReturn instead of the wanted type allows returning NoReturn instead of the wanted type + forms a tuple from multiple return values forms a tuple from multiple return values +Code gen: closure + codegens multiple nested blocks codegens multiple nested blocks + codegens closure with nested context without new closured vars but with block arg codegens closure with nested context without new closured vars but with block arg + codegens closure inside initialize inside block with self codegens closure inside initialize inside block with self + codegens closured nested in block codegens closured nested in block + codegens closure with struct codegens closure with struct + codegens super nested closure codegens super nested closure + doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) + codegens nested closure with nested closured variable codegens nested closure with nested closured variable + codegens closure with nested context without new closured vars codegens closure with nested context without new closured vars + codegens closure with block that declares same var codegens closure with block that declares same var + ensures it can raise from the closure check ensures it can raise from the closure check + codegens closure with instance var and var codegens closure with instance var and var + closures struct self closures struct self + allows giving less block args when transforming block to proc literal allows giving less block args when transforming block to proc literal + allows passing an external function along (2) allows passing an external function along (2) + codegens nested closure with block (1) codegens nested closure with block (1) + codegens closure with instance var and block codegens closure with instance var and block + doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method + transforms block to proc literal transforms block to proc literal + codegens simple closure in block codegens simple closure in block + doesn't incorrectly consider local as closured (#4948) doesn't incorrectly consider local as closured (#4948) + codegens simple closure in function with argument codegens simple closure in function with argument + allows mixing yield and block.call allows mixing yield and block.call + unifies types of closured var unifies types of closured var + codegens closure with block codegens closure with block + allows passing block as proc literal to new and to initialize allows passing block as proc literal to new and to initialize + codegens super nested closure with nested closured variable codegens super nested closure with nested closured variable + doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self + codegens simple closure in function codegens simple closure in function + allows passing an external function along allows passing an external function along + codegens closure with nested context without new closured vars codegens closure with nested context without new closured vars + codegens closure with self and var codegens closure with self and var + codegens closure with self and arguments codegens closure with self and arguments + codegens nested closure that mentions var in both contexts codegens nested closure that mentions var in both contexts + codegens closure with implicit self and var codegens closure with implicit self and var + codegens proc literal with struct codegens proc literal with struct + allows passing proc literal to def that captures block with & allows passing proc literal to def that captures block with & + transforms block to proc literal with free var transforms block to proc literal with free var + codegens closure with def that has an if codegens closure with def that has an if + codegens closured nested in block with a call with a closure with same names codegens closured nested in block with a call with a closure with same names + codegens nested closure with block (2) codegens nested closure with block (2) + codegens closure with instance var codegens closure with instance var + captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) + codegen closure in instance method without self closured codegen closure in instance method without self closured + codegens simple closure at global scope codegens simple closure at global scope + codegens nested closure codegens nested closure + codegens closured self in block (#3388) codegens closured self in block (#3388) +Crystal::Repl::Interpreter + casts + casts nilable from mixed union type to primitive type (non-nil case) casts nilable from mixed union type to primitive type (non-nil case) + casts from mixed union type to another mixed union type for caller casts from mixed union type to another mixed union type for caller + does as? with no resulting type (#12327) does as? with no resulting type (#12327) + casts to filtered type, not type in as(...) casts to filtered type, not type in as(...) + upcasts to module type upcasts to module type + upcasts between tuple types upcasts between tuple types + upcasts mixed union with tuple to mixed union with compatible tuple (3) (#12331) upcasts mixed union with tuple to mixed union with compatible tuple (3) (#12331) + does is_a? with virtual metaclass does is_a? with virtual metaclass + casts from nilable type to mixed union type casts from nilable type to mixed union type + does is_a? with virtual type (struct) does is_a? with virtual type (struct) + upcasts between tuple types, respects alignment (#14036) upcasts between tuple types, respects alignment (#14036) + does as? with a type that can't match (#12346) does as? with a type that can't match (#12346) + raises when as fails raises when as fails + puts virtual metaclass into union (#12162) puts virtual metaclass into union (#12162) + casts from reference to pointer and back casts from reference to pointer and back + casts nil to Void* casts nil to Void* + discards cast discards cast + upcasts mixed union with tuple to mixed union with compatible tuple (1) (#12331) upcasts mixed union with tuple to mixed union with compatible tuple (1) (#12331) + upcasts virtual type to union upcasts virtual type to union + casts from nilable type to mixed union type (2) casts from nilable type to mixed union type (2) + upcasts between named tuple types, different order upcasts between named tuple types, different order + upcasts mixed union with tuple to mixed union with compatible tuple (2) (#12331) upcasts mixed union with tuple to mixed union with compatible tuple (2) (#12331) + upcasts between named tuple types, same order upcasts between named tuple types, same order + casts from mixed union type to primitive type casts from mixed union type to primitive type + casts from mixed union type to nilable proc type (#12283) casts from mixed union type to nilable proc type (#12283) + casts nilable from mixed union type to primitive type (nil case) casts nilable from mixed union type to primitive type (nil case) + puts tuple type inside union of different tuple type (#12243) puts tuple type inside union of different tuple type (#12243) + does as? with no resulting type, not from nil (#12327) does as? with no resulting type, not from nil (#12327) + upcasts in nilable cast (#12532) upcasts in nilable cast (#12532) + casts from reference to nilable reference casts from reference to nilable reference + upcasts between named tuple types, respects alignment (#14036) upcasts between named tuple types, respects alignment (#14036) + upcasts GenericClassInstanceMetaclassType to VirtualMetaclassType upcasts GenericClassInstanceMetaclassType to VirtualMetaclassType + puts named tuple type inside union of different named tuple type (#12243) puts named tuple type inside union of different named tuple type (#12243) +Semantic: previous_def + types previous def with named arguments, def has bare splat parameter (#8895) types previous def with named arguments, def has bare splat parameter (#8895) + errors if there's no previous def errors if there's no previous def + types previous def with explicit arguments types previous def with explicit arguments + types previous def with forwarded arguments, def has parameters types previous def with forwarded arguments, def has parameters + types previous def with restrictions types previous def with restrictions + types previous def types previous def + types previous def when inside fun types previous def when inside fun + types previous def with named arguments, def has bare splat parameter (2) (#8895) types previous def with named arguments, def has bare splat parameter (2) (#8895) + says wrong number of arguments for previous_def (#1223) says wrong number of arguments for previous_def (#1223) + types previous def when inside fun and forwards args types previous def when inside fun and forwards args + types previous def with forwarded arguments, different internal names (#8895) types previous def with forwarded arguments, different internal names (#8895) + types previous def with forwarded arguments, def has bare splat parameter (#8895) types previous def with forwarded arguments, def has bare splat parameter (#8895) + types previous def in generic class types previous def in generic class + types previous def with named arguments, def has double splat parameter (#8895) types previous def with named arguments, def has double splat parameter (#8895) +Semantic: exception + types var as nilable inside ensure (2) types var as nilable inside ensure (2) + types code with abstract exception that delegates method types code with abstract exception that delegates method + types a var after begin rescue as having all possible types in begin and rescue types a var after begin rescue as having all possible types in begin and rescue + errors if caught exception is a union but not all types are valid errors if caught exception is a union but not all types are valid + gets a non-nilable type if all rescue are unreachable (#8751) gets a non-nilable type if all rescue are unreachable (#8751) + correctly types #1988 correctly types #1988 + marks instance variable as nilable if assigned inside rescue inside initialize marks instance variable as nilable if assigned inside rescue inside initialize + doesn't infect type to variable before handler (#4002) doesn't infect type to variable before handler (#4002) + errors if caught exception is a nested union but not all types are valid errors if caught exception is a nested union but not all types are valid + type for exception handler for explicit types type for exception handler for explicit types + can't return from while inside ensure (#4470) can't return from while inside ensure (#4470) + marks proc literal as raises marks proc literal as raises + marks method that calls another method that raises as raises, recursively marks method that calls another method that raises as raises, recursively + marks method calling lib fun that raises as raises marks method calling lib fun that raises as raises + remains nilable after rescue remains nilable after rescue + types var as nilable if previously nilable (2) types var as nilable if previously nilable (2) + types a var after begin rescue with no-return in rescue types a var after begin rescue with no-return in rescue + can use break inside while inside ensure (#4470) can use break inside while inside ensure (#4470) + type is union of main and rescue blocks type is union of main and rescue blocks + types var as not nil if defined inside begin and defined inside rescue types var as not nil if defined inside begin and defined inside rescue + doesn't crash on break inside rescue, in while (#2441) doesn't crash on break inside rescue, in while (#2441) + can use next inside while inside ensure (#4470) can use next inside while inside ensure (#4470) + types var assignment inside block inside exception handler (#3324) types var assignment inside block inside exception handler (#3324) + types var as nilable if previously nilable (1) types var as nilable if previously nilable (1) + can't use break inside while inside ensure (#4470) can't use break inside while inside ensure (#4470) + transform nodes in else block transform nodes in else block + types a var after begin rescue as having all possible types and nil in begin if read (2) types a var after begin rescue as having all possible types and nil in begin if read (2) + can't use break inside block inside ensure (#4470) can't use break inside block inside ensure (#4470) + can't return from ensure (#4470) can't return from ensure (#4470) + shadows local variable (1) shadows local variable (1) + can't use next inside block inside ensure (#4470) can't use next inside block inside ensure (#4470) + types a var after rescue as being nilable types a var after rescue as being nilable + marks def as raises marks def as raises + type union with empty rescue block type union with empty rescue block + says syntax error on "begin; rescue ex; rescue ex : Foo; end; ex" says syntax error on "begin; rescue ex; rescue ex : Foo; end; ex" + doesn't type instance variable as nilable if assigned inside an exception handler after being assigned doesn't type instance variable as nilable if assigned inside an exception handler after being assigned + types exception var with no types types exception var with no types + type union with empty main block type union with empty main block + marks fun as raises marks fun as raises + types a var after begin rescue as having all possible types in begin and rescue (2) types a var after begin rescue as having all possible types in begin and rescue (2) + doesn't consider vars as nilable inside else (#610) doesn't consider vars as nilable inside else (#610) + says syntax error on "begin; else; 1; end" says syntax error on "begin; else; 1; end" + detects reading nil-if-read variable after exception handler (#4723) detects reading nil-if-read variable after exception handler (#4723) + correctly types variables inside conditional inside exception handler with no-return rescue (#8012) correctly types variables inside conditional inside exception handler with no-return rescue (#8012) + can use next inside block inside ensure (#4470) can use next inside block inside ensure (#4470) + correctly types variable assigned inside nested exception handler (#9769) correctly types variable assigned inside nested exception handler (#9769) + can't return from block inside ensure (#4470) can't return from block inside ensure (#4470) + errors if caught exception is not a subclass of Exception errors if caught exception is not a subclass of Exception + errors if caught exception is not a subclass of Exception without var errors if caught exception is not a subclass of Exception without var + assigns var inside ensure (2) (#3919) assigns var inside ensure (2) (#3919) + can't use next inside while inside ensure (#4470) can't use next inside while inside ensure (#4470) + types instance variable as nilable if assigned inside an exception handler (#1845) types instance variable as nilable if assigned inside an exception handler (#1845) + types var as nilable inside ensure (1) types var as nilable inside ensure (1) + can use break inside block inside ensure (#4470) can use break inside block inside ensure (#4470) + marks method calling method that raises as raises marks method calling method that raises as raises + assigns var inside ensure (1) (#3919) assigns var inside ensure (1) (#3919) + says syntax error on "begin; rescue ex; rescue; end; ex" says syntax error on "begin; rescue ex; rescue; end; ex" + types exception with type types exception with type +Code gen: module + codegens pointer of module with method with two including types with one struct (2) codegens pointer of module with method with two including types with one struct (2) + invokes method on yielded module that has no instances (#1079) invokes method on yielded module that has no instances (#1079) invokes method on yielded module that has no instances (#1079) invokes method on yielded module that has no instances (#1079) invokes method on yielded module that has no instances (#1079) invokes method on yielded module that has no instances (#1079) invokes method on yielded module that has no instances (#1079) invokes method on yielded module that has no instances (#1079) invokes method on yielded module that has no instances (#1079) invokes method on yielded module that has no instances (#1079) + codegens proc of a module that was never included codegens proc of a module that was never included + codegens cast to module with class and struct to nilable module codegens cast to module with class and struct to nilable module + can use generic module as instance variable type can use generic module as instance variable type + codegens cast to module that includes bool codegens cast to module that includes bool + expands modules to its including types (#1916) expands modules to its including types (#1916) + codegens pointer of module with method codegens pointer of module with method + codegens pointer of module and pass value to method codegens pointer of module and pass value to method + expands modules to its including types (3) (#1916) expands modules to its including types (3) (#1916) + can use generic module as instance variable type (2) can use generic module as instance variable type (2) + codegens pointer of module with method with two including types with one struct codegens pointer of module with method with two including types with one struct + casts to union of module that is included in other module (#3323) casts to union of module that is included in other module (#3323) casts to union of module that is included in other module (#3323) casts to union of module that is included in other module (#3323) casts to union of module that is included in other module (#3323) casts to union of module that is included in other module (#3323) casts to union of module that is included in other module (#3323) casts to union of module that is included in other module (#3323) casts to union of module that is included in other module (#3323) casts to union of module that is included in other module (#3323) + expands modules to its including types (2) (#1916) expands modules to its including types (2) (#1916) + codegens pointer of module with method with two including types codegens pointer of module with method with two including types + declares proc with module type and invoke it with two different types that return themselves declares proc with module type and invoke it with two different types that return themselves + can instantiate generic module can instantiate generic module + declares and includes generic module, in macros T is a tuple literal declares and includes generic module, in macros T is a tuple literal + codegens module with virtual type codegens module with virtual type + codegens dispatch of union with module (#3647) codegens dispatch of union with module (#3647) + casts to union of generic module that is included in other module (#3323) casts to union of generic module that is included in other module (#3323) casts to union of generic module that is included in other module (#3323) casts to union of generic module that is included in other module (#3323) casts to union of generic module that is included in other module (#3323) casts to union of generic module that is included in other module (#3323) casts to union of generic module that is included in other module (#3323) casts to union of generic module that is included in other module (#3323) casts to union of generic module that is included in other module (#3323) casts to union of generic module that is included in other module (#3323) + codegens pointer of module with block codegens pointer of module with block codegens pointer of module with block codegens pointer of module with block codegens pointer of module with block codegens pointer of module with block codegens pointer of module with block codegens pointer of module with block codegens pointer of module with block codegens pointer of module with block + codegens proc of module when generic type includes it codegens proc of module when generic type includes it + declares proc with module type declares proc with module type +Code gen: def + call functions defined in any order call functions defined in any order + uses previous argument in default value (#1062) uses previous argument in default value (#1062) + codegens with and without default arguments codegens with and without default arguments + looks up matches in super classes and merges them with subclasses looks up matches in super classes and merges them with subclasses + codegens recursive type with union codegens recursive type with union + codegens dispatch with single def when discarding unallocated ones (2) codegens dispatch with single def when discarding unallocated ones (2) + builds infinite recursive function builds infinite recursive function + puts union before single type in matches preferences puts union before single type in matches preferences + codegens with related types codegens with related types + codegens return nil when nilable type (2) codegens return nil when nilable type (2) + codegens union to union assignment of mutable arg (#3691) codegens union to union assignment of mutable arg (#3691) + codegens return nil when nilable type (1) codegens return nil when nilable type (1) + codegens call with args codegens call with args + codegens dispatch without obj, bug 1 codegens dispatch without obj, bug 1 + dispatches on virtual type implementing generic module (related to bug #165) dispatches on virtual type implementing generic module (related to bug #165) + codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation + uses dispatch call type for phi (#3529) uses dispatch call type for phi (#3529) + unifies all calls to same def unifies all calls to same def unifies all calls to same def unifies all calls to same def unifies all calls to same def unifies all calls to same def unifies all calls to same def unifies all calls to same def unifies all calls to same def unifies all calls to same def + codegens dispatch without obj, bug 1 codegens dispatch without obj, bug 1 + codegens dispatch with single def when discarding unallocated ones (1) codegens dispatch with single def when discarding unallocated ones (1) + codegens recursive nasty code codegens recursive nasty code + use target def type as return type use target def type as return type use target def type as return type use target def type as return type use target def type as return type use target def type as return type use target def type as return type use target def type as return type use target def type as return type use target def type as return type + runs empty def runs empty def + codegens empty def codegens empty def + codegens dispatch on static method codegens dispatch on static method + can match N type argument of static array (#1203) can match N type argument of static array (#1203) + codegens dispatch with nilable reference union type codegens dispatch with nilable reference union type + codegens def which changes type of arg codegens def which changes type of arg + allows to change argument values allows to change argument values + codegens bug #119 codegens bug #119 codegens bug #119 codegens bug #119 codegens bug #119 codegens bug #119 codegens bug #119 codegens bug #119 codegens bug #119 codegens bug #119 + codegens with and without many default arguments codegens with and without many default arguments + codegens with interesting default argument codegens with interesting default argument + codegens call without args codegens call without args + doesn't crash on private def as last expression doesn't crash on private def as last expression + codegens yield with destructing tuple having unreachable element codegens yield with destructing tuple having unreachable element + call external function 'putchar' call external function 'putchar' + fixes #230: include original owner in mangled def fixes #230: include original owner in mangled def + uses self uses self + uses var after external uses var after external +expand + expands macro control {% if %} expands macro control {% if %} + expands macro expression inside enum expands macro expression inside enum + doesn't expand normal call doesn't expand normal call + expands macro expression inside private struct expands macro expression inside private struct + expands macro expression inside def of private module expands macro expression inside def of private module + doesn't expand macro expression with cursor out of end doesn't expand macro expression with cursor out of end + expands macro control {% for %} with cursor at end of it expands macro control {% for %} with cursor at end of it + expands macro control {% for %} with cursor inside it expands macro control {% for %} with cursor inside it + expands macro of module with cursor at module name expands macro of module with cursor at module name + expands macros with 3 level expands macros with 3 level + expands macro expression {{ ... }} with cursor inside it expands macro expression {{ ... }} with cursor inside it + expands macro expression inside private def expands macro expression inside private def + expands macro expression inside C union expands macro expression inside C union + expands macro expression inside def of private struct expands macro expression inside def of private struct + doesn't expand macro expression doesn't expand macro expression + doesn't expand macro expression doesn't expand macro expression + expands simple macro with cursor inside it expands simple macro with cursor inside it + expands macro control {% if %} with indent expands macro control {% if %} with indent + expands macro expression {% ... %} expands macro expression {% ... %} + expands macro expression {{ ... }} with cursor end of it expands macro expression {{ ... }} with cursor end of it + expands macro expression inside def expands macro expression inside def + expands macro with doc expands macro with doc + expands macro expression inside module expands macro expression inside module + expands macro expression inside struct expands macro expression inside struct + expands macro control {% if %} with cursor inside it expands macro control {% if %} with cursor inside it + expands macro expression inside private module expands macro expression inside private module + expands macro of module with cursor at dot expands macro of module with cursor at dot + expands macro expression inside def of nested module expands macro expression inside def of nested module + expands macro expression inside C struct expands macro expression inside C struct + expands complex macro expands complex macro + expands macro expression inside C struct of private lib expands macro expression inside C struct of private lib + expands macro expression inside def of module expands macro expression inside def of module + expands macro control {% if %} with cursor at end of it expands macro control {% if %} with cursor at end of it + expands macro expression {% ... %} with cursor at end of it expands macro expression {% ... %} with cursor at end of it + expands macro expression inside lib expands macro expression inside lib + expands simple macro expands simple macro + expands macro expression inside private enum expands macro expression inside private enum + expands macro expression inside def of nested private module expands macro expression inside def of nested private module + expands macro expression inside fun expands macro expression inside fun + expands macro expression inside def of private enum expands macro expression inside def of private enum + expands macro expression inside class expands macro expression inside class + expands macro expression inside private lib expands macro expression inside private lib + expands macro of module expands macro of module + expands macro control {% for %} with indent expands macro control {% for %} with indent + expands macro of module inside module expands macro of module inside module + expands macro expression {{ ... }} expands macro expression {{ ... }} + expands macro control {% for %} expands macro control {% for %} + expands macros with 2 level expands macros with 2 level + expands macro expression inside C union of private lib expands macro expression inside C union of private lib + expands macro expression inside private class expands macro expression inside private class + expands macro expression inside def of private module expands macro expression inside def of private module + expands simple macro with cursor at end of it expands simple macro with cursor at end of it + expands macro expression inside def of private class expands macro expression inside def of private class +Crystal::Repl::Interpreter + constants + returns nil in the assignment returns nil in the assignment + interprets self inside constant inside class interprets self inside constant inside class + hoists constants hoists constants + interprets complex constant interprets complex constant + interprets constant literal interprets constant literal + magic constants + does line number does line number +Semantic: named args + matches specific overload with named arguments (2) (#2753) matches specific overload with named arguments (2) (#2753) + errors if named arg not found errors if named arg not found + matches specific overload with named arguments (#2753) matches specific overload with named arguments (#2753) + sends two regular arguments as named arguments in inverted position (2) sends two regular arguments as named arguments in inverted position (2) + uses bare splat in new uses bare splat in new + says no overload matches with named arg says no overload matches with named arg + doesn't include arguments with default values in missing arguments error doesn't include arguments with default values in missing arguments error + errors if named arg already specified errors if named arg already specified + errors if named arg matches splat argument errors if named arg matches splat argument + sends one regular argument as named argument sends one regular argument as named argument + errors if missing two arguments errors if missing two arguments + errors if missing one argument errors if missing one argument + says correct error when forwarding named args (#7491) says correct error when forwarding named args (#7491) + sends two regular arguments as named arguments sends two regular arguments as named arguments + errors if named arg already specified, but multiple overloads (#7281) errors if named arg already specified, but multiple overloads (#7281) + overloads based on required named args, with restrictions overloads based on required named args, with restrictions + errors if named arg matches single splat argument errors if named arg matches single splat argument + errors if doesn't pass named arg restriction errors if doesn't pass named arg restriction + overloads based on required named args overloads based on required named args + errors if named arg already specified errors if named arg already specified + errors if named arg not found in new errors if named arg not found in new + allows named arg if there's a splat allows named arg if there's a splat + gives correct error message with external names (#3934) gives correct error message with external names (#3934) + sends two regular arguments as named arguments in inverted position (1) sends two regular arguments as named arguments in inverted position (1) + passes #2696 passes #2696 + errors if named arg already specified but in same position errors if named arg already specified but in same position + gives correct error message for missing args after * gives correct error message for missing args after * + doesn't fail on named argument with NoReturn type (#7760) doesn't fail on named argument with NoReturn type (#7760) +Semantic: responds_to? + restricts other types inside if else restricts other types inside if else + restricts type inside if scope 1 restricts type inside if scope 1 + is bool is bool + restricts virtual generic superclass to subtypes restricts virtual generic superclass to subtypes + restricts in assignment restricts in assignment + restricts virtual generic module to including types (#8334) restricts virtual generic module to including types (#8334) +Code gen: struct + sets instance var to proc sets instance var to proc sets instance var to proc sets instance var to proc sets instance var to proc sets instance var to proc sets instance var to proc sets instance var to proc���������������� sets instance var to proc sets instance var to proc + codegens struct property setter codegens struct property setter + can access member of uninitialized struct behind type (#8774) can access member of uninitialized struct behind type (#8774) + codegens struct access with -> and then . codegens struct access with -> and then . + codegens assign struct to union codegens assign struct to union + codegens struct set inside struct codegens struct set inside struct + codegens passing pointerof(struct) to fun codegens passing pointerof(struct) to fun + passes struct to method (2) passes struct to method (2) + automatically converts by invoking to_unsafe automatically converts by invoking to_unsafe + automatically converts numeric type in struct field assignment automatically converts numeric type in struct field assignment + codegens pointer malloc of struct codegens pointer malloc of struct + automatically converts numeric union type in struct field assignment automatically converts numeric union type in struct field assignment + can access instance var from the outside (#1092) can access instance var from the outside (#1092) + allows using named arguments for new allows using named arguments for new + passes struct to method (1) passes struct to method (1) + automatically converts nil to pointer automatically converts nil to pointer + codegens set struct value with constant codegens set struct value with constant + codegens struct property setter via pointer codegens struct property setter via pointer + builds struct setter with fun type (2) builds struct setter with fun type (2) + codegens struct property setter via pointer codegens struct property setter via pointer + codegens struct get inside struct codegens struct get inside struct + does to_s does to_s does to_s does to_s does to_s does to_s does to_s�������������� does to_s�� does to_s does to_s + codegens struct property default value codegens struct property default value + builds struct setter with fun type (1) builds struct setter with fun type (1) + codegens union inside struct codegens union inside struct + yields struct via -> yields struct via -> +Code gen: pointer + codegens nilable pointer type (2) codegens nilable pointer type (2) + compares pointers through typedef compares pointers through typedef + generates correct code for Pointer.malloc(0) (#2905) generates correct code for Pointer.malloc(0) (#2905) + can assign nil to void pointer can assign nil to void pointer + can use typedef pointer value get and set (#630) can use typedef pointer value get and set (#630) + can pass any pointer to something expecting void* in lib call, with to_unsafe can pass any pointer to something expecting void* in lib call, with to_unsafe + codegens pointer as if condition inside union (1) codegens pointer as if condition inside union (1) + calculates pointer diff calculates pointer diff + codegens nilable pointer type dispatch (2) codegens nilable pointer type dispatch (2) + get pointer and value of it get pointer and value of it + sets value of pointer to struct sets value of pointer to struct + changes through var and reads from pointer changes through var and reads from pointer + get value of pointer to union get value of pointer to union + codegens nilable pointer type (1) codegens nilable pointer type (1) + set pointer value set pointer value + sets value of pointer to union sets value of pointer to union + does pointerof class variable does pointerof class variable + gets pointer to constant gets pointer to constant gets pointer to constant������ gets pointer to constant gets pointer to constant���� gets pointer to constant�� gets pointer to constant gets pointer to constant���� gets pointer to constant gets pointer to constant + assigns nil and pointer to nilable pointer type assigns nil and pointer to nilable pointer type + gets pointer of argument that is never assigned to gets pointer of argument that is never assigned to + codegens null pointer as if condition codegens null pointer as if condition + codegens nilable pointer type dispatch (1) codegens nilable pointer type dispatch (1) + codegens pointer cast codegens pointer cast + codegens realloc codegens realloc + increments pointer increments pointer + codegens pointer as if condition codegens pointer as if condition + can dereference pointer to func can dereference pointer to func + passes arguments correctly for typedef metaclass (#8544) passes arguments correctly for typedef metaclass (#8544) + gets pointer of instance variable in virtual type gets pointer of instance variable in virtual type + passes pointer of pointer to method passes pointer of pointer to method + does pointerof read variable does pointerof read variable + uses correct llvm module for typedef metaclass (#2877) uses correct llvm module for typedef metaclass (#2877) + takes pointerof lib external var takes pointerof lib external var takes pointerof lib external var takes pointerof lib external var takes pointerof lib external var���������� takes pointerof lib external var takes pointerof lib external var���� takes pointerof lib external var�� takes pointerof lib external var takes pointerof lib external var + codegens pointer as if condition inside union (2) codegens pointer as if condition inside union (2) + creates pointer by address creates pointer by address + does pointerof class variable with class does pointerof class variable with class + can pass any pointer to something expecting void* in lib call can pass any pointer to something expecting void* in lib call + codegens pointer cast to Nil (#8015) codegens pointer cast to Nil (#8015) + get pointer of instance var get pointer of instance var + codegens malloc codegens malloc +Crystal::Repl::Interpreter + typeof + interprets typeof instance type interprets typeof instance type + interprets typeof metaclass type interprets typeof metaclass type + interprets typeof virtual type interprets typeof virtual type +Crystal::Repl::Interpreter + control flow + interprets if pointer, true interprets if pointer, true + interprets return Nil interprets return Nil + interprets break inside while inside block interprets break inside while inside block + interprets while, returns nil interprets while, returns nil + interprets if bool (false) interprets if bool (false) + interprets break inside while interprets break inside while + discards if discards if + interprets break with value inside while (through normal flow) interprets break with value inside while (through normal flow) + interprets if union type with nil, false interprets if union type with nil, false + interprets break inside nested while interprets break inside nested while + interprets if union type with bool, false interprets if union type with bool, false + interprets break with value inside while (through break) interprets break with value inside while (through break) + interprets until interprets until + interprets if (true literal) interprets if (true literal) + interprets if (int type) interprets if (int type) + interprets if (false literal) interprets if (false literal) + interprets while interprets while + interprets next inside while inside block interprets next inside while inside block + interprets if bool (true) interprets if bool (true) + discards while discards while + interprets return implicit nil and Int32 interprets return implicit nil and Int32 + interprets return interprets return + interprets if union type with bool, true interprets if union type with bool, true + interprets if (nil literal) interprets if (nil literal) + interprets unless interprets unless + interprets return Nil with explicit return (#12178) interprets return Nil with explicit return (#12178) + interprets if (nil type) interprets if (nil type) + interprets next inside while interprets next inside while + interprets if pointer, false interprets if pointer, false +Semantic: module + calls super on included generic module and finds type var calls super on included generic module and finds type var + uses :Module name for modules in errors uses :Module name for modules in errors + errors if including generic module and not specifying type vars errors if including generic module and not specifying type vars + correctly types type var in included module, with a restriction with a free var (bug) correctly types type var in included module, with a restriction with a free var (bug) + includes but not a module includes but not a module + gives helpful error message when generic type var is missing gives helpful error message when generic type var is missing + instantiates generic variadic module, accesses T from instance method instantiates generic variadic module, accesses T from instance method + errors when extending module that defines instance vars (#4065) errors when extending module that defines instance vars (#4065) + extends generic module from generic class and calls class method (#7167) extends generic module from generic class and calls class method (#7167) + includes generic module with self (check argument superclass type, success) includes generic module with self (check argument superclass type, success) + includes generic module with self (check argument type, success) includes generic module with self (check argument type, success) + errors if reopening generic module with different type vars (2) errors if reopening generic module with different type vars (2) + errors when extending self and self defines instance vars (#9568) errors when extending self and self defines instance vars (#9568) + errors if reopening generic module with different splat index errors if reopening generic module with different splat index + uses type declaration inside module and gives error uses type declaration inside module and gives error + declares module automatically if not previously declared when declaring a class declares module automatically if not previously declared when declaring a class + gives helpful error message when generic type var is missing in block spec gives helpful error message when generic type var is missing in block spec + allows overloading with included generic module allows overloading with included generic module + gives error with cyclic include between non-generic and generic module gives error with cyclic include between non-generic and generic module + doesn't look up initialize past module that defines initialize (#7007) doesn't look up initialize past module that defines initialize (#7007) + includes generic module with self (check argument superclass type, success) includes generic module with self (check argument superclass type, success) + instantiates generic variadic module, accesses T from class method instantiates generic variadic module, accesses T from class method + includes generic module and errors in call includes generic module and errors in call + inherits instance var type annotation from generic to generic to concrete inherits instance var type annotation from generic to generic to concrete + gives error when trying to instantiate with new gives error when trying to instantiate with new + types pointer of module with generic type types pointer of module with generic type + instantiates generic variadic module, accesses T from instance method through generic include instantiates generic variadic module, accesses T from instance method through generic include + calls super on included generic module and finds type var (2) calls super on included generic module and finds type var (2) + works with range and map works with range and map + includes generic module with another generic type includes generic module with another generic type + gives error with cyclic include, generic module gives error with cyclic include, generic module + gives error when including instantiation of self, generic module gives error when including instantiation of self, generic module + errors when extending module that defines instance vars (2) (#4065) errors when extending module that defines instance vars (2) (#4065) + types union of module and class that includes it types union of module and class that includes it + reports can't use instance variables inside module reports can't use instance variables inside module + errors if reopening generic module with different splat index (2) errors if reopening generic module with different splat index (2) + uses type declaration inside module uses type declaration inside module + can restrict module with module (#3029) can restrict module with module (#3029) + includes generic module with type includes generic module with type + types pointer of module with method types pointer of module with method + includes module but wrong number of arguments includes module but wrong number of arguments + types proc of module with generic class types proc of module with generic class + includes module in a class includes module in a class + includes module in a module includes module in a module + types pointer of module with generic type types pointer of module with generic type + extends self extends self + initializes variable in module initializes variable in module + inherits instance var type annotation from generic to concrete with T inherits instance var type annotation from generic to concrete with T + errors when extending generic module that defines instance vars errors when extending generic module that defines instance vars + can't reopen as struct can't reopen as struct + gives error with cyclic include gives error with cyclic include + gives error with cyclic include between non-generic and generic module (2) gives error with cyclic include between non-generic and generic module (2) + includes generic module with self includes generic module with self + types pointer of module types pointer of module + errors when extending self and self defines instance vars (2) (#9568) errors when extending self and self defines instance vars (2) (#9568) + types proc of module after type changes types proc of module after type changes + can instantiate generic module can instantiate generic module + extends generic module from generic module and calls class method (#7167) extends generic module from generic module and calls class method (#7167) + includes generic module with self (check return type, error) includes generic module with self (check return type, error) + errors when recursively extending module that defines instance vars (2) errors when recursively extending module that defines instance vars (2) + can't pass module class to virtual metaclass (#6113) can't pass module class to virtual metaclass (#6113) + includes module with Union(T*) includes module with Union(T*) + extends module from generic class and calls class method (#7167) extends module from generic class and calls class method (#7167) + finds in module when included finds in module when included + types pointer of module with method with two including types types pointer of module with method with two including types + declares module automatically if not previously declared when declaring a module declares module automatically if not previously declared when declaring a module + finds types close to included module finds types close to included module + includes generic module explicitly and errors includes generic module explicitly and errors + includes generic module explicitly includes generic module explicitly + instantiates generic variadic module, accesses T from class method through generic extend instantiates generic variadic module, accesses T from class method through generic extend + errors when recursively extending module that defines instance vars errors when recursively extending module that defines instance vars + gives error when trying to instantiate with allocate gives error when trying to instantiate with allocate + errors if declares module inside if errors if declares module inside if + includes generic module with self (check return subclass type, error) includes generic module with self (check return subclass type, error) + gives error when including self gives error when including self + type def does not reopen type from parent namespace (#11181) type def does not reopen type from parent namespace (#11181) + includes generic module with self (check return type, success) includes generic module with self (check return type, success) + finds nested type inside method in block inside module finds nested type inside method in block inside module + finds constant in generic module included in another module finds constant in generic module included in another module + includes generic module with self, and inherits it includes generic module with self, and inherits it + can use generic module as instance variable type can use generic module as instance variable type + doesn't lookup type in ancestor when matches in current type (#2982) doesn't lookup type in ancestor when matches in current type (#2982) + initializes variable in module, recursive initializes variable in module, recursive + gives error when including self, generic module gives error when including self, generic module + calls super on included generic module calls super on included generic module + instantiates generic variadic module, accesses T from instance method through generic include, more args instantiates generic variadic module, accesses T from instance method through generic include, more args + works with int including enumerable works with int including enumerable + includes generic module with self (check return subclass type, success) includes generic module with self (check return subclass type, success) + errors if reopening non-generic module as generic errors if reopening non-generic module as generic + works ok in a case where a typed-def type has an underlying type that has an included generic module (bug) works ok in a case where a typed-def type has an underlying type that has an included generic module (bug) + can use generic module as instance variable type (2) can use generic module as instance variable type (2) + inherits instance var type annotation from generic to concrete inherits instance var type annotation from generic to concrete + can't reopen as class can't reopen as class + uses type declaration inside module, recursive, and gives error uses type declaration inside module, recursive, and gives error + extends a module extends a module + includes module but not generic includes module but not generic + errors when extending generic module that defines instance vars (2) errors when extending generic module that defines instance vars (2) + errors if reopening generic module with different type vars errors if reopening generic module with different type vars + instantiates generic variadic module, accesses T from instance method, more args instantiates generic variadic module, accesses T from instance method, more args + errors if reopening generic module with different splat index (3) errors if reopening generic module with different splat index (3) + includes generic module with self (check argument type, error) includes generic module with self (check argument type, error) + errors when extending self and self defines instance vars (3) (#9568) errors when extending self and self defines instance vars (3) (#9568) + finds class method in block finds class method in block + finds inner class from inherited one (#476) finds inner class from inherited one (#476) + includes module but can't access metaclass methods includes module but can't access metaclass methods +Crystal::Repl::Interpreter + instance_alignof + interprets instance_alignof typeof interprets instance_alignof typeof + instance_sizeof + interprets instance_sizeof typeof interprets instance_sizeof typeof + alignof + interprets alignof typeof interprets alignof typeof + sizeof + interprets sizeof typeof interprets sizeof typeof +Crystal::Repl::Interpreter + named tuple + interprets named tuple literal and access by known index interprets named tuple literal and access by known index + interprets named tuple metaclass indexer interprets named tuple metaclass indexer + discards named tuple (#12383) discards named tuple (#12383) +Lexer + lexes "offsetof" lexes "offsetof" + says syntax error on "4f33" says syntax error on "4f33" + lexes "while!" lexes "while!" + lexes ":<=" lexes ":<=" + says syntax error on "9999999999999999999_i32" says syntax error on "9999999999999999999_i32" + says syntax error on "-0e_12" says syntax error on "-0e_12" + lexes "" lexes "" + lexes "\8" lexes "\8" + says syntax error on "4f22" says syntax error on "4f22" + says syntax error on "$0?" says syntax error on "$0?" + lexes "0_f32" lexes "0_f32" + says syntax error on "4i33" says syntax error on "4i33" + lexes "&*" lexes "&*" + lexes "0x3fffffffffffffff" lexes "0x3fffffffffffffff" + lexes "as?" lexes "as?" + says syntax error on "-0_u64" says syntax error on "-0_u64" + lexes "&-=" lexes "&-=" + says syntax error on "\"\\xz\"" says syntax error on "\"\\xz\"" + says syntax error on "-32769_i16" says syntax error on "-32769_i16" + lexes "}" lexes "}" + lexes "def!" lexes "def!" + says syntax error on "18446744073709551616_i32" says syntax error on "18446744073709551616_i32" + lexes "\xFF" lexes "\xFF" + lexes "0.5" lexes "0.5" + lexes ":&**" lexes ":&**" + lexes "else" lexes "else" + lexes "0x7fffffffffffffff" lexes "0x7fffffffffffffff" + lexes "0f32" lexes "0f32" + lexes "1.0" lexes "1.0" + says syntax error on "\"\\400\"" says syntax error on "\"\\400\"" + lexes "@[" lexes "@[" + lexes "-9223372036854775808" lexes "-9223372036854775808" + says syntax error on "0xFF_i8" says syntax error on "0xFF_i8" + lexes "return" lexes "return" + lexes "0o1000000000000000000000" lexes "0o1000000000000000000000" + lexes "=" lexes "=" + says syntax error on "\"hi\\" says syntax error on "\"hi\\" + lexes "9223372036854775807" lexes "9223372036854775807" + lexes "://" lexes "://" + lexes "0x1_i64" lexes "0x1_i64" + lexes "1.0f32" lexes "1.0f32" + lexes "&+=" lexes "&+=" + says syntax error on "0b100000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000" says syntax error on "0b100000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000" + says syntax error on "2147483648_i32" says syntax error on "2147483648_i32" + says syntax error on "0x1afafafafafafafafafafafi32" says syntax error on "0x1afafafafafafafafafafafi32" + says syntax error on "0o73_f64" says syntax error on "0o73_f64" + lexes regex after \n lexes regex after \n + says syntax error on "'\\u{DFFF}'" says syntax error on "'\\u{DFFF}'" + lexes "else!" lexes "else!" + lexes "/" lexes "/" + lexes "0o1000000000000000000000" lexes "0o1000000000000000000000" + lexes "\n\n\n" lexes "\n\n\n" + lexes "true" lexes "true" + lexes "*=" lexes "*=" + lexes "1_u16" lexes "1_u16" + lexes "0b100000000000000000000000000000000" lexes "0b100000000000000000000000000000000" + lexes __FILE__ lexes __FILE__ + lexes "+1.0f32" lexes "+1.0f32" + lexes ":<=>" lexes ":<=>" + says syntax error on "-0x80000000000000000000000000000000" says syntax error on "-0x80000000000000000000000000000000" + says syntax error on "4i12" says syntax error on "4i12" + lexes "alias" lexes "alias" + lexes "$10?" lexes "$10?" + lexes "1e+23_f32" lexes "1e+23_f32" + lexes "<=>" lexes "<=>" + lexes "+1_i128" lexes "+1_i128" + lexes ">>" lexes ">>" + lexes "+0.5" lexes "+0.5" + lexes "with" lexes "with" + says syntax error on "00" says syntax error on "00" + lexes "{%" lexes "{%" + lexes "1_000" lexes "1_000" + lexes "if" lexes "if" + lexes dot and ident lexes dot and ident + lexes "[]" lexes "[]" + lexes "\1" lexes "\1" + lexes "&*=" lexes "&*=" + lexes "-1_i64" lexes "-1_i64" + lexes "0b1111111111111111111111111111111" lexes "0b1111111111111111111111111111111" + says syntax error on "-2147483649_i32" says syntax error on "-2147483649_i32" + says syntax error on "0o200000_00000000_00000000_u64" says syntax error on "0o200000_00000000_00000000_u64" + lexes "||" lexes "||" + says syntax error on "128_i8" says syntax error on "128_i8" + lexes "0b001111111111111111111111111111111111111111111111111111111111111111" lexes "0b001111111111111111111111111111111111111111111111111111111111111111" + says syntax error on "2e" says syntax error on "2e" + says syntax error on "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" says syntax error on "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + says syntax error on "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" says syntax error on "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + lexes ":&*" lexes ":&*" + lexes "===" lexes "===" + lexes "$foo123" lexes "$foo123" + lexes "**" lexes "**" + lexes "1_i64" lexes "1_i64" + lexes "while" lexes "while" + lexes "nil?" lexes "nil?" + lexes "0x7fffffff" lexes "0x7fffffff" + says syntax error on "4i3" says syntax error on "4i3" + lexes "self" lexes "self" + lexes "yield!" lexes "yield!" + lexes "1_234.567_890" lexes "1_234.567_890" + lexes "lib" lexes "lib" + lexes "@@foo" lexes "@@foo" + lexes "1.2e+23_f64" lexes "1.2e+23_f64" + lexes "1i32" lexes "1i32" + lexes "of" lexes "of" + lexes "1_u32" lexes "1_u32" + says syntax error on "0o7777777777777777777777777777777777777777777777777" says syntax error on "0o7777777777777777777777777777777777777777777777777" + lexes "0i8" lexes "0i8" + lexes "1i8" lexes "1i8" + says syntax error on "18446744073709551616" says syntax error on "18446744073709551616" + says syntax error on "2e8i8" says syntax error on "2e8i8" + lexes symbol followed by == lexes symbol followed by == + says syntax error on "4i65" says syntax error on "4i65" + lexes "macro" lexes "macro" + says syntax error on "-1_u128" says syntax error on "-1_u128" + lexes "1_u8" lexes "1_u8" + lexes "0o123_i64" lexes "0o123_i64" + says syntax error on "0x8000000000000000i64" says syntax error on "0x8000000000000000i64" + lexes "private" lexes "private" + lexes "responds_to?" lexes "responds_to?" + says syntax error on "-1_u32" says syntax error on "-1_u32" + lexes "class?" lexes "class?" + lexes "module" lexes "module" + lexes "0b1010" lexes "0b1010" + lexes "do!" lexes "do!" + lexes "union" lexes "union" + says syntax error on "4F32" says syntax error on "4F32" + lexes "&-" lexes "&-" + lexes ">>=" lexes ">>=" + lexes "->" lexes "->" + invalid byte sequence invalid byte sequence + lexes "-1.0f32" lexes "-1.0f32" + lexes "1_234.567_890_f32" lexes "1_234.567_890_f32" + lexes "0xffff_ffff_ffff_ffff" lexes "0xffff_ffff_ffff_ffff" + lexes ":" lexes ":" + lexes "=~" lexes "=~" + lexes __DIR__ lexes __DIR__ + lexes ":[]=" lexes ":[]=" + lexes "0b11111111_11111111_11111111_11111111_11111111_11111111_11111111_11111111" lexes "0b11111111_11111111_11111111_11111111_11111111_11111111_11111111_11111111" + says syntax error on "65536_u16" says syntax error on "65536_u16" + lexes "-0.0f32" lexes "-0.0f32" + lexes "super" lexes "super" + says syntax error on "0o40000000000i32" says syntax error on "0o40000000000i32" + lexes "in" lexes "in" + lexes "unless!" lexes "unless!" + lexes "+1234" lexes "+1234" + lexes "class!" lexes "class!" + says syntax error on "-999999999999999999999999999999999999999" says syntax error on "-999999999999999999999999999999999999999" + lexes "return!" lexes "return!" + lexes "-0x80000000000000000000000000000000_i128" lexes "-0x80000000000000000000000000000000_i128" + lexes ":foo?" lexes ":foo?" + says syntax error on "2ef32" says syntax error on "2ef32" + lexes "1e-23" lexes "1e-23" + lexes "uninitialized" lexes "uninitialized" + says syntax error on "0o12345671234567_12345671234567_i8" says syntax error on "0o12345671234567_12345671234567_i8" + says syntax error on "'\\u{110000}'" says syntax error on "'\\u{110000}'" + says syntax error on "0b11_f32" says syntax error on "0b11_f32" + says syntax error on "/foo" says syntax error on "/foo" + lexes "1f32" lexes "1f32" + lexes ":!" lexes ":!" + lexes ">=" lexes ">=" + lexes "with_1" lexes "with_1" + lexes "0x3🔮" lexes "0x3🔮" + says syntax error on "-3_" says syntax error on "-3_" + lexes "<" lexes "<" + lexes ".." lexes ".." + lexes ">" lexes ">" + says syntax error on "1_.1" says syntax error on "1_.1" + lexes ":===" lexes ":===" + lexes "<<=" lexes "<<=" + lexes "0xFFFFFFFF" lexes "0xFFFFFFFF" + lexes ":>=" lexes ":>=" + lexes "as" lexes "as" + lexes '\a' lexes '\a' + lexes "%=" lexes "%=" + lexes "select" lexes "select" + lexes "unless?" lexes "unless?" + lexes "-0o123" lexes "-0o123" + lexes "pointerof" lexes "pointerof" + lexes '\0' lexes '\0' + says syntax error on "-0x80000000000000000000000000000001" says syntax error on "-0x80000000000000000000000000000001" + lexes symbol followed by != lexes symbol followed by != + says syntax error on "4i22" says syntax error on "4i22" + lexes "0xabcdef" lexes "0xabcdef" + lexes "+0" lexes "+0" + lexes '\r' lexes '\r' + lexes "1_i16" lexes "1_i16" + lexes "?" lexes "?" + lexes "with_underscores" lexes "with_underscores" + lexes ":&" lexes ":&" + lexes "0🔮" lexes "0🔮" + lexes ":>" lexes ":>" + lexes "@foo" lexes "@foo" + lexes "true?" lexes "true?" + says syntax error on "\"\\x1z\"" says syntax error on "\"\\x1z\"" + lexes "//" lexes "//" + says syntax error on ":+1" says syntax error on ":+1" + lexes "return?" lexes "return?" + lexes "1u64" lexes "1u64" + lexes "2147483648" lexes "2147483648" + lexes "-0xFFFF" lexes "-0xFFFF" + says syntax error on "0F32" says syntax error on "0F32" + lexes "verbatim" lexes "verbatim" + lexes "1i64" lexes "1i64" + says syntax error on "-9999999999999999999" says syntax error on "-9999999999999999999" + lexes "next?" lexes "next?" + says syntax error on "0_12" says syntax error on "0_12" + lexes "do" lexes "do" + lexes "14146167139683460000" lexes "14146167139683460000" + lexes space after keyword lexes space after keyword + lexes "0b111111111111111111111111111111111111111111111111111111111111111" lexes "0b111111111111111111111111111111111111111111111111111111111111111" + lexes "0o001777777777777777777777" lexes "0o001777777777777777777777" + lexes "!~" lexes "!~" + lexes "/=" lexes "/=" + lexes "next!" lexes "next!" + lexes "-2147483649" lexes "-2147483649" + says syntax error on "256_u8" says syntax error on "256_u8" + lexes "//=" lexes "//=" + lexes "]" lexes "]" + lexes "begin?" lexes "begin?" + lexes ":*" lexes ":*" + lexes ":かたな" lexes ":かたな" + lexes "Foo" lexes "Foo" + lexes "unless" lexes "unless" + lexes "1i128hello" lexes "1i128hello" + lexes "*" lexes "*" + lexes "%}" lexes "%}" + lexes ":\"foo\"" lexes ":\"foo\"" + lexes "-0x8000000000000000_i64" lexes "-0x8000000000000000_i64" + lexes 'a' lexes 'a' + lexes "=>" lexes "=>" + lexes "if?" lexes "if?" + lexes "1_i32" lexes "1_i32" + lexes "_" lexes "_" + lexes "class" lexes "class" + says syntax error on "-9223372036854775809_i64" says syntax error on "-9223372036854775809_i64" + lexes ":foo" lexes ":foo" + says syntax error on "0o1234567123456712345671234567u64" says syntax error on "0o1234567123456712345671234567u64" + lexes char with unicode codepoint lexes char with unicode codepoint + lexes "0o123" lexes "0o123" + says syntax error on "4u65" says syntax error on "4u65" + says syntax error on "-.42" says syntax error on "-.42" + lexes "1" lexes "1" + lexes "0o37777777777" lexes "0o37777777777" + says syntax error on "0x1afafafafafafafafafafaf" says syntax error on "0x1afafafafafafafafafafaf" + lexes heredoc start lexes heredoc start + says syntax error on "0x10000_0000_0000_0000" says syntax error on "0x10000_0000_0000_0000" + lexes "for" lexes "for" + lexes "<<" lexes "<<" + lexes "abstract" lexes "abstract" + lexes "1.0f32" lexes "1.0f32" + lexes "[" lexes "[" + lexes ":[]?" lexes ":[]?" + lexes symbol with quote lexes symbol with quote + lexes "9223372036854775808" lexes "9223372036854775808" + lexes ":<<" lexes ":<<" + lexes "ensure" lexes "ensure" + lexes regex after \r\n lexes regex after \r\n + lexes '\f' lexes '\f' + lexes "1.0f64" lexes "1.0f64" + lexes "require" lexes "require" + lexes "ident" lexes "ident" + lexes "1e+23" lexes "1e+23" + lexes "1_u128" lexes "1_u128" + lexes ";" lexes ";" + says syntax error on "0b🔮" says syntax error on "0b🔮" + lexes char with unicode codepoint and curly with six hex digits lexes char with unicode codepoint and curly with six hex digits + lexes "-1_i128" lexes "-1_i128" + lexes "fun" lexes "fun" + lexes "false" lexes "false" + says syntax error on "0o200_i8" says syntax error on "0o200_i8" + lexes "0o40000000000" lexes "0o40000000000" + lexes "fooBar" lexes "fooBar" + lexes "-9223372036854775809_i128" lexes "-9223372036854775809_i128" + lexes "def" lexes "def" + lexes "-0x80000001" lexes "-0x80000001" + lexes "$23?" lexes "$23?" + lexes "0o777777777777777777777" lexes "0o777777777777777777777" + lexes '\b' lexes '\b' + lexes "0o177777_77777777_77777777" lexes "0o177777_77777777_77777777" + lexes "1_i128" lexes "1_i128" + lexes "0xffffffff" lexes "0xffffffff" + lexes "false?" lexes "false?" + lexes "is_a?" lexes "is_a?" + lexes symbol followed by === lexes symbol followed by === + lexes "0b11111111111111111111111111111111" lexes "0b11111111111111111111111111111111" + says syntax error on "0x100000000i32" says syntax error on "0x100000000i32" + lexes "typeof" lexes "typeof" + lexes "\110" lexes "\110" + says syntax error on "2e+-2" says syntax error on "2e+-2" + says syntax error on "4294967296_u32" says syntax error on "4294967296_u32" + lexes "yield" lexes "yield" + lexes "0o17777777777" lexes "0o17777777777" + lexes "0xFFFF" lexes "0xFFFF" + lexes ":|" lexes ":|" + says syntax error on "'\\1'" says syntax error on "'\\1'" + lexes "$?" lexes "$?" + lexes "1u128" lexes "1u128" + lexes char with unicode codepoint and curly lexes char with unicode codepoint and curly + lexes '\v' lexes '\v' + says syntax error on "2e+f32" says syntax error on "2e+f32" + lexes "1.2e+23_f32" lexes "1.2e+23_f32" + lexes "340282366920938463463374607431768211455_u128" lexes "340282366920938463463374607431768211455_u128" + lexes "begin!" lexes "begin!" + lexes ":<" lexes ":<" + lexes "out" lexes "out" + lexes "0x80000001" lexes "0x80000001" + says syntax error on "0b1000000000000000000000000000000000000000000000000000000000000000i64" says syntax error on "0b1000000000000000000000000000000000000000000000000000000000000000i64" + lexes "bar!" lexes "bar!" + lexes "$FOO" lexes "$FOO" + lexes "9223372036854775808_i128" lexes "9223372036854775808_i128" + lexes "instance_sizeof" lexes "instance_sizeof" + says syntax error on "4.0_u32" says syntax error on "4.0_u32" + lexes '\'' lexes '\'' + lexes "struct" lexes "struct" + lexes "asm" lexes "asm" + lexes "0e40" lexes "0e40" + lexes "1u8" lexes "1u8" + says syntax error on "340282366920938463463374607431768211456" says syntax error on "340282366920938463463374607431768211456" + lexes comment at the end lexes comment at the end + lexes "1.2e+23" lexes "1.2e+23" + lexes "nil" lexes "nil" + says syntax error on "118446744073709551616" says syntax error on "118446744073709551616" + says syntax error on "-9223372036854775809" says syntax error on "-9223372036854775809" + lexes "0o17777777777_i32" lexes "0o17777777777_i32" + lexes "while?" lexes "while?" + doesn't raise if many slash r with slash n doesn't raise if many slash r with slash n + lexes ":=~" lexes ":=~" + lexes utf-8 char lexes utf-8 char + lexes "^=" lexes "^=" + lexes "$foo" lexes "$foo" + lexes "-@foo" lexes "-@foo" + says syntax error on "-0u64" says syntax error on "-0u64" + lexes "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_u128" lexes "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_u128" + lexes "$_foo" lexes "$_foo" + lexes "&+" lexes "&+" + lexes "break?" lexes "break?" + lexes "&=" lexes "&=" + lexes "-" lexes "-" + lexes "end" lexes "end" + lexes "{" lexes "{" + lexes != after identifier (#4815) lexes != after identifier (#4815) + lexes __LINE__ lexes __LINE__ + lexes utf-8 multibyte char lexes utf-8 multibyte char + lexes not instance var lexes not instance var + lexes "0x10000_0000_0000_0000_i128" lexes "0x10000_0000_0000_0000_i128" + lexes "0x00ffffffffffffffff" lexes "0x00ffffffffffffffff" + lexes ":!=" lexes ":!=" + lexes "==" lexes "==" + lexes "until" lexes "until" + lexes "|=" lexes "|=" + lexes " " lexes " " + lexes "protected" lexes "protected" + lexes "when" lexes "when" + lexes "2_e2" lexes "2_e2" + lexes "sizeof" lexes "sizeof" + lexes "1u32" lexes "1u32" + lexes ":&-" lexes ":&-" + lexes "next" lexes "next" + lexes "0x100000000" lexes "0x100000000" + lexes "&" lexes "&" + lexes "+" lexes "+" + lexes "118446744073709551616_u128" lexes "118446744073709551616_u128" + lexes "|" lexes "|" + lexes comment and token lexes comment and token + lexes "[]?" lexes "[]?" + lexes symbol with backslash (#2187) lexes symbol with backslash (#2187) + lexes "end!" lexes "end!" + lexes "2147483648.foo" lexes "2147483648.foo" + says syntax error on "/\\" says syntax error on "/\\" + says syntax error on ":\"foo" says syntax error on ":\"foo" + lexes "10000000000000000000_u64" lexes "10000000000000000000_u64" + lexes "1.0f32hello" lexes "1.0f32hello" + lexes "1f64" lexes "1f64" + lexes "0xFFFF_u64" lexes "0xFFFF_u64" + says syntax error on ".42" says syntax error on ".42" + lexes "\n" lexes "\n" + lexes "false!" lexes "false!" + lexes ":foo!" lexes ":foo!" + lexes "0b0_1" lexes "0b0_1" + lexes "include" lexes "include" + lexes "|" lexes "|" + lexes "$10" lexes "$10" + says syntax error on "-1_u16" says syntax error on "-1_u16" + says syntax error on "0o200000_00000000_00000000" says syntax error on "0o200000_00000000_00000000" + lexes "something" lexes "something" + lexes "1_i64" lexes "1_i64" + lexes "0xffffffffffffffff" lexes "0xffffffffffffffff" + lexes "~" lexes "~" + lexes ":+" lexes ":+" + lexes "nil!" lexes "nil!" + lexes float then zero (bug) lexes float then zero (bug) + lexes "break!" lexes "break!" + lexes "\t" lexes "\t" + lexes "0b1000000000000000000000000000000000000000000000000000000000000000" lexes "0b1000000000000000000000000000000000000000000000000000000000000000" + lexes "1i128" lexes "1i128" + says syntax error on "-11111111111111111111" says syntax error on "-11111111111111111111" + lexes "!=" lexes "!=" + lexes "else?" lexes "else?" + lexes "enum" lexes "enum" + lexes "-1234" lexes "-1234" + says syntax error on "1__1" says syntax error on "1__1" + lexes "1hello" lexes "1hello" + says syntax error on "-129_i8" says syntax error on "-129_i8" + lexes "\10" lexes "\10" + lexes "0i32" lexes "0i32" + lexes "," lexes "," + lexes "18446744073709551615" lexes "18446744073709551615" + doesn't raise if slash r with slash n doesn't raise if slash r with slash n + lexes "extend" lexes "extend" + lexes "annotation" lexes "annotation" + says syntax error on "0b100000000000000000000000000000000000000000000000000000000000000000" says syntax error on "0b100000000000000000000000000000000000000000000000000000000000000000" + lexes "def?" lexes "def?" + says syntax error on "0x1afafafafafafafafafafafu64" says syntax error on "0x1afafafafafafafafafafafu64" + lexes "[]=" lexes "[]=" + lexes "&**" lexes "&**" + says syntax error on "0b10000000_i8" says syntax error on "0b10000000_i8" + lexes "<=" lexes "<=" + lexes "+0xFFFF" lexes "+0xFFFF" + lexes ":==" lexes ":==" + lexes "-=" lexes "-=" + says syntax error on "4u12" says syntax error on "4u12" + lexes "0b1_i64" lexes "0b1_i64" + lexes ":&+" lexes ":&+" + lexes "2e01" lexes "2e01" + lexes "1i16" lexes "1i16" + lexes "0x8000000000000000" lexes "0x8000000000000000" + lexes "foo?" lexes "foo?" + lexes "+1" lexes "+1" + lexes "break" lexes "break" + lexes "0_i32" lexes "0_i32" + lexes "$1" lexes "$1" + lexes space after char lexes space after char + lexes "then" lexes "then" + says syntax error on "0b_10" says syntax error on "0b_10" + says syntax error on "0b100000000000000000000000000000000i32" says syntax error on "0b100000000000000000000000000000000i32" + lexes "-0xFFFFFFFF" lexes "-0xFFFFFFFF" + lexes "^" lexes "^" + lexes "&+@foo" lexes "&+@foo" + lexes "do?" lexes "do?" + says syntax error on "0b100000000000000000000000000000000000000000000000000000000000000000u64" says syntax error on "0b100000000000000000000000000000000000000000000000000000000000000000u64" + says syntax error on "'\\u{}'" says syntax error on "'\\u{}'" + lexes "$1?" lexes "$1?" + lexes "\x12" lexes "\x12" + lexes "elsif" lexes "elsif" + says syntax error on "0xfffffffffffffffff_u64" says syntax error on "0xfffffffffffffffff_u64" + lexes "1e23" lexes "1e23" + lexes "0o700000000000000000000" lexes "0o700000000000000000000" + lexes "rescue" lexes "rescue" + lexes "&&=" lexes "&&=" + says syntax error on "\r1" says syntax error on "\r1" + says syntax error on "'\\uD800'" says syntax error on "'\\uD800'" + lexes '\n' lexes '\n' + lexes "+@foo" lexes "+@foo" + says syntax error on "4u3" says syntax error on "4u3" + lexes "1i64hello" lexes "1i64hello" + lexes ":!~" lexes ":!~" + lexes "0" lexes "0" + lexes "!" lexes "!" + says syntax error on "-0o7777777777777777777777777777777777777777777777777" says syntax error on "-0o7777777777777777777777777777777777777777777777777" + says syntax error on "9223372036854775808_i64" says syntax error on "9223372036854775808_i64" + lexes "-0b1010" lexes "-0b1010" + lexes "true!" lexes "true!" + lexes ":**" lexes ":**" + says syntax error on "0123" says syntax error on "0123" + lexes ":%" lexes ":%" + lexes "1_i8" lexes "1_i8" + lexes "1E40" lexes "1E40" + lexes ":^" lexes ":^" + lexes "end?" lexes "end?" + says syntax error on "-99999999999999999999" says syntax error on "-99999999999999999999" + lexes "18446744073709551616_u128" lexes "18446744073709551616_u128" + lexes "**=" lexes "**=" + lexes "170141183460469231731687303715884105727_i128" lexes "170141183460469231731687303715884105727_i128" + lexes "0b1111111111111111111111111111111_i32" lexes "0b1111111111111111111111111111111_i32" + says syntax error on "0b100000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000_u64" says syntax error on "0b100000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000_u64" + lexes ":[]" lexes ":[]" + says syntax error on "2e+" says syntax error on "2e+" + says syntax error on "0x10000_0000_0000_0000_u64" says syntax error on "0x10000_0000_0000_0000_u64" + lexes "elsif?" lexes "elsif?" + lexes "1234" lexes "1234" + lexes "%" lexes "%" + lexes ":foo=" lexes ":foo=" + lexes "yield?" lexes "yield?" + lexes "+=" lexes "+=" + lexes ":-" lexes ":-" + lexes "0x7fffffff_i32" lexes "0x7fffffff_i32" + says syntax error on "'\\" says syntax error on "'\\" + lexes "1u16" lexes "1u16" + lexes "1.0hello" lexes "1.0hello" + lexes "1i64" lexes "1i64" + lexes "..." lexes "..." + lexes "||=" lexes "||=" + lexes "case" lexes "case" + lexes "+0o123" lexes "+0o123" + says syntax error on "18446744073709551616_u64" says syntax error on "18446744073709551616_u64" + lexes "begin" lexes "begin" + lexes '\0' lexes '\0' + lexes "-1" lexes "-1" + lexes "+1_i64" lexes "+1_i64" + lexes ")" lexes ")" + lexes "type" lexes "type" + says syntax error on "118446744073709551616_u64" says syntax error on "118446744073709551616_u64" + says syntax error on "0o1000000000000000000000i64" says syntax error on "0o1000000000000000000000i64" + lexes "-0.5" lexes "-0.5" + lexes "!@foo" lexes "!@foo" + says syntax error on "'\\u{D800}'" says syntax error on "'\\u{D800}'" + lexes "100_000" lexes "100_000" + says syntax error on "2e+_2" says syntax error on "2e+_2" + says syntax error on "$01" says syntax error on "$01" + says syntax error on "32768_i16" says syntax error on "32768_i16" + lexes "12341234🔮" lexes "12341234🔮" + says syntax error on "'" says syntax error on "'" + says syntax error on "4u33" says syntax error on "4u33" + lexes "\4" lexes "\4" + lexes "+1.0" lexes "+1.0" + says syntax error on "-1_u8" says syntax error on "-1_u8" + lexes ":>>" lexes ":>>" + lexes '\t' lexes '\t' + says syntax error on "4f65" says syntax error on "4f65" + says syntax error on "4u22" says syntax error on "4u22" + lexes "." lexes "." + lexes "$~" lexes "$~" + lexes char with unicode codepoint and curly with zeros lexes char with unicode codepoint and curly with zeros + says syntax error on "2e+e" says syntax error on "2e+e" + lexes "❨╯°□°❩╯︵┻━┻" lexes "❨╯°□°❩╯︵┻━┻" + says syntax error on "-170141183460469231731687303715884105729" says syntax error on "-170141183460469231731687303715884105729" + lexes "&&" lexes "&&" + lexes "elsif!" lexes "elsif!" + lexes "+0b1010" lexes "+0b1010" + says syntax error on "2e+@foo" says syntax error on "2e+@foo" + lexes "if!" lexes "if!" + lexes "-0" lexes "-0" + says syntax error on "10e_10" says syntax error on "10e_10" + says syntax error on "-1_u64" says syntax error on "-1_u64" + lexes '\\' lexes '\\' + lexes "{{" lexes "{{" + lexes "-1.0" lexes "-1.0" + lexes "1e23f64" lexes "1e23f64" + lexes "::" lexes "::" + says syntax error on "0o1234567123456712345671234567" says syntax error on "0o1234567123456712345671234567" + lexes "&-@foo" lexes "&-@foo" + says syntax error on "4F64" says syntax error on "4F64" + says syntax error on "01_i64" says syntax error on "01_i64" + lexes "170141183460469231731687303715884105728_u128" lexes "170141183460469231731687303715884105728_u128" + lexes ":~" lexes ":~" + lexes "1_u64" lexes "1_u64" + lexes "1.foo" lexes "1.foo" + says syntax error on "'\\uFEDZ'" says syntax error on "'\\uFEDZ'" + lexes ":/" lexes ":/" + lexes "(" lexes "(" + says syntax error on "'\\uDFFF'" says syntax error on "'\\uDFFF'" Semantic: macro - finds generic type argument of included module with self finds generic type argument of included module with self - can return class type in macro def can return class type in macro def - finds macro in inherited generic class finds macro in inherited generic class - allows named args after splat allows named args after splat - can access variable inside macro expansion (#2057) can access variable inside macro expansion (#2057) + can return virtual class type in macro def can return virtual class type in macro def doesn't error when adding macro call to constant (#2457) doesn't error when adding macro call to constant (#2457) - can specify tuple as return type can specify tuple as return type - types macro types macro - uses bare * uses bare * - errors if named arg matches single splat parameter errors if named arg matches single splat parameter - double splat and regular args double splat and regular args + errors if missing one argument errors if missing one argument + allows specifying self as macro def return type (2) allows specifying self as macro def return type (2) + finds metaclass instance of instance method (#4739) finds metaclass instance of instance method (#4739) + errors if named arg matches splat parameter errors if named arg matches splat parameter + solves named macro expression arguments before macro expansion (type) (#2423) solves named macro expression arguments before macro expansion (type) (#2423) solves macro expression arguments before macro expansion (type) solves macro expression arguments before macro expansion (type) - can define constant via macro included can define constant via macro included - uses uninitialized variable with macros uses uninitialized variable with macros + finds generic in macro code finds generic in macro code + @caller + provides access to the `Call` information provides access to the `Call` information + returns an array of each call returns an array of each call + returns nil if no stack is available returns nil if no stack is available + skip_file macro directive + skips expanding the rest of the current file skips expanding the rest of the current file + skips file inside an if macro expression skips file inside an if macro expression + finds generic in macro code using free var finds generic in macro code using free var + types macro def that calls another method types macro def that calls another method + executes MultiAssign with ArrayLiteral value executes MultiAssign with ArrayLiteral value + finds generic type argument of included module with self finds generic type argument of included module with self + doesn't die on && inside if (bug) doesn't die on && inside if (bug) + allows declaring class with macro if allows declaring class with macro if + solves macro expression arguments before macro expansion (constant) solves macro expression arguments before macro expansion (constant) + says missing argument because positional args don't match past splat says missing argument because positional args don't match past splat + doesn't crash on syntax error inside macro (regression, #8038) doesn't crash on syntax error inside macro (regression, #8038) + finds macro in included module at class level (#4639) finds macro in included module at class level (#4639) + can lookup type parameter when macro is called inside class (#5343) can lookup type parameter when macro is called inside class (#5343) raise inside method without node renders both frames (#7147) renders both frames (#7147) inside macro - with node - contains the message and not `expanding macro` (#5669) contains the message and not `expanding macro` (#5669) - points to caller when missing node location information (#7147) points to caller when missing node location information (#7147) - renders both frames (#7147) renders both frames (#7147) - pointing at the correct node in complex/nested macro (#7147) pointing at the correct node in complex/nested macro (#7147) without node + supports an empty message (#8631) supports an empty message (#8631) + renders both frames (#7147) renders both frames (#7147) does not contain `expanding macro` does not contain `expanding macro` + with node renders both frames (#7147) renders both frames (#7147) - supports an empty message (#8631) supports an empty message (#8631) + pointing at the correct node in complex/nested macro (#7147) pointing at the correct node in complex/nested macro (#7147) + points to caller when missing node location information (#7147) points to caller when missing node location information (#7147) + contains the message and not `expanding macro` (#5669) contains the message and not `expanding macro` (#5669) + finds macro and method at the same scope finds macro and method at the same scope + declares rescue variable inside for macro declares rescue variable inside for macro + errors if named arg matches single splat parameter errors if named arg matches single splat parameter + types macro types macro + checks if macro expansion returns (#821) checks if macro expansion returns (#821) + does macro verbatim inside macro does macro verbatim inside macro + show macro trace in errors (1) show macro trace in errors (1) + finds macro in inherited generic class finds macro in inherited generic class + expands macro with block expands macro with block + can use macro in instance var initializer (#7666) can use macro in instance var initializer (#7666) + types macro def with argument types macro def with argument + expands macro with block and argument to yield expands macro with block and argument to yield + errors if declares macro inside if errors if declares macro inside if + assigns to underscore in MultiAssign assigns to underscore in MultiAssign + allows union return types for macro def allows union return types for macro def + transforms with {{yield}} and call transforms with {{yield}} and call + preserves correct self in restriction when macro def is to be instantiated in subtypes (#5044) preserves correct self in restriction when macro def is to be instantiated in subtypes (#5044) + types macro def that calls another method inside a class types macro def that calls another method inside a class + looks up argument types in macro owner, not in subclass (#2395) looks up argument types in macro owner, not in subclass (#2395) + gives correct error when method is invoked but macro exists at the same scope gives correct error when method is invoked but macro exists at the same scope + can return class type in macro def can return class type in macro def + clones default value before expanding clones default value before expanding + can override macro (#2773) can override macro (#2773) finds metaclass instance of instance method (#4639) finds metaclass instance of instance method (#4639) - has correct location after expanding assignment after instance var has correct location after expanding assignment after instance var errors if using macro that is defined later errors if using macro that is defined later - clones default value before expanding clones default value before expanding + assigns to underscore assigns to underscore works inside proc literal (#2984) works inside proc literal (#2984) - doesn't die on && inside if (bug) doesn't die on && inside if (bug) - solves macro expression arguments before macro expansion (constant) solves macro expression arguments before macro expansion (constant) - uses bare *, doesn't let more args uses bare *, doesn't let more args - errors if find macros but wrong arguments errors if find macros but wrong arguments + can't define new variables (#466) can't define new variables (#466) + solves named macro expression arguments before macro expansion (constant) (#2423) solves named macro expression arguments before macro expansion (constant) (#2423) allows subclasses of return type for macro def allows subclasses of return type for macro def - assigns to underscore assigns to underscore - executes MultiAssign with ArrayLiteral value executes MultiAssign with ArrayLiteral value - unpacks block parameters inside macros (#13742) unpacks block parameters inside macros (#13742) - types macro def that calls another method inside a class types macro def that calls another method inside a class - can return virtual class type in macro def can return virtual class type in macro def - matches with default value after splat matches with default value after splat - doesn't affect self restrictions outside the macro def being instantiated in subtypes doesn't affect self restrictions outside the macro def being instantiated in subtypes - looks up argument types in macro owner, not in subclass (#2395) looks up argument types in macro owner, not in subclass (#2395) - types macro def with argument types macro def with argument - finds macro in included generic module finds macro in included generic module - types macro def that calls another method types macro def that calls another method - shows correct error message in macro expansion (#7083) shows correct error message in macro expansion (#7083) - cannot lookup type defined in caller class cannot lookup type defined in caller class allows declaring class with macro for allows declaring class with macro for - does macro verbatim inside macro does macro verbatim inside macro - can't define new variables (#466) can't define new variables (#466) - executes OpAssign (#9356) executes OpAssign (#9356) - finds macro in included module at class level (#4639) finds macro in included module at class level (#4639) - finds generic type argument of included module finds generic type argument of included module - assigns to underscore in MultiAssign assigns to underscore in MultiAssign - @caller - returns nil if no stack is available returns nil if no stack is available - returns an array of each call returns an array of each call - provides access to the `Call` information provides access to the `Call` information + can specify tuple as return type can specify tuple as return type finds method before macro (#236) finds method before macro (#236) - finds type for global path shared with free var finds type for global path shared with free var - doesn't crash on syntax error inside macro (regression, #8038) doesn't crash on syntax error inside macro (regression, #8038) - finds macro in module in Object finds macro in module in Object - allows union return types for macro def allows union return types for macro def - applies visibility modifier only to first level applies visibility modifier only to first level + finds var in proc for macros finds var in proc for macros + finds generic type argument of included module finds generic type argument of included module + has correct location after expanding assignment after instance var has correct location after expanding assignment after instance var + allows declaring class with inline macro expression (#1333) allows declaring class with inline macro expression (#1333) + double splat and regular args double splat and regular args + errors if missing two arguments errors if missing two arguments + declares variable for macro with out declares variable for macro with out + allows specifying self as macro def return type allows specifying self as macro def return type + errors if named arg already specified errors if named arg already specified + gets named arguments in double splat gets named arguments in double splat + uses bare *, doesn't let more args uses bare *, doesn't let more args + doesn't include parameters with default values in missing arguments error doesn't include parameters with default values in missing arguments error types macro def types macro def + uses bare * uses bare * + errors if applying protected modifier to macro errors if applying protected modifier to macro + errors if macro uses undefined variable errors if macro uses undefined variable + show macro trace in errors (2) show macro trace in errors (2) types macro def that calls another method inside a class types macro def that calls another method inside a class - finds metaclass instance of instance method (#4739) finds metaclass instance of instance method (#4739) + finds type for global path shared with free var finds type for global path shared with free var + expands multiline macro expression in verbatim (#6643) expands multiline macro expression in verbatim (#6643) + errors if find macros but missing argument errors if find macros but missing argument + finds macro in module in Object finds macro in module in Object + finds free type vars finds free type vars + errors if non-existent named arg errors if non-existent named arg errors if requires inside if through macro expansion errors if requires inside if through macro expansion + finds macro in included generic module finds macro in included generic module + uses uninitialized variable with macros uses uninitialized variable with macros + uses bare *, doesn't let more args uses bare *, doesn't let more args + cannot lookup type defined in caller class cannot lookup type defined in caller class + applies visibility modifier only to first level applies visibility modifier only to first level + unpacks to underscore within block parameters inside macros unpacks to underscore within block parameters inside macros + unpacks block parameters inside macros (#13742) unpacks block parameters inside macros (#13742) + can access variable inside macro expansion (#2057) can access variable inside macro expansion (#2057) + allows named args after splat allows named args after splat + doesn't affect self restrictions outside the macro def being instantiated in subtypes doesn't affect self restrictions outside the macro def being instantiated in subtypes + evaluates yield expression (#2924) evaluates yield expression (#2924) + can use macro in instance var initializer (just assignment) (#7666) can use macro in instance var initializer (just assignment) (#7666) + errors if macro def type not found errors if macro def type not found uses splat and double splat uses splat and double splat - allows specifying self as macro def return type (2) allows specifying self as macro def return type (2) finds macro through alias (#2706) finds macro through alias (#2706) - evaluates yield expression (#2924) evaluates yield expression (#2924) - show macro trace in errors (2) show macro trace in errors (2) - allows generic return types for macro def allows generic return types for macro def - declares rescue variable inside for macro declares rescue variable inside for macro - gets named arguments in double splat gets named arguments in double splat - finds generic in macro code finds generic in macro code - errors if missing one argument errors if missing one argument - expands macro with block expands macro with block - declares variable for macro with out declares variable for macro with out errors when trying to define def inside def with macro expansion errors when trying to define def inside def with macro expansion + shows correct error message in macro expansion (#7083) shows correct error message in macro expansion (#7083) + allows generic return types for macro def allows generic return types for macro def + finds macro in included module finds macro in included module + does macro verbatim outside macro does macro verbatim outside macro allows return values that include the return type of the macro def allows return values that include the return type of the macro def - skip_file macro directive - skips file inside an if macro expression skips file inside an if macro expression - skips expanding the rest of the current file skips expanding the rest of the current file - errors if non-existent named arg errors if non-existent named arg - finds var in proc for macros finds var in proc for macros - preserves correct self in restriction when macro def is to be instantiated in subtypes (#5044) preserves correct self in restriction when macro def is to be instantiated in subtypes (#5044) - errors if find macros but missing argument errors if find macros but missing argument + gives precise location info when doing yield inside macro gives precise location info when doing yield inside macro + can define constant via macro included can define constant via macro included + executes OpAssign (#9356) executes OpAssign (#9356) + declares multi-assign vars for macro declares multi-assign vars for macro + errors if find macros but wrong arguments errors if find macros but wrong arguments expands macro with break inside while (#1852) expands macro with break inside while (#1852) errors if macro def type doesn't match found errors if macro def type doesn't match found - can override macro (#2773) can override macro (#2773) - errors if named arg already specified errors if named arg already specified - uses bare *, doesn't let more args uses bare *, doesn't let more args + finds macro and method at the same scope inside included module finds macro and method at the same scope inside included module executes MultiAssign executes MultiAssign - finds free type vars finds free type vars - gives correct error when method is invoked but macro exists at the same scope gives correct error when method is invoked but macro exists at the same scope - errors if macro uses undefined variable errors if macro uses undefined variable - doesn't include parameters with default values in missing arguments error doesn't include parameters with default values in missing arguments error - show macro trace in errors (1) show macro trace in errors (1) - says missing argument because positional args don't match past splat says missing argument because positional args don't match past splat - checks if macro expansion returns (#821) checks if macro expansion returns (#821) - finds macro and method at the same scope finds macro and method at the same scope - finds generic in macro code using free var finds generic in macro code using free var errors if requires inside class through macro expansion errors if requires inside class through macro expansion - can use macro in instance var initializer (#7666) can use macro in instance var initializer (#7666) - errors if applying protected modifier to macro errors if applying protected modifier to macro - errors if missing two arguments errors if missing two arguments - does macro verbatim outside macro does macro verbatim outside macro - solves named macro expression arguments before macro expansion (type) (#2423) solves named macro expression arguments before macro expansion (type) (#2423) - unpacks to underscore within block parameters inside macros unpacks to underscore within block parameters inside macros - finds macro and method at the same scope inside included module finds macro and method at the same scope inside included module - allows specifying self as macro def return type allows specifying self as macro def return type - errors if declares macro inside if errors if declares macro inside if - errors if macro def type not found errors if macro def type not found - solves named macro expression arguments before macro expansion (constant) (#2423) solves named macro expression arguments before macro expansion (constant) (#2423) - errors if named arg matches splat parameter errors if named arg matches splat parameter - declares multi-assign vars for macro declares multi-assign vars for macro - transforms with {{yield}} and call transforms with {{yield}} and call - can use macro in instance var initializer (just assignment) (#7666) can use macro in instance var initializer (just assignment) (#7666) - allows declaring class with inline macro expression (#1333) allows declaring class with inline macro expression (#1333) - finds macro in included module finds macro in included module - gives precise location info when doing yield inside macro gives precise location info when doing yield inside macro - expands multiline macro expression in verbatim (#6643) expands multiline macro expression in verbatim (#6643) - can lookup type parameter when macro is called inside class (#5343) can lookup type parameter when macro is called inside class (#5343) - allows declaring class with macro if allows declaring class with macro if - expands macro with block and argument to yield expands macro with block and argument to yield -file_exists? - with absolute path - returns false if file doesn't exist returns false if file doesn't exist - returns true if file exists returns true if file exists + matches with default value after splat matches with default value after splat +Crystal::Doc::Generator + .anchor_link + generates the correct anchor link generates the correct anchor link +Lexer doc + resets doc after non newline or space token resets doc after non newline or space token + lexes with doc enabled but without docs lexes with doc enabled but without docs + lexes with doc enabled and docs lexes with doc enabled and docs + lexes with doc enabled and docs, two line comment with leading whitespace lexes with doc enabled and docs, two line comment with leading whitespace + lexes without doc enabled lexes without doc enabled + lexes with doc enabled and docs, one line comment with two newlines and another comment lexes with doc enabled and docs, one line comment with two newlines and another comment + lexes with doc enabled and docs, two line comment lexes with doc enabled and docs, two line comment +Semantic: concrete_types + VirtualType with concrete base VirtualType with concrete base + ModuleType ModuleType + GenericModuleInstanceType GenericModuleInstanceType + VirtualMetaclassType with abstract base VirtualMetaclassType with abstract base + UnionType of structs UnionType of structs + VirtualMetaclassType with concrete base VirtualMetaclassType with concrete base + VirtualType with abstract base VirtualType with abstract base +Code gen: asm + codegens with two inputs codegens with two inputs + codegens with intel dialect codegens with intel dialect + codegens with one input codegens with one input + codegens without inputs codegens without inputs + passes correct string length to LLVM passes correct string length to LLVM + codegens with two outputs codegens with two outputs +Semantic: sizeof + errors on sizeof uninstantiated generic type (#6415) errors on sizeof uninstantiated generic type (#6415) + gives error if using instance_sizeof on an abstract struct with multiple subtypes (#11855) gives error if using instance_sizeof on an abstract struct with multiple subtypes (#11855) + types instance_alignof types instance_alignof + types alignof types alignof + gives error if using instance_sizeof on a struct gives error if using instance_sizeof on a struct + types alignof NoReturn (missing type) (#5717) types alignof NoReturn (missing type) (#5717) + gives error if using instance_sizeof on an abstract struct (#11855) gives error if using instance_sizeof on an abstract struct (#11855) + types instance_sizeof types instance_sizeof + types sizeof types sizeof + gives error if using instance_sizeof on a generic type without type vars gives error if using instance_sizeof on a generic type without type vars + types sizeof NoReturn (missing type) (#5717) types sizeof NoReturn (missing type) (#5717) + gives error if using instance_sizeof on something that's not a class gives error if using instance_sizeof on something that's not a class + types instance_sizeof NoReturn (missing type) (#5717) types instance_sizeof NoReturn (missing type) (#5717) + types instance_alignof NoReturn (missing type) (#5717) types instance_alignof NoReturn (missing type) (#5717) + gives error if using instance_sizeof on a metaclass gives error if using instance_sizeof on a metaclass + gives error if using instance_sizeof on a union type (#8349) gives error if using instance_sizeof on a union type (#8349) + gives error if using instance_sizeof on a module gives error if using instance_sizeof on a module +Code gen: struct + codegens virtual structs union (2) codegens virtual structs union (2) + allows assigning to struct argument (bug) allows assigning to struct argument (bug) + returns struct as a copy returns struct as a copy + creates structs with instance var creates structs with instance var + creates struct in def creates struct in def + uses nilable struct uses nilable struct + can cast virtual struct to specific struct can cast virtual struct to specific struct can cast virtual struct to specific struct can cast virtual struct to specific struct can cast virtual struct to specific struct can cast virtual struct to specific struct������������ can cast virtual struct to specific struct�� can cast virtual struct to specific struct�� can cast virtual struct to specific struct can cast virtual struct to specific struct + casts virtual struct to base type, only one subclass (#2885) casts virtual struct to base type, only one subclass (#2885) + can call new on abstract struct with single child (#7309) can call new on abstract struct with single child (#7309) + codegens virtual struct metaclass (#2551) (3) codegens virtual struct metaclass (#2551) (3) + codegens virtual struct metaclass (#2551) (2) codegens virtual struct metaclass (#2551) (2) + assigning a struct makes a copy (1) assigning a struct makes a copy (1) + codegens virtual struct with pointer codegens virtual struct with pointer + returns self returns self + codegens virtual struct codegens virtual struct + passes a struct as a parameter makes a copy passes a struct as a parameter makes a copy + codegens virtual struct metaclass (#2551) (4) codegens virtual struct metaclass (#2551) (4) codegens virtual struct metaclass (#2551) (4) codegens virtual struct metaclass (#2551) (4) codegens virtual struct metaclass (#2551) (4) codegens virtual struct metaclass (#2551) (4)������������ codegens virtual struct metaclass (#2551) (4)�� codegens virtual struct metaclass (#2551) (4)�� codegens virtual struct metaclass (#2551) (4) codegens virtual struct metaclass (#2551) (4) + passes a generic struct as a parameter makes a copy passes a generic struct as a parameter makes a copy + returns self with block returns self with block + assigning a struct makes a copy (2) assigning a struct makes a copy (2) + codegens virtual structs union (1) codegens virtual structs union (1) + codegens struct assigned to underscore (#1842) codegens struct assigned to underscore (#1842) + creates structs creates structs + codegens virtual struct metaclass (#2551) (1) codegens virtual struct metaclass (#2551) (1) + mutates a virtual struct mutates a virtual struct + declares const struct declares const struct declares const struct declares const struct declares const struct declares const struct declares const struct�������������� declares const struct�� declares const struct declares const struct + uses struct in if uses struct in if uses struct in if uses struct in if uses struct in if uses struct in if uses struct in if�������������� uses struct in if�� uses struct in if uses struct in if + does phi of struct does phi of struct +Semantic: lib + errors if second argument is not a string errors if second argument is not a string + defines lib funs before funs with body defines lib funs before funs with body + types a varargs external types a varargs external + errors if defining incompatible funs with the same name in different libs (#3045) errors if defining incompatible funs with the same name in different libs (#3045) + can use out with named args can use out with named args + raises on undefined fun raises on undefined fun + reports error on fun argument type not primitive like, Nil (#2994) reports error on fun argument type not primitive like, Nil (#2994) + reports redefinition of fun with different signature reports redefinition of fun with different signature + types lib var get with forward declaration types lib var get with forward declaration + raises wrong argument type raises wrong argument type + errors if wrong number of arguments for CallConvention errors if wrong number of arguments for CallConvention + errors if assigning void lib call to var (#4414) errors if assigning void lib call to var (#4414) + errors if using named args with variadic function errors if using named args with variadic function + errors if invoking to_i32! and got error in that call errors if invoking to_i32! and got error in that call + errors if lib named arg is not a String errors if lib named arg is not a String + errors if CallConvention argument is not a string errors if CallConvention argument is not a string + types lib var set types lib var set + errors if third argument is not a bool errors if third argument is not a bool + errors if using out with varargs errors if using out with varargs + errors if unknown named arg errors if unknown named arg + errors if using void via typedef as parameter (related to #508) errors if using void via typedef as parameter (related to #508) + passes int as another integer type with literal passes int as another integer type with literal + defined fun with aliased type defined fun with aliased type + disallows passing nil or pointer to arg expecting pointer disallows passing nil or pointer to arg expecting pointer + gathers link annotations from macro expression gathers link annotations from macro expression + errors if defining incompatible funs with the same name in the same lib (#3045) errors if defining incompatible funs with the same name in the same lib (#3045) + reports error on struct field type not primitive like reports error on struct field type not primitive like + error if passing non primitive type as varargs invoking to_unsafe error if passing non primitive type as varargs invoking to_unsafe + errors if missing arguments errors if missing arguments + errors if parameter already specified errors if parameter already specified + supports forward references with struct inside struct (#399) supports forward references with struct inside struct (#399) + reports error on fun return type not primitive like reports error on fun return type not primitive like + reopens lib and adds more link annotations reopens lib and adds more link annotations + can use tuple as fun return can use tuple as fun return + reports error when changing instance var type and something breaks reports error when changing instance var type and something breaks + errors if invoking to_i32! and got wrong type errors if invoking to_i32! and got wrong type + error if passing non primitive type as varargs error if passing non primitive type as varargs + errors if missing argument errors if missing argument + errors if using void as parameter (related to #508) errors if using void as parameter (related to #508) + types fun returning nil as nil types fun returning nil as nil + allows invoking lib call without obj inside lib allows invoking lib call without obj inside lib + can use named args can use named args + errors if dll argument contains directory separators errors if dll argument contains directory separators + errors if too many link arguments errors if too many link arguments + reports error if using out with an already declared variable reports error if using out with an already declared variable + passes float as another integer type in variable passes float as another integer type in variable + passes int as another integer type in variable passes int as another integer type in variable + reports error when changing var type and something breaks reports error when changing var type and something breaks + supports forward references (#399) supports forward references (#399) + overrides definition of fun overrides definition of fun + types lib var get types lib var get + reports error out can only be used with lib funs reports error out can only be used with lib funs + errors if using unknown named param errors if using unknown named param + reports error on fun argument type not primitive like reports error on fun argument type not primitive like + errors if dll argument does not end with '.dll' errors if dll argument does not end with '.dll' + reports error out can only be used with lib funs in named argument reports error out can only be used with lib funs in named argument + reopens lib and adds same link annotations reopens lib and adds same link annotations + allows passing splat to LibC fun allows passing splat to LibC fun + errors if using out with non-pointer errors if using out with non-pointer + doesn't try to invoke unsafe for c struct/union (#1362) doesn't try to invoke unsafe for c struct/union (#1362) + errors if CallConvention argument is not a valid string errors if CallConvention argument is not a valid string + errors if using out with void pointer (#2424) errors if using out with void pointer (#2424) + can use macros inside struct can use macros inside struct + can use macros inside lib can use macros inside lib + errors if redefining fun with different signature (#2468) errors if redefining fun with different signature (#2468) + specifies a call convention specifies a call convention + errors if passing void lib call to call argument (#4414) errors if passing void lib call to call argument (#4414) + errors if missing link arguments errors if missing link arguments + can list lib functions at the top level (#12395) can list lib functions at the top level (#12395) + errors if defines def on lib errors if defines def on lib + error if passing type to LibC with to_unsafe but type doesn't match error if passing type to LibC with to_unsafe but type doesn't match + errors if first argument is not a string errors if first argument is not a string + warns if @[Link(static: true)] is specified warns if @[Link(static: true)] is specified + errors if using out with void pointer through type errors if using out with void pointer through type + allows passing double splat to LibC fun allows passing double splat to LibC fun + types fun returning void as nil types fun returning void as nil + types fun returning nothing as nil types fun returning nothing as nil + allows invoking out with underscore allows invoking out with underscore + clears annotations after lib clears annotations after lib + specifies a call convention to a lib specifies a call convention to a lib + errors if lib already specified with positional argument errors if lib already specified with positional argument + reports error on typedef type not primitive like reports error on typedef type not primitive like + warns if Link annotations use positional arguments warns if Link annotations use positional arguments + allows dll argument allows dll argument + raises wrong number of arguments raises wrong number of arguments + correctly attached link flags if there's a macro if correctly attached link flags if there's a macro if + errors if fourth argument is not a bool errors if fourth argument is not a bool + errors if lib fun call is part of dispatch errors if lib fun call is part of dispatch +Code gen: macro + doesn't override local variable when using macro variable (2) doesn't override local variable when using macro variable (2) + codegens macro def with default arg (similar to #496) codegens macro def with default arg (similar to #496) + recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added���������������� recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added + determines if overrides, through another class (true) determines if overrides, through another class (true) + expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568)�� expands macro with op assign inside assign (#5568)�������� expands macro with op assign inside assign (#5568)������ expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) + expands macro as class method expands macro as class method + codegens macro with comment (bug) (#1396) codegens macro with comment (bug) (#1396) + expands @def in inline macro expands @def in inline macro + doesn't replace %s in string (#2178) doesn't replace %s in string (#2178) + expands macro that yields expands macro that yields + can use constants can use constants + can use macro inside array literal can use macro inside array literal can use macro inside array literal can use macro inside array literal can use macro inside array literal can use macro inside array literal can use macro inside array literal�������������� can use macro inside array literal�� can use macro inside array literal can use macro inside array literal + transforms hooks (bug) transforms hooks (bug) + determines if overrides, with macro method (false) determines if overrides, with macro method (false) + expands def macro with @type.instance_vars expands def macro with @type.instance_vars + expands def macro with var expands def macro with var + gets default value of instance variable gets default value of instance variable + keeps line number with no block keeps line number with no block + expands @type.name in virtual metaclass (2) expands @type.name in virtual metaclass (2) + executes with named arguments for positional arg (3) executes with named arguments for positional arg (3) + replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178)�������� replaces %s inside string inside interpolation (#2178)������ replaces %s inside string inside interpolation (#2178)�� replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) + can refer to union (1) can refer to union (1) + codegens macro def with splat (#496) codegens macro def with splat (#496) + initializes instance var in macro initializes instance var in macro + determines if method exists (true) determines if method exists (true) + expands inline macro for expands inline macro for + surrounds {{yield}} with begin/end surrounds {{yield}} with begin/end + gets constant gets constant + keeps line number with a block keeps line number with a block + expands def macro with @type.instance_vars with virtual expands def macro with @type.instance_vars with virtual + expands macro and resolves type correctly expands macro and resolves type correctly + receives &block receives &block + determines if overrides (true) determines if overrides (true) + expands def macro with @type.name with virtual (2) expands def macro with @type.name with virtual (2) + expands def macro with instance var and method call (bug) expands def macro with instance var and method call (bug) + responds correctly to has_constant? with @top_level responds correctly to has_constant? with @top_level + expands macro defined in base class expands macro defined in base class + expands def macro with @type.name expands def macro with @type.name + determines if method exists (false) determines if method exists (false) + does block unpacking inside macro expression (#13707) does block unpacking inside macro expression (#13707) + can access type variables of a tuple can access type variables of a tuple + initializes class var in macro initializes class var in macro + correctly recomputes call (bug) correctly recomputes call (bug) + can access type variables of a module can access type variables of a module + expands macro defined in class expands macro defined in class + can refer to union (2) can refer to union (2) + expands def macro with @type.instance_vars with subclass expands def macro with @type.instance_vars with subclass + copies base macro def to sub-subtype even after it was copied to a subtype (#448) copies base macro def to sub-subtype even after it was copied to a subtype (#448) + expands macro def with return (#1040) expands macro def with return (#1040) + can refer to abstract (1) can refer to abstract (1) + executes all_subclasses executes all_subclasses + executes subclasses executes subclasses + runs macro with arg and splat runs macro with arg and splat + forwards file location forwards file location + replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178)�������������� replaces %s inside string inside interpolation, with braces (#2178)�� replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) + gets default value of instance variable of inherited type that also includes module gets default value of instance variable of inherited type that also includes module + gets methods gets methods + passes #826 passes #826 + expands macro that invokes another macro expands macro that invokes another macro + executes with named arguments for positional arg (1) executes with named arguments for positional arg (1) + runs macro with splat runs macro with splat + determines if overrides (false) determines if overrides (false) + expands @type.name in virtual metaclass (1) expands @type.name in virtual metaclass (1) + forwards dir location forwards dir location + can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal���������������� can use macro inside hash literal can use macro inside hash literal + gets enum members with @type.constants gets enum members with @type.constants + gets correct class name when there are classes in the middle gets correct class name when there are classes in the middle + retains original yield expression (#2923) retains original yield expression (#2923) + access to the program with @top_level access to the program with @top_level + expands macro with default arg and splat (3) (#784) expands macro with default arg and splat (3) (#784) + expands macro with default arg and splat (#784) expands macro with default arg and splat (#784) + fixes empty types of macro expansions (#1379) fixes empty types of macro expansions (#1379) + expands macro expands macro + doesn't replace %q() (#2178) doesn't replace %q() (#2178) + can refer to @type can refer to @type + can refer to abstract (2) can refer to abstract (2) + declares constant in macro (#838) declares constant in macro (#838) + correctly resolves constant inside block in macro def correctly resolves constant inside block in macro def + errors if dynamic constant assignment after macro expansion errors if dynamic constant assignment after macro expansion + uses indexed macro variable uses indexed macro variable + uses invocation context uses invocation context + expands @def in macro expands @def in macro + expands macro with escaped quotes (#895) expands macro with escaped quotes (#895) + can iterate union types can iterate union types + gets default value of instance variable of generic type gets default value of instance variable of generic type gets default value of instance variable of generic type gets default value of instance variable of generic type gets default value of instance variable of generic type gets default value of instance variable of generic type gets default value of instance variable of generic type�������������� gets default value of instance variable of generic type�� gets default value of instance variable of generic type gets default value of instance variable of generic type + can refer to types can refer to types + expands inline macro if (true) expands inline macro if (true) + finds macro from virtual type finds macro from virtual type + uses indexed macro variable with many keys uses indexed macro variable with many keys + doesn't reuse macro nodes (bug) doesn't reuse macro nodes (bug) + devirtualizes @type devirtualizes @type + keeps heredoc contents inside macro keeps heredoc contents inside macro + gets enum members as constants gets enum members as constants + executes with named arguments executes with named arguments + accepts compile-time flags accepts compile-time flags + expands inline macro if (false) expands inline macro if (false) + expands def macro expands def macro + can access type variables can access type variables + expands inline macro expands inline macro + can access type variables of a generic type can access type variables of a generic type + types macro expansion bug (#1734) types macro expansion bug (#1734) + expands def macro with @type.name with virtual expands def macro with @type.name with virtual + expands macro with arguments expands macro with arguments + forwards line number forwards line number + says that enum has Flags annotation says that enum has Flags annotation + checks if macro expansion returns (#821) checks if macro expansion returns (#821) + implicitly marks method as macro def when using @type implicitly marks method as macro def when using @type + executes with named arguments for positional arg (2) executes with named arguments for positional arg (2) + allows overriding macro definition when redefining base class allows overriding macro definition when redefining base class + doesn't override local variable when using macro variable doesn't override local variable when using macro variable + expands Path with resolve method expands Path with resolve method + can access free variables can access free variables + determines if variable has default value determines if variable has default value + uses tuple T in method with free vars uses tuple T in method with free vars + doesn't skip abstract classes when defining macro methods doesn't skip abstract classes when defining macro methods + resolves alias in macro resolves alias in macro + finds macro in class finds macro in class + can access type variables that are not types can access type variables that are not types + determines if overrides, through module (true) determines if overrides, through module (true) + stringifies type without virtual marker stringifies type without virtual marker + expands macro with default arg and splat (2) (#784) expands macro with default arg and splat (2) (#784) + says that enum doesn't have Flags annotation says that enum doesn't have Flags annotation + keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro������������ keeps heredoc contents with interpolation inside macro�� keeps heredoc contents with interpolation inside macro�� keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro + allows macro with default arguments allows macro with default arguments + expands macro as class method and accesses @type expands macro as class method and accesses @type +read_file? with relative path - reads file (exists) reads file (exists) reads file (doesn't exist) reads file (doesn't exist) -Semantic: closure - doesn't assign all types to metavar if closured but declared inside block and re-assigned inside the same context before the closure doesn't assign all types to metavar if closured but declared inside block and re-assigned inside the same context before the closure - does assign all types to metavar if closured but only assigned to once in a loop does assign all types to metavar if closured but only assigned to once in a loop - unifies types of closured var (2) unifies types of closured var (2) - marks variable as closured inside block in fun marks variable as closured inside block in fun - errors if forwarding block param doesn't match input type errors if forwarding block param doesn't match input type - doesn't mark var as closured if only used in two block doesn't mark var as closured if only used in two block - errors if sending closured proc pointer to C (3) errors if sending closured proc pointer to C (3) - transforms block to proc literal with void type transforms block to proc literal with void type - marks method as self closured if instance var is read marks method as self closured if instance var is read - unifies types of closured var (1) unifies types of closured var (1) - transforms block to proc literal transforms block to proc literal - doesn't closure typeof instance var (#9479) doesn't closure typeof instance var (#9479) - doesn't mark self var as closured, but marks method as self closured doesn't mark self var as closured, but marks method as self closured - errors if giving more block args when transforming block to proc literal errors if giving more block args when transforming block to proc literal - gives error when doing yield inside proc literal gives error when doing yield inside proc literal - errors if sending closured proc pointer to C (1) errors if sending closured proc pointer to C (1) - errors if sending closured proc pointer to C (2) errors if sending closured proc pointer to C (2) - doesn't assign all types to metavar if closured but declared inside block and never re-assigned doesn't assign all types to metavar if closured but declared inside block and never re-assigned - does assign all types to metavar if closured but only assigned to once in a loop through block does assign all types to metavar if closured but only assigned to once in a loop through block - gives error when doing yield inside proc literal gives error when doing yield inside proc literal - allows passing block as proc literal to new and to initialize allows passing block as proc literal to new and to initialize - transforms block to proc literal with free var transforms block to proc literal with free var - correctly captures type of closured block arg correctly captures type of closured block arg - errors if forwarding block param doesn't match input type size errors if forwarding block param doesn't match input type size - is considered as closure if assigned once but comes from a method arg is considered as closure if assigned once but comes from a method arg - allows giving less block args when transforming block to proc literal allows giving less block args when transforming block to proc literal - marks variable as closured in def marks variable as closured in def - errors if sending closured proc literal to C errors if sending closured proc literal to C - marks outer fun inside a block as closured marks outer fun inside a block as closured - marks variable as closured in program on assign marks variable as closured in program on assign - does assign all types to metavar if closured but only assigned to once in a loop through captured block does assign all types to metavar if closured but only assigned to once in a loop through captured block - marks method as self closured if instance var is written marks method as self closured if instance var is written - lookups return type in correct scope lookups return type in correct scope - doesn't mark var as closured if only used in block doesn't mark var as closured if only used in block - marks method as self closured if used inside a block marks method as self closured if used inside a block - marks outer fun as closured when using self marks outer fun as closured when using self - passes #227 passes #227 - transforms block to proc literal without parameters transforms block to proc literal without parameters - says can't send closure to C with captured block says can't send closure to C with captured block - says can't send closure to C with new notation says can't send closure to C with new notation - doesn't assign all types to metavar if closured but only assigned to once doesn't assign all types to metavar if closured but only assigned to once - correctly detects previous var as closured (#5609) correctly detects previous var as closured (#5609) - doesn't closure typeof local var doesn't closure typeof local var - marks method as self closured if implicit self call is made marks method as self closured if implicit self call is made - doesn't crash for non-existing variable (#3789) doesn't crash for non-existing variable (#3789) - can use fun typedef as block type can use fun typedef as block type - errors if sending closured proc pointer to C (1.2) errors if sending closured proc pointer to C (1.2) - considers var as closure-readonly if it was assigned multiple times before it was closured considers var as closure-readonly if it was assigned multiple times before it was closured - marks variable as closured in block marks variable as closured in block - marks variable as closured in program marks variable as closured in program - marks method as self closured if explicit self call is made marks method as self closured if explicit self call is made - errors when transforming block to proc literal if type mismatch errors when transforming block to proc literal if type mismatch -Code gen: pointer - can pass any pointer to something expecting void* in lib call, with to_unsafe can pass any pointer to something expecting void* in lib call, with to_unsafe - codegens malloc codegens malloc - gets pointer to constant gets pointer to constant gets pointer to constant gets pointer to constant gets pointer to constant gets pointer to constant������������ gets pointer to constant�� gets pointer to constant�� gets pointer to constant gets pointer to constant - codegens pointer cast codegens pointer cast - can use typedef pointer value get and set (#630) can use typedef pointer value get and set (#630) - can assign nil to void pointer can assign nil to void pointer - codegens nilable pointer type (2) codegens nilable pointer type (2) - can dereference pointer to func can dereference pointer to func - codegens null pointer as if condition codegens null pointer as if condition - codegens nilable pointer type (1) codegens nilable pointer type (1) - does pointerof class variable with class does pointerof class variable with class - can pass any pointer to something expecting void* in lib call can pass any pointer to something expecting void* in lib call - changes through var and reads from pointer changes through var and reads from pointer - sets value of pointer to struct sets value of pointer to struct - codegens pointer cast to Nil (#8015) codegens pointer cast to Nil (#8015) - codegens pointer as if condition inside union (1) codegens pointer as if condition inside union (1) - compares pointers through typedef compares pointers through typedef - codegens pointer as if condition codegens pointer as if condition - creates pointer by address creates pointer by address - uses correct llvm module for typedef metaclass (#2877) uses correct llvm module for typedef metaclass (#2877) - gets pointer of argument that is never assigned to gets pointer of argument that is never assigned to - sets value of pointer to union sets value of pointer to union - assigns nil and pointer to nilable pointer type assigns nil and pointer to nilable pointer type - codegens nilable pointer type dispatch (1) codegens nilable pointer type dispatch (1) - passes pointer of pointer to method passes pointer of pointer to method - codegens realloc codegens realloc - passes arguments correctly for typedef metaclass (#8544) passes arguments correctly for typedef metaclass (#8544) - does pointerof class variable does pointerof class variable - does pointerof read variable does pointerof read variable - get value of pointer to union get value of pointer to union - codegens pointer as if condition inside union (2) codegens pointer as if condition inside union (2) - generates correct code for Pointer.malloc(0) (#2905) generates correct code for Pointer.malloc(0) (#2905) - increments pointer increments pointer - calculates pointer diff calculates pointer diff - get pointer of instance var get pointer of instance var - takes pointerof lib external var takes pointerof lib external var takes pointerof lib external var takes pointerof lib external var takes pointerof lib external var takes pointerof lib external var takes pointerof lib external var�������������� takes pointerof lib external var�� takes pointerof lib external var takes pointerof lib external var - codegens nilable pointer type dispatch (2) codegens nilable pointer type dispatch (2) - gets pointer of instance variable in virtual type gets pointer of instance variable in virtual type - get pointer and value of it get pointer and value of it - set pointer value set pointer value -Crystal::Doc::Type - #node_to_html - shows generic path with unnecessary colons shows generic path with unnecessary colons - shows relative path shows relative path - shows generic path with necessary colons shows generic path with necessary colons - shows relative generic shows relative generic - shows tuples shows tuples - shows named tuples shows named tuples - finds construct when searching class method (#8095) finds construct when searching class method (#8095) - #class_methods - sorts operators first sorts operators first - ASTNode has no superclass ASTNode has no superclass - ASTNode has no ancestors ASTNode has no ancestors - #instance_methods - sorts operators first sorts operators first - #macros - sorts operators first sorts operators first - doesn't show types for alias type doesn't show types for alias type -Semantic: extern struct - errors if using non-primitive for field type via module errors if using non-primitive for field type via module - can include module can include module - declares extern union with no constructor declares extern union with no constructor - can new with named args can new with named args - can be passed to C fun can be passed to C fun - declares with constructor declares with constructor - declares extern struct with no constructor declares extern struct with no constructor - errors if using non-primitive type in constructor errors if using non-primitive type in constructor - errors if using non-primitive for field type errors if using non-primitive for field type - can use extern struct in lib can use extern struct in lib - overrides getter overrides getter -Normalize: or - normalizes or with assignment on the left normalizes or with assignment on the left - normalizes or without variable normalizes or without variable - normalizes or with ! on var normalizes or with ! on var - normalizes or with ! on var.is_a?(...) normalizes or with ! on var.is_a?(...) - normalizes or with variable on the left normalizes or with variable on the left - normalizes or with is_a? on var normalizes or with is_a? on var -Semantic: responds_to? - is bool is bool - restricts in assignment restricts in assignment - restricts other types inside if else restricts other types inside if else - restricts virtual generic module to including types (#8334) restricts virtual generic module to including types (#8334) - restricts type inside if scope 1 restricts type inside if scope 1 - restricts virtual generic superclass to subtypes restricts virtual generic superclass to subtypes -Normalize: return next break - removes nodes after return removes nodes after return - doesn't remove after return when there's an unless doesn't remove after return when there's an unless - removes nodes after next removes nodes after next - removes nodes after if that returns in both branches removes nodes after if that returns in both branches - removes nodes after break removes nodes after break - doesn't remove nodes after if that returns in one branch doesn't remove nodes after if that returns in one branch - -Pending: - Crystal::Repl::Interpreter integration does XML - Semantic: multi assign strict_multi_assign errors if assigning tuple to more targets - Semantic: def overload restricts on generic type without type arg - Semantic: def overload restricts on generic type with free type arg - Semantic: recursive struct check errors on recursive abstract struct through module (#11384) - Code gen: lib codegens lib var set and get - Semantic: cast casts from union to incompatible union gives error - Semantic: instance var doesn't infer type to be nilable if using self.class in call in assign - Code gen: primitives sums two numbers out of an [] of Number - Code gen: primitives codegens pointer of int - Semantic: pointer allows using pointer with subclass - Semantic: primitives types pointer of int - Code gen: class codegens assignment of generic metaclasses (2) (#10394) - Code gen: class codegens assignment of generic metaclasses (1) (#10394) - Crystal::Doc::MarkdDocRenderer expand_code_links doesn't find wrong kind of methods - Crystal::Doc::MarkdDocRenderer expand_code_links doesn't find wrong kind of sibling methods - -Finished in 42:20 minutes -12558 examples, 0 failures, 0 errors, 16 pending -Randomized with seed: 68465 -��make[2]: Leaving directory '/build/reproducible-path/crystal-1.14.0+dfsg' -make release=1 verbose=1 progress=1 threads=42 CRYSTAL_CONFIG_PATH="lib:/usr/lib/crystal/lib" CRYSTAL_CACHE_DIR="/tmp/crystal" interpreter=1 std_spec -make[2]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg' -[33mUsing /usr/bin/llvm-config-19 [version=19.1.7][0m -./bin/crystal build -D strict_multi_assign -D preview_overload_order --release --progress --threads 42 --link-flags="-Wl,-z,relro" --exclude-warnings spec/std --exclude-warnings spec/compiler --exclude-warnings spec/primitives -o .build/std_spec spec/std_spec.cr -Using compiled compiler at .build/crystal -[1/13] Parse [1/13] Parse [2/13] Semantic (top level) [2/13] Semantic (top level) [3/13] Semantic (new) [3/13] Semantic (new) [4/13] Semantic (type declarations) [4/13] Semantic (type declarations) [5/13] Semantic (abstract def check) [5/13] Semantic (abstract def check) [6/13] Semantic (restrictions augmenter) [6/13] Semantic (restrictions augmenter) [7/13] Semantic (ivars initializers) [7/13] Semantic (ivars initializers) [8/13] Semantic (cvars initializers) [8/13] Semantic (cvars initializers) [9/13] Semantic (main) [9/13] Semantic (main) [10/13] Semantic (cleanup) [10/13] Semantic (cleanup) [11/13] Semantic (recursive struct check) [11/13] Semantic (recursive struct check) [12/13] Codegen (crystal) [12/13] Codegen (crystal) [13/13] Codegen (bc+obj) [13/13] [0/1] Codegen (bc+obj) [13/13] [1/1] Codegen (bc+obj) [13/13] [1/1] Codegen (bc+obj) [14/13] Codegen (linking) [14/13] Codegen (linking) .build/std_spec -v --order=random -0.2.5 -Randomized with seed: 89008 -String - #each_grapheme - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - #grapheme_size #grapheme_size - #graphemes #graphemes -YAML serialization - to_yaml - does for Tuple does for Tuple - does for utc time with nanoseconds does for utc time with nanoseconds - does for Set does for Set - does for Float32 does for Float32 - serializes recursive data structures serializes recursive data structures - does for Float64 (infinity) does for Float64 (infinity) - does for String with stars (#3353) does for String with stars (#3353) - Enum::ValueConverter - flag enum flag enum - normal enum normal enum - does for Float32 (-infinity) does for Float32 (-infinity) - does for BigDecimal does for BigDecimal - Enum - flag enum flag enum - normal enum normal enum - writes to a stream writes to a stream - does for Hash does for Hash - does for String with slash does for String with slash - does for Nil (empty string) does for Nil (empty string) - quotes string if reserved quotes string if reserved - does for Bool does for Bool - does for BigFloat does for BigFloat - does for Float64 does for Float64 - does for BigInt does for BigInt - does for Float64 (nan) does for Float64 (nan) - does for NamedTuple does for NamedTuple - does for time at date does for time at date - does for Int32 does for Int32 - does for Array does for Array - does for String with quote does for String with quote - does for Nil does for Nil - does for utc time does for utc time - does for String does for String - does for Float32 (infinity) does for Float32 (infinity) - does for bytes does for bytes - does for Float32 (nan) does for Float32 (nan) - does a full document does a full document - does for Hash with symbol keys does for Hash with symbol keys - does for Path does for Path - does for Float64 (-infinity) does for Float64 (-infinity) - does for String with unicode characters (#8131) does for String with unicode characters (#8131) - from_yaml - raises if UInt64.from_yaml overflows raises if UInt64.from_yaml overflows - does for named tuple with nilable fields and null (#8089) does for named tuple with nilable fields and null (#8089) - does UInt128.from_yaml does UInt128.from_yaml - does for named tuple with spaces in key and quote char (#10918) does for named tuple with spaces in key and quote char (#10918) - does for tuple with file-private type does for tuple with file-private type - does Path.from_yaml does Path.from_yaml - does for empty tuple does for empty tuple - does for named tuple with nilable fields (#8089) does for named tuple with nilable fields (#8089) - does Time::Format#from_yaml does Time::Format#from_yaml - does UInt32.from_yaml does UInt32.from_yaml - raises if UInt32.from_yaml overflows raises if UInt32.from_yaml overflows - does for named tuple with spaces in key (#10918) does for named tuple with spaces in key (#10918) - does Int32.from_yaml does Int32.from_yaml - does Nil#from_yaml does Nil#from_yaml - does for empty named tuple does for empty named tuple - does Int64.from_yaml does Int64.from_yaml - does Hash#from_yaml with merge does Hash#from_yaml with merge - does UInt16.from_yaml does UInt16.from_yaml - does Array#from_yaml does Array#from_yaml - can parse string that looks like a number can parse string that looks like a number - raises if UInt16.from_yaml overflows raises if UInt16.from_yaml overflows - does Float32#from_yaml does Float32#from_yaml - parse exceptions - has correct location when raises in NamedTuple#from_yaml has correct location when raises in NamedTuple#from_yaml - has correct location when raises in Int32#from_yaml has correct location when raises in Int32#from_yaml - has correct location when raises in Union#from_yaml has correct location when raises in Union#from_yaml - has correct location when raises in Nil#from_yaml has correct location when raises in Nil#from_yaml - does for named tuple with file-private type does for named tuple with file-private type - does Int.from_yaml with prefixes does Int.from_yaml with prefixes - does Set#from_yaml does Set#from_yaml - does Array#from_yaml with block does Array#from_yaml with block - raises if Int8.from_yaml overflows raises if Int8.from_yaml overflows - does for BigFloat does for BigFloat - raises if Int16.from_yaml overflows raises if Int16.from_yaml overflows - does Bool#from_yaml does Bool#from_yaml - does Array#from_yaml from IO does Array#from_yaml from IO - does String#from_yaml does String#from_yaml - does for named tuple does for named tuple - does Int8.from_yaml does Int8.from_yaml - raises if Int128.from_yaml overflows raises if Int128.from_yaml overflows - does for BigInt does for BigInt - Enum::ValueConverter.from_yaml - flag enum flag enum - normal enum normal enum - does UInt64.from_yaml does UInt64.from_yaml - deserializes union with nil, string and int (#7936) deserializes union with nil, string and int (#7936) - deserializes time deserializes time - deserializes bytes deserializes bytes - does Hash#from_yaml does Hash#from_yaml - does for BigDecimal does for BigDecimal - raises if UInt8.from_yaml overflows raises if UInt8.from_yaml overflows - raises if Int32.from_yaml overflows raises if Int32.from_yaml overflows - does Int.from_yaml with underscores does Int.from_yaml with underscores - does Float64#from_yaml does Float64#from_yaml - Enum - flag enum flag enum - normal enum normal enum - does Int128.from_yaml does Int128.from_yaml - does for tuple does for tuple - does Int16.from_yaml does Int16.from_yaml - does Hash#from_yaml with merge (recursive) does Hash#from_yaml with merge (recursive) - does String#from_yaml (empty string) does String#from_yaml (empty string) - does UInt8.from_yaml does UInt8.from_yaml - raises if Int64.from_yaml overflows raises if Int64.from_yaml overflows - raises if UInt128.from_yaml overflows raises if UInt128.from_yaml overflows -Socket::Address - .parse - accepts URI accepts URI - parses UNIX parses UNIX - parses UDP parses UDP - fails with unknown scheme fails with unknown scheme - parses TCP parses TCP -Array - rejects! rejects! - does map_with_index does map_with_index - "#each_index" yielding "#each_index" yielding - does compact_map with false does compact_map with false - []? - gets with index gets with index - gets with range without end gets with range without end - gets with start and count gets with start and count - gets with range gets with range - gets with range without beginning gets with range without beginning - does clear does clear - uniq - uniqs without block uniqs without block - uniqs with block uniqs with block - uniqs with true uniqs with true - uniqs large array uniqs large array - zip - when a block is provided - works with iterator works with iterator - works with iterable works with iterable - yields pairs of self's elements and passed array yields pairs of self's elements and passed array - when no block is provided - and the arrays have different typed elements - returns an array of paired elements (tuples) returns an array of paired elements (tuples) - zips three things zips three things - works with iterable works with iterable - works with iterator works with iterator - zips union type (#8608) zips union type (#8608) - does each_index does each_index - size - has size 2 has size 2 - has size 0 has size 0 - first? - gets first? when non empty gets first? when non empty - gives nil when empty gives nil when empty - "#each" iterator "#each" iterator - uniq! - uniqs with block uniqs with block - uniqs large array uniqs large array - uniqs with true uniqs with true - uniqs without block uniqs without block - does clone with recursive array does clone with recursive array - "#each_index" iterator "#each_index" iterator - "#cycle" iterator "#cycle" iterator - sort - #sort! - stable sort with a block stable sort with a block - stable sort without a block stable sort without a block - without block without block - with a block with a block - #sort - without block without block - stable sort without a block stable sort without a block - stable sort with a block stable sort with a block - with a block with a block - #unstable_sort! - without block without block - with a block with a block - #unstable_sort - without block without block - with a block with a block - #unstable_sort_by - sorts sorts - unpacks tuple unpacks tuple - #unstable_sort_by! - calls given block exactly once for each element calls given block exactly once for each element - sorts sorts - #sort_by - sorts sorts - stable sort stable sort - unpacks tuple unpacks tuple - #sort_by! - stable sort stable sort - sorts sorts - calls given block exactly once for each element calls given block exactly once for each element - transpose - transposes array of tuples transposes array of tuples - transposes empty array transposes empty array - transposes union of arrays transposes union of arrays - raises IndexError error when size of element is invalid raises IndexError error when size of element is invalid - transposes elements transposes elements - "#cycle" yielding "#cycle" yielding - #fill - replaces values in a subrange replaces values in a subrange - does product without block does product without block - last - raises when empty raises when empty - gets last when non empty gets last when non empty - returns a sub array with given number of elements returns a sub array with given number of elements - | - large arrays large arrays - small arrays small arrays - push - pushes multiple elements to an empty array pushes multiple elements to an empty array - has the << alias has the << alias - pushes one element pushes one element - pushes multiple elements pushes multiple elements - values_at - works with mixed types works with mixed types - raises when passed an invalid index raises when passed an invalid index - returns the given indexes returns the given indexes - "#reverse_each" iterator "#reverse_each" iterator - does * does * - == - compares elements compares elements - compares empty compares empty - compares other compares other - rotate - assert assert - assert assert - assert assert - assert assert - rotate! rotate! - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - rotate rotate - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - insert_all - inserts indexable inserts indexable - raises with negative index greater than size raises with negative index greater than size - inserts when other is empty inserts when other is empty - raises with index greater than size raises with index greater than size - inserts with index of #size inserts with index of #size - inserts with index 0 inserts with index 0 - inserts with positive index inserts with positive index - inserts with negative index inserts with negative index - inserts with negative index (2) inserts with negative index (2) - inserts when empty inserts when empty - does dup does dup - does reverse! with an odd number of elements does reverse! with an odd number of elements - pop - pops many elements pops many elements - raises when empty raises when empty - pops negative count raises pops negative count raises - pops more elements that what is available pops more elements that what is available - pops when non empty pops when non empty - flattens flattens - insert - inserts out of range inserts out of range - inserts with positive index inserts with positive index - inserts with negative index (2) inserts with negative index (2) - inserts with negative index inserts with negative index - does + does + - does map does map - does compact! does compact! - does map_with_index! does map_with_index! - first - returns a sub array with given number of elements returns a sub array with given number of elements - raises when empty raises when empty - gets first when non empty gets first when non empty - []= - concats a new array with []=(...) concats a new array with []=(...) - reuses the buffer if possible reuses the buffer if possible - sets on positive index sets on positive index - replaces a subrange with a single value replaces a subrange with a single value - replaces entire range with an array for empty array (#8341) replaces entire range with an array for empty array (#8341) - sets on negative index sets on negative index - optimizes when index is 0 optimizes when index is 0 - pushes a new value with []=(...) pushes a new value with []=(...) - replaces a subrange with an array replaces a subrange with an array - replaces entire range with a value for empty array (#8341) replaces entire range with a value for empty array (#8341) - resizes the buffer if capacity is not enough resizes the buffer if capacity is not enough - does hash does hash - does product with block does product with block - does map! does map! - index - performs without a block performs without a block - raises if out of bounds raises if out of bounds - performs with a block performs with a block - performs without a block and offset performs without a block and offset - performs with a block and offset performs with a block and offset - does map_with_index, with offset does map_with_index, with offset - "#each" yielding "#each" yielding - find the element by using binary search find the element by using binary search - "#cycle(limit)" yielding "#cycle(limit)" yielding - concat - concats a union of arrays concats a union of arrays - concats enumerable to empty array (#2047) concats enumerable to empty array (#2047) - concats enumerable concats enumerable - concats small arrays concats small arrays - concats indexable concats indexable - concats large arrays concats large arrays - does each index while modifying array does each index while modifying array - does + with different types (#568) does + with different types (#568) - does reverse! with an even number of elements does reverse! with an even number of elements - new - raises on negative count raises on negative count - raises on negative capacity raises on negative capacity - creates with default value in block creates with default value in block - creates with default value creates with default value - Array.each_product - 2 arrays 2 arrays - with splat with splat - one empty array one empty array - 2 arrays different types 2 arrays different types - more arrays more arrays - single array single array - more arrays, reuse = true more arrays, reuse = true - does clone does clone - doesn't overflow buffer with Array.new(size, value) (#1209) doesn't overflow buffer with Array.new(size, value) (#1209) - find the index by using binary search find the index by using binary search - rejects! with pattern rejects! with pattern - zip? - when no block is provided - and the arrays have different typed elements - and size of an arg is less than receiver - zips three things zips three things - returns an array of paired elements (tuples with nil) returns an array of paired elements (tuples with nil) - works with iterable works with iterable - zips union type (#8608) zips union type (#8608) - works with iterator works with iterator - when a block is provided - and size of an arg is less than receiver - works with iterator works with iterator - works with iterable works with iterable - yields pairs of self's elements and passed array (with nil) yields pairs of self's elements and passed array (with nil) - #replace - clears unused elements if new size is smaller clears unused elements if new size is smaller - resizes the buffer if capacity is not enough resizes the buffer if capacity is not enough - reuses the buffer if possible reuses the buffer if possible - replaces all elements replaces all elements - does compact_map does compact_map - to_s - does to_s does to_s - does with recursive does with recursive - "#cycle(limit)" iterator "#cycle(limit)" iterator - unshift - repeated unshift/clear does not exhaust memory repeated unshift/clear does not exhaust memory - repeated unshift/shift does not exhaust memory repeated unshift/shift does not exhaust memory - unshifts one element unshifts one element - unshifts one elements three times unshifts one elements three times - unshifts one element multiple times unshifts one element multiple times - unshifts after shift unshifts after shift - unshifts multiple elements unshifts multiple elements - unshifts multiple elements to an empty array unshifts multiple elements to an empty array - unshift of large array does not corrupt elements unshift of large array does not corrupt elements - unshifts many after many shifts unshifts many after many shifts - repeated unshift/pop does not exhaust memory (#10748) repeated unshift/pop does not exhaust memory (#10748) - does <=> does <=> - rindex - performs without a block and an offset performs without a block and an offset - performs with a block and offset performs with a block and offset - performs with a block performs with a block - performs without a block performs without a block - does + with empty tuple converted to array (#909) does + with empty tuple converted to array (#909) - "#reverse_each" yielding "#reverse_each" yielding - repeated_permutations - yields with reuse = true yields with reuse = true - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - yielding dup of arrays yielding dup of arrays - assert assert - assert assert - accepts a block accepts a block - yields with reuse = array yields with reuse = array - shuffle - shuffle with random shuffle with random - shuffle! shuffle! - shuffle! with random shuffle! with random - shuffle shuffle - swap - swaps with negative indices swaps with negative indices - swaps but raises out of bounds on left swaps but raises out of bounds on left - swaps swaps - swaps but raises out of bounds on right swaps but raises out of bounds on right - selects! selects! - selects! with pattern selects! with pattern - shift - shifts all after pop shifts all after pop - shifts more than what is available shifts more than what is available - shifts when non empty shifts when non empty - shifts all shifts all - shifts and then concats Enumerable shifts and then concats Enumerable - pops after shift pops after shift - shifts many elements shifts many elements - shifts and then concats Array shifts and then concats Array - shifts negative count raises shifts negative count raises - shifts one and resizes shifts one and resizes - shifts almost all and then avoid resize shifts almost all and then avoid resize - raises when empty raises when empty - shifts all with shift(n) shifts all with shift(n) - & - small arrays small arrays - big arrays big arrays - inspect - assert assert - does update does update - builds from buffer builds from buffer - does map_with_index!, with offset does map_with_index!, with offset - does equals? with custom block does equals? with custom block - Array.product - with splat with splat - with array with array - empty - is not empty is not empty - is empty is empty - does each while modifying array does each while modifying array - #truncate - truncates with index < 0 and count truncates with index < 0 and count - truncates with index == size and count truncates with index == size and count - truncates with range truncates with range - raises on out of bound index raises on out of bound index - truncates with index and count truncates with index and count - raises on negative count raises on negative count - truncates with index and count, not enough elements truncates with index and count, not enough elements - truncates with index and count == 0 truncates with index and count == 0 - does compact does compact - delete_at - deletes negative index with range, out of bounds deletes negative index with range, out of bounds - deletes negative index deletes negative index - deletes negative index with range deletes negative index with range - deletes with index and count deletes with index and count - deletes use range deletes use range - returns empty if at end returns empty if at end - deletes positive index deletes positive index - deletes at beginning is same as shift deletes at beginning is same as shift - deletes out of bounds deletes out of bounds - [] - gets on inclusive range with negative indices gets on inclusive range with negative indices - raises on negative count on empty Array raises on negative count on empty Array - raises on index out of bounds with range without end raises on index out of bounds with range without end - gets with negative start gets with negative start - gets on positive index gets on positive index - gets 0, 0 on empty array gets 0, 0 on empty array - raises on index out of bounds with range raises on index out of bounds with range - returns empty if at end returns empty if at end - raises on index out of bounds raises on index out of bounds - gets 0 ... 0 on empty array gets 0 ... 0 on empty array - raises on too negative left bound raises on too negative left bound - gets on exclusive range gets on exclusive range - gets on inclusive range gets on inclusive range - gets on range with start higher than end gets on range with start higher than end - doesn't exceed limits doesn't exceed limits - gets with start and count gets with start and count - gets on negative index gets on negative index - gets on range without begin gets on range without begin - gets on range with start higher than negative end gets on range with start higher than negative end - gets with start and count exceeding size gets with start and count exceeding size - gets on range without end gets on range without end - raises on index out of bounds with start and count raises on index out of bounds with start and count - raises on negative count raises on negative count - gets on exclusive range with negative indices gets on exclusive range with negative indices - raises on negative count raises on negative count - - - does with larger array coming second does with larger array coming second - with different types - small array small array - big array big array - does it does it - does with even larger arrays does with even larger arrays - #skip #skip - does reverse with an odd number of elements does reverse with an odd number of elements - does reverse with an even number of elements does reverse with an even number of elements - delete - delete not found delete not found - deletes many deletes many - capacity re-sizing - initializes an array capacity to INITIAL_CAPACITY initializes an array capacity to INITIAL_CAPACITY - doubles capacity for arrays smaller than CAPACITY_THRESHOLD doubles capacity for arrays smaller than CAPACITY_THRESHOLD - uses slow growth heuristic for arrays larger than CAPACITY_THRESHOLD uses slow growth heuristic for arrays larger than CAPACITY_THRESHOLD -Log::SyncDispatcher - dispatches entry dispatches entry -HTTP::Server::Response - changes status and others after headers sent changes status and others after headers sent - closes when it fails to write closes when it fails to write - does not automatically add the `content-length` header if the response is a 204 does not automatically add the `content-length` header if the response is a 204 - closes gracefully with replaced output that syncs close (#11389) closes gracefully with replaced output that syncs close (#11389) - sets status code sets status code - prints with content length prints with content length - prints with content length (method) prints with content length (method) - flushes flushes - does not automatically add the `content-length` header if the response is informational does not automatically add the `content-length` header if the response is informational - writes cookie headers writes cookie headers - prints less then buffer's size prints less then buffer's size - prints less then buffer's size to output prints less then buffer's size to output - prints more then buffer's size prints more then buffer's size - resets and clears headers and cookies resets and clears headers and cookies - sets content type after headers sent sets content type after headers sent - wraps output wraps output - changes status and others changes status and others - sets content type sets content type - #redirect - String location String location - encodes special characters encodes special characters - with header with header - fails if headers already sent fails if headers already sent - doesn't encode URIs twice doesn't encode URIs twice - permanent redirect permanent redirect - URI location URI location - fails if closed fails if closed - retrieves status code retrieves status code - doesn't override content-length when there's no body doesn't override content-length when there's no body - adds header adds header - changes status message changes status message - allows specifying the content-length header explicitly allows specifying the content-length header explicitly - does not automatically add the `content-length` header if the response is a 304 does not automatically add the `content-length` header if the response is a 304 - #respond_with_status - raises when response is closed raises when response is closed - sends custom code and message sends custom code and message - sends HTTP::Status sends HTTP::Status - raises when headers written raises when headers written - uses default values uses default values - sends HTTP::Status and custom message sends HTTP::Status and custom message - writes and flushes with HTTP 1.0 writes and flushes with HTTP 1.0 - closes closes -Float64 boundaries - boundaries min float64 boundaries min float64 - boundaries 1.0 boundaries 1.0 - boundaries min normal f64 boundaries min normal f64 - boundaries max denormal f64 boundaries max denormal f64 - boundaries max f64 boundaries max f64 - boundaries 1.5 boundaries 1.5 -String - .char_bytesize_at .char_bytesize_at -__udivti3 - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests -HTTP::LogHandler - logs to custom logger logs to custom logger - log failed request log failed request - logs logs -Math - Bessel functions - bessely0 bessely0 - besselj0 besselj0 - besselj1 besselj1 - bessely bessely - bessely1 bessely1 - besselj besselj - Inverse hyperbolic functions - asinh asinh - atanh atanh - acosh acosh - fma fma - Exponents - frexp frexp - exp exp - logb logb - scalbn scalbn - exp2 exp2 - expm1 expm1 - scalbln scalbln - ldexp ldexp - ilogb ilogb - Roots - sqrt sqrt - cbrt cbrt - isqrt isqrt - Gauss error functions - erfc erfc - erf erf - Hyperbolic functions - sinh sinh - tanh tanh - cosh cosh - Functions for computing quotient and remainder Functions for computing quotient and remainder - Logarithms - log10 log10 - log1p log1p - log2 log2 - log log - .pw2ceil - Int64 Int64 - UInt32 UInt32 - Int16 Int16 - UInt16 UInt16 - Int32 Int32 - UInt8 UInt8 - UInt128 UInt128 - Int128 Int128 - UInt64 UInt64 - Int8 Int8 - Inverse trigonometric functions - asin asin - acos acos - atan2 atan2 - atan atan - Mathematical constants - LOG10 LOG10 - E E - LOG2 LOG2 - Trigonometric functions - hypot hypot - cos cos - sin sin - tan tan - Order-related functions - assert assert - assert assert - Functions manipulating signs - copysign copysign - Gamma functions - lgamma lgamma - gamma gamma -Process.find_executable - fails to find 'not_exe' fails to find 'not_exe' - fails to find 'sub' fails to find 'sub' - finds './inbase' as 'inbase' finds './inbase' as 'inbase' - fails to find '.' fails to find '.' - finds 'sub/insub' as 'sub/insub' finds 'sub/insub' as 'sub/insub' - fails to find './inpath' fails to find './inpath' - fails to find 'inbase/' fails to find 'inbase/' - fails to find 'sub/not_exe' fails to find 'sub/not_exe' - finds '../base/inbase' as 'inbase' finds '../base/inbase' as 'inbase' - fails to find './not_exe' fails to find './not_exe' - finds 'inpath' as '../path/inpath' finds 'inpath' as '../path/inpath' - fails to find '/tmp/cr-spec-35d4c215/find_executable/base/sub' fails to find '/tmp/cr-spec-35d4c215/find_executable/base/sub' - fails to find './sub' fails to find './sub' - fails to find 'sub/insub/' fails to find 'sub/insub/' - fails to find '' fails to find '' - finds '/tmp/cr-spec-35d4c215/find_executable/base/inbase' as 'inbase' finds '/tmp/cr-spec-35d4c215/find_executable/base/inbase' as 'inbase' - fails to find 'inbase' fails to find 'inbase' - fails to find '/tmp/cr-spec-35d4c215/find_executable/base/inbase/' fails to find '/tmp/cr-spec-35d4c215/find_executable/base/inbase/' -__fixsfti - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests -YAML::Schema::Core - parses "true" parses "true" - parses "No" parses "No" - parses "-.INF" parses "-.INF" - parses "2002-1-2T10:11:12+03x" parses "2002-1-2T10:11:12+03x" - parses ".inf" parses ".inf" - parses "-123" parses "-123" - raises on parse "!!pairs 1" raises on parse "!!pairs 1" - parses "0b10110" parses "0b10110" - parses "2002-1-2T10:11:12Zx" parses "2002-1-2T10:11:12Zx" - parses "2002-1-2" parses "2002-1-2" - raises on parse "!!null 1" raises on parse "!!null 1" - parses "!!int 0o123" parses "!!int 0o123" - parses "0o123" parses "0o123" - parses "+.5" parses "+.5" - parses "-.5" parses "-.5" - parses "NULL" parses "NULL" - parses "+.INF" parses "+.INF" - parses "-2E+05" parses "-2E+05" - parses "!!str 1" parses "!!str 1" - parses "2002-12-14" parses "2002-12-14" - parses "!!int 0755" parses "!!int 0755" - raises on parse "!!seq 1" raises on parse "!!seq 1" - parses nan parses nan - parses "no" parses "no" - raises on parse "!!map 1" raises on parse "!!map 1" - parses "!!map {1: 2}" parses "!!map {1: 2}" - parses "2002-1-2 1:11:12" parses "2002-1-2 1:11:12" - parses "null" parses "null" - parses "False" parses "False" - parses "2002-1-2T10:11:12.345" parses "2002-1-2T10:11:12.345" - parses "+123" parses "+123" - parses ".5" parses ".5" - parses "!!set { 1, 2, 3 }" parses "!!set { 1, 2, 3 }" - raises on parse "!!timestamp foo" raises on parse "!!timestamp foo" - parses "0755" parses "0755" - parses "-0x123abc" parses "-0x123abc" - parses "off" parses "off" - parses "-0.0" parses "-0.0" - parses "2002-1-2T10:11:12.3" parses "2002-1-2T10:11:12.3" - parses "Null" parses "Null" - parses "TRUE" parses "TRUE" - parses "2002-1-2T10:11:12-03:31" parses "2002-1-2T10:11:12-03:31" - parses "!!float '1_234.2'" parses "!!float '1_234.2'" - parses "!!int 0b10" parses "!!int 0b10" - parses "!!float 2.3e4" parses "!!float 2.3e4" - parses "\"1\"" parses "\"1\"" - parses "0x123abc" parses "0x123abc" - parses "2002-1-2T10:11:12.34" parses "2002-1-2T10:11:12.34" - parses "Y" parses "Y" - parses !!float .nan parses !!float .nan - parses "0" parses "0" - parses "false" parses "false" - raises on parse "!!binary [1]" raises on parse "!!binary [1]" - parses ".INF" parses ".INF" - raises on parse "!!bool 1" raises on parse "!!bool 1" - parses "!!null ~" parses "!!null ~" - parses "Yes" parses "Yes" - parses "!!bool yes" parses "!!bool yes" - parses "2002-34-45" parses "2002-34-45" - parses "!!int -123" parses "!!int -123" - parses "On" parses "On" - parses "0o0" parses "0o0" - raises on parse "!!int 'hello'" raises on parse "!!int 'hello'" - parses "2002-1-2T10:11:12 -03:00" parses "2002-1-2T10:11:12 -03:00" - parses "NO" parses "NO" - parses "!!int 123" parses "!!int 123" - parses "!!int 0" parses "!!int 0" - parses "0.815" parses "0.815" - parses "00" parses "00" - parses "y" parses "y" - parses "2002-1-2T10:11:12 -03:31" parses "2002-1-2T10:11:12 -03:31" - parses "N" parses "N" - parses "1_234.2" parses "1_234.2" - parses "!!float '0.5'" parses "!!float '0.5'" - parses "2002-1-2T10:11:12x" parses "2002-1-2T10:11:12x" - parses "2002-1-2T10:11:12 +3" parses "2002-1-2T10:11:12 +3" - parses "1.2" parses "1.2" - parses "0b0" parses "0b0" - parses "2002-1-2T10:11:12 +03:00" parses "2002-1-2T10:11:12 +03:00" - parses "OFF" parses "OFF" - parses "!!float -1" parses "!!float -1" - parses "!!omap {1: 2}" parses "!!omap {1: 2}" - parses "123" parses "123" - raises on parse "!!pairs [{1: 2, 3: 4}]" raises on parse "!!pairs [{1: 2, 3: 4}]" - parses "FALSE" parses "FALSE" - raises on parse "!!str [1]" raises on parse "!!str [1]" - raises on parse "!!float 'hello'" raises on parse "!!float 'hello'" - parses "!!binary aGVsbG8=" parses "!!binary aGVsbG8=" - parses "True" parses "True" - parses "+12.3" parses "+12.3" - parses "~" parses "~" - parses "2002-1-2T10:11:12.3456" parses "2002-1-2T10:11:12.3456" - parses "+.inf" parses "+.inf" - parses "2002-1-2 10:11:12" parses "2002-1-2 10:11:12" - parses "-.inf" parses "-.inf" - .parse_null_or .parse_null_or - parses "!!float .inf" parses "!!float .inf" - parses "on" parses "on" - parses "-.Inf" parses "-.Inf" - parses "0x0" parses "0x0" - parses "+.Inf" parses "+.Inf" - parses "2002-1-2T10:11:12 Z" parses "2002-1-2T10:11:12 Z" - raises on parse "!!binary 1" raises on parse "!!binary 1" - parses "n" parses "n" - parses "!!pairs [{1: 2}, {3: 4}]" parses "!!pairs [{1: 2}, {3: 4}]" - parses "Off" parses "Off" - raises on parse "!!set 1" raises on parse "!!set 1" - parses "!!timestamp 2010-01-02" parses "!!timestamp 2010-01-02" - parses "2002-1-2T10:11:12 +0300" parses "2002-1-2T10:11:12 +0300" - parses "2002-1-2T10:11:12Z" parses "2002-1-2T10:11:12Z" - parses "!!int 0xabc" parses "!!int 0xabc" - parses "ON" parses "ON" - parses "2002-1-2T10:11:12" parses "2002-1-2T10:11:12" - parses "!!float 0" parses "!!float 0" - parses "YES" parses "YES" - parses ".Inf" parses ".Inf" - parses "2002-12-14 x" parses "2002-12-14 x" - parses "!!float '1.2'" parses "!!float '1.2'" - parses "yes" parses "yes" - raises on parse "!!omap 1" raises on parse "!!omap 1" - parses "0." parses "0." - parses "!!seq [ 1, 2, 3 ]" parses "!!seq [ 1, 2, 3 ]" -__fixunsdfti - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests -WeakRef(T) - FinalizeState counts released objects FinalizeState counts released objects - should not crash with object in data section during GC should not crash with object in data section during GC - Referenced object should not be released Referenced object should not be released - should get dereferenced object in data section should get dereferenced object in data section - Weak referenced object should be released if no other reference Weak referenced object should be released if no other reference - should get dereferenced object should get dereferenced object -System::User - #id - is the same as the source ID is the same as the source ID - #shell - calls without raising calls without raising - #name - calls without raising calls without raising - #to_s - returns a string representation returns a string representation - #username - is the same as the source name is the same as the source name - .find_by?(*, name) - returns a user by name returns a user by name - returns nil on nonexistent user returns nil on nonexistent user - .find_by?(*, id) - returns nil on nonexistent user id returns nil on nonexistent user id - returns a user by id returns a user by id - #home_directory - calls without raising calls without raising - .find_by(*, id) - returns a user by id returns a user by id - raises on nonexistent user id raises on nonexistent user id - .find_by(*, name) - raises on a nonexistent user raises on a nonexistent user - returns a user by name returns a user by name - #group_id - calls without raising calls without raising -Compress::Deflate::Writer - can be closed without sync can be closed without sync - should be able to write should be able to write - can be closed with sync (2) can be closed with sync (2) - can be closed with sync (1) can be closed with sync (1) - .open - yields itself to block yields itself to block -Number - #humanize - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - using custom prefixes - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - #format - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - does not perform double rounding when decimal places are given does not perform double rounding when decimal places are given - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - extracts integer part correctly (#12997) extracts integer part correctly (#12997) - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert -__mulosi4 - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests -Log::DirectDispatcher - dispatches entry dispatches entry -String - #byte_slice? - gets byte_slice with negative index gets byte_slice with negative index - gets byte_slice with negative count gets byte_slice with negative count - gets byte_slice with large count gets byte_slice with large count - gets byte_slice(Int) with start out of bounds gets byte_slice(Int) with start out of bounds - gets byte_slice with start out of bounds gets byte_slice with start out of bounds - gets byte_slice with negative count at last gets byte_slice with negative count at last - gets byte_slice gets byte_slice - rchop? - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - interpolation - of char and string of char and string - of multiple strings of multiple strings - of a single non-string of a single non-string - of multiple possibly non-strings of multiple possibly non-strings - of string and char of string and char - of a single string of a single string - builds with write_byte builds with write_byte - #match_full! #match_full! - succ - returns the successor by increasing the rightmost alphanumeric (digit => digit, letter => letter with same case) returns the successor by increasing the rightmost alphanumeric (digit => digit, letter => letter with same case) - increases non-alphanumerics (via ascii rules) if there are no alphanumerics increases non-alphanumerics (via ascii rules) if there are no alphanumerics - increases the next best alphanumeric (jumping over non-alphanumerics) if there is a carry increases the next best alphanumeric (jumping over non-alphanumerics) if there is a carry - adds an additional character (just left to the last increased one) if there is a carry and no character left to increase adds an additional character (just left to the last increased one) if there is a carry and no character left to increase - returns an empty string for empty strings returns an empty string for empty strings - interpolates string interpolates string - split - by regex - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - keeps groups keeps groups - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - by whitespace - assert assert - assert assert - assert assert - assert assert - assert assert - by char - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - by string - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - "#each_char with empty string" yielding "#each_char with empty string" yielding - "#each_line" yielding "#each_line" yielding - multiplies with size one multiplies with size one - rpartition - by char - assert assert - assert assert - assert assert - by string - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - by regex - assert assert - assert assert - assert assert - assert assert - assert assert - center - assert assert - assert assert - to io - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - #upcase - assert assert - does not touch invalid code units in an otherwise ascii string does not touch invalid code units in an otherwise ascii string - assert assert - with IO - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - dups dups - gets each_line gets each_line - delete_at - range - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - start, count - assert assert - assert assert - assert assert - raises on negative count raises on negative count - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - raises on negative count raises on negative count - assert assert - assert assert - assert assert - assert assert - char - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - to_i - assert assert - assert assert - to_u8 - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - to_i16 - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - to_i8 - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - to_u128 - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - to_i128 - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - to_u64 - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - to_u16 - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - to_i32 - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - to_u32 - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - to_i64 - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - "#each_byte" iterator "#each_byte" iterator - char_index_to_byte_index - with ascii with ascii - with utf-8 with utf-8 - #byte_slice - gets byte_slice with large count gets byte_slice with large count - gets byte_slice with start out of bounds gets byte_slice with start out of bounds - gets byte_slice with negative index gets byte_slice with negative index - gets byte_slice with negative count at last gets byte_slice with negative count at last - gets byte_slice with negative count gets byte_slice with negative count - gets byte_slice gets byte_slice - gets byte_slice(Int) with start out of bounds gets byte_slice(Int) with start out of bounds - #index - by regex - assert assert - with offset - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - by char - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - with offset - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - by string - assert assert - assert assert - assert assert - assert assert - assert assert - with offset - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - chomp - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - escapes with unicode escapes with unicode - compares strings: same object compares strings: same object - byte_index - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - gets byte index of string gets byte index of string - assert assert - "#each_codepoint" yielding "#each_codepoint" yielding - squeeze - assert assert - assert assert - assert assert - assert assert - assert assert - ljust - to io - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - #matches_full? #matches_full? - =~ - returns nil with regex and regex returns nil with regex and regex - matches with group matches with group - returns nil with string returns nil with string - #compare - compares case-sensitive compares case-sensitive - compares case-insensitive, multiple chars after case conversion (#4513) compares case-insensitive, multiple chars after case conversion (#4513) - treats invalid code units as replacement char in an otherwise ascii string treats invalid code units as replacement char in an otherwise ascii string - compares case-insensitive compares case-insensitive - lstrip - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - does not touch invalid code units in an otherwise ascii string does not touch invalid code units in an otherwise ascii string - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - invalid UTF-8 byte sequence - gets chars (2) gets chars (2) - gets size (2) gets size (2) - valid_encoding? valid_encoding? - gets size gets size - gets chars gets chars - scrubs scrubs - #index! - by regex - assert assert - assert assert - assert assert - assert assert - with offset - assert assert - assert assert - assert assert - assert assert - by string - assert assert - assert assert - assert assert - with offset - assert assert - assert assert - assert assert - assert assert - assert assert - by char - assert assert - assert assert - with offset - assert assert - assert assert - assert assert - assert assert - raises if String.build capacity too big raises if String.build capacity too big - #camelcase - assert assert - assert assert - assert assert - assert assert - handles multi-character mappings correctly (#13533) handles multi-character mappings correctly (#13533) - assert assert - assert assert - assert assert - assert assert - empty? - assert assert - assert assert - lchop? - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - #rindex - by regex - assert assert - assert assert - assert assert - with offset - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - which matches empty string - assert assert - assert assert - assert assert - by char - assert assert - assert assert - assert assert - with offset - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - by string - assert assert - assert assert - assert assert - with offset - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - gets lines gets lines - gets lines with chomp = false gets lines with chomp = false - "#each_byte" yielding "#each_byte" yielding - strip - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - has match has match - delete - assert assert - deletes one char deletes one char - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - hexbytes hexbytes - compare - compares with == when different strings same contents compares with == when different strings same contents - compares with == when different contents compares with == when different contents - sorts strings sorts strings - compares with == when same string compares with == when same string - starts_with? - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - treats first char as replacement char if invalid in an otherwise ascii string treats first char as replacement char if invalid in an otherwise ascii string - assert assert - assert assert - does byte_at? does byte_at? - byte_index_to_char_index - with utf-8 with utf-8 - with ascii with ascii - ends_with? - assert assert - assert assert - assert assert - assert assert - treats last char as replacement char if invalid in an otherwise ascii string treats last char as replacement char if invalid in an otherwise ascii string - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - does to_f64 does to_f64 - partition - by char - assert assert - assert assert - assert assert - assert assert - by regex - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - by string - assert assert - assert assert - assert assert - assert assert - assert assert - inserts inserts - escapes chars escapes chars - hexbytes? hexbytes? - "#each_line" iterator "#each_line" iterator - #scan - does with utf-8 does with utf-8 - options parameter options parameter - works when match is empty, multibyte char works when match is empty, multibyte char - works when match is empty works when match is empty - works with strings with block works with strings with block - does with number and string does with number and string - does without block does without block - works with strings works with strings - does with block does with block - clones clones - encode - raises if wrong encoding raises if wrong encoding - doesn't raise on invalid byte sequence doesn't raise on invalid byte sequence - encodes encodes - flushes the shift state (#11992) flushes the shift state (#11992) - raises if incomplete byte sequence raises if incomplete byte sequence - doesn't raise if incomplete byte sequence doesn't raise if incomplete byte sequence - raises if wrong encoding with skip raises if wrong encoding with skip - decodes with skip decodes with skip - decodes with shift state decodes with shift state - decodes decodes - raises if illegal byte sequence raises if illegal byte sequence - matches empty string matches empty string - #dump #dump - #capitalize - assert assert - assert assert - handles multi-character mappings correctly (#13533) handles multi-character mappings correctly (#13533) - assert assert - does not touch invalid code units in an otherwise ascii string does not touch invalid code units in an otherwise ascii string - assert assert - blank? - assert assert - assert assert - assert assert - "#each_codepoint" iterator "#each_codepoint" iterator - #titleize - handles multi-character mappings correctly (#13533) handles multi-character mappings correctly (#13533) - assert assert - with IO - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - does not touch invalid code units in an otherwise ascii string does not touch invalid code units in an otherwise ascii string - assert assert - assert assert - assert assert - assert assert - assert assert - does char_at does char_at - count - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert + with absolute path + reads file (doesn't exist) reads file (doesn't exist) +Semantic: warnings + abstract def positional parameter name mismatch + respects external names of positional parameters (1) respects external names of positional parameters (1) + detects mismatch with single parameter detects mismatch with single parameter + detects multiple mismatches detects multiple mismatches + respects external names of positional parameters (2) respects external names of positional parameters (2) + continues warning if implementation with matching parameters is not found (#12150) + single splat single splat + double splat double splat + not a full implementation not a full implementation + doesn't warn if current type is a module (#12266) doesn't warn if current type is a module (#12266) + doesn't compare positional parameters to single splat doesn't compare positional parameters to single splat + doesn't compare single splats doesn't compare single splats + detects mismatch within many parameters detects mismatch within many parameters + doesn't warn if external parameter name matches (1) doesn't warn if external parameter name matches (1) + informs warnings once per matching overload (1) informs warnings once per matching overload (1) + doesn't warn if current type is abstract (#12266) doesn't warn if current type is abstract (#12266) + stops warning after implementation with matching parameters is found (#12150) + different single splats different single splats + contravariant restrictions contravariant restrictions + exact match exact match + reordered named parameters reordered named parameters + informs warnings once per matching overload (2) informs warnings once per matching overload (2) + doesn't warn if external parameter name matches (2) doesn't warn if external parameter name matches (2) + deprecated macros + detects deprecated generic class macros detects deprecated generic class macros + detects deprecated macros with named arguments detects deprecated macros with named arguments + detects deprecated module macros detects deprecated module macros + deprecation reason is optional deprecation reason is optional + informs warnings once per call site location (a) informs warnings once per call site location (a) + informs warnings once per call site location (b) informs warnings once per call site location (b) + errors if too many arguments errors if too many arguments + ignore deprecation excluded locations ignore deprecation excluded locations + detects deprecated class macros detects deprecated class macros + errors if invalid argument type errors if invalid argument type + detects top-level deprecated macros detects top-level deprecated macros + errors if invalid named argument errors if invalid named argument + deprecated constants + detects deprecated constants in type declarations (1) detects deprecated constants in type declarations (1) + detects deprecated constants in type declarations (3) detects deprecated constants in type declarations (3) + detects deprecated constants inside macros detects deprecated constants inside macros + detects deprecated constants detects deprecated constants + detects deprecated constants in type declarations (2) detects deprecated constants in type declarations (2) + exposes syntax warnings exposes syntax warnings + exposes syntax warnings after macro interpolation exposes syntax warnings after macro interpolation + deprecated methods + ignore deprecation excluded locations ignore deprecation excluded locations + detects deprecated class methods detects deprecated class methods + informs warnings once per call site location (a) informs warnings once per call site location (a) + detects deprecated initialize with named arguments detects deprecated initialize with named arguments + informs warnings once per yield informs warnings once per yield + errors if too many arguments errors if too many arguments + detects deprecated instance methods detects deprecated instance methods + deprecation reason is optional deprecation reason is optional + detects deprecated initialize detects deprecated initialize + detects deprecated generic instance methods detects deprecated generic instance methods + errors if invalid named arguments errors if invalid named arguments + detects deprecated module methods detects deprecated module methods + ignores nested calls to deprecated methods ignores nested calls to deprecated methods + detects deprecated methods with named arguments detects deprecated methods with named arguments + errors if invalid argument type errors if invalid argument type + detects deprecated generic class methods detects deprecated generic class methods + informs warnings once per call site location (b) informs warnings once per call site location (b) + informs warnings once per target type informs warnings once per target type + detects top-level deprecated methods detects top-level deprecated methods + deprecated annotations + detects deprecated annotations detects deprecated annotations + detects deprecated namespaced annotations detects deprecated namespaced annotations +Crystal::Repl::Interpreter + multidispatch + does multidispatch on virtual metaclass type (1) does multidispatch on virtual metaclass type (1) + doesn't compile block if it's not used (no yield) doesn't compile block if it's not used (no yield) + does multidispatch with captured block (#12217) does multidispatch with captured block (#12217) + downcasts self from union to struct (pass pointer to self) downcasts self from union to struct (pass pointer to self) + does multidispatch on virtual metaclass type (2) does multidispatch on virtual metaclass type (2) + passes self as pointer when doing multidispatch passes self as pointer when doing multidispatch + does dispatch on one argument with struct receiver, and modifies it does dispatch on one argument with struct receiver, and modifies it + does dispatch on one argument with block does dispatch on one argument with block + passes self as pointer when doing multidispatch (2) passes self as pointer when doing multidispatch (2) + initialize multidispatch initialize multidispatch + does dispatch on receiver type and argument type does dispatch on receiver type and argument type + does multidispatch with mandatory named arguments does multidispatch with mandatory named arguments + does dispatch on one argument inside module with explicit receiver does dispatch on one argument inside module with explicit receiver + casts multidispatch argument to the def's arg type casts multidispatch argument to the def's arg type + does dispatch on virtual type does dispatch on virtual type + does dispatch on receiver type does dispatch on receiver type + does dispatch on one argument does dispatch on one argument + does dispatch on receiver type and argument type, multiple times does dispatch on receiver type and argument type, multiple times + does dispatch on one argument inside module with implicit self does dispatch on one argument inside module with implicit self +Normalize: range literal + normalizes not exclusive normalizes not exclusive + normalizes exclusive normalizes exclusive +Semantic: pointer + detects recursive pointerof expansion (2) (#1654) detects recursive pointerof expansion (2) (#1654) + create pointer by address create pointer by address + types realloc types realloc + doesn't crash if pointerof expansion type has generic splat parameter (#11808) doesn't crash if pointerof expansion type has generic splat parameter (#11808) + types pointer of constant types pointer of constant + errors with non-matching generic value with value=, union of generic types (#10544) errors with non-matching generic value with value=, union of generic types (#10544) + type pointer casting of object type type pointer casting of object type + can pass any pointer to something expecting void* in lib call can pass any pointer to something expecting void* in lib call + pointer of value error pointer of value error + type pointer casting type pointer casting + allows using pointer with subclass allows using pointer with subclass + types int pointer types int pointer + can assign nil to void pointer can assign nil to void pointer + detects recursive pointerof expansion (#551) (#553) detects recursive pointerof expansion (#551) (#553) + errors with non-matching generic value with value= (#10211) errors with non-matching generic value with value= (#10211) + can't do Pointer.malloc without type var can't do Pointer.malloc without type var + detects recursive pointerof expansion (3) detects recursive pointerof expansion (3) + takes pointerof lib external var takes pointerof lib external var + pointer of class raises error pointer of class raises error + types pointer add types pointer add + errors if doing Pointer.allocate errors if doing Pointer.allocate + can assign pointerof virtual type (#8216) can assign pointerof virtual type (#8216) + types Pointer.malloc types Pointer.malloc + types pointer diff types pointer diff + says undefined variable (#7556) says undefined variable (#7556) + pointer malloc creates new type pointer malloc creates new type + can pass any pointer to something expecting void* in lib call, with to_unsafe can pass any pointer to something expecting void* in lib call, with to_unsafe + detects recursive pointerof expansion (4) detects recursive pointerof expansion (4) + types pointer value on typedef types pointer value on typedef + errors with non-matching generic value with value=, generic type (#10211) errors with non-matching generic value with value=, generic type (#10211) + types pointer value types pointer value + +Pending: + Code gen: class codegens assignment of generic metaclasses (2) (#10394) + Code gen: class codegens assignment of generic metaclasses (1) (#10394) + Code gen: primitives sums two numbers out of an [] of Number + Code gen: primitives codegens pointer of int + Semantic: cast casts from union to incompatible union gives error + Semantic: primitives types pointer of int + Semantic: multi assign strict_multi_assign errors if assigning tuple to more targets + Semantic: instance var doesn't infer type to be nilable if using self.class in call in assign + Crystal::Repl::Interpreter integration does XML + Semantic: recursive struct check errors on recursive abstract struct through module (#11384) + Code gen: lib codegens lib var set and get + Semantic: def overload restricts on generic type without type arg + Semantic: def overload restricts on generic type with free type arg + Crystal::Doc::MarkdDocRenderer expand_code_links doesn't find wrong kind of sibling methods + Crystal::Doc::MarkdDocRenderer expand_code_links doesn't find wrong kind of methods + Semantic: pointer allows using pointer with subclass + +Finished in 44:46 minutes +12558 examples, 0 failures, 0 errors, 16 pending +Randomized with seed: 76473 +��make[2]: Leaving directory '/build/reproducible-path/crystal-1.14.0+dfsg' +make release=1 verbose=1 progress=1 threads=20 CRYSTAL_CONFIG_PATH="lib:/usr/lib/crystal/lib" CRYSTAL_CACHE_DIR="/tmp/crystal" interpreter=1 std_spec +make[2]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg' +[33mUsing /usr/bin/llvm-config-19 [version=19.1.7][0m +./bin/crystal build -D strict_multi_assign -D preview_overload_order --release --progress --threads 20 --link-flags="-Wl,-z,relro" --exclude-warnings spec/std --exclude-warnings spec/compiler --exclude-warnings spec/primitives -o .build/std_spec spec/std_spec.cr +Using compiled compiler at .build/crystal +[1/13] Parse [1/13] Parse [2/13] Semantic (top level) [2/13] Semantic (top level) [3/13] Semantic (new) [3/13] Semantic (new) [4/13] Semantic (type declarations) [4/13] Semantic (type declarations) [5/13] Semantic (abstract def check) [5/13] Semantic (abstract def check) [6/13] Semantic (restrictions augmenter) [6/13] Semantic (restrictions augmenter) [7/13] Semantic (ivars initializers) [7/13] Semantic (ivars initializers) [8/13] Semantic (cvars initializers) [8/13] Semantic (cvars initializers) [9/13] Semantic (main) [9/13] Semantic (main) [10/13] Semantic (cleanup) [10/13] Semantic (cleanup) [11/13] Semantic (recursive struct check) [11/13] Semantic (recursive struct check) [12/13] Codegen (crystal) [12/13] Codegen (crystal) [13/13] Codegen (bc+obj) [13/13] [0/1] Codegen (bc+obj) [13/13] [1/1] Codegen (bc+obj) [13/13] [1/1] Codegen (bc+obj) [14/13] Codegen (linking) [14/13] Codegen (linking) .build/std_spec -v --order=random +0.2.5 +Randomized with seed: 26192 +Number + converts from Int64 to Float64 converts from Int64 to Float64 + converts from Float32 to UInt64 converts from Float32 to UInt64 + converts from Int64 to UInt8 converts from Int64 to UInt8 + converts from Float64 to UInt8 converts from Float64 to UInt8 + converts from Int128 to UInt16 converts from Int128 to UInt16 + converts from Int32 to UInt128 converts from Int32 to UInt128 + converts from UInt32 to Int64 converts from UInt32 to Int64 + converts from Int128 to Int16 converts from Int128 to Int16 + converts from Int16 to Int16 converts from Int16 to Int16 + division between Float64 / Float64 returns Float64 division between Float64 / Float64 returns Float64 + converts from Int8 to UInt8 converts from Int8 to UInt8 + division between Int8 / UInt8 returns Float64 division between Int8 / UInt8 returns Float64 + floor_division UInt8 // Int8 returns UInt8 floor_division UInt8 // Int8 returns UInt8 + converts from Float32 to UInt16 converts from Float32 to UInt16 + floor_division UInt16 // Int16 returns UInt16 floor_division UInt16 // Int16 returns UInt16 + converts from UInt128 to Int16 converts from UInt128 to Int16 + converts from UInt64 to UInt128 converts from UInt64 to UInt128 + #round_away assert assert assert assert assert assert assert assert assert assert - match! - with options - Regex::Match options Regex::Match options - returns matchdata returns matchdata - raises on non-match raises on non-match - assigns captures assigns captures - compares strings: same size, different string compares strings: same size, different string - #dump_unquoted #dump_unquoted - []? - gets with range without end gets with range without end - gets with a string gets with a string - gets with start and count gets with start and count - gets with index gets with index - gets with a char gets with a char - gets with range gets with range - gets with range without beginning gets with range without beginning - returns nil if pointing after last char which is non-ASCII returns nil if pointing after last char which is non-ASCII - "#each_line(chomp: false)" iterator "#each_line(chomp: false)" iterator - "#each_char" yielding "#each_char" yielding - matches with position matches with position - #underscore assert assert assert assert assert assert @@ -16053,167 +14100,617 @@ assert assert assert assert assert assert - handles multi-character mappings correctly handles multi-character mappings correctly assert assert assert assert + floor_division Float64 // UInt16 returns Float64 floor_division Float64 // UInt16 returns Float64 + converts from Int32 to Int32 converts from Int32 to Int32 + converts from Int32 to Int8 converts from Int32 to Int8 + converts from Int64 to UInt16 converts from Int64 to UInt16 + floor_division Int32 // UInt8 returns Int32 floor_division Int32 // UInt8 returns Int32 + converts from Int64 to Float32 converts from Int64 to Float32 + floor_division Int128 // Int32 returns Int128 floor_division Int128 // Int32 returns Int128 + converts from UInt128 to Int64 converts from UInt128 to Int64 + converts from UInt64 to Int128 converts from UInt64 to Int128 + floor_division UInt64 // Float32 returns UInt64 floor_division UInt64 // Float32 returns UInt64 + floor_division Int128 // UInt128 returns Int128 floor_division Int128 // UInt128 returns Int128 + converts from UInt64 to Int16 converts from UInt64 to Int16 + converts from UInt32 to Int32 converts from UInt32 to Int32 + converts from UInt8 to Int32 converts from UInt8 to Int32 + converts from Int16 to UInt64 converts from Int16 to UInt64 + converts from Int64 to Int64 converts from Int64 to Int64 + converts from Int16 to UInt8 converts from Int16 to UInt8 + converts from UInt8 to Int16 converts from UInt8 to Int16 + converts from Float32 to UInt128 converts from Float32 to UInt128 + converts from UInt32 to UInt32 converts from UInt32 to UInt32 + division between Int128 / Int128 returns Float64 division between Int128 / Int128 returns Float64 + converts from UInt8 to Float32 converts from UInt8 to Float32 + converts from Int128 to UInt32 converts from Int128 to UInt32 + converts from Int16 to UInt64 converts from Int16 to UInt64 + division between Int64 / Float32 returns Float32 division between Int64 / Float32 returns Float32 + converts from UInt128 to Float64 converts from UInt128 to Float64 + floor_division Float32 // Float32 returns Float32 floor_division Float32 // Float32 returns Float32 + gives the square of a value gives the square of a value + floor_division UInt32 // Int16 returns UInt32 floor_division UInt32 // Int16 returns UInt32 + unchecked initialize from value to UInt64 unchecked initialize from value to UInt64 + division between UInt128 / UInt64 returns Float64 division between UInt128 / UInt64 returns Float64 + floor_division UInt8 // Float32 returns UInt8 floor_division UInt8 // Float32 returns UInt8 + floor_division Int128 // Float32 returns Int128 floor_division Int128 // Float32 returns Int128 + initialize from value to Int32 initialize from value to Int32 + floor_division Float32 // Int32 returns Float32 floor_division Float32 // Int32 returns Float32 + converts from UInt16 to Int8 converts from UInt16 to Int8 + division between Int64 / Int128 returns Float64 division between Int64 / Int128 returns Float64 + division between Int16 / Int128 returns Float64 division between Int16 / Int128 returns Float64 + converts from UInt128 to UInt32 converts from UInt128 to UInt32 + converts from Int8 to UInt16 converts from Int8 to UInt16 + floor_division UInt128 // UInt8 returns UInt128 floor_division UInt128 // UInt8 returns UInt128 + floor_division Int16 // UInt64 returns Int16 floor_division Int16 // UInt64 returns Int16 + converts from Float64 to Int64 converts from Float64 to Int64 + unchecked initialize from value to Float32 unchecked initialize from value to Float32 + division between Int32 / UInt16 returns Float64 division between Int32 / UInt16 returns Float64 + floor_division UInt64 // UInt128 returns UInt64 floor_division UInt64 // UInt128 returns UInt64 + compare the numbers compare the numbers + converts from UInt64 to Float64 converts from UInt64 to Float64 + converts from UInt64 to UInt32 converts from UInt64 to UInt32 + converts from UInt8 to Float64 converts from UInt8 to Float64 + unchecked initialize from value to Int128 unchecked initialize from value to Int128 + converts from UInt64 to UInt8 converts from UInt64 to UInt8 + division between Int64 / Int16 returns Float64 division between Int64 / Int16 returns Float64 + division between Int128 / UInt16 returns Float64 division between Int128 / UInt16 returns Float64 + division between Float64 / Int16 returns Float64 division between Float64 / Int16 returns Float64 + converts from UInt32 to Int8 converts from UInt32 to Int8 + converts from UInt32 to UInt16 converts from UInt32 to UInt16 + converts from UInt16 to Int128 converts from UInt16 to Int128 + converts from UInt64 to Float32 converts from UInt64 to Float32 + division between UInt32 / UInt32 returns Float64 division between UInt32 / UInt32 returns Float64 + floor_division UInt8 // UInt64 returns UInt8 floor_division UInt8 // UInt64 returns UInt8 + floor_division UInt128 // Int8 returns UInt128 floor_division UInt128 // Int8 returns UInt128 + converts from UInt64 to Int64 converts from UInt64 to Int64 + converts from UInt32 to Int32 converts from UInt32 to Int32 + converts from Float32 to Float64 converts from Float32 to Float64 + converts from Int16 to Float64 converts from Int16 to Float64 + converts from UInt8 to UInt8 converts from UInt8 to UInt8 + division between Float64 / Int8 returns Float64 division between Float64 / Int8 returns Float64 + converts from Int128 to Int128 converts from Int128 to Int128 + floor_division UInt32 // Float64 returns UInt32 floor_division UInt32 // Float64 returns UInt32 + converts from Float32 to UInt8 converts from Float32 to UInt8 + division between Int64 / UInt128 returns Float64 division between Int64 / UInt128 returns Float64 + converts from UInt16 to Int32 converts from UInt16 to Int32 + converts from Int8 to UInt32 converts from Int8 to UInt32 + division between Float32 / Int32 returns Float32 division between Float32 / Int32 returns Float32 + converts from Float32 to UInt32 converts from Float32 to UInt32 + #round + rounds to nearest integer rounds to nearest integer + rounding modes + ties_away ties_away + ties_even ties_even + to_negative to_negative + to_positive to_positive + default (=ties_even) default (=ties_even) + to_zero to_zero + infinity Float32 infinity Float32 assert assert - + - does for both unicode does for both unicode - does when left is empty does when left is empty - does with unicode char does with unicode char - does for both ascii does for both ascii - does with ascii char does with ascii char - does when right is empty does when right is empty - #rindex! - by char - assert assert - with offset - assert assert - assert assert - assert assert - assert assert - by regex - assert assert - assert assert - assert assert - assert assert - with offset - assert assert - assert assert - assert assert - by string - assert assert - assert assert - assert assert - with offset - assert assert - assert assert - assert assert - creating from a slice - allows creating from an empty slice allows creating from an empty slice - does byte_at does byte_at - does pretty_inspect does pretty_inspect - String.new(&) - raises if string capacity is negative raises if string capacity is negative - raises if capacity too big with UInt32::MAX - String::HEADER_SIZE - 1 raises if capacity too big with UInt32::MAX - String::HEADER_SIZE - 1 - raises if capacity too big with UInt32::MAX raises if capacity too big with UInt32::MAX - raises if capacity too big with UInt64::MAX raises if capacity too big with UInt64::MAX - creates with matching capacity creates with matching capacity - allocates buffer of correct size (#3332) allocates buffer of correct size (#3332) - raises if returned bytesize is greater than capacity raises if returned bytesize is greater than capacity - creates with excess capacity creates with excess capacity - sub - subs range with string, non-ascii subs range with string, non-ascii - subs with regex and block subs with regex and block - subs endless range with string subs endless range with string - subs at index with char subs at index with char - subs beginless range with string subs beginless range with string - subs char with string subs char with string - subs using with \ subs using with \ - replaces with incomplete named back-reference (1) replaces with incomplete named back-reference (1) - subs with string and string (#3258) subs with string and string (#3258) - replaces with numeric back-reference replaces with numeric back-reference - subs with regex and string (utf-8) subs with regex and string (utf-8) - subs with empty regex subs with empty regex - replaces with \\\1 replaces with \\\1 - subs with string and string (utf-8) subs with string and string (utf-8) - subs with string and string return self if no match subs with string and string return self if no match - subs null character subs null character - subs at index with string subs at index with string - subs with string and string subs with string and string - subs beginless range with char subs beginless range with char - subs using with z\w subs using with z\w - subs range with char, non-ascii subs range with char, non-ascii - subs with regex and string, returns self if no match subs with regex and string, returns self if no match - replaces with multiple named back-reference replaces with multiple named back-reference - subs at index with char, non-ascii subs at index with char, non-ascii - subs at negative index with string subs at negative index with string - replaces with named back-reference replaces with named back-reference - subs with string and block subs with string and block - subs at negative index with char subs at negative index with char - subs range with char subs range with char - subs with regex and string subs with regex and string - subs char with char subs char with char - subs with regex and named tuple subs with regex and named tuple - subs char with string subs char with string - subs with regex and hash subs with regex and hash - ignores if backreferences: false ignores if backreferences: false - subs using $~ subs using $~ - raises if index is out of bounds raises if index is out of bounds - replaces with \a replaces with \a - subs range with string subs range with string - subs at index with string, non-ascii subs at index with string, non-ascii - subs the last char subs the last char - replaces with incomplete named back-reference (2) replaces with incomplete named back-reference (2) - subs with char hash subs with char hash - subs endless range with char subs endless range with char - subs with regex and block with group subs with regex and block with group - subs with empty string subs with empty string - [] - raises index out of bound on index out of range with range and utf-8 raises index out of bound on index out of range with range and utf-8 - gets when index is last and count is negative at last gets when index is last and count is negative at last - raises index out of bound on index out of range with range raises index out of bound on index out of range with range - gets with exclusive with start and count gets with exclusive with start and count - gets with inclusive range with negative indices gets with inclusive range with negative indices - gets with a char gets with a char - gets with negative index gets with negative index - gets when index is last and count is negative at last with utf-8 gets when index is last and count is negative at last with utf-8 - raises if count is negative with utf-8 raises if count is negative with utf-8 - gets when index is last and count is positive gets when index is last and count is positive - gets with exclusive with start and count to end gets with exclusive with start and count to end - gets with positive index gets with positive index - with a regex - assert assert - assert assert - assert assert - assert assert - assert assert + edge cases edge cases + handle medium amount of digits handle medium amount of digits + accepts unsigned precision accepts unsigned precision + negative digits negative digits + rounds to digits rounds to digits + base + 8 8 + 2 2 + with digits + ties_even ties_even + to_zero to_zero + ties_away ties_away + to_negative to_negative + to_positive to_positive + preserves type preserves type + infinity Float64 infinity Float64 + nan nan + converts from Float32 to Float32 converts from Float32 to Float32 + division between UInt32 / Float32 returns Float32 division between UInt32 / Float32 returns Float32 + converts from UInt128 to Int64 converts from UInt128 to Int64 + converts from Int8 to Int128 converts from Int8 to Int128 + floor_division UInt32 // UInt8 returns UInt32 floor_division UInt32 // UInt8 returns UInt32 + converts from Int32 to Int32 converts from Int32 to Int32 + converts from Int128 to Int16 converts from Int128 to Int16 + floor_division Float64 // Int8 returns Float64 floor_division Float64 // Int8 returns Float64 + division between Int32 / Int32 returns Float64 division between Int32 / Int32 returns Float64 + floor_division Int16 // Int8 returns Int16 floor_division Int16 // Int8 returns Int16 + converts from UInt32 to UInt16 converts from UInt32 to UInt16 + floor_division Int32 // UInt32 returns Int32 floor_division Int32 // UInt32 returns Int32 + division between UInt8 / Int128 returns Float64 division between UInt8 / Int128 returns Float64 + converts from Float64 to Int64 converts from Float64 to Int64 + division between Int8 / Int8 returns Float64 division between Int8 / Int8 returns Float64 + floor_division UInt32 // Float32 returns UInt32 floor_division UInt32 // Float32 returns UInt32 + converts from Float64 to UInt128 converts from Float64 to UInt128 + division between UInt8 / UInt64 returns Float64 division between UInt8 / UInt64 returns Float64 + converts from UInt32 to Int64 converts from UInt32 to Int64 + converts from UInt64 to Float32 converts from UInt64 to Float32 + converts from Float64 to UInt16 converts from Float64 to UInt16 + unchecked initialize from value to UInt128 unchecked initialize from value to UInt128 + floor_division UInt32 // UInt16 returns UInt32 floor_division UInt32 // UInt16 returns UInt32 + converts from Int8 to UInt64 converts from Int8 to UInt64 + initialize from value to Int64 initialize from value to Int64 + converts from Int64 to UInt8 converts from Int64 to UInt8 + converts from Int16 to Float32 converts from Int16 to Float32 + floor_division Int8 // Int8 returns Int8 floor_division Int8 // Int8 returns Int8 + converts from Int64 to Int16 converts from Int64 to Int16 + floor_division UInt128 // Int128 returns UInt128 floor_division UInt128 // Int128 returns UInt128 + converts from Float32 to Int32 converts from Float32 to Int32 + converts from UInt64 to Int8 converts from UInt64 to Int8 + converts from Int16 to UInt32 converts from Int16 to UInt32 + floor_division UInt16 // UInt16 returns UInt16 floor_division UInt16 // UInt16 returns UInt16 + floor_division Int32 // Int16 returns Int32 floor_division Int32 // Int16 returns Int32 + division between UInt128 / Float64 returns Float64 division between UInt128 / Float64 returns Float64 + division between Float64 / UInt32 returns Float64 division between Float64 / UInt32 returns Float64 + floor_division UInt32 // UInt128 returns UInt32 floor_division UInt32 // UInt128 returns UInt32 + converts from Float64 to Int8 converts from Float64 to Int8 + division between UInt8 / Float32 returns Float32 division between UInt8 / Float32 returns Float32 + converts from Float64 to Int32 converts from Float64 to Int32 + converts from Int32 to Int128 converts from Int32 to Int128 + division between UInt16 / UInt128 returns Float64 division between UInt16 / UInt128 returns Float64 + converts from UInt32 to Float32 converts from UInt32 to Float32 + converts from Int32 to UInt64 converts from Int32 to UInt64 + converts from Int128 to UInt8 converts from Int128 to UInt8 + converts from Int64 to UInt128 converts from Int64 to UInt128 + converts from Float64 to Float32 converts from Float64 to Float32 + converts from UInt8 to UInt16 converts from UInt8 to UInt16 + initialize from value to UInt64 initialize from value to UInt64 + divides and calculates the modulo divides and calculates the modulo + floor_division UInt128 // Float64 returns UInt128 floor_division UInt128 // Float64 returns UInt128 + division between UInt16 / UInt16 returns Float64 division between UInt16 / UInt16 returns Float64 + division between UInt64 / UInt32 returns Float64 division between UInt64 / UInt32 returns Float64 + converts from Int128 to UInt128 converts from Int128 to UInt128 + #step + "Float by Int" iterator "Float by Int" iterator + by zero yielding by zero yielding + by zero iterator by zero iterator + "towards limit [max-3, max-1, max)" iterator "towards limit [max-3, max-1, max)" iterator + "at max Int" yielding "at max Int" yielding + "single value Float" yielding "single value Float" yielding + "missing end Int" iterator "missing end Int" iterator + whole range + "UInt8 upwards" iterator "UInt8 upwards" iterator + "Int8 upwards" iterator "Int8 upwards" iterator + "Int8 downwards" iterator "Int8 downwards" iterator + "Int16 upwards" iterator "Int16 upwards" iterator + "UInt8 downwards" yielding "UInt8 downwards" yielding assert assert + "UInt8 upwards" yielding "UInt8 upwards" yielding + "Int16 upwards" yielding "Int16 upwards" yielding + "Int8 downwards" yielding "Int8 downwards" yielding + "Int16 downwards" yielding "Int16 downwards" yielding + "Int8 upwards" yielding "Int8 upwards" yielding + "Int16 downwards" iterator "Int16 downwards" iterator assert assert + "UInt8 downwards" iterator "UInt8 downwards" iterator assert assert - raises IndexError if pointing after last char which is non-ASCII raises IndexError if pointing after last char which is non-ASCII - gets with a string gets with a string - gets with range without beginning gets with range without beginning - gets with exclusive range with unicode gets with exclusive range with unicode - gets with exclusive range gets with exclusive range - raises if index out of bounds raises if index out of bounds - gets with single char gets with single char - assert assert - gets when index is last and count is zero gets when index is last and count is zero - gets when index is last and count is positive in utf-8 gets when index is last and count is positive in utf-8 - raises on too negative left bound raises on too negative left bound - gets with inclusive range gets with inclusive range - raises if index out of bounds with utf-8 raises if index out of bounds with utf-8 - gets with start and count gets with start and count - gets with start and count with negative start gets with start and count with negative start - gets with range without end gets with range without end - gets when index is last and count is zero in utf-8 gets when index is last and count is zero in utf-8 - raises if count is negative raises if count is negative - does each_char_with_index does each_char_with_index - "#each_char" iterator "#each_char" iterator - matches, but returns Bool matches, but returns Bool - gets each_line with chomp = false gets each_line with chomp = false - ascii_only? - answers ascii_only? answers ascii_only? - broken UTF-8 is not ascii_only broken UTF-8 is not ascii_only - #downcase - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - does not touch invalid code units in an otherwise ascii string does not touch invalid code units in an otherwise ascii string - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - rchop - assert assert - assert assert - assert assert + "downto UInt" yielding "downto UInt" yielding + "empty if `self` can't be compared" yielding "empty if `self` can't be compared" yielding + "Int by Float" yielding "Int by Float" yielding + "by Float" iterator "by Float" iterator + "negative by Int" iterator "negative by Int" iterator + "by Float" yielding "by Float" yielding + "Float by Int" yielding "Float by Int" yielding + "negative Int" iterator "negative Int" iterator + "downto Int" iterator "downto Int" iterator + "downto Float by" yielding "downto Float by" yielding + "negative by Float" iterator "negative by Float" iterator + "single value Int by Float" yielding "single value Int by Float" yielding + "negative Int" yielding "negative Int" yielding + "over min Int" iterator "over min Int" iterator + "Float to Int by" iterator "Float to Int by" iterator + "downto UInt by" yielding "downto UInt by" yielding + "negative by Float" yielding "negative by Float" yielding + "negative Float" yielding "negative Float" yielding + "over zero Int" yielding "over zero Int" yielding + "missing end UInt" iterator "missing end UInt" iterator + "Int to Float" iterator "Int to Float" iterator + "Float to Int by" yielding "Float to Int by" yielding + "downto Int" yielding "downto Int" yielding + "single value by Float" yielding "single value by Float" yielding + "missing end Float" yielding "missing end Float" yielding + "single value by Int" iterator "single value by Int" iterator + "at min Int" iterator "at min Int" iterator + "single value Int" iterator "single value Int" iterator + "Int to Float by" iterator "Int to Float by" iterator + "at min Int" yielding "at min Int" yielding + "negative by Float half" iterator "negative by Float half" iterator + "over max Int" yielding "over max Int" yielding + "empty if `to` can't be compared" iterator "empty if `to` can't be compared" iterator + "empty if `by` and `to` are opposed" iterator "empty if `by` and `to` are opposed" iterator + "downto Float by" iterator "downto Float by" iterator + "missing end Float" iterator "missing end Float" iterator + "downto UInt" iterator "downto UInt" iterator + "Int to Float by" yielding "Int to Float by" yielding + "over min Int" yielding "over min Int" yielding + "downto Int by" yielding "downto Int by" yielding + "empty if `to` can't be compared by" yielding "empty if `to` can't be compared by" yielding + "by Float half" iterator "by Float half" iterator + "downto Float" yielding "downto Float" yielding + "single value Float by Int" yielding "single value Float by Int" yielding + "by Int" iterator "by Int" iterator + "empty if `self` can't be compared by" iterator "empty if `self` can't be compared by" iterator + "single value Float by Int" iterator "single value Float by Int" iterator + "basic Int" iterator "basic Int" iterator + "Int to Float" yielding "Int to Float" yielding + "basic Float" iterator "basic Float" iterator + "by Int" yielding "by Int" yielding + "single value by Int" yielding "single value by Int" yielding + "empty if `to` can't be compared" yielding "empty if `to` can't be compared" yielding + "missing end UInt" yielding "missing end UInt" yielding + "downto Int by" iterator "downto Int by" iterator + "over zero Int" iterator "over zero Int" iterator + "single value by Float" iterator "single value by Float" iterator + "at max Int" iterator "at max Int" iterator + "by Float half" yielding "by Float half" yielding + without limit + iterator + raises overflow error raises overflow error + basic basic + yielding + basic basic + raises overflow error raises overflow error + "basic Int" yielding "basic Int" yielding + "over zero Float" iterator "over zero Float" iterator + "single value Float" iterator "single value Float" iterator + "single value Int by Float" iterator "single value Int by Float" iterator + "over max Int" iterator "over max Int" iterator + exclusive + "single value Float" yielding "single value Float" yielding + "single value Int" iterator "single value Int" iterator + "basic Float" iterator "basic Float" iterator + "basic Int" yielding "basic Int" yielding + "basic Float" yielding "basic Float" yielding + "basic Int" iterator "basic Int" iterator + "single value Float" iterator "single value Float" iterator + "single value Int" yielding "single value Int" yielding + "missing end Int" yielding "missing end Int" yielding + "towards limit [max-4, max-2, max)" iterator "towards limit [max-4, max-2, max)" iterator + "negative Float" iterator "negative Float" iterator + "downto Float" iterator "downto Float" iterator + "empty if `self` can't be compared by" yielding "empty if `self` can't be compared by" yielding + "towards limit [max-4, max-2, max)" yielding "towards limit [max-4, max-2, max)" yielding + "Float to Int" iterator "Float to Int" iterator + "single value Int" yielding "single value Int" yielding + "empty if `self` can't be compared" iterator "empty if `self` can't be compared" iterator + "towards limit [max-4, max-2, max]" yielding "towards limit [max-4, max-2, max]" yielding + "over zero Float" yielding "over zero Float" yielding + "towards limit [max-3, max-1, max)" yielding "towards limit [max-3, max-1, max)" yielding + "Float to Int" yielding "Float to Int" yielding + "basic Float" yielding "basic Float" yielding + "empty if `by` and `to` are opposed" yielding "empty if `by` and `to` are opposed" yielding + "negative by Int" yielding "negative by Int" yielding + "negative by Float half" yielding "negative by Float half" yielding + "towards limit [max-4, max-2, max]" iterator "towards limit [max-4, max-2, max]" iterator + "empty if `to` can't be compared by" iterator "empty if `to` can't be compared by" iterator + "downto UInt by" iterator "downto UInt by" iterator + "Int by Float" iterator "Int by Float" iterator + division between Float64 / Int64 returns Float64 division between Float64 / Int64 returns Float64 + converts from Int64 to UInt32 converts from Int64 to UInt32 + converts from UInt64 to UInt32 converts from UInt64 to UInt32 + division between Int16 / UInt64 returns Float64 division between Int16 / UInt64 returns Float64 + converts from UInt16 to Int64 converts from UInt16 to Int64 + converts from UInt64 to Int16 converts from UInt64 to Int16 + division between Int128 / Int16 returns Float64 division between Int128 / Int16 returns Float64 + division between UInt64 / UInt128 returns Float64 division between UInt64 / UInt128 returns Float64 + converts from Float32 to Int8 converts from Float32 to Int8 + floor_division Float64 // Int64 returns Float64 floor_division Float64 // Int64 returns Float64 + division between UInt16 / Float64 returns Float64 division between UInt16 / Float64 returns Float64 + converts from UInt32 to Float64 converts from UInt32 to Float64 + creates a slice creates a slice + division between Int16 / UInt8 returns Float64 division between Int16 / UInt8 returns Float64 + floor_division Int64 // UInt16 returns Int64 floor_division Int64 // UInt16 returns Int64 + division between Float64 / UInt16 returns Float64 division between Float64 / UInt16 returns Float64 + division between UInt16 / Float32 returns Float32 division between UInt16 / Float32 returns Float32 + converts from UInt128 to UInt16 converts from UInt128 to UInt16 + division between Int32 / Int16 returns Float64 division between Int32 / Int16 returns Float64 + unchecked initialize from value to UInt32 unchecked initialize from value to UInt32 + #positive? #positive? + converts from Float64 to Int32 converts from Float64 to Int32 + division between UInt16 / Int8 returns Float64 division between UInt16 / Int8 returns Float64 + floor_division Int64 // Int8 returns Int64 floor_division Int64 // Int8 returns Int64 + division between Int32 / Float32 returns Float32 division between Int32 / Float32 returns Float32 + division between UInt128 / UInt16 returns Float64 division between UInt128 / UInt16 returns Float64 + division between UInt8 / Float64 returns Float64 division between UInt8 / Float64 returns Float64 + division between UInt16 / UInt8 returns Float64 division between UInt16 / UInt8 returns Float64 + floor_division UInt8 // Int128 returns UInt8 floor_division UInt8 // Int128 returns UInt8 + division between Int32 / UInt128 returns Float64 division between Int32 / UInt128 returns Float64 + division between Int16 / UInt16 returns Float64 division between Int16 / UInt16 returns Float64 + floor_division UInt8 // Int64 returns UInt8 floor_division UInt8 // Int64 returns UInt8 + division between Float32 / Int64 returns Float32 division between Float32 / Int64 returns Float32 + converts from UInt16 to Int16 converts from UInt16 to Int16 + converts from Int8 to Float64 converts from Int8 to Float64 + division between Int8 / Int128 returns Float64 division between Int8 / Int128 returns Float64 + floor_division UInt16 // Int128 returns UInt16 floor_division UInt16 // Int128 returns UInt16 + converts from Int128 to Int128 converts from Int128 to Int128 + converts from UInt64 to Int32 converts from UInt64 to Int32 + converts from UInt64 to Int32 converts from UInt64 to Int32 + converts from Float32 to Float32 converts from Float32 to Float32 + division between UInt64 / Int8 returns Float64 division between UInt64 / Int8 returns Float64 + division between UInt64 / Int64 returns Float64 division between UInt64 / Int64 returns Float64 + division between Int64 / Int32 returns Float64 division between Int64 / Int32 returns Float64 + floor_division Int32 // UInt16 returns Int32 floor_division Int32 // UInt16 returns Int32 + floor_division Float32 // UInt128 returns Float32 floor_division Float32 // UInt128 returns Float32 + converts from Int32 to Float32 converts from Int32 to Float32 + division between UInt16 / Int32 returns Float64 division between UInt16 / Int32 returns Float64 + floor_division Int64 // Int32 returns Int64 floor_division Int64 // Int32 returns Int64 + division between Int8 / UInt32 returns Float64 division between Int8 / UInt32 returns Float64 + converts from UInt128 to Float32 converts from UInt128 to Float32 + converts from Float32 to Int16 converts from Float32 to Int16 + converts from UInt64 to UInt64 converts from UInt64 to UInt64 + division between Float64 / Float64 returns Float64 division between Float64 / Float64 returns Float64 + floor_division UInt128 // UInt128 returns UInt128 floor_division UInt128 // UInt128 returns UInt128 + converts from UInt16 to UInt64 converts from UInt16 to UInt64 + converts from Int16 to Int16 converts from Int16 to Int16 + converts from UInt64 to Int64 converts from UInt64 to Int64 + converts from UInt8 to Int8 converts from UInt8 to Int8 + division between UInt32 / Int8 returns Float64 division between UInt32 / Int8 returns Float64 + floor_division Int32 // Int8 returns Int32 floor_division Int32 // Int8 returns Int32 + division between UInt16 / Int64 returns Float64 division between UInt16 / Int64 returns Float64 + division between UInt64 / Float32 returns Float32 division between UInt64 / Float32 returns Float32 + floor_division Float32 // Int8 returns Float32 floor_division Float32 // Int8 returns Float32 + converts from Float32 to Float64 converts from Float32 to Float64 + #zero? #zero? + division between Int64 / UInt8 returns Float64 division between Int64 / UInt8 returns Float64 + converts from UInt32 to Int16 converts from UInt32 to Int16 + division between Float64 / UInt128 returns Float64 division between Float64 / UInt128 returns Float64 + converts from Int16 to UInt16 converts from Int16 to UInt16 + converts from UInt128 to UInt128 converts from UInt128 to UInt128 + converts from UInt8 to Int8 converts from UInt8 to Int8 + floor_division UInt32 // UInt32 returns UInt32 floor_division UInt32 // UInt32 returns UInt32 + division between Int16 / Int64 returns Float64 division between Int16 / Int64 returns Float64 + division between UInt128 / UInt8 returns Float64 division between UInt128 / UInt8 returns Float64 + division between Int16 / Int8 returns Float64 division between Int16 / Int8 returns Float64 + converts from UInt8 to Int16 converts from UInt8 to Int16 + division between UInt64 / Float64 returns Float64 division between UInt64 / Float64 returns Float64 + floor_division UInt64 // UInt8 returns UInt64 floor_division UInt64 // UInt8 returns UInt64 + converts from UInt128 to Int128 converts from UInt128 to Int128 + converts from Int128 to Int8 converts from Int128 to Int8 + converts from Float64 to UInt32 converts from Float64 to UInt32 + converts from Int64 to Int8 converts from Int64 to Int8 + floor_division UInt32 // Int64 returns UInt32 floor_division UInt32 // Int64 returns UInt32 + converts from Int64 to Int64 converts from Int64 to Int64 + floor_division UInt16 // Float32 returns UInt16 floor_division UInt16 // Float32 returns UInt16 + division between Int8 / Float32 returns Float32 division between Int8 / Float32 returns Float32 + floor_division Float32 // UInt64 returns Float32 floor_division Float32 // UInt64 returns Float32 + converts from UInt16 to UInt16 converts from UInt16 to UInt16 + division between Int32 / Float64 returns Float64 division between Int32 / Float64 returns Float64 + division between UInt8 / Int64 returns Float64 division between UInt8 / Int64 returns Float64 + converts from Int128 to Int64 converts from Int128 to Int64 + converts from Int128 to UInt32 converts from Int128 to UInt32 + floor_division UInt32 // Int128 returns UInt32 floor_division UInt32 // Int128 returns UInt32 + floor_division Int32 // Int32 returns Int32 floor_division Int32 // Int32 returns Int32 + unchecked initialize from value to Int32 unchecked initialize from value to Int32 + converts from UInt8 to Int128 converts from UInt8 to Int128 + division between Float32 / Int8 returns Float32 division between Float32 / Int8 returns Float32 + floor_division Float64 // UInt32 returns Float64 floor_division Float64 // UInt32 returns Float64 + floor_division Int32 // UInt128 returns Int32 floor_division Int32 // UInt128 returns Int32 + floor_division UInt64 // Int128 returns UInt64 floor_division UInt64 // Int128 returns UInt64 + converts from Int16 to Int8 converts from Int16 to Int8 + converts from Int128 to UInt64 converts from Int128 to UInt64 + converts from UInt64 to UInt16 converts from UInt64 to UInt16 + division between UInt128 / Float32 returns Float32 division between UInt128 / Float32 returns Float32 + division between Float32 / Float64 returns Float64 division between Float32 / Float64 returns Float64 + floor_division UInt64 // Int8 returns UInt64 floor_division UInt64 // Int8 returns UInt64 + converts from Float32 to Int64 converts from Float32 to Int64 + floor_division Int128 // UInt64 returns Int128 floor_division Int128 // UInt64 returns Int128 + converts from Int8 to Float32 converts from Int8 to Float32 + floor_division Float32 // Int64 returns Float32 floor_division Float32 // Int64 returns Float32 + division between UInt64 / Int128 returns Float64 division between UInt64 / Int128 returns Float64 + floor_division Int16 // Int32 returns Int16 floor_division Int16 // Int32 returns Int16 + converts from UInt128 to Int8 converts from UInt128 to Int8 + converts from Float64 to Float32 converts from Float64 to Float32 + floor_division Int16 // UInt8 returns Int16 floor_division Int16 // UInt8 returns Int16 + floor_division UInt16 // UInt32 returns UInt16 floor_division UInt16 // UInt32 returns UInt16 + converts from Int128 to Int32 converts from Int128 to Int32 + converts from UInt16 to Int8 converts from UInt16 to Int8 + division between Float32 / Float32 returns Float32 division between Float32 / Float32 returns Float32 + floor_division Int8 // UInt16 returns Int8 floor_division Int8 // UInt16 returns Int8 + converts from Float64 to Float64 converts from Float64 to Float64 + converts from Int64 to Float64 converts from Int64 to Float64 + division between UInt32 / Int128 returns Float64 division between UInt32 / Int128 returns Float64 + converts from UInt64 to Int128 converts from UInt64 to Int128 + division between UInt32 / UInt16 returns Float64 division between UInt32 / UInt16 returns Float64 + converts from Int32 to UInt16 converts from Int32 to UInt16 + division between Int128 / UInt8 returns Float64 division between Int128 / UInt8 returns Float64 + converts from UInt32 to UInt64 converts from UInt32 to UInt64 + initialize from value to Int128 initialize from value to Int128 + floor_division Float32 // UInt16 returns Float32 floor_division Float32 // UInt16 returns Float32 + converts from Int32 to Int128 converts from Int32 to Int128 + converts from Int8 to Int8 converts from Int8 to Int8 + division between UInt32 / Int16 returns Float64 division between UInt32 / Int16 returns Float64 + converts from Int64 to Float32 converts from Int64 to Float32 + division between Float32 / Int16 returns Float32 division between Float32 / Int16 returns Float32 + converts from Int128 to Int32 converts from Int128 to Int32 + division between Int8 / UInt16 returns Float64 division between Int8 / UInt16 returns Float64 + division between UInt64 / Int32 returns Float64 division between UInt64 / Int32 returns Float64 + converts from UInt128 to UInt16 converts from UInt128 to UInt16 + converts from Int32 to UInt8 converts from Int32 to UInt8 + creates an array with [] and some elements creates an array with [] and some elements + division between Int16 / UInt32 returns Float64 division between Int16 / UInt32 returns Float64 + converts from Int16 to UInt32 converts from Int16 to UInt32 + converts from UInt32 to Int16 converts from UInt32 to Int16 + division between Int64 / Int8 returns Float64 division between Int64 / Int8 returns Float64 + converts from UInt128 to UInt8 converts from UInt128 to UInt8 + floor_division UInt16 // UInt8 returns UInt16 floor_division UInt16 // UInt8 returns UInt16 + floor_division Int128 // Int128 returns Int128 floor_division Int128 // Int128 returns Int128 + floor_division Int8 // UInt32 returns Int8 floor_division Int8 // UInt32 returns Int8 + converts from UInt64 to UInt8 converts from UInt64 to UInt8 + converts from UInt16 to UInt128 converts from UInt16 to UInt128 + floor_division Int64 // UInt128 returns Int64 floor_division Int64 // UInt128 returns Int64 + converts from UInt128 to Int128 converts from UInt128 to Int128 + converts from Float64 to UInt128 converts from Float64 to UInt128 + gives the sign gives the sign + unchecked initialize from value to Int8 unchecked initialize from value to Int8 + converts from UInt8 to UInt32 converts from UInt8 to UInt32 + floor_division Int128 // UInt32 returns Int128 floor_division Int128 // UInt32 returns Int128 + converts from UInt128 to UInt8 converts from UInt128 to UInt8 + floor_division Int128 // Int64 returns Int128 floor_division Int128 // Int64 returns Int128 + creates a static array creates a static array + unchecked initialize from value to UInt8 unchecked initialize from value to UInt8 + converts from Int32 to UInt128 converts from Int32 to UInt128 + division between UInt8 / Int16 returns Float64 division between UInt8 / Int16 returns Float64 + converts from Int64 to Int16 converts from Int64 to Int16 + converts from Int8 to Int16 converts from Int8 to Int16 + division between Int64 / UInt16 returns Float64 division between Int64 / UInt16 returns Float64 + converts from Int32 to UInt32 converts from Int32 to UInt32 + floor_division Float32 // Float64 returns Float32 floor_division Float32 // Float64 returns Float32 + division between Int8 / UInt64 returns Float64 division between Int8 / UInt64 returns Float64 + converts from UInt16 to UInt32 converts from UInt16 to UInt32 + converts from UInt16 to UInt16 converts from UInt16 to UInt16 + converts from UInt128 to UInt64 converts from UInt128 to UInt64 + division between Int16 / Float32 returns Float32 division between Int16 / Float32 returns Float32 + converts from Int128 to Float32 converts from Int128 to Float32 + converts from UInt32 to UInt64 converts from UInt32 to UInt64 + converts from Int128 to UInt16 converts from Int128 to UInt16 + floor_division UInt16 // Int8 returns UInt16 floor_division UInt16 // Int8 returns UInt16 + floor_division UInt64 // Int64 returns UInt64 floor_division UInt64 // Int64 returns UInt64 + division between Int64 / Int64 returns Float64 division between Int64 / Int64 returns Float64 + division between Int128 / UInt32 returns Float64 division between Int128 / UInt32 returns Float64 + division between Int8 / UInt128 returns Float64 division between Int8 / UInt128 returns Float64 + division between Int8 / Float64 returns Float64 division between Int8 / Float64 returns Float64 + division between Int8 / Int32 returns Float64 division between Int8 / Int32 returns Float64 + converts from Int8 to Int128 converts from Int8 to Int128 + converts from UInt32 to Float64 converts from UInt32 to Float64 + converts from UInt16 to Float32 converts from UInt16 to Float32 + converts from Int8 to Int32 converts from Int8 to Int32 + initialize from value to Float32 initialize from value to Float32 + floor_division Int128 // Int8 returns Int128 floor_division Int128 // Int8 returns Int128 + converts from Int16 to Float32 converts from Int16 to Float32 + converts from Float32 to Int8 converts from Float32 to Int8 + converts from UInt32 to UInt32 converts from UInt32 to UInt32 + floor_division Int8 // Int128 returns Int8 floor_division Int8 // Int128 returns Int8 + floor_division Float64 // Int16 returns Float64 floor_division Float64 // Int16 returns Float64 + division between Float64 / Float32 returns Float64 division between Float64 / Float32 returns Float64 + converts from UInt32 to Int128 converts from UInt32 to Int128 + division between UInt16 / UInt32 returns Float64 division between UInt16 / UInt32 returns Float64 + converts from Int128 to Float64 converts from Int128 to Float64 + floor_division UInt8 // Int16 returns UInt8 floor_division UInt8 // Int16 returns UInt8 + converts from Int32 to Int16 converts from Int32 to Int16 + floor_division Int64 // Float64 returns Int64 floor_division Int64 // Float64 returns Int64 + floor_division Int64 // UInt32 returns Int64 floor_division Int64 // UInt32 returns Int64 + converts from UInt16 to Float64 converts from UInt16 to Float64 + division between Int64 / Float64 returns Float64 division between Int64 / Float64 returns Float64 + floor_division Int16 // Int64 returns Int16 floor_division Int16 // Int64 returns Int16 + division between Float64 / UInt8 returns Float64 division between Float64 / UInt8 returns Float64 + division between Int16 / Int16 returns Float64 division between Int16 / Int16 returns Float64 + converts from Int128 to UInt8 converts from Int128 to UInt8 + converts from UInt128 to Int16 converts from UInt128 to Int16 + division between Int128 / Int64 returns Float64 division between Int128 / Int64 returns Float64 + converts from Int64 to Int128 converts from Int64 to Int128 + creates an array with [] and no elements creates an array with [] and no elements + converts from Int32 to Float32 converts from Int32 to Float32 + division between Int16 / Int32 returns Float64 division between Int16 / Int32 returns Float64 + converts from UInt128 to UInt64 converts from UInt128 to UInt64 + converts from Int32 to Int8 converts from Int32 to Int8 + converts from UInt64 to UInt64 converts from UInt64 to UInt64 + division between UInt128 / UInt32 returns Float64 division between UInt128 / UInt32 returns Float64 + floor_division Int8 // UInt128 returns Int8 floor_division Int8 // UInt128 returns Int8 + converts from UInt8 to UInt16 converts from UInt8 to UInt16 + division between Float32 / UInt128 returns Float32 division between Float32 / UInt128 returns Float32 + division between Float32 / UInt32 returns Float32 division between Float32 / UInt32 returns Float32 + unchecked initialize from value to UInt16 unchecked initialize from value to UInt16 + division between UInt32 / UInt128 returns Float64 division between UInt32 / UInt128 returns Float64 + floor_division Int16 // Int128 returns Int16 floor_division Int16 // Int128 returns Int16 + unchecked initialize from value to Int64 unchecked initialize from value to Int64 + converts from Float64 to UInt32 converts from Float64 to UInt32 + #negative? #negative? + converts from Int16 to Float64 converts from Int16 to Float64 + converts from Float32 to Int128 converts from Float32 to Int128 + floor_division Int32 // UInt64 returns Int32 floor_division Int32 // UInt64 returns Int32 + converts from Int32 to UInt8 converts from Int32 to UInt8 + floor_division Float64 // Int32 returns Float64 floor_division Float64 // Int32 returns Float64 + converts from Int128 to Float64 converts from Int128 to Float64 + converts from Float64 to Int16 converts from Float64 to Int16 + converts from UInt16 to Int64 converts from UInt16 to Int64 + division between UInt64 / Int16 returns Float64 division between UInt64 / Int16 returns Float64 + converts from UInt16 to Int32 converts from UInt16 to Int32 + converts from Int16 to Int32 converts from Int16 to Int32 + converts from Int128 to UInt64 converts from Int128 to UInt64 + floor_division Float64 // Float32 returns Float64 floor_division Float64 // Float32 returns Float64 + unchecked initialize from value to Int16 unchecked initialize from value to Int16 + converts from UInt32 to UInt8 converts from UInt32 to UInt8 + converts from Float64 to UInt64 converts from Float64 to UInt64 + floor_division UInt16 // UInt64 returns UInt16 floor_division UInt16 // UInt64 returns UInt16 + division between Int128 / Float32 returns Float32 division between Int128 / Float32 returns Float32 + floor_division Int16 // Float64 returns Int16 floor_division Int16 // Float64 returns Int16 + converts from Int16 to UInt128 converts from Int16 to UInt128 + converts from Float32 to Int128 converts from Float32 to Int128 + division between Float32 / UInt16 returns Float32 division between Float32 / UInt16 returns Float32 + division between Float64 / Int128 returns Float64 division between Float64 / Int128 returns Float64 + initialize from value to UInt32 initialize from value to UInt32 + converts from Int16 to Int64 converts from Int16 to Int64 + converts from UInt16 to Int128 converts from UInt16 to Int128 + converts from UInt16 to Int16 converts from UInt16 to Int16 + floor_division UInt16 // Int32 returns UInt16 floor_division UInt16 // Int32 returns UInt16 + converts from UInt8 to Int64 converts from UInt8 to Int64 + converts from Int128 to Int8 converts from Int128 to Int8 + converts from Int64 to Int128 converts from Int64 to Int128 + converts from Int8 to UInt8 converts from Int8 to UInt8 + converts from Float32 to UInt128 converts from Float32 to UInt128 + division between UInt8 / UInt8 returns Float64 division between UInt8 / UInt8 returns Float64 + division between Int16 / Float64 returns Float64 division between Int16 / Float64 returns Float64 + floor_division Float64 // UInt128 returns Float64 floor_division Float64 // UInt128 returns Float64 + division between UInt8 / UInt16 returns Float64 division between UInt8 / UInt16 returns Float64 + floor_division Int64 // Float32 returns Int64 floor_division Int64 // Float32 returns Int64 + floor_division Float64 // UInt8 returns Float64 floor_division Float64 // UInt8 returns Float64 + floor_division UInt16 // Int64 returns UInt16 floor_division UInt16 // Int64 returns UInt16 + converts from Int8 to Int16 converts from Int8 to Int16 + floor_division Int16 // Int16 returns Int16 floor_division Int16 // Int16 returns Int16 + converts from Int8 to Int8 converts from Int8 to Int8 + floor_division Int8 // Int64 returns Int8 floor_division Int8 // Int64 returns Int8 + floor_division Float32 // UInt8 returns Float32 floor_division Float32 // UInt8 returns Float32 + floor_division Int8 // Int16 returns Int8 floor_division Int8 // Int16 returns Int8 + division between Float64 / Int32 returns Float64 division between Float64 / Int32 returns Float64 + division between UInt32 / Int64 returns Float64 division between UInt32 / Int64 returns Float64 + floor_division UInt8 // UInt128 returns UInt8 floor_division UInt8 // UInt128 returns UInt8 + floor_division UInt8 // UInt16 returns UInt8 floor_division UInt8 // UInt16 returns UInt8 + division between UInt16 / UInt64 returns Float64 division between UInt16 / UInt64 returns Float64 + division between UInt8 / Int32 returns Float64 division between UInt8 / Int32 returns Float64 + converts from UInt32 to Float32 converts from UInt32 to Float32 + gives the absolute value gives the absolute value + converts from Float32 to UInt8 converts from Float32 to UInt8 + converts from Int8 to UInt32 converts from Int8 to UInt32 + floor_division UInt128 // Float32 returns UInt128 floor_division UInt128 // Float32 returns UInt128 + converts from Int8 to Int64 converts from Int8 to Int64 + converts from UInt32 to UInt128 converts from UInt32 to UInt128 + initialize from value to Float64 initialize from value to Float64 + converts from Int16 to Int32 converts from Int16 to Int32 + converts from Int16 to UInt8 converts from Int16 to UInt8 + division between Int16 / UInt128 returns Float64 division between Int16 / UInt128 returns Float64 + converts from UInt32 to UInt128 converts from UInt32 to UInt128 + converts from Int16 to Int8 converts from Int16 to Int8 + converts from Float32 to Int64 converts from Float32 to Int64 + floor_division Int16 // Float32 returns Int16 floor_division Int16 // Float32 returns Int16 + converts from Int128 to Int64 converts from Int128 to Int64 + converts from UInt128 to Float64 converts from UInt128 to Float64 + floor_division Float32 // UInt32 returns Float32 floor_division Float32 // UInt32 returns Float32 + converts from UInt64 to UInt128 converts from UInt64 to UInt128 + converts from Int64 to Int32 converts from Int64 to Int32 + converts from Int32 to UInt32 converts from Int32 to UInt32 + division between Int128 / Float64 returns Float64 division between Int128 / Float64 returns Float64 + division between UInt32 / UInt8 returns Float64 division between UInt32 / UInt8 returns Float64 + floor_division UInt128 // Int32 returns UInt128 floor_division UInt128 // Int32 returns UInt128 + division between Float32 / UInt8 returns Float32 division between Float32 / UInt8 returns Float32 + converts from UInt64 to Float64 converts from UInt64 to Float64 + division between UInt64 / UInt64 returns Float64 division between UInt64 / UInt64 returns Float64 + floor_division UInt64 // UInt32 returns UInt64 floor_division UInt64 // UInt32 returns UInt64 + division between UInt8 / Int8 returns Float64 division between UInt8 / Int8 returns Float64 + floor_division UInt8 // Float64 returns UInt8 floor_division UInt8 // Float64 returns UInt8 + division between UInt32 / Float64 returns Float64 division between UInt32 / Float64 returns Float64 + converts from Int8 to Float32 converts from Int8 to Float32 + floor_division UInt64 // Float64 returns UInt64 floor_division UInt64 // Float64 returns UInt64 + converts from UInt16 to Float32 converts from UInt16 to Float32 + division between Int8 / Int64 returns Float64 division between Int8 / Int64 returns Float64 + division between UInt32 / UInt64 returns Float64 division between UInt32 / UInt64 returns Float64 + floor_division UInt64 // Int32 returns UInt64 floor_division UInt64 // Int32 returns UInt64 + division between UInt8 / UInt128 returns Float64 division between UInt8 / UInt128 returns Float64 + converts from Int16 to Int128 converts from Int16 to Int128 + floor_division Int64 // UInt64 returns Int64 floor_division Int64 // UInt64 returns Int64 + floor_division UInt128 // UInt64 returns UInt128 floor_division UInt128 // UInt64 returns UInt128 + floor_division Float64 // Int128 returns Float64 floor_division Float64 // Int128 returns Float64 + #round_even assert assert assert assert assert assert @@ -16225,27 +14722,172 @@ assert assert assert assert assert assert - does * does * - rjust assert assert assert assert assert assert - to io - assert assert - assert assert - assert assert - assert assert assert assert - compares strings: same size, same string compares strings: same size, same string - compares strings: different size compares strings: different size - does to_f does to_f - multiplies with negative size multiplies with negative size - rstrip assert assert assert assert + converts from Float32 to UInt16 converts from Float32 to UInt16 + converts from Int32 to Int64 converts from Int32 to Int64 + converts from UInt16 to UInt8 converts from UInt16 to UInt8 + floor_division Int16 // UInt32 returns Int16 floor_division Int16 // UInt32 returns Int16 + converts from Float64 to Int128 converts from Float64 to Int128 + converts from UInt128 to Int32 converts from UInt128 to Int32 + converts from Float64 to Int8 converts from Float64 to Int8 + floor_division Float64 // Float64 returns Float64 floor_division Float64 // Float64 returns Float64 + converts from UInt8 to Int32 converts from UInt8 to Int32 + division between Int32 / UInt32 returns Float64 division between Int32 / UInt32 returns Float64 + division between Int8 / Int16 returns Float64 division between Int8 / Int16 returns Float64 + converts from Int64 to Int32 converts from Int64 to Int32 + floor_division UInt16 // UInt128 returns UInt16 floor_division UInt16 // UInt128 returns UInt16 + floor_division UInt64 // UInt64 returns UInt64 floor_division UInt64 // UInt64 returns UInt64 + floor_division UInt32 // Int8 returns UInt32 floor_division UInt32 // Int8 returns UInt32 + division between UInt32 / Int32 returns Float64 division between UInt32 / Int32 returns Float64 + floor_division UInt8 // Int32 returns UInt8 floor_division UInt8 // Int32 returns UInt8 + initialize from value to Int16 initialize from value to Int16 + division between Float32 / UInt64 returns Float32 division between Float32 / UInt64 returns Float32 + converts from Int64 to UInt64 converts from Int64 to UInt64 + converts from Int8 to Float64 converts from Int8 to Float64 + floor_division Int8 // UInt8 returns Int8 floor_division Int8 // UInt8 returns Int8 + division between Int32 / Int128 returns Float64 division between Int32 / Int128 returns Float64 + converts from UInt16 to UInt32 converts from UInt16 to UInt32 + floor_division Float32 // Int128 returns Float32 floor_division Float32 // Int128 returns Float32 + significant + 10 base 10 base + 8 base 8 base + preserves type preserves type + 2 base 2 base + converts from Float64 to UInt64 converts from Float64 to UInt64 + converts from UInt8 to Float32 converts from UInt8 to Float32 + division between UInt128 / Int128 returns Float64 division between UInt128 / Int128 returns Float64 + division between Float64 / UInt64 returns Float64 division between Float64 / UInt64 returns Float64 + floor_division UInt128 // Int64 returns UInt128 floor_division UInt128 // Int64 returns UInt128 + converts from UInt8 to UInt64 converts from UInt8 to UInt64 + floor_division UInt8 // UInt8 returns UInt8 floor_division UInt8 // UInt8 returns UInt8 + converts from UInt8 to Int64 converts from UInt8 to Int64 + division between Int128 / UInt128 returns Float64 division between Int128 / UInt128 returns Float64 + converts from UInt16 to Float64 converts from UInt16 to Float64 + floor_division Int128 // Float64 returns Int128 floor_division Int128 // Float64 returns Int128 + division between UInt128 / Int8 returns Float64 division between UInt128 / Int8 returns Float64 + division between UInt16 / Int128 returns Float64 division between UInt16 / Int128 returns Float64 + floor_division Int64 // UInt8 returns Int64 floor_division Int64 // UInt8 returns Int64 + converts from UInt128 to UInt128 converts from UInt128 to UInt128 + converts from UInt8 to UInt64 converts from UInt8 to UInt64 + floor_division Int128 // UInt8 returns Int128 floor_division Int128 // UInt8 returns Int128 + division between Int32 / UInt64 returns Float64 division between Int32 / UInt64 returns Float64 + converts from Int32 to Float64 converts from Int32 to Float64 + floor_division UInt64 // Int16 returns UInt64 floor_division UInt64 // Int16 returns UInt64 + converts from Int32 to Int16 converts from Int32 to Int16 + converts from UInt32 to UInt8 converts from UInt32 to UInt8 + floor_division UInt128 // UInt32 returns UInt128 floor_division UInt128 // UInt32 returns UInt128 + division between UInt128 / Int16 returns Float64 division between UInt128 / Int16 returns Float64 + converts from Int64 to UInt128 converts from Int64 to UInt128 + converts from UInt128 to Int8 converts from UInt128 to Int8 + converts from Int32 to UInt64 converts from Int32 to UInt64 + floor_division Int128 // Int16 returns Int128 floor_division Int128 // Int16 returns Int128 + initialize from value to UInt128 initialize from value to UInt128 + converts from Int8 to UInt128 converts from Int8 to UInt128 + converts from UInt16 to UInt8 converts from UInt16 to UInt8 + division between Float32 / Int128 returns Float32 division between Float32 / Int128 returns Float32 + division between Int64 / UInt64 returns Float64 division between Int64 / UInt64 returns Float64 + converts from Float32 to UInt64 converts from Float32 to UInt64 + floor_division Int32 // Int128 returns Int32 floor_division Int32 // Int128 returns Int32 + initialize from value to Int8 initialize from value to Int8 + converts from Float64 to Int16 converts from Float64 to Int16 + floor_division UInt16 // Float64 returns UInt16 floor_division UInt16 // Float64 returns UInt16 + floor_division Int16 // UInt128 returns Int16 floor_division Int16 // UInt128 returns Int16 + converts from UInt128 to Int32 converts from UInt128 to Int32 + converts from Int8 to Int64 converts from Int8 to Int64 + division between Int32 / UInt8 returns Float64 division between Int32 / UInt8 returns Float64 + division between Int64 / UInt32 returns Float64 division between Int64 / UInt32 returns Float64 + floor_division UInt64 // UInt16 returns UInt64 floor_division UInt64 // UInt16 returns UInt64 + converts from Int16 to UInt16 converts from Int16 to UInt16 + converts from Int64 to Int8 converts from Int64 to Int8 + converts from Float32 to Int16 converts from Float32 to Int16 + unchecked initialize from value to Float64 unchecked initialize from value to Float64 + converts from Float32 to Int32 converts from Float32 to Int32 + converts from UInt8 to UInt128 converts from UInt8 to UInt128 + converts from Int64 to UInt16 converts from Int64 to UInt16 + floor_division Int8 // Float64 returns Int8 floor_division Int8 // Float64 returns Int8 + floor_division Int16 // UInt16 returns Int16 floor_division Int16 // UInt16 returns Int16 + initialize from value to UInt8 initialize from value to UInt8 + converts from Int32 to Float64 converts from Int32 to Float64 + floor_division Int128 // UInt16 returns Int128 floor_division Int128 // UInt16 returns Int128 + converts from Int8 to UInt16 converts from Int8 to UInt16 + floor_division Float32 // Int16 returns Float32 floor_division Float32 // Int16 returns Float32 + converts from Float64 to UInt16 converts from Float64 to UInt16 + converts from UInt8 to UInt8 converts from UInt8 to UInt8 + converts from Int128 to UInt128 converts from Int128 to UInt128 + converts from Int32 to Int64 converts from Int32 to Int64 + converts from Int64 to UInt32 converts from Int64 to UInt32 + division between UInt128 / Int32 returns Float64 division between UInt128 / Int32 returns Float64 + converts from UInt64 to Int8 converts from UInt64 to Int8 + floor_division Int32 // Int64 returns Int32 floor_division Int32 // Int64 returns Int32 + converts from UInt32 to Int128 converts from UInt32 to Int128 + converts from Int8 to UInt128 converts from Int8 to UInt128 + floor_division UInt128 // Int16 returns UInt128 floor_division UInt128 // Int16 returns UInt128 + converts from Int128 to Float32 converts from Int128 to Float32 + converts from Int16 to Int128 converts from Int16 to Int128 + converts from UInt16 to UInt128 converts from UInt16 to UInt128 + converts from Int8 to UInt64 converts from Int8 to UInt64 + division between UInt64 / UInt16 returns Float64 division between UInt64 / UInt16 returns Float64 + division between UInt128 / Int64 returns Float64 division between UInt128 / Int64 returns Float64 + division between Int32 / Int8 returns Float64 division between Int32 / Int8 returns Float64 + converts from UInt128 to UInt32 converts from UInt128 to UInt32 + converts from Int16 to Int64 converts from Int16 to Int64 + division between Int32 / Int64 returns Float64 division between Int32 / Int64 returns Float64 + floor_division UInt32 // UInt64 returns UInt32 floor_division UInt32 // UInt64 returns UInt32 + converts from Int64 to UInt64 converts from Int64 to UInt64 + converts from Float32 to UInt32 converts from Float32 to UInt32 + converts from Int16 to UInt128 converts from Int16 to UInt128 + floor_division Int64 // Int128 returns Int64 floor_division Int64 // Int128 returns Int64 + floor_division Int32 // Float64 returns Int32 floor_division Int32 // Float64 returns Int32 + converts from UInt8 to UInt32 converts from UInt8 to UInt32 + converts from Float64 to Int128 converts from Float64 to Int128 + floor_division Int8 // Float32 returns Int8 floor_division Int8 // Float32 returns Int8 + converts from Float64 to UInt8 converts from Float64 to UInt8 + floor_division Int8 // UInt64 returns Int8 floor_division Int8 // UInt64 returns Int8 + division between Int128 / Int8 returns Float64 division between Int128 / Int8 returns Float64 + converts from UInt32 to Int8 converts from UInt32 to Int8 + division between UInt128 / UInt128 returns Float64 division between UInt128 / UInt128 returns Float64 + converts from Int32 to UInt16 converts from Int32 to UInt16 + floor_division UInt32 // Int32 returns UInt32 floor_division UInt32 // Int32 returns UInt32 + division between Int128 / UInt64 returns Float64 division between Int128 / UInt64 returns Float64 + floor_division Int32 // Float32 returns Int32 floor_division Int32 // Float32 returns Int32 + division between UInt64 / UInt8 returns Float64 division between UInt64 / UInt8 returns Float64 + converts from UInt128 to Float32 converts from UInt128 to Float32 + converts from Int8 to Int32 converts from Int8 to Int32 + floor_division UInt128 // UInt16 returns UInt128 floor_division UInt128 // UInt16 returns UInt128 + floor_division Int8 // Int32 returns Int8 floor_division Int8 // Int32 returns Int8 + floor_division UInt8 // UInt32 returns UInt8 floor_division UInt8 // UInt32 returns UInt8 + converts from UInt8 to Int128 converts from UInt8 to Int128 + converts from UInt8 to Float64 converts from UInt8 to Float64 + floor_division Float64 // UInt64 returns Float64 floor_division Float64 // UInt64 returns Float64 + division between UInt8 / UInt32 returns Float64 division between UInt8 / UInt32 returns Float64 + converts from UInt8 to UInt128 converts from UInt8 to UInt128 + floor_division Int64 // Int16 returns Int64 floor_division Int64 // Int16 returns Int64 + division between UInt16 / Int16 returns Float64 division between UInt16 / Int16 returns Float64 + division between Int128 / Int32 returns Float64 division between Int128 / Int32 returns Float64 + floor_division Int64 // Int64 returns Int64 floor_division Int64 // Int64 returns Int64 + converts from UInt16 to UInt64 converts from UInt16 to UInt64 + converts from Float64 to Float64 converts from Float64 to Float64 + converts from UInt64 to UInt16 converts from UInt64 to UInt16 + initialize from value to UInt16 initialize from value to UInt16 +OAuth2::AccessToken::Bearer + dumps to json dumps to json + builds from json builds from json + authenticates request authenticates request + builds from json with unknown key (#4437) builds from json with unknown key (#4437) + builds from json without token_type, assumes Bearer (#4503) builds from json without token_type, assumes Bearer (#4503) + builds from json without expires_in (#4041) builds from json without expires_in (#4041) +Benchmark::IPS::Entry + #set_cycles + sets the number of cycles needed to make 100ms sets the number of cycles needed to make 100ms + sets the cycles to 1 no matter what sets the cycles to 1 no matter what + #human_mean assert assert assert assert - does not touch invalid code units in an otherwise ascii string does not touch invalid code units in an otherwise ascii string assert assert assert assert assert assert @@ -16257,54 +14899,10 @@ assert assert assert assert assert assert - #reverse - reverses string reverses string - converts invalid code units to replacement char converts invalid code units to replacement char - reverses taking grapheme clusters into account reverses taking grapheme clusters into account - reverses utf-8 string reverses utf-8 string - multiplies multiplies - does to_f32 does to_f32 - raises if String.build negative capacity raises if String.build negative capacity - #match_full #match_full - has size (same as size) has size (same as size) - "#each_line(chomp: false)" yielding "#each_line(chomp: false)" yielding - #gsub - gsubs with regex and string gsubs with regex and string - gsubs char with string (nop) gsubs char with string (nop) - gsubs with regex and string, returns self if no match gsubs with regex and string, returns self if no match - gsubs with char named tuple gsubs with char named tuple - replaces with numeric back-reference replaces with numeric back-reference - gsubs with regex and string (utf-8) gsubs with regex and string (utf-8) - gsubs null character gsubs null character - gsubs with regex and block gsubs with regex and block - replaces with back-reference to missing capture group replaces with back-reference to missing capture group - gsubs with empty regex gsubs with empty regex - gsubs with empty string gsubs with empty string - ignores if backreferences: false ignores if backreferences: false - gsubs with regex and named tuple gsubs with regex and named tuple - gsubs with char hash gsubs with char hash - gsubs char with string gsubs char with string - gsubs char with string depending on the char gsubs char with string depending on the char - gsubs with regex and block with group gsubs with regex and block with group - raises with incomplete back-reference (1) raises with incomplete back-reference (1) - gsubs with string and block gsubs with string and block - gsubs with string and string return self if no match gsubs with string and string return self if no match - raises with incomplete back-reference (2) raises with incomplete back-reference (2) - empty match empty match - gsubs with regex and hash gsubs with regex and hash - gsubs with string and string gsubs with string and string - replaces with incomplete back-reference (2) replaces with incomplete back-reference (2) - replaces with escaped back-reference replaces with escaped back-reference - replaces with named back-reference replaces with named back-reference - gsubs using $~ gsubs using $~ - gsubs char with char gsubs char with char - replaces with incomplete back-reference (3) replaces with incomplete back-reference (3) - replaces with incomplete back-reference (1) replaces with incomplete back-reference (1) - empty string empty string - gsubs with string and string (utf-8) gsubs with string and string (utf-8) - gsubs char with char in non-ascii string gsubs char with char in non-ascii string - lchop assert assert + #calculate_stats + correctly calculates basic stats correctly calculates basic stats + #human_iteration_time assert assert assert assert assert assert @@ -16316,597 +14914,389 @@ assert assert assert assert assert assert - does chars does chars - does each_char does each_char - presence assert assert assert assert assert assert - escapes with octal escapes with octal - #inspect_unquoted #inspect_unquoted - does each_char_with_index, with offset does each_char_with_index, with offset - has codepoints has codepoints - tr - given no replacement characters - acts as #delete acts as #delete - translates translates - creating from a pointer - raises when creating from a null pointer with a nonzero size raises when creating from a null pointer with a nonzero size - allows creating a string with zeros allows creating a string with zeros - doesn't raise creating from a null pointer with size 0 doesn't raise creating from a null pointer with size 0 - raises an exception when creating a string with a null pointer and no size raises an exception when creating a string with a null pointer and no size - gets size of \0 string gets size of \0 string - "#each_char with empty string" iterator "#each_char with empty string" iterator - includes? - by char - assert assert - assert assert - by string - assert assert - assert assert - assert assert - #inspect #inspect - scans using $~ scans using $~ - does % does % -JSON::Lexer - lexes "\uD840\uDC00" from IO lexes "\uD840\uDC00" from IO - lexes 0.1e1 from String lexes 0.1e1 from String - lexes 6000000000000000000.0 from String lexes 6000000000000000000.0 from String - lexes 1E2 from IO lexes 1E2 from IO - lexes -1.23e4 from String lexes -1.23e4 from String - lexes "hello\rworld" from String lexes "hello\rworld" from String - lexes 0e+12 from String lexes 0e+12 from String - lexes 9876543212345678987654321e20 from IO lexes 9876543212345678987654321e20 from IO - lexes : from IO lexes : from IO - lexes 1 from String lexes 1 from String - lexes - : from IO lexes - : from IO - lexes 0e+12 from IO lexes 0e+12 from IO - lexes -1 from IO lexes -1 from IO - lexes 1000000000000000000.0 from IO lexes 1000000000000000000.0 from IO - errors if lexing "\uDC00" from IO errors if lexing "\uDC00" from IO - lexes "hello\"world" from String lexes "hello\"world" from String - lexes "\uD800\uDC00" from IO lexes "\uD800\uDC00" from IO - lexes - : from string lexes - : from string - lexes "hello" from IO lexes "hello" from IO - lexes "hello\nworld" from String lexes "hello\nworld" from String - lexes 9000000000000000000.0 from IO lexes 9000000000000000000.0 from IO - lexes "hello\fworld" from String lexes "hello\fworld" from String - lexes 0 from String lexes 0 from String - lexes -1.23 from String lexes -1.23 from String - lexes [ from IO lexes [ from IO - lexes , from IO lexes , from IO - errors if lexing "\uDC00" from String errors if lexing "\uDC00" from String - lexes "hello" from String lexes "hello" from String - lexes { from string lexes { from string - lexes "\u201chello world\u201d" from String lexes "\u201chello world\u201d" from String - lexes "hello\"world" from IO lexes "hello\"world" from IO - lexes -1.23 from IO lexes -1.23 from IO - errors if lexing "\uD800\u0020" from IO errors if lexing "\uD800\u0020" from IO - lexes from IO lexes from IO - lexes true from string lexes true from string - lexes -1.23e4 from IO lexes -1.23e4 from IO - lexes from string lexes from string - lexes false from string lexes false from string - lexes 1e2 from String lexes 1e2 from String - lexes ] from IO lexes ] from IO - lexes } from IO lexes } from IO - lexes 9.91343313498688 from String lexes 9.91343313498688 from String - lexes true from IO lexes true from IO - lexes "hello\/world" from String lexes "hello\/world" from String - lexes "\uD834\uDD1E" from IO lexes "\uD834\uDD1E" from IO - lexes 0e-12 from IO lexes 0e-12 from IO - lexes "hello\\world" from IO lexes "hello\\world" from IO - lexes 1.2e-3 from String lexes 1.2e-3 from String - lexes "hello\fworld" from IO lexes "hello\fworld" from IO - errors if lexing "\uD800\u0020" from String errors if lexing "\uD800\u0020" from String - lexes null from string lexes null from string - lexes 0.1e1 from IO lexes 0.1e1 from IO - lexes -1.23e4 from IO lexes -1.23e4 from IO - lexes [ from string lexes [ from string - lexes 0E1 from IO lexes 0E1 from IO - lexes 1234 from IO lexes 1234 from IO - lexes 9876543212345678987654321.0 from String lexes 9876543212345678987654321.0 from String - lexes 9000000000000000000.0 from String lexes 9000000000000000000.0 from String - lexes 1e+12 from String lexes 1e+12 from String - lexes 6000000000000000000.0 from IO lexes 6000000000000000000.0 from IO - lexes 1234 from String lexes 1234 from String - lexes 0.123 from IO lexes 0.123 from IO - lexes 9.91343313498688 from IO lexes 9.91343313498688 from IO - lexes 0e-12 from String lexes 0e-12 from String - lexes null from IO lexes null from IO - lexes "\uD840\uDC00" from String lexes "\uD840\uDC00" from String - lexes 1234.567 from String lexes 1234.567 from String - lexes "\uDBFF\uDFFF" from String lexes "\uDBFF\uDFFF" from String - lexes "\uDBFF\uDFFF" from IO lexes "\uDBFF\uDFFF" from IO - lexes 1 from IO lexes 1 from IO - lexes 10.100000000000000000000 from String lexes 10.100000000000000000000 from String - lexes false from IO lexes false from IO - lexes 1234.567 from IO lexes 1234.567 from IO - lexes -1.23e4 from String lexes -1.23e4 from String - lexes : from string lexes : from string - lexes "hello\nworld" from IO lexes "hello\nworld" from IO - lexes 1E2 from String lexes 1E2 from String - lexes -1 from String lexes -1 from String - errors if lexing "\uD800" from IO errors if lexing "\uD800" from IO - lexes 1e2 from IO lexes 1e2 from IO - lexes "hello\\world" from String lexes "hello\\world" from String - lexes 10.100000000000000000000 from IO lexes 10.100000000000000000000 from IO - lexes 0e1 from IO lexes 0e1 from IO - lexes "\uD800\uDC00" from String lexes "\uD800\uDC00" from String - lexes 1e+12 from IO lexes 1e+12 from IO - lexes "hello\rworld" from IO lexes "hello\rworld" from IO - lexes 0 from IO lexes 0 from IO - lexes "\u201chello world\u201d" from IO lexes "\u201chello world\u201d" from IO - lexes "\uD834\uDD1E" from String lexes "\uD834\uDD1E" from String - lexes , from string lexes , from string - lexes 0.123 from String lexes 0.123 from String - lexes 9876543212345678987654321.0 from IO lexes 9876543212345678987654321.0 from IO - lexes "hello\bworld" from String lexes "hello\bworld" from String - lexes "hello\bworld" from IO lexes "hello\bworld" from IO - lexes 1.2e-3 from IO lexes 1.2e-3 from IO - lexes "hello\tworld" from String lexes "hello\tworld" from String - lexes ] from string lexes ] from string - lexes 0E1 from String lexes 0E1 from String - lexes { from IO lexes { from IO - lexes 0e1 from String lexes 0e1 from String - lexes "hello\/world" from IO lexes "hello\/world" from IO - lexes } from string lexes } from string - lexes 1000000000000000000.0 from String lexes 1000000000000000000.0 from String - lexes 9876543212345678987654321e20 from String lexes 9876543212345678987654321e20 from String - lexes "hello\tworld" from IO lexes "hello\tworld" from IO - errors if lexing "\uD800" from String errors if lexing "\uD800" from String -Compress::Zip - reads file from file system reads file from file system - reads zip file with different extra in local file header and central directory header reads zip file with different extra in local file header and central directory header - reads file from memory reads file from memory - writes comment writes comment - reads zip comment reads zip comment - reads big file reads big file - writes over int16 files to make sure we can parse writes over int16 files to make sure we can parse -IO::Sized - gets gets - read_byte read_byte - #close - stops reading stops reading - closes the underlying stream if sync_close is true closes the underlying stream if sync_close is true - doesn't peek when remaining = 0 (#4261) doesn't peek when remaining = 0 (#4261) - peeks peeks - gets with chomp = false gets with chomp = false - #write - raises raises - #read - doesn't read past the limit when reading the correct size doesn't read past the limit when reading the correct size - allows extending the size allows extending the size - raises on negative numbers raises on negative numbers - reads partially when supplied with a larger slice reads partially when supplied with a larger slice - doesn't read past the limit when reading char-by-char doesn't read past the limit when reading char-by-char - skips skips -Spec::TAPFormatter - reports failures reports failures - reports successful results reports successful results - reports errors reports errors - reports mixed results reports mixed results - reports pending reports pending +HTTP::FormData::Parser + parses formdata parses formdata +__umodti3 + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests +HTML + .escape + escapes dangerous characters from a string escapes dangerous characters from a string + does not change a safe string does not change a safe string + .unescape + unescapes javascript example from a string unescapes javascript example from a string + invalid utf-8 invalid utf-8 + identity identity + named entities + multi codepoint multi codepoint + invalid entities invalid entities + end of string end of string + without trailing semicolon without trailing semicolon + entity with numerical characters entity with numerical characters + simple named entities simple named entities + empty entity empty entity + numeric entities + hex hex + does not escape unicode surrogate characters does not escape unicode surrogate characters + decimal decimal + does not escape noncharacter codepoints does not escape noncharacter codepoints + space characters space characters + does not unescape characters above Char::MAX_CODEPOINT does not unescape characters above Char::MAX_CODEPOINT + ISO-8859-1 replacement ISO-8859-1 replacement + does not escape non-space unicode control characters does not escape non-space unicode control characters + early termination early termination + does not unescape Char::MAX_CODEPOINT does not unescape Char::MAX_CODEPOINT + ignores leading zeros ignores leading zeros +HTTP::Params + is alias for URI::Params is alias for URI::Params PrettyPrint - pretty prints hello 13..13 pretty prints hello 13..13 - pretty prints width 7 indent 20 pretty prints width 7 indent 20 - pretty prints fill 7..10 pretty prints fill 7..10 + pretty prints fill 23..26 pretty prints fill 23..26 + pretty prints tree alt 19..20 pretty prints tree alt 19..20 + tail group tail group + pretty prints tree 20..22 pretty prints tree 20..22 + pretty prints hello 0..6 pretty prints hello 0..6 pretty prints width 0 indent 23 pretty prints width 0 indent 23 + pretty prints width 5 indent 20 pretty prints width 5 indent 20 pretty prints strict pretty 6..6 pretty prints strict pretty 6..6 + pretty prints tree alt 50..50 pretty prints tree alt 50..50 + pretty prints strict pretty 10..10 pretty prints strict pretty 10..10 + pretty prints tree 23..43 pretty prints tree 23..43 + pretty prints tree alt 0..18 pretty prints tree alt 0..18 + pretty prints strict pretty 8..8 pretty prints strict pretty 8..8 + pretty prints strict pretty 0..4 pretty prints strict pretty 0..4 + pretty prints strict pretty 11..31 pretty prints strict pretty 11..31 + pretty prints fill 7..10 pretty prints fill 7..10 pretty prints strict pretty 9..9 pretty prints strict pretty 9..9 - pretty prints strict pretty 7..7 pretty prints strict pretty 7..7 - pretty prints fill 11..14 pretty prints fill 11..14 pretty prints strict pretty 5..5 pretty prints strict pretty 5..5 - pretty prints width 6 indent 20 pretty prints width 6 indent 20 - pretty prints strict pretty 11..31 pretty prints strict pretty 11..31 - pretty prints hello 7..8 pretty prints hello 7..8 - pretty prints tree alt 0..18 pretty prints tree alt 0..18 - pretty prints width 5 indent 20 pretty prints width 5 indent 20 - pretty prints strict pretty 32..32 pretty prints strict pretty 32..32 - pretty prints hello 0..6 pretty prints hello 0..6 + pretty prints tree alt 21..49 pretty prints tree alt 21..49 pretty prints hello 11..12 pretty prints hello 11..12 + pretty prints fill 0..6 pretty prints fill 0..6 pretty prints fill 19..22 pretty prints fill 19..22 - pretty prints strict pretty 0..4 pretty prints strict pretty 0..4 - pretty prints strict pretty 8..8 pretty prints strict pretty 8..8 - pretty prints tree alt 50..50 pretty prints tree alt 50..50 - pretty prints tree alt 19..20 pretty prints tree alt 19..20 - pretty prints tree 0..19 pretty prints tree 0..19 - pretty prints tree 44..44 pretty prints tree 44..44 - pretty prints tree 20..22 pretty prints tree 20..22 - pretty prints tree alt 21..49 pretty prints tree alt 21..49 - tail group tail group - pretty prints fill 15..18 pretty prints fill 15..18 - pretty prints fill 23..26 pretty prints fill 23..26 - pretty prints tree 23..43 pretty prints tree 23..43 + pretty prints strict pretty 32..32 pretty prints strict pretty 32..32 pretty prints hello 9..10 pretty prints hello 9..10 - pretty prints strict pretty 10..10 pretty prints strict pretty 10..10 - pretty prints fill 0..6 pretty prints fill 0..6 + pretty prints strict pretty 7..7 pretty prints strict pretty 7..7 pretty prints fill 27..27 pretty prints fill 27..27 -Spec - list_tags - lists the count of all tags lists the count of all tags - lists the count of slow tags lists the count of slow tags - does nothing if there are no examples does nothing if there are no examples -.__multi3 .__multi3 -IO::ByteFormat - little endian - encode - to slice - writes int8 writes int8 - writes int16 to larger slice writes int16 to larger slice - writes int16 writes int16 - to io - writes int16 writes int16 - writes uint16 writes uint16 - writes int32 writes int32 - writes float32 writes float32 - writes int8 writes int8 - writes float64 writes float64 - writes int64 writes int64 - decode - from slice - reads int16 from larger slice reads int16 from larger slice - reads float64 reads float64 - reads float32 reads float32 - reads int16 reads int16 - reads int8 reads int8 - from io - reads int32 reads int32 - reads int64 reads int64 - reads unt16 reads unt16 - reads int8 reads int8 - reads int16 reads int16 - reads float32 reads float32 - reads float64 reads float64 - big endian - decode - from slice - reads float64 reads float64 - reads int16 reads int16 - reads float32 reads float32 - reads int8 reads int8 - from io - reads float32 reads float32 - reads int16 reads int16 - reads int32 reads int32 - reads unt16 reads unt16 - reads int8 reads int8 - reads float64 reads float64 - reads int64 reads int64 - encode - writes float64 writes float64 - writes int64 writes int64 - writes int16 writes int16 - writes int8 writes int8 - writes float32 writes float32 - writes int32 writes int32 -Log::Metadata::Value - accessors accessors - initialize initialize - json json -LLVM::ABI::AVR - size - for array for array - for struct for struct - for pointer for pointer - for packed struct for packed struct - for integer for integer - for float for float - for double for double - align - for integer for integer - for packed struct for packed struct - for pointer for pointer - for float for float - for double for double - for array for array - for struct for struct - abi_info - struct args over 18 bytes struct args over 18 bytes - int1 int1 - int16 int16 - int8 int8 - struct args within 18 bytes struct args within 18 bytes - int32 int32 - multiple arguments above registers multiple arguments above registers - returns struct within 8 bytes returns struct within 8 bytes - int64 int64 - float float - multiple arguments multiple arguments - returns struct over 8 bytes returns struct over 8 bytes - double double -Struct - does dup does dup - should retrieve multiple descendants from hashed data structure should retrieve multiple descendants from hashed data structure - does to_s does to_s - does hash does hash - clones with def_clone clones with def_clone - does == does == - does hash for struct wrapper (#1940) does hash for struct wrapper (#1940) -OAuth::AccessToken - creates from response body creates from response body -Log::AsyncDispatcher - wait for entries to flush before closing wait for entries to flush before closing - can be closed twice can be closed twice - dispatches entry dispatches entry -BigFloat - #to_f - assert assert - assert assert - assert assert - #round - rounding modes - ties_away ties_away - ties_even ties_even - default (=ties_even) default (=ties_even) - to_zero to_zero - to_positive to_positive - to_negative to_negative - #/ - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - to_s - converts to 150.0 converts to 150.0 - converts to 2.2250738585072014e-308 converts to 2.2250738585072014e-308 - converts to -0.01 converts to -0.01 - assert assert - converts to 1.0e-234 converts to 1.0e-234 - converts to 0.1 converts to 0.1 - assert assert - converts to 9.000000000000987 converts to 9.000000000000987 - converts to -0.1 converts to -0.1 - converts to 1.2345678901234567e+16 converts to 1.2345678901234567e+16 - assert assert - converts to 0.0 converts to 0.0 - assert assert - converts to 1.0e-6 converts to 1.0e-6 - converts to 1.234567890123456789e+18 converts to 1.234567890123456789e+18 - converts to 10.0 converts to 10.0 - converts to 100.0 converts to 100.0 - converts to 3.0 converts to 3.0 - converts to 0.01 converts to 0.01 - assert assert - converts to -3.0 converts to -3.0 - converts to -1.0 converts to -1.0 - converts to 48600000.0 converts to 48600000.0 - converts to 12345678.87654321 converts to 12345678.87654321 - converts to 1.23e+45 converts to 1.23e+45 - converts to 12345678.87654 converts to 12345678.87654 - assert assert - converts to 1.0 converts to 1.0 - assert assert - converts to 3.0 converts to 3.0 - converts to 1.7976931348623157e+308 converts to 1.7976931348623157e+308 - assert assert - assert assert - converts to 0.0 converts to 0.0 - #to_u - assert assert - assert assert - assert assert - assert assert - #to_u64! - basic basic - doesn't raise on overflow doesn't raise on overflow - #// - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - #to_i - assert assert - assert assert - assert assert - clones clones - #to_u! - assert assert - assert assert - assert assert - #abs - assert assert - assert assert - assert assert + pretty prints fill 15..18 pretty prints fill 15..18 + pretty prints hello 7..8 pretty prints hello 7..8 + pretty prints hello 13..13 pretty prints hello 13..13 + pretty prints tree 0..19 pretty prints tree 0..19 + pretty prints width 7 indent 20 pretty prints width 7 indent 20 + pretty prints width 6 indent 20 pretty prints width 6 indent 20 + pretty prints fill 11..14 pretty prints fill 11..14 + pretty prints tree 44..44 pretty prints tree 44..44 +Process::Status + #signal_exit? #signal_exit? + #exit_reason + returns Aborted returns Aborted + returns TerminalDisconnected returns TerminalDisconnected + returns Breakpoint returns Breakpoint + returns BadInstruction returns BadInstruction + returns Normal returns Normal + returns AccessViolation returns AccessViolation + returns SessionEnded returns SessionEnded + returns Interrupted returns Interrupted + returns FloatException returns FloatException + returns BadMemoryAccess returns BadMemoryAccess + #exit_code #exit_code + equality equality + #inspect + with exit signal with exit signal + with exit status with exit status + #success? #success? + #signal_exit? with signal code #signal_exit? with signal code + #to_s + with exit status with exit status + with exit signal with exit signal + #normal_exit? #normal_exit? + #exit_signal #exit_signal + #normal_exit? with signal code #normal_exit? with signal code +Double + ** assert assert - #to_u64 - basic basic assert assert assert assert +Socket::UNIXAddress + transforms into a C struct and back transforms into a C struct and back + to_s to_s + #== #== + .parse + parses absolute parses absolute + fails with missing path fails with missing path + parses relative subpath parses relative subpath + relative with relative with + parses relative dot parses relative dot + parses relative parses relative + ignores params ignores params + raises when path is too long raises when path is too long +HTTP::Handler + responds with not found if there's no next handler responds with not found if there's no next handler +URI + .reserved? .reserved? + .from_json .from_json + .set_default_port + treats scheme case insensitively treats scheme case insensitively + unregisters port for scheme unregisters port for scheme + registers port for scheme registers port for scheme + #normalize + removes default port removes default port + prefixes relative path with colon with `./` prefixes relative path with colon with `./` + normalizes scheme normalizes scheme + doesn't modify instance doesn't modify instance + removes dot notation from path removes dot notation from path + normalizes host normalizes host + #normalize! + modifies the instance modifies the instance + #query_params + when there is no query parameters + returns an empty instance of URI::Params returns an empty instance of URI::Params + returns a URI::Params instance based on the query parameters returns a URI::Params instance based on the query parameters + .default_port + returns nil for unknown schemes returns nil for unknown schemes + treats scheme case insensitively treats scheme case insensitively + returns default port for well known schemes returns default port for well known schemes + #relativize + fragment fragment + opaque base opaque base + ignore base path with dot-segments ignore base path with dot-segments + path relative references path relative references + RFC 3986: 5.4.2. Abnormal Examples RFC 3986: 5.4.2. Abnormal Examples + RFC 3986: 5.4.1. Normal Examples RFC 3986: 5.4.1. Normal Examples + identical identical + relative base relative base + encoded characters encoded characters + ... ... + absolute URI references absolute URI references + #hash assert assert - #** + #query_params= + params with values params with values + empty empty + .parse + unescaped @ in user/password should not confuse host unescaped @ in user/password should not confuse host + `https://alice@www.example.com` `https://alice@www.example.com` assert assert + `test:/test` `test:/test` + `/foo` `/foo` + `http://[::1]:81/` `http://[::1]:81/` + `http://:8000/foo` `http://:8000/foo` + `foo/another@url/[]and{}` `foo/another@url/[]and{}` + `http://[fe80::1%25en0]:8080/` `http://[fe80::1%25en0]:8080/` + `file:///C:/FooBar/Baz.txt` `file:///C:/FooBar/Baz.txt` + `/foo?q=1` `/foo?q=1` + `http:?` `http:?` + `https://alice:pa55w0rd@www.example.com` `https://alice:pa55w0rd@www.example.com` + `magnet:?xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a&dn` `magnet:?xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a&dn` + `tcp://[2020::2020:20:2020:2020%25Windows%20Loves%20Spaces]:2020` `tcp://[2020::2020:20:2020:2020%25Windows%20Loves%20Spaces]:2020` + `http://?` `http://?` assert assert + `http://www.example.com` `http://www.example.com` assert assert + `tel:+1-816-555-1212` `tel:+1-816-555-1212` + `http://user@` `http://user@` + `http://www.example.com:81` `http://www.example.com:81` assert assert + `https://alice:@www.example.com` `https://alice:@www.example.com` + `?a+b=c%2Bd` `?a+b=c%2Bd` + `///foo` `///foo` + `http://#` `http://#` + `?query=http://example.com` `?query=http://example.com` + `telnet://192.0.2.16:80/` `telnet://192.0.2.16:80/` + `news:comp.infosystems.www.servers.unix` `news:comp.infosystems.www.servers.unix` + `//user@foo/path?q=b` `//user@foo/path?q=b` + `http://192.0.2.16:81/` `http://192.0.2.16:81/` + `http:` `http:` + `http://www.example.com/foo?` `http://www.example.com/foo?` + `http://:8000` `http://:8000` + `http:#` `http:#` + `http://www.example.com/foo?q=1` `http://www.example.com/foo?q=1` + `?q=1` `?q=1` + `https://%3AD:%40_%40@www.example.com` `https://%3AD:%40_%40@www.example.com` + `http://www.foo-bar.example.com` `http://www.foo-bar.example.com` + `mysql://a,b,c/bar` `mysql://a,b,c/bar` + `http:?#` `http:?#` + `http://www.example.com:81/` `http://www.example.com:81/` + `file://localhost/etc/fstab` `file://localhost/etc/fstab` + `file:///etc/fstab` `file:///etc/fstab` + `https://example.com./` `https://example.com./` + `?q=1?` `?q=1?` + `http://[::1]:81` `http://[::1]:81` + `scheme://!$&'()*+,;=hello!:12/path` `scheme://!$&'()*+,;=hello!:12/path` + `mailto:foo@example.org` `mailto:foo@example.org` + `//foo` `//foo` + `//user:pass@bitfission.com:8080/path?a=b#frag` `//user:pass@bitfission.com:8080/path?a=b#frag` + `http://www.example.com/foo` `http://www.example.com/foo` + `http:` `http:` + `http://www.example.com/` `http://www.example.com/` + `https://example.com.:8443/` `https://example.com.:8443/` + `ldap://[2001:db8::7]/c=GB?objectClass?one` `ldap://[2001:db8::7]/c=GB?objectClass?one` + `http://?#` `http://?#` + `https://www.example.com/#top` `https://www.example.com/#top` + bad urls + assert assert + `http://192.0.2.16:81` `http://192.0.2.16:81` + `/path?a=b#frag` `/path?a=b#frag` + `http://` `http://` + `urn:oasis:names:specification:docbook:dtd:xml:4.1.2` `urn:oasis:names:specification:docbook:dtd:xml:4.1.2` + `http://user@/foo` `http://user@/foo` + `http://host/!$&'()*+,;=:@[hello]` `http://host/!$&'()*+,;=:@[hello]` + `http://user:pass@bitfission.com:8080/path?a=b#frag` `http://user:pass@bitfission.com:8080/path?a=b#frag` + `http:.` `http:.` + `http:example.com/?q=foo` `http:example.com/?q=foo` + `http:..` `http:..` + `http://example.com//foo` `http://example.com//foo` + .unreserved? .unreserved? + .encode_www_form + encodes "10%" encodes "10%" + encodes " ?&=#+%!<>#\"{}|\\^[]`☺\t:/@$'()*,;" encodes " ?&=#+%!<>#\"{}|\\^[]`☺\t:/@$'()*,;" + encodes "" encodes "" + encodes "a b+" encodes "a b+" + encodes "abc" encodes "abc" + encodes "a b+" encodes "a b+" + encodes "* foo=bar baz&hello/" encodes "* foo=bar baz&hello/" + encodes "1%41" encodes "1%41" + #opaque? assert assert assert assert assert assert assert assert assert assert assert assert + #to_json #to_json + .encode_path .encode_path + #absolute? assert assert assert assert assert assert - #+ assert assert assert assert assert assert + #to_s assert assert - #to_i! assert assert assert assert assert assert - #- + preserves non-default port preserves non-default port assert assert assert assert assert assert assert assert - #to_i64! - basic basic - doesn't raise on overflow doesn't raise on overflow - #trunc assert assert assert assert assert assert - #to_i64 assert assert - basic basic + preserves port for unknown scheme preserves port for unknown scheme assert assert assert assert - #<=> - compares against NaNs compares against NaNs - #to_f! + preserves port for nil scheme preserves port for nil scheme assert assert assert assert + #request_target assert assert - #hash #hash - #* + does not add '?' to the end if the query params are empty does not add '?' to the end if the query params are empty assert assert assert assert assert assert assert assert - unary #- assert assert assert assert assert assert - #inspect assert assert - #integer? assert assert assert assert assert assert + .from_yaml .from_yaml .new - raises if creating from infinity raises if creating from infinity - raises if creating from NaN raises if creating from NaN - new(BigFloat) new(BigFloat) - new(Int) new(Int) - new(BigInt) new(BigInt) - new(BigRational) new(BigRational) - new(String) new(String) - raises an ArgumentError unless string denotes valid float raises an ArgumentError unless string denotes valid float - #floor - assert assert - assert assert - assert assert - #ceil - assert assert - assert assert - assert assert -Log - .with_context - assigns context via a hash with symbol keys assigns context via a hash with symbol keys - assigns context via a named tuple assigns context via a named tuple - with arguments restores context after the block with arguments restores context after the block - restores context after the block restores context after the block - #with_context - with arguments restores context after the block with arguments restores context after the block - restores context after the block restores context after the block - .context - existing keys are overwritten by set existing keys are overwritten by set - is per fiber is per fiber - is assignable from a named tuple is assignable from a named tuple - can be set and cleared can be set and cleared - is extended by set is extended by set - is assignable from a hash with symbol keys is assignable from a hash with symbol keys -grisu3 - float32 - largest denormal largest denormal - general with rounding down general with rounding down - small number small number - general whole number, rounding general whole number, rounding - general whole number, rounding general whole number, rounding - general no rounding general no rounding - large number, rounding large number, rounding - general with rounding up general with rounding up - min min - max max - smallest normal smallest normal - float64 - small number small number - smallest normal smallest normal - point at end point at end - largest denormal largest denormal - failure case failure case - another no point move another no point move - max float max float - min float min float - large number large number -HTTP::FormData - .build(IO, String) - builds a message builds a message - .parse_content_disposition(String) - parses all Content-Disposition fields parses all Content-Disposition fields - .parse(HTTP::Request) - raises on empty body raises on empty body - raises on no Content-Type raises on no Content-Type - raises on invalid Content-Type raises on invalid Content-Type - parses formdata parses formdata - .parse(IO, String) - parses formdata parses formdata - .build(HTTP::Server::Response, String) - builds a message builds a message -Digest::Adler32 - #hexdigest can update within a loop by indirect expr (#9483) #hexdigest can update within a loop by indirect expr (#9483) - digest with file content digest with file content - can't call final twice can't call final twice - resets resets - calculates hash from UInt8 slices calculates hash from UInt8 slices - calculates digest from string calculates digest from string - return the digest size return the digest size - calculates hash of #to_slice calculates hash of #to_slice - calculates base64'd hash from string calculates base64'd hash from string - calculates hash from unicode string calculates hash from unicode string - should be able to calculate adler32 should be able to calculate adler32 - context are independent context are independent - .dup - leads to deterministic updates leads to deterministic updates - preserves type preserves type - leads to not sharing state leads to not sharing state - preserves value preserves value - should be able to calculate adler32 combined should be able to calculate adler32 combined - can take a block can take a block - calculates hash from string calculates hash from string - #hexdigest can update within a loop from explicit expr (#9483) #hexdigest can update within a loop from explicit expr (#9483) -Float32 boundaries - smallest normal 32 smallest normal 32 - boundaries 1.0 boundaries 1.0 - largest denormal 32 largest denormal 32 - min Float32 min Float32 - boundaries 1.5 boundaries 1.5 - max Float32 max Float32 -Benchmark::IPS::Entry - #set_cycles - sets the cycles to 1 no matter what sets the cycles to 1 no matter what - sets the number of cycles needed to make 100ms sets the number of cycles needed to make 100ms - #human_mean - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert + with query params with query params + .decode + decodes "hello+world" decodes "hello+world" + decodes "+%2B %20" decodes "+%2B %20" + decodes "hello%2%2Bworld" decodes "hello%2%2Bworld" + decodes "hello%2" decodes "hello%2" + does not decode string when block returns true does not decode string when block returns true + decodes "hello" decodes "hello" + decodes "hello%2Bworld" decodes "hello%2Bworld" + decodes "%27Stop%21%27+said+Fred" decodes "%27Stop%21%27+said+Fred" + decodes "%e3%81%aa%e3%81%aa" decodes "%e3%81%aa%e3%81%aa" + decodes "hello%" decodes "hello%" + decodes "hello+world" decodes "hello+world" + decodes "hello%2B" decodes "hello%2B" + decodes "hello%20world" decodes "hello%20world" + decodes "%E3%81%AA%E3%81%AA" decodes "%E3%81%AA%E3%81%AA" + .unwrap_ipv6 .unwrap_ipv6 + #hostname assert assert assert assert assert assert + #== assert assert + .encode_path_segment .encode_path_segment + #resolve + opaque URIs opaque URIs + path relative references path relative references + RFC 3986: 5.4.1. Normal Examples RFC 3986: 5.4.1. Normal Examples + ... ... + removes dot-segments removes dot-segments + encoded characters encoded characters + absolute URI references absolute URI references + fragment fragment + multiple slashes multiple slashes + Extras Extras + scheme-relative scheme-relative + RFC 3986: 5.4.2. Abnormal Examples RFC 3986: 5.4.2. Abnormal Examples + path-absolute URI references path-absolute URI references + relative base relative base + #userinfo assert assert assert assert assert assert assert assert - #calculate_stats - correctly calculates basic stats correctly calculates basic stats - #human_iteration_time + #relative? assert assert + .encode + encodes "https://en.wikipedia.org/wiki/Crystal (programming language)" encodes "https://en.wikipedia.org/wiki/Crystal (programming language)" + encodes "hello%2" encodes "hello%2" + encodes "\n" encodes "\n" + encodes "\xFF" encodes "\xFF" + encodes "hello world" encodes "hello world" + does not encode character when block returns true does not encode character when block returns true + encodes "hello+world" encodes "hello+world" + encodes "'Stop!' said Fred" encodes "'Stop!' said Fred" + encodes "'Stop!' said Fred" encodes "'Stop!' said Fred" + encodes "hello%" encodes "hello%" + encodes "hello world" encodes "hello world" + encodes "hello+" encodes "hello+" + encodes "なな" encodes "なな" + encodes "hello%2+world" encodes "hello%2+world" + encodes "hello" encodes "hello" + #to_yaml #to_yaml + .decode_www_form + decodes "1%41%42%43" decodes "1%41%42%43" + decodes "abc" decodes "abc" + decodes "" decodes "" + encodes "hello+" encodes "hello+" + encodes "'Stop!' said Fred" encodes "'Stop!' said Fred" + decodes "a+b" decodes "a+b" + decodes "123%45%6" decodes "123%45%6" + encodes "hello+world" encodes "hello+world" + decodes "%1" decodes "%1" + decodes "%" decodes "%" + decodes "1%41" decodes "1%41" + decodes "+%2B %20" decodes "+%2B %20" + encodes "hello%2+world" encodes "hello%2+world" + decodes "a%20b" decodes "a%20b" + decodes "%zzzzz" decodes "%zzzzz" + decodes "%4a" decodes "%4a" + decodes "%20%3F%26%3D%23%2B%25%21%3C%3E%23%22%7B%7D%7C%5C%5E%5B%5D%60%E2%98%BA%09%3A%2F%40%24%27%28%29%2A%2C%3B" decodes "%20%3F%26%3D%23%2B%25%21%3C%3E%23%22%7B%7D%7C%5C%5E%5B%5D%60%E2%98%BA%09%3A%2F%40%24%27%28%29%2A%2C%3B" + #update_query_params + commits changes to the URI::Object commits changes to the URI::Object + returns self returns self + #authority assert assert assert assert assert assert @@ -16920,1582 +15310,2367 @@ assert assert assert assert assert assert -record - can clone record with parent type can clone record with parent type - defines record with assignments defines record with assignments - can copy_with record with parent type can copy_with record with parent type - defines record with type declarations defines record with type declarations - defines record with type declaration and initialization defines record with type declaration and initialization - uses the default values on the ivars uses the default values on the ivars -OpenSSL::SSL::Server - detects SNI hostname detects SNI hostname - sync_close sync_close - #accept? - accepts accepts - .open .open - #accept - doesn't to SSL handshake with start_immediately = false doesn't to SSL handshake with start_immediately = false - accepts and do handshake accepts and do handshake - .new .new - don't sync_close don't sync_close -Class - getter - defines lazy getter with block returning false defines lazy getter with block returning false - uses getter with assignment uses getter with assignment - defines lazy getter with block defines lazy getter with block - uses getter with type declaration uses getter with type declaration - uses simple getter uses simple getter - uses getter with type declaration and default value uses getter with type declaration and default value - def_hash - should return same hash for equal property values should return same hash for equal property values - shouldn't return same hash for different property values shouldn't return same hash for different property values - setter - uses setter with type declaration and default value uses setter with type declaration and default value - uses setter with default value uses setter with default value - uses setter uses setter - uses setter with type declaration uses setter with type declaration - #in? - works with splatted arguments works with splatted arguments - works with other objects implementing #includes? works with other objects implementing #includes? - works with Enumerable-s works with Enumerable-s - getter? - uses getter? with type declaration uses getter? with type declaration - uses getter? with block uses getter? with block - uses getter? with type declaration and block uses getter? with type declaration and block - uses getter? with type declaration and default value uses getter? with type declaration and default value - uses getter? uses getter? - uses getter? with default value uses getter? with default value - delegate - forwards #{{ op.id }} with multiple parameters forwards #{{ op.id }} with multiple parameters - forwards #{{ op.id }} with multiple parameters and block parameter forwards #{{ op.id }} with multiple parameters and block parameter - forwards #{{ op.id }} with multiple parameters and block parameter forwards #{{ op.id }} with multiple parameters and block parameter - forwards #{{ op.id }} with multiple parameters and block parameter forwards #{{ op.id }} with multiple parameters and block parameter - forwards #{{ op.id }} with multiple parameters and block parameter forwards #{{ op.id }} with multiple parameters and block parameter - forwards #{{ op.id }} with multiple parameters forwards #{{ op.id }} with multiple parameters - delegates delegates - delegates []= delegates []= - forwards #{{ op.id }} with multiple parameters forwards #{{ op.id }} with multiple parameters - forwards #{{ op.id }} with multiple parameters forwards #{{ op.id }} with multiple parameters - delegates setter delegates setter - forwards #{{ op.id }} with multiple parameters and block parameter forwards #{{ op.id }} with multiple parameters and block parameter - forwards #{{ op.id }} with multiple parameters and block parameter forwards #{{ op.id }} with multiple parameters and block parameter - forwards #{{ op.id }} with multiple parameters forwards #{{ op.id }} with multiple parameters - forwards #{{ op.id }} with multiple parameters forwards #{{ op.id }} with multiple parameters - .set_crystal_type_id .set_crystal_type_id - applies annotation to lazy property (#9139) applies annotation to lazy property (#9139) - property - defines lazy property with block returning false defines lazy property with block returning false - defines lazy property with block defines lazy property with block - uses property with type declaration and default value uses property with type declaration and default value - uses property with type declaration uses property with type declaration - uses property uses property - uses property with default value uses property with default value - property? - uses property? with type declaration and default value uses property? with type declaration and default value - uses property? with block uses property? with block - uses property? with type declaration and block uses property? with type declaration and block - uses property? with default value uses property? with default value - uses property? with type declaration uses property? with type declaration - uses property? uses property? - #not_nil! - with message with message - basic basic - raises NilAssertionError raises NilAssertionError - does not copy its receiver when it is a value (#13263) does not copy its receiver when it is a value (#13263) - removes Nil type removes Nil type - calls #finalize on #clone'd objects calls #finalize on #clone'd objects - def_equals - compares by reference compares by reference - property! - uses property! with type declaration uses property! with type declaration - uses property! uses property! - getter! - uses getter! uses getter! - uses getter! with type declaration uses getter! with type declaration - #unsafe_as #unsafe_as -URI::Punycode - encodes Hello-Another-Way-それぞれ to Hello-Another-Way--fc4qua97gba encodes Hello-Another-Way-それぞれ to Hello-Another-Way--fc4qua97gba - decodes MajiKoi5-783gue6qz075azm5e to MajiでKoiする5秒前 decodes MajiKoi5-783gue6qz075azm5e to MajiでKoiする5秒前 - encodes ひとつ屋根の下2 to 2-u9tlzr9756bt3uc0v encodes ひとつ屋根の下2 to 2-u9tlzr9756bt3uc0v - encodes そのスピードで to d9juau41awczczp encodes そのスピードで to d9juau41awczczp - translate to ascii only host name translate to ascii only host name - encodes MajiでKoiする5秒前 to MajiKoi5-783gue6qz075azm5e encodes MajiでKoiする5秒前 to MajiKoi5-783gue6qz075azm5e - decodes Hello-Another-Way--fc4qua05auwb3674vfr0b to Hello-Another-Way-それぞれの場所 decodes Hello-Another-Way--fc4qua05auwb3674vfr0b to Hello-Another-Way-それぞれの場所 - encodes Hello-Another-Way-それぞれの場所 to Hello-Another-Way--fc4qua05auwb3674vfr0b encodes Hello-Another-Way-それぞれの場所 to Hello-Another-Way--fc4qua05auwb3674vfr0b - decodes de-jg4avhby1noc0d to パフィーdeルンバ decodes de-jg4avhby1noc0d to パフィーdeルンバ - decodes 2-u9tlzr9756bt3uc0v to ひとつ屋根の下2 decodes 2-u9tlzr9756bt3uc0v to ひとつ屋根の下2 - decodes Hello-Another-Way--fc4qua97gba to Hello-Another-Way-それぞれ decodes Hello-Another-Way--fc4qua97gba to Hello-Another-Way-それぞれ - encodes 安室奈美恵-with-SUPER-MONKEYS to -with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n encodes 安室奈美恵-with-SUPER-MONKEYS to -with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n - decodes -with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n to 安室奈美恵-with-SUPER-MONKEYS decodes -with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n to 安室奈美恵-with-SUPER-MONKEYS - decodes d9juau41awczczp to そのスピードで decodes d9juau41awczczp to そのスピードで - encodes パフィーdeルンバ to de-jg4avhby1noc0d encodes パフィーdeルンバ to de-jg4avhby1noc0d - encodes 3年B組金八先生 to 3B-ww4c5e180e575a65lsy2b encodes 3年B組金八先生 to 3B-ww4c5e180e575a65lsy2b - decodes 3B-ww4c5e180e575a65lsy2b to 3年B組金八先生 decodes 3B-ww4c5e180e575a65lsy2b to 3年B組金八先生 -OpenSSL::SSL::Socket - returns the cipher that is currently in use returns the cipher that is currently in use - returns the TLS version returns the TLS version - interprets graceful EOF of underlying socket as SSL termination interprets graceful EOF of underlying socket as SSL termination - returns selected alpn protocol returns selected alpn protocol - accepts clients that only write then close the connection accepts clients that only write then close the connection - returns the peer certificate returns the peer certificate - closes connection to server that doesn't properly terminate SSL session closes connection to server that doesn't properly terminate SSL session -Random::PCG32 - can jump ahead can jump ahead - generates random numbers as generated official implementation generates random numbers as generated official implementation - can jump back can jump back - can be initialized without explicit seed can be initialized without explicit seed -Channel(T) - .select - receive nil-on-close single-channel - types nilable channel types nilable channel - returns nil if channel was closed returns nil if channel was closed - types types - awakes all waiting selects awakes all waiting selects - returns nil channel is closed while waiting returns nil channel is closed while waiting - receive raise-on-close single-channel - types types - awakes all waiting selects awakes all waiting selects - raises if channel was closed raises if channel was closed - types nilable channel types nilable channel - raises if channel is closed while waiting raises if channel is closed while waiting - timeout - types types - negative amounts should not trigger timeout negative amounts should not trigger timeout - triggers timeout (reverse order) triggers timeout (reverse order) - triggers timeout triggers timeout - allows receiving while waiting (same fiber multiple times) allows receiving while waiting (same fiber multiple times) - allows receiving while waiting (reverse order) allows receiving while waiting (reverse order) - receive raise-on-close raises if channel was closed while waiting receive raise-on-close raises if channel was closed while waiting - allows receiving while waiting allows receiving while waiting - send raise-on-close raises if channel was closed while waiting send raise-on-close raises if channel was closed while waiting - triggers timeout (same fiber multiple times) triggers timeout (same fiber multiple times) - receive nil-on-close returns index of closed while waiting receive nil-on-close returns index of closed while waiting - receive raise-on-close multi-channel - types types - receive nil-on-close multi-channel - types types - returns index of closed channel returns index of closed channel - send raise-on-close single-channel - raises if channel is closed while waiting raises if channel is closed while waiting - types nilable channel types nilable channel - raises if channel was closed raises if channel was closed - types types - awakes all waiting selects awakes all waiting selects - send raise-on-close multi-channel - types types - mix of receive and receive? multi-channel - returns nil if receive channel was not ready and receive? channel was closed returns nil if receive channel was not ready and receive? channel was closed - raises if receive channel was closed and receive? channel was not ready raises if receive channel was closed and receive? channel was not ready - does not raise or change its status when it is closed more than once does not raise or change its status when it is closed more than once - does send_first does send_first - creates unbuffered with no arguments creates unbuffered with no arguments - does receive_first does receive_first - send returns channel send returns channel - creates buffered with capacity argument creates buffered with capacity argument - .non_blocking_select - returns correct index for array argument returns correct index for array argument - receive raise-on-close multi-channel - types types - send raise-on-close multi-channel - types types - mix of receive and receive? multi-channel - raises if receive channel was close and receive? channel was not ready raises if receive channel was close and receive? channel was not ready - returns nil if receive channel was not ready and receive? channel was closed returns nil if receive channel was not ready and receive? channel was closed - send raise-on-close single-channel - types types - receive nil-on-close single-channel - types types - returns nil if channel was closed returns nil if channel was closed - receive raise-on-close single-channel - types types - timeout - receive nil-on-close returns index of closed while waiting receive nil-on-close returns index of closed while waiting - types types - send raise-on-close raises if channel was closed while waiting send raise-on-close raises if channel was closed while waiting - negative amounts should not trigger timeout negative amounts should not trigger timeout - should not trigger timeout should not trigger timeout - receive raise-on-close raises if channel was closed while waiting receive raise-on-close raises if channel was closed while waiting +UInt + compares with <=> compares with <=> + &- + returns the wrapped negation returns the wrapped negation +__mulodi4 + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests +LLVM::ABI::X86_64 + size + for pointer for pointer + for integer for integer + for struct for struct + for array for array + for float for float + for double for double + for packed struct for packed struct + align + for packed struct for packed struct + for array for array + for integer for integer + for pointer for pointer + for struct for struct + for double for double + for float for float + abi_info + does with structs between 64 and 128 bits does with structs between 64 and 128 bits + does with structs less than 64 bits does with structs less than 64 bits + does with structs larger than 128 bits does with structs larger than 128 bits + does with primitives does with primitives +log/spec + can get the entry matched by next can get the entry matched by next + fails on non-consecutive logs fails on non-consecutive logs + can capture from all sources can capture from all sources + can capture with source pattern can capture with source pattern + yield and returns the dsl yield and returns the dsl + allows matching with regex allows matching with regex + allows matching logs strictly allows matching logs strictly + entries can be cleared entries can be cleared + can capture in different checkers can capture in different checkers + allows matching non-consecutive logs allows matching non-consecutive logs + allows matching logs allows matching logs + can get the entry matched by check can get the entry matched by check + it does not capture below level it does not capture below level + fails on non-empty logs fails on non-empty logs MIME::Multipart::Builder + generates valid multipart messages generates valid multipart messages .preamble accepts different data types accepts different data types raises when called after starting the body raises when called after starting the body #content_type calculates the content type calculates the content type - .finish - raises if no body exists raises if no body exists - raises if already finished raises if already finished - .body_part - raises when called after epilogue raises when called after epilogue - accepts different data types accepts different data types - raises when called after finishing raises when called after finishing - generates valid multipart messages with preamble and epilogue generates valid multipart messages with preamble and epilogue - generates valid multipart messages generates valid multipart messages .epilogue raises when called after finishing raises when called after finishing accepts different data types accepts different data types raises when called with no body parts raises when called with no body parts -Crystal::System - .printf - supports %d supports %d - works works - supports %x supports %x - supports %p supports %p - supports %s supports %s - supports %u supports %u - supports %l width supports %l width -Log::ShortFormat - shows the context data shows the context data - formats an entry formats an entry - hides the source if empty hides the source if empty - shows context and entry data shows context and entry data - appends the exception appends the exception -HTTP::Server - lists addresses lists addresses - #bind - fails after listen fails after listen - with URI - parses SSL parses SSL - fails SSL with invalid params fails SSL with invalid params - parses TCP parses TCP - fails with unknown scheme fails with unknown scheme - accepts URI accepts URI - accepts String accepts String - fails after close fails after close - handles Expect: 100-continue correctly when body is read handles Expect: 100-continue correctly when body is read - doesn't raise on accept after close #2692 doesn't raise on accept after close #2692 - can process simultaneous SSL handshakes can process simultaneous SSL handshakes - #max_request_line_size - sets and gets size sets and gets size - respects size on request respects size on request - handles Expect: 100-continue correctly when body isn't read handles Expect: 100-continue correctly when body isn't read - #max_request_line_size - respects size on request respects size on request - sets and gets size sets and gets size - #bind_unix - binds to different unix sockets binds to different unix sockets - #close - closes gracefully closes gracefully - #max_headers_size - sets and gets size sets and gets size - respects size on request respects size on request - reuses the TCP port (SO_REUSEPORT) reuses the TCP port (SO_REUSEPORT) - #bind_tls - binds SSL server context binds SSL server context - #remote_address / #local_address - for https server for https server - for http server for http server - binds to unused port binds to unused port - #listen - fails after close fails after close - fails after listen fails after listen - closes the server closes the server - handles exception during SSL handshake (#6577) handles exception during SSL handshake (#6577) - binds to different ports binds to different ports -Enumerable - all? without block - returns false returns false - returns true returns true - min_of? - returns nil if empty returns nil if empty - reduce? - allows block return type to be different from element type allows block return type to be different from element type - assert assert - returns nil if empty returns nil if empty - none? without block - assert assert - assert assert - none? - assert assert - assert assert - in slices of - assert assert - assert assert - raises argument error if size is less than 0 raises argument error if size is less than 0 - assert assert - assert assert - one? - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - min? - returns nil if empty returns nil if empty - min - assert assert - raises if not comparable in min(n) raises if not comparable in min(n) - raises if not comparable raises if not comparable - assert assert - assert assert - raises if n is negative raises if n is negative - assert assert - assert assert - does not modify the array does not modify the array - assert assert - assert assert - assert assert - assert assert - raises if empty raises if empty - partition - assert assert - assert assert - with mono type on mono type with mono type on mono type - with missing type on union type with missing type on union type - with union type on union type with union type on union type - with mono type on union type with mono type on union type - minmax_of? - returns two nils if empty returns two nils if empty - any? with block - returns false if all elements does not fulfill the condition returns false if all elements does not fulfill the condition - returns true if at least one element fulfills the condition returns true if at least one element fulfills the condition - index_by - overrides values if a value is returned twice overrides values if a value is returned twice - creates a hash indexed by the value returned by the block creates a hash indexed by the value returned by the block - to_a - converts to an Array converts to an Array - sample - multiple-element - samples k elements out of n samples k elements out of n - samples k elements out of n, where k > n samples k elements out of n, where k > n - samples k elements out of n, with random samples k elements out of n, with random - samples 1 element samples 1 element - raises on k < 0 raises on k < 0 - samples 0 elements samples 0 elements - single-element - raises on empty self raises on empty self - samples without random samples without random - samples with random samples with random - #join - (separator, &) (separator, &) - (io, separator) (io, separator) - (io, &) (io, &) - () () - (separator, io, &) (deprecated) (separator, io, &) (deprecated) - (separator, io) (deprecated) (separator, io) (deprecated) - (io) (io) - (separator) (separator) - (&) (&) - (io, separator, &) (io, separator, &) - min_by - assert assert - max_of - assert assert - raises if not comparable raises if not comparable - flat_map - accepts mixed element types accepts mixed element types - does example 1 does example 1 - does example 4 does example 4 - does example 2 does example 2 - does example 3 does example 3 - flattens iterators flattens iterators - each_slice - reuses with true reuses with true - reuses with existing array reuses with existing array - returns full slices returns full slices - returns each_slice iterator returns each_slice iterator - returns partial slices returns partial slices - skip - returns an array without the skipped elements returns an array without the skipped elements - raises if count is negative raises if count is negative - returns an empty array when skipping more elements than array size returns an empty array when skipping more elements than array size - max - assert assert - raises if not comparable in max(n) raises if not comparable in max(n) - raises if n is negative raises if n is negative - raises if not comparable raises if not comparable - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - does not modify the array does not modify the array - raises if empty raises if empty - assert assert - assert assert - tally - returns a hash with counts according to the value returns a hash with counts according to the value - with hash - updates existing hash with counts according to the value updates existing hash with counts according to the value - ignores the default value ignores the default value - returns a hash with counts according to the value returns a hash with counts according to the value - tallies an interface type tallies an interface type - returns a hash with Int64 counts according to the value returns a hash with Int64 counts according to the value - tally_by - with hash - returns a hash with counts according to the value returned by the block returns a hash with counts according to the value returned by the block - returns a hash with counts according to the value returned by the block returns a hash with counts according to the value returned by the block - index with an object - returns nil if the object was not found returns nil if the object was not found - returns the index of that object if found returns the index of that object if found - index! with an object - returns the index of that object if found returns the index of that object if found - raises if not found raises if not found - to_h - with block with block - for tuples for tuples - for array for array - each_with_object - yields the element and the given object yields the element and the given object - gets each_with_object iterator gets each_with_object iterator - size without block - returns the number of elements in the Enumerable returns the number of elements in the Enumerable - each_with_index - accepts an optional offset parameter accepts an optional offset parameter - yields the element and the index yields the element and the index - gets each_with_index iterator gets each_with_index iterator - group_by - assert assert - groups can group by size (like the doc example) groups can group by size (like the doc example) - #accumulate - generic cumulative fold, with init - assert assert - assert assert - preserves initial type preserves initial type - prefix sums - assert assert - assert assert - assert assert - prefix sums, with init - preserves initial type preserves initial type - assert assert - assert assert - assert assert - generic cumulative fold - assert assert - assert assert - max? - returns nil if empty returns nil if empty - each_step - doesn't accept a step of 0 doesn't accept a step of 0 - doesn't accept a negative offset doesn't accept a negative offset - "yields every 2nd element" iterator "yields every 2nd element" iterator - doesn't accept a negative step doesn't accept a negative step - "accepts an offset larger then the enumerable size" yielding "accepts an offset larger then the enumerable size" yielding - "accepts a step larger then the enumerable size" iterator "accepts a step larger then the enumerable size" iterator - "yields every 2nd element" yielding "yields every 2nd element" yielding - "accepts an offset larger then the step size" yielding "accepts an offset larger then the step size" yielding - "accepts a step larger then the enumerable size" yielding "accepts a step larger then the enumerable size" yielding - "accepts an optional offset parameter" iterator "accepts an optional offset parameter" iterator - "accepts an offset of 0" iterator "accepts an offset of 0" iterator - "accepts an optional offset parameter" yielding "accepts an optional offset parameter" yielding - "accepts an offset of 0" yielding "accepts an offset of 0" yielding - "accepts an offset larger then the enumerable size" iterator "accepts an offset larger then the enumerable size" iterator - "accepts an offset larger then the step size" iterator "accepts an offset larger then the step size" iterator - all? with block - returns false returns false - returns true returns true - includes? - is true if the object exists in the collection is true if the object exists in the collection - is false if the object is not part of the collection is false if the object is not part of the collection - compact map - assert assert - index! with a block - raises if not found raises if not found - returns the index of the first element where the block returns true returns the index of the first element where the block returns true - take_while - keeps elements while the block returns true keeps elements while the block returns true - does not call the block again once it returned false does not call the block again once it returned false - returns an empty Array if the block is false for the first element returns an empty Array if the block is false for the first element - returns the full Array if the condition is always true returns the full Array if the condition is always true - first - gets first gets first - raises if enumerable empty raises if enumerable empty - assert assert - calls block if empty calls block if empty - count with block - returns the number of the times the item is present returns the number of the times the item is present - #each_cons - yield - yields running pairs with reuse = array yields running pairs with reuse = array - returns running pairs returns running pairs - returns running triples returns running triples - yields running pairs with reuse = deque yields running pairs with reuse = deque - yields running pairs with reuse = true yields running pairs with reuse = true - iterator - iterates with reuse = true iterates with reuse = true - iterates with reuse = deque iterates with reuse = deque - iterates with reuse = array iterates with reuse = array - iterates iterates - #each_cons_pair - returns running pairs returns running pairs - min_of - raises if not comparable raises if not comparable - assert assert - in_groups_of - assert assert - assert assert - assert assert - reuses with existing array reuses with existing array - reuses with true reuses with true - assert assert - raises argument error if size is less than 0 raises argument error if size is less than 0 - assert assert - takes a block takes a block - index with a block - returns the index of the first element where the block returns true returns the index of the first element where the block returns true - returns nil if no object could be found returns nil if no object could be found - minmax? - raises if not comparable raises if not comparable - returns two nils if empty returns two nils if empty - min_by? - returns nil if empty returns nil if empty - chunk - does not return elements for which the block returns Enumerable::Chunk::Drop does not return elements for which the block returns Enumerable::Chunk::Drop - nil allowed as value nil allowed as value - returns elements for which the block returns Enumerable::Chunk::Alone in separate Arrays returns elements for which the block returns Enumerable::Chunk::Alone in separate Arrays - works works - work with class work with class - returns elements of the Enumerable in an Array of Tuple, {v, ary}, where 'ary' contains the consecutive elements for which the block returned the value 'v' returns elements of the Enumerable in an Array of Tuple, {v, ary}, where 'ary' contains the consecutive elements for which the block returned the value 'v' - drop all drop all - rewind rewind - reuses true reuses true - alone all alone all - works with block works with block - nil 2 case nil 2 case - #empty? - assert assert - assert assert - to_a - with a block with a block - without a block without a block - without a block of an interface type without a block of an interface type - chunks - work with pure enumerable work with pure enumerable - works works - nil 2 case nil 2 case - nil allowed as value nil allowed as value - work with class work with class - alone all alone all - drop all drop all - returns elements for which the block returns Enumerable::Chunk::Alone in separate Arrays returns elements for which the block returns Enumerable::Chunk::Alone in separate Arrays - does not return elements for which the block returns Enumerable::Chunk::Drop does not return elements for which the block returns Enumerable::Chunk::Drop - max_by? - returns nil if empty returns nil if empty - all? with pattern - returns false returns false - returns true returns true - sum - strings strings - array of arrays array of arrays - assert assert - float float - assert assert - slices slices - uses additive_identity from type uses additive_identity from type - assert assert - assert assert - assert assert - assert assert - first - raises if count is negative raises if count is negative - assert assert - assert assert - map_with_index - yields the element and the index of an iterator yields the element and the index of an iterator - yields the element and the index yields the element and the index - minmax_by? - returns two nils if empty returns two nils if empty - none? with pattern - assert assert - assert assert - skip_while - returns the full Array if the first check is false returns the full Array if the first check is false - returns an empty array if the condition is always true returns an empty array if the condition is always true - does not yield to the block anymore once it returned false does not yield to the block anymore once it returned false - skips elements while the condition holds true skips elements while the condition holds true - minmax - raises if empty raises if empty - assert assert - minmax_by - assert assert - zip? - works for Iterators as receiver works for Iterators as receiver - reduce - assert assert - assert assert - assert assert - assert assert - allows block return type to be different from element type allows block return type to be different from element type - does not raise if empty if there is a memo argument does not raise if empty if there is a memo argument - raises if empty raises if empty - minmax_of - raises if not comparable raises if not comparable - assert assert - cycle - calls forever if we don't break calls forever if we don't break - calls the block n times given the optional argument calls the block n times given the optional argument - select - with type with type - with pattern with pattern - selects the values for which the block returns true selects the values for which the block returns true - first? - gets first? gets first? - returns nil if enumerable empty returns nil if enumerable empty - #to_set - with block - creates a Set from running the block against the collection's elements creates a Set from running the block against the collection's elements - without block - creates a Set from the unique elements of the collection creates a Set from the unique elements of the collection - map - leaves the original unmodified leaves the original unmodified - applies the function to each element and returns a new array applies the function to each element and returns a new array - any? with pattern - returns true returns true - returns false returns false - max_of? - returns nil if empty returns nil if empty - find - doesn't find with default value doesn't find with default value - doesn't find doesn't find - finds finds - reject - with type with type - rejects with pattern rejects with pattern - with type, for tuples with type, for tuples - rejects the values for which the block returns true rejects the values for which the block returns true - find! - finds finds - raises if not found raises if not found - max_by - assert assert - zip - works for Iterators as receiver works for Iterators as receiver - product - assert assert - assert assert - assert assert - assert assert - uses zero from type uses zero from type + generates valid multipart messages with preamble and epilogue generates valid multipart messages with preamble and epilogue + .body_part + raises when called after epilogue raises when called after epilogue + raises when called after finishing raises when called after finishing + accepts different data types accepts different data types + .finish + raises if already finished raises if already finished + raises if no body exists raises if no body exists +select + select many receivers select many receivers + non-blocking nil-on-close multi-channel + types and exec when with nil if channel is closed while waiting (2) types and exec when with nil if channel is closed while waiting (2) + exec else if no message was ready exec else if no message was ready + types and exec when (1) types and exec when (1) + types and exec when with nil if channel is closed while waiting (1) types and exec when with nil if channel is closed while waiting (1) + types and exec when with nil if channel was closed (1) types and exec when with nil if channel was closed (1) + types and exec when with nil if channel was closed (2) types and exec when with nil if channel was closed (2) + types and exec when (2) types and exec when (2) + select should work with send which started before receive, fixed #3862 select should work with send which started before receive, fixed #3862 + non-blocking raise-on-close single-channel + raises if channel was closed raises if channel was closed + types and exec when if message was ready types and exec when if message was ready + exec else if no message was ready exec else if no message was ready + stress select with send/receive in multiple fibers stress select with send/receive in multiple fibers + blocking nil-on-close multi-channel + types and exec when with nil if channel was closed (2) types and exec when with nil if channel was closed (2) + types and exec when with nil if channel is closed while waiting (1) types and exec when with nil if channel is closed while waiting (1) + types and exec when (1) types and exec when (1) + types and exec when (2) types and exec when (2) + types and exec when with nil if channel is closed while waiting (2) types and exec when with nil if channel is closed while waiting (2) + types and exec when with nil if channel was closed (1) types and exec when with nil if channel was closed (1) + prioritize by order when entering in a select prioritize by order when entering in a select + blocking raise-on-close multi-channel + raises if channel was closed (1) raises if channel was closed (1) + types and exec when (2) types and exec when (2) + types and exec when (1) types and exec when (1) + raises if channel was closed (2) raises if channel was closed (2) + non-blocking nil-on-close single-channel + types and exec when with nil if channel was closed types and exec when with nil if channel was closed + types and exec when types and exec when + exec else if no message was ready exec else if no message was ready + non-blocking raise-on-close multi-channel + types and exec when (1) types and exec when (1) + types and exec when (2) types and exec when (2) + exec else if no message was ready exec else if no message was ready + raises if channel was closed (1) raises if channel was closed (1) + raises if channel was closed (2) raises if channel was closed (2) + select many senders select many senders + select same channel multiple times select same channel multiple times + select many receivers, senders select many receivers, senders + blocking raise-on-close single-channel + raises if channel was closed raises if channel was closed + types and exec when types and exec when + select fiber has one chance to be enqueued into scheduler (2) select fiber has one chance to be enqueued into scheduler (2) + select fiber has one chance to be enqueued into scheduler (1) select fiber has one chance to be enqueued into scheduler (1) + blocking nil-on-close single-channel + types and exec when with nil if channel was closed types and exec when with nil if channel was closed + types and exec when types and exec when +GC + .stats .stats + raises if calling enable when not disabled raises if calling enable when not disabled + .prof_stats .prof_stats + compiles GC.stats compiles GC.stats +JUnit Formatter + reports successful results reports successful results + encodes class names from the relative file path encodes class names from the relative file path + report failure stacktrace if present report failure stacktrace if present + outputs timestamp according to RFC 3339 outputs timestamp according to RFC 3339 + reports mixed results reports mixed results + reports skipped reports skipped + report error stacktrace if present report error stacktrace if present + escapes spec names escapes spec names + reports errors reports errors + reports failures reports failures +Complex + to_s to_s + Math + log10 log10 + exp exp + sqrt sqrt + log log + log2 log2 + clones clones + polar polar + test multiplicative_identity test multiplicative_identity + i i + / + complex / number complex / number + number / complex number / complex + complex / complex complex / complex + phase phase + test zero? test zero? + inv inv + cis cis + inspect inspect + sign + infinity infinity + real zero real zero + imaginary zero imaginary zero + complex zero complex zero + finite, non-zero finite, non-zero + not-a-number not-a-number + conj conj + - + complex - complex complex - complex + complex - number complex - number + - complex - complex + number - complex number - complex + == + complex == number complex == number + complex == complex complex == complex + number == complex number == complex + * + complex * complex complex * complex + number * complex number * complex + complex * number complex * number + test additive_identity test additive_identity + abs2 abs2 + hashes real without imag like real only hashes real without imag like real only + abs abs + test zero test zero + + + number + complex number + complex + complex + number complex + number + complex + complex complex + complex + + complex + complex + rounds rounds + as numbers + division between Complex / UInt64 returns Complex division between Complex / UInt64 returns Complex + division between UInt16 / Complex returns Complex division between UInt16 / Complex returns Complex + converts from UInt8 to Complex converts from UInt8 to Complex + division between Int8 / Complex returns Complex division between Int8 / Complex returns Complex + division between Complex / UInt128 returns Complex division between Complex / UInt128 returns Complex + converts from Int32 to Complex converts from Int32 to Complex + converts from Complex to Int16 converts from Complex to Int16 + converts from Float32 to Complex converts from Float32 to Complex + converts from Complex to Int128 converts from Complex to Int128 + converts from Float32 to Complex converts from Float32 to Complex + converts from Complex to Int32 converts from Complex to Int32 + converts from Complex to Float64 converts from Complex to Float64 + converts from Complex to UInt64 converts from Complex to UInt64 + converts from Int128 to Complex converts from Int128 to Complex + division between Complex / Int128 returns Complex division between Complex / Int128 returns Complex + converts from Complex to Int64 converts from Complex to Int64 + division between Complex / Int32 returns Complex division between Complex / Int32 returns Complex + division between Float64 / Complex returns Complex division between Float64 / Complex returns Complex + converts from Complex to UInt8 converts from Complex to UInt8 + division between Int128 / Complex returns Complex division between Int128 / Complex returns Complex + converts from Int8 to Complex converts from Int8 to Complex + division between Complex / Int16 returns Complex division between Complex / Int16 returns Complex + division between Complex / UInt8 returns Complex division between Complex / UInt8 returns Complex + division between Complex / Complex returns Complex division between Complex / Complex returns Complex + division between Complex / UInt32 returns Complex division between Complex / UInt32 returns Complex + converts from UInt64 to Complex converts from UInt64 to Complex + converts from Complex to Int128 converts from Complex to Int128 + converts from UInt64 to Complex converts from UInt64 to Complex + converts from Int8 to Complex converts from Int8 to Complex + converts from Int64 to Complex converts from Int64 to Complex + converts from Complex to Float32 converts from Complex to Float32 + converts from UInt8 to Complex converts from UInt8 to Complex + division between Complex / UInt16 returns Complex division between Complex / UInt16 returns Complex + converts from Complex to UInt128 converts from Complex to UInt128 + division between Complex / Int8 returns Complex division between Complex / Int8 returns Complex + converts from UInt16 to Complex converts from UInt16 to Complex + division between Complex / Float32 returns Complex division between Complex / Float32 returns Complex + division between Int16 / Complex returns Complex division between Int16 / Complex returns Complex + converts from Complex to Int64 converts from Complex to Int64 + converts from Complex to Int8 converts from Complex to Int8 + division between Int64 / Complex returns Complex division between Int64 / Complex returns Complex + converts from Int16 to Complex converts from Int16 to Complex + converts from Complex to Int16 converts from Complex to Int16 + converts from Complex to UInt8 converts from Complex to UInt8 + division between Complex / Int64 returns Complex division between Complex / Int64 returns Complex + division between UInt128 / Complex returns Complex division between UInt128 / Complex returns Complex + converts from Complex to UInt16 converts from Complex to UInt16 + converts from Int16 to Complex converts from Int16 to Complex + division between Int32 / Complex returns Complex division between Int32 / Complex returns Complex + converts from Complex to Complex converts from Complex to Complex + converts from Complex to UInt32 converts from Complex to UInt32 + converts from UInt128 to Complex converts from UInt128 to Complex + converts from UInt16 to Complex converts from UInt16 to Complex + division between UInt64 / Complex returns Complex division between UInt64 / Complex returns Complex + converts from Int32 to Complex converts from Int32 to Complex + division between Complex / Float64 returns Complex division between Complex / Float64 returns Complex + converts from Int128 to Complex converts from Int128 to Complex + converts from Complex to Int32 converts from Complex to Int32 + converts from Float64 to Complex converts from Float64 to Complex + division between Float32 / Complex returns Complex division between Float32 / Complex returns Complex + converts from Float64 to Complex converts from Float64 to Complex + converts from Complex to UInt64 converts from Complex to UInt64 + converts from UInt32 to Complex converts from UInt32 to Complex + converts from UInt128 to Complex converts from UInt128 to Complex + converts from Complex to Float64 converts from Complex to Float64 + converts from Complex to Int8 converts from Complex to Int8 + converts from Complex to Complex converts from Complex to Complex + converts from Int64 to Complex converts from Int64 to Complex + converts from UInt32 to Complex converts from UInt32 to Complex + division between UInt8 / Complex returns Complex division between UInt8 / Complex returns Complex + converts from Complex to UInt16 converts from Complex to UInt16 + division between UInt32 / Complex returns Complex division between UInt32 / Complex returns Complex + converts from Complex to UInt32 converts from Complex to UInt32 + converts from Complex to UInt128 converts from Complex to UInt128 + converts from Complex to Float32 converts from Complex to Float32 +Big* as numbers + floor_division BigInt // BigDecimal returns BigInt floor_division BigInt // BigDecimal returns BigInt + floor_division UInt32 // BigFloat returns UInt32 floor_division UInt32 // BigFloat returns UInt32 + floor_division UInt8 // BigInt returns UInt8 floor_division UInt8 // BigInt returns UInt8 + converts from BigDecimal to Float64 converts from BigDecimal to Float64 + division between BigFloat / Int64 returns BigFloat division between BigFloat / Int64 returns BigFloat + converts from UInt32 to BigInt converts from UInt32 to BigInt + converts from Float32 to BigDecimal converts from Float32 to BigDecimal + division between UInt32 / BigRational returns BigRational division between UInt32 / BigRational returns BigRational + division between Int64 / BigInt returns BigFloat division between Int64 / BigInt returns BigFloat + converts from Float64 to BigFloat converts from Float64 to BigFloat + converts from BigDecimal to UInt64 converts from BigDecimal to UInt64 + converts from Int64 to BigDecimal converts from Int64 to BigDecimal + floor_division BigRational // Float32 returns BigRational floor_division BigRational // Float32 returns BigRational + floor_division Float64 // BigInt returns Float64 floor_division Float64 // BigInt returns Float64 + division between Int32 / BigFloat returns BigFloat division between Int32 / BigFloat returns BigFloat + division between BigDecimal / UInt128 returns BigDecimal division between BigDecimal / UInt128 returns BigDecimal + converts from BigFloat to BigRational converts from BigFloat to BigRational + converts from BigInt to UInt16 converts from BigInt to UInt16 + division between BigInt / UInt32 returns BigFloat division between BigInt / UInt32 returns BigFloat + converts from BigDecimal to Int16 converts from BigDecimal to Int16 + converts from BigInt to BigInt converts from BigInt to BigInt + floor_division BigInt // UInt32 returns BigInt floor_division BigInt // UInt32 returns BigInt + converts from BigFloat to BigFloat converts from BigFloat to BigFloat + converts from UInt64 to BigDecimal converts from UInt64 to BigDecimal + division between Int128 / BigInt returns BigFloat division between Int128 / BigInt returns BigFloat + converts from BigDecimal to BigFloat converts from BigDecimal to BigFloat + division between Float64 / BigRational returns BigRational division between Float64 / BigRational returns BigRational + division between BigRational / UInt16 returns BigRational division between BigRational / UInt16 returns BigRational + division between BigDecimal / BigInt returns BigDecimal division between BigDecimal / BigInt returns BigDecimal + division between BigRational / BigRational returns BigRational division between BigRational / BigRational returns BigRational + floor_division BigDecimal // BigDecimal returns BigDecimal floor_division BigDecimal // BigDecimal returns BigDecimal + converts from BigInt to Float64 converts from BigInt to Float64 + converts from Int8 to BigFloat converts from Int8 to BigFloat + converts from BigRational to BigRational converts from BigRational to BigRational + converts from BigRational to Float32 converts from BigRational to Float32 + division between BigRational / BigInt returns BigRational division between BigRational / BigInt returns BigRational + division between Float32 / BigDecimal returns BigDecimal division between Float32 / BigDecimal returns BigDecimal + converts from BigDecimal to Int8 converts from BigDecimal to Int8 + converts from UInt32 to BigFloat converts from UInt32 to BigFloat + division between BigInt / Int128 returns BigFloat division between BigInt / Int128 returns BigFloat + converts from UInt64 to BigInt converts from UInt64 to BigInt + converts from Int32 to BigDecimal converts from Int32 to BigDecimal + division between BigDecimal / Int8 returns BigDecimal division between BigDecimal / Int8 returns BigDecimal + converts from BigDecimal to UInt32 converts from BigDecimal to UInt32 + division between BigRational / UInt8 returns BigRational division between BigRational / UInt8 returns BigRational + floor_division BigRational // BigFloat returns BigRational floor_division BigRational // BigFloat returns BigRational + converts from BigFloat to Int16 converts from BigFloat to Int16 + division between UInt128 / BigRational returns BigRational division between UInt128 / BigRational returns BigRational + converts from BigFloat to Int32 converts from BigFloat to Int32 + division between BigRational / UInt32 returns BigRational division between BigRational / UInt32 returns BigRational + floor_division BigFloat // UInt16 returns BigFloat floor_division BigFloat // UInt16 returns BigFloat + converts from BigDecimal to Int32 converts from BigDecimal to Int32 + converts from Int64 to BigFloat converts from Int64 to BigFloat + division between BigInt / BigFloat returns BigFloat division between BigInt / BigFloat returns BigFloat + converts from BigInt to UInt8 converts from BigInt to UInt8 + converts from Int16 to BigRational converts from Int16 to BigRational + initialize from value to BigFloat initialize from value to BigFloat + division between BigFloat / Float64 returns BigFloat division between BigFloat / Float64 returns BigFloat + floor_division BigRational // BigRational returns BigRational floor_division BigRational // BigRational returns BigRational + floor_division BigRational // BigDecimal returns BigRational floor_division BigRational // BigDecimal returns BigRational + floor_division UInt8 // BigRational returns UInt8 floor_division UInt8 // BigRational returns UInt8 + converts from BigDecimal to BigInt converts from BigDecimal to BigInt + converts from BigRational to BigFloat converts from BigRational to BigFloat + division between BigInt / Int16 returns BigFloat division between BigInt / Int16 returns BigFloat + floor_division BigFloat // Int64 returns BigFloat floor_division BigFloat // Int64 returns BigFloat + division between UInt64 / BigRational returns BigRational division between UInt64 / BigRational returns BigRational + converts from BigInt to BigInt converts from BigInt to BigInt + division between BigDecimal / Int64 returns BigDecimal division between BigDecimal / Int64 returns BigDecimal + converts from BigInt to BigDecimal converts from BigInt to BigDecimal + converts from BigDecimal to Float64 converts from BigDecimal to Float64 + converts from Int16 to BigFloat converts from Int16 to BigFloat + converts from UInt8 to BigInt converts from UInt8 to BigInt + converts from BigDecimal to BigFloat converts from BigDecimal to BigFloat + converts from Int32 to BigFloat converts from Int32 to BigFloat + division between BigInt / BigDecimal returns BigDecimal division between BigInt / BigDecimal returns BigDecimal + division between BigDecimal / UInt64 returns BigDecimal division between BigDecimal / UInt64 returns BigDecimal + floor_division BigInt // Float64 returns BigInt floor_division BigInt // Float64 returns BigInt + division between BigFloat / Int32 returns BigFloat division between BigFloat / Int32 returns BigFloat + division between BigFloat / BigFloat returns BigFloat division between BigFloat / BigFloat returns BigFloat + floor_division BigDecimal // Int16 returns BigDecimal floor_division BigDecimal // Int16 returns BigDecimal + converts from BigFloat to UInt8 converts from BigFloat to UInt8 + division between BigFloat / UInt16 returns BigFloat division between BigFloat / UInt16 returns BigFloat + floor_division UInt16 // BigInt returns UInt16 floor_division UInt16 // BigInt returns UInt16 + division between Int16 / BigInt returns BigFloat division between Int16 / BigInt returns BigFloat + floor_division BigDecimal // UInt64 returns BigDecimal floor_division BigDecimal // UInt64 returns BigDecimal + converts from UInt64 to BigFloat converts from UInt64 to BigFloat + floor_division UInt32 // BigDecimal returns UInt32 floor_division UInt32 // BigDecimal returns UInt32 + floor_division Int16 // BigDecimal returns Int16 floor_division Int16 // BigDecimal returns Int16 + division between Int32 / BigDecimal returns BigDecimal division between Int32 / BigDecimal returns BigDecimal + division between UInt128 / BigDecimal returns BigDecimal division between UInt128 / BigDecimal returns BigDecimal + floor_division BigInt // Int64 returns BigInt floor_division BigInt // Int64 returns BigInt + converts from UInt8 to BigRational converts from UInt8 to BigRational + division between BigDecimal / Int128 returns BigDecimal division between BigDecimal / Int128 returns BigDecimal + converts from Int8 to BigFloat converts from Int8 to BigFloat + division between BigFloat / Float32 returns BigFloat division between BigFloat / Float32 returns BigFloat + converts from BigDecimal to UInt8 converts from BigDecimal to UInt8 + converts from UInt64 to BigDecimal converts from UInt64 to BigDecimal + converts from BigRational to BigDecimal converts from BigRational to BigDecimal + converts from Int32 to BigInt converts from Int32 to BigInt + converts from BigDecimal to UInt32 converts from BigDecimal to UInt32 + converts from BigRational to UInt16 converts from BigRational to UInt16 + floor_division BigFloat // Float64 returns BigFloat floor_division BigFloat // Float64 returns BigFloat + floor_division BigFloat // Int16 returns BigFloat floor_division BigFloat // Int16 returns BigFloat + converts from BigFloat to Float64 converts from BigFloat to Float64 + converts from BigRational to UInt8 converts from BigRational to UInt8 + division between UInt32 / BigDecimal returns BigDecimal division between UInt32 / BigDecimal returns BigDecimal + floor_division BigFloat // UInt8 returns BigFloat floor_division BigFloat // UInt8 returns BigFloat + floor_division BigFloat // UInt64 returns BigFloat floor_division BigFloat // UInt64 returns BigFloat + converts from BigFloat to Int8 converts from BigFloat to Int8 + converts from UInt32 to BigInt converts from UInt32 to BigInt + floor_division BigDecimal // Float32 returns BigDecimal floor_division BigDecimal // Float32 returns BigDecimal + floor_division Float64 // BigFloat returns Float64 floor_division Float64 // BigFloat returns Float64 + division between Int32 / BigRational returns BigRational division between Int32 / BigRational returns BigRational + division between BigDecimal / BigRational returns BigRational division between BigDecimal / BigRational returns BigRational + floor_division UInt64 // BigFloat returns UInt64 floor_division UInt64 // BigFloat returns UInt64 + division between Int32 / BigInt returns BigFloat division between Int32 / BigInt returns BigFloat + floor_division Int8 // BigDecimal returns Int8 floor_division Int8 // BigDecimal returns Int8 + converts from BigDecimal to UInt16 converts from BigDecimal to UInt16 + division between Float32 / BigRational returns BigRational division between Float32 / BigRational returns BigRational + converts from BigRational to Int32 converts from BigRational to Int32 + converts from BigFloat to Int16 converts from BigFloat to Int16 + converts from UInt16 to BigFloat converts from UInt16 to BigFloat + division between UInt16 / BigRational returns BigRational division between UInt16 / BigRational returns BigRational + converts from Int32 to BigInt converts from Int32 to BigInt + division between BigInt / Int64 returns BigFloat division between BigInt / Int64 returns BigFloat + converts from Float32 to BigDecimal converts from Float32 to BigDecimal + converts from BigInt to UInt16 converts from BigInt to UInt16 + floor_division Int32 // BigInt returns Int32 floor_division Int32 // BigInt returns Int32 + division between BigRational / BigDecimal returns BigRational division between BigRational / BigDecimal returns BigRational + floor_division UInt64 // BigDecimal returns UInt64 floor_division UInt64 // BigDecimal returns UInt64 + division between Int64 / BigRational returns BigRational division between Int64 / BigRational returns BigRational + division between BigFloat / Int8 returns BigFloat division between BigFloat / Int8 returns BigFloat + converts from Float32 to BigRational converts from Float32 to BigRational + converts from BigFloat to UInt32 converts from BigFloat to UInt32 + converts from BigFloat to Int64 converts from BigFloat to Int64 + division between Int16 / BigDecimal returns BigDecimal division between Int16 / BigDecimal returns BigDecimal + converts from Int16 to BigRational converts from Int16 to BigRational + converts from Float64 to BigRational converts from Float64 to BigRational + converts from BigRational to BigInt converts from BigRational to BigInt + converts from BigRational to Int8 converts from BigRational to Int8 + converts from BigInt to Int16 converts from BigInt to Int16 + converts from BigFloat to Float32 converts from BigFloat to Float32 + converts from Int64 to BigRational converts from Int64 to BigRational + converts from Int16 to BigInt converts from Int16 to BigInt + converts from Int64 to BigDecimal converts from Int64 to BigDecimal + converts from BigFloat to UInt8 converts from BigFloat to UInt8 + converts from UInt32 to BigFloat converts from UInt32 to BigFloat + floor_division BigDecimal // Float64 returns BigDecimal floor_division BigDecimal // Float64 returns BigDecimal + converts from Int32 to BigFloat converts from Int32 to BigFloat + converts from Float32 to BigInt converts from Float32 to BigInt + converts from Int64 to BigFloat converts from Int64 to BigFloat + division between BigRational / Int64 returns BigRational division between BigRational / Int64 returns BigRational + division between BigRational / Float32 returns BigRational division between BigRational / Float32 returns BigRational + floor_division Int64 // BigInt returns Int64 floor_division Int64 // BigInt returns Int64 + division between UInt16 / BigDecimal returns BigDecimal division between UInt16 / BigDecimal returns BigDecimal + floor_division Int32 // BigRational returns Int32 floor_division Int32 // BigRational returns Int32 + division between BigDecimal / BigDecimal returns BigDecimal division between BigDecimal / BigDecimal returns BigDecimal + floor_division BigDecimal // Int64 returns BigDecimal floor_division BigDecimal // Int64 returns BigDecimal + converts from Int64 to BigInt converts from Int64 to BigInt + floor_division UInt64 // BigInt returns UInt64 floor_division UInt64 // BigInt returns UInt64 + converts from Int16 to BigInt converts from Int16 to BigInt + floor_division BigFloat // BigRational returns BigFloat floor_division BigFloat // BigRational returns BigFloat + division between Int16 / BigFloat returns BigFloat division between Int16 / BigFloat returns BigFloat + division between UInt64 / BigDecimal returns BigDecimal division between UInt64 / BigDecimal returns BigDecimal + division between BigRational / UInt128 returns BigRational division between BigRational / UInt128 returns BigRational + division between BigDecimal / UInt8 returns BigDecimal division between BigDecimal / UInt8 returns BigDecimal + converts from UInt8 to BigInt converts from UInt8 to BigInt + floor_division Int8 // BigRational returns Int8 floor_division Int8 // BigRational returns Int8 + floor_division Float32 // BigFloat returns Float32 floor_division Float32 // BigFloat returns Float32 + division between BigDecimal / Float32 returns BigDecimal division between BigDecimal / Float32 returns BigDecimal + converts from UInt8 to BigRational converts from UInt8 to BigRational + converts from BigDecimal to BigDecimal converts from BigDecimal to BigDecimal + floor_division BigInt // UInt64 returns BigInt floor_division BigInt // UInt64 returns BigInt + converts from BigInt to Int16 converts from BigInt to Int16 + converts from Int16 to BigDecimal converts from Int16 to BigDecimal + converts from BigInt to Int8 converts from BigInt to Int8 + division between UInt64 / BigInt returns BigFloat division between UInt64 / BigInt returns BigFloat + floor_division UInt16 // BigFloat returns UInt16 floor_division UInt16 // BigFloat returns UInt16 + division between BigInt / UInt64 returns BigFloat division between BigInt / UInt64 returns BigFloat + floor_division BigRational // Int64 returns BigRational floor_division BigRational // Int64 returns BigRational + converts from BigRational to BigFloat converts from BigRational to BigFloat + converts from BigInt to BigRational converts from BigInt to BigRational + division between BigRational / Float64 returns BigRational division between BigRational / Float64 returns BigRational + converts from BigRational to Int64 converts from BigRational to Int64 + converts from UInt8 to BigDecimal converts from UInt8 to BigDecimal + division between BigDecimal / BigFloat returns BigDecimal division between BigDecimal / BigFloat returns BigDecimal + floor_division BigRational // Int8 returns BigRational floor_division BigRational // Int8 returns BigRational + floor_division Int16 // BigFloat returns Int16 floor_division Int16 // BigFloat returns Int16 + floor_division BigDecimal // UInt16 returns BigDecimal floor_division BigDecimal // UInt16 returns BigDecimal + converts from BigDecimal to BigRational converts from BigDecimal to BigRational + floor_division UInt16 // BigRational returns UInt16 floor_division UInt16 // BigRational returns UInt16 + floor_division BigRational // BigInt returns BigRational floor_division BigRational // BigInt returns BigRational + floor_division UInt8 // BigFloat returns UInt8 floor_division UInt8 // BigFloat returns UInt8 + division between Int8 / BigDecimal returns BigDecimal division between Int8 / BigDecimal returns BigDecimal + floor_division Int64 // BigDecimal returns Int64 floor_division Int64 // BigDecimal returns Int64 + floor_division BigRational // UInt16 returns BigRational floor_division BigRational // UInt16 returns BigRational + converts from Float64 to BigDecimal converts from Float64 to BigDecimal + converts from BigInt to UInt64 converts from BigInt to UInt64 + floor_division BigDecimal // UInt32 returns BigDecimal floor_division BigDecimal // UInt32 returns BigDecimal + floor_division Int16 // BigRational returns Int16 floor_division Int16 // BigRational returns Int16 + converts from BigInt to Int8 converts from BigInt to Int8 + converts from BigInt to UInt32 converts from BigInt to UInt32 + converts from BigDecimal to UInt64 converts from BigDecimal to UInt64 + division between BigFloat / UInt8 returns BigFloat division between BigFloat / UInt8 returns BigFloat + floor_division UInt8 // BigDecimal returns UInt8 floor_division UInt8 // BigDecimal returns UInt8 + floor_division UInt16 // BigDecimal returns UInt16 floor_division UInt16 // BigDecimal returns UInt16 + floor_division BigFloat // UInt32 returns BigFloat floor_division BigFloat // UInt32 returns BigFloat + division between BigInt / Int8 returns BigFloat division between BigInt / Int8 returns BigFloat + converts from UInt16 to BigRational converts from UInt16 to BigRational + initialize from value to BigInt initialize from value to BigInt + converts from Int64 to BigInt converts from Int64 to BigInt + floor_division BigDecimal // BigRational returns BigDecimal floor_division BigDecimal // BigRational returns BigDecimal + converts from Int32 to BigRational converts from Int32 to BigRational + converts from Int16 to BigFloat converts from Int16 to BigFloat + converts from BigRational to Int8 converts from BigRational to Int8 + converts from BigInt to BigRational converts from BigInt to BigRational + converts from BigDecimal to Int16 converts from BigDecimal to Int16 + converts from BigRational to UInt64 converts from BigRational to UInt64 + converts from Int32 to BigDecimal converts from Int32 to BigDecimal + converts from BigFloat to BigInt converts from BigFloat to BigInt + converts from BigFloat to BigDecimal converts from BigFloat to BigDecimal + converts from BigInt to BigFloat converts from BigInt to BigFloat + floor_division BigDecimal // UInt8 returns BigDecimal floor_division BigDecimal // UInt8 returns BigDecimal + converts from Float64 to BigFloat converts from Float64 to BigFloat + floor_division BigRational // Float64 returns BigRational floor_division BigRational // Float64 returns BigRational + division between Float32 / BigInt returns BigFloat division between Float32 / BigInt returns BigFloat + floor_division BigFloat // Float32 returns BigFloat floor_division BigFloat // Float32 returns BigFloat + division between UInt8 / BigDecimal returns BigDecimal division between UInt8 / BigDecimal returns BigDecimal + division between BigFloat / UInt32 returns BigFloat division between BigFloat / UInt32 returns BigFloat + floor_division Int64 // BigRational returns Int64 floor_division Int64 // BigRational returns Int64 + converts from Float64 to BigDecimal converts from Float64 to BigDecimal + converts from BigRational to Int32 converts from BigRational to Int32 + converts from BigRational to Float64 converts from BigRational to Float64 + division between BigRational / BigRational returns BigRational division between BigRational / BigRational returns BigRational + floor_division BigInt // BigRational returns BigInt floor_division BigInt // BigRational returns BigInt + floor_division Float32 // BigInt returns Float32 floor_division Float32 // BigInt returns Float32 + division between BigInt / Float64 returns BigFloat division between BigInt / Float64 returns BigFloat + converts from BigInt to Float64 converts from BigInt to Float64 + converts from BigDecimal to UInt16 converts from BigDecimal to UInt16 + converts from BigInt to UInt64 converts from BigInt to UInt64 + converts from Int8 to BigDecimal converts from Int8 to BigDecimal + converts from Int8 to BigRational converts from Int8 to BigRational + division between Int128 / BigDecimal returns BigDecimal division between Int128 / BigDecimal returns BigDecimal + converts from BigFloat to BigFloat converts from BigFloat to BigFloat + converts from Int8 to BigRational converts from Int8 to BigRational + converts from BigFloat to Int64 converts from BigFloat to Int64 + floor_division BigInt // Int8 returns BigInt floor_division BigInt // Int8 returns BigInt + converts from UInt16 to BigFloat converts from UInt16 to BigFloat + converts from BigRational to UInt16 converts from BigRational to UInt16 + floor_division BigRational // Int16 returns BigRational floor_division BigRational // Int16 returns BigRational + floor_division BigFloat // BigFloat returns BigFloat floor_division BigFloat // BigFloat returns BigFloat + converts from BigInt to Float32 converts from BigInt to Float32 + division between BigFloat / Int128 returns BigFloat division between BigFloat / Int128 returns BigFloat + converts from BigInt to Int64 converts from BigInt to Int64 + converts from UInt32 to BigDecimal converts from UInt32 to BigDecimal + converts from Float32 to BigInt converts from Float32 to BigInt + converts from BigDecimal to Float32 converts from BigDecimal to Float32 + converts from BigFloat to Float32 converts from BigFloat to Float32 + floor_division Int32 // BigDecimal returns Int32 floor_division Int32 // BigDecimal returns Int32 + division between UInt8 / BigFloat returns BigFloat division between UInt8 / BigFloat returns BigFloat + division between BigInt / UInt8 returns BigFloat division between BigInt / UInt8 returns BigFloat + converts from BigDecimal to Int32 converts from BigDecimal to Int32 + division between BigDecimal / Int32 returns BigDecimal division between BigDecimal / Int32 returns BigDecimal + converts from BigInt to Int64 converts from BigInt to Int64 + converts from BigFloat to BigRational converts from BigFloat to BigRational + converts from Float32 to BigRational converts from Float32 to BigRational + division between Int64 / BigDecimal returns BigDecimal division between Int64 / BigDecimal returns BigDecimal + floor_division Int16 // BigInt returns Int16 floor_division Int16 // BigInt returns Int16 + division between BigRational / UInt64 returns BigRational division between BigRational / UInt64 returns BigRational + converts from BigInt to Int32 converts from BigInt to Int32 + converts from BigRational to Int64 converts from BigRational to Int64 + initialize from value to BigRational initialize from value to BigRational + converts from BigRational to UInt32 converts from BigRational to UInt32 + converts from UInt64 to BigRational converts from UInt64 to BigRational + floor_division BigInt // UInt16 returns BigInt floor_division BigInt // UInt16 returns BigInt + division between UInt8 / BigRational returns BigRational division between UInt8 / BigRational returns BigRational + division between BigRational / BigFloat returns BigRational division between BigRational / BigFloat returns BigRational + division between BigFloat / BigDecimal returns BigDecimal division between BigFloat / BigDecimal returns BigDecimal + division between Int64 / BigFloat returns BigFloat division between Int64 / BigFloat returns BigFloat + converts from BigRational to Int16 converts from BigRational to Int16 + floor_division BigRational // Int32 returns BigRational floor_division BigRational // Int32 returns BigRational + division between BigRational / Int128 returns BigRational division between BigRational / Int128 returns BigRational + converts from BigDecimal to BigInt converts from BigDecimal to BigInt + division between UInt128 / BigFloat returns BigFloat division between UInt128 / BigFloat returns BigFloat + converts from BigFloat to UInt64 converts from BigFloat to UInt64 + division between UInt32 / BigInt returns BigFloat division between UInt32 / BigInt returns BigFloat + division between BigInt / BigRational returns BigRational division between BigInt / BigRational returns BigRational + converts from BigFloat to UInt64 converts from BigFloat to UInt64 + division between UInt64 / BigFloat returns BigFloat division between UInt64 / BigFloat returns BigFloat + converts from Int8 to BigInt converts from Int8 to BigInt + division between BigFloat / UInt64 returns BigFloat division between BigFloat / UInt64 returns BigFloat + converts from UInt32 to BigDecimal converts from UInt32 to BigDecimal + division between BigFloat / UInt128 returns BigFloat division between BigFloat / UInt128 returns BigFloat + converts from BigDecimal to BigRational converts from BigDecimal to BigRational + converts from UInt64 to BigInt converts from UInt64 to BigInt + converts from BigDecimal to UInt8 converts from BigDecimal to UInt8 + converts from BigFloat to Float64 converts from BigFloat to Float64 + floor_division BigRational // UInt64 returns BigRational floor_division BigRational // UInt64 returns BigRational + converts from BigFloat to BigDecimal converts from BigFloat to BigDecimal + floor_division BigInt // Int16 returns BigInt floor_division BigInt // Int16 returns BigInt + floor_division Int32 // BigFloat returns Int32 floor_division Int32 // BigFloat returns Int32 + converts from Int8 to BigInt converts from Int8 to BigInt + converts from BigFloat to UInt32 converts from BigFloat to UInt32 + division between BigInt / Int32 returns BigFloat division between BigInt / Int32 returns BigFloat + converts from BigDecimal to BigDecimal converts from BigDecimal to BigDecimal + converts from BigInt to Float32 converts from BigInt to Float32 + converts from Float64 to BigInt converts from Float64 to BigInt + converts from UInt16 to BigDecimal converts from UInt16 to BigDecimal + division between Float64 / BigDecimal returns BigDecimal division between Float64 / BigDecimal returns BigDecimal + floor_division BigFloat // Int32 returns BigFloat floor_division BigFloat // Int32 returns BigFloat + division between Int8 / BigInt returns BigFloat division between Int8 / BigInt returns BigFloat + converts from UInt16 to BigRational converts from UInt16 to BigRational + division between Int128 / BigRational returns BigRational division between Int128 / BigRational returns BigRational + converts from BigFloat to Int8 converts from BigFloat to Int8 + converts from UInt8 to BigDecimal converts from UInt8 to BigDecimal + division between Int8 / BigFloat returns BigFloat division between Int8 / BigFloat returns BigFloat + converts from UInt8 to BigFloat converts from UInt8 to BigFloat + division between BigRational / Int8 returns BigRational division between BigRational / Int8 returns BigRational + division between Int16 / BigRational returns BigRational division between Int16 / BigRational returns BigRational + converts from BigInt to UInt8 converts from BigInt to UInt8 + converts from Float64 to BigInt converts from Float64 to BigInt + floor_division BigFloat // BigDecimal returns BigFloat floor_division BigFloat // BigDecimal returns BigFloat + floor_division BigDecimal // Int8 returns BigDecimal floor_division BigDecimal // Int8 returns BigDecimal + division between BigDecimal / UInt32 returns BigDecimal division between BigDecimal / UInt32 returns BigDecimal + converts from BigInt to Int32 converts from BigInt to Int32 + converts from BigInt to BigDecimal converts from BigInt to BigDecimal + division between UInt128 / BigInt returns BigFloat division between UInt128 / BigInt returns BigFloat + converts from BigRational to Float64 converts from BigRational to Float64 + division between BigFloat / Int16 returns BigFloat division between BigFloat / Int16 returns BigFloat + floor_division BigRational // UInt8 returns BigRational floor_division BigRational // UInt8 returns BigRational + floor_division BigFloat // BigInt returns BigFloat floor_division BigFloat // BigInt returns BigFloat + division between BigInt / BigInt returns BigFloat division between BigInt / BigInt returns BigFloat + division between Float64 / BigFloat returns BigFloat division between Float64 / BigFloat returns BigFloat + floor_division BigDecimal // BigFloat returns BigDecimal floor_division BigDecimal // BigFloat returns BigDecimal + converts from Float32 to BigFloat converts from Float32 to BigFloat + division between UInt32 / BigFloat returns BigFloat division between UInt32 / BigFloat returns BigFloat + converts from BigInt to UInt32 converts from BigInt to UInt32 + converts from UInt16 to BigDecimal converts from UInt16 to BigDecimal + initialize from value to BigDecimal initialize from value to BigDecimal + division between Float32 / BigFloat returns BigFloat division between Float32 / BigFloat returns BigFloat + division between BigDecimal / Float64 returns BigDecimal division between BigDecimal / Float64 returns BigDecimal + floor_division BigInt // Int32 returns BigInt floor_division BigInt // Int32 returns BigInt + converts from BigDecimal to Int64 converts from BigDecimal to Int64 + converts from BigDecimal to Int64 converts from BigDecimal to Int64 + converts from BigRational to Int16 converts from BigRational to Int16 + division between BigDecimal / Int16 returns BigDecimal division between BigDecimal / Int16 returns BigDecimal + floor_division UInt32 // BigInt returns UInt32 floor_division UInt32 // BigInt returns UInt32 + floor_division BigFloat // Int8 returns BigFloat floor_division BigFloat // Int8 returns BigFloat + floor_division BigInt // BigInt returns BigInt floor_division BigInt // BigInt returns BigInt + floor_division Float64 // BigDecimal returns Float64 floor_division Float64 // BigDecimal returns Float64 + division between UInt16 / BigInt returns BigFloat division between UInt16 / BigInt returns BigFloat + division between Float64 / BigInt returns BigFloat division between Float64 / BigInt returns BigFloat + converts from UInt64 to BigFloat converts from UInt64 to BigFloat + division between BigDecimal / BigDecimal returns BigDecimal division between BigDecimal / BigDecimal returns BigDecimal + floor_division Float32 // BigDecimal returns Float32 floor_division Float32 // BigDecimal returns Float32 + converts from UInt32 to BigRational converts from UInt32 to BigRational + converts from BigRational to UInt32 converts from BigRational to UInt32 + converts from BigFloat to Int32 converts from BigFloat to Int32 + division between BigInt / UInt16 returns BigFloat division between BigInt / UInt16 returns BigFloat + floor_division Int8 // BigInt returns Int8 floor_division Int8 // BigInt returns Int8 + converts from BigRational to UInt64 converts from BigRational to UInt64 + converts from UInt8 to BigFloat converts from UInt8 to BigFloat + division between UInt8 / BigInt returns BigFloat division between UInt8 / BigInt returns BigFloat + converts from BigRational to BigDecimal converts from BigRational to BigDecimal + converts from BigRational to BigInt converts from BigRational to BigInt + converts from UInt16 to BigInt converts from UInt16 to BigInt + converts from BigDecimal to Float32 converts from BigDecimal to Float32 + converts from BigFloat to UInt16 converts from BigFloat to UInt16 + converts from UInt16 to BigInt converts from UInt16 to BigInt + converts from BigRational to BigRational converts from BigRational to BigRational + converts from BigRational to UInt8 converts from BigRational to UInt8 + division between BigRational / Int16 returns BigRational division between BigRational / Int16 returns BigRational + converts from BigDecimal to Int8 converts from BigDecimal to Int8 + converts from Float64 to BigRational converts from Float64 to BigRational + floor_division UInt64 // BigRational returns UInt64 floor_division UInt64 // BigRational returns UInt64 + division between BigRational / Int32 returns BigRational division between BigRational / Int32 returns BigRational + converts from BigFloat to BigInt converts from BigFloat to BigInt + floor_division Float64 // BigRational returns Float64 floor_division Float64 // BigRational returns Float64 + converts from Int16 to BigDecimal converts from Int16 to BigDecimal + converts from Int32 to BigRational converts from Int32 to BigRational + division between BigDecimal / UInt16 returns BigDecimal division between BigDecimal / UInt16 returns BigDecimal + division between BigInt / Float32 returns BigFloat division between BigInt / Float32 returns BigFloat + floor_division BigInt // UInt8 returns BigInt floor_division BigInt // UInt8 returns BigInt + converts from BigInt to BigFloat converts from BigInt to BigFloat + converts from BigFloat to UInt16 converts from BigFloat to UInt16 + floor_division UInt32 // BigRational returns UInt32 floor_division UInt32 // BigRational returns UInt32 + converts from UInt32 to BigRational converts from UInt32 to BigRational + division between Int128 / BigFloat returns BigFloat division between Int128 / BigFloat returns BigFloat + floor_division BigInt // BigFloat returns BigInt floor_division BigInt // BigFloat returns BigInt + converts from Int8 to BigDecimal converts from Int8 to BigDecimal + floor_division Int64 // BigFloat returns Int64 floor_division Int64 // BigFloat returns Int64 + floor_division Float32 // BigRational returns Float32 floor_division Float32 // BigRational returns Float32 + floor_division BigInt // Float32 returns BigInt floor_division BigInt // Float32 returns BigInt + division between BigFloat / BigInt returns BigFloat division between BigFloat / BigInt returns BigFloat + converts from UInt64 to BigRational converts from UInt64 to BigRational + division between BigInt / UInt128 returns BigFloat division between BigInt / UInt128 returns BigFloat + converts from Float32 to BigFloat converts from Float32 to BigFloat + floor_division Int8 // BigFloat returns Int8 floor_division Int8 // BigFloat returns Int8 + division between UInt16 / BigFloat returns BigFloat division between UInt16 / BigFloat returns BigFloat + division between Int8 / BigRational returns BigRational division between Int8 / BigRational returns BigRational + converts from BigRational to Float32 converts from BigRational to Float32 + floor_division BigDecimal // BigInt returns BigDecimal floor_division BigDecimal // BigInt returns BigDecimal + division between BigFloat / BigRational returns BigRational division between BigFloat / BigRational returns BigRational + floor_division BigDecimal // Int32 returns BigDecimal floor_division BigDecimal // Int32 returns BigDecimal + floor_division BigRational // UInt32 returns BigRational floor_division BigRational // UInt32 returns BigRational + converts from Int64 to BigRational converts from Int64 to BigRational +#errors + makes errors accessible makes errors accessible +TCPSocket + sync from server sync from server + sends and receives messages sends and receives messages + fails when connection is refused fails when connection is refused + #connect + using IPv4 + raises when port is negative raises when port is negative + raises when connection is refused raises when connection is refused + connects to server connects to server + raises when port is zero raises when port is zero + fails to connect IPv6 to IPv4 server fails to connect IPv6 to IPv4 server + address resolution + connects to localhost connects to localhost + raises when host doesn't exist raises when host doesn't exist + raises (rather than segfault on darwin) when host doesn't exist and port is 0 raises (rather than segfault on darwin) when host doesn't exist and port is 0 + using IPv6 + raises when connection is refused raises when connection is refused + raises when port is zero raises when port is zero + raises when port is negative raises when port is negative + connects to server connects to server + sends and receives messages sends and receives messages + settings settings +Log::ProcFormatter + formats formats +Float64#to_s + converts 1000000000010000.0 to "1.00000000001e+15" converts 1000000000010000.0 to "1.00000000001e+15" + converts 8589934592000.0 to "8589934592000.0" converts 8589934592000.0 to "8589934592000.0" + converts 1.23456789012345 to "1.23456789012345" converts 1.23456789012345 to "1.23456789012345" + converts 1000000000000010.0 to "1.00000000000001e+15" converts 1000000000000010.0 to "1.00000000000001e+15" + converts 549755813888000.0 to "549755813888000.0" converts 549755813888000.0 to "549755813888000.0" + converts 1.2345 to "1.2345" converts 1.2345 to "1.2345" + converts 1000000000000000.0 to "1.0e+15" converts 1000000000000000.0 to "1.0e+15" + converts 12345.0 to "12345.0" converts 12345.0 to "12345.0" + converts 65536.0 to "65536.0" converts 65536.0 to "65536.0" + converts 1000.0 to "1000.0" converts 1000.0 to "1000.0" + Ryu d2s_test.cc LotsOfTrailingZeros + converts 2.98023223876953125e-8 to "2.9802322387695312e-8" converts 2.98023223876953125e-8 to "2.9802322387695312e-8" + converts 1000000000000100.0 to "1.0000000000001e+15" converts 1000000000000100.0 to "1.0000000000001e+15" + converts 1100000000000000.0 to "1.1e+15" converts 1100000000000000.0 to "1.1e+15" + converts 1234567.0 to "1234567.0" converts 1234567.0 to "1234567.0" + converts 1.2345678901 to "1.2345678901" converts 1.2345678901 to "1.2345678901" + converts 512000.0 to "512000.0" converts 512000.0 to "512000.0" + converts 12.0 to "12.0" converts 12.0 to "12.0" + Ryu d2s_test.cc LooksLikePow5 + converts 0x1.0f0cf064dd592p+132 to "5.764607523034235e+39" converts 0x1.0f0cf064dd592p+132 to "5.764607523034235e+39" + converts 0x1.0f0cf064dd592p+133 to "1.152921504606847e+40" converts 0x1.0f0cf064dd592p+133 to "1.152921504606847e+40" + converts 0x1.0f0cf064dd592p+134 to "2.305843009213694e+40" converts 0x1.0f0cf064dd592p+134 to "2.305843009213694e+40" + converts 123456789012345.0 to "123456789012345.0" converts 123456789012345.0 to "123456789012345.0" + converts 1234.0 to "1234.0" converts 1234.0 to "1234.0" + converts 1.23456 to "1.23456" converts 1.23456 to "1.23456" + converts 512.0 to "512.0" converts 512.0 to "512.0" + converts 1234567890123.0 to "1234567890123.0" converts 1234567890123.0 to "1234567890123.0" + converts 100000.0 to "100000.0" converts 100000.0 to "100000.0" + converts 65536000.0 to "65536000.0" converts 65536000.0 to "65536000.0" + almost-but-not-quite-anomalous values + converts 0x1p890 to "8.25460204899477e+267" converts 0x1p890 to "8.25460204899477e+267" + converts 0x1p-569 to "5.17526350329881e-172" converts 0x1p-569 to "5.17526350329881e-172" + converts 0x1p-645 to "6.84940421565126e-195" converts 0x1p-645 to "6.84940421565126e-195" + converts 0x1p-499 to "6.10987272699921e-151" converts 0x1p-499 to "6.10987272699921e-151" + converts 0x1p966 to "6.237000967296e+290" converts 0x1p966 to "6.237000967296e+290" + converts 0x1p149 to "7.1362384635298e+44" converts 0x1p149 to "7.1362384635298e+44" + converts 0x1p956 to "6.090821257125e+287" converts 0x1p956 to "6.090821257125e+287" + converts 0x1p740 to "5.78358058743443e+222" converts 0x1p740 to "5.78358058743443e+222" + special cases + converts Float64::MIN_SUBNORMAL to "5.0e-324" converts Float64::MIN_SUBNORMAL to "5.0e-324" + converts Float64::INFINITY to "Infinity" converts Float64::INFINITY to "Infinity" + converts 18444492273895866368_u64.unsafe_as(Float64) to "NaN" converts 18444492273895866368_u64.unsafe_as(Float64) to "NaN" + converts 0.0 to "0.0" converts 0.0 to "0.0" + converts -0.0 to "-0.0" converts -0.0 to "-0.0" + converts Float64::MIN_POSITIVE to "2.2250738585072014e-308" converts Float64::MIN_POSITIVE to "2.2250738585072014e-308" + converts Float64::MIN_POSITIVE.prev_float to "2.225073858507201e-308" converts Float64::MIN_POSITIVE.prev_float to "2.225073858507201e-308" + converts -Float64::INFINITY to "-Infinity" converts -Float64::INFINITY to "-Infinity" + converts Float64::MAX to "1.7976931348623157e+308" converts Float64::MAX to "1.7976931348623157e+308" + converts 9221120237041090560_u64.unsafe_as(Float64) to "NaN" converts 9221120237041090560_u64.unsafe_as(Float64) to "NaN" + converts 1010000000000000.0 to "1.01e+15" converts 1010000000000000.0 to "1.01e+15" + converts 8.0 to "8.0" converts 8.0 to "8.0" + converts 64.0 to "64.0" converts 64.0 to "64.0" + converts 1000100000000000.0 to "1.0001e+15" converts 1000100000000000.0 to "1.0001e+15" + converts 1000000000000001.0 to "1.000000000000001e+15" converts 1000000000000001.0 to "1.000000000000001e+15" + converts 1.234567895 to "1.234567895" converts 1.234567895 to "1.234567895" + Ryu d2s_test.cc 32-bit Chunking + converts 4.294967295 to "4.294967295" converts 4.294967295 to "4.294967295" + converts 4.294967297 to "4.294967297" converts 4.294967297 to "4.294967297" + converts 4.294967296 to "4.294967296" converts 4.294967296 to "4.294967296" + converts 4.294967298 to "4.294967298" converts 4.294967298 to "4.294967298" + converts 4.294967294 to "4.294967294" converts 4.294967294 to "4.294967294" + converts 10000000000000.0 to "10000000000000.0" converts 10000000000000.0 to "10000000000000.0" + Ryu d2s_test.cc MinMaxShift + converts 0x1.0000000000000p+54 to "1.8014398509481984e+16" converts 0x1.0000000000000p+54 to "1.8014398509481984e+16" + converts 0x1.fffffffffffffp-716 to "5.801671039719115e-216" converts 0x1.fffffffffffffp-716 to "5.801671039719115e-216" + converts 0x1.0000000000000p-982 to "2.446494580089078e-296" converts 0x1.0000000000000p-982 to "2.446494580089078e-296" + converts 0x1.0000000000000p-716 to "2.900835519859558e-216" converts 0x1.0000000000000p-716 to "2.900835519859558e-216" + converts 0x1.fffffffffffffp+54 to "3.6028797018963964e+16" converts 0x1.fffffffffffffp+54 to "3.6028797018963964e+16" + converts 0x1.0000000000000p-1019 to "1.7800590868057611e-307" converts 0x1.0000000000000p-1019 to "1.7800590868057611e-307" + converts 0x1.fffffffffffffp-1016 to "2.8480945388892175e-306" converts 0x1.fffffffffffffp-1016 to "2.8480945388892175e-306" + converts 0x1.fa7161a4d6e0cp-89 to "3.196104012172126e-27" converts 0x1.fa7161a4d6e0cp-89 to "3.196104012172126e-27" + converts 0x1.fffffffffffffp-982 to "4.8929891601781557e-296" converts 0x1.fffffffffffffp-982 to "4.8929891601781557e-296" + converts 8796093022208000.0 to "8.796093022208e+15" converts 8796093022208000.0 to "8.796093022208e+15" + converts 67108864000.0 to "67108864000.0" converts 67108864000.0 to "67108864000.0" + converts 1.0 to "1.0" converts 1.0 to "1.0" + converts 10000.0 to "10000.0" converts 10000.0 to "10000.0" + converts 1000010000000000.0 to "1.00001e+15" converts 1000010000000000.0 to "1.00001e+15" + converts 1234567890.0 to "1234567890.0" converts 1234567890.0 to "1234567890.0" + converts 10.0 to "10.0" converts 10.0 to "10.0" + converts 1000000000000.0 to "1000000000000.0" converts 1000000000000.0 to "1000000000000.0" + converts 1000000000100000.0 to "1.0000000001e+15" converts 1000000000100000.0 to "1.0000000001e+15" + converts 1000000000.0 to "1000000000.0" converts 1000000000.0 to "1000000000.0" + anomalous values + converts 0x1p122 to "5.316911983139664e+36" converts 0x1p122 to "5.316911983139664e+36" + converts 0x1p-662 to "5.225680706521042e-200" converts 0x1p-662 to "5.225680706521042e-200" + converts 0x1p-791 to "7.678447687145631e-239" converts 0x1p-791 to "7.678447687145631e-239" + converts 0x1p896 to "5.282945311356653e+269" converts 0x1p896 to "5.282945311356653e+269" + converts 0x1p-652 to "5.351097043477547e-197" converts 0x1p-652 to "5.351097043477547e-197" + converts 0x1p89 to "6.189700196426902e+26" converts 0x1p89 to "6.189700196426902e+26" + converts 0x1p976 to "6.386688990511104e+293" converts 0x1p976 to "6.386688990511104e+293" + converts 0x1p-140 to "7.174648137343064e-43" converts 0x1p-140 to "7.174648137343064e-43" + converts 0x1p-705 to "5.940911144672375e-213" converts 0x1p-705 to "5.940911144672375e-213" + converts 0x1p-496 to "4.887898181599368e-150" converts 0x1p-496 to "4.887898181599368e-150" + converts 0x1p803 to "5.334411546303884e+241" converts 0x1p803 to "5.334411546303884e+241" + converts 0x1p-44 to "5.684341886080802e-14" converts 0x1p-44 to "5.684341886080802e-14" + converts 0x1p132 to "5.444517870735016e+39" converts 0x1p132 to "5.444517870735016e+39" + converts 0x1p-24 to "5.960464477539063e-8" converts 0x1p-24 to "5.960464477539063e-8" + converts 0x1p863 to "6.150157786156811e+259" converts 0x1p863 to "6.150157786156811e+259" + converts 0x1p398 to "6.455624695217272e+119" converts 0x1p398 to "6.455624695217272e+119" + converts 0x1p-788 to "6.142758149716505e-238" converts 0x1p-788 to "6.142758149716505e-238" + converts 0x1p405 to "8.263199609878108e+121" converts 0x1p405 to "8.263199609878108e+121" + converts 0x1p-366 to "6.653062250012736e-111" converts 0x1p-366 to "6.653062250012736e-111" + converts 0x1p574 to "6.183260036827614e+172" converts 0x1p574 to "6.183260036827614e+172" + converts 0x1p-97 to "6.310887241768095e-30" converts 0x1p-97 to "6.310887241768095e-30" + converts 0x1p182 to "6.129982163463556e+54" converts 0x1p182 to "6.129982163463556e+54" + converts 0x1p710 to "5.386379163185535e+213" converts 0x1p710 to "5.386379163185535e+213" + converts 0x1p275 to "6.070840288205404e+82" converts 0x1p275 to "6.070840288205404e+82" + converts 0x1p-549 to "5.426657103235053e-166" converts 0x1p-549 to "5.426657103235053e-166" + converts 0x1p544 to "5.758609657015292e+163" converts 0x1p544 to "5.758609657015292e+163" + converts 0x1p-383 to "5.075883674631299e-116" converts 0x1p-383 to "5.075883674631299e-116" + converts 0x1p-1007 to "7.291122019556398e-304" converts 0x1p-1007 to "7.291122019556398e-304" + converts 0x1p-296 to "7.854549544476363e-90" converts 0x1p-296 to "7.854549544476363e-90" + converts 0x1p-77 to "6.617444900424222e-24" converts 0x1p-77 to "6.617444900424222e-24" + converts 0x1p-921 to "5.641232424577593e-278" converts 0x1p-921 to "5.641232424577593e-278" + converts 0x1p-778 to "6.290184345309701e-235" converts 0x1p-778 to "6.290184345309701e-235" + converts 0x1p594 to "6.483618076376552e+178" converts 0x1p594 to "6.483618076376552e+178" + converts 0x1p305 to "6.518515124270356e+91" converts 0x1p305 to "6.518515124270356e+91" + converts 0x1p345 to "7.167183174968974e+103" converts 0x1p345 to "7.167183174968974e+103" + converts 0x1p378 to "6.156563468186638e+113" converts 0x1p378 to "6.156563468186638e+113" + converts 0x1p-808 to "5.858190679279809e-244" converts 0x1p-808 to "5.858190679279809e-244" + converts 0x1p534 to "5.623642243178996e+160" converts 0x1p534 to "5.623642243178996e+160" + converts 0x1p-509 to "5.966672584960166e-154" converts 0x1p-509 to "5.966672584960166e-154" + converts 0x1p554 to "5.896816288783659e+166" converts 0x1p554 to "5.896816288783659e+166" + converts 0x1p-489 to "6.256509672447191e-148" converts 0x1p-489 to "6.256509672447191e-148" + converts 0x1p-1017 to "7.120236347223045e-307" converts 0x1p-1017 to "7.120236347223045e-307" + converts 0x1p-695 to "6.083493012144512e-210" converts 0x1p-695 to "6.083493012144512e-210" + converts 0x1p172 to "5.986310706507379e+51" converts 0x1p172 to "5.986310706507379e+51" + converts 0x1p481 to "6.243497100631985e+144" converts 0x1p481 to "6.243497100631985e+144" + converts 0x1p-957 to "8.209073602596753e-289" converts 0x1p-957 to "8.209073602596753e-289" + converts 12345678901234.0 to "12345678901234.0" converts 12345678901234.0 to "12345678901234.0" + converts 68719476736.0 to "68719476736.0" converts 68719476736.0 to "68719476736.0" + converts 1.2 to "1.2" converts 1.2 to "1.2" + converts 1.0 to "1.0" converts 1.0 to "1.0" + converts 1.23456789012 to "1.23456789012" converts 1.23456789012 to "1.23456789012" + converts 1000000010000000.0 to "1.00000001e+15" converts 1000000010000000.0 to "1.00000001e+15" + Ryu d2s_test.cc Regression + converts 2.989102097996e-312 to "2.989102097996e-312" converts 2.989102097996e-312 to "2.989102097996e-312" + converts 9.409340012568248e18 to "9.409340012568248e+18" converts 9.409340012568248e18 to "9.409340012568248e+18" + converts 4.940656e-318 to "4.940656e-318" converts 4.940656e-318 to "4.940656e-318" + converts 1.18575755e-316 to "1.18575755e-316" converts 1.18575755e-316 to "1.18575755e-316" + converts 9.0608011534336e15 to "9.0608011534336e+15" converts 9.0608011534336e15 to "9.0608011534336e+15" + converts -2.109808898695963e16 to "-2.109808898695963e+16" converts -2.109808898695963e16 to "-2.109808898695963e+16" + converts 4.708356024711512e18 to "4.708356024711512e+18" converts 4.708356024711512e18 to "4.708356024711512e+18" + converts 8192000.0 to "8192000.0" converts 8192000.0 to "8192000.0" + converts 67108864.0 to "67108864.0" converts 67108864.0 to "67108864.0" + converts 123456789012.0 to "123456789012.0" converts 123456789012.0 to "123456789012.0" + converts 64000.0 to "64000.0" converts 64000.0 to "64000.0" + converts 1.23456789 to "1.23456789" converts 1.23456789 to "1.23456789" + converts 10000000000.0 to "10000000000.0" converts 10000000000.0 to "10000000000.0" + converts 1.2345678901234567 to "1.2345678901234567" converts 1.2345678901234567 to "1.2345678901234567" + converts 562949953421312.0 to "562949953421312.0" converts 562949953421312.0 to "562949953421312.0" + all exponents + converts 1.729e-215 to "1.729e-215" converts 1.729e-215 to "1.729e-215" + converts 1.729e-55 to "1.729e-55" converts 1.729e-55 to "1.729e-55" + converts 1.729e-32 to "1.729e-32" converts 1.729e-32 to "1.729e-32" + converts 1.729e-59 to "1.729e-59" converts 1.729e-59 to "1.729e-59" + converts 1.729e-184 to "1.729e-184" converts 1.729e-184 to "1.729e-184" + converts 1.729e+251 to "1.729e+251" converts 1.729e+251 to "1.729e+251" + converts 1.729e-146 to "1.729e-146" converts 1.729e-146 to "1.729e-146" + converts 1.729e+8 to "172900000.0" converts 1.729e+8 to "172900000.0" + converts 1.729e+255 to "1.729e+255" converts 1.729e+255 to "1.729e+255" + converts 1.729e+158 to "1.729e+158" converts 1.729e+158 to "1.729e+158" + converts 1.729e+235 to "1.729e+235" converts 1.729e+235 to "1.729e+235" + converts 1.729e-304 to "1.729e-304" converts 1.729e-304 to "1.729e-304" + converts 1.729e+51 to "1.729e+51" converts 1.729e+51 to "1.729e+51" + converts 1.729e-151 to "1.729e-151" converts 1.729e-151 to "1.729e-151" + converts 1.729e+249 to "1.729e+249" converts 1.729e+249 to "1.729e+249" + converts 1.729e+125 to "1.729e+125" converts 1.729e+125 to "1.729e+125" + converts 1.729e+220 to "1.729e+220" converts 1.729e+220 to "1.729e+220" + converts 1.729e+3 to "1729.0" converts 1.729e+3 to "1729.0" + converts 1.729e+118 to "1.729e+118" converts 1.729e+118 to "1.729e+118" + converts 1.729e+151 to "1.729e+151" converts 1.729e+151 to "1.729e+151" + converts 1.729e+214 to "1.729e+214" converts 1.729e+214 to "1.729e+214" + converts 1.729e-61 to "1.729e-61" converts 1.729e-61 to "1.729e-61" + converts 1.729e+179 to "1.729e+179" converts 1.729e+179 to "1.729e+179" + converts 1.729e+178 to "1.729e+178" converts 1.729e+178 to "1.729e+178" + converts 1.729e-232 to "1.729e-232" converts 1.729e-232 to "1.729e-232" + converts 1.729e-198 to "1.729e-198" converts 1.729e-198 to "1.729e-198" + converts 1.729e+161 to "1.729e+161" converts 1.729e+161 to "1.729e+161" + converts 1.729e-130 to "1.729e-130" converts 1.729e-130 to "1.729e-130" + converts 1.729e-148 to "1.729e-148" converts 1.729e-148 to "1.729e-148" + converts 1.729e-303 to "1.729e-303" converts 1.729e-303 to "1.729e-303" + converts 1.729e-88 to "1.729e-88" converts 1.729e-88 to "1.729e-88" + converts 1.729e+271 to "1.729e+271" converts 1.729e+271 to "1.729e+271" + converts 1.729e+5 to "172900.0" converts 1.729e+5 to "172900.0" + converts 1.729e+229 to "1.729e+229" converts 1.729e+229 to "1.729e+229" + converts 1.729e-201 to "1.729e-201" converts 1.729e-201 to "1.729e-201" + converts 1.729e-38 to "1.729e-38" converts 1.729e-38 to "1.729e-38" + converts 1.729e-286 to "1.729e-286" converts 1.729e-286 to "1.729e-286" + converts 1.729e+85 to "1.729e+85" converts 1.729e+85 to "1.729e+85" + converts 1.729e-68 to "1.729e-68" converts 1.729e-68 to "1.729e-68" + converts 1.729e-293 to "1.729e-293" converts 1.729e-293 to "1.729e-293" + converts 1.729e-85 to "1.729e-85" converts 1.729e-85 to "1.729e-85" + converts 1.729e+120 to "1.729e+120" converts 1.729e+120 to "1.729e+120" + converts 1.729e-106 to "1.729e-106" converts 1.729e-106 to "1.729e-106" + converts 1.729e+64 to "1.729e+64" converts 1.729e+64 to "1.729e+64" + converts 1.729e-18 to "1.729e-18" converts 1.729e-18 to "1.729e-18" + converts 1.729e-93 to "1.729e-93" converts 1.729e-93 to "1.729e-93" + converts 1.729e-115 to "1.729e-115" converts 1.729e-115 to "1.729e-115" + converts 1.729e-98 to "1.729e-98" converts 1.729e-98 to "1.729e-98" + converts 1.729e-204 to "1.729e-204" converts 1.729e-204 to "1.729e-204" + converts 1.729e-62 to "1.729e-62" converts 1.729e-62 to "1.729e-62" + converts 1.729e+259 to "1.729e+259" converts 1.729e+259 to "1.729e+259" + converts 1.729e+232 to "1.729e+232" converts 1.729e+232 to "1.729e+232" + converts 1.729e-318 to "1.729e-318" converts 1.729e-318 to "1.729e-318" + converts 1.729e+163 to "1.729e+163" converts 1.729e+163 to "1.729e+163" + converts 1.729e+254 to "1.729e+254" converts 1.729e+254 to "1.729e+254" + converts 1.729e+39 to "1.729e+39" converts 1.729e+39 to "1.729e+39" + converts 1.729e-86 to "1.729e-86" converts 1.729e-86 to "1.729e-86" + converts 1.729e-102 to "1.729e-102" converts 1.729e-102 to "1.729e-102" + converts 1.729e+86 to "1.729e+86" converts 1.729e+86 to "1.729e+86" + converts 1.729e+138 to "1.729e+138" converts 1.729e+138 to "1.729e+138" + converts 1.729e-277 to "1.729e-277" converts 1.729e-277 to "1.729e-277" + converts 1.729e+142 to "1.729e+142" converts 1.729e+142 to "1.729e+142" + converts 1.729e-110 to "1.729e-110" converts 1.729e-110 to "1.729e-110" + converts 1.729e-257 to "1.729e-257" converts 1.729e-257 to "1.729e-257" + converts 1.729e+303 to "1.729e+303" converts 1.729e+303 to "1.729e+303" + converts 1.729e-58 to "1.729e-58" converts 1.729e-58 to "1.729e-58" + converts 1.729e+285 to "1.729e+285" converts 1.729e+285 to "1.729e+285" + converts 1.729e-234 to "1.729e-234" converts 1.729e-234 to "1.729e-234" + converts 1.729e-122 to "1.729e-122" converts 1.729e-122 to "1.729e-122" + converts 1.729e+274 to "1.729e+274" converts 1.729e+274 to "1.729e+274" + converts 1.729e+143 to "1.729e+143" converts 1.729e+143 to "1.729e+143" + converts 1.729e-73 to "1.729e-73" converts 1.729e-73 to "1.729e-73" + converts 1.729e-219 to "1.729e-219" converts 1.729e-219 to "1.729e-219" + converts 1.729e-231 to "1.729e-231" converts 1.729e-231 to "1.729e-231" + converts 1.729e-4 to "0.0001729" converts 1.729e-4 to "0.0001729" + converts 1.729e+224 to "1.729e+224" converts 1.729e+224 to "1.729e+224" + converts 1.729e-276 to "1.729e-276" converts 1.729e-276 to "1.729e-276" + converts 1.729e+293 to "1.729e+293" converts 1.729e+293 to "1.729e+293" + converts 1.729e+291 to "1.729e+291" converts 1.729e+291 to "1.729e+291" + converts 1.729e-289 to "1.729e-289" converts 1.729e-289 to "1.729e-289" + converts 1.729e+11 to "172900000000.0" converts 1.729e+11 to "172900000000.0" + converts 1.729e+305 to "1.729e+305" converts 1.729e+305 to "1.729e+305" + converts 1.729e+127 to "1.729e+127" converts 1.729e+127 to "1.729e+127" + converts 1.729e+150 to "1.729e+150" converts 1.729e+150 to "1.729e+150" + converts 1.729e+130 to "1.729e+130" converts 1.729e+130 to "1.729e+130" + converts 1.729e-52 to "1.729e-52" converts 1.729e-52 to "1.729e-52" + converts 1.729e+241 to "1.729e+241" converts 1.729e+241 to "1.729e+241" + converts 1.729e+110 to "1.729e+110" converts 1.729e+110 to "1.729e+110" + converts 1.729e-211 to "1.729e-211" converts 1.729e-211 to "1.729e-211" + converts 1.729e-235 to "1.729e-235" converts 1.729e-235 to "1.729e-235" + converts 1.729e-179 to "1.729e-179" converts 1.729e-179 to "1.729e-179" + converts 1.729e-298 to "1.729e-298" converts 1.729e-298 to "1.729e-298" + converts 1.729e-323 to "1.5e-323" converts 1.729e-323 to "1.5e-323" + converts 1.729e+180 to "1.729e+180" converts 1.729e+180 to "1.729e+180" + converts 1.729e+223 to "1.729e+223" converts 1.729e+223 to "1.729e+223" + converts 1.729e+105 to "1.729e+105" converts 1.729e+105 to "1.729e+105" + converts 1.729e+113 to "1.729e+113" converts 1.729e+113 to "1.729e+113" + converts 1.729e-280 to "1.729e-280" converts 1.729e-280 to "1.729e-280" + converts 1.729e-313 to "1.729e-313" converts 1.729e-313 to "1.729e-313" + converts 1.729e-317 to "1.729e-317" converts 1.729e-317 to "1.729e-317" + converts 1.729e-216 to "1.729e-216" converts 1.729e-216 to "1.729e-216" + converts 1.729e+218 to "1.729e+218" converts 1.729e+218 to "1.729e+218" + converts 1.729e-187 to "1.729e-187" converts 1.729e-187 to "1.729e-187" + converts 1.729e-95 to "1.729e-95" converts 1.729e-95 to "1.729e-95" + converts 1.729e+286 to "1.729e+286" converts 1.729e+286 to "1.729e+286" + converts 1.729e+273 to "1.729e+273" converts 1.729e+273 to "1.729e+273" + converts 1.729e+0 to "1.729" converts 1.729e+0 to "1.729" + converts 1.729e-209 to "1.729e-209" converts 1.729e-209 to "1.729e-209" + converts 1.729e-23 to "1.729e-23" converts 1.729e-23 to "1.729e-23" + converts 1.729e+48 to "1.729e+48" converts 1.729e+48 to "1.729e+48" + converts 1.729e-251 to "1.729e-251" converts 1.729e-251 to "1.729e-251" + converts 1.729e-248 to "1.729e-248" converts 1.729e-248 to "1.729e-248" + converts 1.729e-291 to "1.729e-291" converts 1.729e-291 to "1.729e-291" + converts 1.729e-2 to "0.01729" converts 1.729e-2 to "0.01729" + converts 1.729e+42 to "1.729e+42" converts 1.729e+42 to "1.729e+42" + converts 1.729e-28 to "1.729e-28" converts 1.729e-28 to "1.729e-28" + converts 1.729e+258 to "1.729e+258" converts 1.729e+258 to "1.729e+258" + converts 1.729e+115 to "1.729e+115" converts 1.729e+115 to "1.729e+115" + converts 1.729e+14 to "172900000000000.0" converts 1.729e+14 to "172900000000000.0" + converts 1.729e-180 to "1.729e-180" converts 1.729e-180 to "1.729e-180" + converts 1.729e-139 to "1.729e-139" converts 1.729e-139 to "1.729e-139" + converts 1.729e+236 to "1.729e+236" converts 1.729e+236 to "1.729e+236" + converts 1.729e+136 to "1.729e+136" converts 1.729e+136 to "1.729e+136" + converts 1.729e-245 to "1.729e-245" converts 1.729e-245 to "1.729e-245" + converts 1.729e-13 to "1.729e-13" converts 1.729e-13 to "1.729e-13" + converts 1.729e-228 to "1.729e-228" converts 1.729e-228 to "1.729e-228" + converts 1.729e-104 to "1.729e-104" converts 1.729e-104 to "1.729e-104" + converts 1.729e+43 to "1.729e+43" converts 1.729e+43 to "1.729e+43" + converts 1.729e+280 to "1.729e+280" converts 1.729e+280 to "1.729e+280" + converts 1.729e-123 to "1.729e-123" converts 1.729e-123 to "1.729e-123" + converts 1.729e-236 to "1.729e-236" converts 1.729e-236 to "1.729e-236" + converts 1.729e+299 to "1.729e+299" converts 1.729e+299 to "1.729e+299" + converts 1.729e+168 to "1.729e+168" converts 1.729e+168 to "1.729e+168" + converts 1.729e+207 to "1.729e+207" converts 1.729e+207 to "1.729e+207" + converts 1.729e-244 to "1.729e-244" converts 1.729e-244 to "1.729e-244" + converts 1.729e+187 to "1.729e+187" converts 1.729e+187 to "1.729e+187" + converts 1.729e-138 to "1.729e-138" converts 1.729e-138 to "1.729e-138" + converts 1.729e+131 to "1.729e+131" converts 1.729e+131 to "1.729e+131" + converts 1.729e+52 to "1.729e+52" converts 1.729e+52 to "1.729e+52" + converts 1.729e+252 to "1.729e+252" converts 1.729e+252 to "1.729e+252" + converts 1.729e+13 to "17290000000000.0" converts 1.729e+13 to "17290000000000.0" + converts 1.729e-267 to "1.729e-267" converts 1.729e-267 to "1.729e-267" + converts 1.729e-210 to "1.729e-210" converts 1.729e-210 to "1.729e-210" + converts 1.729e-154 to "1.729e-154" converts 1.729e-154 to "1.729e-154" + converts 1.729e-11 to "1.729e-11" converts 1.729e-11 to "1.729e-11" + converts 1.729e+295 to "1.729e+295" converts 1.729e+295 to "1.729e+295" + converts 1.729e-10 to "1.729e-10" converts 1.729e-10 to "1.729e-10" + converts 1.729e+228 to "1.729e+228" converts 1.729e+228 to "1.729e+228" + converts 1.729e-206 to "1.729e-206" converts 1.729e-206 to "1.729e-206" + converts 1.729e+160 to "1.729e+160" converts 1.729e+160 to "1.729e+160" + converts 1.729e-155 to "1.729e-155" converts 1.729e-155 to "1.729e-155" + converts 1.729e+99 to "1.729e+99" converts 1.729e+99 to "1.729e+99" + converts 1.729e+134 to "1.729e+134" converts 1.729e+134 to "1.729e+134" + converts 1.729e+278 to "1.729e+278" converts 1.729e+278 to "1.729e+278" + converts 1.729e-120 to "1.729e-120" converts 1.729e-120 to "1.729e-120" + converts 1.729e+296 to "1.729e+296" converts 1.729e+296 to "1.729e+296" + converts 1.729e+68 to "1.729e+68" converts 1.729e+68 to "1.729e+68" + converts 1.729e-117 to "1.729e-117" converts 1.729e-117 to "1.729e-117" + converts 1.729e+49 to "1.729e+49" converts 1.729e+49 to "1.729e+49" + converts 1.729e+269 to "1.729e+269" converts 1.729e+269 to "1.729e+269" + converts 1.729e+107 to "1.729e+107" converts 1.729e+107 to "1.729e+107" + converts 1.729e-3 to "0.001729" converts 1.729e-3 to "0.001729" + converts 1.729e+215 to "1.729e+215" converts 1.729e+215 to "1.729e+215" + converts 1.729e-141 to "1.729e-141" converts 1.729e-141 to "1.729e-141" + converts 1.729e-176 to "1.729e-176" converts 1.729e-176 to "1.729e-176" + converts 1.729e+165 to "1.729e+165" converts 1.729e+165 to "1.729e+165" + converts 1.729e-24 to "1.729e-24" converts 1.729e-24 to "1.729e-24" + converts 1.729e-157 to "1.729e-157" converts 1.729e-157 to "1.729e-157" + converts 1.729e-281 to "1.729e-281" converts 1.729e-281 to "1.729e-281" + converts 1.729e-196 to "1.729e-196" converts 1.729e-196 to "1.729e-196" + converts 1.729e-70 to "1.729e-70" converts 1.729e-70 to "1.729e-70" + converts 1.729e+277 to "1.729e+277" converts 1.729e+277 to "1.729e+277" + converts 1.729e+242 to "1.729e+242" converts 1.729e+242 to "1.729e+242" + converts 1.729e+114 to "1.729e+114" converts 1.729e+114 to "1.729e+114" + converts 1.729e+20 to "1.729e+20" converts 1.729e+20 to "1.729e+20" + converts 1.729e+76 to "1.729e+76" converts 1.729e+76 to "1.729e+76" + converts 1.729e+16 to "1.729e+16" converts 1.729e+16 to "1.729e+16" + converts 1.729e-168 to "1.729e-168" converts 1.729e-168 to "1.729e-168" + converts 1.729e-5 to "1.729e-5" converts 1.729e-5 to "1.729e-5" + converts 1.729e-177 to "1.729e-177" converts 1.729e-177 to "1.729e-177" + converts 1.729e-190 to "1.729e-190" converts 1.729e-190 to "1.729e-190" + converts 1.729e+67 to "1.729e+67" converts 1.729e+67 to "1.729e+67" + converts 1.729e+126 to "1.729e+126" converts 1.729e+126 to "1.729e+126" + converts 1.729e-197 to "1.729e-197" converts 1.729e-197 to "1.729e-197" + converts 1.729e-56 to "1.729e-56" converts 1.729e-56 to "1.729e-56" + converts 1.729e+91 to "1.729e+91" converts 1.729e+91 to "1.729e+91" + converts 1.729e+302 to "1.729e+302" converts 1.729e+302 to "1.729e+302" + converts 1.729e+257 to "1.729e+257" converts 1.729e+257 to "1.729e+257" + converts 1.729e-19 to "1.729e-19" converts 1.729e-19 to "1.729e-19" + converts 1.729e-238 to "1.729e-238" converts 1.729e-238 to "1.729e-238" + converts 1.729e-243 to "1.729e-243" converts 1.729e-243 to "1.729e-243" + converts 1.729e+260 to "1.729e+260" converts 1.729e+260 to "1.729e+260" + converts 1.729e-147 to "1.729e-147" converts 1.729e-147 to "1.729e-147" + converts 1.729e-81 to "1.729e-81" converts 1.729e-81 to "1.729e-81" + converts 1.729e+23 to "1.729e+23" converts 1.729e+23 to "1.729e+23" + converts 1.729e-118 to "1.729e-118" converts 1.729e-118 to "1.729e-118" + converts 1.729e+308 to "1.729e+308" converts 1.729e+308 to "1.729e+308" + converts 1.729e+78 to "1.729e+78" converts 1.729e+78 to "1.729e+78" + converts 1.729e-265 to "1.729e-265" converts 1.729e-265 to "1.729e-265" + converts 1.729e-99 to "1.729e-99" converts 1.729e-99 to "1.729e-99" + converts 1.729e-111 to "1.729e-111" converts 1.729e-111 to "1.729e-111" + converts 1.729e+194 to "1.729e+194" converts 1.729e+194 to "1.729e+194" + converts 1.729e-43 to "1.729e-43" converts 1.729e-43 to "1.729e-43" + converts 1.729e+137 to "1.729e+137" converts 1.729e+137 to "1.729e+137" + converts 1.729e+182 to "1.729e+182" converts 1.729e+182 to "1.729e+182" + converts 1.729e+156 to "1.729e+156" converts 1.729e+156 to "1.729e+156" + converts 1.729e+22 to "1.729e+22" converts 1.729e+22 to "1.729e+22" + converts 1.729e+159 to "1.729e+159" converts 1.729e+159 to "1.729e+159" + converts 1.729e+289 to "1.729e+289" converts 1.729e+289 to "1.729e+289" + converts 1.729e-300 to "1.729e-300" converts 1.729e-300 to "1.729e-300" + converts 1.729e+240 to "1.729e+240" converts 1.729e+240 to "1.729e+240" + converts 1.729e-284 to "1.729e-284" converts 1.729e-284 to "1.729e-284" + converts 1.729e-322 to "1.73e-322" converts 1.729e-322 to "1.73e-322" + converts 1.729e-51 to "1.729e-51" converts 1.729e-51 to "1.729e-51" + converts 1.729e-316 to "1.729e-316" converts 1.729e-316 to "1.729e-316" + converts 1.729e-44 to "1.729e-44" converts 1.729e-44 to "1.729e-44" + converts 1.729e+61 to "1.729e+61" converts 1.729e+61 to "1.729e+61" + converts 1.729e+279 to "1.729e+279" converts 1.729e+279 to "1.729e+279" + converts 1.729e+284 to "1.729e+284" converts 1.729e+284 to "1.729e+284" + converts 1.729e-214 to "1.729e-214" converts 1.729e-214 to "1.729e-214" + converts 1.729e-9 to "1.729e-9" converts 1.729e-9 to "1.729e-9" + converts 1.729e-167 to "1.729e-167" converts 1.729e-167 to "1.729e-167" + converts 1.729e-205 to "1.729e-205" converts 1.729e-205 to "1.729e-205" + converts 1.729e+90 to "1.729e+90" converts 1.729e+90 to "1.729e+90" + converts 1.729e-57 to "1.729e-57" converts 1.729e-57 to "1.729e-57" + converts 1.729e+104 to "1.729e+104" converts 1.729e+104 to "1.729e+104" + converts 1.729e+176 to "1.729e+176" converts 1.729e+176 to "1.729e+176" + converts 1.729e-208 to "1.729e-208" converts 1.729e-208 to "1.729e-208" + converts 1.729e+108 to "1.729e+108" converts 1.729e+108 to "1.729e+108" + converts 1.729e+264 to "1.729e+264" converts 1.729e+264 to "1.729e+264" + converts 1.729e-53 to "1.729e-53" converts 1.729e-53 to "1.729e-53" + converts 1.729e+162 to "1.729e+162" converts 1.729e+162 to "1.729e+162" + converts 1.729e-31 to "1.729e-31" converts 1.729e-31 to "1.729e-31" + converts 1.729e-46 to "1.729e-46" converts 1.729e-46 to "1.729e-46" + converts 1.729e-16 to "1.729e-16" converts 1.729e-16 to "1.729e-16" + converts 1.729e-203 to "1.729e-203" converts 1.729e-203 to "1.729e-203" + converts 1.729e-94 to "1.729e-94" converts 1.729e-94 to "1.729e-94" + converts 1.729e+189 to "1.729e+189" converts 1.729e+189 to "1.729e+189" + converts 1.729e+116 to "1.729e+116" converts 1.729e+116 to "1.729e+116" + converts 1.729e+201 to "1.729e+201" converts 1.729e+201 to "1.729e+201" + converts 1.729e-241 to "1.729e-241" converts 1.729e-241 to "1.729e-241" + converts 1.729e-29 to "1.729e-29" converts 1.729e-29 to "1.729e-29" + converts 1.729e-169 to "1.729e-169" converts 1.729e-169 to "1.729e-169" + converts 1.729e+89 to "1.729e+89" converts 1.729e+89 to "1.729e+89" + converts 1.729e+30 to "1.729e+30" converts 1.729e+30 to "1.729e+30" + converts 1.729e+50 to "1.729e+50" converts 1.729e+50 to "1.729e+50" + converts 1.729e-76 to "1.729e-76" converts 1.729e-76 to "1.729e-76" + converts 1.729e+268 to "1.729e+268" converts 1.729e+268 to "1.729e+268" + converts 1.729e+202 to "1.729e+202" converts 1.729e+202 to "1.729e+202" + converts 1.729e-105 to "1.729e-105" converts 1.729e-105 to "1.729e-105" + converts 1.729e+32 to "1.729e+32" converts 1.729e+32 to "1.729e+32" + converts 1.729e-308 to "1.729e-308" converts 1.729e-308 to "1.729e-308" + converts 1.729e-152 to "1.729e-152" converts 1.729e-152 to "1.729e-152" + converts 1.729e+65 to "1.729e+65" converts 1.729e+65 to "1.729e+65" + converts 1.729e-242 to "1.729e-242" converts 1.729e-242 to "1.729e-242" + converts 1.729e+148 to "1.729e+148" converts 1.729e+148 to "1.729e+148" + converts 1.729e-223 to "1.729e-223" converts 1.729e-223 to "1.729e-223" + converts 1.729e+217 to "1.729e+217" converts 1.729e+217 to "1.729e+217" + converts 1.729e+155 to "1.729e+155" converts 1.729e+155 to "1.729e+155" + converts 1.729e-103 to "1.729e-103" converts 1.729e-103 to "1.729e-103" + converts 1.729e-12 to "1.729e-12" converts 1.729e-12 to "1.729e-12" + converts 1.729e-288 to "1.729e-288" converts 1.729e-288 to "1.729e-288" + converts 1.729e+184 to "1.729e+184" converts 1.729e+184 to "1.729e+184" + converts 1.729e-160 to "1.729e-160" converts 1.729e-160 to "1.729e-160" + converts 1.729e+119 to "1.729e+119" converts 1.729e+119 to "1.729e+119" + converts 1.729e+226 to "1.729e+226" converts 1.729e+226 to "1.729e+226" + converts 1.729e-295 to "1.729e-295" converts 1.729e-295 to "1.729e-295" + converts 1.729e-34 to "1.729e-34" converts 1.729e-34 to "1.729e-34" + converts 1.729e-36 to "1.729e-36" converts 1.729e-36 to "1.729e-36" + converts 1.729e+262 to "1.729e+262" converts 1.729e+262 to "1.729e+262" + converts 1.729e-114 to "1.729e-114" converts 1.729e-114 to "1.729e-114" + converts 1.729e+211 to "1.729e+211" converts 1.729e+211 to "1.729e+211" + converts 1.729e+247 to "1.729e+247" converts 1.729e+247 to "1.729e+247" + converts 1.729e-250 to "1.729e-250" converts 1.729e-250 to "1.729e-250" + converts 1.729e-75 to "1.729e-75" converts 1.729e-75 to "1.729e-75" + converts 1.729e+122 to "1.729e+122" converts 1.729e+122 to "1.729e+122" + converts 1.729e-311 to "1.729e-311" converts 1.729e-311 to "1.729e-311" + converts 1.729e+6 to "1729000.0" converts 1.729e+6 to "1729000.0" + converts 1.729e-218 to "1.729e-218" converts 1.729e-218 to "1.729e-218" + converts 1.729e+73 to "1.729e+73" converts 1.729e+73 to "1.729e+73" + converts 1.729e+149 to "1.729e+149" converts 1.729e+149 to "1.729e+149" + converts 1.729e-212 to "1.729e-212" converts 1.729e-212 to "1.729e-212" + converts 1.729e-301 to "1.729e-301" converts 1.729e-301 to "1.729e-301" + converts 1.729e+69 to "1.729e+69" converts 1.729e+69 to "1.729e+69" + converts 1.729e-268 to "1.729e-268" converts 1.729e-268 to "1.729e-268" + converts 1.729e-270 to "1.729e-270" converts 1.729e-270 to "1.729e-270" + converts 1.729e+28 to "1.729e+28" converts 1.729e+28 to "1.729e+28" + converts 1.729e-273 to "1.729e-273" converts 1.729e-273 to "1.729e-273" + converts 1.729e+170 to "1.729e+170" converts 1.729e+170 to "1.729e+170" + converts 1.729e+169 to "1.729e+169" converts 1.729e+169 to "1.729e+169" + converts 1.729e+306 to "1.729e+306" converts 1.729e+306 to "1.729e+306" + converts 1.729e+234 to "1.729e+234" converts 1.729e+234 to "1.729e+234" + converts 1.729e-143 to "1.729e-143" converts 1.729e-143 to "1.729e-143" + converts 1.729e-199 to "1.729e-199" converts 1.729e-199 to "1.729e-199" + converts 1.729e-153 to "1.729e-153" converts 1.729e-153 to "1.729e-153" + converts 1.729e+248 to "1.729e+248" converts 1.729e+248 to "1.729e+248" + converts 1.729e-269 to "1.729e-269" converts 1.729e-269 to "1.729e-269" + converts 1.729e+181 to "1.729e+181" converts 1.729e+181 to "1.729e+181" + converts 1.729e-26 to "1.729e-26" converts 1.729e-26 to "1.729e-26" + converts 1.729e+145 to "1.729e+145" converts 1.729e+145 to "1.729e+145" + converts 1.729e+45 to "1.729e+45" converts 1.729e+45 to "1.729e+45" + converts 1.729e+33 to "1.729e+33" converts 1.729e+33 to "1.729e+33" + converts 1.729e+239 to "1.729e+239" converts 1.729e+239 to "1.729e+239" + converts 1.729e-108 to "1.729e-108" converts 1.729e-108 to "1.729e-108" + converts 1.729e-172 to "1.729e-172" converts 1.729e-172 to "1.729e-172" + converts 1.729e-72 to "1.729e-72" converts 1.729e-72 to "1.729e-72" + converts 1.729e+87 to "1.729e+87" converts 1.729e+87 to "1.729e+87" + converts 1.729e+46 to "1.729e+46" converts 1.729e+46 to "1.729e+46" + converts 1.729e-133 to "1.729e-133" converts 1.729e-133 to "1.729e-133" + converts 1.729e-173 to "1.729e-173" converts 1.729e-173 to "1.729e-173" + converts 1.729e+227 to "1.729e+227" converts 1.729e+227 to "1.729e+227" + converts 1.729e+190 to "1.729e+190" converts 1.729e+190 to "1.729e+190" + converts 1.729e+63 to "1.729e+63" converts 1.729e+63 to "1.729e+63" + converts 1.729e+128 to "1.729e+128" converts 1.729e+128 to "1.729e+128" + converts 1.729e-195 to "1.729e-195" converts 1.729e-195 to "1.729e-195" + converts 1.729e+200 to "1.729e+200" converts 1.729e+200 to "1.729e+200" + converts 1.729e-77 to "1.729e-77" converts 1.729e-77 to "1.729e-77" + converts 1.729e+208 to "1.729e+208" converts 1.729e+208 to "1.729e+208" + converts 1.729e+141 to "1.729e+141" converts 1.729e+141 to "1.729e+141" + converts 1.729e-136 to "1.729e-136" converts 1.729e-136 to "1.729e-136" + converts 1.729e-310 to "1.729e-310" converts 1.729e-310 to "1.729e-310" + converts 1.729e+205 to "1.729e+205" converts 1.729e+205 to "1.729e+205" + converts 1.729e+253 to "1.729e+253" converts 1.729e+253 to "1.729e+253" + converts 1.729e-246 to "1.729e-246" converts 1.729e-246 to "1.729e-246" + converts 1.729e-191 to "1.729e-191" converts 1.729e-191 to "1.729e-191" + converts 1.729e+7 to "17290000.0" converts 1.729e+7 to "17290000.0" + converts 1.729e-290 to "1.729e-290" converts 1.729e-290 to "1.729e-290" + converts 1.729e-271 to "1.729e-271" converts 1.729e-271 to "1.729e-271" + converts 1.729e+304 to "1.729e+304" converts 1.729e+304 to "1.729e+304" + converts 1.729e-64 to "1.729e-64" converts 1.729e-64 to "1.729e-64" + converts 1.729e-253 to "1.729e-253" converts 1.729e-253 to "1.729e-253" + converts 1.729e-107 to "1.729e-107" converts 1.729e-107 to "1.729e-107" + converts 1.729e+38 to "1.729e+38" converts 1.729e+38 to "1.729e+38" + converts 1.729e-113 to "1.729e-113" converts 1.729e-113 to "1.729e-113" + converts 1.729e+191 to "1.729e+191" converts 1.729e+191 to "1.729e+191" + converts 1.729e-283 to "1.729e-283" converts 1.729e-283 to "1.729e-283" + converts 1.729e-274 to "1.729e-274" converts 1.729e-274 to "1.729e-274" + converts 1.729e+282 to "1.729e+282" converts 1.729e+282 to "1.729e+282" + converts 1.729e+173 to "1.729e+173" converts 1.729e+173 to "1.729e+173" + converts 1.729e-48 to "1.729e-48" converts 1.729e-48 to "1.729e-48" + converts 1.729e+172 to "1.729e+172" converts 1.729e+172 to "1.729e+172" + converts 1.729e-100 to "1.729e-100" converts 1.729e-100 to "1.729e-100" + converts 1.729e+256 to "1.729e+256" converts 1.729e+256 to "1.729e+256" + converts 1.729e+157 to "1.729e+157" converts 1.729e+157 to "1.729e+157" + converts 1.729e+166 to "1.729e+166" converts 1.729e+166 to "1.729e+166" + converts 1.729e-125 to "1.729e-125" converts 1.729e-125 to "1.729e-125" + converts 1.729e-134 to "1.729e-134" converts 1.729e-134 to "1.729e-134" + converts 1.729e-41 to "1.729e-41" converts 1.729e-41 to "1.729e-41" + converts 1.729e+9 to "1729000000.0" converts 1.729e+9 to "1729000000.0" + converts 1.729e+197 to "1.729e+197" converts 1.729e+197 to "1.729e+197" + converts 1.729e+272 to "1.729e+272" converts 1.729e+272 to "1.729e+272" + converts 1.729e+288 to "1.729e+288" converts 1.729e+288 to "1.729e+288" + converts 1.729e-192 to "1.729e-192" converts 1.729e-192 to "1.729e-192" + converts 1.729e-159 to "1.729e-159" converts 1.729e-159 to "1.729e-159" + converts 1.729e+53 to "1.729e+53" converts 1.729e+53 to "1.729e+53" + converts 1.729e-116 to "1.729e-116" converts 1.729e-116 to "1.729e-116" + converts 1.729e+31 to "1.729e+31" converts 1.729e+31 to "1.729e+31" + converts 1.729e-80 to "1.729e-80" converts 1.729e-80 to "1.729e-80" + converts 1.729e+171 to "1.729e+171" converts 1.729e+171 to "1.729e+171" + converts 1.729e+243 to "1.729e+243" converts 1.729e+243 to "1.729e+243" + converts 1.729e-193 to "1.729e-193" converts 1.729e-193 to "1.729e-193" + converts 1.729e-217 to "1.729e-217" converts 1.729e-217 to "1.729e-217" + converts 1.729e-158 to "1.729e-158" converts 1.729e-158 to "1.729e-158" + converts 1.729e-87 to "1.729e-87" converts 1.729e-87 to "1.729e-87" + converts 1.729e-260 to "1.729e-260" converts 1.729e-260 to "1.729e-260" + converts 1.729e-50 to "1.729e-50" converts 1.729e-50 to "1.729e-50" + converts 1.729e-101 to "1.729e-101" converts 1.729e-101 to "1.729e-101" + converts 1.729e+54 to "1.729e+54" converts 1.729e+54 to "1.729e+54" + converts 1.729e+225 to "1.729e+225" converts 1.729e+225 to "1.729e+225" + converts 1.729e-91 to "1.729e-91" converts 1.729e-91 to "1.729e-91" + converts 1.729e-207 to "1.729e-207" converts 1.729e-207 to "1.729e-207" + converts 1.729e-189 to "1.729e-189" converts 1.729e-189 to "1.729e-189" + converts 1.729e+29 to "1.729e+29" converts 1.729e+29 to "1.729e+29" + converts 1.729e-183 to "1.729e-183" converts 1.729e-183 to "1.729e-183" + converts 1.729e+25 to "1.729e+25" converts 1.729e+25 to "1.729e+25" + converts 1.729e-282 to "1.729e-282" converts 1.729e-282 to "1.729e-282" + converts 1.729e+222 to "1.729e+222" converts 1.729e+222 to "1.729e+222" + converts 1.729e-314 to "1.729e-314" converts 1.729e-314 to "1.729e-314" + converts 1.729e+213 to "1.729e+213" converts 1.729e+213 to "1.729e+213" + converts 1.729e+140 to "1.729e+140" converts 1.729e+140 to "1.729e+140" + converts 1.729e-306 to "1.729e-306" converts 1.729e-306 to "1.729e-306" + converts 1.729e-7 to "1.729e-7" converts 1.729e-7 to "1.729e-7" + converts 1.729e-315 to "1.729e-315" converts 1.729e-315 to "1.729e-315" + converts 1.729e+174 to "1.729e+174" converts 1.729e+174 to "1.729e+174" + converts 1.729e-166 to "1.729e-166" converts 1.729e-166 to "1.729e-166" + converts 1.729e+139 to "1.729e+139" converts 1.729e+139 to "1.729e+139" + converts 1.729e-78 to "1.729e-78" converts 1.729e-78 to "1.729e-78" + converts 1.729e+95 to "1.729e+95" converts 1.729e+95 to "1.729e+95" + converts 1.729e-213 to "1.729e-213" converts 1.729e-213 to "1.729e-213" + converts 1.729e-126 to "1.729e-126" converts 1.729e-126 to "1.729e-126" + converts 1.729e+109 to "1.729e+109" converts 1.729e+109 to "1.729e+109" + converts 1.729e+84 to "1.729e+84" converts 1.729e+84 to "1.729e+84" + converts 1.729e-249 to "1.729e-249" converts 1.729e-249 to "1.729e-249" + converts 1.729e+121 to "1.729e+121" converts 1.729e+121 to "1.729e+121" + converts 1.729e+281 to "1.729e+281" converts 1.729e+281 to "1.729e+281" + converts 1.729e-185 to "1.729e-185" converts 1.729e-185 to "1.729e-185" + converts 1.729e-30 to "1.729e-30" converts 1.729e-30 to "1.729e-30" + converts 1.729e+83 to "1.729e+83" converts 1.729e+83 to "1.729e+83" + converts 1.729e+263 to "1.729e+263" converts 1.729e+263 to "1.729e+263" + converts 1.729e-90 to "1.729e-90" converts 1.729e-90 to "1.729e-90" + converts 1.729e-1 to "0.1729" converts 1.729e-1 to "0.1729" + converts 1.729e+106 to "1.729e+106" converts 1.729e+106 to "1.729e+106" + converts 1.729e-259 to "1.729e-259" converts 1.729e-259 to "1.729e-259" + converts 1.729e+267 to "1.729e+267" converts 1.729e+267 to "1.729e+267" + converts 1.729e+292 to "1.729e+292" converts 1.729e+292 to "1.729e+292" + converts 1.729e-145 to "1.729e-145" converts 1.729e-145 to "1.729e-145" + converts 1.729e+300 to "1.729e+300" converts 1.729e+300 to "1.729e+300" + converts 1.729e-124 to "1.729e-124" converts 1.729e-124 to "1.729e-124" + converts 1.729e+185 to "1.729e+185" converts 1.729e+185 to "1.729e+185" + converts 1.729e+287 to "1.729e+287" converts 1.729e+287 to "1.729e+287" + converts 1.729e+2 to "172.9" converts 1.729e+2 to "172.9" + converts 1.729e-97 to "1.729e-97" converts 1.729e-97 to "1.729e-97" + converts 1.729e+57 to "1.729e+57" converts 1.729e+57 to "1.729e+57" + converts 1.729e-222 to "1.729e-222" converts 1.729e-222 to "1.729e-222" + converts 1.729e+209 to "1.729e+209" converts 1.729e+209 to "1.729e+209" + converts 1.729e+177 to "1.729e+177" converts 1.729e+177 to "1.729e+177" + converts 1.729e-71 to "1.729e-71" converts 1.729e-71 to "1.729e-71" + converts 1.729e+96 to "1.729e+96" converts 1.729e+96 to "1.729e+96" + converts 1.729e+266 to "1.729e+266" converts 1.729e+266 to "1.729e+266" + converts 1.729e-45 to "1.729e-45" converts 1.729e-45 to "1.729e-45" + converts 1.729e-181 to "1.729e-181" converts 1.729e-181 to "1.729e-181" + converts 1.729e-171 to "1.729e-171" converts 1.729e-171 to "1.729e-171" + converts 1.729e+94 to "1.729e+94" converts 1.729e+94 to "1.729e+94" + converts 1.729e-142 to "1.729e-142" converts 1.729e-142 to "1.729e-142" + converts 1.729e+59 to "1.729e+59" converts 1.729e+59 to "1.729e+59" + converts 1.729e-319 to "1.729e-319" converts 1.729e-319 to "1.729e-319" + converts 1.729e+198 to "1.729e+198" converts 1.729e+198 to "1.729e+198" + converts 1.729e-96 to "1.729e-96" converts 1.729e-96 to "1.729e-96" + converts 1.729e-309 to "1.729e-309" converts 1.729e-309 to "1.729e-309" + converts 1.729e+221 to "1.729e+221" converts 1.729e+221 to "1.729e+221" + converts 1.729e-229 to "1.729e-229" converts 1.729e-229 to "1.729e-229" + converts 1.729e+98 to "1.729e+98" converts 1.729e+98 to "1.729e+98" + converts 1.729e-131 to "1.729e-131" converts 1.729e-131 to "1.729e-131" + converts 1.729e+276 to "1.729e+276" converts 1.729e+276 to "1.729e+276" + converts 1.729e+100 to "1.729e+100" converts 1.729e+100 to "1.729e+100" + converts 1.729e+101 to "1.729e+101" converts 1.729e+101 to "1.729e+101" + converts 1.729e-128 to "1.729e-128" converts 1.729e-128 to "1.729e-128" + converts 1.729e+199 to "1.729e+199" converts 1.729e+199 to "1.729e+199" + converts 1.729e+24 to "1.729e+24" converts 1.729e+24 to "1.729e+24" + converts 1.729e+77 to "1.729e+77" converts 1.729e+77 to "1.729e+77" + converts 1.729e+19 to "1.729e+19" converts 1.729e+19 to "1.729e+19" + converts 1.729e-82 to "1.729e-82" converts 1.729e-82 to "1.729e-82" + converts 1.729e+193 to "1.729e+193" converts 1.729e+193 to "1.729e+193" + converts 1.729e-27 to "1.729e-27" converts 1.729e-27 to "1.729e-27" + converts 1.729e-69 to "1.729e-69" converts 1.729e-69 to "1.729e-69" + converts 1.729e+244 to "1.729e+244" converts 1.729e+244 to "1.729e+244" + converts 1.729e-121 to "1.729e-121" converts 1.729e-121 to "1.729e-121" + converts 1.729e+204 to "1.729e+204" converts 1.729e+204 to "1.729e+204" + converts 1.729e+62 to "1.729e+62" converts 1.729e+62 to "1.729e+62" + converts 1.729e+17 to "1.729e+17" converts 1.729e+17 to "1.729e+17" + converts 1.729e-266 to "1.729e-266" converts 1.729e-266 to "1.729e-266" + converts 1.729e-186 to "1.729e-186" converts 1.729e-186 to "1.729e-186" + converts 1.729e-156 to "1.729e-156" converts 1.729e-156 to "1.729e-156" + converts 1.729e-194 to "1.729e-194" converts 1.729e-194 to "1.729e-194" + converts 1.729e-275 to "1.729e-275" converts 1.729e-275 to "1.729e-275" + converts 1.729e-312 to "1.729e-312" converts 1.729e-312 to "1.729e-312" + converts 1.729e+183 to "1.729e+183" converts 1.729e+183 to "1.729e+183" + converts 1.729e+186 to "1.729e+186" converts 1.729e+186 to "1.729e+186" + converts 1.729e+233 to "1.729e+233" converts 1.729e+233 to "1.729e+233" + converts 1.729e-224 to "1.729e-224" converts 1.729e-224 to "1.729e-224" + converts 1.729e+124 to "1.729e+124" converts 1.729e+124 to "1.729e+124" + converts 1.729e+37 to "1.729e+37" converts 1.729e+37 to "1.729e+37" + converts 1.729e+219 to "1.729e+219" converts 1.729e+219 to "1.729e+219" + converts 1.729e-263 to "1.729e-263" converts 1.729e-263 to "1.729e-263" + converts 1.729e+58 to "1.729e+58" converts 1.729e+58 to "1.729e+58" + converts 7.29e-324 to "5.0e-324" converts 7.29e-324 to "5.0e-324" + converts 1.729e-175 to "1.729e-175" converts 1.729e-175 to "1.729e-175" + converts 1.729e+44 to "1.729e+44" converts 1.729e+44 to "1.729e+44" + converts 1.729e+123 to "1.729e+123" converts 1.729e+123 to "1.729e+123" + converts 1.729e-140 to "1.729e-140" converts 1.729e-140 to "1.729e-140" + converts 1.729e+60 to "1.729e+60" converts 1.729e+60 to "1.729e+60" + converts 1.729e+88 to "1.729e+88" converts 1.729e+88 to "1.729e+88" + converts 1.729e-255 to "1.729e-255" converts 1.729e-255 to "1.729e-255" + converts 1.729e+12 to "1729000000000.0" converts 1.729e+12 to "1729000000000.0" + converts 1.729e+35 to "1.729e+35" converts 1.729e+35 to "1.729e+35" + converts 1.729e-239 to "1.729e-239" converts 1.729e-239 to "1.729e-239" + converts 1.729e-40 to "1.729e-40" converts 1.729e-40 to "1.729e-40" + converts 1.729e+153 to "1.729e+153" converts 1.729e+153 to "1.729e+153" + converts 1.729e-240 to "1.729e-240" converts 1.729e-240 to "1.729e-240" + converts 1.729e-135 to "1.729e-135" converts 1.729e-135 to "1.729e-135" + converts 1.729e+103 to "1.729e+103" converts 1.729e+103 to "1.729e+103" + converts 1.729e-89 to "1.729e-89" converts 1.729e-89 to "1.729e-89" + converts 1.729e-83 to "1.729e-83" converts 1.729e-83 to "1.729e-83" + converts 1.729e-296 to "1.729e-296" converts 1.729e-296 to "1.729e-296" + converts 1.729e-233 to "1.729e-233" converts 1.729e-233 to "1.729e-233" + converts 1.729e+80 to "1.729e+80" converts 1.729e+80 to "1.729e+80" + converts 1.729e-254 to "1.729e-254" converts 1.729e-254 to "1.729e-254" + converts 1.729e+147 to "1.729e+147" converts 1.729e+147 to "1.729e+147" + converts 1.729e+92 to "1.729e+92" converts 1.729e+92 to "1.729e+92" + converts 1.729e+188 to "1.729e+188" converts 1.729e+188 to "1.729e+188" + converts 1.729e-92 to "1.729e-92" converts 1.729e-92 to "1.729e-92" + converts 1.729e+307 to "1.729e+307" converts 1.729e+307 to "1.729e+307" + converts 1.729e-256 to "1.729e-256" converts 1.729e-256 to "1.729e-256" + converts 1.729e-294 to "1.729e-294" converts 1.729e-294 to "1.729e-294" + converts 1.729e-33 to "1.729e-33" converts 1.729e-33 to "1.729e-33" + converts 1.729e+290 to "1.729e+290" converts 1.729e+290 to "1.729e+290" + converts 1.729e-161 to "1.729e-161" converts 1.729e-161 to "1.729e-161" + converts 1.729e-112 to "1.729e-112" converts 1.729e-112 to "1.729e-112" + converts 1.729e+79 to "1.729e+79" converts 1.729e+79 to "1.729e+79" + converts 1.729e+4 to "17290.0" converts 1.729e+4 to "17290.0" + converts 1.729e+275 to "1.729e+275" converts 1.729e+275 to "1.729e+275" + converts 1.729e-164 to "1.729e-164" converts 1.729e-164 to "1.729e-164" + converts 1.729e+34 to "1.729e+34" converts 1.729e+34 to "1.729e+34" + converts 1.729e-150 to "1.729e-150" converts 1.729e-150 to "1.729e-150" + converts 1.729e-67 to "1.729e-67" converts 1.729e-67 to "1.729e-67" + converts 1.729e-8 to "1.729e-8" converts 1.729e-8 to "1.729e-8" + converts 1.729e-74 to "1.729e-74" converts 1.729e-74 to "1.729e-74" + converts 1.729e-144 to "1.729e-144" converts 1.729e-144 to "1.729e-144" + converts 1.729e-305 to "1.729e-305" converts 1.729e-305 to "1.729e-305" + converts 1.729e-79 to "1.729e-79" converts 1.729e-79 to "1.729e-79" + converts 1.729e+111 to "1.729e+111" converts 1.729e+111 to "1.729e+111" + converts 1.729e-287 to "1.729e-287" converts 1.729e-287 to "1.729e-287" + converts 1.729e-6 to "1.729e-6" converts 1.729e-6 to "1.729e-6" + converts 1.729e+175 to "1.729e+175" converts 1.729e+175 to "1.729e+175" + converts 1.729e+41 to "1.729e+41" converts 1.729e+41 to "1.729e+41" + converts 1.729e+82 to "1.729e+82" converts 1.729e+82 to "1.729e+82" + converts 1.729e-292 to "1.729e-292" converts 1.729e-292 to "1.729e-292" + converts 1.729e-42 to "1.729e-42" converts 1.729e-42 to "1.729e-42" + converts 1.729e+192 to "1.729e+192" converts 1.729e+192 to "1.729e+192" + converts 1.729e+216 to "1.729e+216" converts 1.729e+216 to "1.729e+216" + converts 1.729e-178 to "1.729e-178" converts 1.729e-178 to "1.729e-178" + converts 1.729e+18 to "1.729e+18" converts 1.729e+18 to "1.729e+18" + converts 1.729e-137 to "1.729e-137" converts 1.729e-137 to "1.729e-137" + converts 1.729e-54 to "1.729e-54" converts 1.729e-54 to "1.729e-54" + converts 1.729e+133 to "1.729e+133" converts 1.729e+133 to "1.729e+133" + converts 1.729e-149 to "1.729e-149" converts 1.729e-149 to "1.729e-149" + converts 1.729e-182 to "1.729e-182" converts 1.729e-182 to "1.729e-182" + converts 1.729e-60 to "1.729e-60" converts 1.729e-60 to "1.729e-60" + converts 1.729e+146 to "1.729e+146" converts 1.729e+146 to "1.729e+146" + converts 1.729e+210 to "1.729e+210" converts 1.729e+210 to "1.729e+210" + converts 1.729e+56 to "1.729e+56" converts 1.729e+56 to "1.729e+56" + converts 1.729e+102 to "1.729e+102" converts 1.729e+102 to "1.729e+102" + converts 1.729e+265 to "1.729e+265" converts 1.729e+265 to "1.729e+265" + converts 1.729e+26 to "1.729e+26" converts 1.729e+26 to "1.729e+26" + converts 1.729e-49 to "1.729e-49" converts 1.729e-49 to "1.729e-49" + converts 1.729e+230 to "1.729e+230" converts 1.729e+230 to "1.729e+230" + converts 1.729e+47 to "1.729e+47" converts 1.729e+47 to "1.729e+47" + converts 1.729e+212 to "1.729e+212" converts 1.729e+212 to "1.729e+212" + converts 1.729e-258 to "1.729e-258" converts 1.729e-258 to "1.729e-258" + converts 1.729e+154 to "1.729e+154" converts 1.729e+154 to "1.729e+154" + converts 1.729e+144 to "1.729e+144" converts 1.729e+144 to "1.729e+144" + converts 1.729e-279 to "1.729e-279" converts 1.729e-279 to "1.729e-279" + converts 1.729e-63 to "1.729e-63" converts 1.729e-63 to "1.729e-63" + converts 1.729e+27 to "1.729e+27" converts 1.729e+27 to "1.729e+27" + converts 1.729e-202 to "1.729e-202" converts 1.729e-202 to "1.729e-202" + converts 1.729e-226 to "1.729e-226" converts 1.729e-226 to "1.729e-226" + converts 1.729e+10 to "17290000000.0" converts 1.729e+10 to "17290000000.0" + converts 1.729e-132 to "1.729e-132" converts 1.729e-132 to "1.729e-132" + converts 1.729e-307 to "1.729e-307" converts 1.729e-307 to "1.729e-307" + converts 1.729e-162 to "1.729e-162" converts 1.729e-162 to "1.729e-162" + converts 1.729e-297 to "1.729e-297" converts 1.729e-297 to "1.729e-297" + converts 1.729e-127 to "1.729e-127" converts 1.729e-127 to "1.729e-127" + converts 1.729e-299 to "1.729e-299" converts 1.729e-299 to "1.729e-299" + converts 1.729e-174 to "1.729e-174" converts 1.729e-174 to "1.729e-174" + converts 1.729e-225 to "1.729e-225" converts 1.729e-225 to "1.729e-225" + converts 1.729e-163 to "1.729e-163" converts 1.729e-163 to "1.729e-163" + converts 1.729e-14 to "1.729e-14" converts 1.729e-14 to "1.729e-14" + converts 1.729e-20 to "1.729e-20" converts 1.729e-20 to "1.729e-20" + converts 1.729e+195 to "1.729e+195" converts 1.729e+195 to "1.729e+195" + converts 1.729e+294 to "1.729e+294" converts 1.729e+294 to "1.729e+294" + converts 1.729e+206 to "1.729e+206" converts 1.729e+206 to "1.729e+206" + converts 1.729e-39 to "1.729e-39" converts 1.729e-39 to "1.729e-39" + converts 1.729e+36 to "1.729e+36" converts 1.729e+36 to "1.729e+36" + converts 1.729e-220 to "1.729e-220" converts 1.729e-220 to "1.729e-220" + converts 1.729e-188 to "1.729e-188" converts 1.729e-188 to "1.729e-188" + converts 1.729e+250 to "1.729e+250" converts 1.729e+250 to "1.729e+250" + converts 1.729e+245 to "1.729e+245" converts 1.729e+245 to "1.729e+245" + converts 1.729e-66 to "1.729e-66" converts 1.729e-66 to "1.729e-66" + converts 1.729e+93 to "1.729e+93" converts 1.729e+93 to "1.729e+93" + converts 1.729e-47 to "1.729e-47" converts 1.729e-47 to "1.729e-47" + converts 1.729e+40 to "1.729e+40" converts 1.729e+40 to "1.729e+40" + converts 1.729e-230 to "1.729e-230" converts 1.729e-230 to "1.729e-230" + converts 1.729e-109 to "1.729e-109" converts 1.729e-109 to "1.729e-109" + converts 1.729e-25 to "1.729e-25" converts 1.729e-25 to "1.729e-25" + converts 1.729e-261 to "1.729e-261" converts 1.729e-261 to "1.729e-261" + converts 1.729e+55 to "1.729e+55" converts 1.729e+55 to "1.729e+55" + converts 1.729e+75 to "1.729e+75" converts 1.729e+75 to "1.729e+75" + converts 1.729e-321 to "1.73e-321" converts 1.729e-321 to "1.73e-321" + converts 1.729e-22 to "1.729e-22" converts 1.729e-22 to "1.729e-22" + converts 1.729e-302 to "1.729e-302" converts 1.729e-302 to "1.729e-302" + converts 1.729e-35 to "1.729e-35" converts 1.729e-35 to "1.729e-35" + converts 1.729e+15 to "1.729e+15" converts 1.729e+15 to "1.729e+15" + converts 1.729e-272 to "1.729e-272" converts 1.729e-272 to "1.729e-272" + converts 1.729e-65 to "1.729e-65" converts 1.729e-65 to "1.729e-65" + converts 1.729e+112 to "1.729e+112" converts 1.729e+112 to "1.729e+112" + converts 1.729e-165 to "1.729e-165" converts 1.729e-165 to "1.729e-165" + converts 1.729e+132 to "1.729e+132" converts 1.729e+132 to "1.729e+132" + converts 1.729e+238 to "1.729e+238" converts 1.729e+238 to "1.729e+238" + converts 1.729e+283 to "1.729e+283" converts 1.729e+283 to "1.729e+283" + converts 1.729e+71 to "1.729e+71" converts 1.729e+71 to "1.729e+71" + converts 1.729e+270 to "1.729e+270" converts 1.729e+270 to "1.729e+270" + converts 1.729e-221 to "1.729e-221" converts 1.729e-221 to "1.729e-221" + converts 1.729e+66 to "1.729e+66" converts 1.729e+66 to "1.729e+66" + converts 1.729e+167 to "1.729e+167" converts 1.729e+167 to "1.729e+167" + converts 1.729e+81 to "1.729e+81" converts 1.729e+81 to "1.729e+81" + converts 1.729e+97 to "1.729e+97" converts 1.729e+97 to "1.729e+97" + converts 1.729e+1 to "17.29" converts 1.729e+1 to "17.29" + converts 1.729e-15 to "1.729e-15" converts 1.729e-15 to "1.729e-15" + converts 1.729e+301 to "1.729e+301" converts 1.729e+301 to "1.729e+301" + converts 1.729e-264 to "1.729e-264" converts 1.729e-264 to "1.729e-264" + converts 1.729e-84 to "1.729e-84" converts 1.729e-84 to "1.729e-84" + converts 1.729e+203 to "1.729e+203" converts 1.729e+203 to "1.729e+203" + converts 1.729e-119 to "1.729e-119" converts 1.729e-119 to "1.729e-119" + converts 1.729e+246 to "1.729e+246" converts 1.729e+246 to "1.729e+246" + converts 1.729e-247 to "1.729e-247" converts 1.729e-247 to "1.729e-247" + converts 1.729e+261 to "1.729e+261" converts 1.729e+261 to "1.729e+261" + converts 1.729e-200 to "1.729e-200" converts 1.729e-200 to "1.729e-200" + converts 1.729e+196 to "1.729e+196" converts 1.729e+196 to "1.729e+196" + converts 1.729e-17 to "1.729e-17" converts 1.729e-17 to "1.729e-17" + converts 1.729e+237 to "1.729e+237" converts 1.729e+237 to "1.729e+237" + converts 1.729e-37 to "1.729e-37" converts 1.729e-37 to "1.729e-37" + converts 1.729e-170 to "1.729e-170" converts 1.729e-170 to "1.729e-170" + converts 1.729e-227 to "1.729e-227" converts 1.729e-227 to "1.729e-227" + converts 1.729e+164 to "1.729e+164" converts 1.729e+164 to "1.729e+164" + converts 1.729e+117 to "1.729e+117" converts 1.729e+117 to "1.729e+117" + converts 1.729e+21 to "1.729e+21" converts 1.729e+21 to "1.729e+21" + converts 1.729e+231 to "1.729e+231" converts 1.729e+231 to "1.729e+231" + converts 1.729e+70 to "1.729e+70" converts 1.729e+70 to "1.729e+70" + converts 1.729e-285 to "1.729e-285" converts 1.729e-285 to "1.729e-285" + converts 1.729e+298 to "1.729e+298" converts 1.729e+298 to "1.729e+298" + converts 1.729e+135 to "1.729e+135" converts 1.729e+135 to "1.729e+135" + converts 1.729e+72 to "1.729e+72" converts 1.729e+72 to "1.729e+72" + converts 1.729e-320 to "1.729e-320" converts 1.729e-320 to "1.729e-320" + converts 1.729e+297 to "1.729e+297" converts 1.729e+297 to "1.729e+297" + converts 1.729e+129 to "1.729e+129" converts 1.729e+129 to "1.729e+129" + converts 1.729e-278 to "1.729e-278" converts 1.729e-278 to "1.729e-278" + converts 1.729e-237 to "1.729e-237" converts 1.729e-237 to "1.729e-237" + converts 1.729e-21 to "1.729e-21" converts 1.729e-21 to "1.729e-21" + converts 1.729e+152 to "1.729e+152" converts 1.729e+152 to "1.729e+152" + converts 1.729e-129 to "1.729e-129" converts 1.729e-129 to "1.729e-129" + converts 1.729e+74 to "1.729e+74" converts 1.729e+74 to "1.729e+74" + converts 1.729e-252 to "1.729e-252" converts 1.729e-252 to "1.729e-252" + converts 1.729e-262 to "1.729e-262" converts 1.729e-262 to "1.729e-262" + converts 524288.0 to "524288.0" converts 524288.0 to "524288.0" + converts 1000000001000000.0 to "1.000000001e+15" converts 1000000001000000.0 to "1.000000001e+15" + converts 536870912000.0 to "536870912000.0" converts 536870912000.0 to "536870912000.0" + converts 1.234567890123456 to "1.234567890123456" converts 1.234567890123456 to "1.234567890123456" + converts 1.23 to "1.23" converts 1.23 to "1.23" + converts 1000000100000000.0 to "1.0000001e+15" converts 1000000100000000.0 to "1.0000001e+15" + converts 1.234567 to "1.234567" converts 1.234567 to "1.234567" + converts 8388608.0 to "8388608.0" converts 8388608.0 to "8388608.0" + converts 70368744177664.0 to "70368744177664.0" converts 70368744177664.0 to "70368744177664.0" + Ryu d2s_test.cc SmallIntegers + converts 9007199254740991.0 to "9.007199254740991e+15" converts 9007199254740991.0 to "9.007199254740991e+15" + converts 9007199254740992.0 to "9.007199254740992e+15" converts 9007199254740992.0 to "9.007199254740992e+15" + one-digit cases, where the decimal point can't appear between digits like "17.29" + converts 7e+0 to "7.0" converts 7e+0 to "7.0" + converts 7e-2 to "0.07" converts 7e-2 to "0.07" + converts 7e+2 to "700.0" converts 7e+2 to "700.0" + converts 7e-3 to "0.007" converts 7e-3 to "0.007" + converts 7e+3 to "7000.0" converts 7e+3 to "7000.0" + converts 7e+1 to "70.0" converts 7e+1 to "70.0" + converts 7e-1 to "0.7" converts 7e-1 to "0.7" + converts 1.2345678 to "1.2345678" converts 1.2345678 to "1.2345678" + converts 1234567890123456.0 to "1.234567890123456e+15" converts 1234567890123456.0 to "1.234567890123456e+15" + converts 1001000000000000.0 to "1.001e+15" converts 1001000000000000.0 to "1.001e+15" + converts 1.234 to "1.234" converts 1.234 to "1.234" + converts 8589934592.0 to "8589934592.0" converts 8589934592.0 to "8589934592.0" + converts 8388608000.0 to "8388608000.0" converts 8388608000.0 to "8388608000.0" + converts 12345678901.0 to "12345678901.0" converts 12345678901.0 to "12345678901.0" + converts 1000001000000000.0 to "1.000001e+15" converts 1000001000000000.0 to "1.000001e+15" + converts 9007199254740992.0 to "9.007199254740992e+15" converts 9007199254740992.0 to "9.007199254740992e+15" + highly-trimmed powers of 2 + converts 0x1p960 to "9.7453140114e+288" converts 0x1p960 to "9.7453140114e+288" + converts 0x1p959 to "4.8726570057e+288" converts 0x1p959 to "4.8726570057e+288" + converts 1.0 to "1.0" converts 1.0 to "1.0" + converts 12345678.0 to "12345678.0" converts 12345678.0 to "12345678.0" + converts 1.2345678901234 to "1.2345678901234" converts 1.2345678901234 to "1.2345678901234" + converts 1.234567890123 to "1.234567890123" converts 1.234567890123 to "1.234567890123" + converts 1000000000001000.0 to "1.000000000001e+15" converts 1000000000001000.0 to "1.000000000001e+15" + converts 100000000.0 to "100000000.0" converts 100000000.0 to "100000000.0" + converts 1000000.0 to "1000000.0" converts 1000000.0 to "1000000.0" + converts 10000000.0 to "10000000.0" converts 10000000.0 to "10000000.0" + converts 123456789.0 to "123456789.0" converts 123456789.0 to "123456789.0" + converts 68719476736000.0 to "68719476736000.0" converts 68719476736000.0 to "68719476736000.0" + converts 524288000.0 to "524288000.0" converts 524288000.0 to "524288000.0" + Grisu failures + converts 4.91e-6 to "4.91e-6" converts 4.91e-6 to "4.91e-6" + converts 0x1.a6c767640cd71p+879 to "6.6564021122018745e+264" converts 0x1.a6c767640cd71p+879 to "6.6564021122018745e+264" + converts 1.0e+23 to "1.0e+23" converts 1.0e+23 to "1.0e+23" + converts 3.5844466002796428e+298 to "3.5844466002796428e+298" converts 3.5844466002796428e+298 to "3.5844466002796428e+298" + converts 5.547e-6 to "5.547e-6" converts 5.547e-6 to "5.547e-6" + converts 0x1.e0ffed391517ep-186 to "1.9156918820264798e-56" converts 0x1.e0ffed391517ep-186 to "1.9156918820264798e-56" + converts 1234567895.0 to "1234567895.0" converts 1234567895.0 to "1234567895.0" + converts 8000.0 to "8000.0" converts 8000.0 to "8000.0" + converts 8796093022208.0 to "8796093022208.0" converts 8796093022208.0 to "8796093022208.0" + converts 123.0 to "123.0" converts 123.0 to "123.0" + converts 123456.0 to "123456.0" converts 123456.0 to "123456.0" + converts 100000000000.0 to "100000000000.0" converts 100000000000.0 to "100000000000.0" + odd mantissas (unaffected by shifting) + converts 5e22 to "5.0e+22" converts 5e22 to "5.0e+22" + converts 81123342286848e18 to "8.1123342286848e+31" converts 81123342286848e18 to "8.1123342286848e+31" + converts 115292150461e7 to "1.15292150461e+18" converts 115292150461e7 to "1.15292150461e+18" + converts 922337203e10 to "9.22337203e+18" converts 922337203e10 to "9.22337203e+18" + converts 1801439850948199e1 to "1.801439850948199e+16" converts 1801439850948199e1 to "1.801439850948199e+16" + converts 3e22 to "3.0e+22" converts 3e22 to "3.0e+22" + converts 14411518807585e4 to "1.4411518807585e+17" converts 14411518807585e4 to "1.4411518807585e+17" + converts 2361e18 to "2.361e+21" converts 2361e18 to "2.361e+21" + converts 115292150459e7 to "1.15292150459e+18" converts 115292150459e7 to "1.15292150459e+18" + converts 295149e15 to "2.95149e+20" converts 295149e15 to "2.95149e+20" + converts 72057594037927e3 to "7.2057594037927e+16" converts 72057594037927e3 to "7.2057594037927e+16" + converts 59031e16 to "5.9031e+20" converts 59031e16 to "5.9031e+20" + converts 93e20 to "9.3e+21" converts 93e20 to "9.3e+21" + converts 11807e17 to "1.1807e+21" converts 11807e17 to "1.1807e+21" + converts 59029e16 to "5.9029e+20" converts 59029e16 to "5.9029e+20" + converts 302232576e15 to "3.02232576e+23" converts 302232576e15 to "3.02232576e+23" + converts 4611686017e9 to "4.611686017e+18" converts 4611686017e9 to "4.611686017e+18" + converts 14411518807587e4 to "1.4411518807587e+17" converts 14411518807587e4 to "1.4411518807587e+17" + converts 23058430093e8 to "2.3058430093e+18" converts 23058430093e8 to "2.3058430093e+18" + converts 473e19 to "4.73e+21" converts 473e19 to "4.73e+21" + converts 184467441e11 to "1.84467441e+19" converts 184467441e11 to "1.84467441e+19" + converts 7378697e13 to "7.378697e+19" converts 7378697e13 to "7.378697e+19" + converts 922337205e10 to "9.22337205e+18" converts 922337205e10 to "9.22337205e+18" + converts 360287970189641e2 to "3.60287970189641e+16" converts 360287970189641e2 to "3.60287970189641e+16" + converts 184467439e11 to "1.84467439e+19" converts 184467439e11 to "1.84467439e+19" + converts 36893489e12 to "3.6893489e+19" converts 36893489e12 to "3.6893489e+19" + converts 2882303761517e5 to "2.882303761517e+17" converts 2882303761517e5 to "2.882303761517e+17" + converts 471e19 to "4.71e+21" converts 471e19 to "4.71e+21" + converts 81192061763584e18 to "8.1192061763584e+31" converts 81192061763584e18 to "8.1192061763584e+31" + converts 1801439850948197e1 to "1.801439850948197e+16" converts 1801439850948197e1 to "1.801439850948197e+16" + converts 11805e17 to "1.1805e+21" converts 11805e17 to "1.1805e+21" + converts 576460752303e6 to "5.76460752303e+17" converts 576460752303e6 to "5.76460752303e+17" + converts 4611686019e9 to "4.611686019e+18" converts 4611686019e9 to "4.611686019e+18" + converts 2363e18 to "2.363e+21" converts 2363e18 to "2.363e+21" + converts 295147e15 to "2.95147e+20" converts 295147e15 to "2.95147e+20" + converts 36893487e12 to "3.6893487e+19" converts 36893487e12 to "3.6893487e+19" + converts 19e21 to "1.9e+22" converts 19e21 to "1.9e+22" + converts 17e21 to "1.7e+22" converts 17e21 to "1.7e+22" + converts 23058430091e8 to "2.3058430091e+18" converts 23058430091e8 to "2.3058430091e+18" + converts 7378699e13 to "7.378699e+19" converts 7378699e13 to "7.378699e+19" + converts 2882303761519e5 to "2.882303761519e+17" converts 2882303761519e5 to "2.882303761519e+17" + converts 1475739e14 to "1.475739e+20" converts 1475739e14 to "1.475739e+20" + converts 72057594037929e3 to "7.2057594037929e+16" converts 72057594037929e3 to "7.2057594037929e+16" + converts 1475741e14 to "1.475741e+20" converts 1475741e14 to "1.475741e+20" + converts 360287970189639e2 to "3.60287970189639e+16" converts 360287970189639e2 to "3.60287970189639e+16" + converts 95e20 to "9.5e+21" converts 95e20 to "9.5e+21" + converts 576460752305e6 to "5.76460752305e+17" converts 576460752305e6 to "5.76460752305e+17" + converts 302230528e15 to "3.02230528e+23" converts 302230528e15 to "3.02230528e+23" + converts 8192.0 to "8192.0" converts 8192.0 to "8192.0" + converts 100.0 to "100.0" converts 100.0 to "100.0" + converts 536870912.0 to "536870912.0" converts 536870912.0 to "536870912.0" + converts 100000000000000.0 to "100000000000000.0" converts 100000000000000.0 to "100000000000000.0" + converts 549755813888.0 to "549755813888.0" converts 549755813888.0 to "549755813888.0" +JSON mapping + works together with yaml works together with yaml + allows small types of integer allows small types of integer + parses array of people parses array of people + parses person with unknown attributes parses person with unknown attributes + parses json array as set parses json array as set + parses JSON with presence markers + parses person with absent attributes parses person with absent attributes + parses json with Time::Format converter parses json with Time::Format converter + parses raw value from object parses raw value from object + parses 128-bit integer parses 128-bit integer + with query attributes + defines query getter with class restriction defines query getter with class restriction + raises if non-nilable attribute is nil raises if non-nilable attribute is nil + defines query getter defines query getter + defines non-query setter and presence methods defines non-query setter and presence methods + maps non-query attributes maps non-query attributes + emit_nulls option emit_nulls option + parses with nilable root and emit null parses with nilable root and emit null + should parse extra fields (JSONAttrPersonExtraFields with on_unknown_json_attribute) should parse extra fields (JSONAttrPersonExtraFields with on_unknown_json_attribute) + parses raw value from int parses raw value from int + fixes #13337 fixes #13337 + parses simple mapping parses simple mapping + emits null on request when doing to_json emits null on request when doing to_json + converter with null value (#13655) converter with null value (#13655) + parses json with problematic keys parses json with problematic keys + raises if non-nilable attribute is nil raises if non-nilable attribute is nil + parses person parses person + serializes JSON with presence markers and ignore_serialize + ignore_serialize is set to a method which returns true when value is nil or empty string + ignores field when value is nil ignores field when value is nil + ignores field when value is empty string ignores field when value is empty string + ignore_serialize is set to conditional expressions 'last_name.nil? && !last_name_present?' + emits field when value is not nil and @last_name_present is true emits field when value is not nil and @last_name_present is true + emits field when value is not nil and @last_name_present is false emits field when value is not nil and @last_name_present is false + emits null when value is null and @last_name_present is true emits null when value is null and @last_name_present is true + does not emit null when value is null and @last_name_present is false does not emit null when value is null and @last_name_present is false + parses raw value from float parses raw value from float + raises if not an object raises if not an object + doesn't emit null by default when doing to_json doesn't emit null by default when doing to_json + does to_json does to_json + works with record works with record + converter with default value converter with default value + BigDecimal + parses large precision json floats with BigDecimal parses large precision json floats with BigDecimal + parses json string with BigDecimal parses json string with BigDecimal + parses large json ints with BigDecimal parses large json ints with BigDecimal + parses json float with BigDecimal parses json float with BigDecimal + work with module and inheritance assert assert assert assert - any? without block - returns false if all elements are falsey returns false if all elements are falsey - returns true if at least one element is truthy returns true if at least one element is truthy - #present? assert assert assert assert -Log - building for type ignores parent source (types are absolute sources) building for type ignores parent source (types are absolute sources) - can build for generic class (ignores generic args) can build for generic class (ignores generic args) - can build for class can build for class - can build with Log = ::Log.for(self) can build with Log = ::Log.for(self) - can build sources from nested can build sources from nested - can build with level override can build with level override - can build nested with level override can build nested with level override - can build for module type can build for module type - can build for structs can build for structs -HTTP::WebSocketHandler - gives upgrade response for case-insensitive 'WebSocket' upgrade request gives upgrade response for case-insensitive 'WebSocket' upgrade request - returns not found if the request is not an websocket upgrade returns not found if the request is not an websocket upgrade - returns upgrade required if Sec-WebSocket-Version is invalid returns upgrade required if Sec-WebSocket-Version is invalid - returns upgrade required if Sec-WebSocket-Version is missing returns upgrade required if Sec-WebSocket-Version is missing - returns not found if the request Upgrade is invalid returns not found if the request Upgrade is invalid - gives upgrade response for websocket upgrade request with 'keep-alive, Upgrade' request gives upgrade response for websocket upgrade request with 'keep-alive, Upgrade' request - returns bad request if Sec-WebSocket-Key is missing returns bad request if Sec-WebSocket-Key is missing - gives upgrade response for websocket upgrade request with 'Upgrade' request gives upgrade response for websocket upgrade request with 'Upgrade' request -HTTP::FormData::Builder - #content_type - calculates the content type calculates the content type - #finish - fails when no body parts fails when no body parts - fails after finish fails after finish - #field - converts value to a string converts value to a string - builds valid form-data messages builds valid form-data messages - #file - fails after finish fails after finish -Indexable(T) - iterates until its size, having mutated (#3386) iterates until its size, having mutated (#3386) - iterates until its size, having mutated (#3386) iterates until its size, having mutated (#3386) - iterates within a range of indices (#3386) iterates within a range of indices (#3386) - dig? - returns nil if not found returns nil if not found - gets the value at given path given splat gets the value at given path given splat - #join - joins when T has String joins when T has String - joins strings (empty case) joins strings (empty case) - joins non-strings joins non-strings - joins strings (non-empty case) joins strings (non-empty case) - with IO with IO - iterates within a range of indices, no end iterates within a range of indices, no end + outputs with converter when nilable when emit_null is true outputs with converter when nilable when emit_null is true + parses strict person with unknown attributes parses strict person with unknown attributes + JSON::HashValueConverter(Converter) + uses converter instance with nested converter metaclass uses converter instance with nested converter metaclass + uses converter metaclass uses converter metaclass + uses converter instance with nested converter instance uses converter instance with nested converter instance + empty class with unmapped empty class with unmapped + allows setting a nilable property to nil allows setting a nilable property to nil + parses person without age parses person without age + empty class empty class + outputs with converter when nilable outputs with converter when nilable + uses Time::EpochConverter uses Time::EpochConverter + outputs JSON with Hash outputs JSON with Hash + should to store extra fields (JSONAttrPersonExtraFields with on_to_json) should to store extra fields (JSONAttrPersonExtraFields with on_to_json) + parses json with any parses json with any + namespaced classes + lets default values use the object's own namespace lets default values use the object's own namespace + raises if data type does not match raises if data type does not match + works with class with two fields works with class with two fields + parses json with defaults + with nilable with nilable + mixed mixed + create new array every time create new array every time + bool bool + JSON::ArrayConverter(Converter) + uses converter metaclass uses converter metaclass + uses converter instance with nested converter instance uses converter instance with nested converter instance + uses converter instance with nested converter metaclass uses converter instance with nested converter metaclass + uses Time::EpochMillisConverter uses Time::EpochMillisConverter + doesn't raises on false value when not-nil doesn't raises on false value when not-nil + parses with nilable root parses with nilable root + parses nilable union parses nilable union + yaml and json with after_initialize hook yaml and json with after_initialize hook + json with selective serialization json with selective serialization + parses with root parses with root + parses UUID parses UUID + parses JSON integer into a float property (#8618) parses JSON integer into a float property (#8618) + parses json with keywords parses json with keywords + use_json_discriminator + raises if unknown discriminator value raises if unknown discriminator value + raises if missing discriminator raises if missing discriminator + deserializes with discriminator, strict recursive type deserializes with discriminator, strict recursive type + deserializes with discriminator, another recursive type, fixes: #13429 deserializes with discriminator, another recursive type, fixes: #13429 + deserializes with discriminator deserializes with discriminator + deserializes with variable discriminator value type deserializes with variable discriminator value type +__floattisf + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests +.__powisf2 .__powisf2 +Base64 + simple test + encode "abc" to "YWJj\n" encode "abc" to "YWJj\n" + encode "abcd" to "YWJjZA==\n" encode "abcd" to "YWJjZA==\n" + encode "abcdef" to "YWJjZGVm\n" encode "abcdef" to "YWJjZGVm\n" + encode "a" to "YQ==\n" encode "a" to "YQ==\n" + decode from "YWJjZGVmZw==\n" to "abcdefg" decode from "YWJjZGVmZw==\n" to "abcdefg" + decode from "YWJjZGU=\n" to "abcde" decode from "YWJjZGU=\n" to "abcde" + encode "abcdefg" to "YWJjZGVmZw==\n" encode "abcdefg" to "YWJjZGVmZw==\n" + encode "abcde" to "YWJjZGU=\n" encode "abcde" to "YWJjZGU=\n" + decode from "YWJjZA==\n" to "abcd" decode from "YWJjZA==\n" to "abcd" + decode from "YWJj\n" to "abc" decode from "YWJj\n" to "abc" + decode from "YWI=\n" to "ab" decode from "YWI=\n" to "ab" + encode "" to "" encode "" to "" + decode from "YWJjZGVm\n" to "abcdef" decode from "YWJjZGVm\n" to "abcdef" + encode "ab" to "YWI=\n" encode "ab" to "YWI=\n" + decode from "YQ==\n" to "a" decode from "YQ==\n" to "a" + decode from "" to "" decode from "" to "" + base + decode from strict form decode from strict form + encode to stream returns number of written characters encode to stream returns number of written characters + decode from "VGhpcyBpcyBsaW5lIG9uZQpUaGlzIGlzIGxpbmUgdHdvClRoaXMgaXMgbGlu\nZSB0aHJlZQpBbmQgc28gb24uLi4K\n" to "This is line one\nThis is line two\nThis is line three\nAnd so on...\n" decode from "VGhpcyBpcyBsaW5lIG9uZQpUaGlzIGlzIGxpbmUgdHdvClRoaXMgaXMgbGlu\nZSB0aHJlZQpBbmQgc28gb24uLi4K\n" to "This is line one\nThis is line two\nThis is line three\nAnd so on...\n" + encode "This is line one\nThis is line two\nThis is line three\nAnd so on...\n" to "VGhpcyBpcyBsaW5lIG9uZQpUaGlzIGlzIGxpbmUgdHdvClRoaXMgaXMgbGlu\nZSB0aHJlZQpBbmQgc28gb24uLi4K\n" encode "This is line one\nThis is line two\nThis is line three\nAnd so on...\n" to "VGhpcyBpcyBsaW5lIG9uZQpUaGlzIGlzIGxpbmUgdHdvClRoaXMgaXMgbGlu\nZSB0aHJlZQpBbmQgc28gb24uLi4K\n" + encode "hahah⊙ⓧ⊙" to "aGFoYWjiipnik6fiipk=\n" encode "hahah⊙ⓧ⊙" to "aGFoYWjiipnik6fiipk=\n" + decode from "U2VuZCByZWluZm9yY2VtZW50cw==\n" to "Send reinforcements" decode from "U2VuZCByZWluZm9yY2VtZW50cw==\n" to "Send reinforcements" + encode "Send reinforcements" to "U2VuZCByZWluZm9yY2VtZW50cw==\n" encode "Send reinforcements" to "U2VuZCByZWluZm9yY2VtZW50cw==\n" + decode from "aGFoYWjiipnik6fiipk=\n" to "hahah⊙ⓧ⊙" decode from "aGFoYWjiipnik6fiipk=\n" to "hahah⊙ⓧ⊙" + decode from stream returns number of written bytes decode from stream returns number of written bytes + big message big message + works for most characters works for most characters + decode from "Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g\nQ3J5c3RhbA==\n" to "Now is the time for all good coders\nto learn Crystal" decode from "Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g\nQ3J5c3RhbA==\n" to "Now is the time for all good coders\nto learn Crystal" + encode "Now is the time for all good coders\nto learn Crystal" to "Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g\nQ3J5c3RhbA==\n" encode "Now is the time for all good coders\nto learn Crystal" to "Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g\nQ3J5c3RhbA==\n" + encodes byte slice encodes byte slice + urlsafe + encode to stream returns number of written characters encode to stream returns number of written characters + work work + + in multiple places + decode from "YWJj\nZGVm\nZw==\n" to "abcdefg" decode from "YWJj\nZGVm\nZw==\n" to "abcdefg" + decode from "YWJj\nZA==\n" to "abcd" decode from "YWJj\nZA==\n" to "abcd" + decode from "YWJj\nZGU=\n" to "abcde" decode from "YWJj\nZGU=\n" to "abcde" + decode from "YWJj\nZGVm\n" to "abcdef" decode from "YWJj\nZGVm\n" to "abcdef" + encodes empty slice encodes empty slice + encodes static array encodes static array + decode cases + decode + decode + + decode + in multiple places decode + in multiple places + decode small tail after last +, was a bug decode small tail after last +, was a bug + raise error when incorrect size raise error when incorrect size + raise error when + in incorrect place raise error when + in incorrect place + raise error when incorrect symbol raise error when incorrect symbol + strict + encode to stream returns number of written characters encode to stream returns number of written characters + with spec symbols with spec symbols + encode encode +JSON::Builder + writes array writes array + #next_is_object_key? #next_is_object_key? + writes integer writes integer + errors on nan errors on nan + writes object with scalar and indent writes object with scalar and indent + writes bool writes bool + writes float writes float + writes field with scalar in object writes field with scalar in object + writes nested array writes nested array + writes field with arbitrary value in object writes field with arbitrary value in object + writes string writes string + writes array with indent string writes array with indent string + writes object writes object + writes null writes null + errors on infinity errors on infinity + writes empty object with indent level writes empty object with indent level + writes raw writes raw + errors if writing before document start errors if writing before document start + writes object with array and scalar and indent writes object with array and scalar and indent + errors on max nesting (object) errors on max nesting (object) + errors if writing two scalars errors if writing two scalars + writes string with controls and slashes writes string with controls and slashes + raises if array is left open raises if array is left open + raises if object is left open raises if object is left open + writes empty array with indent level writes empty array with indent level + writes nested object writes nested object + errors on max nesting (array) errors on max nesting (array) + writes nested array writes nested array + raises if nothing written raises if nothing written + writes object with indent level writes object with indent level + writes array with indent level writes array with indent level +ENV + does .keys does .keys + sets and gets case-sensitive sets and gets case-sensitive + does .values does .values + sets to empty string sets to empty string + #to_h #to_h + []= + disallows NUL-bytes in key disallows NUL-bytes in key + disallows NUL-bytes in value disallows NUL-bytes in value + disallows NUL-bytes in key if value is nil disallows NUL-bytes in key if value is nil + does has_key? does has_key? + sets to nil (same as delete) sets to nil (same as delete) + set and gets set and gets + does not have an empty key does not have an empty key + gets non existent key as nilable gets non existent key as nilable + gets non existent key raises gets non existent key raises fetch fetches with block fetches with block + fetches and raises fetches and raises fetches with default value fetches with default value - #rindex - does rindex with big negative offset does rindex with big negative offset - does rindex with big offset does rindex with big offset - offset type offset type - does each_index does each_index + fetches arbitrary default value fetches arbitrary default value + fetches with one argument fetches with one argument + handles unicode handles unicode + deletes a key deletes a key +Set + does - does - + does to_a does to_a + == + compares two sets compares two sets + does ^ does ^ + aliases + to | aliases + to | + does ^ does ^ + does ^ does ^ + "#each" yielding "#each" yielding + does ^ does ^ + #rehash + rehashes rehashes + #proper_subset_of? #proper_subset_of? + does - does - + compare_by_identity + compares by identity compares by identity + retains compare_by_identity on clone retains compare_by_identity on clone + retains compare_by_identity on dup retains compare_by_identity on dup + an empty set + has size 0 has size 0 + is empty is empty + add? + returns true when object is not in the set returns true when object is not in the set + returns false when object is in the set returns false when object is in the set + does support giving a block to to_a does support giving a block to to_a + does ^ does ^ + does - does - + dup + creates a dup creates a dup + #superset_of? #superset_of? + does subtract does subtract + does clear does clear + "#each" iterator "#each" iterator + #proper_superset_of? #proper_superset_of? + does subtract does subtract + compares hashes of sets compares hashes of sets + does subtract does subtract + add + adds and includes adds and includes + returns self returns self + does & does & + does subtract does subtract + does - does - + does to_s does to_s + does | does | + checks intersects checks intersects + has object_id has object_id + does ^ does ^ + #subset_of? #subset_of? does each does each - #rindex! - offset type offset type - does rindex with big negative offset does rindex with big negative offset - does rindex with big offset does rindex with big offset - iterates until its size (#3386) iterates until its size (#3386) - iterates through a subset of its elements (#3386) iterates through a subset of its elements (#3386) - iterates within a range of indices, no beginning iterates within a range of indices, no beginning - .each_cartesian - does with reuse = true, without block does with reuse = true, without block - does with reuse = array, with block does with reuse = array, with block - does with an Indexable of Indexables, without block, combined with select does with an Indexable of Indexables, without block, combined with select - does with an Indexable of Indexables, without block does with an Indexable of Indexables, without block - does with reuse = true, with block does with reuse = true, with block - does with reuse = array, without block does with reuse = array, without block - does with an Indexable of Indexables, with block does with an Indexable of Indexables, with block - .cartesian_product - does with a Tuple of Tuples with mixed types does with a Tuple of Tuples with mixed types - does with an Indexable of Indexables does with an Indexable of Indexables - repeated_combinations - assert assert - yields with reuse = true yields with reuse = true - returns iterator with reuse = array returns iterator with reuse = array - yielding dup of arrays yielding dup of arrays - assert assert - accepts a block accepts a block - assert assert - assert assert - n > size (#14088) - "#each_repeated_combination" yielding "#each_repeated_combination" yielding - "#each_repeated_combination" iterator "#each_repeated_combination" iterator - "#each_repeated_combination" yielding "#each_repeated_combination" yielding - "#each_repeated_combination" iterator "#each_repeated_combination" iterator - assert assert - assert assert - returns iterator with reuse = true returns iterator with reuse = true - assert assert - assert assert - yields with reuse = array yields with reuse = array - returns iterator returns iterator - assert assert - #index! - raises if no element is found raises if no element is found - offset type offset type - #index - offset type offset type - does index with big offset does index with big offset - does index with big negative offset does index with big negative offset - #each_cartesian - does with 1 other Indexable, without block does with 1 other Indexable, without block - does with 1 other Indexable, with block does with 1 other Indexable, with block - does with >1 other Indexables, without block does with >1 other Indexables, without block - does with 1 other Indexable, without block, combined with select does with 1 other Indexable, without block, combined with select - does with >1 other Indexables, with block does with >1 other Indexables, with block - #cartesian_product - does with 1 other Indexable does with 1 other Indexable - does with >1 other Indexables does with >1 other Indexables - #to_a - without a block of an interface type without a block of an interface type - permutations - returns iterator with given size returns iterator with given size - assert assert - assert assert - yielding dup of arrays yielding dup of arrays - assert assert - yields with reuse = true yields with reuse = true - assert assert - assert assert - assert assert - assert assert - accepts a block accepts a block - returns iterator returns iterator - assert assert - assert assert - returns iterator with reuse = true returns iterator with reuse = true - dig - gets the value at given path given splat gets the value at given path given splat - raises IndexError if not found raises IndexError if not found - combinations - returns iterator with reuse = true returns iterator with reuse = true - assert assert - returns iterator with reuse = array returns iterator with reuse = array - accepts a block accepts a block - assert assert - does with reuse = array does with reuse = array - yielding dup of arrays yielding dup of arrays - does with reuse = true does with reuse = true - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - returns iterator returns iterator - assert assert - assert assert - assert assert -XML - parses html5 (#1404) parses html5 (#1404) - raises error when parsing empty string (#2752) raises error when parsing empty string (#2752) - gets name of HTML document node (#4040) gets name of HTML document node (#4040) - parses HTML from IO parses HTML from IO - parses HTML parses HTML -.__ashlti3 .__ashlti3 -BigInt - does bitwise and does bitwise and - does bitwise xor does bitwise xor - clones clones - does bitwise or does bitwise or - raises if factorial of 2^64 raises if factorial of 2^64 - does remainder with negative numbers does remainder with negative numbers - divides divides - #to_i16 - raises OverflowError raises OverflowError - converts to Int16 converts to Int16 - #to_u64 - raises OverflowError raises OverflowError - converts to UInt64 converts to UInt64 - divides with negative numbers divides with negative numbers - #to_u16 - converts to UInt16 converts to UInt16 - raises OverflowError raises OverflowError - #to_u64! - converts modulo (2 ** 64) converts modulo (2 ** 64) - converts to UInt64 converts to UInt64 - #humanize_bytes - assert assert - assert assert - #to_i128! - converts to Int128 converts to Int128 - converts modulo (2 ** 128) converts modulo (2 ** 128) - #hash #hash - negates negates - #to_i! - converts to Int32 converts to Int32 - gets absolute value gets absolute value - creates from signed ints creates from signed ints - #to_u! - converts to UInt32 converts to UInt32 - exponentiates exponentiates - #inspect - assert assert - does modulo does modulo - does bitwise not does bitwise not - #to_u8! - converts modulo (2 ** 8) converts modulo (2 ** 8) - converts to UInt8 converts to UInt8 - #to_i - converts to Int32 converts to Int32 - divides with negative numbers divides with negative numbers - raises if creates from string but invalid raises if creates from string but invalid - #to_u - converts to UInt32 converts to UInt32 - #to_u128 - converts to UInt128 converts to UInt128 - raises OverflowError raises OverflowError - does gcd and lcm does gcd and lcm - raises if factorial of negative raises if factorial of negative - #to_u8 - raises OverflowError raises OverflowError - converts to UInt8 converts to UInt8 - #to_u128! - converts modulo (2 ** 128) converts modulo (2 ** 128) - converts to UInt128 converts to UInt128 - does modulo with negative numbers does modulo with negative numbers - creates from unsigned ints creates from unsigned ints - #trailing_zeros_count #trailing_zeros_count - has unsafe_shr (#8691) has unsafe_shr (#8691) - #to_u32! - converts to UInt32 converts to UInt32 - converts modulo (2 ** 32) converts modulo (2 ** 32) - raises if mods by zero raises if mods by zero - does popcount does popcount - compares against float compares against float - #to_i128 - converts to Int128 converts to Int128 - raises OverflowError raises OverflowError - does to_big_f does to_big_f - subs subs - divides and calculates the modulo divides and calculates the modulo - #digits - works for positive numbers or zero works for positive numbers or zero - raises for invalid base raises for invalid base - works with a base works with a base - raises for negative numbers raises for negative numbers - #integer? - assert assert - assert assert - #to_i32 - converts to Int32 converts to Int32 - raises OverflowError raises OverflowError - #bit #bit - #to_i8 - converts to Int8 converts to Int8 - raises OverflowError raises OverflowError - #to_u32 - converts to UInt32 converts to UInt32 - raises OverflowError raises OverflowError - #to_u16! - converts modulo (2 ** 16) converts modulo (2 ** 16) - converts to UInt16 converts to UInt16 - #divisible_by? - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - #to_i32! - converts to Int32 converts to Int32 - converts modulo (2 ** 32) converts modulo (2 ** 32) - creates from string creates from string - raises if creating from NaN raises if creating from NaN - #to_s - base and upcase parameters - raises on base 1 raises on base 1 - assert assert - raises on base 62 with upcase raises on base 62 with upcase - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - raises on base 37 raises on base 37 - precision parameter - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - does bitwise left shift does bitwise left shift - gets factorial value gets factorial value - does String#to_big_i does String#to_big_i - #to_i64! - converts to Int64 converts to Int64 - converts modulo (2 ** 64) converts modulo (2 ** 64) - can use Number::[] can use Number::[] - tdivs tdivs - raises if divides by zero raises if divides by zero - creates from float creates from float - #to_i8! - converts to Int8 converts to Int8 - converts modulo (2 ** 8) converts modulo (2 ** 8) - multiplies multiplies - raises if divides by zero raises if divides by zero - divides divides - #to_i16! - converts modulo (2 ** 16) converts modulo (2 ** 16) - converts to Int16 converts to Int16 - #to_i64 - raises OverflowError raises OverflowError - converts to Int64 converts to Int64 - compares compares - adds adds - raises if creating from infinity raises if creating from infinity - does bitwise right shift does bitwise right shift - creates with a value of zero creates with a value of zero -Crystal::SyntaxHighlighter::HTML + concat + adds all the other elements adds all the other elements + returns self returns self + does - does - + does subtract does subtract + does - does - + clone + creates a clone creates a clone + new + creates new set with enumerable without block creates new set with enumerable without block + does subtract does subtract + delete + returns true when the object was present returns true when the object was present + returns false when the object was absent returns false when the object was absent + deletes an object deletes an object +Crystal::SyntaxHighlighter::Colorize .highlight - "1 < 2" "1 < 2" - "a/b" "a/b" - "lib" "lib" - "fun" "fun" - "1 * 2" "1 * 2" - "1 []= 2" "1 []= 2" - "1 &** 2" "1 &** 2" - "1 /= 2" "1 /= 2" - "1 **= 2" "1 **= 2" - "enum" "enum" - "\"<>\"" "\"<>\"" - "1 // 2" "1 // 2" - "def <=>" "def <=>" - "1 > 2" "1 > 2" - "%q(foo)" "%q(foo)" - "\"foo\#{[1, bar, \"str\"]}baz\"" "\"foo\#{[1, bar, \"str\"]}baz\"" "ensure" "ensure" - "'a'" "'a'" - "when" "when" - "elsif" "elsif" + "1 &** 2" "1 &** 2" + "1 == 2" "1 == 2" + "macro" "macro" + "1 ^ 2" "1 ^ 2" + "$1" "$1" + "sizeof" "sizeof" + "%w(foo bar baz)" "%w(foo bar baz)" + "1 === 2" "1 === 2" + "1 &*= 2" "1 &*= 2" + "1 != 2" "1 != 2" "struct" "struct" - "1 - 2" "1 - 2" - "instance_sizeof" "instance_sizeof" - "1/ 2" "1/ 2" - "1 || 2" "1 || 2" - "def //" "def //" - "def +" "def +" - "nil?" "nil?" - "def ~" "def ~" - "next" "next" - "protected" "protected" "1 |= 2" "1 |= 2" - "1 !~ 2" "1 !~ 2" "a/ b" "a/ b" - "1 && 2" "1 && 2" - "\"foo\#{bar}baz\"" "\"foo\#{bar}baz\"" - "def %" "def %" - "1 | 2" "1 | 2" - "uninitialized" "uninitialized" - "of" "of" - "annotation" "annotation" - "as?" "as?" - "alias" "alias" - "# <\">" "# <\">" - "def |" "def |" - "in" "in" - "union" "union" - "Foo" "Foo" + "1 //= 2" "1 //= 2" "def /" "def /" - "def >>" "def >>" - "1 + 2" "1 + 2" - "1 == 2" "1 == 2" + "a / b" "a / b" + "1 !~ 2" "1 !~ 2" + "extend" "extend" + "in" "in" + "def &" "def &" + "def" "def" "1 *= 2" "1 *= 2" - "def !=" "def !=" - "for" "for" - "1 ^ 2" "1 ^ 2" - "1 != 2" "1 != 2" - "if" "if" - "1 >> 2" "1 >> 2" - "typeof" "typeof" - "1 [] 2" "1 [] 2" - "class" "class" - "Foo::Bar" "Foo::Bar" - "do" "do" - "1 <<= 2" "1 <<= 2" - "1 & 2" "1 & 2" - "# foo\n# bar\n" "# foo\n# bar\n" "1 &* 2" "1 &* 2" - "\"nest1\#{foo + \"nest2\#{1 + 1}bar\"}baz\"" "\"nest1\#{foo + \"nest2\#{1 + 1}bar\"}baz\"" + "abstract" "abstract" + "1 []= 2" "1 []= 2" + "\"foo\#{[1, bar, \"str\"]}baz\"" "\"foo\#{[1, bar, \"str\"]}baz\"" + "1 &&= 2" "1 &&= 2" + "next" "next" + "then" "then" + "offsetof" "offsetof" + "/foo/xim" "/foo/xim" + "do" "do" "def <=" "def <=" - "foo, bar = <<-FOO, <<-BAR\n foo\n FOO\n bar\n BAR" "foo, bar = <<-FOO, <<-BAR\n foo\n FOO\n bar\n BAR" + "'<'" "'<'" "1 <=> 2" "1 <=> 2" - "module" "module" + "$~" "$~" + "a /b/" "a /b/" + "%i(foo bar baz)" "%i(foo bar baz)" + "if" "if" + "when" "when" + "break" "break" + "private" "private" "1 &+= 2" "1 &+= 2" - "a / b" "a / b" - "/foo/xim" "/foo/xim" - "end" "end" - "\"foo\"" "\"foo\"" - "1 ~ 2" "1 ~ 2" - "def >" "def >" - "1 <= 2" "1 <= 2" - ":foo" ":foo" - "offsetof" "offsetof" - "1 % 2" "1 % 2" - "def -" "def -" - "1 &&= 2" "1 &&= 2" - "1 += 2" "1 += 2" - "1 ||= 2" "1 ||= 2" - "# bar\n" "# bar\n" - "select" "select" + "is_a?" "is_a?" + "def ~" "def ~" + "1/2" "1/2" + "class" "class" + "$?" "$?" + "include" "include" + "%(foo)" "%(foo)" + "typeof" "typeof" + "\"nest1\#{foo + \"nest2\#{1 + 1}bar\"}baz\"" "\"nest1\#{foo + \"nest2\#{1 + 1}bar\"}baz\"" + "enum" "enum" "asm" "asm" - "def &" "def &" - "1 %= 2" "1 %= 2" - "def **" "def **" - "nil" "nil" + "def >=" "def >=" + "def ==" "def ==" + "module" "module" + "with" "with" + "%w<foo bar baz>" "%w<foo bar baz>" "1 ^= 2" "1 ^= 2" - "sizeof" "sizeof" - "%r(foo)xim" "%r(foo)xim" - "break" "break" - "def *" "def *" - "while" "while" + "1 &= 2" "1 &= 2" + "1 >= 2" "1 >= 2" "def =~" "def =~" - "1 //= 2" "1 //= 2" - "a /b/" "a /b/" - "3.14" "3.14" - "def ==" "def ==" + "# <\">" "# <\">" + "return" "return" + "as" "as" "def <" "def <" - "def ^" "def ^" - "foo\nbar" "foo\nbar" "1 &- 2" "1 &- 2" - "1 &*= 2" "1 &*= 2" - "%<foo>" "%<foo>" - "1 &+ 2" "1 &+ 2" - "case" "case" - "false" "false" - "include" "include" - "def []=" "def []=" - "1 = 2" "1 = 2" - "1 ** 2" "1 ** 2" - "until" "until" - "%Q(foo)" "%Q(foo)" - "abstract" "abstract" - "1 ! 2" "1 ! 2" - "with" "with" - "type" "type" - "def []?" "def []?" + "1 [] 2" "1 [] 2" + "1 | 2" "1 | 2" "1 /2" "1 /2" + "protected" "protected" + "1 & 2" "1 & 2" "%x(foo)" "%x(foo)" - "%w(foo bar\n baz)" "%w(foo bar\n baz)" - "super" "super" - "1 / 2" "1 / 2" - "1 &= 2" "1 &= 2" - "1 -= 2" "1 -= 2" - "verbatim" "verbatim" + "type" "type" + "1 /= 2" "1 /= 2" + "1 % 2" "1 % 2" + "require" "require" + "Foo" "Foo" + "1 && 2" "1 && 2" + "uninitialized" "uninitialized" + "foo\nbar" "foo\nbar" "foo bar" "foo bar" - "'<'" "'<'" + "def >" "def >" + "self" "self" + "a/b" "a/b" + "for" "for" + "def foo" "def foo" "else" "else" - "as" "as" - "42" "42" - "def !~" "def !~" - "return" "return" + "while" "while" + "\"foo\"" "\"foo\"" + "lib" "lib" + "foo" "foo" + "as?" "as?" + "super" "super" + "Foo::Bar" "Foo::Bar" + "instance_alignof" "instance_alignof" + "def ^" "def ^" + "1 << 2" "1 << 2" + "nil" "nil" + "Set{1, 2, 3}" "Set{1, 2, 3}" + "annotation" "annotation" + "verbatim" "verbatim" + "1 ~ 2" "1 ~ 2" + "1 []? 2" "1 []? 2" + "%q(foo)" "%q(foo)" + "\"foo\#{bar}baz\"" "\"foo\#{bar}baz\"" + "1 + 2" "1 + 2" + "elsif" "elsif" + "alias" "alias" + "1 > 2" "1 > 2" + "yield" "yield" + "1/ 2" "1/ 2" "begin" "begin" - "1 >= 2" "1 >= 2" "1 =~ 2" "1 =~ 2" + "pointerof" "pointerof" + "1 &-= 2" "1 &-= 2" + "foo = bar(\"baz\#{PI + 1}\") # comment" "foo = bar(\"baz\#{PI + 1}\") # comment" + "%w(foo bar\n baz)" "%w(foo bar\n baz)" + "def **" "def **" + "\"<>\"" "\"<>\"" + "unless" "unless" + "union" "union" + "1 ||= 2" "1 ||= 2" ":\"foo\"" ":\"foo\"" - "extend" "extend" - "self" "self" - "self" "self" - "def []" "def []" - "%w<foo bar baz>" "%w<foo bar baz>" - "require" "require" - "macro" "macro" + "1 <= 2" "1 <= 2" + "rescue" "rescue" + "end" "end" + "false" "false" + "def |" "def |" + "fun" "fun" + "select" "select" + "nil?" "nil?" + "1 += 2" "1 += 2" + "def >>" "def >>" + "def !=" "def !=" + "foo, bar = <<-FOO, <<-BAR\n foo\n FOO\n bar\n BAR" "foo, bar = <<-FOO, <<-BAR\n foo\n FOO\n bar\n BAR" + "1 <<= 2" "1 <<= 2" + "%Q(foo)" "%Q(foo)" + "1 %= 2" "1 %= 2" + "1 / 2" "1 / 2" "alignof" "alignof" - "$~" "$~" - "$1" "$1" - "out" "out" - "def >=" "def >=" - "1/2" "1/2" - "Set{1, 2, 3}" "Set{1, 2, 3}" - "1 === 2" "1 === 2" - "foo = bar(\"baz\#{PI + 1}\") # comment" "foo = bar(\"baz\#{PI + 1}\") # comment" - "1 >>= 2" "1 >>= 2" - "instance_alignof" "instance_alignof" - "`foo`" "`foo`" - "# foo" "# foo" + "def []" "def []" + "3.14" "3.14" + "'a'" "'a'" + "def []=" "def []=" + "of" "of" + "1 -= 2" "1 -= 2" "true" "true" - "then" "then" - "%(foo)" "%(foo)" - "1 &-= 2" "1 &-= 2" + "`foo`" "`foo`" + "1 * 2" "1 * 2" + "instance_sizeof" "instance_sizeof" + "def %" "def %" "def <<" "def <<" - "def" "def" - "%w(foo bar baz)" "%w(foo bar baz)" - "rescue" "rescue" - "private" "private" - "pointerof" "pointerof" - "is_a?" "is_a?" - "%i(foo bar baz)" "%i(foo bar baz)" - "unless" "unless" - "yield" "yield" + "until" "until" + "def -" "def -" + "1 ! 2" "1 ! 2" + "def <=>" "def <=>" + "1 >> 2" "1 >> 2" "123_i64" "123_i64" + "%r(foo)xim" "%r(foo)xim" + "def !~" "def !~" + "def []?" "def []?" + "1 &+ 2" "1 &+ 2" + "42" "42" + "1 < 2" "1 < 2" + ":foo" ":foo" + "case" "case" + "1 - 2" "1 - 2" + "1 // 2" "1 // 2" + "# bar\n" "# bar\n" + "# foo" "# foo" + "1 ** 2" "1 ** 2" + "def +" "def +" + "1 = 2" "1 = 2" + "1 >>= 2" "1 >>= 2" + "1 **= 2" "1 **= 2" + "1 || 2" "1 || 2" + "# foo\n# bar\n" "# foo\n# bar\n" + "out" "out" + "def //" "def //" "$2?" "$2?" - "1 []? 2" "1 []? 2" - "def foo" "def foo" - "1 << 2" "1 << 2" - "$?" "$?" - "foo" "foo" - #highlight! + "%<foo>" "%<foo>" + "def *" "def *" + .highlight! + "\"foo" "\"foo" + "%w[foo" "%w[foo" "%i[foo" "%i[foo" - "foo, bar = <<-FOO, <<-BAR\n foo" "foo, bar = <<-FOO, <<-BAR\n foo" "foo = bar(\"baz\#{PI + 1}\") # comment" "foo = bar(\"baz\#{PI + 1}\") # comment" "foo, bar = <<-FOO, <<-BAR\n foo\n FOO" "foo, bar = <<-FOO, <<-BAR\n foo\n FOO" - "\"foo" "\"foo" - "%w[foo" "%w[foo" -Time::Location::Zone - #name #name - #inspect #inspect -CSV - lex - lexes with newline inside quote lexes with newline inside quote - lexes two columns lexes two columns - lexes newline followed by eof lexes newline followed by eof - raises if command, newline or end doesn't follow quote raises if command, newline or end doesn't follow quote - lexes with a given separator lexes with a given separator - doesn't consume char after \n (#11172) doesn't consume char after \n (#11172) - lexes with comma inside quote lexes with comma inside quote - raises on unclosed quote raises on unclosed quote - lexes two with inner quotes lexes two with inner quotes - raises if single quote in the middle raises if single quote in the middle - lexes two empty columns lexes two empty columns - lexes two with quotes lexes two with quotes - doesn't consume char after \r (#11172) doesn't consume char after \r (#11172) - lexes with whitespace lexes with whitespace - lexes with a given quote char lexes with a given quote char - lexes two columns with two rows lexes two columns with two rows - lexes two columns with two rows with - lexes two columns with two rows with - - lexes last empty column lexes last empty column - lexes with empty columns lexes with empty columns -IO - read operations - does gets with char and limit does gets with char and limit - does gets with limit does gets with limit - reads all remaining content as bytes reads all remaining content as bytes - does gets with empty string (no peek) does gets with empty string (no peek) - reads char reads char - does gets with \r\n, chomp true goes past \r does gets with \r\n, chomp true goes past \r - reads all remaining content reads all remaining content - reads string reads string - does gets with chomp false does gets with chomp false - reads byte reads byte - raises if invoking gets with negative limit raises if invoking gets with negative limit - does read_line with limit does read_line with limit - does gets does gets - does read_fully does read_fully - does gets with char delimiter does gets with char delimiter - gets with empty string as delimiter gets with empty string as delimiter - raises on EOF with read_line raises on EOF with read_line - gets with string as delimiter and chomp = true gets with string as delimiter and chomp = true - does gets with \r\n does gets with \r\n - does gets with \r\n (no peek) does gets with \r\n (no peek) - raises on EOF with readline and delimiter raises on EOF with readline and delimiter - does gets with unicode char delimiter does gets with unicode char delimiter - does gets with \r\n (with peek) does gets with \r\n (with peek) - does read_fully? does read_fully? - does gets with \n (with peek) does gets with \n (with peek) - does each_line does each_line - does gets with \n (no peek) does gets with \n (no peek) - does each_byte does each_byte - does read_line with char and limit does read_line with char and limit - does gets with empty string (with peek) does gets with empty string (with peek) - does each_char does each_char - doesn't underflow when limit is unsigned doesn't underflow when limit is unsigned - does gets with big line does gets with big line - gets with string as delimiter gets with string as delimiter - raises if trying to read to an IO not opened for reading raises if trying to read to an IO not opened for reading - .same_content? - compares two ios, one way (true) compares two ios, one way (true) - compares two ios, second way (false) compares two ios, second way (false) - compares two ios, one way (false) compares two ios, one way (false) - refutes prefix match, one way refutes prefix match, one way - refutes prefix match, second way refutes prefix match, second way - refutes prefix match, one way refutes prefix match, one way - compares two ios, second way (true) compares two ios, second way (true) - refutes prefix match, second way refutes prefix match, second way - gets with single byte string as delimiter gets with single byte string as delimiter - "#each_line" yielding "#each_line" yielding - copies copies - "#char" yielding "#char" yielding - copies with limit copies with limit - "#each_line" iterator "#each_line" iterator - write operations - skips a few bytes skips a few bytes - skips more than 4096 bytes skips more than 4096 bytes - does puts many times does puts many times - raises if trying to write to an IO not opened for writing raises if trying to write to an IO not opened for writing - puts several arguments puts several arguments - writes with printf writes with printf - does puts does puts - writes with printf as an array writes with printf as an array - prints several arguments prints several arguments - writes bytes writes bytes - skips to end skips to end - prints prints - does puts with big string does puts with big string - skips but raises if not enough bytes skips but raises if not enough bytes - "#each_line(chomp: false)" yielding "#each_line(chomp: false)" yielding - "#each_line(chomp: false)" iterator "#each_line(chomp: false)" iterator - "#char" iterator "#char" iterator - encoding - encode - prints numbers prints numbers - prints symbol prints symbol - puts puts - raises on invalid byte sequence raises on invalid byte sequence - raises on incomplete byte sequence raises on incomplete byte sequence - prints char prints char - printf printf - skips on invalid byte sequence skips on invalid byte sequence - prints bool prints bool - says invalid encoding says invalid encoding - prints a string prints a string - prints big int prints big int - decode - reads utf8 reads utf8 - decodes incomplete multibyte sequence with skip (2) (#3285) decodes incomplete multibyte sequence with skip (2) (#3285) - does skips when converting to UTF-8 does skips when converting to UTF-8 - gets big string gets big string - skips invalid byte sequences skips invalid byte sequences - gets with chomp = false gets with chomp = false - gets_to_end gets_to_end - sets encoding to utf8 and stays as UTF-8 sets encoding to utf8 and stays as UTF-8 - says invalid byte sequence says invalid byte sequence - gets big EUC-JP string gets big EUC-JP string - raises on incomplete byte sequence raises on incomplete byte sequence - gets with non-ascii and chomp: false gets with non-ascii and chomp: false - does gets on unicode with char and limit without off-by-one does gets on unicode with char and limit without off-by-one - gets ascii from socket (#9056) gets ascii from socket (#9056) - reads utf8 byte reads utf8 byte - says invalid 'invalid' option says invalid 'invalid' option - gets with limit (big) gets with limit (big) - decodes incomplete multibyte sequence with skip (#3285) decodes incomplete multibyte sequence with skip (#3285) - gets gets - decodes incomplete multibyte sequence with skip (3) (#3285) decodes incomplete multibyte sequence with skip (3) (#3285) - gets with non-ascii gets with non-ascii - sets encoding to utf-8 and stays as UTF-8 sets encoding to utf-8 and stays as UTF-8 - gets with limit (small, no newline) gets with limit (small, no newline) - says invalid encoding says invalid encoding - gets with string delimiter gets with string delimiter - reads string reads string - gets with limit gets with limit - reads char reads char - #encoding - returns the name of the encoding set via #set_encoding returns the name of the encoding set via #set_encoding - returns "UTF-8" if the encoding is not manually set returns "UTF-8" if the encoding is not manually set - raises on copy with negative limit raises on copy with negative limit - "#char" iterator "#char" iterator - IO::Error - .new - accepts `cause` argument (#14241) accepts `cause` argument (#14241) - "#char" yielding "#char" yielding - #close - aborts 'read' in a different fiber aborts 'read' in a different fiber - aborts 'write' in a different fiber aborts 'write' in a different fiber - partial read - doesn't block on first read. blocks on 2nd read doesn't block on first read. blocks on 2nd read -::sprintf - integers - base specifier - supports base 2 supports base 2 - supports base 10 supports base 10 - supports base 16 supports base 16 - supports base 8 supports base 8 - space flag - is ignored if plus flag is also specified is ignored if plus flag is also specified - writes space before left padding writes space before left padding - writes a space for positive integers writes a space for positive integers - sharp flag - adds a base prefix adds a base prefix - omits the base prefix for 0 omits the base prefix for 0 - works with BigInt works with BigInt - precision specifier - can be used with width can be used with width - sets the minimum length of the number part sets the minimum length of the number part - is ignored if precision argument is negative is ignored if precision argument is negative - minus flag - left-justifies the string left-justifies the string - reserves space for the number prefix reserves space for the number prefix - width specifier - left-justifies on negative width left-justifies on negative width - sets the minimum length of the string sets the minimum length of the string - zero flag - is ignored if string is left-justified is ignored if string is left-justified - left-pads the result with zeros left-pads the result with zeros - is ignored if precision is specified is ignored if precision is specified - works with Int*::MIN works with Int*::MIN - plus flag - writes plus sign after left space-padding writes plus sign after left space-padding - writes a plus sign for positive integers writes a plus sign for positive integers - writes plus sign before left zero-padding writes plus sign before left zero-padding - works works - floats - infinities infinities - general format - minus flag - left-justifies the string left-justifies the string - sharp flag - prints decimal point and trailing zeros prints decimal point and trailing zeros - zero flag - can be used with precision can be used with precision - left-pads the result with zeros left-pads the result with zeros - is ignored if string is left-justified is ignored if string is left-justified - works works - plus flag - writes plus sign before left zero-padding writes plus sign before left zero-padding - writes plus sign after left space-padding writes plus sign after left space-padding - writes a plus sign for positive values writes a plus sign for positive values - space flag - writes a space for positive values writes a space for positive values - is ignored if plus flag is also specified is ignored if plus flag is also specified - writes space before left space-padding writes space before left space-padding - precision specifier - is ignored if precision argument is negative is ignored if precision argument is negative - can be used with width can be used with width - sets the precision of the value sets the precision of the value - width specifier - sets the minimum length of the string sets the minimum length of the string - left-justifies on negative width left-justifies on negative width - scientific format - width specifier - left-justifies on negative width left-justifies on negative width - sets the minimum length of the string sets the minimum length of the string - space flag - writes space before left space-padding writes space before left space-padding - writes a space for positive values writes a space for positive values - is ignored if plus flag is also specified is ignored if plus flag is also specified - precision specifier - is ignored if precision argument is negative is ignored if precision argument is negative - can be used with width can be used with width - sets the minimum length of the fractional part sets the minimum length of the fractional part - minus flag - left-justifies the string left-justifies the string - works works - plus flag - writes plus sign after left space-padding writes plus sign after left space-padding - writes a plus sign for positive values writes a plus sign for positive values - writes plus sign before left zero-padding writes plus sign before left zero-padding - zero flag - is ignored if string is left-justified is ignored if string is left-justified - left-pads the result with zeros left-pads the result with zeros - can be used with precision can be used with precision - sharp flag - prints a decimal point even if no digits follow prints a decimal point even if no digits follow - not-a-numbers not-a-numbers - infinities infinities - fixed format - works works - not-a-numbers not-a-numbers - hex format - plus flag - writes a plus sign for positive values writes a plus sign for positive values - writes plus sign before left zero-padding writes plus sign before left zero-padding - writes plus sign after left space-padding writes plus sign after left space-padding - minus flag - left-justifies the string left-justifies the string - space flag - is ignored if plus flag is also specified is ignored if plus flag is also specified - writes space before left space-padding writes space before left space-padding - writes a space for positive values writes a space for positive values - works works - width specifier - sets the minimum length of the string sets the minimum length of the string - left-justifies on negative width left-justifies on negative width - sharp flag - prints a decimal point even if no digits follow prints a decimal point even if no digits follow - precision specifier - is ignored if precision argument is negative is ignored if precision argument is negative - can be used with width can be used with width - sets the minimum length of the fractional part sets the minimum length of the fractional part - zero flag - left-pads the result with zeros left-pads the result with zeros - is ignored if string is left-justified is ignored if string is left-justified - can be used with precision can be used with precision - formatted substitution - raises if numbered parameters also given raises if numbered parameters also given - applies formatting to %<...> placeholder applies formatting to %<...> placeholder - doesn't raise if plain substitution also given doesn't raise if plain substitution also given - raises if sequential parameters also given raises if sequential parameters also given - numbered parameters - raises if used as width or precision specifier of a sequential parameter raises if used as width or precision specifier of a sequential parameter - gets width and precision specifier at specified index gets width and precision specifier at specified index - can be used before flags can be used before flags - raises if multiple indices specified raises if multiple indices specified - gets argument at specified index gets argument at specified index - raises if index is zero raises if index is zero - raises if index is out of bounds raises if index is out of bounds - raises if sequential parameters also given raises if sequential parameters also given - raises if named parameters also given raises if named parameters also given - plain substitution - doesn't raise if 1-element list of hash or named tuple given doesn't raise if 1-element list of hash or named tuple given - substitutes multiple placeholder substitutes multiple placeholder - throws an error when the key is not found throws an error when the key is not found - raises if numbered parameters also given raises if numbered parameters also given - raises on unbalanced curly raises on unbalanced curly - doesn't raise if formatted substitution also given doesn't raise if formatted substitution also given - substitutes one placeholder substitutes one placeholder - raises if sequential parameters also given raises if sequential parameters also given - doesn't raise on balanced curly with null byte doesn't raise on balanced curly with null byte - raises if expecting hash or named tuple but not given raises if expecting hash or named tuple but not given - accepts multiple positional arguments accepts multiple positional arguments - sequential parameters - raises if numbered parameters also given raises if numbered parameters also given - raises if named parameters also given raises if named parameters also given - doesn't accept modifiers for %% doesn't accept modifiers for %% - doesn't format %% doesn't format %% - doesn't stop at null character when doing '%' doesn't stop at null character when doing '%' - strings - works works - calls to_s on non-strings calls to_s on non-strings -StringScanner - #offset= - sets the current position sets the current position - raises on negative positions raises on negative positions - #[]? - returns nil when there is no last match returns nil when there is no last match - allows access to subgroups of the last match allows access to subgroups of the last match - raises when there is no subgroup raises when there is no subgroup - #offset - returns the current position returns the current position - #[] - raises when there is no subgroup raises when there is no subgroup - allows access to subgroups of the last match allows access to subgroups of the last match - raises when there is no last match raises when there is no last match - #check_until - returns the string matched and advances the offset returns the string matched and advances the offset - returns nil if it can't match from the offset returns nil if it can't match from the offset - #rest - returns the remainder of the string from the offset returns the remainder of the string from the offset - #terminate - moves the scan offset to the end of the string and clears the last match moves the scan offset to the end of the string and clears the last match - #reset - resets the scan offset to the beginning and clears the last match resets the scan offset to the beginning and clears the last match - #peek - shows the next len characters without advancing the offset shows the next len characters without advancing the offset - #eos - it is true when the offset is at the end it is true when the offset is at the end - #check - returns the string matched but does not advances the offset returns the string matched but does not advances the offset - returns nil if it can't match from the offset returns nil if it can't match from the offset - #skip_until - advances the offset but does not returns the string matched advances the offset but does not returns the string matched - #scan_until - returns nil if it can't match from the offset returns nil if it can't match from the offset - returns the string matched and advances the offset returns the string matched and advances the offset - #skip - advances the offset but does not returns the string matched advances the offset but does not returns the string matched - #string + "foo, bar = <<-FOO, <<-BAR\n foo" "foo, bar = <<-FOO, <<-BAR\n foo" +HTTP::Cookie + #name= + raises on invalid name raises on invalid name + automatically configures the cookie __Secure- prefix and related properties are unset automatically configures the cookie __Secure- prefix and related properties are unset + doesn't raise on invalid cookie with __Host- prefix doesn't raise on invalid cookie with __Host- prefix + automatically configures the cookie __Host- prefix and related unset properties automatically configures the cookie __Host- prefix and related unset properties + doesn't raise on invalid cookie with __Secure- prefix doesn't raise on invalid cookie with __Secure- prefix + #to_set_cookie_header + samesite samesite assert assert - #scan - returns the string matched and advances the offset returns the string matched and advances the offset - returns nil if it can't match from the offset returns nil if it can't match from the offset - #inspect - has information on the scanner has information on the scanner - works with small strings works with small strings -__fixunssfti + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + #== #== + .new + raises on invalid value raises on invalid value + with a security prefix + raises on invalid cookie with prefix raises on invalid cookie with prefix + automatically configures the cookie if it has the __Host- prefix and no explicit values provided automatically configures the cookie if it has the __Host- prefix and no explicit values provided + automatically makes the cookie secure if it has the __Secure- prefix and no explicit *secure* value is provided automatically makes the cookie secure if it has the __Secure- prefix and no explicit *secure* value is provided + raises on invalid name raises on invalid name + #valid? & #validate! + with a __Secure- prefix, but @secure is somehow `nil` with a __Secure- prefix, but @secure is somehow `nil` + raises on invalid cookie with __Host- prefix raises on invalid cookie with __Host- prefix + raises on invalid cookie with __Secure- prefix raises on invalid cookie with __Secure- prefix + #value= + raises on invalid value raises on invalid value +SemanticVersion + compares < compares < + compares build equivalence compares build equivalence + SemanticVersion::Prerelease + compares < compares < + does not accept bad versions does not accept bad versions + copies with specified modifications copies with specified modifications + bumps to the correct version bumps to the correct version +YAML::Serializable + parses yaml with defaults + create new array every time create new array every time + bool bool + with nilable with nilable + mixed mixed + outputs with converter when nilable when emit_null is true outputs with converter when nilable when emit_null is true + converter with null value (#13655) converter with null value (#13655) + should parse extra fields (YAMLAttrPersonExtraFields with on_unknown_yaml_attribute) should parse extra fields (YAMLAttrPersonExtraFields with on_unknown_yaml_attribute) + with query attributes + defines query getter defines query getter + defines query getter with class restriction defines query getter with class restriction + defines non-query setter and presence methods defines non-query setter and presence methods + maps non-query attributes maps non-query attributes + raises if non-nilable attribute is nil raises if non-nilable attribute is nil + raises if non-nilable attribute is nil raises if non-nilable attribute is nil + doesn't raises on false value when not-nil doesn't raises on false value when not-nil + uses Time::EpochMillisConverter uses Time::EpochMillisConverter + raises if data type does not match raises if data type does not match + converter with default value converter with default value + parses recursive nilable (1) parses recursive nilable (1) + parses yaml with any parses yaml with any + empty class with unmapped empty class with unmapped + checks that values fit into integer types checks that values fit into integer types + parses recursive hash parses recursive hash + parses strict person with unknown attributes parses strict person with unknown attributes + raises if not an object raises if not an object + parses person without age parses person without age + parses yaml with Time::Format converter parses yaml with Time::Format converter + parses person parses person + parses yaml with problematic keys parses yaml with problematic keys + use_yaml_discriminator + deserializes with discriminator, another recursive type, fixes: #13429 deserializes with discriminator, another recursive type, fixes: #13429 + raises if unknown discriminator value raises if unknown discriminator value + deserializes type which nests type with discriminator (#9849) deserializes type which nests type with discriminator (#9849) + deserializes with discriminator deserializes with discriminator + raises if missing discriminator raises if missing discriminator + deserializes with variable discriminator value type deserializes with variable discriminator value type + deserializes with discriminator, strict recursive type deserializes with discriminator, strict recursive type + emit_nulls option emit_nulls option + outputs YAML with Hash outputs YAML with Hash + works with class with three fields works with class with three fields + should to store extra fields (YAMLAttrPersonExtraFields with on_to_yaml) should to store extra fields (YAMLAttrPersonExtraFields with on_to_yaml) + YAML::ArrayConverter(Converter) + uses converter instance with nested converter metaclass uses converter instance with nested converter metaclass + uses converter instance with nested converter instance uses converter instance with nested converter instance + uses converter metaclass uses converter metaclass + doesn't emit null when doing to_yaml doesn't emit null when doing to_yaml + parses person with unknown attributes parses person with unknown attributes + fixes #13337 fixes #13337 + serializes YAML with presence markers and ignore_serialize + ignore_serialize is set to conditional expressions 'last_name.nil? && !last_name_present?' + emits field when value is not nil and @last_name_present is true emits field when value is not nil and @last_name_present is true + emits field when value is not nil and @last_name_present is false emits field when value is not nil and @last_name_present is false + emits null when value is null and @last_name_present is true emits null when value is null and @last_name_present is true + does not emit null when value is null and @last_name_present is false does not emit null when value is null and @last_name_present is false + ignore_serialize is set to a method which returns true when value is nil or empty string + ignores field when value is empty string ignores field when value is empty string + ignores field when value is nil ignores field when value is nil + does to_yaml does to_yaml + uses Time::EpochConverter uses Time::EpochConverter + work with module and inheritance + assert assert + assert assert + assert assert + assert assert + parses array of people with merge parses array of people with merge + works with record works with record + allows setting a nilable property to nil allows setting a nilable property to nil + parses simple mapping parses simple mapping + parses person with blank age parses person with blank age + calls #finalize calls #finalize + outputs with converter when nilable outputs with converter when nilable + works with selective serialization works with selective serialization + parses recursive array parses recursive array + empty class empty class + parses yaml with keywords parses yaml with keywords + emits null on request when doing to_yaml emits null on request when doing to_yaml + parses recursive parses recursive + parses array of people with merge, doesn't hang on infinite recursion parses array of people with merge, doesn't hang on infinite recursion + namespaced classes + lets default values use the object's own namespace lets default values use the object's own namespace + checks that non-integer values for integer fields report the expected type checks that non-integer values for integer fields report the expected type + parses YAML with presence markers + parses person with absent attributes parses person with absent attributes + allows small types of integer allows small types of integer + parses array of people parses array of people + work with inned class using same module name + assert assert + parses recursive nilable (2) parses recursive nilable (2) + parses nilable union parses nilable union +OAuth2::Client + authorization uri + gets with absolute uri gets with absolute uri + gets with state gets with state + gets with default endpoint gets with default endpoint + gets with custom endpoint gets with custom endpoint + gets with block gets with block + get_access_token_using_* + using Request Body to pass credentials + #make_token_request #make_token_request + #get_access_token_using_refresh_token #get_access_token_using_refresh_token + #get_access_token_using_client_credentials #get_access_token_using_client_credentials + #get_access_token_using_resource_owner_credentials #get_access_token_using_resource_owner_credentials + #get_access_token_using_authorization_code #get_access_token_using_authorization_code + using HTTP Basic authentication to pass credentials + #get_access_token_using_refresh_token #get_access_token_using_refresh_token + configures HTTP::Client configures HTTP::Client + #get_access_token_using_client_credentials #get_access_token_using_client_credentials + #get_access_token_using_authorization_code #get_access_token_using_authorization_code + #make_token_request #make_token_request + #get_access_token_using_resource_owner_credentials #get_access_token_using_resource_owner_credentials +__muloti4 + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests @@ -18514,1409 +17689,1489 @@ passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests -IO::Memory - skips_to_end skips_to_end - seeks with pos and pos= seeks with pos and pos= - reads more than available (#1229) reads more than available (#1229) - can tell can tell - reads each line reads each line - reads byte reads byte - reads at offset reads at offset - can seek from the end can seek from the end - writes and reads writes and reads - consumes with gets_to_end consumes with gets_to_end - creates from slice creates from slice - peeks peeks - creates from string creates from string - consumes with getb_to_end consumes with getb_to_end - writes writes - peek readonly peek readonly - writes big writes big - can be converted to slice can be converted to slice - raises if clearing when closed raises if clearing when closed - does gets with char and limit does gets with char and limit - raises if invoking gets with negative limit raises if invoking gets with negative limit - can be closed can be closed - creates from read-only slice creates from read-only slice - creates from slice, non-writeable creates from slice, non-writeable - writes past end with write_byte writes past end with write_byte - does gets with char and limit without off-by-one does gets with char and limit without off-by-one - can seek set can seek set - reads single line content reads single line content - writes after reading writes after reading - write raises EOFError write raises EOFError - encoding - decode - gets_to_end gets_to_end - gets with chomp = false gets with chomp = false - gets gets - reads char reads char - raises if reading when closed raises if reading when closed - raises if negative capacity raises if negative capacity - allocates for > 1 GB allocates for > 1 GB - raises when reading at offset outside of bounds raises when reading at offset outside of bounds - writes past end writes past end - reads each line with chomp = false reads each line with chomp = false - raises if seek set is negative raises if seek set is negative - raises if seek current leads to negative value raises if seek current leads to negative value - does gets with limit does gets with limit - has a size has a size - can seek past the end can seek past the end - can seek current can seek current - skips skips - gets with char as delimiter gets with char as delimiter - clears clears - #to_s - appends to itself appends to itself - encoding - writes to IO writes to IO - returns String returns String - appends to another buffer appends to another buffer - raises if capacity too big raises if capacity too big - write single byte write single byte -Symbol - displays the empty symbol with quotes displays the empty symbol with quotes - can be compared with another symbol can be compared with another symbol - displays symbols that don't need quotes without quotes displays symbols that don't need quotes without quotes - clone - assert assert - inspects inspects -JUnit Formatter - reports mixed results reports mixed results - encodes class names from the relative file path encodes class names from the relative file path - reports failures reports failures - report failure stacktrace if present report failure stacktrace if present - outputs timestamp according to RFC 3339 outputs timestamp according to RFC 3339 - reports skipped reports skipped - report error stacktrace if present report error stacktrace if present - reports successful results reports successful results - escapes spec names escapes spec names - reports errors reports errors LLVM::ABI::AArch64 - size - for packed struct for packed struct - for integer for integer - for struct for struct + align for pointer for pointer for double for double - for float for float for array for array + for integer for integer + for packed struct for packed struct + for struct for struct + for float for float abi_info - does with primitives does with primitives does with structs less than 64 bits does with structs less than 64 bits - does with structs larger than 128 bits does with structs larger than 128 bits does with structs between 64 and 128 bits does with structs between 64 and 128 bits does with homogeneous structs does with homogeneous structs - align - for integer for integer + does with structs larger than 128 bits does with structs larger than 128 bits + does with primitives does with primitives + size + for float for float for struct for struct + for integer for integer for array for array - for pointer for pointer for double for double + for pointer for pointer for packed struct for packed struct - for float for float -StaticArray - unstable_sort_by! - sorts by! sorts by! - calls given block exactly once for each element calls given block exactly once for each element - does map does map - creates with new and block creates with new and block - "#each" iterator "#each" iterator - does map_with_index does map_with_index - == - compares empty compares empty - compares elements compares elements - compares other compares other - rotate! - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert +Time::Format + raises when time zone missing raises when time zone missing + formats formats + parses day of month blank padded parses day of month blank padded + parses parses + parses day of year parses day of year + parses nanoseconds parses nanoseconds + parses nanoseconds with %9N parses nanoseconds with %9N + formats rfc3339 with different fraction digits formats rfc3339 with different fraction digits + parses centiseconds parses centiseconds + parses empty parses empty + formats standard formats formats standard formats + parses timezone parses timezone + assert assert + parses hour 24 blank padded parses hour 24 blank padded + parses if some decimals are missing parses if some decimals are missing + parses milliseconds with %L parses milliseconds with %L + parses microseconds with %6N parses microseconds with %6N + parses am/pm parses am/pm + parses discarding additional decimals parses discarding additional decimals + assert assert + parses the correct amount of digits (#853) parses the correct amount of digits (#853) + parses hour 12 blank padded parses hour 12 blank padded + can parse in location can parse in location + parse fails without time zone parse fails without time zone + parses milliseconds with %3N parses milliseconds with %3N + parses 24h clock with am/pm parses 24h clock with am/pm + assert assert + parses zone name parses zone name + assert assert + assert assert + parses 24h clock parses 24h clock + assert assert + parses month blank padded parses month blank padded + gives nice error message when end of input is reached (#12047) gives nice error message when end of input is reached (#12047) +LLVM + .default_target_triple .default_target_triple + .normalize_triple + substitutes unknown for empty components substitutes unknown for empty components + works works +Crystal::Hasher + inspect + should not expose internal data should not expose internal data + to_s + should not expose internal data should not expose internal data + funny_hash + #string should match test vectors #string should match test vectors + result should work result should work + #int should match test vectors #int should match test vectors + #bool should match test vectors #bool should match test vectors + #nil should match test vectors #nil should match test vectors + #float should match test vectors #float should match test vectors + .reduce_num + reduces BigInt reduces BigInt + reduces BigFloat reduces BigFloat + reduces BigRational reduces BigRational + reduces primitive float reduces primitive float + reduces primitive int reduces primitive int + reduces BigDecimal reduces BigDecimal + behavior + #class should change state and differ #class should change state and differ + Big i64 numbers should be hashed ok Big i64 numbers should be hashed ok + #string should change state and differ #string should change state and differ + #nil should change hasher state #nil should change hasher state + #char should change state and differ #char should change state and differ + #enum should change state and differ #enum should change state and differ + #symbol should change state and differ #symbol should change state and differ + #int should change state and differ #int should change state and differ + #bool should change state and differ #bool should change state and differ + #bytes should change state and differ #bytes should change state and differ + #float should change state and differ #float should change state and differ + #reference should change state and differ #reference should change state and differ + #int should be equal for different types #int should be equal for different types + 128bit types should be hashed ok 128bit types should be hashed ok + normalization of numbers + should 1_f32 and 1.to_big_f hashes equal should 1_f32 and 1.to_big_f hashes equal + should 1_i32 and 1_f64 hashes equal should 1_i32 and 1_f64 hashes equal + should 1_f32 and 1.to_big_r hashes equal should 1_f32 and 1.to_big_r hashes equal + should 1_f32 and 1.to_big_i hashes equal should 1_f32 and 1.to_big_i hashes equal +HTTP::ErrorHandler + log debug message when the output is closed log debug message when the output is closed + logs to custom logger logs to custom logger + rescues from exception rescues from exception + doesn't write errors when there is some output already sent doesn't write errors when there is some output already sent + can return a generic error message can return a generic error message +CSV + build + builds two rows builds two rows + builds with commas builds with commas + builds with inside quoted chars and symbols builds with inside quoted chars and symbols + builds with numbers builds with numbers + builds with custom quote character builds with custom quote character + builds row from splat builds row from splat + builds row from enumerable builds row from enumerable + builds with commas builds with commas + concats enumerable to row concats enumerable to row + builds with quotes builds with quotes + skips inside row skips inside row + builds with quoting builds with quoting + builds with custom separator builds with custom separator + concats splat to row concats splat to row +HTTP::StaticFileHandler + does not serve a not found file does not serve a not found file + still serve compressed content when modification time is very close still serve compressed content when modification time is very close + unescapes a request path unescapes a request path + adds Etag header adds Etag header + doesn't serve compressed content if older than raw file doesn't serve compressed content if older than raw file + with If-Modified-Since header + returns 304 Not Modified for younger than Last-Modified returns 304 Not Modified for younger than Last-Modified + serves content for older than Last-Modified serves content for older than Last-Modified + returns 304 Not Modified for equal to Last-Modified returns 304 Not Modified for equal to Last-Modified + lists directory's entries lists directory's entries + adds Last-Modified header adds Last-Modified header + serves a file serves a file + with multiple If-None-Match header + returns 304 Not Modified if at least one header matches etag returns 304 Not Modified if at least one header matches etag + serves file if no header matches etag serves file if no header matches etag + handles only GET and HEAD method handles only GET and HEAD method + handles invalid redirect path handles invalid redirect path + does not serve a not found directory does not serve a not found directory + expands a request path expands a request path + handles forbidden characters in windows paths handles forbidden characters in windows paths + with If-None-Match header + serves file if header is empty serves file if header is empty + serves file if header does not match etag serves file if header does not match etag + returns 304 Not Modified if header matches etag returns 304 Not Modified if header matches etag + serves file if header does not contain valid etag serves file if header does not contain valid etag + returns 304 Not Modified if header is * returns 304 Not Modified if header is * + returns 400 returns 400 + when a Range header is provided + int range + serves a byte range serves a byte range + start of the range is larger than the file size start of the range is larger than the file size + serves a single byte serves a single byte + serves zero bytes serves zero bytes + start >= file_size start >= file_size + serves multiple byte ranges (separator with whitespace) serves multiple byte ranges (separator with whitespace) + serves multiple byte ranges (separator without whitespace) serves multiple byte ranges (separator without whitespace) + serves an open-ended byte range serves an open-ended byte range + end of the range is larger than the file size end of the range is larger than the file size + suffix range + empty file empty file + negative size negative size + partial partial + zero zero + zero zero + more bytes than content more bytes than content + invalid Range syntax + open range with negative end open range with negative end + byte number without dash byte number without dash + multiple dashes multiple dashes + not a number not a number + unsupported unit unsupported unit + negative end negative end + start > end start > end + not a range not a range + open range with negative end open range with negative end + does not serve a file as directory does not serve a file as directory + serve compressed content serve compressed content + does not list directory's entries when directory_listing is set to false does not list directory's entries when directory_listing is set to false + with both If-None-Match and If-Modified-Since headers + serves a file if header does not match etag even If-Modified-Since is fresh serves a file if header does not match etag even If-Modified-Since is fresh + ignores If-Modified-Since as specified in RFC 7232 ignores If-Modified-Since as specified in RFC 7232 +Socket::Addrinfo + Error + .new (deprecated) .new (deprecated) + #ip_address assert assert - #sort - sort with a block sort with a block - sort without block sort without block - unstable_sort_by - sorts by sorts by - raises index out of bounds on read raises index out of bounds on read - shuffles with a seed shuffles with a seed - creates with new and value creates with new and value - creates with new creates with new - does map_with_index! does map_with_index! - reverse reverse - "#each" yielding "#each" yielding - does map_with_index!, with offset does map_with_index!, with offset - raises index out of bounds on write raises index out of bounds on write - shuffles shuffles - values_at - returns the given indexes returns the given indexes - raises when passed an invalid index raises when passed an invalid index - allows using negative indices allows using negative indices - "#each_index" yielding "#each_index" yielding - clones clones - does map! does map! - updates value updates value - #unstable_sort! - sort! without block sort! without block - sort! with a block sort! with a block - sort_by! - calls given block exactly once for each element calls given block exactly once for each element - sorts by! sorts by! - <=> - correctly compares two static arrays correctly compares two static arrays - #unstable_sort - sort with a block sort with a block - sort without block sort without block - "#reverse_each" iterator "#reverse_each" iterator - #fill - replaces values in a subrange replaces values in a subrange - "#each_index" iterator "#each_index" iterator - does to_s does to_s - "#reverse_each" yielding "#reverse_each" yielding - #sort! - sort! with a block sort! with a block - sort! without block sort! without block - sort_by - sorts by sorts by - does map_with_index, with offset does map_with_index, with offset -OptionParser - has required option separated from flag but given together has required option separated from flag but given together - stops when asked stops when asked - raises on invalid option if value is given to none value handler (long flag, #9553) raises on invalid option if value is given to none value handler (long flag, #9553) - has required option with = has required option with = - parses with subcommands twice parses with subcommands twice - handles subcommands handles subcommands - calls the handler for invalid options calls the handler for invalid options - has flag has flag - can run a callback on every argument can run a callback on every argument - multiple times - gets an existence flag multiple times gets an existence flag multiple times - gets a double flag option multiple times gets a double flag option multiple times - gets a single flag option multiple times gets a single flag option multiple times - does to_s with very long flag (#3305) does to_s with very long flag (#3305) - does to_s with separators does to_s with separators - raises if missing required option with space raises if missing required option with space - raises if missing option next to flag raises if missing option next to flag - doesn't raise if required option is not specified with separated short flag doesn't raise if required option is not specified with separated short flag - -- - returns a pair with things coming before and after -- returns a pair with things coming before and after -- - initializes without block and does parse! initializes without block and does parse! - ignores everything after -- with double flag ignores everything after -- with double flag - gets `-` as argument gets `-` as argument - ignores everything after -- with single flag) ignores everything after -- with single flag) - returns a pair with things coming before and after --, without -- returns a pair with things coming before and after --, without -- - ignores everything after -- with bool flag ignores everything after -- with bool flag - gets short option with value that looks like flag gets short option with value that looks like flag - handles subcommand --help well (top level) handles subcommand --help well (top level) - has required option separated from flag has required option separated from flag - has required option separated from long flag has required option separated from long flag - gnu_optional_args - doesn't get optional argument for long flag after space doesn't get optional argument for long flag after space - doesn't get optional argument for short flag after space doesn't get optional argument for short flag after space - unregisters subcommands on call unregisters subcommands on call - calls the handler for missing options calls the handler for missing options - does to_s with multi line description (#5832) does to_s with multi line description (#5832) - has required option with = (3) handles empty has required option with = (3) handles empty - gets short option with value -- (#8937) gets short option with value -- (#8937) - doesn't have flag with double dash doesn't have flag with double dash - has flag with many letters has flag with many letters - gets long option with value -- (#8937) gets long option with value -- (#8937) - doesn't have flag doesn't have flag - handles subcommand --help well (subcommand) handles subcommand --help well (subcommand) - does to_s with banner does to_s with banner - raises on invalid option if value is given to none value handler (short flag, #9553) raises on invalid option if value is given to none value handler (short flag, #9553) - parses argument when only referenced in long flag parses argument when only referenced in long flag - raises if flag pair doesn't start with dash (#4001) raises if flag pair doesn't start with dash (#4001) - has required option with = (2) has required option with = (2) - raises if missing required argument separated from long flag raises if missing required argument separated from long flag - has required option with long flag space has required option with long flag space - has required option with space has required option with space - doesn't raise if required option is not specified doesn't raise if required option is not specified - doesn't raise if optional option is not specified with short flag doesn't raise if optional option is not specified with short flag - handles subcommands with hyphen handles subcommands with hyphen - doesn't raise if optional option is not specified with long flag doesn't raise if optional option is not specified with long flag - has required option next to flag has required option next to flag - Consumption of flags following an ungiven optional argument - Given a long option with an optional value - doesn't eat further short options doesn't eat further short options - doesn't eat further long options doesn't eat further long options - Given a short option with an optional value - does eat a value that looks like an option does eat a value that looks like an option - doesn't eat a following long option doesn't eat a following long option - doesn't eat a following short option doesn't eat a following short option - has flag with double dash has flag with double dash - has required option next to flag but given separated has required option next to flag but given separated - raises on invalid option raises on invalid option - doesn't raise if optional option is not specified with separated short flag doesn't raise if optional option is not specified with separated short flag - forward-match - distinguishes between '--lamb VALUE' and '--lambda VALUE' distinguishes between '--lamb VALUE' and '--lambda VALUE' - distinguishes between '--lamb=VALUE' and '--lambda=VALUE' distinguishes between '--lamb=VALUE' and '--lambda=VALUE' - parses argument when referenced in long and short flag parses argument when referenced in long and short flag + .udp + yields each result yields each result + returns an array returns an array + .tcp + returns an array returns an array + yields each result yields each result + .resolve + raises helpful message on getaddrinfo failure raises helpful message on getaddrinfo failure + yields each result yields each result + eventually raises returned error eventually raises returned error + returns an array returns an array + #inspect #inspect +Time + #<=> + compares different locations compares different locations + compares compares + #to_s #to_s + #time_of_day #time_of_day + #to_local_in + is the difference of offsets apart is the difference of offsets apart + keeps wall clock keeps wall clock + .local + initializes max value initializes max value + fails with negative nanosecond fails with negative nanosecond + fails with too big nanoseconds fails with too big nanoseconds + checks boundary at time max checks boundary at time max + checks boundary at time min checks boundary at time min + accepts midnight 24:00 accepts midnight 24:00 + initializes initializes + #in + changes location changes location + #to_s + prints string prints string + prints local time prints local time + prints offset for fixed location prints offset for fixed location + prints date-time fields prints date-time fields + prints offset for location prints offset for location + omits nanoseconds omits nanoseconds + .unix_ms .unix_ms + .days_in_year .days_in_year + .unix .unix + .leap_year? + knows years *not* divisible by 4 are normal knows years *not* divisible by 4 are normal + knows that typical non-century leap years are divisible by 4 knows that typical non-century leap years are divisible by 4 + knows that 100-year centuries are normal years knows that 100-year centuries are normal years + knows that 400-year centuries are leap years knows that 400-year centuries are leap years + UNIX_EPOCH UNIX_EPOCH + at methods at methods + Time::DayOfWeek + .from_value .from_value + #value #value + .new does not identify 0 as Sunday .new does not identify 0 as Sunday + .monotonic + returns always increasing monotonic clock returns always increasing monotonic clock + #to_unix + gets unix seconds at GMT gets unix seconds at GMT + gets unix seconds gets unix seconds + #shift + adds months adds months + preserves location when adding preserves location when adding + raises out of range min raises out of range min + adds years adds years + adds hours adds hours + raises out of range max raises out of range max + adds zero span adds zero span + covers date boundaries with zone offset (#10869) covers date boundaries with zone offset (#10869) + adds nanoseconds adds nanoseconds + adds hours, minutes, seconds adds hours, minutes, seconds + adds days + out of range min out of range min + over dst over dst + simple simple + out of range min (shift days) out of range min (shift days) + out of range max (shift days) out of range max (shift days) + out of range max out of range max + checks boundary at time max checks boundary at time max + covers date boundaries with zone offset (#8741) covers date boundaries with zone offset (#8741) + irregular calendaric unit ratios + shifts by a week if one day is left out shifts by a week if one day is left out + shifts by conceptual hour even if elapsed time is less shifts by conceptual hour even if elapsed time is less + checks boundary at time min checks boundary at time min + .measure + measures elapsed time measures elapsed time + #day_of_year #day_of_year + #step + "advent" iterator "advent" iterator + "advent" yielding "advent" yielding + .local without arguments + current time is similar in different locations current time is similar in different locations + .unix_ns + supports minimum valid time supports minimum valid time + supports maximum valid time supports maximum valid time + supports Int64 values supports Int64 values + #calendar_week + 2012-12-30 to 2012-52 2012-12-30 to 2012-52 + 1984-1-1 to 1983-52 1984-1-1 to 1983-52 + 1996-1-7 to 1996-1 1996-1-7 to 1996-1 + 2035-1-1 to 2035-1 2035-1-1 to 2035-1 + 2011-1-6 to 2011-1 2011-1-6 to 2011-1 + 2011-1-7 to 2011-1 2011-1-7 to 2011-1 + 2028-1-1 to 2027-52 2028-1-1 to 2027-52 + 2027-1-1 to 2026-53 2027-1-1 to 2026-53 + 2014-1-5 to 2014-1 2014-1-5 to 2014-1 + 2008-1-1 to 2008-1 2008-1-1 to 2008-1 + 2011-12-26 to 2011-52 2011-12-26 to 2011-52 + 2032-1-1 to 2032-1 2032-1-1 to 2032-1 + 2023-1-1 to 2022-52 2023-1-1 to 2022-52 + 2001-1-1 to 2001-1 2001-1-1 to 2001-1 + 1988-1-1 to 1987-53 1988-1-1 to 1987-53 + 1985-1-1 to 1985-1 1985-1-1 to 1985-1 + 1995-1-1 to 1994-52 1995-1-1 to 1994-52 + 1994-1-1 to 1993-52 1994-1-1 to 1993-52 + 2009-1-1 to 2009-1 2009-1-1 to 2009-1 + 2011-1-1 to 2010-52 2011-1-1 to 2010-52 + 2010-1-1 to 2009-53 2010-1-1 to 2009-53 + 2011-6-13 to 2011-24 2011-6-13 to 2011-24 + 2000-1-1 to 1999-52 2000-1-1 to 1999-52 + 1981-1-1 to 1981-1 1981-1-1 to 1981-1 + 1997-1-1 to 1997-1 1997-1-1 to 1997-1 + 1982-1-1 to 1981-53 1982-1-1 to 1981-53 + 2011-1-4 to 2011-1 2011-1-4 to 2011-1 + 2013-1-1 to 2013-1 2013-1-1 to 2013-1 + 1998-1-1 to 1998-1 1998-1-1 to 1998-1 + 2013-12-30 to 2014-1 2013-12-30 to 2014-1 + 2011-1-9 to 2011-1 2011-1-9 to 2011-1 + 2005-1-1 to 2004-53 2005-1-1 to 2004-53 + 2011-6-12 to 2011-23 2011-6-12 to 2011-23 + 2026-1-1 to 2026-1 2026-1-1 to 2026-1 + 2011-1-11 to 2011-2 2011-1-11 to 2011-2 + 1999-1-1 to 1998-53 1999-1-1 to 1998-53 + 2031-1-1 to 2031-1 2031-1-1 to 2031-1 + 2002-1-1 to 2002-1 2002-1-1 to 2002-1 + 1995-1-2 to 1995-1 1995-1-2 to 1995-1 + 2004-1-1 to 2004-1 2004-1-1 to 2004-1 + 1993-1-1 to 1992-53 1993-1-1 to 1992-53 + 2034-1-1 to 2033-52 2034-1-1 to 2033-52 + 2012-1-2 to 2012-1 2012-1-2 to 2012-1 + 2013-12-22 to 2013-51 2013-12-22 to 2013-51 + 2038-1-1 to 2037-53 2038-1-1 to 2037-53 + 1985-4-12 to 1985-15 1985-4-12 to 1985-15 + 2011-1-5 to 2011-1 2011-1-5 to 2011-1 + 1989-1-1 to 1988-52 1989-1-1 to 1988-52 + 2011-1-2 to 2010-52 2011-1-2 to 2010-52 + 2030-1-1 to 2030-1 2030-1-1 to 2030-1 + 2006-1-1 to 2005-52 2006-1-1 to 2005-52 + 2039-1-1 to 2038-52 2039-1-1 to 2038-52 + 2025-1-1 to 2025-1 2025-1-1 to 2025-1 + 2017-1-1 to 2016-52 2017-1-1 to 2016-52 + 2013-1-6 to 2013-1 2013-1-6 to 2013-1 + 2033-1-1 to 2032-53 2033-1-1 to 2032-53 + 1996-1-1 to 1996-1 1996-1-1 to 1996-1 + 2019-1-1 to 2019-1 2019-1-1 to 2019-1 + 2029-1-1 to 2029-1 2029-1-1 to 2029-1 + 2007-1-1 to 2007-1 2007-1-1 to 2007-1 + 2013-12-23 to 2013-52 2013-12-23 to 2013-52 + 2016-1-1 to 2015-53 2016-1-1 to 2015-53 + 2011-1-10 to 2011-2 2011-1-10 to 2011-2 + 2012-1-1 to 2011-52 2012-1-1 to 2011-52 + 1992-1-1 to 1992-1 1992-1-1 to 1992-1 + 2022-1-1 to 2021-52 2022-1-1 to 2021-52 + 2040-1-1 to 2039-52 2040-1-1 to 2039-52 + 2020-1-1 to 2020-1 2020-1-1 to 2020-1 + 2014-1-1 to 2014-1 2014-1-1 to 2014-1 + 1996-1-8 to 1996-2 1996-1-8 to 1996-2 + 1983-1-1 to 1982-52 1983-1-1 to 1982-52 + 2013-1-7 to 2013-2 2013-1-7 to 2013-2 + 2010-1-1 to 2009-53 2010-1-1 to 2009-53 + 2011-1-8 to 2011-1 2011-1-8 to 2011-1 + 2015-1-1 to 2015-1 2015-1-1 to 2015-1 + 2011-12-25 to 2011-51 2011-12-25 to 2011-51 + 2012-12-24 to 2012-52 2012-12-24 to 2012-52 + 2024-1-1 to 2024-1 2024-1-1 to 2024-1 + 2011-12-31 to 2011-52 2011-12-31 to 2011-52 + 2012-1-9 to 2012-2 2012-1-9 to 2012-2 + 1987-1-1 to 1987-1 1987-1-1 to 1987-1 + 2012-12-23 to 2012-51 2012-12-23 to 2012-51 + 1990-1-1 to 1990-1 1990-1-1 to 1990-1 + 2012-1-8 to 2012-1 2012-1-8 to 2012-1 + 2003-1-1 to 2003-1 2003-1-1 to 2003-1 + 2011-1-3 to 2011-1 2011-1-3 to 2011-1 + 2011-12-28 to 2011-52 2011-12-28 to 2011-52 + 2037-1-1 to 2037-1 2037-1-1 to 2037-1 + 2021-1-1 to 2020-53 2021-1-1 to 2020-53 + 1986-1-1 to 1986-1 1986-1-1 to 1986-1 + 1991-1-1 to 1991-1 1991-1-1 to 1991-1 + 2018-1-1 to 2018-1 2018-1-1 to 2018-1 + 2011-12-29 to 2011-52 2011-12-29 to 2011-52 + 2011-12-30 to 2011-52 2011-12-30 to 2011-52 + 2014-1-6 to 2014-2 2014-1-6 to 2014-2 + 2036-1-1 to 2036-1 2036-1-1 to 2036-1 + 2012-12-31 to 2013-1 2012-12-31 to 2013-1 + 2013-12-29 to 2013-52 2013-12-29 to 2013-52 + 2011-12-27 to 2011-52 2011-12-27 to 2011-52 + does diff of utc vs local time does diff of utc vs local time + answers day name predicates answers day name predicates + .week_date + accepts time arguments accepts time arguments + verify test data + W2010-52-7 eq 2011-1-2 W2010-52-7 eq 2011-1-2 + W2026-53-5 eq 2027-1-1 W2026-53-5 eq 2027-1-1 + W2032-53-6 eq 2033-1-1 W2032-53-6 eq 2033-1-1 + W1982-52-6 eq 1983-1-1 W1982-52-6 eq 1983-1-1 + W2013-51-7 eq 2013-12-22 W2013-51-7 eq 2013-12-22 + W2009-53-5 eq 2010-1-1 W2009-53-5 eq 2010-1-1 + W2008-1-2 eq 2008-1-1 W2008-1-2 eq 2008-1-1 + W1998-1-4 eq 1998-1-1 W1998-1-4 eq 1998-1-1 + W2031-1-3 eq 2031-1-1 W2031-1-3 eq 2031-1-1 + W1985-15-5 eq 1985-4-12 W1985-15-5 eq 1985-4-12 + W2014-1-1 eq 2013-12-30 W2014-1-1 eq 2013-12-30 + W1999-52-6 eq 2000-1-1 W1999-52-6 eq 2000-1-1 + W2011-1-6 eq 2011-1-8 W2011-1-6 eq 2011-1-8 + W1996-2-1 eq 1996-1-8 W1996-2-1 eq 1996-1-8 + W2011-52-7 eq 2012-1-1 W2011-52-7 eq 2012-1-1 + W2011-23-7 eq 2011-6-12 W2011-23-7 eq 2011-6-12 + W2011-52-1 eq 2011-12-26 W2011-52-1 eq 2011-12-26 + W1998-53-5 eq 1999-1-1 W1998-53-5 eq 1999-1-1 + W2001-1-1 eq 2001-1-1 W2001-1-1 eq 2001-1-1 + W2021-52-6 eq 2022-1-1 W2021-52-6 eq 2022-1-1 + W2011-1-1 eq 2011-1-3 W2011-1-1 eq 2011-1-3 + W2013-2-1 eq 2013-1-7 W2013-2-1 eq 2013-1-7 + W1996-1-1 eq 1996-1-1 W1996-1-1 eq 1996-1-1 + W2012-2-1 eq 2012-1-9 W2012-2-1 eq 2012-1-9 + W2019-1-2 eq 2019-1-1 W2019-1-2 eq 2019-1-1 + W2011-52-3 eq 2011-12-28 W2011-52-3 eq 2011-12-28 + W1994-52-7 eq 1995-1-1 W1994-52-7 eq 1995-1-1 + W2009-1-4 eq 2009-1-1 W2009-1-4 eq 2009-1-1 + W2012-1-7 eq 2012-1-8 W2012-1-7 eq 2012-1-8 + W1995-1-1 eq 1995-1-2 W1995-1-1 eq 1995-1-2 + W2020-1-3 eq 2020-1-1 W2020-1-3 eq 2020-1-1 + W1987-1-4 eq 1987-1-1 W1987-1-4 eq 1987-1-1 + W1985-1-2 eq 1985-1-1 W1985-1-2 eq 1985-1-1 + W2004-1-4 eq 2004-1-1 W2004-1-4 eq 2004-1-1 + W2013-1-2 eq 2013-1-1 W2013-1-2 eq 2013-1-1 + W2011-2-2 eq 2011-1-11 W2011-2-2 eq 2011-1-11 + W2015-1-4 eq 2015-1-1 W2015-1-4 eq 2015-1-1 + W2038-52-6 eq 2039-1-1 W2038-52-6 eq 2039-1-1 + W2033-52-7 eq 2034-1-1 W2033-52-7 eq 2034-1-1 + W2009-53-5 eq 2010-1-1 W2009-53-5 eq 2010-1-1 + W2037-53-5 eq 2038-1-1 W2037-53-5 eq 2038-1-1 + W2013-52-1 eq 2013-12-23 W2013-52-1 eq 2013-12-23 + W1981-53-5 eq 1982-1-1 W1981-53-5 eq 1982-1-1 + W2013-1-7 eq 2013-1-6 W2013-1-7 eq 2013-1-6 + W2011-1-7 eq 2011-1-9 W2011-1-7 eq 2011-1-9 + W1992-1-3 eq 1992-1-1 W1992-1-3 eq 1992-1-1 + W2029-1-1 eq 2029-1-1 W2029-1-1 eq 2029-1-1 + W2005-52-7 eq 2006-1-1 W2005-52-7 eq 2006-1-1 + W2039-52-7 eq 2040-1-1 W2039-52-7 eq 2040-1-1 + W2011-2-1 eq 2011-1-10 W2011-2-1 eq 2011-1-10 + W2011-51-7 eq 2011-12-25 W2011-51-7 eq 2011-12-25 + W2011-52-6 eq 2011-12-31 W2011-52-6 eq 2011-12-31 + W1987-53-5 eq 1988-1-1 W1987-53-5 eq 1988-1-1 + W2014-1-7 eq 2014-1-5 W2014-1-7 eq 2014-1-5 + W1992-53-5 eq 1993-1-1 W1992-53-5 eq 1993-1-1 + W2007-1-1 eq 2007-1-1 W2007-1-1 eq 2007-1-1 + W2002-1-2 eq 2002-1-1 W2002-1-2 eq 2002-1-1 + W2014-1-3 eq 2014-1-1 W2014-1-3 eq 2014-1-1 + W1993-52-6 eq 1994-1-1 W1993-52-6 eq 1994-1-1 + W2027-52-6 eq 2028-1-1 W2027-52-6 eq 2028-1-1 + W2026-1-4 eq 2026-1-1 W2026-1-4 eq 2026-1-1 + W2020-53-5 eq 2021-1-1 W2020-53-5 eq 2021-1-1 + W1997-1-3 eq 1997-1-1 W1997-1-3 eq 1997-1-1 + W2012-52-1 eq 2012-12-24 W2012-52-1 eq 2012-12-24 + W2011-1-2 eq 2011-1-4 W2011-1-2 eq 2011-1-4 + W2013-52-7 eq 2013-12-29 W2013-52-7 eq 2013-12-29 + W1996-1-7 eq 1996-1-7 W1996-1-7 eq 1996-1-7 + W1981-1-4 eq 1981-1-1 W1981-1-4 eq 1981-1-1 + W1986-1-3 eq 1986-1-1 W1986-1-3 eq 1986-1-1 + W2024-1-1 eq 2024-1-1 W2024-1-1 eq 2024-1-1 + W2011-1-3 eq 2011-1-5 W2011-1-3 eq 2011-1-5 + W2003-1-3 eq 2003-1-1 W2003-1-3 eq 2003-1-1 + W2012-1-1 eq 2012-1-2 W2012-1-1 eq 2012-1-2 + W2022-52-7 eq 2023-1-1 W2022-52-7 eq 2023-1-1 + W2011-52-2 eq 2011-12-27 W2011-52-2 eq 2011-12-27 + W2011-52-4 eq 2011-12-29 W2011-52-4 eq 2011-12-29 + W2011-1-5 eq 2011-1-7 W2011-1-5 eq 2011-1-7 + W2012-52-7 eq 2012-12-30 W2012-52-7 eq 2012-12-30 + W2004-53-6 eq 2005-1-1 W2004-53-6 eq 2005-1-1 + W2036-1-2 eq 2036-1-1 W2036-1-2 eq 2036-1-1 + W2011-52-5 eq 2011-12-30 W2011-52-5 eq 2011-12-30 + W2015-53-5 eq 2016-1-1 W2015-53-5 eq 2016-1-1 + W2032-1-4 eq 2032-1-1 W2032-1-4 eq 2032-1-1 + W1991-1-2 eq 1991-1-1 W1991-1-2 eq 1991-1-1 + W2037-1-4 eq 2037-1-1 W2037-1-4 eq 2037-1-1 + W2030-1-2 eq 2030-1-1 W2030-1-2 eq 2030-1-1 + W2035-1-1 eq 2035-1-1 W2035-1-1 eq 2035-1-1 + W1983-52-7 eq 1984-1-1 W1983-52-7 eq 1984-1-1 + W1988-52-7 eq 1989-1-1 W1988-52-7 eq 1989-1-1 + W1990-1-1 eq 1990-1-1 W1990-1-1 eq 1990-1-1 + W2011-1-4 eq 2011-1-6 W2011-1-4 eq 2011-1-6 + W2016-52-7 eq 2017-1-1 W2016-52-7 eq 2017-1-1 + W2013-1-1 eq 2012-12-31 W2013-1-1 eq 2012-12-31 + W2014-2-1 eq 2014-1-6 W2014-2-1 eq 2014-1-6 + W2025-1-3 eq 2025-1-1 W2025-1-3 eq 2025-1-1 + W2011-24-1 eq 2011-6-13 W2011-24-1 eq 2011-6-13 + W2018-1-1 eq 2018-1-1 W2018-1-1 eq 2018-1-1 + W2012-51-7 eq 2012-12-23 W2012-51-7 eq 2012-12-23 + W2010-52-6 eq 2011-1-1 W2010-52-6 eq 2011-1-1 + #year #year + #day_of_week + 2011-12-27 is 2 2011-12-27 is 2 + 1998-1-1 is 4 1998-1-1 is 4 + 2011-12-25 is 7 2011-12-25 is 7 + 1982-1-1 is 5 1982-1-1 is 5 + 2012-12-23 is 7 2012-12-23 is 7 + 1984-1-1 is 7 1984-1-1 is 7 + 2013-1-1 is 2 2013-1-1 is 2 + 2026-1-1 is 4 2026-1-1 is 4 + 1999-1-1 is 5 1999-1-1 is 5 + 2008-1-1 is 2 2008-1-1 is 2 + 2030-1-1 is 2 2030-1-1 is 2 + 2007-1-1 is 1 2007-1-1 is 1 + 1996-1-1 is 1 1996-1-1 is 1 + 2013-12-22 is 7 2013-12-22 is 7 + 2040-1-1 is 7 2040-1-1 is 7 + 2001-1-1 is 1 2001-1-1 is 1 + 1992-1-1 is 3 1992-1-1 is 3 + 2019-1-1 is 2 2019-1-1 is 2 + 2037-1-1 is 4 2037-1-1 is 4 + 1988-1-1 is 5 1988-1-1 is 5 + 1985-1-1 is 2 1985-1-1 is 2 + 2011-1-7 is 5 2011-1-7 is 5 + 2011-1-4 is 2 2011-1-4 is 2 + 2039-1-1 is 6 2039-1-1 is 6 + 2013-12-23 is 1 2013-12-23 is 1 + 2036-1-1 is 2 2036-1-1 is 2 + 2029-1-1 is 1 2029-1-1 is 1 + 2015-1-1 is 4 2015-1-1 is 4 + 2012-12-30 is 7 2012-12-30 is 7 + 1986-1-1 is 3 1986-1-1 is 3 + 1990-1-1 is 1 1990-1-1 is 1 + 1981-1-1 is 4 1981-1-1 is 4 + 2017-1-1 is 7 2017-1-1 is 7 + 2012-12-24 is 1 2012-12-24 is 1 + 2012-1-8 is 7 2012-1-8 is 7 + 2011-1-8 is 6 2011-1-8 is 6 + 1996-1-7 is 7 1996-1-7 is 7 + 2011-12-31 is 6 2011-12-31 is 6 + 2013-12-30 is 1 2013-12-30 is 1 + 2011-12-29 is 4 2011-12-29 is 4 + 2025-1-1 is 3 2025-1-1 is 3 + 2002-1-1 is 2 2002-1-1 is 2 + 2024-1-1 is 1 2024-1-1 is 1 + 2009-1-1 is 4 2009-1-1 is 4 + 2004-1-1 is 4 2004-1-1 is 4 + 2013-1-7 is 1 2013-1-7 is 1 + 2010-1-1 is 5 2010-1-1 is 5 + 1987-1-1 is 4 1987-1-1 is 4 + 2018-1-1 is 1 2018-1-1 is 1 + 2012-1-2 is 1 2012-1-2 is 1 + 1997-1-1 is 3 1997-1-1 is 3 + 1996-1-8 is 1 1996-1-8 is 1 + 2014-1-6 is 1 2014-1-6 is 1 + 2027-1-1 is 5 2027-1-1 is 5 + 2011-1-5 is 3 2011-1-5 is 3 + 2012-1-1 is 7 2012-1-1 is 7 + 1991-1-1 is 2 1991-1-1 is 2 + 2021-1-1 is 5 2021-1-1 is 5 + 2011-1-1 is 6 2011-1-1 is 6 + 1983-1-1 is 6 1983-1-1 is 6 + 2005-1-1 is 6 2005-1-1 is 6 + 2011-1-11 is 2 2011-1-11 is 2 + 1994-1-1 is 6 1994-1-1 is 6 + 2020-1-1 is 3 2020-1-1 is 3 + 2012-12-31 is 1 2012-12-31 is 1 + 2014-1-5 is 7 2014-1-5 is 7 + 2013-12-29 is 7 2013-12-29 is 7 + 2000-1-1 is 6 2000-1-1 is 6 + 2003-1-1 is 3 2003-1-1 is 3 + 2013-1-6 is 7 2013-1-6 is 7 + 2035-1-1 is 1 2035-1-1 is 1 + 2038-1-1 is 5 2038-1-1 is 5 + 2016-1-1 is 5 2016-1-1 is 5 + 1995-1-2 is 1 1995-1-2 is 1 + 2011-1-3 is 1 2011-1-3 is 1 + 2011-1-2 is 7 2011-1-2 is 7 + 2032-1-1 is 4 2032-1-1 is 4 + 2012-1-9 is 1 2012-1-9 is 1 + 2011-12-28 is 3 2011-12-28 is 3 + 2011-6-12 is 7 2011-6-12 is 7 + 2022-1-1 is 6 2022-1-1 is 6 + 2028-1-1 is 6 2028-1-1 is 6 + 2014-1-1 is 3 2014-1-1 is 3 + 1989-1-1 is 7 1989-1-1 is 7 + 2011-12-26 is 1 2011-12-26 is 1 + 2033-1-1 is 6 2033-1-1 is 6 + 2023-1-1 is 7 2023-1-1 is 7 + 2031-1-1 is 3 2031-1-1 is 3 + 2010-1-1 is 5 2010-1-1 is 5 + 1995-1-1 is 7 1995-1-1 is 7 + 2034-1-1 is 7 2034-1-1 is 7 + 1985-4-12 is 5 1985-4-12 is 5 + 2006-1-1 is 7 2006-1-1 is 7 + 1993-1-1 is 5 1993-1-1 is 5 + 2011-6-13 is 1 2011-6-13 is 1 + 2011-1-9 is 7 2011-1-9 is 7 + gets day of week gets day of week + 2011-1-10 is 1 2011-1-10 is 1 + 2011-12-30 is 5 2011-12-30 is 5 + 2011-1-6 is 4 2011-1-6 is 4 + #inspect #inspect + #clone #clone + .days_in_month + raises exception for invalid month raises exception for invalid month + returns days for valid month and year returns days for valid month and year + raises exception for invalid year raises exception for invalid year +URI + serializes + from_json_object_key? from_json_object_key? + #to_json #to_json +Iterator(T) + #cons + reuse + reuse as deque reuse as deque + reuse as Array reuse as Array + reuse as nil reuse as nil + reuse as Bool reuse as Bool + conses conses + flatten + flattens an iterator of mixed-type iterators flattens an iterator of mixed-type iterators + flattens an iterator of mixed-type elements and iterators flattens an iterator of mixed-type elements and iterators + flattens nested struct iterators with internal state being value types flattens nested struct iterators with internal state being value types + flattens an iterator of mixed-type elements and iterators and iterators of iterators flattens an iterator of mixed-type elements and iterators and iterators of iterators + flattens deeply-nested and mixed type iterators flattens deeply-nested and mixed type iterators + return iterator itself by rewind return iterator itself by rewind + flattens a deeply-nested iterables and arrays (#3703) flattens a deeply-nested iterables and arrays (#3703) + flattens a variety of edge cases flattens a variety of edge cases + integration + combines many iterators combines many iterators + #chunk_while + chunks while chunks while + #with_index + "with default offset" iterator "with default offset" iterator + "with explicit offset" yielding "with explicit offset" yielding + "with explicit offset" iterator "with explicit offset" iterator + "with non-Int32 offset" iterator "with non-Int32 offset" iterator + "with default offset" yielding "with default offset" yielding + "with non-Int32 offset" yielding "with non-Int32 offset" yielding + Iterator.of + creates singleton from block creates singleton from block + creates singleton from block can call Iterator.stop creates singleton from block can call Iterator.stop + creates singleton creates singleton + compact_map + sums after compact_map to_a sums after compact_map to_a + applies the function and removes nil values applies the function and removes nil values + #slice_when + slices when: single value slices when: single value + slices when with reuse = array slices when with reuse = array + slices when slices when + slices when: non-bool block slices when: non-bool block + slices when with reuse = true slices when with reuse = true + slices when: two values slices when: two values + slices when: #to_a slices when: #to_a + slices when: #rewind slices when: #rewind + skip + does skip with Range iterator does skip with Range iterator + is cool to skip 0 elements is cool to skip 0 elements + raises ArgumentError if negative size is provided raises ArgumentError if negative size is provided + #slice_after + slices after pattern with reuse = true slices after pattern with reuse = true + slices after slices after + slices after with reuse = true slices after with reuse = true + slices after: #rewind slices after: #rewind + slices after: #to_a slices after: #to_a + slices after pattern slices after pattern + slices after with reuse = array slices after with reuse = array + slices after: non-bool block slices after: non-bool block + take_while + does take_while with more than available does take_while with more than available + only calls the block as much as needed only calls the block as much as needed + does take_while with Range iterator does take_while with Range iterator + #slice_before + slices before: first element matches slices before: first element matches + slices before: non-bool block slices before: non-bool block + slices before: #to_a slices before: #to_a + slices before pattern with reuse = true slices before pattern with reuse = true + slices before nil slices before nil + slices before with reuse = array slices before with reuse = array + slices before with reuse = true slices before with reuse = true + slices before slices before + slices before pattern slices before pattern + slices before: #rewind slices before: #rewind + step + returns every other element returns every other element + returns every element returns every element + returns every third element returns every third element + raises with nonsensical steps raises with nonsensical steps + uniq + with block with block + without block without block + map + does map with Range iterator does map with Range iterator + with object + does with object, with block does with object, with block + does with object does with object + compact_map + does not return nil values does not return nil values + tap + taps taps + #accumulate + prefix sums, with init + returns prefix sums returns prefix sums + preserves initial type preserves initial type + empty iterator returns only initial value empty iterator returns only initial value + generic cumulative fold + empty iterator stops immediately empty iterator stops immediately + accumulates values accumulates values + generic cumulative fold, with init + accumulates values accumulates values + preserves initial type preserves initial type + empty iterator returns only initial value empty iterator returns only initial value + prefix sums + returns prefix sums returns prefix sums + empty iterator stops immediately empty iterator stops immediately + each_slice + gets all the slices of the size n gets all the slices of the size n + returns each_slice iterator with reuse = true returns each_slice iterator with reuse = true + returns each_slice iterator with reuse = array returns each_slice iterator with reuse = array + also works if it does not add up also works if it does not add up + cycle + does not cycle provided 0 does not cycle provided 0 + does not cycle provided a negative size does not cycle provided a negative size + does cycle from range does cycle from range + cycles N times cycles N times + cycles an empty array cycles an empty array + slice + slices slices + doesnt conflict with `::Slice` type doesnt conflict with `::Slice` type + skip_while + does skip_while with an array does skip_while with an array + can skip everything can skip everything + only calls the block as much as needed only calls the block as much as needed + returns the full array if the condition is false for the first item returns the full array if the condition is false for the first item + chain + chains chains + does not experience tuple upcase bug of #13411 does not experience tuple upcase bug of #13411 + chain indeterminate number of iterators + chains all together chains all together + chains iterators of different type chains iterators of different type + chains array of empty chains array of empty + rewinds rewinds + chains empty chains empty + #flat_map + flattens returned values of mixed element types in #to_a flattens returned values of mixed element types in #to_a + flattens returned arrays flattens returned arrays + flattens returned iterators flattens returned iterators + flattens returned values flattens returned values + flattens returned items flattens returned items + first + does first with more than available does first with more than available + is cool to first 0 elements is cool to first 0 elements + does first with Range iterator does first with Range iterator + raises ArgumentError if negative size is provided raises ArgumentError if negative size is provided + zip + does skip with Range iterator does skip with Range iterator + takes multiple Iterators takes multiple Iterators + reject + does with type does with type + does reject with Range iterator does reject with Range iterator + does with pattern does with pattern + in_groups_of + creates a group of two with reuse = true creates a group of two with reuse = true + raises argument error if size is less than 0 raises argument error if size is less than 0 + fills up with the fill up argument fills up with the fill up argument + creates groups of one creates groups of one + still works with other iterator methods like to_a still works with other iterator methods like to_a + creates a group of two creates a group of two + each + yields the individual elements to the block yields the individual elements to the block + select + does select with Range iterator does select with Range iterator + does with pattern does with pattern + does with type does with type + #cons_pair + conses conses + doesn't include stop in return type doesn't include stop in return type +Log::BroadcastBackend + overwriting log level overwrites to all backends overwriting log level overwrites to all backends + writes to the backend based on level writes to the backend based on level + #min_level + single backend single backend + multiple backends multiple backends + on empty on empty +YAML serialization + to_yaml + does for Float64 does for Float64 + does for time at date does for time at date + does for Path does for Path + does for Float32 does for Float32 + does for Nil (empty string) does for Nil (empty string) + does for Array does for Array + does for Float64 (nan) does for Float64 (nan) + does for bytes does for bytes + does for Nil does for Nil + does for Tuple does for Tuple + does for Float32 (infinity) does for Float32 (infinity) + does a full document does a full document + does for Float32 (-infinity) does for Float32 (-infinity) + does for BigInt does for BigInt + does for String with stars (#3353) does for String with stars (#3353) + does for String with unicode characters (#8131) does for String with unicode characters (#8131) + does for Float64 (-infinity) does for Float64 (-infinity) + serializes recursive data structures serializes recursive data structures + does for String with slash does for String with slash + does for Int32 does for Int32 + does for Float32 (nan) does for Float32 (nan) + does for Hash does for Hash + does for BigFloat does for BigFloat + does for Set does for Set + quotes string if reserved quotes string if reserved + Enum + flag enum flag enum + normal enum normal enum + does for utc time with nanoseconds does for utc time with nanoseconds + does for Hash with symbol keys does for Hash with symbol keys + Enum::ValueConverter + flag enum flag enum + normal enum normal enum + does for BigDecimal does for BigDecimal + does for Float64 (infinity) does for Float64 (infinity) + writes to a stream writes to a stream + does for Bool does for Bool + does for NamedTuple does for NamedTuple + does for String with quote does for String with quote + does for String does for String + does for utc time does for utc time + from_yaml + does for BigInt does for BigInt + does Hash#from_yaml with merge does Hash#from_yaml with merge + does for empty tuple does for empty tuple + Enum + normal enum normal enum + flag enum flag enum + does Hash#from_yaml does Hash#from_yaml + does Array#from_yaml does Array#from_yaml + raises if Int16.from_yaml overflows raises if Int16.from_yaml overflows + does Time::Format#from_yaml does Time::Format#from_yaml + does for tuple with file-private type does for tuple with file-private type + Enum::ValueConverter.from_yaml + flag enum flag enum + normal enum normal enum + does UInt32.from_yaml does UInt32.from_yaml + does Set#from_yaml does Set#from_yaml + raises if UInt32.from_yaml overflows raises if UInt32.from_yaml overflows + does Int.from_yaml with underscores does Int.from_yaml with underscores + does for named tuple with nilable fields and null (#8089) does for named tuple with nilable fields and null (#8089) + does Float64#from_yaml does Float64#from_yaml + does Int8.from_yaml does Int8.from_yaml + raises if Int32.from_yaml overflows raises if Int32.from_yaml overflows + does Int.from_yaml with prefixes does Int.from_yaml with prefixes + raises if Int64.from_yaml overflows raises if Int64.from_yaml overflows + does Int64.from_yaml does Int64.from_yaml + does for named tuple with spaces in key (#10918) does for named tuple with spaces in key (#10918) + does Int128.from_yaml does Int128.from_yaml + does for BigDecimal does for BigDecimal + does for named tuple with file-private type does for named tuple with file-private type + does Int16.from_yaml does Int16.from_yaml + does for named tuple with spaces in key and quote char (#10918) does for named tuple with spaces in key and quote char (#10918) + deserializes bytes deserializes bytes + deserializes union with nil, string and int (#7936) deserializes union with nil, string and int (#7936) + raises if Int128.from_yaml overflows raises if Int128.from_yaml overflows + can parse string that looks like a number can parse string that looks like a number + does Array#from_yaml from IO does Array#from_yaml from IO + does UInt16.from_yaml does UInt16.from_yaml + does UInt64.from_yaml does UInt64.from_yaml + does Path.from_yaml does Path.from_yaml + raises if UInt16.from_yaml overflows raises if UInt16.from_yaml overflows + raises if UInt128.from_yaml overflows raises if UInt128.from_yaml overflows + raises if UInt64.from_yaml overflows raises if UInt64.from_yaml overflows + raises if Int8.from_yaml overflows raises if Int8.from_yaml overflows + does Bool#from_yaml does Bool#from_yaml + does UInt8.from_yaml does UInt8.from_yaml + parse exceptions + has correct location when raises in Union#from_yaml has correct location when raises in Union#from_yaml + has correct location when raises in Nil#from_yaml has correct location when raises in Nil#from_yaml + has correct location when raises in Int32#from_yaml has correct location when raises in Int32#from_yaml + has correct location when raises in NamedTuple#from_yaml has correct location when raises in NamedTuple#from_yaml + does Float32#from_yaml does Float32#from_yaml + does UInt128.from_yaml does UInt128.from_yaml + does for BigFloat does for BigFloat + does for named tuple does for named tuple + does Array#from_yaml with block does Array#from_yaml with block + does for tuple does for tuple + does Nil#from_yaml does Nil#from_yaml + does Hash#from_yaml with merge (recursive) does Hash#from_yaml with merge (recursive) + does String#from_yaml does String#from_yaml + raises if UInt8.from_yaml overflows raises if UInt8.from_yaml overflows + does for named tuple with nilable fields (#8089) does for named tuple with nilable fields (#8089) + does for empty named tuple does for empty named tuple + does Int32.from_yaml does Int32.from_yaml + does String#from_yaml (empty string) does String#from_yaml (empty string) + deserializes time deserializes time TCPServer + accept + sets close on exec flag sets close on exec flag + settings settings .new - using IPv4 - raises when port is negative raises when port is negative - binds to port 0 binds to port 0 + using IPv6 listens on local address listens on local address + binds to port 0 binds to port 0 reuse_port - raises when port is in use raises when port is in use raises when not binding with reuse_port raises when not binding with reuse_port raises when port is not ready to be reused raises when port is not ready to be reused + raises when port is in use raises when port is in use binds to used port with reuse_port = true binds to used port with reuse_port = true + raises when port is negative raises when port is negative address resolution raises (rather than segfault on darwin) when host doesn't exist and port is 0 raises (rather than segfault on darwin) when host doesn't exist and port is 0 raises when host doesn't exist raises when host doesn't exist binds to localhost binds to localhost binds to all interfaces binds to all interfaces - using IPv6 - raises when port is negative raises when port is negative + using IPv4 reuse_port binds to used port with reuse_port = true binds to used port with reuse_port = true raises when not binding with reuse_port raises when not binding with reuse_port - raises when port is not ready to be reused raises when port is not ready to be reused raises when port is in use raises when port is in use - binds to port 0 binds to port 0 + raises when port is not ready to be reused raises when port is not ready to be reused listens on local address listens on local address - accept - sets close on exec flag sets close on exec flag - settings settings -hardware exception - detects stack overflow on a fiber stack detects stack overflow on a fiber stack - reports invalid memory access reports invalid memory access - detects stack overflow on the main stack detects stack overflow on the main stack -Regex - .literal .literal - #options #options - .error? .error? - #name_table - duplicate name duplicate name - more than 255 groups more than 255 groups - alpanumeric alpanumeric - is a map of capture group number to name is a map of capture group number to name - #matches_at_byte_index? - negative negative - multibyte index multibyte index - positive index positive index - with options - deprecated Regex::Options deprecated Regex::Options - Regex::MatchOptions Regex::MatchOptions - #dup #dup - #inspect - with non-literal-compatible options - escapes escapes - prints flags prints flags - with literal-compatible options - escapes escapes - prints flags prints flags - .supports_compile_options? .supports_compile_options? - #=== - assigns captures assigns captures - basic basic - .union - returns a regular expression that will match passed arguments returns a regular expression that will match passed arguments - constructs a Regex that matches things any of its arguments match constructs a Regex that matches things any of its arguments match - combines Regex objects in the same way as Regex#+ combines Regex objects in the same way as Regex#+ - accepts a single Tuple(String | Regex) argument accepts a single Tuple(String | Regex) argument - quotes any string arguments quotes any string arguments - returns a Regex with an Array(String) with special characters returns a Regex with an Array(String) with special characters - accepts a single Array(String | Regex) argument accepts a single Array(String | Regex) argument - #matches? + binds to port 0 binds to port 0 + raises when port is negative raises when port is negative +Subtle + compares constant time bytes bug compares constant time bytes bug + compares constant time and slices strings compares constant time and slices strings + compares constant time bytes on equality compares constant time bytes on equality + compares constant times compares constant times +String + #grapheme_size #grapheme_size + #graphemes #graphemes + #each_grapheme + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator +LLVM::ABI::X86 + size + for packed struct for packed struct + for array for array + for double for double + for pointer for pointer + for integer for integer + for struct for struct + for float for float + align + for float for float + for double for double + for packed struct for packed struct + for integer for integer + for pointer for pointer + for array for array + for struct for struct + abi_info + does with structs less than 64 bits does with structs less than 64 bits + does with primitives does with primitives + does with structs between 64 and 128 bits does with structs between 64 and 128 bits + does with structs between 64 and 128 bits does with structs between 64 and 128 bits +JSON::Lexer + lexes "\uD800\uDC00" from String lexes "\uD800\uDC00" from String + lexes "hello\rworld" from IO lexes "hello\rworld" from IO + lexes "\uDBFF\uDFFF" from String lexes "\uDBFF\uDFFF" from String + lexes "hello\nworld" from IO lexes "hello\nworld" from IO + lexes from IO lexes from IO + lexes 1e+12 from String lexes 1e+12 from String + lexes 1e2 from String lexes 1e2 from String + lexes { from string lexes { from string + lexes "\u201chello world\u201d" from IO lexes "\u201chello world\u201d" from IO + lexes 1234 from IO lexes 1234 from IO + lexes 6000000000000000000.0 from String lexes 6000000000000000000.0 from String + lexes [ from string lexes [ from string + lexes 1.2e-3 from IO lexes 1.2e-3 from IO + lexes "hello" from IO lexes "hello" from IO + lexes null from string lexes null from string + lexes : from string lexes : from string + lexes } from string lexes } from string + lexes 9876543212345678987654321e20 from String lexes 9876543212345678987654321e20 from String + lexes 1e+12 from IO lexes 1e+12 from IO + lexes "hello\/world" from IO lexes "hello\/world" from IO + lexes } from IO lexes } from IO + lexes "\uDBFF\uDFFF" from IO lexes "\uDBFF\uDFFF" from IO + lexes "hello\\world" from IO lexes "hello\\world" from IO + lexes "\uD800\uDC00" from IO lexes "\uD800\uDC00" from IO + errors if lexing "\uD800\u0020" from IO errors if lexing "\uD800\u0020" from IO + lexes + : from string lexes + : from string + lexes 1E2 from String lexes 1E2 from String + lexes -1.23 from String lexes -1.23 from String + lexes "hello\"world" from String lexes "hello\"world" from String + lexes 9.91343313498688 from IO lexes 9.91343313498688 from IO + lexes -1 from IO lexes -1 from IO + lexes 0E1 from String lexes 0E1 from String + lexes , from IO lexes , from IO + lexes false from IO lexes false from IO + lexes "hello\rworld" from String lexes "hello\rworld" from String + lexes 1 from IO lexes 1 from IO + errors if lexing "\uD800\u0020" from String errors if lexing "\uD800\u0020" from String + lexes ] from string lexes ] from string + lexes "hello\bworld" from IO lexes "hello\bworld" from IO + lexes 9000000000000000000.0 from IO lexes 9000000000000000000.0 from IO + lexes ] from IO lexes ] from IO + lexes 1000000000000000000.0 from IO lexes 1000000000000000000.0 from IO + lexes 1 from String lexes 1 from String + lexes { from IO lexes { from IO + lexes 6000000000000000000.0 from IO lexes 6000000000000000000.0 from IO + lexes 0 from String lexes 0 from String + lexes "\uD834\uDD1E" from IO lexes "\uD834\uDD1E" from IO + errors if lexing "\uDC00" from String errors if lexing "\uDC00" from String + lexes 9.91343313498688 from String lexes 9.91343313498688 from String + lexes : from IO lexes : from IO + lexes 0e+12 from IO lexes 0e+12 from IO + lexes 0e-12 from IO lexes 0e-12 from IO + lexes 0E1 from IO lexes 0E1 from IO + lexes , from string lexes , from string + lexes -1.23e4 from String lexes -1.23e4 from String + lexes "hello\\world" from String lexes "hello\\world" from String + lexes "hello\tworld" from String lexes "hello\tworld" from String + lexes "hello\/world" from String lexes "hello\/world" from String + lexes -1.23 from IO lexes -1.23 from IO + errors if lexing "\uD800" from String errors if lexing "\uD800" from String + lexes "\uD834\uDD1E" from String lexes "\uD834\uDD1E" from String + errors if lexing "\uD800" from IO errors if lexing "\uD800" from IO + lexes -1 from String lexes -1 from String + lexes false from string lexes false from string + lexes null from IO lexes null from IO + lexes 0.1e1 from IO lexes 0.1e1 from IO + errors if lexing "\uDC00" from IO errors if lexing "\uDC00" from IO + lexes true from IO lexes true from IO + lexes 0e1 from IO lexes 0e1 from IO + lexes from string lexes from string + lexes 1E2 from IO lexes 1E2 from IO + lexes 0 from IO lexes 0 from IO + lexes true from string lexes true from string + lexes "hello\fworld" from IO lexes "hello\fworld" from IO + lexes [ from IO lexes [ from IO + lexes 1234.567 from String lexes 1234.567 from String + lexes 0.1e1 from String lexes 0.1e1 from String + lexes "\uD840\uDC00" from IO lexes "\uD840\uDC00" from IO + lexes 1.2e-3 from String lexes 1.2e-3 from String + lexes "\uD840\uDC00" from String lexes "\uD840\uDC00" from String + lexes 1e2 from IO lexes 1e2 from IO + lexes 9876543212345678987654321.0 from String lexes 9876543212345678987654321.0 from String + lexes 9876543212345678987654321.0 from IO lexes 9876543212345678987654321.0 from IO + lexes 1234.567 from IO lexes 1234.567 from IO + lexes 9876543212345678987654321e20 from IO lexes 9876543212345678987654321e20 from IO + lexes 0e-12 from String lexes 0e-12 from String + lexes 1234 from String lexes 1234 from String + lexes 0.123 from IO lexes 0.123 from IO + lexes "hello" from String lexes "hello" from String + lexes 0e+12 from String lexes 0e+12 from String + lexes "hello\"world" from IO lexes "hello\"world" from IO + lexes + : from IO lexes + : from IO + lexes 10.100000000000000000000 from IO lexes 10.100000000000000000000 from IO + lexes "hello\bworld" from String lexes "hello\bworld" from String + lexes 10.100000000000000000000 from String lexes 10.100000000000000000000 from String + lexes 0.123 from String lexes 0.123 from String + lexes "\u201chello world\u201d" from String lexes "\u201chello world\u201d" from String + lexes "hello\tworld" from IO lexes "hello\tworld" from IO + lexes "hello\nworld" from String lexes "hello\nworld" from String + lexes 0e1 from String lexes 0e1 from String + lexes 9000000000000000000.0 from String lexes 9000000000000000000.0 from String + lexes -1.23e4 from String lexes -1.23e4 from String + lexes 1000000000000000000.0 from String lexes 1000000000000000000.0 from String + lexes -1.23e4 from IO lexes -1.23e4 from IO + lexes -1.23e4 from IO lexes -1.23e4 from IO + lexes "hello\fworld" from String lexes "hello\fworld" from String +Class + getter + uses getter with assignment uses getter with assignment + uses getter with type declaration and default value uses getter with type declaration and default value + defines lazy getter with block defines lazy getter with block + defines lazy getter with block returning false defines lazy getter with block returning false + uses getter with type declaration uses getter with type declaration + uses simple getter uses simple getter + def_hash + should return same hash for equal property values should return same hash for equal property values + shouldn't return same hash for different property values shouldn't return same hash for different property values + calls #finalize on #clone'd objects calls #finalize on #clone'd objects + .set_crystal_type_id .set_crystal_type_id + delegate + forwards #{{ op.id }} with multiple parameters and block parameter forwards #{{ op.id }} with multiple parameters and block parameter + forwards #{{ op.id }} with multiple parameters forwards #{{ op.id }} with multiple parameters + forwards #{{ op.id }} with multiple parameters forwards #{{ op.id }} with multiple parameters + forwards #{{ op.id }} with multiple parameters and block parameter forwards #{{ op.id }} with multiple parameters and block parameter + forwards #{{ op.id }} with multiple parameters and block parameter forwards #{{ op.id }} with multiple parameters and block parameter + forwards #{{ op.id }} with multiple parameters and block parameter forwards #{{ op.id }} with multiple parameters and block parameter + forwards #{{ op.id }} with multiple parameters forwards #{{ op.id }} with multiple parameters + delegates []= delegates []= + forwards #{{ op.id }} with multiple parameters and block parameter forwards #{{ op.id }} with multiple parameters and block parameter + forwards #{{ op.id }} with multiple parameters forwards #{{ op.id }} with multiple parameters + forwards #{{ op.id }} with multiple parameters forwards #{{ op.id }} with multiple parameters + forwards #{{ op.id }} with multiple parameters forwards #{{ op.id }} with multiple parameters + delegates delegates + delegates setter delegates setter + forwards #{{ op.id }} with multiple parameters and block parameter forwards #{{ op.id }} with multiple parameters and block parameter + def_equals + compares by reference compares by reference + property! + uses property! uses property! + uses property! with type declaration uses property! with type declaration + #not_nil! + raises NilAssertionError raises NilAssertionError basic basic - unicode - matches unicode char against [[:alnum:]] (#4704) matches unicode char against [[:alnum:]] (#4704) - invalid codepoint invalid codepoint - matches unicode char against [[:print:]] (#11262) matches unicode char against [[:print:]] (#11262) - unicode support unicode support - with options - Regex::MatchOptions Regex::MatchOptions - deprecated Regex::Options deprecated Regex::Options - options - extended - ignores white space ignores white space - ignores comments ignores comments - multiline - anchor anchor - span span - anchored anchored - ignore case ignore case - doesn't crash with a large single line string doesn't crash with a large single line string - .escape .escape - .supports_match_options? .supports_match_options? - #to_s - interpolation interpolation - with slash with slash - with options with options - #+ #+ - #== #== - .needs_escape? - Char Char - String String - #=~ - accepts any type accepts any type - assigns captures assigns captures - returns match index or nil returns match index or nil - #capture_count #capture_count - #match! - raises on non-match raises on non-match - assigns captures assigns captures - returns match data returns match data - with options - Regex::Match options Regex::Match options - .new - doesn't crash when PCRE tries to free some memory (#771) doesn't crash when PCRE tries to free some memory (#771) - options - unnamed option unnamed option - regular regular - raises on invalid UTF-8 raises on invalid UTF-8 - raises exception with invalid regex raises exception with invalid regex - #match_at_byte_index - negative negative - multibyte index multibyte index - with options - deprecated Regex::Options deprecated Regex::Options - Regex::MatchOptions Regex::MatchOptions - positive index positive index - assigns captures assigns captures - #match - assigns captures assigns captures - with pos - positive positive - char index char index - negative negative - skip invalid UTF check skip invalid UTF check - with options - Regex::Match options Regex::Match options - deprecated Regex::Options deprecated Regex::Options - returns matchdata returns matchdata - returns nil on non-match returns nil on non-match - with invalid UTF-8 with invalid UTF-8 - #clone #clone - #source #source - #hash #hash -Errno - #message #message - .value .value -Float32#to_s - converts 8388608000.0_f32 to "8388608000.0" converts 8388608000.0_f32 to "8388608000.0" - special cases - converts -0.0_f32 to "-0.0" converts -0.0_f32 to "-0.0" - converts Float32::INFINITY to "Infinity" converts Float32::INFINITY to "Infinity" - converts Float32::MAX to "3.4028235e+38" converts Float32::MAX to "3.4028235e+38" - converts 4290772992_u32.unsafe_as(Float32) to "NaN" converts 4290772992_u32.unsafe_as(Float32) to "NaN" - converts Float32::MIN_POSITIVE to "1.1754944e-38" converts Float32::MIN_POSITIVE to "1.1754944e-38" - converts 0.0_f32 to "0.0" converts 0.0_f32 to "0.0" - converts Float32::MIN_SUBNORMAL to "1.0e-45" converts Float32::MIN_SUBNORMAL to "1.0e-45" - converts Float32::MIN_POSITIVE.prev_float to "1.1754942e-38" converts Float32::MIN_POSITIVE.prev_float to "1.1754942e-38" - converts 2143289344_u32.unsafe_as(Float32) to "NaN" converts 2143289344_u32.unsafe_as(Float32) to "NaN" - converts -Float32::INFINITY to "-Infinity" converts -Float32::INFINITY to "-Infinity" - converts 10000.0_f32 to "10000.0" converts 10000.0_f32 to "10000.0" - converts 1.23456_f32 to "1.23456" converts 1.23456_f32 to "1.23456" - converts 100000000.0_f32 to "100000000.0" converts 100000000.0_f32 to "100000000.0" - converts 1000000000000000.0_f32 to "1.0e+15" converts 1000000000000000.0_f32 to "1.0e+15" - converts 123456789012.0_f32 to "123456790000.0" converts 123456789012.0_f32 to "123456790000.0" - converts 12345678901234.0_f32 to "12345679000000.0" converts 12345678901234.0_f32 to "12345679000000.0" - converts 64000.0_f32 to "64000.0" converts 64000.0_f32 to "64000.0" - converts 65536.0_f32 to "65536.0" converts 65536.0_f32 to "65536.0" - converts 1234567895.0_f32 to "1234568000.0" converts 1234567895.0_f32 to "1234568000.0" - converts 1.0_f32 to "1.0" converts 1.0_f32 to "1.0" - converts 1001000000000000.0_f32 to "1.001e+15" converts 1001000000000000.0_f32 to "1.001e+15" - converts 123456789012345.0_f32 to "123456790000000.0" converts 123456789012345.0_f32 to "123456790000000.0" - converts 67108864.0_f32 to "67108864.0" converts 67108864.0_f32 to "67108864.0" - Ryu f2s_test.cc Regression - converts 1.993244e-38_f32 to "1.993244e-38" converts 1.993244e-38_f32 to "1.993244e-38" - converts 4.7223665e21_f32 to "4.7223665e+21" converts 4.7223665e21_f32 to "4.7223665e+21" - converts 9.2234038e17_f32 to "9.223404e+17" converts 9.2234038e17_f32 to "9.223404e+17" - converts 1.4e-45_f32 to "1.0e-45" converts 1.4e-45_f32 to "1.0e-45" - converts 1.9310392e-38_f32 to "1.9310392e-38" converts 1.9310392e-38_f32 to "1.9310392e-38" - converts 1.1811161e19_f32 to "1.1811161e+19" converts 1.1811161e19_f32 to "1.1811161e+19" - converts 4103.9003_f32 to "4103.9004" converts 4103.9003_f32 to "4103.9004" - converts 1.18697724e20_f32 to "1.18697725e+20" converts 1.18697724e20_f32 to "1.18697725e+20" - converts 6.0898e-39_f32 to "6.0898e-39" converts 6.0898e-39_f32 to "6.0898e-39" - converts 4.6143165e18_f32 to "4.6143166e+18" converts 4.6143165e18_f32 to "4.6143166e+18" - converts 3.3554436e7_f32 to "33554436.0" converts 3.3554436e7_f32 to "33554436.0" - converts -2.47e-43_f32 to "-2.47e-43" converts -2.47e-43_f32 to "-2.47e-43" - converts 200.0_f32 to "200.0" converts 200.0_f32 to "200.0" - converts 9.223372e18_f32 to "9.223372e+18" converts 9.223372e18_f32 to "9.223372e+18" - converts 6.7131496e7_f32 to "67131496.0" converts 6.7131496e7_f32 to "67131496.0" - converts 8388608.0_f32 to "8388608.0" converts 8388608.0_f32 to "8388608.0" - converts 2.8823261e17_f32 to "2.882326e+17" converts 2.8823261e17_f32 to "2.882326e+17" - converts 5.368709e18_f32 to "5.368709e+18" converts 5.368709e18_f32 to "5.368709e+18" - converts 5.3399997e9_f32 to "5339999700.0" converts 5.3399997e9_f32 to "5339999700.0" - converts 0.007812537_f32 to "0.007812537" converts 0.007812537_f32 to "0.007812537" - converts 1.6777216e7_f32 to "16777216.0" converts 1.6777216e7_f32 to "16777216.0" - converts 3.3554432e7_f32 to "33554432.0" converts 3.3554432e7_f32 to "33554432.0" - converts 1.5846085e29_f32 to "1.5846086e+29" converts 1.5846085e29_f32 to "1.5846086e+29" - converts 6.7108872e7_f32 to "67108870.0" converts 6.7108872e7_f32 to "67108870.0" - converts 0.0010310042_f32 to "0.0010310042" converts 0.0010310042_f32 to "0.0010310042" - converts 1.0e-44_f32 to "1.0e-44" converts 1.0e-44_f32 to "1.0e-44" - converts 7.038531e-26_f32 to "7.038531e-26" converts 7.038531e-26_f32 to "7.038531e-26" - converts 2.816025e14_f32 to "281602500000000.0" converts 2.816025e14_f32 to "281602500000000.0" - converts 1.00014165e-36_f32 to "1.00014165e-36" converts 1.00014165e-36_f32 to "1.00014165e-36" - converts 512.0_f32 to "512.0" converts 512.0_f32 to "512.0" - Ryu f2s_test.cc ExactValueRoundEven - converts 3.0540412e5_f32 to "305404.12" converts 3.0540412e5_f32 to "305404.12" - converts 8.0990312e3_f32 to "8099.0312" converts 8.0990312e3_f32 to "8099.0312" - converts 1.234_f32 to "1.234" converts 1.234_f32 to "1.234" - converts 1000000.0_f32 to "1000000.0" converts 1000000.0_f32 to "1000000.0" - converts 10000000000000.0_f32 to "10000000000000.0" converts 10000000000000.0_f32 to "10000000000000.0" - converts 1.2345678_f32 to "1.2345678" converts 1.2345678_f32 to "1.2345678" - converts 1.0_f32 to "1.0" converts 1.0_f32 to "1.0" - converts 8.0_f32 to "8.0" converts 8.0_f32 to "8.0" - converts 1000000000.0_f32 to "1000000000.0" converts 1000000000.0_f32 to "1000000000.0" - converts 1000.0_f32 to "1000.0" converts 1000.0_f32 to "1000.0" - converts 8000.0_f32 to "8000.0" converts 8000.0_f32 to "8000.0" - converts 1000000100000000.0_f32 to "1.0000001e+15" converts 1000000100000000.0_f32 to "1.0000001e+15" - converts 1234567890.0_f32 to "1234568000.0" converts 1234567890.0_f32 to "1234568000.0" - converts 8192.0_f32 to "8192.0" converts 8192.0_f32 to "8192.0" - converts 12.0_f32 to "12.0" converts 12.0_f32 to "12.0" - converts 1.234567_f32 to "1.234567" converts 1.234567_f32 to "1.234567" - converts 100.0_f32 to "100.0" converts 100.0_f32 to "100.0" - converts 67108864000.0_f32 to "67108864000.0" converts 67108864000.0_f32 to "67108864000.0" - converts 1.0_f32 to "1.0" converts 1.0_f32 to "1.0" - converts 1.2345_f32 to "1.2345" converts 1.2345_f32 to "1.2345" - Ryu f2s_test.cc BoundaryRoundEven - converts 8.999999e9_f32 to "9000000000.0" converts 8.999999e9_f32 to "9000000000.0" - converts 3.4366717e10_f32 to "34366720000.0" converts 3.4366717e10_f32 to "34366720000.0" - converts 3.355445e7_f32 to "33554450.0" converts 3.355445e7_f32 to "33554450.0" - converts 123.0_f32 to "123.0" converts 123.0_f32 to "123.0" - converts 100000000000000.0_f32 to "100000000000000.0" converts 100000000000000.0_f32 to "100000000000000.0" - converts 1000010000000000.0_f32 to "1.00001e+15" converts 1000010000000000.0_f32 to "1.00001e+15" - converts 123456.0_f32 to "123456.0" converts 123456.0_f32 to "123456.0" - converts 10000000.0_f32 to "10000000.0" converts 10000000.0_f32 to "10000000.0" - converts 1234567890123.0_f32 to "1234568000000.0" converts 1234567890123.0_f32 to "1234568000000.0" - Ryu f2s_test.cc LotsOfTrailingZeros - converts 2.4414062e-4_f32 to "0.00024414062" converts 2.4414062e-4_f32 to "0.00024414062" - converts 4.3945312e-3_f32 to "0.0043945312" converts 4.3945312e-3_f32 to "0.0043945312" - converts 2.4414062e-3_f32 to "0.0024414062" converts 2.4414062e-3_f32 to "0.0024414062" - converts 6.3476562e-3_f32 to "0.0063476562" converts 6.3476562e-3_f32 to "0.0063476562" - converts 12345.0_f32 to "12345.0" converts 12345.0_f32 to "12345.0" - anomalous values - converts 0x1p87_f32 to "1.5474251e+26" converts 0x1p87_f32 to "1.5474251e+26" - converts 0x1p90_f32 to "1.2379401e+27" converts 0x1p90_f32 to "1.2379401e+27" - converts 0x1p-96_f32 to "1.2621775e-29" converts 0x1p-96_f32 to "1.2621775e-29" - converts 1.23456789_f32 to "1.2345679" converts 1.23456789_f32 to "1.2345679" - converts 10000000000.0_f32 to "10000000000.0" converts 10000000000.0_f32 to "10000000000.0" - converts 524288000.0_f32 to "524288000.0" converts 524288000.0_f32 to "524288000.0" - converts 1.23_f32 to "1.23" converts 1.23_f32 to "1.23" - converts 1234.0_f32 to "1234.0" converts 1234.0_f32 to "1234.0" - Ryu f2s_test.cc LooksLikePow5 - converts 0x1.2a05f2p+60_f32 to "1.3421773e+18" converts 0x1.2a05f2p+60_f32 to "1.3421773e+18" - converts 0x1.2a05f2p+59_f32 to "6.7108864e+17" converts 0x1.2a05f2p+59_f32 to "6.7108864e+17" - converts 0x1.2a05f2p+61_f32 to "2.6843546e+18" converts 0x1.2a05f2p+61_f32 to "2.6843546e+18" - converts 1010000000000000.0_f32 to "1.01e+15" converts 1010000000000000.0_f32 to "1.01e+15" - converts 1000000000000.0_f32 to "1000000000000.0" converts 1000000000000.0_f32 to "1000000000000.0" - converts 1000000010000000.0_f32 to "1.0e+15" converts 1000000010000000.0_f32 to "1.0e+15" - odd mantissas (unaffected by shifting) - converts 671087e2_f32 to "67108700.0" converts 671087e2_f32 to "67108700.0" - converts 1075e6_f32 to "1075000000.0" converts 1075e6_f32 to "1075000000.0" - converts 671089e2_f32 to "67108900.0" converts 671089e2_f32 to "67108900.0" - converts 3355445e1_f32 to "33554450.0" converts 3355445e1_f32 to "33554450.0" - converts 215e7_f32 to "2150000000.0" converts 215e7_f32 to "2150000000.0" - converts 5369e5_f32 to "536900000.0" converts 5369e5_f32 to "536900000.0" - converts 5367e5_f32 to "536700000.0" converts 5367e5_f32 to "536700000.0" - converts 26843e4_f32 to "268430000.0" converts 26843e4_f32 to "268430000.0" - converts 26845e4_f32 to "268450000.0" converts 26845e4_f32 to "268450000.0" - converts 134217e3_f32 to "134217000.0" converts 134217e3_f32 to "134217000.0" - converts 9e9_f32 to "9000000000.0" converts 9e9_f32 to "9000000000.0" - converts 43e8_f32 to "4300000000.0" converts 43e8_f32 to "4300000000.0" - converts 5495808e5_f32 to "549580800000.0" converts 5495808e5_f32 to "549580800000.0" - converts 41e8_f32 to "4100000000.0" converts 41e8_f32 to "4100000000.0" - converts 1073e6_f32 to "1073000000.0" converts 1073e6_f32 to "1073000000.0" - converts 134219e3_f32 to "134219000.0" converts 134219e3_f32 to "134219000.0" - converts 213e7_f32 to "2130000000.0" converts 213e7_f32 to "2130000000.0" - converts 1e10_f32 to "10000000000.0" converts 1e10_f32 to "10000000000.0" - converts 7e9_f32 to "7000000000.0" converts 7e9_f32 to "7000000000.0" - converts 3e10_f32 to "30000000000.0" converts 3e10_f32 to "30000000000.0" - converts 3355443e1_f32 to "33554430.0" converts 3355443e1_f32 to "33554430.0" - converts 5497856e5_f32 to "549785600000.0" converts 5497856e5_f32 to "549785600000.0" - converts 12345678.0_f32 to "12345678.0" converts 12345678.0_f32 to "12345678.0" - converts 1.2_f32 to "1.2" converts 1.2_f32 to "1.2" - highly-trimmed powers of 2 - converts 0x1p118_f32 to "3.32307e+35" converts 0x1p118_f32 to "3.32307e+35" - converts 0x1p119_f32 to "6.64614e+35" converts 0x1p119_f32 to "6.64614e+35" - one-digit cases, where the decimal point can't appear between digits like "17.29" - converts 7e+0_f32 to "7.0" converts 7e+0_f32 to "7.0" - converts 7e+2_f32 to "700.0" converts 7e+2_f32 to "700.0" - converts 7e-2_f32 to "0.07" converts 7e-2_f32 to "0.07" - converts 7e+1_f32 to "70.0" converts 7e+1_f32 to "70.0" - converts 7e-3_f32 to "0.007" converts 7e-3_f32 to "0.007" - converts 7e+3_f32 to "7000.0" converts 7e+3_f32 to "7000.0" - converts 7e-1_f32 to "0.7" converts 7e-1_f32 to "0.7" - converts 65536000.0_f32 to "65536000.0" converts 65536000.0_f32 to "65536000.0" - converts 100000000000.0_f32 to "100000000000.0" converts 100000000000.0_f32 to "100000000000.0" - converts 8192000.0_f32 to "8192000.0" converts 8192000.0_f32 to "8192000.0" - converts 1234567890123456.0_f32 to "1.234568e+15" converts 1234567890123456.0_f32 to "1.234568e+15" - converts 8388608.0_f32 to "8388608.0" converts 8388608.0_f32 to "8388608.0" - converts 512000.0_f32 to "512000.0" converts 512000.0_f32 to "512000.0" - converts 1234567.0_f32 to "1234567.0" converts 1234567.0_f32 to "1234567.0" - converts 64.0_f32 to "64.0" converts 64.0_f32 to "64.0" - converts 123456789.0_f32 to "123456790.0" converts 123456789.0_f32 to "123456790.0" - converts 12345678901.0_f32 to "12345679000.0" converts 12345678901.0_f32 to "12345679000.0" - converts 524288.0_f32 to "524288.0" converts 524288.0_f32 to "524288.0" - converts 1000001000000000.0_f32 to "1.000001e+15" converts 1000001000000000.0_f32 to "1.000001e+15" - converts 10.0_f32 to "10.0" converts 10.0_f32 to "10.0" - converts 1100000000000000.0_f32 to "1.1e+15" converts 1100000000000000.0_f32 to "1.1e+15" - converts 1.23456735e-36_f32 to "1.23456735e-36" converts 1.23456735e-36_f32 to "1.23456735e-36" - all exponents - converts 1.729e-15_f32 to "1.729e-15" converts 1.729e-15_f32 to "1.729e-15" - converts 1.729e-6_f32 to "1.729e-6" converts 1.729e-6_f32 to "1.729e-6" - converts 1.729e31_f32 to "1.729e+31" converts 1.729e31_f32 to "1.729e+31" - converts 1.729e18_f32 to "1.729e+18" converts 1.729e18_f32 to "1.729e+18" - converts 1.729e32_f32 to "1.729e+32" converts 1.729e32_f32 to "1.729e+32" - converts 1.729e33_f32 to "1.729e+33" converts 1.729e33_f32 to "1.729e+33" - converts 1.729e-35_f32 to "1.729e-35" converts 1.729e-35_f32 to "1.729e-35" - converts 1.729e-10_f32 to "1.729e-10" converts 1.729e-10_f32 to "1.729e-10" - converts 1.729e+5_f32 to "172900.0" converts 1.729e+5_f32 to "172900.0" - converts 1.729e-37_f32 to "1.729e-37" converts 1.729e-37_f32 to "1.729e-37" - converts 1.729e28_f32 to "1.729e+28" converts 1.729e28_f32 to "1.729e+28" - converts 1.729e15_f32 to "1.729e+15" converts 1.729e15_f32 to "1.729e+15" - converts 1.729e+14_f32 to "172900000000000.0" converts 1.729e+14_f32 to "172900000000000.0" - converts 1.729e-23_f32 to "1.729e-23" converts 1.729e-23_f32 to "1.729e-23" - converts 1.729e+3_f32 to "1729.0" converts 1.729e+3_f32 to "1729.0" - converts 1.729e-34_f32 to "1.729e-34" converts 1.729e-34_f32 to "1.729e-34" - converts 1.729e-20_f32 to "1.729e-20" converts 1.729e-20_f32 to "1.729e-20" - converts 1.729e-22_f32 to "1.729e-22" converts 1.729e-22_f32 to "1.729e-22" - converts 1.729e+1_f32 to "17.29" converts 1.729e+1_f32 to "17.29" - converts 1.729e-5_f32 to "1.729e-5" converts 1.729e-5_f32 to "1.729e-5" - converts 1.729e+12_f32 to "1729000000000.0" converts 1.729e+12_f32 to "1729000000000.0" - converts 1.729e-33_f32 to "1.729e-33" converts 1.729e-33_f32 to "1.729e-33" - converts 1.729e36_f32 to "1.729e+36" converts 1.729e36_f32 to "1.729e+36" - converts 1.729e-44_f32 to "1.7e-44" converts 1.729e-44_f32 to "1.7e-44" - converts 1.729e21_f32 to "1.729e+21" converts 1.729e21_f32 to "1.729e+21" - converts 1.729e-32_f32 to "1.729e-32" converts 1.729e-32_f32 to "1.729e-32" - converts 1.729e+0_f32 to "1.729" converts 1.729e+0_f32 to "1.729" - converts 1.729e-29_f32 to "1.729e-29" converts 1.729e-29_f32 to "1.729e-29" - converts 1.729e26_f32 to "1.729e+26" converts 1.729e26_f32 to "1.729e+26" - converts 1.729e-24_f32 to "1.729e-24" converts 1.729e-24_f32 to "1.729e-24" - converts 1.729e-43_f32 to "1.72e-43" converts 1.729e-43_f32 to "1.72e-43" - converts 1.729e-13_f32 to "1.729e-13" converts 1.729e-13_f32 to "1.729e-13" - converts 1.729e19_f32 to "1.729e+19" converts 1.729e19_f32 to "1.729e+19" - converts 1.729e+9_f32 to "1729000000.0" converts 1.729e+9_f32 to "1729000000.0" - converts 1.729e-19_f32 to "1.729e-19" converts 1.729e-19_f32 to "1.729e-19" - converts 1.729e+2_f32 to "172.9" converts 1.729e+2_f32 to "172.9" - converts 1.729e-36_f32 to "1.729e-36" converts 1.729e-36_f32 to "1.729e-36" - converts 1.729e23_f32 to "1.729e+23" converts 1.729e23_f32 to "1.729e+23" - converts 1.729e-7_f32 to "1.729e-7" converts 1.729e-7_f32 to "1.729e-7" - converts 1.729e+10_f32 to "17290000000.0" converts 1.729e+10_f32 to "17290000000.0" - converts 1.729e-45_f32 to "1.0e-45" converts 1.729e-45_f32 to "1.0e-45" - converts 1.729e-26_f32 to "1.729e-26" converts 1.729e-26_f32 to "1.729e-26" - converts 1.729e17_f32 to "1.729e+17" converts 1.729e17_f32 to "1.729e+17" - converts 1.729e-40_f32 to "1.729e-40" converts 1.729e-40_f32 to "1.729e-40" - converts 1.729e29_f32 to "1.729e+29" converts 1.729e29_f32 to "1.729e+29" - converts 1.729e-31_f32 to "1.729e-31" converts 1.729e-31_f32 to "1.729e-31" - converts 1.729e-27_f32 to "1.729e-27" converts 1.729e-27_f32 to "1.729e-27" - converts 1.729e-28_f32 to "1.729e-28" converts 1.729e-28_f32 to "1.729e-28" - converts 1.729e-41_f32 to "1.729e-41" converts 1.729e-41_f32 to "1.729e-41" - converts 1.729e20_f32 to "1.729e+20" converts 1.729e20_f32 to "1.729e+20" - converts 1.729e24_f32 to "1.729e+24" converts 1.729e24_f32 to "1.729e+24" - converts 1.729e-17_f32 to "1.729e-17" converts 1.729e-17_f32 to "1.729e-17" - converts 1.729e30_f32 to "1.729e+30" converts 1.729e30_f32 to "1.729e+30" - converts 1.729e-3_f32 to "0.001729" converts 1.729e-3_f32 to "0.001729" - converts 1.729e25_f32 to "1.729e+25" converts 1.729e25_f32 to "1.729e+25" - converts 1.729e-39_f32 to "1.729e-39" converts 1.729e-39_f32 to "1.729e-39" - converts 1.729e37_f32 to "1.729e+37" converts 1.729e37_f32 to "1.729e+37" - converts 1.729e-38_f32 to "1.729e-38" converts 1.729e-38_f32 to "1.729e-38" - converts 1.729e38_f32 to "1.729e+38" converts 1.729e38_f32 to "1.729e+38" - converts 1.729e-14_f32 to "1.729e-14" converts 1.729e-14_f32 to "1.729e-14" - converts 1.729e+13_f32 to "17290000000000.0" converts 1.729e+13_f32 to "17290000000000.0" - converts 1.729e+6_f32 to "1729000.0" converts 1.729e+6_f32 to "1729000.0" - converts 1.729e-12_f32 to "1.729e-12" converts 1.729e-12_f32 to "1.729e-12" - converts 1.729e-21_f32 to "1.729e-21" converts 1.729e-21_f32 to "1.729e-21" - converts 1.729e-2_f32 to "0.01729" converts 1.729e-2_f32 to "0.01729" - converts 1.729e16_f32 to "1.729e+16" converts 1.729e16_f32 to "1.729e+16" - converts 1.729e22_f32 to "1.729e+22" converts 1.729e22_f32 to "1.729e+22" - converts 1.729e+4_f32 to "17290.0" converts 1.729e+4_f32 to "17290.0" - converts 1.729e-1_f32 to "0.1729" converts 1.729e-1_f32 to "0.1729" - converts 1.729e+11_f32 to "172900000000.0" converts 1.729e+11_f32 to "172900000000.0" - converts 1.729e-42_f32 to "1.729e-42" converts 1.729e-42_f32 to "1.729e-42" - converts 1.729e-8_f32 to "1.729e-8" converts 1.729e-8_f32 to "1.729e-8" - converts 1.729e-25_f32 to "1.729e-25" converts 1.729e-25_f32 to "1.729e-25" - converts 1.729e-11_f32 to "1.729e-11" converts 1.729e-11_f32 to "1.729e-11" - converts 1.729e35_f32 to "1.729e+35" converts 1.729e35_f32 to "1.729e+35" - converts 1.729e-9_f32 to "1.729e-9" converts 1.729e-9_f32 to "1.729e-9" - converts 1.729e-30_f32 to "1.729e-30" converts 1.729e-30_f32 to "1.729e-30" - converts 1.729e-4_f32 to "0.0001729" converts 1.729e-4_f32 to "0.0001729" - converts 1.729e+8_f32 to "172900000.0" converts 1.729e+8_f32 to "172900000.0" - converts 1.729e27_f32 to "1.729e+27" converts 1.729e27_f32 to "1.729e+27" - converts 1.729e34_f32 to "1.729e+34" converts 1.729e34_f32 to "1.729e+34" - converts 1.729e-16_f32 to "1.729e-16" converts 1.729e-16_f32 to "1.729e-16" - converts 1.729e+7_f32 to "17290000.0" converts 1.729e+7_f32 to "17290000.0" - converts 1.729e-18_f32 to "1.729e-18" converts 1.729e-18_f32 to "1.729e-18" - converts 100000.0_f32 to "100000.0" converts 100000.0_f32 to "100000.0" - Grisu failures - converts 85_f32 / 512_f32 to "0.16601562" converts 85_f32 / 512_f32 to "0.16601562" - converts 1000100000000000.0_f32 to "1.0001e+15" converts 1000100000000000.0_f32 to "1.0001e+15" -Float32 - #to_hexfloat - exponents - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - corner cases - assert assert - assert assert - assert assert - assert assert - assert assert - special cases - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - hexits - assert assert - assert assert - assert assert - assert assert - trimming - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - .parse_hexfloat - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - special cases - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - values close to MIN_POSITIVE and MAX - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - invalid hexfloats - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - values close to zero - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert -Compress::Zip - writes entry writes entry - adds a directory adds a directory - writes entry uncompressed writes entry uncompressed - writes string writes string - writes bytes writes bytes - writes io writes io - writes file writes file - writes and reads to memory writes and reads to memory - writes entry uncompressed and reads with Compress::Zip::File writes entry uncompressed and reads with Compress::Zip::File -YAML::Nodes::Builder - #alias - as a scalar value - writes correctly writes correctly - within a mapping - writes correctly writes correctly - #merge - within a mapping - writes correctly writes correctly -levenshtein - assert assert - assert assert - assert assert - assert assert - finds with finder finds with finder - assert assert - assert assert - assert assert - assert assert - finds with finder and other values finds with finder and other values - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert -BigDecimal - exponentiates exponentiates - raises if creating from infinity raises if creating from infinity - handles modulus correctly handles modulus correctly - performs arithmetic with bigdecimals performs arithmetic with bigdecimals - raises if creating from NaN raises if creating from NaN - initializes from valid input initializes from valid input - #inspect - assert assert - #trunc - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - #<=> - compares against NaNs compares against NaNs - converts to other number types converts to other number types - hashes hashes - raises InvalidBigDecimalException when initializing from invalid input raises InvalidBigDecimalException when initializing from invalid input - is comparable with other types is comparable with other types - #ceil - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - #round - rounding modes - to_negative to_negative - ties_away ties_away - ties_even ties_even - default (=ties_even) default (=ties_even) - to_positive to_positive - to_zero to_zero - with digits - ties_away ties_away - ties_even ties_even - to_positive to_positive - to_zero to_zero - to_negative to_negative - #integer? - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - can be converted from scientific notation can be converted from scientific notation - can be converted from other types can be converted from other types - #floor - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - can normalize quotient can normalize quotient - keeps precision keeps precision - converts to string converts to string - exponentiates with negative powers exponentiates with negative powers - upkeeps hashing invariant upkeeps hashing invariant - performs arithmetic with other number types performs arithmetic with other number types -Atomic::Flag - #test_and_set #test_and_set - #clear #clear -__modti3 - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests -UNIXServer - .new - raises when socket file already exists raises when socket file already exists - creates the socket file creates the socket file - won't delete existing file on bind failure won't delete existing file on bind failure - deletes socket file on close deletes socket file on close - raises when path is too long raises when path is too long - datagrams - can send and receive datagrams can send and receive datagrams - accept - returns the client UNIXSocket returns the client UNIXSocket - raises when server is closed raises when server is closed - accept? - returns nil when server is closed returns nil when server is closed - returns the client UNIXSocket returns the client UNIXSocket - sets close on exec flag sets close on exec flag -OAuth::RequestToken - creates from response creates from response - equality - checks secret checks secret - checks token checks token -YAML::PullParser - reads a sequence with an anchor reads a sequence with an anchor - reads an empty document reads an empty document - reads a mapping with an anchor reads a mapping with an anchor - parses alias parses alias - skip - document document - stream stream - sequence sequence - alias alias - scalar scalar - skips event in other cases skips event in other cases - mapping mapping - reads empty stream reads empty stream - reads a scalar having a null character reads a scalar having a null character - reads a scalar with an anchor reads a scalar with an anchor - reads a mapping reads a mapping - reads a sequence reads a sequence - reads a scalar reads a scalar - raises exception at correct location raises exception at correct location -CSV - build - builds with commas builds with commas - builds with quoting builds with quoting - builds two rows builds two rows - builds with commas builds with commas - builds row from enumerable builds row from enumerable - concats splat to row concats splat to row - concats enumerable to row concats enumerable to row - builds with quotes builds with quotes - builds with inside quoted chars and symbols builds with inside quoted chars and symbols - skips inside row skips inside row - builds with custom separator builds with custom separator - builds row from splat builds row from splat - builds with numbers builds with numbers - builds with custom quote character builds with custom quote character -Crystal::Digest::SHA1 - does hexdigest for "abc" does hexdigest for "abc" - does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + with message with message + does not copy its receiver when it is a value (#13263) does not copy its receiver when it is a value (#13263) + removes Nil type removes Nil type + getter? + uses getter? with block uses getter? with block + uses getter? with default value uses getter? with default value + uses getter? uses getter? + uses getter? with type declaration and default value uses getter? with type declaration and default value + uses getter? with type declaration uses getter? with type declaration + uses getter? with type declaration and block uses getter? with type declaration and block + applies annotation to lazy property (#9139) applies annotation to lazy property (#9139) + #unsafe_as #unsafe_as + property + defines lazy property with block returning false defines lazy property with block returning false + uses property with type declaration and default value uses property with type declaration and default value + uses property uses property + uses property with type declaration uses property with type declaration + uses property with default value uses property with default value + defines lazy property with block defines lazy property with block + getter! + uses getter! with type declaration uses getter! with type declaration + uses getter! uses getter! + #in? + works with other objects implementing #includes? works with other objects implementing #includes? + works with Enumerable-s works with Enumerable-s + works with splatted arguments works with splatted arguments + setter + uses setter with type declaration and default value uses setter with type declaration and default value + uses setter uses setter + uses setter with default value uses setter with default value + uses setter with type declaration uses setter with type declaration + property? + uses property? with block uses property? with block + uses property? with type declaration uses property? with type declaration + uses property? uses property? + uses property? with type declaration and default value uses property? with type declaration and default value + uses property? with type declaration and block uses property? with type declaration and block + uses property? with default value uses property? with default value +.from_www_form + Bool + any other value any other value + a truthy value a truthy value + a falsey value a falsey value + Union(*T) + invalid invalid + valid valid + String + empty value empty value + with missing key with missing key + scalar string scalar string + with alternate casing with alternate casing + with key with key + Enum + invalid value invalid value + valid value valid value + Nil + invalid value invalid value + valid values valid values + Array(T) Array(T) + Number + Float + valid numbers valid numbers + empty value empty value + with whitespace with whitespace + Int + empty value empty value + valid numbers valid numbers + with whitespace with whitespace + Time + valid value valid value + invalid value invalid value +Compress::Deflate::Reader + .open + yields itself to block yields itself to block + should rewind should rewind + should read byte by byte (#4192) should read byte by byte (#4192) +IO::Digest + calculates digest from multiple reads calculates digest from multiple reads + calculates digest from multiple writes calculates digest from multiple writes + calculates digest from writing a string calculates digest from writing a string + does not calculate digest on write does not calculate digest on write + calculates digest from writing calculates digest from writing + can be created with ongoing digest can be created with ongoing digest + does not calculate digest on read does not calculate digest on read + calculates digest from reading calculates digest from reading +MIME::Multipart + .parse + parses multipart messages parses multipart messages + parses multipart messages from HTTP client responses parses multipart messages from HTTP client responses + .parse + parses multipart messages parses multipart messages + .parse_boundary + parses unquoted boundaries parses unquoted boundaries + parses quoted boundaries parses quoted boundaries +Digest::SHA512 + does #hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does #hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + does base64digest for "" does base64digest for "" + does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + does #hexdigest for "a" does #hexdigest for "a" + can't call #final more than once can't call #final more than once + resets resets + resets resets + does digest for "" does digest for "" + does base64digest for "0123456701234567012345670123456701234567012345670123456701234567" does base64digest for "0123456701234567012345670123456701234567012345670123456701234567" + does digest for "abc" in a block does digest for "abc" in a block + does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block + does .hexdigest for "" does .hexdigest for "" + does .hexdigest for "The quick brown fox jumps over the lazy dog" does .hexdigest for "The quick brown fox jumps over the lazy dog" + can't call #final more than once can't call #final more than once + #hexdigest can update within a loop from explicit expr (#9483) #hexdigest can update within a loop from explicit expr (#9483) + does digest for "a" in a block does digest for "a" in a block + digest with file content digest with file content + does base64digest for "The quick brown fox jumps over the lazy dog" does base64digest for "The quick brown fox jumps over the lazy dog" + returns the digest_size returns the digest_size + does .hexdigest for "0123456701234567012345670123456701234567012345670123456701234567" does .hexdigest for "0123456701234567012345670123456701234567012345670123456701234567" + does digest for "The quick brown fox jumps over the lazy dog" in a block does digest for "The quick brown fox jumps over the lazy dog" in a block + does base64digest for "fooø" does base64digest for "fooø" + does .hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does .hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + does digest for "" in a block does digest for "" in a block + does base64digest for "abc" does base64digest for "abc" + does digest for "fooø" in a block does digest for "fooø" in a block + resets resets + can't call #final more than once can't call #final more than once + does digest for "a" does digest for "a" + does digest for "0123456701234567012345670123456701234567012345670123456701234567" does digest for "0123456701234567012345670123456701234567012345670123456701234567" + can't call #final more than once can't call #final more than once + does base64digest for "a" does base64digest for "a" + resets resets + does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + does #hexdigest for "The quick brown fox jumps over the lazy dog" does #hexdigest for "The quick brown fox jumps over the lazy dog" + does #hexdigest for "0123456701234567012345670123456701234567012345670123456701234567" does #hexdigest for "0123456701234567012345670123456701234567012345670123456701234567" + does #hexdigest for "fooø" does #hexdigest for "fooø" + can't call #final more than once can't call #final more than once + does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block + resets resets can't call #final more than once can't call #final more than once + does digest for "abc" does digest for "abc" + can't call #final more than once can't call #final more than once + does #hexdigest for "abc" does #hexdigest for "abc" + #hexdigest can update within a loop by indirect expr (#9483) #hexdigest can update within a loop by indirect expr (#9483) + does .hexdigest for "abc" does .hexdigest for "abc" + context are independent context are independent + does .hexdigest for "fooø" does .hexdigest for "fooø" + resets resets + does digest for "fooø" does digest for "fooø" + does digest for "The quick brown fox jumps over the lazy dog" does digest for "The quick brown fox jumps over the lazy dog" + .dup + preserves type preserves type + leads to deterministic updates leads to deterministic updates + leads to not sharing state leads to not sharing state + preserves value preserves value + does #hexdigest for "" does #hexdigest for "" + resets resets + does .hexdigest for "a" does .hexdigest for "a" +Tuple + "#reverse_each" yielding "#reverse_each" yielding + "#reverse_each" iterator "#reverse_each" iterator + does clone does clone + does Tuple.new, with type vars does Tuple.new, with type vars + gets first element gets first element + gets last element gets last element + .[] with non-literal index + gets tuple metaclass element gets tuple metaclass element + raises index out of bounds raises index out of bounds + values_at + works with mixed types works with mixed types + raises when passed an invalid index raises when passed an invalid index + returns the given indexes returns the given indexes + does reverse does reverse + does map_with_index, with offset does map_with_index, with offset + gets first? element gets first? element + does dup does dup + does <=> with the same beginning and different size does <=> with the same beginning and different size + does comparison does comparison + does compare with different sizes does compare with different sizes + "#each" yielding "#each" yielding + does == with another type does == with another type + .[]? with non-literal index + gets tuple metaclass element or nil gets tuple metaclass element or nil + #[] with non-literal index + raises index out of bounds raises index out of bounds + gets tuple element gets tuple element + does at does at + #to_static_array #to_static_array + does == does == + does Tuple.new, without type vars does Tuple.new, without type vars + does Tuple.from does Tuple.from + does === does === + does to_s does to_s + does map_with_index does map_with_index + does each does each + does Tuple#from does Tuple#from + does map does map + clones empty tuple clones empty tuple + checks empty? checks empty? + does types does types + does <=> for equality does <=> for equality + does to_a does to_a + does == with different types but same size does == with different types but same size + #[]? with non-literal index + gets tuple element or nil gets tuple element or nil + does size does size + gets last? element gets last? element + "#each" iterator "#each" iterator + does compare does compare +IO::Memory + creates from string creates from string + does gets with char and limit does gets with char and limit + can be converted to slice can be converted to slice + creates from slice creates from slice + raises when reading at offset outside of bounds raises when reading at offset outside of bounds + raises if clearing when closed raises if clearing when closed + does gets with limit does gets with limit + encoding + decode + gets with chomp = false gets with chomp = false + gets gets + gets_to_end gets_to_end + reads char reads char + allocates for > 1 GB allocates for > 1 GB + raises if seek set is negative raises if seek set is negative + has a size has a size + raises if seek current leads to negative value raises if seek current leads to negative value + can seek past the end can seek past the end + can seek set can seek set + raises if capacity too big raises if capacity too big + reads byte reads byte + can seek current can seek current + writes past end writes past end + writes past end with write_byte writes past end with write_byte + can tell can tell + skips skips + reads more than available (#1229) reads more than available (#1229) + consumes with getb_to_end consumes with getb_to_end + write raises EOFError write raises EOFError + #to_s + appends to another buffer appends to another buffer + appends to itself appends to itself + encoding + returns String returns String + writes to IO writes to IO + writes and reads writes and reads + peeks peeks + skips_to_end skips_to_end + raises if negative capacity raises if negative capacity + raises if invoking gets with negative limit raises if invoking gets with negative limit + reads at offset reads at offset + writes after reading writes after reading + gets with char as delimiter gets with char as delimiter + write single byte write single byte + writes big writes big + creates from slice, non-writeable creates from slice, non-writeable + reads single line content reads single line content + seeks with pos and pos= seeks with pos and pos= + reads each line with chomp = false reads each line with chomp = false + clears clears + can seek from the end can seek from the end + reads each line reads each line + writes writes + does gets with char and limit without off-by-one does gets with char and limit without off-by-one + can be closed can be closed + raises if reading when closed raises if reading when closed + peek readonly peek readonly + consumes with gets_to_end consumes with gets_to_end + creates from read-only slice creates from read-only slice +IO::Stapled + #peek delegates to reader #peek delegates to reader + .pipe + creates a bidirectional pipe creates a bidirectional pipe + with block creates a bidirectional pipe with block creates a bidirectional pipe + #sync_close? #sync_close? + #skip_to_end delegates to reader #skip_to_end delegates to reader + #close + does not close underlying IOs does not close underlying IOs + stops access to underlying IOs stops access to underlying IOs + closes underlying IOs when sync_close is true closes underlying IOs when sync_close is true + combines two IOs combines two IOs + loops back loops back + #skip delegates to reader #skip delegates to reader +Digest::SHA1 + does digest for "0123456701234567012345670123456701234567012345670123456701234567" does digest for "0123456701234567012345670123456701234567012345670123456701234567" + does digest for "" in a block does digest for "" in a block resets resets - returns the digest_size returns the digest_size + resets resets + does digest for "" does digest for "" + does digest for "The quick brown fox jumps over the lazy dog" in a block does digest for "The quick brown fox jumps over the lazy dog" in a block + #hexdigest can update within a loop from explicit expr (#9483) #hexdigest can update within a loop from explicit expr (#9483) + does digest for "abc" in a block does digest for "abc" in a block + does base64digest for "0123456701234567012345670123456701234567012345670123456701234567" does base64digest for "0123456701234567012345670123456701234567012345670123456701234567" + does base64digest for "The quick brown fox jumps over the lazy dog" does base64digest for "The quick brown fox jumps over the lazy dog" + does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block can't call #final more than once can't call #final more than once + does base64digest for "a" does base64digest for "a" + does digest for "abc" does digest for "abc" #hexdigest can update within a loop by indirect expr (#9483) #hexdigest can update within a loop by indirect expr (#9483) - does base64digest for "The quick brown fox jumps over the lazy dog" does base64digest for "The quick brown fox jumps over the lazy dog" + does base64digest for "abc" does base64digest for "abc" + does digest for "The quick brown fox jumps over the lazy dog" does digest for "The quick brown fox jumps over the lazy dog" + does digest for "a" does digest for "a" + context are independent context are independent + does hexdigest for "abc" does hexdigest for "abc" + returns the digest_size returns the digest_size + can't call #final more than once can't call #final more than once + can't call #final more than once can't call #final more than once + does digest for "fooø" does digest for "fooø" resets resets - digest with file content digest with file content can't call #final more than once can't call #final more than once - does base64digest for "abc" does base64digest for "abc" - does digest for "abc" does digest for "abc" .dup - leads to not sharing state leads to not sharing state preserves value preserves value preserves type preserves type leads to deterministic updates leads to deterministic updates - can't call #final more than once can't call #final more than once + leads to not sharing state leads to not sharing state + resets resets + does hexdigest for "fooø" does hexdigest for "fooø" + does hexdigest for "a" does hexdigest for "a" + digest with file content digest with file content + resets resets + does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + resets resets + does digest for "a" in a block does digest for "a" in a block + does hexdigest for "The quick brown fox jumps over the lazy dog" does hexdigest for "The quick brown fox jumps over the lazy dog" + does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does digest for "fooø" in a block does digest for "fooø" in a block - does base64digest for "" does base64digest for "" + does hexdigest for "" does hexdigest for "" can't call #final more than once can't call #final more than once - does digest for "a" in a block does digest for "a" in a block - #hexdigest can update within a loop from explicit expr (#9483) #hexdigest can update within a loop from explicit expr (#9483) - does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567" does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567" - does digest for "The quick brown fox jumps over the lazy dog" in a block does digest for "The quick brown fox jumps over the lazy dog" in a block - does hexdigest for "a" does hexdigest for "a" does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block can't call #final more than once can't call #final more than once - does digest for "a" does digest for "a" - resets resets resets resets does base64digest for "fooø" does base64digest for "fooø" - does digest for "fooø" does digest for "fooø" - resets resets - context are independent context are independent - does hexdigest for "" does hexdigest for "" + does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567" does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567" + does base64digest for "" does base64digest for "" can't call #final more than once can't call #final more than once - does base64digest for "a" does base64digest for "a" - does digest for "The quick brown fox jumps over the lazy dog" does digest for "The quick brown fox jumps over the lazy dog" - resets resets - does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block - does digest for "0123456701234567012345670123456701234567012345670123456701234567" does digest for "0123456701234567012345670123456701234567012345670123456701234567" - does digest for "" does digest for "" - resets resets - does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" - does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" - does digest for "" in a block does digest for "" in a block - does base64digest for "0123456701234567012345670123456701234567012345670123456701234567" does base64digest for "0123456701234567012345670123456701234567012345670123456701234567" - does hexdigest for "fooø" does hexdigest for "fooø" - does digest for "abc" in a block does digest for "abc" in a block - does hexdigest for "The quick brown fox jumps over the lazy dog" does hexdigest for "The quick brown fox jumps over the lazy dog" -IO::Stapled - #close - does not close underlying IOs does not close underlying IOs - closes underlying IOs when sync_close is true closes underlying IOs when sync_close is true - stops access to underlying IOs stops access to underlying IOs - .pipe - with block creates a bidirectional pipe with block creates a bidirectional pipe - creates a bidirectional pipe creates a bidirectional pipe - #skip delegates to reader #skip delegates to reader - #sync_close? #sync_close? - loops back loops back - #skip_to_end delegates to reader #skip_to_end delegates to reader - #peek delegates to reader #peek delegates to reader - combines two IOs combines two IOs -XML::Builder - errors on invalid element names errors on invalid element names - #cdata - writes cdata with block writes cdata with block - escapes ]]> sequences escapes ]]> sequences - writes cdata writes cdata - writes element with attributes as hash writes element with attributes as hash - writes element with namespace writes element with namespace - writes element with attributes as named tuple writes element with attributes as named tuple - errors on invalid element name with prefix errors on invalid element name with prefix - errors on invalid element name with prefix and namespace errors on invalid element name with prefix and namespace - writes namespace writes namespace - writes attribute with namespace writes attribute with namespace - writes comment writes comment - sets indent with count sets indent with count - writes to IO writes to IO - writes document writes document - writes element with namespace writes element with namespace - errors on null byte errors on null byte - sets quote char sets quote char - writes to string writes to string - writes element with prefix writes element with prefix - writes attribute writes attribute - writes element with namespace, without block writes element with namespace, without block - writes element with attributes as hash, nesting writes element with attributes as hash, nesting - writes element writes element - sets indent with string sets indent with string - writes DTD with block writes DTD with block - writes nested element writes nested element - writes text writes text - writes comment with block writes comment with block - writes DTD writes DTD - writes element with attributes as named tuple, nesting writes element with attributes as named tuple, nesting -OAuth::AuthorizationHeader - builds builds -Log::TestFormatter - formats formats -String::Grapheme - #inspect #inspect - #== #== - .new .new - .break? .break? - #bytesize #bytesize - #to_s #to_s - #size #size -at_exit - changes final exit code when an handler raises an error changes final exit code when an handler raises an error - runs handlers on explicit program ending runs handlers on explicit program ending - runs all handlers maximum once runs all handlers maximum once - shows unhandled exceptions after at_exit handlers shows unhandled exceptions after at_exit handlers - allows handlers to change the exit code with explicit `exit` call (2) allows handlers to change the exit code with explicit `exit` call (2) - runs handlers on normal program ending runs handlers on normal program ending - prints unhandled exception with cause prints unhandled exception with cause - can get unhandled exception in at_exit handler can get unhandled exception in at_exit handler - allows at_exit inside at_exit allows at_exit inside at_exit - runs handlers in reverse order runs handlers in reverse order - allows handlers to change the exit code with explicit `exit` call allows handlers to change the exit code with explicit `exit` call -MIME - .from_extension .from_extension - .init - skips loading defaults skips loading defaults - loads defaults loads defaults - loads file loads file - .from_filename? - Path Path - String String - .from_extension? .from_extension? - .load_mime_database .load_mime_database - .from_filename - Path Path - String String - .extensions - recognizes overridden types recognizes overridden types - lists extensions lists extensions - returns empty set returns empty set - .register - fails for invalid extension fails for invalid extension - registers new type registers new type - parses media types parses media types -HTTP::Cookies - allows to iterate over the cookies allows to iterate over the cookies - allows retrieving the size of the cookies collection allows retrieving the size of the cookies collection - allows adding cookies and retrieving allows adding cookies and retrieving - .from_server_headers - parses Set-Cookie header parses Set-Cookie header - does not accept Cookie header does not accept Cookie header - adding response headers - uses encode_www_form on Set-Cookie value uses encode_www_form on Set-Cookie value - sets one Set-Cookie header per cookie sets one Set-Cookie header per cookie - overwrites all pre-existing Set-Cookie headers overwrites all pre-existing Set-Cookie headers - when no cookies are set - does not set a Set-Cookie header does not set a Set-Cookie header - allows deleting a particular cookie by key allows deleting a particular cookie by key - disallows adding inconsistent state disallows adding inconsistent state - adding request headers - use encode_www_form to write the cookie's value use encode_www_form to write the cookie's value - merges multiple cookies into one Cookie header merges multiple cookies into one Cookie header - overwrites a pre-existing Cookie header overwrites a pre-existing Cookie header - when no cookies are set - does not set a Cookie header does not set a Cookie header - .from_client_headers - parses Cookie header parses Cookie header - does not accept Set-Cookie header does not accept Set-Cookie header - allows clearing the cookies collection allows clearing the cookies collection - allows transform to hash allows transform to hash -HTTP::Client - will not retry when closed (block) (#12464) will not retry when closed (block) (#12464) - will not retry when closed (non-block) (#12464) will not retry when closed (non-block) (#12464) - tests connect_timeout tests connect_timeout - retry does not affect implicit compression (#11354) retry does not affect implicit compression (#11354) - ensures closing the response when breaking out of block ensures closing the response when breaking out of block - sends the host header ipv6 with brackets sends the host header ipv6 with brackets - from String - raises when not a host raises when not a host - sends a 'connection: close' header on one-shot request with block sends a 'connection: close' header on one-shot request with block - raises if URI is missing host raises if URI is missing host - tests read_timeout tests read_timeout - will not retry if IO::Error in request handling will not retry if IO::Error in request handling - logging - emit logs with block emit logs with block - emit logs emit logs - from URI - allows for specified ports allows for specified ports - detects HTTPS detects HTTPS - doesn't take context for HTTP doesn't take context for HTTP - raises error if URI is missing host raises error if URI is missing host - raises error if not http schema raises error if not http schema - has sane defaults has sane defaults - yields to a block yields to a block - keeps context keeps context - tests empty Content-Type tests empty Content-Type - cannot reconnect when initialized with IO cannot reconnect when initialized with IO - can be subclassed can be subclassed - will retry once on connection error will retry once on connection error - from a host - yields to a block yields to a block - will retry a broken socket will retry a broken socket - sends a 'connection: close' header on one-shot request sends a 'connection: close' header on one-shot request - works with IO works with IO - raises if URI is missing scheme raises if URI is missing scheme - can specify host and port when initialized with IO can specify host and port when initialized with IO - doesn't read the body if request was HEAD doesn't read the body if request was HEAD - tests write_timeout tests write_timeout - #set_defaults - sets default Host header sets default Host header -Process - .exec - gets error from exec gets error from exec - redirects STDIN and STDOUT to files redirects STDIN and STDOUT to files - #wait - successful exit code successful exit code - unsuccessful exit code unsuccessful exit code - .chroot - raises when unprivileged raises when unprivileged - .pgid .pgid - .on_terminate - compiles compiles - .fork - executes the new process with exec executes the new process with exec - #terminate #terminate - .on_interrupt - compiles compiles - .run - receives arguments in array receives arguments in array - does not run shell code in the argument list does not run shell code in the argument list - redirects output to /dev/null redirects output to /dev/null - allows passing huge argument lists to a shell allows passing huge argument lists to a shell - disallows passing arguments to nowhere disallows passing arguments to nowhere - forwards non-blocking file forwards non-blocking file - looks up programs in the $PATH with a shell looks up programs in the $PATH with a shell - forwards closed io forwards closed io - closes ios after block closes ios after block - runs true in block runs true in block - gets output gets output - sends input in IO sends input in IO - waits for the process waits for the process - does not execute batch files - .CmD .CmD - .Bat .Bat - .bat .bat - .BAT .BAT - .cmD .cmD - .cmd .cmd - sends output to IO sends output to IO - receives arguments in tuple receives arguments in tuple - can link processes together can link processes together - environ - overrides existing environment variable overrides existing environment variable - clears and sets an environment variable clears and sets an environment variable - clears the environment clears the environment - preserves existing environment variable preserves existing environment variable - sets an environment variable sets an environment variable - sets an empty environment variable sets an empty environment variable - deletes existing environment variable deletes existing environment variable - preserves and sets an environment variable preserves and sets an environment variable - controls process in block controls process in block - sets working directory with string sets working directory with string - sets working directory with path sets working directory with path - sends error to IO sends error to IO - .new - raises if command is not executable raises if command is not executable - raises if command doesn't exist raises if command doesn't exist - raises if command is not executable raises if command is not executable - accepts nilable string for `chdir` (#13767) accepts nilable string for `chdir` (#13767) - raises if command could not be executed raises if command could not be executed - .exists? .exists? - #signal(Signal::KILL) - kills many process kills many process - kills a process kills a process -Process - .quote_posix - assert assert - assert assert - assert assert - join - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert +StaticArray + reverse reverse + allows using negative indices allows using negative indices + #fill + replaces values in a subrange replaces values in a subrange + does map! does map! + does to_s does to_s + updates value updates value + shuffles with a seed shuffles with a seed + does map_with_index, with offset does map_with_index, with offset + creates with new creates with new + <=> + correctly compares two static arrays correctly compares two static arrays + rotate! assert assert assert assert - .parse_arguments - uses the native platform rules uses the native platform rules - .executable_path - searches executable searches executable - .parse_arguments_windows assert assert assert assert assert assert assert assert - raises an error if double quote is unclosed raises an error if double quote is unclosed assert assert assert assert assert assert @@ -19924,201 +19179,557 @@ assert assert assert assert assert assert + does map_with_index does map_with_index + == + compares empty compares empty + compares other compares other + compares elements compares elements + creates with new and value creates with new and value + raises index out of bounds on write raises index out of bounds on write + unstable_sort_by + sorts by sorts by + "#each" yielding "#each" yielding + #unstable_sort! + sort! with a block sort! with a block + sort! without block sort! without block + raises index out of bounds on read raises index out of bounds on read + clones clones + creates with new and block creates with new and block + does map_with_index!, with offset does map_with_index!, with offset + "#each_index" yielding "#each_index" yielding + #unstable_sort + sort without block sort without block + sort with a block sort with a block + values_at + returns the given indexes returns the given indexes + raises when passed an invalid index raises when passed an invalid index + does map_with_index! does map_with_index! + "#each" iterator "#each" iterator + #sort + sort with a block sort with a block + sort without block sort without block + "#each_index" iterator "#each_index" iterator + sort_by + sorts by sorts by + "#reverse_each" iterator "#reverse_each" iterator + shuffles shuffles + does map does map + unstable_sort_by! + calls given block exactly once for each element calls given block exactly once for each element + sorts by! sorts by! + sort_by! + calls given block exactly once for each element calls given block exactly once for each element + sorts by! sorts by! + "#reverse_each" yielding "#reverse_each" yielding + #sort! + sort! without block sort! without block + sort! with a block sort! with a block +String + .char_bytesize_at .char_bytesize_at +YAML::Nodes::Builder + #alias + as a scalar value + writes correctly writes correctly + within a mapping + writes correctly writes correctly + #merge + within a mapping + writes correctly writes correctly +Benchmark::IPS::Job + works in general / integration test works in general / integration test +Errno + .value .value + #message #message +Reference + clones with def_clone (recursive type) clones with def_clone (recursive type) + can dup class that inherits abstract class can dup class that inherits abstract class + should be false when negated should be false when negated + should not be nil should not be nil + does inspect does inspect + does inspect for class does inspect for class + clones with def_clone clones with def_clone + pretty_print pretty_print + calls #finalize on #dup'ed objects calls #finalize on #dup'ed objects + does to_s for class if virtual does to_s for class if virtual + dups dups + compares reference to other reference compares reference to other reference + returns itself returns itself + does to_s for class does to_s for class + does to_s does to_s +HTTP::WebSocketHandler + returns not found if the request is not an websocket upgrade returns not found if the request is not an websocket upgrade + gives upgrade response for websocket upgrade request with 'keep-alive, Upgrade' request gives upgrade response for websocket upgrade request with 'keep-alive, Upgrade' request + returns upgrade required if Sec-WebSocket-Version is invalid returns upgrade required if Sec-WebSocket-Version is invalid + returns bad request if Sec-WebSocket-Key is missing returns bad request if Sec-WebSocket-Key is missing + returns not found if the request Upgrade is invalid returns not found if the request Upgrade is invalid + gives upgrade response for case-insensitive 'WebSocket' upgrade request gives upgrade response for case-insensitive 'WebSocket' upgrade request + returns upgrade required if Sec-WebSocket-Version is missing returns upgrade required if Sec-WebSocket-Version is missing + gives upgrade response for websocket upgrade request with 'Upgrade' request gives upgrade response for websocket upgrade request with 'Upgrade' request +Spec::RootContext + #run_filters + by pattern + on a context on a context + on an example on an example + by anti_tags + on an example on an example + on a context on a context + by tags + on a context on a context + on an example on an example + by line + on a context's end line' on a context's end line' + on an example's start line on an example's start line + on an example's end line on an example's end line + between examples between examples + on a context's start line' on a context's start line' + in an example in an example + by focus + on a context on a context + on an example on an example + by locations + between examples between examples + on an example's end line on an example's end line + on a context's end line' on a context's end line' + on an example's start line on an example's start line + in an example in an example + on a context's start line' on a context's start line' +Mutex + unchecked + can lock and unlock from multiple fibers can lock and unlock from multiple fibers + locks and unlocks locks and unlocks + reentrant + can be locked many times from the same fiber can be locked many times from the same fiber + can't be unlocked by another fiber can't be unlocked by another fiber + raises if unlocks without lock raises if unlocks without lock + works with multiple threads works with multiple threads + checked + raises if locked recursively raises if locked recursively + raises if unlocks without lock raises if unlocks without lock + can't be unlocked by another fiber can't be unlocked by another fiber +Spec matchers + should work like describe + is true is true + should be_falsey + passes for false passes for false + passes for nil passes for nil + pending block is not compiled + pending has block with valid syntax, but invalid semantics pending has block with valid syntax, but invalid semantics + detects a nesting `pending` detects a nesting `pending` + detects a nesting `it` detects a nesting `it` + should_not contain + does not pass when string does not includes? specified substring does not pass when string does not includes? specified substring + passes when string does not includes? specified substring passes when string does not includes? specified substring + should_not be_falsey + passes for true passes for true + passes for some non-nil, non-false value passes for some non-nil, non-false value + should be_truthy + passes for true passes for true + passes for some non-nil, non-false value passes for some non-nil, non-false value + should contain + works with array works with array + does not pass when string does not includes? specified substring does not pass when string does not includes? specified substring + passes when string includes? specified substring passes when string includes? specified substring + works with set works with set + works with range works with range + be_nil + passes for nil passes for nil + does not pass for overwritten `==` does not pass for overwritten `==` + expect_raises + return exception return exception + should_not be_truthy + passes for false passes for false + passes for nil passes for nil +Array + find the index by using binary search find the index by using binary search + does map does map + to_s + does to_s does to_s + does with recursive does with recursive + rejects! with pattern rejects! with pattern + delete + delete not found delete not found + deletes many deletes many + shuffle + shuffle! shuffle! + shuffle with random shuffle with random + shuffle shuffle + shuffle! with random shuffle! with random + inspect assert assert + does each while modifying array does each while modifying array + does map_with_index, with offset does map_with_index, with offset + "#cycle" yielding "#cycle" yielding + does reverse! with an odd number of elements does reverse! with an odd number of elements + [] + gets on exclusive range gets on exclusive range + gets on range without begin gets on range without begin + raises on index out of bounds with range without end raises on index out of bounds with range without end + gets on positive index gets on positive index + gets on range with start higher than negative end gets on range with start higher than negative end + raises on index out of bounds with start and count raises on index out of bounds with start and count + gets on range without end gets on range without end + gets on range with start higher than end gets on range with start higher than end + gets on exclusive range with negative indices gets on exclusive range with negative indices + gets on inclusive range with negative indices gets on inclusive range with negative indices + gets with start and count exceeding size gets with start and count exceeding size + gets 0, 0 on empty array gets 0, 0 on empty array + raises on negative count raises on negative count + doesn't exceed limits doesn't exceed limits + raises on negative count on empty Array raises on negative count on empty Array + raises on too negative left bound raises on too negative left bound + gets with start and count gets with start and count + gets 0 ... 0 on empty array gets 0 ... 0 on empty array + raises on index out of bounds raises on index out of bounds + raises on index out of bounds with range raises on index out of bounds with range + returns empty if at end returns empty if at end + raises on negative count raises on negative count + gets on inclusive range gets on inclusive range + gets on negative index gets on negative index + gets with negative start gets with negative start + new + creates with default value creates with default value + raises on negative count raises on negative count + raises on negative capacity raises on negative capacity + creates with default value in block creates with default value in block + rindex + performs with a block and offset performs with a block and offset + performs with a block performs with a block + performs without a block performs without a block + performs without a block and an offset performs without a block and an offset + find the element by using binary search find the element by using binary search + does reverse with an even number of elements does reverse with an even number of elements + sort + #sort_by + stable sort stable sort + sorts sorts + unpacks tuple unpacks tuple + #sort! + without block without block + stable sort with a block stable sort with a block + stable sort without a block stable sort without a block + with a block with a block + #unstable_sort! + with a block with a block + without block without block + #sort_by! + stable sort stable sort + sorts sorts + calls given block exactly once for each element calls given block exactly once for each element + #unstable_sort + with a block with a block + without block without block + #unstable_sort_by! + sorts sorts + calls given block exactly once for each element calls given block exactly once for each element + #sort + without block without block + stable sort without a block stable sort without a block + with a block with a block + stable sort with a block stable sort with a block + #unstable_sort_by + sorts sorts + unpacks tuple unpacks tuple + doesn't overflow buffer with Array.new(size, value) (#1209) doesn't overflow buffer with Array.new(size, value) (#1209) + does compact_map does compact_map + first + returns a sub array with given number of elements returns a sub array with given number of elements + gets first when non empty gets first when non empty + raises when empty raises when empty + "#reverse_each" iterator "#reverse_each" iterator + #truncate + raises on out of bound index raises on out of bound index + truncates with index == size and count truncates with index == size and count + truncates with index and count == 0 truncates with index and count == 0 + truncates with index and count truncates with index and count + truncates with range truncates with range + raises on negative count raises on negative count + truncates with index and count, not enough elements truncates with index and count, not enough elements + truncates with index < 0 and count truncates with index < 0 and count + does dup does dup + shift + raises when empty raises when empty + shifts all after pop shifts all after pop + shifts more than what is available shifts more than what is available + shifts all with shift(n) shifts all with shift(n) + pops after shift pops after shift + shifts one and resizes shifts one and resizes + shifts all shifts all + shifts and then concats Enumerable shifts and then concats Enumerable + shifts negative count raises shifts negative count raises + shifts almost all and then avoid resize shifts almost all and then avoid resize + shifts many elements shifts many elements + shifts when non empty shifts when non empty + shifts and then concats Array shifts and then concats Array + does * does * + unshift + repeated unshift/pop does not exhaust memory (#10748) repeated unshift/pop does not exhaust memory (#10748) + unshifts multiple elements to an empty array unshifts multiple elements to an empty array + unshifts one element unshifts one element + unshift of large array does not corrupt elements unshift of large array does not corrupt elements + unshifts one elements three times unshifts one elements three times + repeated unshift/clear does not exhaust memory repeated unshift/clear does not exhaust memory + unshifts multiple elements unshifts multiple elements + repeated unshift/shift does not exhaust memory repeated unshift/shift does not exhaust memory + unshifts one element multiple times unshifts one element multiple times + unshifts after shift unshifts after shift + unshifts many after many shifts unshifts many after many shifts + []= + sets on negative index sets on negative index + reuses the buffer if possible reuses the buffer if possible + resizes the buffer if capacity is not enough resizes the buffer if capacity is not enough + replaces a subrange with an array replaces a subrange with an array + replaces entire range with an array for empty array (#8341) replaces entire range with an array for empty array (#8341) + pushes a new value with []=(...) pushes a new value with []=(...) + replaces a subrange with a single value replaces a subrange with a single value + replaces entire range with a value for empty array (#8341) replaces entire range with a value for empty array (#8341) + sets on positive index sets on positive index + optimizes when index is 0 optimizes when index is 0 + concats a new array with []=(...) concats a new array with []=(...) + uniq + uniqs with true uniqs with true + uniqs large array uniqs large array + uniqs without block uniqs without block + uniqs with block uniqs with block + insert + inserts with positive index inserts with positive index + inserts out of range inserts out of range + inserts with negative index (2) inserts with negative index (2) + inserts with negative index inserts with negative index + "#each_index" yielding "#each_index" yielding + does + with empty tuple converted to array (#909) does + with empty tuple converted to array (#909) + pop + pops negative count raises pops negative count raises + pops when non empty pops when non empty + pops more elements that what is available pops more elements that what is available + raises when empty raises when empty + pops many elements pops many elements + "#cycle" iterator "#cycle" iterator + does compact does compact + zip + when a block is provided + works with iterable works with iterable + works with iterator works with iterator + yields pairs of self's elements and passed array yields pairs of self's elements and passed array + when no block is provided + and the arrays have different typed elements + works with iterator works with iterator + works with iterable works with iterable + zips three things zips three things + zips union type (#8608) zips union type (#8608) + returns an array of paired elements (tuples) returns an array of paired elements (tuples) + does each_index does each_index + does clone does clone + #fill + replaces values in a subrange replaces values in a subrange + - + does with even larger arrays does with even larger arrays + with different types + small array small array + big array big array + does with larger array coming second does with larger array coming second + does it does it + #replace + clears unused elements if new size is smaller clears unused elements if new size is smaller + reuses the buffer if possible reuses the buffer if possible + resizes the buffer if capacity is not enough resizes the buffer if capacity is not enough + replaces all elements replaces all elements + uniq! + uniqs with block uniqs with block + uniqs with true uniqs with true + uniqs without block uniqs without block + uniqs large array uniqs large array + flattens flattens + does compact_map with false does compact_map with false + does clear does clear + rejects! rejects! + does map! does map! + "#each_index" iterator "#each_index" iterator + concat + concats large arrays concats large arrays + concats enumerable concats enumerable + concats a union of arrays concats a union of arrays + concats indexable concats indexable + concats enumerable to empty array (#2047) concats enumerable to empty array (#2047) + concats small arrays concats small arrays + zip? + when no block is provided + and the arrays have different typed elements + and size of an arg is less than receiver + works with iterator works with iterator + zips three things zips three things + works with iterable works with iterable + zips union type (#8608) zips union type (#8608) + returns an array of paired elements (tuples with nil) returns an array of paired elements (tuples with nil) + when a block is provided + and size of an arg is less than receiver + works with iterator works with iterator + works with iterable works with iterable + yields pairs of self's elements and passed array (with nil) yields pairs of self's elements and passed array (with nil) + | + small arrays small arrays + large arrays large arrays + does clone with recursive array does clone with recursive array + transpose + transposes array of tuples transposes array of tuples + transposes empty array transposes empty array + transposes elements transposes elements + transposes union of arrays transposes union of arrays + raises IndexError error when size of element is invalid raises IndexError error when size of element is invalid + does + does + + last + gets last when non empty gets last when non empty + returns a sub array with given number of elements returns a sub array with given number of elements + raises when empty raises when empty + does product with block does product with block + does hash does hash + empty + is empty is empty + is not empty is not empty + values_at + works with mixed types works with mixed types + returns the given indexes returns the given indexes + raises when passed an invalid index raises when passed an invalid index + size + has size 0 has size 0 + has size 2 has size 2 + #skip #skip + Array.product + with array with array + with splat with splat + []? + gets with range without beginning gets with range without beginning + gets with start and count gets with start and count + gets with range without end gets with range without end + gets with range gets with range + gets with index gets with index + does update does update + "#reverse_each" yielding "#reverse_each" yielding + rotate + rotate! rotate! assert assert assert assert assert assert assert assert assert assert - .parse_arguments_posix assert assert - raises an error when double quote is unclosed raises an error when double quote is unclosed assert assert assert assert assert assert assert assert assert assert - raises an error if single quote is unclosed raises an error if single quote is unclosed assert assert assert assert assert assert assert assert assert assert assert assert + rotate rotate assert assert assert assert - .quote_windows assert assert + push + has the << alias has the << alias + pushes multiple elements to an empty array pushes multiple elements to an empty array + pushes multiple elements pushes multiple elements + pushes one element pushes one element + Array.each_product + 2 arrays 2 arrays + 2 arrays different types 2 arrays different types + single array single array + more arrays, reuse = true more arrays, reuse = true + more arrays more arrays + with splat with splat + one empty array one empty array + selects! with pattern selects! with pattern + does product without block does product without block + does map_with_index! does map_with_index! + does <=> does <=> + swap + swaps but raises out of bounds on left swaps but raises out of bounds on left + swaps with negative indices swaps with negative indices + swaps but raises out of bounds on right swaps but raises out of bounds on right + swaps swaps + does each index while modifying array does each index while modifying array + index + performs with a block performs with a block + raises if out of bounds raises if out of bounds + performs without a block performs without a block + performs with a block and offset performs with a block and offset + performs without a block and offset performs without a block and offset + capacity re-sizing + initializes an array capacity to INITIAL_CAPACITY initializes an array capacity to INITIAL_CAPACITY + doubles capacity for arrays smaller than CAPACITY_THRESHOLD doubles capacity for arrays smaller than CAPACITY_THRESHOLD + uses slow growth heuristic for arrays larger than CAPACITY_THRESHOLD uses slow growth heuristic for arrays larger than CAPACITY_THRESHOLD + does map_with_index!, with offset does map_with_index!, with offset + builds from buffer builds from buffer + does reverse! with an even number of elements does reverse! with an even number of elements + insert_all + inserts with index 0 inserts with index 0 + inserts with negative index inserts with negative index + inserts when empty inserts when empty + inserts when other is empty inserts when other is empty + inserts indexable inserts indexable + raises with negative index greater than size raises with negative index greater than size + inserts with positive index inserts with positive index + inserts with negative index (2) inserts with negative index (2) + raises with index greater than size raises with index greater than size + inserts with index of #size inserts with index of #size + == + compares elements compares elements + compares other compares other + compares empty compares empty + "#cycle(limit)" yielding "#cycle(limit)" yielding + repeated_permutations assert assert - join - assert assert - assert assert - assert assert assert assert + accepts a block accepts a block assert assert assert assert assert assert + yielding dup of arrays yielding dup of arrays assert assert + yields with reuse = array yields with reuse = array + yields with reuse = true yields with reuse = true assert assert assert assert assert assert -Float::Printer::DiyFP - converts ordered 32 converts ordered 32 - multiply multiply - converts max f64 converts max f64 - converts min f64 converts min f64 - converts min f32 converts min f32 - multiply rounding multiply rounding - converts ordered 64 converts ordered 64 - normalizes max f64 normalizes max f64 - converts max f32 converts max f32 - normalizes ordered normalizes ordered - multiply rounding multiply rounding - multiply big numbers multiply big numbers - multiply multiply - normalizes min f64 normalizes min f64 -Compress::Zlib - write read should be inverse with random string write read should be inverse with random string - write read should be inverse (utf-8) write read should be inverse (utf-8) -YAML::Any - is enumerable is enumerable - dups dups - compares to other objects compares to other objects - #[] - of array of array - hash - fetches Hash(YAML::Any, YAML::Any) fetches Hash(YAML::Any, YAML::Any) - fetches Time fetches Time - fetches Bool fetches Bool - fetches Nil fetches Nil - fetches Array(YAML::Any) fetches Array(YAML::Any) - fetches Int64 fetches Int64 - fetches Float64 fetches Float64 - fetches String fetches String - fetches Slice(UInt8) fetches Slice(UInt8) - fetches Set(YAML::Any) fetches Set(YAML::Any) - returns array of any when doing parse all returns array of any when doing parse all - can compare with === can compare with === - traverses big structure traverses big structure - #dig? - returns nil if not found returns nil if not found - returns nil for non-Hash/Array intermediary values returns nil for non-Hash/Array intermediary values - gets the value at given path given splat gets the value at given path given splat + does map_with_index does map_with_index + does equals? with custom block does equals? with custom block + & + small arrays small arrays + big arrays big arrays + "#each" iterator "#each" iterator + "#each" yielding "#each" yielding + "#cycle(limit)" iterator "#cycle(limit)" iterator + first? + gets first? when non empty gets first? when non empty + gives nil when empty gives nil when empty + delete_at + deletes at beginning is same as shift deletes at beginning is same as shift + deletes with index and count deletes with index and count + deletes positive index deletes positive index + returns empty if at end returns empty if at end + deletes negative index with range deletes negative index with range + deletes use range deletes use range + deletes negative index deletes negative index + deletes out of bounds deletes out of bounds + deletes negative index with range, out of bounds deletes negative index with range, out of bounds + does compact! does compact! + selects! selects! + does reverse with an odd number of elements does reverse with an odd number of elements + does + with different types (#568) does + with different types (#568) +OpenSSL::SSL::Server + .open .open + #accept? + accepts accepts + don't sync_close don't sync_close + #accept + doesn't to SSL handshake with start_immediately = false doesn't to SSL handshake with start_immediately = false + accepts and do handshake accepts and do handshake + sync_close sync_close .new .new - #to_json #to_json - clones clones - exposes $~ when doing Regex#=== exposes $~ when doing Regex#=== - #size - of hash of hash - of array of array - casts - gets float64 gets float64 - gets float64 from JSON integer (#8618) gets float64 from JSON integer (#8618) - gets float32 gets float32 - gets yes/no unquoted booleans gets yes/no unquoted booleans - doesn't get quoted numbers doesn't get quoted numbers - gets nil gets nil - gets array gets array - gets hash gets hash - gets int32 gets int32 - gets int64 gets int64 - gets time gets time - gets anchor gets anchor - gets bool gets bool - gets float32 from JSON integer (#8618) gets float32 from JSON integer (#8618) - gets string gets string - gets bytes gets bytes - dig - gets the value at given path given splat gets the value at given path given splat - raises if not found raises if not found - #[]? - of hash with integer keys of hash with integer keys - hash - fetches Bool fetches Bool - fetches Int64 fetches Int64 - fetches Set(YAML::Any) fetches Set(YAML::Any) - fetches Nil fetches Nil - fetches Array(YAML::Any) fetches Array(YAML::Any) - fetches Hash(YAML::Any, YAML::Any) fetches Hash(YAML::Any, YAML::Any) - fetches String fetches String - fetches Slice(UInt8) fetches Slice(UInt8) - fetches Time fetches Time - fetches Float64 fetches Float64 - of array of array - of hash of hash -Digest::SHA1 - does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" - resets resets - can't call #final more than once can't call #final more than once - does digest for "" does digest for "" - does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" - resets resets - does digest for "a" in a block does digest for "a" in a block - #hexdigest can update within a loop by indirect expr (#9483) #hexdigest can update within a loop by indirect expr (#9483) - does base64digest for "0123456701234567012345670123456701234567012345670123456701234567" does base64digest for "0123456701234567012345670123456701234567012345670123456701234567" - does hexdigest for "The quick brown fox jumps over the lazy dog" does hexdigest for "The quick brown fox jumps over the lazy dog" - resets resets - does digest for "The quick brown fox jumps over the lazy dog" in a block does digest for "The quick brown fox jumps over the lazy dog" in a block - does hexdigest for "fooø" does hexdigest for "fooø" - context are independent context are independent - does base64digest for "" does base64digest for "" - can't call #final more than once can't call #final more than once - can't call #final more than once can't call #final more than once - does digest for "abc" does digest for "abc" - does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block - can't call #final more than once can't call #final more than once - does digest for "abc" in a block does digest for "abc" in a block - does hexdigest for "a" does hexdigest for "a" - does base64digest for "fooø" does base64digest for "fooø" - does base64digest for "The quick brown fox jumps over the lazy dog" does base64digest for "The quick brown fox jumps over the lazy dog" - does base64digest for "abc" does base64digest for "abc" - does digest for "fooø" does digest for "fooø" - returns the digest_size returns the digest_size - does hexdigest for "abc" does hexdigest for "abc" - resets resets - #hexdigest can update within a loop from explicit expr (#9483) #hexdigest can update within a loop from explicit expr (#9483) - digest with file content digest with file content - resets resets - can't call #final more than once can't call #final more than once - .dup - preserves type preserves type - leads to not sharing state leads to not sharing state - leads to deterministic updates leads to deterministic updates - preserves value preserves value - does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" - does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567" does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567" - can't call #final more than once can't call #final more than once - resets resets - does digest for "a" does digest for "a" - resets resets - does digest for "fooø" in a block does digest for "fooø" in a block - does base64digest for "a" does base64digest for "a" - does digest for "The quick brown fox jumps over the lazy dog" does digest for "The quick brown fox jumps over the lazy dog" - does digest for "0123456701234567012345670123456701234567012345670123456701234567" does digest for "0123456701234567012345670123456701234567012345670123456701234567" - does hexdigest for "" does hexdigest for "" - can't call #final more than once can't call #final more than once - does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block - does digest for "" in a block does digest for "" in a block -.__powisf2 .__powisf2 -OAuth::Params - builds builds -__floatuntisf - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + detects SNI hostname detects SNI hostname +__mulosi4 passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests @@ -20145,154 +19756,6 @@ passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests -Process::Status - #signal_exit? with signal code #signal_exit? with signal code - equality equality - #signal_exit? #signal_exit? - #normal_exit? with signal code #normal_exit? with signal code - #exit_reason - returns FloatException returns FloatException - returns Normal returns Normal - returns BadInstruction returns BadInstruction - returns SessionEnded returns SessionEnded - returns Interrupted returns Interrupted - returns Breakpoint returns Breakpoint - returns BadMemoryAccess returns BadMemoryAccess - returns AccessViolation returns AccessViolation - returns Aborted returns Aborted - returns TerminalDisconnected returns TerminalDisconnected - #exit_signal #exit_signal - #inspect - with exit status with exit status - with exit signal with exit signal - #success? #success? - #to_s - with exit signal with exit signal - with exit status with exit status - #normal_exit? #normal_exit? - #exit_code #exit_code -ECR - does with <%= -%> does with <%= -%> - does ECR.def_to_s does ECR.def_to_s - does with <%- %> (1) does with <%- %> (1) - does with <%% %> does with <%% %> - does with <%- %> (2) does with <%- %> (2) - builds a crystal program from a source builds a crystal program from a source - does with <% -%> does with <% -%> - .render .render - does with -% inside string does with -% inside string -Pointer - copies/move with different types copies/move with different types - compares two pointers by address compares two pointers by address - maps! maps! - does to_s does to_s - performs arithmetic with u32 performs arithmetic with u32 - realloc - raises on negative count raises on negative count - memcmp - assert assert - does malloc with value does malloc with value - clear - clears many clears many - clears one clears one - clears with union clears with union - clones clones - does malloc with value from block does malloc with value from block - copy_to - doesn't raise OverflowError on unsigned size and different target type doesn't raise OverflowError on unsigned size and different target type - raises on negative count raises on negative count - copies to union of pointers copies to union of pointers - performs performs - does index with count does index with count - maps_with_index! maps_with_index! - shuffles! shuffles! - move_to - moves to union of pointers moves to union of pointers - performs with overlap right to left performs with overlap right to left - raises on negative count raises on negative count - performs with overlap left to right performs with overlap left to right - maps_with_index!, with offset maps_with_index!, with offset - move_from - moves from union of pointers moves from union of pointers - performs with overlap left to right performs with overlap left to right - performs with overlap right to left performs with overlap right to left - raises on negative count raises on negative count - copy_from - performs performs - raises on negative count raises on negative count - copies from union of pointers copies from union of pointers - raises if mallocs negative size raises if mallocs negative size - does ! does ! - creates from int creates from int - performs arithmetic with u64 performs arithmetic with u64 -Thread::ConditionVariable - signals & broadcasts signals & broadcasts - timeouts timeouts - signals signals - resumes before timeout resumes before timeout -Random - generates full-range by negation generates full-range by negation - generates by accumulation generates by accumulation - float number float number - does with inclusive range does with inclusive range - hex - gets hex with default number of digits gets hex with default number of digits - gets hex with requested number of digits gets hex with requested number of digits - allows creating a new default random with a seed allows creating a new default random with a seed - random_bytes - generates random bytes generates random bytes - gets random bytes with requested number of digits gets random bytes with requested number of digits - gets random bytes with default number of digits gets random bytes with default number of digits - fills given buffer with random bytes fills given buffer with random bytes - raises on invalid float number raises on invalid float number - limited Float32 number limited Float32 number - does with BigInt range does with BigInt range - base64 - gets base64 with default number of digits gets base64 with default number of digits - gets base64 with requested number of digits gets base64 with requested number of digits - urlsafe_base64 - keeps padding keeps padding - gets urlsafe base64 with requested number of digits gets urlsafe base64 with requested number of digits - gets urlsafe base64 with default number of digits gets urlsafe base64 with default number of digits - generates full-range by truncation generates full-range by truncation - generates full-range generates full-range - limited large BigInt limited large BigInt - does with inclusive range of floats does with inclusive range of floats - does with exclusive range does with exclusive range - does with exclusive range of floats does with exclusive range of floats - generates full-range by accumulation generates full-range by accumulation - limited Float64 number limited Float64 number - generates by truncation generates by truncation - returns a random integer returns a random integer - raises on invalid number raises on invalid number - works using U/Int128 works using U/Int128 - limited number limited number - gets a random bool gets a random bool - limited BigInt limited BigInt - raises on invalid range - Int32 range Int32 range - Float64 range Float64 range - BigInt range BigInt range - allows creating a new default random allows creating a new default random - returns a random static array returns a random static array - works with span exceeding int type's range works with span exceeding int type's range -ECR::Lexer - lexes with <%= -%> lexes with <%= -%> - lexes with <%%= %> lexes with <%%= %> - lexes with <% -%> lexes with <% -%> - lexes with <%-% %> (#14734) lexes with <%-% %> (#14734) - lexes with <%- %> lexes with <%- %> - lexes with <%-%= %> (#14734) lexes with <%-%= %> (#14734) - lexes with <%# -%> lexes with <%# -%> - lexes with <%= %> lexes with <%= %> - lexes with <% %> lexes with <% %> - lexes with <% %> and correct location info lexes with <% %> and correct location info - lexes with -% inside string lexes with -% inside string - lexes with <%% -%> (#14734) lexes with <%% -%> (#14734) - lexes with <%# %> lexes with <%# %> - lexes with <%% %> lexes with <%% %> - lexes without interpolation lexes without interpolation -__muloti4 passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests @@ -20320,6 +19783,58 @@ passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests +.__ashrti3 .__ashrti3 +OpenSSL::X509::Name + parse parse + add_entry add_entry +HTTP::FormData::Builder + #field + converts value to a string converts value to a string + builds valid form-data messages builds valid form-data messages + #content_type + calculates the content type calculates the content type + #file + fails after finish fails after finish + #finish + fails when no body parts fails when no body parts + fails after finish fails after finish +System::User + .find_by(*, id) + returns a user by id returns a user by id + raises on nonexistent user id raises on nonexistent user id + #id + is the same as the source ID is the same as the source ID + #home_directory + calls without raising calls without raising + .find_by?(*, id) + returns nil on nonexistent user id returns nil on nonexistent user id + returns a user by id returns a user by id + #to_s + returns a string representation returns a string representation + .find_by(*, name) + raises on a nonexistent user raises on a nonexistent user + returns a user by name returns a user by name + #name + calls without raising calls without raising + #shell + calls without raising calls without raising + #username + is the same as the source name is the same as the source name + #group_id + calls without raising calls without raising + .find_by?(*, name) + returns nil on nonexistent user returns nil on nonexistent user + returns a user by name returns a user by name +UUID + serializes + #to_yaml #to_yaml + #from_yaml #from_yaml +Crypto::Bcrypt::Base64 + decodes decodes + encodes encodes +Syscall + can call into the system successfully can call into the system successfully +__fixunsdfti passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests @@ -20341,6 +19856,74 @@ passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests +JSON::Parser + parses false parses false + prevents stack overflow for hashes prevents stack overflow for hashes + parses {} parses {} + raises on parse "hello +world" raises on parse "hello +world" + raises on parse [1 true] raises on parse [1 true] + parses {"foo": 1, "bar": 1.5} parses {"foo": 1, "bar": 1.5} + raises on parse {"foo": 1,} raises on parse {"foo": 1,} + parses [] parses [] + raises on parse {1} raises on parse {1} + parses [false] parses [false] + raises on parse [1,] raises on parse [1,] + parses [[1]] parses [[1]] + raises on parse {"foo": 1 "bar": 2} raises on parse {"foo": 1 "bar": 2} + parses {"fo\no": 1} parses {"fo\no": 1} + raises on parse 1� raises on parse 1� + raises on parse "\u201cello world" raises on parse "\u201cello world" + raises on parse [2.] raises on parse [2.] + raises on parse [0] 1 raises on parse [0] 1 + parses {"foo": 1} parses {"foo": 1} + parses [{"foo": 1}] parses [{"foo": 1}] + parses [null] parses [null] + parses [1] parses [1] + parses ["hello"] parses ["hello"] + parses 1 parses 1 + parses [true] parses [true] + parses [ 0 ] parses [ 0 ] + raises on parse [0]1 raises on parse [0]1 + raises on parse ["\u123z"] raises on parse ["\u123z"] + parses ["日"] parses ["日"] + parses [1, 2, 3] parses [1, 2, 3] + parses 2.5 parses 2.5 + parses [1.5] parses [1.5] + returns raw returns raw + prevents stack overflow for arrays prevents stack overflow for arrays + raises on parse "{"foo":} raises on parse "{"foo":} + parses "\nПривет, мир!" parses "\nПривет, мир!" + parses true parses true + parses "hello" parses "hello" + parses [0] parses [0] + raises on parse {"foo"1} raises on parse {"foo"1} + parses null parses null + raises on parse "hello world" raises on parse "hello world" + raises on parse "\u201cello +world" raises on parse "\u201cello +world" +buffered + cannot send if closed cannot send if closed + can be closed from different fiber can be closed from different fiber + works with select works with select + can be closed after sending can be closed after sending + does inspect on buffered channel does inspect on buffered channel + gets ready with data gets ready with data + pings pings + can send and receive nil can send and receive nil + does pretty_inspect on unbuffered channel does pretty_inspect on unbuffered channel + can be closed can be closed + blocks when full blocks when full + can receive? when closed can receive? when closed + does pretty_inspect on buffered channel does pretty_inspect on buffered channel + does inspect on unbuffered channel does inspect on unbuffered channel + can send successfully without raise can send successfully without raise + doesn't block when not full doesn't block when not full + can receive? when not empty can receive? when not empty +.__multi3 .__multi3 +__fixunssfti passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests @@ -20359,533 +19942,510 @@ passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests -expectations - be_close - assert assert - assert assert - be_nil - assert assert - restricts type on should_not restricts type on should_not - assert assert - assert assert - be_true - assert assert - assert assert - assert assert - assert assert - start_with - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - expect_raises - pass if raises MyError pass if raises MyError - be_falsey - assert assert - assert assert - assert assert - assert assert - eq - assert assert - assert assert - accept a custom failure message - assert assert - assert assert - contain - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - be - works with module type (#14920) works with module type (#14920) - assert assert - assert assert - works with type that does not implement `#object_id` works with type that does not implement `#object_id` - match - assert assert - assert assert - assert assert - end_with - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - be - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - be_a - assert assert - assert assert - restricts type on should_not restricts type on should_not - assert assert - restricts type on should restricts type on should - assert assert - empty - assert assert - assert assert +ECR + does with -% inside string does with -% inside string + does with <% -%> does with <% -%> + builds a crystal program from a source builds a crystal program from a source + does ECR.def_to_s does ECR.def_to_s + does with <%- %> (1) does with <%- %> (1) + does with <%- %> (2) does with <%- %> (2) + does with <%= -%> does with <%= -%> + .render .render + does with <%% %> does with <%% %> +colorize + colorizes foreground with background with mode colorizes foreground with background with mode + colorizes foreground with 8-bit color colorizes foreground with 8-bit color + colorizes with surround and no reset colorizes with surround and no reset + colorizes background with true color colorizes background with true color + colorizes background with 8-bit color colorizes background with 8-bit color + colorizes background colorizes background + colorizes foreground with background colorizes foreground with background + raises on unknown foreground color raises on unknown foreground color + colorizes mode colorizes mode + raises on unknown background color raises on unknown background color + colorizes with to_s colorizes with to_s + colorizes foreground colorizes foreground + inspects inspects + colorizes foreground with symbol colorizes foreground with symbol + colorizes with surround and default colorizes with surround and default + colorizes mode combination colorizes mode combination + colorizes with surround colorizes with surround + colorizes mode with symbol colorizes mode with symbol + toggles off toggles off + colorizes with surround and reset colorizes with surround and reset + colorizes without change colorizes without change + colorizes foreground with true color colorizes foreground with true color + toggles off and on toggles off and on +INI + parse + from String + parses sections parses sections + parses key = value parses key = value + fails on malformed declaration fails on malformed declaration + ignores comments ignores comments + ignores whitespaces ignores whitespaces + fails on data after section fails on data after section + fails on malformed section fails on malformed section + parses empty values parses empty values + parses empty section parses empty section + parses a reopened section parses a reopened section + from IO + parses a file parses a file + build to an INI-formatted output + builds with no sections builds with no sections + builds from a Hash builds from a Hash + builds an empty section before non-empty sections builds an empty section before non-empty sections + builds with no spaces around `=` builds with no spaces around `=` + builds from a NamedTuple builds from a NamedTuple +Random::ISAAC + generates random numbers as generated official implementation generates random numbers as generated official implementation + different instances generate different numbers (#7976) different instances generate different numbers (#7976) + can be initialized without explicit seed can be initialized without explicit seed +ECR::Lexer + lexes with <%- %> lexes with <%- %> + lexes with <% -%> lexes with <% -%> + lexes with -% inside string lexes with -% inside string + lexes with <%= -%> lexes with <%= -%> + lexes without interpolation lexes without interpolation + lexes with <%% -%> (#14734) lexes with <%% -%> (#14734) + lexes with <% %> and correct location info lexes with <% %> and correct location info + lexes with <%%= %> lexes with <%%= %> + lexes with <%-% %> (#14734) lexes with <%-% %> (#14734) + lexes with <%# %> lexes with <%# %> + lexes with <%= %> lexes with <%= %> + lexes with <%-%= %> (#14734) lexes with <%-%= %> (#14734) + lexes with <% %> lexes with <% %> + lexes with <%# -%> lexes with <%# -%> + lexes with <%% %> lexes with <%% %> +Spec::TAPFormatter + reports failures reports failures + reports mixed results reports mixed results + reports successful results reports successful results + reports errors reports errors + reports pending reports pending +Digest::MD5 + #hexdigest can update within a loop from explicit expr (#9483) #hexdigest can update within a loop from explicit expr (#9483) + calculates hash from unicode string calculates hash from unicode string + return the digest size return the digest size + digest with file content digest with file content + calculates hash from string calculates hash from string + #hexdigest can update within a loop by indirect expr (#9483) #hexdigest can update within a loop by indirect expr (#9483) + context are independent context are independent + calculates digest from string calculates digest from string + can't call final twice can't call final twice + can take a block can take a block + #hexfinal #hexfinal + calculates hash from UInt8 slices calculates hash from UInt8 slices + resets resets + calculates hash of #to_slice calculates hash of #to_slice + calculates base64'd hash from string calculates base64'd hash from string + .dup + preserves value preserves value + preserves type preserves type + leads to not sharing state leads to not sharing state + leads to deterministic updates leads to deterministic updates +Slice + "#reverse_each" yielding "#reverse_each" yielding + does to_s does to_s + .move_to(Slice) + moves most src.size moves most src.size + handles intersecting ranges handles intersecting ranges + raises if dst is smaller raises if dst is smaller + moves bytes moves bytes + does map does map + .copy_from(Slice) + copies at most src.size copies at most src.size + raises if dst is smaller raises if dst is smaller + copies bytes copies bytes + "#each_index" iterator "#each_index" iterator + does Bytes[] does Bytes[] + #+(Int) #+(Int) + does map_with_index does map_with_index + .move_from(Slice) + moves bytes moves bytes + handles intersecting ranges handles intersecting ranges + moves at most src.size moves at most src.size + raises if dst is smaller raises if dst is smaller + #to_unsafe_bytes + reinterprets a slice's elements as bytes reinterprets a slice's elements as bytes + #hexdump + works for empty slice works for empty slice + works for Bytes works for Bytes + does [] with start and count does [] with start and count + #clone + deep copy deep copy + clones primitive clones primitive + clones non-primitive clones non-primitive + buffer copy buffer copy + does rindex does rindex + "#each" yielding "#each" yielding + does []= does []= + does map_with_index, with offset does map_with_index, with offset + raises if size is negative on new raises if size is negative on new + does map_with_index! does map_with_index! + "#each_index" yielding "#each_index" yielding + does to_a does to_a + does macro [] does macro [] + sort + #unstable_sort! + raises if <=> returns nil raises if <=> returns nil + sorts with invalid block (#4379) sorts with invalid block (#4379) + raises if sort! block returns nil raises if sort! block returns nil + without block without block + with a block with a block + can sort! just by using <=> (#6608) can sort! just by using <=> (#6608) + #sort + without block without block + stable sort with a block stable sort with a block + stable sort without a block stable sort without a block + with a block with a block + #sort_by + calls given block exactly once for each element calls given block exactly once for each element + stable sort stable sort + sorts sorts + #unstable_sort + with a block with a block + without block without block + #sort_by + stable sort stable sort + sorts sorts + #unstable_sort_by + calls given block exactly once for each element calls given block exactly once for each element + sorts sorts + #unstable_sort_by + sorts sorts + #sort! + sorts with invalid block (#4379) sorts with invalid block (#4379) + raises if <=> returns nil raises if <=> returns nil + stable sort without a block stable sort without a block + can sort! just by using <=> (#6608) can sort! just by using <=> (#6608) + without block without block + with a block with a block + stable sort with a block stable sort with a block + raises if sort! block returns nil raises if sort! block returns nil + #+(Slice) + concatenates two slices concatenates two slices + .additive_identity + returns an empty slice returns an empty slice + #[] #[] + creates read-only slice creates read-only slice + #[] keeps read-only value #[] keeps read-only value + "#reverse_each" iterator "#reverse_each" iterator + .join + concatenates an empty indexable of slices concatenates an empty indexable of slices + concatenates an indexable of slices concatenates an indexable of slices + concatenates a slice of slices concatenates a slice of slices + does [] does [] + does to_s for bytes does to_s for bytes + does bytesize does bytesize + uses percent vars in [] macro (#2954) uses percent vars in [] macro (#2954) + #same? #same? + creates empty slice creates empty slice + does []? does []? + does []? with start and count does []? with start and count + does map! does map! + .copy_to(Slice) + copies bytes copies bytes + raises if dst is smaller raises if dst is smaller + copies at most src.size copies at most src.size + does copy_to pointer does copy_to pointer + #dup + don't deep copy don't deep copy + buffer copy buffer copy + does empty? does empty? + does copy_from pointer does copy_from pointer + #hexstring + works for Bytes works for Bytes + does macro [] with numbers (#3055) does macro [] with numbers (#3055) + does map_with_index!, with offset does map_with_index!, with offset + <=> + compares compares + compares (UInt8) compares (UInt8) + is comparable is comparable + gets pointer and size gets pointer and size + == + does == with same type, different runtime instances does == with same type, different runtime instances + does == does == + does == for bytes does == for bytes + does []? with range does []? with range + hashes each item in collection hashes each item in collection + #fill + replaces values in a subrange replaces values in a subrange + works for bytes works for bytes + reverses reverses + rotate! assert assert assert assert assert assert assert assert assert assert - be_false assert assert assert assert assert assert assert assert - be_truthy assert assert assert assert assert assert assert assert -Big* as numbers - division between BigRational / Int8 returns BigRational division between BigRational / Int8 returns BigRational - converts from BigInt to UInt64 converts from BigInt to UInt64 - division between UInt8 / BigRational returns BigRational division between UInt8 / BigRational returns BigRational - converts from UInt8 to BigFloat converts from UInt8 to BigFloat - floor_division BigFloat // BigInt returns BigFloat floor_division BigFloat // BigInt returns BigFloat - division between UInt128 / BigDecimal returns BigDecimal division between UInt128 / BigDecimal returns BigDecimal - converts from BigRational to Int32 converts from BigRational to Int32 - division between BigFloat / Float32 returns BigFloat division between BigFloat / Float32 returns BigFloat - division between BigInt / Float64 returns BigFloat division between BigInt / Float64 returns BigFloat - converts from BigInt to BigRational converts from BigInt to BigRational - converts from BigRational to BigFloat converts from BigRational to BigFloat - floor_division BigFloat // BigRational returns BigFloat floor_division BigFloat // BigRational returns BigFloat - floor_division BigRational // Int16 returns BigRational floor_division BigRational // Int16 returns BigRational - converts from Float64 to BigInt converts from Float64 to BigInt - converts from BigInt to Float32 converts from BigInt to Float32 - division between BigRational / BigRational returns BigRational division between BigRational / BigRational returns BigRational - converts from Int64 to BigDecimal converts from Int64 to BigDecimal - division between BigFloat / UInt16 returns BigFloat division between BigFloat / UInt16 returns BigFloat - converts from UInt16 to BigRational converts from UInt16 to BigRational - converts from BigInt to BigInt converts from BigInt to BigInt - converts from BigDecimal to Float64 converts from BigDecimal to Float64 - division between BigDecimal / Float64 returns BigDecimal division between BigDecimal / Float64 returns BigDecimal - division between BigRational / UInt32 returns BigRational division between BigRational / UInt32 returns BigRational - floor_division BigInt // UInt32 returns BigInt floor_division BigInt // UInt32 returns BigInt - floor_division BigInt // Int8 returns BigInt floor_division BigInt // Int8 returns BigInt - converts from BigInt to BigDecimal converts from BigInt to BigDecimal - division between Int64 / BigInt returns BigFloat division between Int64 / BigInt returns BigFloat - division between BigRational / UInt64 returns BigRational division between BigRational / UInt64 returns BigRational - division between BigRational / BigDecimal returns BigRational division between BigRational / BigDecimal returns BigRational - converts from Float64 to BigDecimal converts from Float64 to BigDecimal - converts from Float32 to BigRational converts from Float32 to BigRational - floor_division BigDecimal // Int64 returns BigDecimal floor_division BigDecimal // Int64 returns BigDecimal - converts from BigRational to UInt16 converts from BigRational to UInt16 - converts from UInt32 to BigFloat converts from UInt32 to BigFloat - initialize from value to BigDecimal initialize from value to BigDecimal - floor_division UInt64 // BigRational returns UInt64 floor_division UInt64 // BigRational returns UInt64 - division between UInt8 / BigFloat returns BigFloat division between UInt8 / BigFloat returns BigFloat - floor_division BigInt // UInt16 returns BigInt floor_division BigInt // UInt16 returns BigInt - converts from BigFloat to Int32 converts from BigFloat to Int32 - floor_division Int64 // BigDecimal returns Int64 floor_division Int64 // BigDecimal returns Int64 - converts from UInt32 to BigRational converts from UInt32 to BigRational - converts from BigFloat to Int8 converts from BigFloat to Int8 - floor_division BigDecimal // BigInt returns BigDecimal floor_division BigDecimal // BigInt returns BigDecimal - converts from UInt8 to BigInt converts from UInt8 to BigInt - converts from BigFloat to Int64 converts from BigFloat to Int64 - converts from BigRational to UInt32 converts from BigRational to UInt32 - converts from BigRational to Int16 converts from BigRational to Int16 - division between BigFloat / UInt64 returns BigFloat division between BigFloat / UInt64 returns BigFloat - converts from BigRational to BigRational converts from BigRational to BigRational - floor_division BigRational // UInt32 returns BigRational floor_division BigRational // UInt32 returns BigRational - floor_division BigRational // BigInt returns BigRational floor_division BigRational // BigInt returns BigRational - division between UInt64 / BigInt returns BigFloat division between UInt64 / BigInt returns BigFloat - floor_division BigDecimal // UInt16 returns BigDecimal floor_division BigDecimal // UInt16 returns BigDecimal - converts from UInt8 to BigDecimal converts from UInt8 to BigDecimal - division between BigDecimal / UInt8 returns BigDecimal division between BigDecimal / UInt8 returns BigDecimal - floor_division Int8 // BigRational returns Int8 floor_division Int8 // BigRational returns Int8 - division between Float64 / BigRational returns BigRational division between Float64 / BigRational returns BigRational - division between BigRational / Int128 returns BigRational division between BigRational / Int128 returns BigRational - converts from BigDecimal to UInt32 converts from BigDecimal to UInt32 - converts from BigRational to BigInt converts from BigRational to BigInt - division between Int128 / BigFloat returns BigFloat division between Int128 / BigFloat returns BigFloat - division between Int8 / BigRational returns BigRational division between Int8 / BigRational returns BigRational - division between Int32 / BigRational returns BigRational division between Int32 / BigRational returns BigRational - division between BigFloat / Int32 returns BigFloat division between BigFloat / Int32 returns BigFloat - division between UInt32 / BigRational returns BigRational division between UInt32 / BigRational returns BigRational - converts from BigInt to Int16 converts from BigInt to Int16 - floor_division BigDecimal // UInt64 returns BigDecimal floor_division BigDecimal // UInt64 returns BigDecimal - converts from Int16 to BigFloat converts from Int16 to BigFloat - division between UInt16 / BigDecimal returns BigDecimal division between UInt16 / BigDecimal returns BigDecimal - converts from BigFloat to BigInt converts from BigFloat to BigInt - floor_division BigDecimal // UInt32 returns BigDecimal floor_division BigDecimal // UInt32 returns BigDecimal - converts from BigInt to Int64 converts from BigInt to Int64 - division between BigDecimal / Int16 returns BigDecimal division between BigDecimal / Int16 returns BigDecimal - converts from BigFloat to Float64 converts from BigFloat to Float64 - floor_division UInt8 // BigRational returns UInt8 floor_division UInt8 // BigRational returns UInt8 - converts from UInt8 to BigInt converts from UInt8 to BigInt - converts from Int8 to BigDecimal converts from Int8 to BigDecimal - converts from BigFloat to BigRational converts from BigFloat to BigRational - converts from UInt64 to BigRational converts from UInt64 to BigRational - converts from BigRational to UInt16 converts from BigRational to UInt16 - converts from Int8 to BigDecimal converts from Int8 to BigDecimal - floor_division BigInt // BigInt returns BigInt floor_division BigInt // BigInt returns BigInt - division between BigInt / BigRational returns BigRational division between BigInt / BigRational returns BigRational - converts from BigRational to BigDecimal converts from BigRational to BigDecimal - floor_division BigInt // Int32 returns BigInt floor_division BigInt // Int32 returns BigInt - division between BigRational / Float64 returns BigRational division between BigRational / Float64 returns BigRational - floor_division BigInt // Float32 returns BigInt floor_division BigInt // Float32 returns BigInt - initialize from value to BigInt initialize from value to BigInt - converts from UInt16 to BigInt converts from UInt16 to BigInt - converts from BigFloat to Int32 converts from BigFloat to Int32 - converts from Int32 to BigRational converts from Int32 to BigRational - floor_division Float64 // BigInt returns Float64 floor_division Float64 // BigInt returns Float64 - floor_division UInt64 // BigInt returns UInt64 floor_division UInt64 // BigInt returns UInt64 - converts from BigFloat to BigFloat converts from BigFloat to BigFloat - converts from BigRational to Float64 converts from BigRational to Float64 - converts from BigFloat to Int16 converts from BigFloat to Int16 - converts from Float64 to BigDecimal converts from Float64 to BigDecimal - converts from BigInt to Int8 converts from BigInt to Int8 - division between Float32 / BigFloat returns BigFloat division between Float32 / BigFloat returns BigFloat - converts from BigFloat to Float32 converts from BigFloat to Float32 - converts from BigInt to UInt8 converts from BigInt to UInt8 - converts from UInt32 to BigDecimal converts from UInt32 to BigDecimal - converts from BigFloat to UInt64 converts from BigFloat to UInt64 - converts from BigFloat to Int8 converts from BigFloat to Int8 - converts from BigInt to UInt32 converts from BigInt to UInt32 - floor_division UInt16 // BigInt returns UInt16 floor_division UInt16 // BigInt returns UInt16 - converts from BigFloat to UInt8 converts from BigFloat to UInt8 - converts from BigFloat to UInt32 converts from BigFloat to UInt32 - division between BigInt / UInt16 returns BigFloat division between BigInt / UInt16 returns BigFloat - division between BigRational / BigFloat returns BigRational division between BigRational / BigFloat returns BigRational - floor_division UInt8 // BigDecimal returns UInt8 floor_division UInt8 // BigDecimal returns UInt8 - division between BigRational / UInt16 returns BigRational division between BigRational / UInt16 returns BigRational - converts from UInt64 to BigDecimal converts from UInt64 to BigDecimal - converts from BigRational to Int8 converts from BigRational to Int8 - floor_division UInt32 // BigInt returns UInt32 floor_division UInt32 // BigInt returns UInt32 - floor_division BigDecimal // BigRational returns BigDecimal floor_division BigDecimal // BigRational returns BigDecimal - converts from BigInt to UInt16 converts from BigInt to UInt16 - converts from BigInt to BigRational converts from BigInt to BigRational - division between BigFloat / BigFloat returns BigFloat division between BigFloat / BigFloat returns BigFloat - converts from Int64 to BigRational converts from Int64 to BigRational - converts from BigInt to BigInt converts from BigInt to BigInt - floor_division BigDecimal // Float32 returns BigDecimal floor_division BigDecimal // Float32 returns BigDecimal - converts from BigRational to BigRational converts from BigRational to BigRational - converts from UInt64 to BigInt converts from UInt64 to BigInt - floor_division Float64 // BigDecimal returns Float64 floor_division Float64 // BigDecimal returns Float64 - converts from BigFloat to BigDecimal converts from BigFloat to BigDecimal - floor_division BigRational // UInt8 returns BigRational floor_division BigRational // UInt8 returns BigRational - division between BigFloat / UInt32 returns BigFloat division between BigFloat / UInt32 returns BigFloat - floor_division Int8 // BigInt returns Int8 floor_division Int8 // BigInt returns Int8 - division between BigDecimal / UInt16 returns BigDecimal division between BigDecimal / UInt16 returns BigDecimal - division between BigRational / Int16 returns BigRational division between BigRational / Int16 returns BigRational - converts from BigRational to Int16 converts from BigRational to Int16 - converts from BigRational to Float32 converts from BigRational to Float32 - division between Float32 / BigRational returns BigRational division between Float32 / BigRational returns BigRational - converts from BigFloat to Int16 converts from BigFloat to Int16 - division between BigInt / UInt32 returns BigFloat division between BigInt / UInt32 returns BigFloat - floor_division BigInt // UInt64 returns BigInt floor_division BigInt // UInt64 returns BigInt - division between BigFloat / BigDecimal returns BigDecimal division between BigFloat / BigDecimal returns BigDecimal - floor_division BigRational // Int8 returns BigRational floor_division BigRational // Int8 returns BigRational - converts from BigRational to Int8 converts from BigRational to Int8 - division between BigDecimal / UInt64 returns BigDecimal division between BigDecimal / UInt64 returns BigDecimal - converts from Int16 to BigDecimal converts from Int16 to BigDecimal - converts from BigFloat to BigRational converts from BigFloat to BigRational - division between BigInt / BigDecimal returns BigDecimal division between BigInt / BigDecimal returns BigDecimal - converts from BigDecimal to Float32 converts from BigDecimal to Float32 - converts from BigRational to UInt8 converts from BigRational to UInt8 - floor_division BigFloat // Float64 returns BigFloat floor_division BigFloat // Float64 returns BigFloat - division between UInt16 / BigFloat returns BigFloat division between UInt16 / BigFloat returns BigFloat - division between BigRational / BigInt returns BigRational division between BigRational / BigInt returns BigRational - converts from BigRational to UInt64 converts from BigRational to UInt64 - converts from BigFloat to UInt8 converts from BigFloat to UInt8 - converts from UInt16 to BigFloat converts from UInt16 to BigFloat - division between Int64 / BigDecimal returns BigDecimal division between Int64 / BigDecimal returns BigDecimal - converts from BigInt to Int16 converts from BigInt to Int16 - converts from BigDecimal to Int16 converts from BigDecimal to Int16 - converts from Int64 to BigFloat converts from Int64 to BigFloat - division between BigDecimal / Int128 returns BigDecimal division between BigDecimal / Int128 returns BigDecimal - division between Float64 / BigDecimal returns BigDecimal division between Float64 / BigDecimal returns BigDecimal - floor_division BigFloat // UInt64 returns BigFloat floor_division BigFloat // UInt64 returns BigFloat - division between BigInt / UInt8 returns BigFloat division between BigInt / UInt8 returns BigFloat - floor_division UInt16 // BigRational returns UInt16 floor_division UInt16 // BigRational returns UInt16 - converts from Float64 to BigInt converts from Float64 to BigInt - floor_division Int32 // BigDecimal returns Int32 floor_division Int32 // BigDecimal returns Int32 - converts from Int32 to BigInt converts from Int32 to BigInt - converts from BigDecimal to UInt16 converts from BigDecimal to UInt16 - converts from UInt32 to BigFloat converts from UInt32 to BigFloat - division between BigRational / Float32 returns BigRational division between BigRational / Float32 returns BigRational - division between BigFloat / Int64 returns BigFloat division between BigFloat / Int64 returns BigFloat - converts from BigFloat to UInt32 converts from BigFloat to UInt32 - converts from BigDecimal to Int64 converts from BigDecimal to Int64 - division between BigInt / Int16 returns BigFloat division between BigInt / Int16 returns BigFloat - converts from BigFloat to Int64 converts from BigFloat to Int64 - converts from Float64 to BigRational converts from Float64 to BigRational - division between UInt128 / BigInt returns BigFloat division between UInt128 / BigInt returns BigFloat - converts from BigFloat to Float32 converts from BigFloat to Float32 - division between BigRational / UInt8 returns BigRational division between BigRational / UInt8 returns BigRational - division between BigFloat / BigRational returns BigRational division between BigFloat / BigRational returns BigRational - division between BigFloat / Int16 returns BigFloat division between BigFloat / Int16 returns BigFloat - division between BigDecimal / BigFloat returns BigDecimal division between BigDecimal / BigFloat returns BigDecimal - converts from Float32 to BigFloat converts from Float32 to BigFloat - floor_division Float32 // BigDecimal returns Float32 floor_division Float32 // BigDecimal returns Float32 - converts from BigRational to Int64 converts from BigRational to Int64 - converts from BigRational to Int64 converts from BigRational to Int64 - converts from UInt8 to BigFloat converts from UInt8 to BigFloat - converts from UInt32 to BigInt converts from UInt32 to BigInt - division between BigDecimal / Int8 returns BigDecimal division between BigDecimal / Int8 returns BigDecimal - converts from BigDecimal to BigDecimal converts from BigDecimal to BigDecimal - floor_division BigFloat // UInt8 returns BigFloat floor_division BigFloat // UInt8 returns BigFloat - converts from Int16 to BigRational converts from Int16 to BigRational - converts from Int32 to BigDecimal converts from Int32 to BigDecimal - floor_division BigFloat // UInt16 returns BigFloat floor_division BigFloat // UInt16 returns BigFloat - division between BigDecimal / UInt128 returns BigDecimal division between BigDecimal / UInt128 returns BigDecimal - converts from BigDecimal to UInt8 converts from BigDecimal to UInt8 - division between BigFloat / UInt8 returns BigFloat division between BigFloat / UInt8 returns BigFloat - division between BigDecimal / BigInt returns BigDecimal division between BigDecimal / BigInt returns BigDecimal - division between BigRational / BigRational returns BigRational division between BigRational / BigRational returns BigRational - division between Int32 / BigDecimal returns BigDecimal division between Int32 / BigDecimal returns BigDecimal - converts from BigDecimal to BigRational converts from BigDecimal to BigRational - division between Int64 / BigRational returns BigRational division between Int64 / BigRational returns BigRational - division between Float32 / BigInt returns BigFloat division between Float32 / BigInt returns BigFloat - converts from BigRational to BigInt converts from BigRational to BigInt - division between UInt128 / BigRational returns BigRational division between UInt128 / BigRational returns BigRational - converts from Int64 to BigDecimal converts from Int64 to BigDecimal - floor_division Float32 // BigFloat returns Float32 floor_division Float32 // BigFloat returns Float32 - converts from UInt64 to BigInt converts from UInt64 to BigInt - converts from BigInt to BigFloat converts from BigInt to BigFloat - division between Int8 / BigInt returns BigFloat division between Int8 / BigInt returns BigFloat - floor_division BigInt // Int16 returns BigInt floor_division BigInt // Int16 returns BigInt - floor_division BigDecimal // Int32 returns BigDecimal floor_division BigDecimal // Int32 returns BigDecimal - floor_division BigInt // BigFloat returns BigInt floor_division BigInt // BigFloat returns BigInt - converts from BigRational to Int32 converts from BigRational to Int32 - converts from BigDecimal to BigDecimal converts from BigDecimal to BigDecimal - converts from BigInt to Float64 converts from BigInt to Float64 - division between UInt64 / BigRational returns BigRational division between UInt64 / BigRational returns BigRational - division between BigFloat / Float64 returns BigFloat division between BigFloat / Float64 returns BigFloat - division between Int8 / BigDecimal returns BigDecimal division between Int8 / BigDecimal returns BigDecimal - floor_division BigRational // Int64 returns BigRational floor_division BigRational // Int64 returns BigRational - division between BigDecimal / BigDecimal returns BigDecimal division between BigDecimal / BigDecimal returns BigDecimal - converts from BigFloat to Float64 converts from BigFloat to Float64 - converts from Int8 to BigRational converts from Int8 to BigRational - converts from BigDecimal to UInt64 converts from BigDecimal to UInt64 - converts from Int16 to BigRational converts from Int16 to BigRational - converts from Int8 to BigFloat converts from Int8 to BigFloat - floor_division UInt32 // BigRational returns UInt32 floor_division UInt32 // BigRational returns UInt32 - converts from BigInt to Int8 converts from BigInt to Int8 - floor_division Int16 // BigInt returns Int16 floor_division Int16 // BigInt returns Int16 - division between BigDecimal / UInt32 returns BigDecimal division between BigDecimal / UInt32 returns BigDecimal - converts from BigDecimal to Int8 converts from BigDecimal to Int8 - floor_division BigInt // BigRational returns BigInt floor_division BigInt // BigRational returns BigInt - floor_division BigDecimal // UInt8 returns BigDecimal floor_division BigDecimal // UInt8 returns BigDecimal - floor_division BigFloat // Float32 returns BigFloat floor_division BigFloat // Float32 returns BigFloat - converts from UInt64 to BigDecimal converts from UInt64 to BigDecimal - converts from BigInt to BigFloat converts from BigInt to BigFloat - floor_division BigRational // BigDecimal returns BigRational floor_division BigRational // BigDecimal returns BigRational - converts from BigRational to Float64 converts from BigRational to Float64 - floor_division BigDecimal // BigFloat returns BigDecimal floor_division BigDecimal // BigFloat returns BigDecimal - division between Int64 / BigFloat returns BigFloat division between Int64 / BigFloat returns BigFloat - division between BigInt / BigInt returns BigFloat division between BigInt / BigInt returns BigFloat - converts from Int8 to BigInt converts from Int8 to BigInt - converts from BigRational to UInt64 converts from BigRational to UInt64 - floor_division Int8 // BigDecimal returns Int8 floor_division Int8 // BigDecimal returns Int8 - converts from BigInt to BigDecimal converts from BigInt to BigDecimal - converts from UInt64 to BigFloat converts from UInt64 to BigFloat - division between BigInt / Int32 returns BigFloat division between BigInt / Int32 returns BigFloat - floor_division BigFloat // Int64 returns BigFloat floor_division BigFloat // Int64 returns BigFloat - division between Int32 / BigInt returns BigFloat division between Int32 / BigInt returns BigFloat - floor_division UInt16 // BigFloat returns UInt16 floor_division UInt16 // BigFloat returns UInt16 - converts from Int32 to BigRational converts from Int32 to BigRational - division between Int16 / BigFloat returns BigFloat division between Int16 / BigFloat returns BigFloat - converts from Int8 to BigFloat converts from Int8 to BigFloat - division between Int8 / BigFloat returns BigFloat division between Int8 / BigFloat returns BigFloat - division between UInt32 / BigFloat returns BigFloat division between UInt32 / BigFloat returns BigFloat - converts from UInt8 to BigDecimal converts from UInt8 to BigDecimal - floor_division BigFloat // Int32 returns BigFloat floor_division BigFloat // Int32 returns BigFloat - converts from BigDecimal to UInt64 converts from BigDecimal to UInt64 - floor_division BigRational // Float32 returns BigRational floor_division BigRational // Float32 returns BigRational - division between BigInt / BigFloat returns BigFloat division between BigInt / BigFloat returns BigFloat - floor_division Int32 // BigInt returns Int32 floor_division Int32 // BigInt returns Int32 - floor_division BigFloat // BigDecimal returns BigFloat floor_division BigFloat // BigDecimal returns BigFloat - converts from Int16 to BigInt converts from Int16 to BigInt - floor_division BigInt // Int64 returns BigInt floor_division BigInt // Int64 returns BigInt - converts from BigFloat to UInt16 converts from BigFloat to UInt16 - floor_division BigFloat // BigFloat returns BigFloat floor_division BigFloat // BigFloat returns BigFloat - floor_division Int16 // BigDecimal returns Int16 floor_division Int16 // BigDecimal returns Int16 - converts from UInt8 to BigRational converts from UInt8 to BigRational - converts from BigRational to Float32 converts from BigRational to Float32 - floor_division Float64 // BigFloat returns Float64 floor_division Float64 // BigFloat returns Float64 - converts from Float32 to BigInt converts from Float32 to BigInt - converts from UInt16 to BigDecimal converts from UInt16 to BigDecimal - converts from Float32 to BigRational converts from Float32 to BigRational - converts from BigInt to UInt16 converts from BigInt to UInt16 - converts from BigRational to UInt32 converts from BigRational to UInt32 - floor_division Int32 // BigRational returns Int32 floor_division Int32 // BigRational returns Int32 - converts from UInt16 to BigDecimal converts from UInt16 to BigDecimal - converts from BigFloat to UInt16 converts from BigFloat to UInt16 - converts from Float32 to BigDecimal converts from Float32 to BigDecimal - floor_division Int16 // BigFloat returns Int16 floor_division Int16 // BigFloat returns Int16 - floor_division BigRational // UInt16 returns BigRational floor_division BigRational // UInt16 returns BigRational - floor_division Float32 // BigRational returns Float32 floor_division Float32 // BigRational returns Float32 - division between BigFloat / BigInt returns BigFloat division between BigFloat / BigInt returns BigFloat - converts from BigFloat to BigFloat converts from BigFloat to BigFloat - floor_division BigDecimal // BigDecimal returns BigDecimal floor_division BigDecimal // BigDecimal returns BigDecimal - converts from BigInt to Int32 converts from BigInt to Int32 - division between Float64 / BigInt returns BigFloat division between Float64 / BigInt returns BigFloat - floor_division UInt64 // BigDecimal returns UInt64 floor_division UInt64 // BigDecimal returns UInt64 - division between BigInt / Int64 returns BigFloat division between BigInt / Int64 returns BigFloat - floor_division BigDecimal // Int8 returns BigDecimal floor_division BigDecimal // Int8 returns BigDecimal - division between BigInt / UInt64 returns BigFloat division between BigInt / UInt64 returns BigFloat - division between Int16 / BigInt returns BigFloat division between Int16 / BigInt returns BigFloat - converts from Int32 to BigInt converts from Int32 to BigInt - floor_division Int32 // BigFloat returns Int32 floor_division Int32 // BigFloat returns Int32 - converts from BigInt to UInt32 converts from BigInt to UInt32 - floor_division UInt8 // BigFloat returns UInt8 floor_division UInt8 // BigFloat returns UInt8 - converts from BigDecimal to Int8 converts from BigDecimal to Int8 - converts from BigDecimal to Float64 converts from BigDecimal to Float64 - floor_division UInt32 // BigFloat returns UInt32 floor_division UInt32 // BigFloat returns UInt32 - initialize from value to BigFloat initialize from value to BigFloat - floor_division BigRational // UInt64 returns BigRational floor_division BigRational // UInt64 returns BigRational - floor_division UInt64 // BigFloat returns UInt64 floor_division UInt64 // BigFloat returns UInt64 - converts from BigRational to UInt8 converts from BigRational to UInt8 - converts from BigDecimal to UInt16 converts from BigDecimal to UInt16 - division between BigFloat / Int8 returns BigFloat division between BigFloat / Int8 returns BigFloat - division between Int16 / BigDecimal returns BigDecimal division between Int16 / BigDecimal returns BigDecimal - division between BigInt / Float32 returns BigFloat division between BigInt / Float32 returns BigFloat - converts from Int64 to BigInt converts from Int64 to BigInt - floor_division BigInt // BigDecimal returns BigInt floor_division BigInt // BigDecimal returns BigInt - converts from Int16 to BigDecimal converts from Int16 to BigDecimal - converts from Int32 to BigFloat converts from Int32 to BigFloat - division between Float32 / BigDecimal returns BigDecimal division between Float32 / BigDecimal returns BigDecimal - floor_division BigRational // BigRational returns BigRational floor_division BigRational // BigRational returns BigRational - division between BigInt / UInt128 returns BigFloat division between BigInt / UInt128 returns BigFloat - floor_division Int8 // BigFloat returns Int8 floor_division Int8 // BigFloat returns Int8 - initialize from value to BigRational initialize from value to BigRational - converts from UInt8 to BigRational converts from UInt8 to BigRational - division between BigRational / UInt128 returns BigRational division between BigRational / UInt128 returns BigRational - floor_division BigFloat // UInt32 returns BigFloat floor_division BigFloat // UInt32 returns BigFloat - converts from BigInt to Float32 converts from BigInt to Float32 - converts from BigDecimal to Int32 converts from BigDecimal to Int32 - converts from Int64 to BigRational converts from Int64 to BigRational - converts from Float32 to BigInt converts from Float32 to BigInt - division between UInt64 / BigDecimal returns BigDecimal division between UInt64 / BigDecimal returns BigDecimal - floor_division UInt16 // BigDecimal returns UInt16 floor_division UInt16 // BigDecimal returns UInt16 - floor_division BigRational // Int32 returns BigRational floor_division BigRational // Int32 returns BigRational - converts from BigInt to UInt64 converts from BigInt to UInt64 - division between UInt8 / BigDecimal returns BigDecimal division between UInt8 / BigDecimal returns BigDecimal - floor_division Float64 // BigRational returns Float64 floor_division Float64 // BigRational returns Float64 - division between BigRational / Int32 returns BigRational division between BigRational / Int32 returns BigRational - converts from Int64 to BigFloat converts from Int64 to BigFloat - division between BigFloat / Int128 returns BigFloat division between BigFloat / Int128 returns BigFloat - floor_division BigFloat // Int16 returns BigFloat floor_division BigFloat // Int16 returns BigFloat - floor_division BigFloat // Int8 returns BigFloat floor_division BigFloat // Int8 returns BigFloat - division between UInt32 / BigDecimal returns BigDecimal division between UInt32 / BigDecimal returns BigDecimal - converts from Float64 to BigRational converts from Float64 to BigRational - converts from UInt32 to BigInt converts from UInt32 to BigInt - converts from BigRational to BigDecimal converts from BigRational to BigDecimal - division between BigFloat / UInt128 returns BigFloat division between BigFloat / UInt128 returns BigFloat - floor_division UInt32 // BigDecimal returns UInt32 floor_division UInt32 // BigDecimal returns UInt32 - division between BigDecimal / Float32 returns BigDecimal division between BigDecimal / Float32 returns BigDecimal - division between BigDecimal / BigDecimal returns BigDecimal division between BigDecimal / BigDecimal returns BigDecimal - converts from Int8 to BigInt converts from Int8 to BigInt - converts from BigInt to Int32 converts from BigInt to Int32 - floor_division UInt8 // BigInt returns UInt8 floor_division UInt8 // BigInt returns UInt8 - converts from Float64 to BigFloat converts from Float64 to BigFloat - converts from BigDecimal to BigFloat converts from BigDecimal to BigFloat - converts from UInt64 to BigFloat converts from UInt64 to BigFloat - converts from BigDecimal to Int64 converts from BigDecimal to Int64 - converts from BigDecimal to UInt32 converts from BigDecimal to UInt32 - converts from BigDecimal to UInt8 converts from BigDecimal to UInt8 - floor_division Float32 // BigInt returns Float32 floor_division Float32 // BigInt returns Float32 - division between BigDecimal / Int32 returns BigDecimal division between BigDecimal / Int32 returns BigDecimal - converts from BigDecimal to BigFloat converts from BigDecimal to BigFloat - floor_division BigRational // Float64 returns BigRational floor_division BigRational // Float64 returns BigRational - division between BigDecimal / Int64 returns BigDecimal division between BigDecimal / Int64 returns BigDecimal - floor_division BigRational // BigFloat returns BigRational floor_division BigRational // BigFloat returns BigRational - converts from BigFloat to BigInt converts from BigFloat to BigInt - converts from Float64 to BigFloat converts from Float64 to BigFloat - converts from Int16 to BigFloat converts from Int16 to BigFloat - floor_division BigInt // UInt8 returns BigInt floor_division BigInt // UInt8 returns BigInt - division between Int128 / BigInt returns BigFloat division between Int128 / BigInt returns BigFloat - converts from BigDecimal to Int32 converts from BigDecimal to Int32 - converts from UInt32 to BigDecimal converts from UInt32 to BigDecimal - converts from UInt16 to BigFloat converts from UInt16 to BigFloat - floor_division BigDecimal // Float64 returns BigDecimal floor_division BigDecimal // Float64 returns BigDecimal - converts from Int8 to BigRational converts from Int8 to BigRational - floor_division Int64 // BigFloat returns Int64 floor_division Int64 // BigFloat returns Int64 - converts from UInt16 to BigRational converts from UInt16 to BigRational - division between Int32 / BigFloat returns BigFloat division between Int32 / BigFloat returns BigFloat - floor_division Int64 // BigRational returns Int64 floor_division Int64 // BigRational returns Int64 - division between UInt128 / BigFloat returns BigFloat division between UInt128 / BigFloat returns BigFloat - division between BigRational / Int64 returns BigRational division between BigRational / Int64 returns BigRational - division between BigInt / Int128 returns BigFloat division between BigInt / Int128 returns BigFloat - converts from UInt32 to BigRational converts from UInt32 to BigRational - converts from BigRational to BigFloat converts from BigRational to BigFloat - division between UInt64 / BigFloat returns BigFloat division between UInt64 / BigFloat returns BigFloat - division between Int128 / BigRational returns BigRational division between Int128 / BigRational returns BigRational - floor_division BigInt // Float64 returns BigInt floor_division BigInt // Float64 returns BigInt - division between UInt32 / BigInt returns BigFloat division between UInt32 / BigInt returns BigFloat - converts from Float32 to BigDecimal converts from Float32 to BigDecimal - floor_division BigDecimal // Int16 returns BigDecimal floor_division BigDecimal // Int16 returns BigDecimal - division between Int128 / BigDecimal returns BigDecimal division between Int128 / BigDecimal returns BigDecimal - converts from Float32 to BigFloat converts from Float32 to BigFloat - converts from BigDecimal to Float32 converts from BigDecimal to Float32 - division between BigDecimal / BigRational returns BigRational division between BigDecimal / BigRational returns BigRational - converts from BigInt to Int64 converts from BigInt to Int64 - converts from Int64 to BigInt converts from Int64 to BigInt - division between UInt16 / BigRational returns BigRational division between UInt16 / BigRational returns BigRational - converts from BigDecimal to Int16 converts from BigDecimal to Int16 - converts from Int32 to BigDecimal converts from Int32 to BigDecimal - converts from BigDecimal to BigRational converts from BigDecimal to BigRational - converts from UInt16 to BigInt converts from UInt16 to BigInt - floor_division Int16 // BigRational returns Int16 floor_division Int16 // BigRational returns Int16 - division between Int16 / BigRational returns BigRational division between Int16 / BigRational returns BigRational - converts from Int32 to BigFloat converts from Int32 to BigFloat - converts from Int16 to BigInt converts from Int16 to BigInt - converts from BigInt to UInt8 converts from BigInt to UInt8 - converts from BigDecimal to BigInt converts from BigDecimal to BigInt - division between Float64 / BigFloat returns BigFloat division between Float64 / BigFloat returns BigFloat - converts from BigDecimal to BigInt converts from BigDecimal to BigInt - converts from BigFloat to BigDecimal converts from BigFloat to BigDecimal - converts from UInt64 to BigRational converts from UInt64 to BigRational - converts from BigInt to Float64 converts from BigInt to Float64 - converts from BigFloat to UInt64 converts from BigFloat to UInt64 - division between BigInt / Int8 returns BigFloat division between BigInt / Int8 returns BigFloat - floor_division Int64 // BigInt returns Int64 floor_division Int64 // BigInt returns Int64 - division between UInt8 / BigInt returns BigFloat division between UInt8 / BigInt returns BigFloat - division between UInt16 / BigInt returns BigFloat division between UInt16 / BigInt returns BigFloat -OpenSSL::X509::Name - add_entry add_entry - parse parse -Syscall - can call into the system successfully can call into the system successfully -MIME::MediaType - #[]= #[]= - .new - create new instance create new instance - raises for invalid parameter name raises for invalid parameter name - #sub_type #sub_type - #type #type - .parse - sets default charset to utf-8 for text media types sets default charset to utf-8 for text media types - parses params parses params - parses media type parses media type - parses params with encoding parses params with encoding - #each_parameter #each_parameter - #to_s #to_s - #fetch #fetch + shuffles shuffles + optimizes hash for Bytes optimizes hash for Bytes + "#each" iterator "#each" iterator + #unsafe_slice_of + reinterprets a slice's elements reinterprets a slice's elements +Crystal::Digest::SHA1 + does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block + resets resets + can't call #final more than once can't call #final more than once + does digest for "" does digest for "" + does base64digest for "" does base64digest for "" + does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block + does digest for "a" in a block does digest for "a" in a block + digest with file content digest with file content + does digest for "The quick brown fox jumps over the lazy dog" does digest for "The quick brown fox jumps over the lazy dog" + does base64digest for "a" does base64digest for "a" + can't call #final more than once can't call #final more than once + does base64digest for "The quick brown fox jumps over the lazy dog" does base64digest for "The quick brown fox jumps over the lazy dog" + does digest for "" in a block does digest for "" in a block + can't call #final more than once can't call #final more than once + returns the digest_size returns the digest_size + resets resets + #hexdigest can update within a loop by indirect expr (#9483) #hexdigest can update within a loop by indirect expr (#9483) + .dup + preserves type preserves type + leads to not sharing state leads to not sharing state + preserves value preserves value + leads to deterministic updates leads to deterministic updates + resets resets + does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + does digest for "0123456701234567012345670123456701234567012345670123456701234567" does digest for "0123456701234567012345670123456701234567012345670123456701234567" + does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + does digest for "fooø" does digest for "fooø" + does hexdigest for "a" does hexdigest for "a" + can't call #final more than once can't call #final more than once + resets resets + does digest for "The quick brown fox jumps over the lazy dog" in a block does digest for "The quick brown fox jumps over the lazy dog" in a block + does digest for "abc" in a block does digest for "abc" in a block + does digest for "fooø" in a block does digest for "fooø" in a block + resets resets + #hexdigest can update within a loop from explicit expr (#9483) #hexdigest can update within a loop from explicit expr (#9483) + context are independent context are independent + does hexdigest for "fooø" does hexdigest for "fooø" + does base64digest for "fooø" does base64digest for "fooø" + resets resets + resets resets + can't call #final more than once can't call #final more than once + does hexdigest for "The quick brown fox jumps over the lazy dog" does hexdigest for "The quick brown fox jumps over the lazy dog" + can't call #final more than once can't call #final more than once + does base64digest for "abc" does base64digest for "abc" + does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + can't call #final more than once can't call #final more than once + does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567" does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567" + does digest for "a" does digest for "a" + does digest for "abc" does digest for "abc" + does base64digest for "0123456701234567012345670123456701234567012345670123456701234567" does base64digest for "0123456701234567012345670123456701234567012345670123456701234567" + does hexdigest for "" does hexdigest for "" + does hexdigest for "abc" does hexdigest for "abc" HTTP::CompressHandler - don't try to compress upgraded response don't try to compress upgraded response - deflates gzip if has deflate in 'deflate' Accept-Encoding header deflates gzip if has deflate in 'deflate' Accept-Encoding header - fix content-length header fix content-length header doesn't deflates if doesn't have 'deflate' in Accept-Encoding header doesn't deflates if doesn't have 'deflate' in Accept-Encoding header doesn't compress twice doesn't compress twice - don't try to compress for empty body responses don't try to compress for empty body responses deflates if has deflate in 'deflate' Accept-Encoding header deflates if has deflate in 'deflate' Accept-Encoding header + don't try to compress upgraded response don't try to compress upgraded response + deflates gzip if has deflate in 'deflate' Accept-Encoding header deflates gzip if has deflate in 'deflate' Accept-Encoding header + don't try to compress for empty body responses don't try to compress for empty body responses + fix content-length header fix content-length header +XML::Builder + writes element with attributes as named tuple, nesting writes element with attributes as named tuple, nesting + #cdata + writes cdata writes cdata + escapes ]]> sequences escapes ]]> sequences + writes cdata with block writes cdata with block + writes element with prefix writes element with prefix + writes element with attributes as hash writes element with attributes as hash + writes comment writes comment + writes to string writes to string + errors on invalid element names errors on invalid element names + writes DTD writes DTD + writes document writes document + writes element with namespace writes element with namespace + errors on invalid element name with prefix errors on invalid element name with prefix + writes text writes text + writes attribute with namespace writes attribute with namespace + writes namespace writes namespace + sets indent with count sets indent with count + errors on invalid element name with prefix and namespace errors on invalid element name with prefix and namespace + writes element writes element + errors on null byte errors on null byte + writes DTD with block writes DTD with block + writes element with namespace, without block writes element with namespace, without block + writes element with attributes as named tuple writes element with attributes as named tuple + writes element with namespace writes element with namespace + writes comment with block writes comment with block + writes to IO writes to IO + writes element with attributes as hash, nesting writes element with attributes as hash, nesting + sets indent with string sets indent with string + sets quote char sets quote char + writes attribute writes attribute + writes nested element writes nested element +OpenSSL::HMAC + computes SHA256 computes SHA256 + computes SHA512 computes SHA512 + computes MD5 computes MD5 + computes SHA224 computes SHA224 + computes SHA1 computes SHA1 + computes SHA384 computes SHA384 +OAuth::Consumer + gets authorize uri + with callback url with callback url + without block without block + without callback url without callback url + without custom authorize uri without custom authorize uri + with absolute uri with absolute uri +URI::Params + #== + compares other compares other + compares other types compares other types + #delete_all + deletes all values for provided param name and returns them deletes all values for provided param name and returns them + #delete + deletes first value for provided param name and returns it deletes first value for provided param name and returns it + #[]=(name, value) + sets value for provided param name sets value for provided param name + adds new name => value pair if there is no such param adds new name => value pair if there is no such param + sets value for provided param name (array) sets value for provided param name (array) + #add(name, value) + appends new value for provided param name appends new value for provided param name + #has_key?(name) + return false if param with provided name does not exist return false if param with provided name does not exist + returns true if param with provided name exists returns true if param with provided name exists + #to_s + serializes params to http form serializes params to http form + turns spaces to + by default turns spaces to + by default + turns spaces to %20 if space_to_plus is false turns spaces to %20 if space_to_plus is false + #[]?(name) + return nil when there is no such param return nil when there is no such param + returns first value for provided param name returns first value for provided param name + #fetch(name, &block) + returns first value for provided param name returns first value for provided param name + return default value when there is no such param return default value when there is no such param + #set_all(name, values) + sets values for provided param name sets values for provided param name + .build + builds form from {"foo" => [""], "bar" => [""]} builds form from {"foo" => [""], "bar" => [""]} + builds form from {"foo" => [""]} builds form from {"foo" => [""]} + builds form from {"foo" => ["bar"], "baz" => ["qux"]} builds form from {"foo" => ["bar"], "baz" => ["qux"]} + builds form from {"foo" => ["hello+world"]} builds form from {"foo" => ["hello+world"]} + builds form from {"bar" => [""], "foo" => [""]} builds form from {"bar" => [""], "foo" => [""]} + builds form from {"foo" => ["bar", "baz"]} builds form from {"foo" => ["bar", "baz"]} + turns spaces to %20 if wanted turns spaces to %20 if wanted + builds with IO builds with IO + builds form from {"foo" => ["bar"]} builds form from {"foo" => ["bar"]} + builds form from {"foo" => ["hello world"]} builds form from {"foo" => ["hello world"]} + #each + calls provided proc for each name, value pair, including multiple values per one param name calls provided proc for each name, value pair, including multiple values per one param name + #empty? + test empty? test empty? + .parse + parses foo= parses foo= + parses foo=bar&foo=baz parses foo=bar&foo=baz + parses foo=bar parses foo=bar + parses parses + parses bar&foo parses bar&foo + parses foo=&bar parses foo=&bar + parses foo=bar;baz=qux parses foo=bar;baz=qux + parses foo=hello+world parses foo=hello+world + parses && parses && + parses foo parses foo + parses foo=hello%2Bworld parses foo=hello%2Bworld + parses foo=bar&baz=qux parses foo=bar&baz=qux + parses parses + parses foo=bar=qux parses foo=bar=qux + #merge + appends values with the same key with replace: false appends values with the same key with replace: false + replaces all values with the same key by default replaces all values with the same key by default + does not modify the receiver does not modify the receiver + #merge! + modifies the receiver modifies the receiver + does not modify the other params + with replace: true with replace: true + with replace: false with replace: false + #inspect #inspect + #clone + gives a whole new set of params gives a whole new set of params + .new + assert assert + #fetch(name, default) + returns first value for provided param name returns first value for provided param name + return default value when there is no such param return default value when there is no such param + #dup + gives a whole new set of params gives a whole new set of params + #[](name) + raises KeyError when there is no such param raises KeyError when there is no such param + returns first value for provided param name returns first value for provided param name + #fetch_all(name) + fetches list of all values for provided param name fetches list of all values for provided param name + .encode + builds from hash with IO builds from hash with IO + builds from named tuple with IO builds from named tuple with IO + builds from hash builds from hash + builds from named tuple builds from named tuple +Compress::Zip + writes io writes io + adds a directory adds a directory + writes entry uncompressed writes entry uncompressed + writes entry writes entry + writes file writes file + writes entry uncompressed and reads with Compress::Zip::File writes entry uncompressed and reads with Compress::Zip::File + writes bytes writes bytes + writes string writes string + writes and reads to memory writes and reads to memory +StringPool + puts many puts many + doesn't fail if initial capacity is not a power of 2 doesn't fail if initial capacity is not a power of 2 + is empty is empty + gets slice gets slice + gets string gets string + doesn't fail if initial capacity is too small doesn't fail if initial capacity is too small + gets string IO gets string IO + gets pointer with size gets pointer with size + can be created with larger initial capacity can be created with larger initial capacity + #get? #get? +HTTP::Status + .new + returns an instance when given undefined status code returns an instance when given undefined status code + returns an instance when given defined status code returns an instance when given defined status code + raises when given invalid status code raises when given invalid status code + #server_error? + returns false unless given 5xx status code returns false unless given 5xx status code + returns true when given 5xx status code returns true when given 5xx status code + #description + returns default description for status 200 returns default description for status 200 + returns nil on non-existent status returns nil on non-existent status + #code + returns the status code returns the status code + #redirection? + returns false unless given 3xx status code returns false unless given 3xx status code + returns true when given 3xx status code returns true when given 3xx status code + #informational? + returns true when given 1xx status code returns true when given 1xx status code + returns false unless given 1xx status code returns false unless given 1xx status code + #client_error? + returns true when given 4xx status code returns true when given 4xx status code + returns false unless given 4xx status code returns false unless given 4xx status code + #success? + returns false unless given 2xx status code returns false unless given 2xx status code + returns true when given 2xx status code returns true when given 2xx status code +at_exit + allows handlers to change the exit code with explicit `exit` call (2) allows handlers to change the exit code with explicit `exit` call (2) + runs handlers on explicit program ending runs handlers on explicit program ending + allows handlers to change the exit code with explicit `exit` call allows handlers to change the exit code with explicit `exit` call + can get unhandled exception in at_exit handler can get unhandled exception in at_exit handler + runs all handlers maximum once runs all handlers maximum once + shows unhandled exceptions after at_exit handlers shows unhandled exceptions after at_exit handlers + runs handlers on normal program ending runs handlers on normal program ending + changes final exit code when an handler raises an error changes final exit code when an handler raises an error + prints unhandled exception with cause prints unhandled exception with cause + allows at_exit inside at_exit allows at_exit inside at_exit + runs handlers in reverse order runs handlers in reverse order __fixdfti passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests @@ -20914,2146 +20474,789 @@ passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests -JSON mapping - parses with nilable root and emit null parses with nilable root and emit null - parses person with unknown attributes parses person with unknown attributes - raises if non-nilable attribute is nil raises if non-nilable attribute is nil - parses json with Time::Format converter parses json with Time::Format converter - allows setting a nilable property to nil allows setting a nilable property to nil - fixes #13337 fixes #13337 - parses simple mapping parses simple mapping - works with record works with record - parses nilable union parses nilable union - work with module and inheritance - assert assert - assert assert - assert assert - assert assert - use_json_discriminator - raises if missing discriminator raises if missing discriminator - deserializes with discriminator, strict recursive type deserializes with discriminator, strict recursive type - raises if unknown discriminator value raises if unknown discriminator value - deserializes with discriminator deserializes with discriminator - deserializes with discriminator, another recursive type, fixes: #13429 deserializes with discriminator, another recursive type, fixes: #13429 - deserializes with variable discriminator value type deserializes with variable discriminator value type - uses Time::EpochConverter uses Time::EpochConverter - emit_nulls option emit_nulls option - JSON::HashValueConverter(Converter) - uses converter instance with nested converter metaclass uses converter instance with nested converter metaclass - uses converter instance with nested converter instance uses converter instance with nested converter instance - uses converter metaclass uses converter metaclass - doesn't emit null by default when doing to_json doesn't emit null by default when doing to_json - parses with nilable root parses with nilable root - namespaced classes - lets default values use the object's own namespace lets default values use the object's own namespace - parses json with keywords parses json with keywords - works with class with two fields works with class with two fields - parses raw value from int parses raw value from int - parses UUID parses UUID - parses raw value from float parses raw value from float - raises if not an object raises if not an object - parses raw value from object parses raw value from object - uses Time::EpochMillisConverter uses Time::EpochMillisConverter - should to store extra fields (JSONAttrPersonExtraFields with on_to_json) should to store extra fields (JSONAttrPersonExtraFields with on_to_json) - outputs with converter when nilable outputs with converter when nilable - parses person parses person - parses with root parses with root - converter with null value (#13655) converter with null value (#13655) - empty class with unmapped empty class with unmapped - parses 128-bit integer parses 128-bit integer - parses array of people parses array of people - parses json array as set parses json array as set - serializes JSON with presence markers and ignore_serialize - ignore_serialize is set to a method which returns true when value is nil or empty string - ignores field when value is empty string ignores field when value is empty string - ignores field when value is nil ignores field when value is nil - ignore_serialize is set to conditional expressions 'last_name.nil? && !last_name_present?' - emits field when value is not nil and @last_name_present is true emits field when value is not nil and @last_name_present is true - does not emit null when value is null and @last_name_present is false does not emit null when value is null and @last_name_present is false - emits field when value is not nil and @last_name_present is false emits field when value is not nil and @last_name_present is false - emits null when value is null and @last_name_present is true emits null when value is null and @last_name_present is true - outputs JSON with Hash outputs JSON with Hash - empty class empty class - raises if data type does not match raises if data type does not match - parses JSON with presence markers - parses person with absent attributes parses person with absent attributes - yaml and json with after_initialize hook yaml and json with after_initialize hook - parses person without age parses person without age - does to_json does to_json - JSON::ArrayConverter(Converter) - uses converter instance with nested converter metaclass uses converter instance with nested converter metaclass - uses converter instance with nested converter instance uses converter instance with nested converter instance - uses converter metaclass uses converter metaclass - BigDecimal - parses large json ints with BigDecimal parses large json ints with BigDecimal - parses json float with BigDecimal parses json float with BigDecimal - parses large precision json floats with BigDecimal parses large precision json floats with BigDecimal - parses json string with BigDecimal parses json string with BigDecimal - emits null on request when doing to_json emits null on request when doing to_json - outputs with converter when nilable when emit_null is true outputs with converter when nilable when emit_null is true - doesn't raises on false value when not-nil doesn't raises on false value when not-nil - parses json with any parses json with any - works together with yaml works together with yaml - should parse extra fields (JSONAttrPersonExtraFields with on_unknown_json_attribute) should parse extra fields (JSONAttrPersonExtraFields with on_unknown_json_attribute) - allows small types of integer allows small types of integer - parses json with defaults - mixed mixed - with nilable with nilable - bool bool - create new array every time create new array every time - parses JSON integer into a float property (#8618) parses JSON integer into a float property (#8618) - json with selective serialization json with selective serialization - parses strict person with unknown attributes parses strict person with unknown attributes - converter with default value converter with default value - parses json with problematic keys parses json with problematic keys - with query attributes - defines query getter with class restriction defines query getter with class restriction - defines non-query setter and presence methods defines non-query setter and presence methods - raises if non-nilable attribute is nil raises if non-nilable attribute is nil - defines query getter defines query getter - maps non-query attributes maps non-query attributes -Log::Dispatcher - create dispatcher from enum create dispatcher from enum -System - cpu_count - returns current CPU count returns current CPU count - hostname - returns current hostname returns current hostname -Crystal::PointerLinkedList(T) - does each does each - shift? - return nil if list is empty return nil if list is empty - remove and return the first element remove and return the first element - empty? - return true if there is no element in list return true if there is no element in list - push - append the node into the list append the node into the list - delete - remove a node from list remove a node from list -OpenSSL::HMAC - computes SHA224 computes SHA224 - computes SHA384 computes SHA384 - computes SHA512 computes SHA512 - computes SHA1 computes SHA1 - computes MD5 computes MD5 - computes SHA256 computes SHA256 -JSON::PullParser - errors on [}] errors on [}] - errors on ["hello" 2] errors on ["hello" 2] - reads string or null reads string or null - parses {"foo": 1, "bar": 2} parses {"foo": 1, "bar": 2} - parses [1] parses [1] - errors on {"name": "John", "age", 1} errors on {"name": "John", "age", 1} - #raise #raise - errors on [ errors on [ - errors on [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] errors on [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] - reads int or null reads int or null - errors on {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} errors on {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} - errors on {"foo",1} errors on {"foo",1} - parses true parses true - parses [null] parses [null] - parses [] parses [] - prevents stack overflow for hashes prevents stack overflow for hashes - errors on {"foo": {} errors on {"foo": {} - parses when the input IO is already empty parses when the input IO is already empty - reads object or null reads object or null - parses [false] parses [false] - skip - skips int skips int - skips null skips null - skips string skips string - skips object skips object - skips bool skips bool - skips float skips float - skips array skips array - errors on [1.5 2] errors on [1.5 2] - errors on [false 2] errors on [false 2] - parses 1.5 parses 1.5 - errors on [1 2] errors on [1 2] - errors on [,1] errors on [,1] - errors on {"name": "John", "age": "foo", "bar"} errors on {"name": "John", "age": "foo", "bar"} - errors on [[] errors on [[] - errors on {"foo": []:1} errors on {"foo": []:1} - parses 1 parses 1 - parses ["hello"] parses ["hello"] - parses false parses false - errors on [true 2] errors on [true 2] - parses [true] parses [true] - errors on []] errors on []] - errors on {"foo"::1} errors on {"foo"::1} - parses {"foo": 1} parses {"foo": 1} - #read? - returns nil in place of Int8 when an overflow occurs returns nil in place of Int8 when an overflow occurs - reads Int128: -170141183460469231731687303715884105728 reads Int128: -170141183460469231731687303715884105728 - reads UInt8 when the token is a compatible kind reads UInt8 when the token is a compatible kind - reads UInt64 when the token is a compatible kind reads UInt64 when the token is a compatible kind - reads UInt64: 0 reads UInt64: 0 - reads Int64: 9223372036854775807 reads Int64: 9223372036854775807 - reads Int32: 10 reads Int32: 10 - reads > Float32::MAX reads > Float32::MAX - reads Int8: -128 reads Int8: -128 - doesn't accept nan or infinity doesn't accept nan or infinity - returns nil in place of Int16 when an overflow occurs returns nil in place of Int16 when an overflow occurs - reads Float32 when the token is a compatible kind reads Float32 when the token is a compatible kind - returns nil in place of UInt8 when an overflow occurs returns nil in place of UInt8 when an overflow occurs - reads < Float64::MIN reads < Float64::MIN - reads UInt16: 65535 reads UInt16: 65535 - returns nil instead of UInt8 when the token is not compatible returns nil instead of UInt8 when the token is not compatible - reads UInt64: 10 reads UInt64: 10 - reads String when the token is a compatible kind reads String when the token is a compatible kind - reads Int32: -10 reads Int32: -10 - returns nil in place of UInt32 when an overflow occurs returns nil in place of UInt32 when an overflow occurs - reads Bool when the token is a compatible kind reads Bool when the token is a compatible kind - reads Int128: -10 reads Int128: -10 - reads Int8: -10 reads Int8: -10 - returns nil in place of UInt16 when an overflow occurs returns nil in place of UInt16 when an overflow occurs - reads UInt16 when the token is a compatible kind reads UInt16 when the token is a compatible kind - reads < Float32::MIN reads < Float32::MIN - reads Int8 when the token is a compatible kind reads Int8 when the token is a compatible kind - returns nil instead of UInt32 when the token is not compatible returns nil instead of UInt32 when the token is not compatible - reads Int128 when the token is a compatible kind reads Int128 when the token is a compatible kind - reads Int16: 32767 reads Int16: 32767 - reads UInt128 when the token is a compatible kind reads UInt128 when the token is a compatible kind - reads Int64: -10 reads Int64: -10 - reads UInt16: 0 reads UInt16: 0 - returns nil instead of Int64 when the token is not compatible returns nil instead of Int64 when the token is not compatible - reads UInt64: 18446744073709551615 reads UInt64: 18446744073709551615 - returns nil in place of Int128 when an overflow occurs returns nil in place of Int128 when an overflow occurs - reads UInt32: 0 reads UInt32: 0 - reads UInt128: 0 reads UInt128: 0 - returns nil in place of Int32 when an overflow occurs returns nil in place of Int32 when an overflow occurs - returns nil instead of UInt16 when the token is not compatible returns nil instead of UInt16 when the token is not compatible - returns nil instead of String when the token is not compatible returns nil instead of String when the token is not compatible - reads Int64: 0 reads Int64: 0 - reads Int16: -10 reads Int16: -10 - reads UInt16: 10 reads UInt16: 10 - reads UInt8: 0 reads UInt8: 0 - reads Int16: 0 reads Int16: 0 - reads Float64 when the token is a compatible kind reads Float64 when the token is a compatible kind - returns nil instead of Int8 when the token is not compatible returns nil instead of Int8 when the token is not compatible - reads Int64: -9223372036854775808 reads Int64: -9223372036854775808 - reads UInt32: 10 reads UInt32: 10 - returns nil instead of Float32 when the token is not compatible returns nil instead of Float32 when the token is not compatible - reads Int32: 0 reads Int32: 0 - returns nil in place of UInt128 when an overflow occurs returns nil in place of UInt128 when an overflow occurs - returns nil instead of UInt128 when the token is not compatible returns nil instead of UInt128 when the token is not compatible - reads Int64: 10 reads Int64: 10 - reads UInt8: 10 reads UInt8: 10 - reads Int128: 0 reads Int128: 0 - reads Int32 when the token is a compatible kind reads Int32 when the token is a compatible kind - reads Int8: 10 reads Int8: 10 - returns nil instead of Int128 when the token is not compatible returns nil instead of Int128 when the token is not compatible - reads Int16 when the token is a compatible kind reads Int16 when the token is a compatible kind - returns nil instead of Float64 when the token is not compatible returns nil instead of Float64 when the token is not compatible - reads Int8: 127 reads Int8: 127 - reads Int128: 10 reads Int128: 10 - reads Int8: 0 reads Int8: 0 - returns nil in place of Int64 when an overflow occurs returns nil in place of Int64 when an overflow occurs - reads > Float64::MAX reads > Float64::MAX - returns nil instead of Bool when the token is not compatible returns nil instead of Bool when the token is not compatible - reads Int64 when the token is a compatible kind reads Int64 when the token is a compatible kind - reads UInt128: 10 reads UInt128: 10 - reads Int128: 170141183460469231731687303715884105727 reads Int128: 170141183460469231731687303715884105727 - reads Int32: -2147483648 reads Int32: -2147483648 - returns nil instead of Int32 when the token is not compatible returns nil instead of Int32 when the token is not compatible - reads Int32: 2147483647 reads Int32: 2147483647 - reads Int16: 10 reads Int16: 10 - reads UInt32: 4294967295 reads UInt32: 4294967295 - returns nil in place of UInt64 when an overflow occurs returns nil in place of UInt64 when an overflow occurs - returns nil instead of UInt64 when the token is not compatible returns nil instead of UInt64 when the token is not compatible - reads UInt128: 340282366920938463463374607431768211455 reads UInt128: 340282366920938463463374607431768211455 - reads UInt32 when the token is a compatible kind reads UInt32 when the token is a compatible kind - reads Int16: -32768 reads Int16: -32768 - reads UInt8: 255 reads UInt8: 255 - returns nil instead of Int16 when the token is not compatible returns nil instead of Int16 when the token is not compatible - errors on {,"foo": 1} errors on {,"foo": 1} - on key - yields all keys when skipping [1] yields all keys when skipping [1] - doesn't find key with bang doesn't find key with bang - yields all keys when skipping {"x": [1]} yields all keys when skipping {"x": [1]} - reads float when it is an int reads float when it is an int - finds key finds key - yields all keys when skipping 1 yields all keys when skipping 1 - yields parser yields parser - finds key with bang finds key with bang - yields parser with bang yields parser with bang - doesn't find key doesn't find key - parses {"foo": [1, 2]} parses {"foo": [1, 2]} - parses [1.5] parses [1.5] - errors on [null 2] errors on [null 2] - parses "hello" parses "hello" - errors on {}} errors on {}} - reads array or null reads array or null - prevents stack overflow for arrays prevents stack overflow for arrays - raw - parses raw "{\"foo\":[1,2,{\"bar\":[1,\"hello\",true,false,1.5]}]}" parses raw "{\"foo\":[1,2,{\"bar\":[1,\"hello\",true,false,1.5]}]}" - parses raw "null" parses raw "null" - parses raw "1234.5678" parses raw "1234.5678" - parses raw "[1,\"hello\",true,false,null,[1,2,3]]" parses raw "[1,\"hello\",true,false,null,[1,2,3]]" - parses raw "{\"foo\":\"bar\"}" parses raw "{\"foo\":\"bar\"}" - parses raw "\"hello\"" parses raw "\"hello\"" - parses raw "false" parses raw "false" - parses raw "true" parses raw "true" - parses raw "1234" parses raw "1234" - parses [1, 2] parses [1, 2] - parses {"foo": "foo1", "bar": "bar1"} parses {"foo": "foo1", "bar": "bar1"} - parses {"foo": "bar"} parses {"foo": "bar"} - parses {} parses {} - reads bool or null reads bool or null - parses [[]] parses [[]] - parses null parses null - reads float or null reads float or null - errors on ["foo":1] errors on ["foo":1] -Thread - yields the processor yields the processor - returns current thread object returns current thread object - raises inside thread and gets it on join raises inside thread and gets it on join - allows passing an argumentless fun to execute allows passing an argumentless fun to execute - names the thread names the thread -IO::Buffered - rewinds rewinds - sync - syncs (write) syncs (write) - does gets with big line and \r\n does gets with big line and \r\n - does gets with char and limit when not found in buffer (2) does gets with char and limit when not found in buffer (2) - encoding - decode - gets_to_end gets_to_end - gets gets - gets big string gets big string - gets big EUC-JP string gets big EUC-JP string - reads char reads char - gets with chomp = false gets with chomp = false - skips big skips big - reads char reads char - does gets with chomp = false does gets with chomp = false - can not set buffer_size after first use can not set buffer_size after first use - does gets with char and limit without off-by-one does gets with char and limit without off-by-one - does puts with big string does puts with big string - can report buffer_size can report buffer_size - flush_on_newline - flushes on - flushes on - - doesn't write past count doesn't write past count - writes bytes writes bytes - does puts many times does puts many times - does gets with unicode char delimiter does gets with unicode char delimiter - does gets with char and limit when not found in buffer does gets with char and limit when not found in buffer - shouldn't call unbuffered read if reading to an empty slice shouldn't call unbuffered read if reading to an empty slice - skips skips - does puts does puts - does gets with big line does gets with big line - does gets with limit does gets with limit - peeks peeks - reads more than the buffer's internal capacity reads more than the buffer's internal capacity - raises if invoking gets with negative limit raises if invoking gets with negative limit - writes more than the buffer's internal capacity writes more than the buffer's internal capacity - does new with block does new with block - does gets with char delimiter does gets with char delimiter - does gets does gets - can set buffer_size can set buffer_size - does gets with big line and chomp = false does gets with big line and chomp = false - can set buffer_size to the same value after first use can set buffer_size to the same value after first use - read_buffering - works with IO#read (already buffered) works with IO#read (already buffered) - works with IO#read_byte (already buffered) works with IO#read_byte (already buffered) - works with IO#read_byte works with IO#read_byte - works with IO#read works with IO#read - reads byte reads byte - does gets with char and limit does gets with char and limit -HTTP::Server::RequestProcessor - handles IO::Error while reading handles IO::Error while reading - doesn't respond with error when headers were already sent doesn't respond with error when headers were already sent - reads consecutive requests - with empty body with empty body - fail if body is not consumed fail if body is not consumed - when body is consumed when body is consumed - closes connection when request body is not entirely consumed closes connection when request body is not entirely consumed - closes connection when Connection: close closes connection when Connection: close - continues when request body is entirely consumed continues when request body is entirely consumed - catches raised error on handler and retains context from handler catches raised error on handler and retains context from handler - handles IO::Error while writing handles IO::Error while writing - flushes output buffer when an error happens and some content was already sent flushes output buffer when an error happens and some content was already sent - does not bleed Log::Context between requests does not bleed Log::Context between requests - works works - handles IO::Error while flushing handles IO::Error while flushing -Exception - allows subclassing #message allows subclassing #message - collect memory within ensure block collect memory within ensure block - inspects inspects - inspects with cause inspects with cause -Compress::Zlib::Writer - can be flushed can be flushed - can be closed without sync can be closed without sync - can be closed with sync (2) can be closed with sync (2) - can be closed with sync (1) can be closed with sync (1) - should be able to write should be able to write -Spec matchers - pending block is not compiled - pending has block with valid syntax, but invalid semantics pending has block with valid syntax, but invalid semantics - should contain - works with range works with range - does not pass when string does not includes? specified substring does not pass when string does not includes? specified substring - works with array works with array - passes when string includes? specified substring passes when string includes? specified substring - works with set works with set - should_not contain - passes when string does not includes? specified substring passes when string does not includes? specified substring - does not pass when string does not includes? specified substring does not pass when string does not includes? specified substring - detects a nesting `it` detects a nesting `it` - should be_truthy - passes for true passes for true - passes for some non-nil, non-false value passes for some non-nil, non-false value - should be_falsey - passes for false passes for false - passes for nil passes for nil - should work like describe - is true is true - should_not be_falsey - passes for true passes for true - passes for some non-nil, non-false value passes for some non-nil, non-false value - should_not be_truthy - passes for nil passes for nil - passes for false passes for false - be_nil - does not pass for overwritten `==` does not pass for overwritten `==` - passes for nil passes for nil - expect_raises - return exception return exception - detects a nesting `pending` detects a nesting `pending` -Crystal::SyntaxHighlighter::Colorize - .highlight! - "foo = bar(\"baz\#{PI + 1}\") # comment" "foo = bar(\"baz\#{PI + 1}\") # comment" - "foo, bar = <<-FOO, <<-BAR\n foo" "foo, bar = <<-FOO, <<-BAR\n foo" - "foo, bar = <<-FOO, <<-BAR\n foo\n FOO" "foo, bar = <<-FOO, <<-BAR\n foo\n FOO" - "%w[foo" "%w[foo" - "%i[foo" "%i[foo" - "\"foo" "\"foo" - .highlight - "1 [] 2" "1 [] 2" - "if" "if" - "foo, bar = <<-FOO, <<-BAR\n foo\n FOO\n bar\n BAR" "foo, bar = <<-FOO, <<-BAR\n foo\n FOO\n bar\n BAR" - "3.14" "3.14" - "ensure" "ensure" - "include" "include" - "fun" "fun" - "\"<>\"" "\"<>\"" - "asm" "asm" - "42" "42" - "def <" "def <" - "def <=" "def <=" - "Foo::Bar" "Foo::Bar" - ":foo" ":foo" - "def ==" "def ==" - "%q(foo)" "%q(foo)" - "%i(foo bar baz)" "%i(foo bar baz)" - "def !~" "def !~" - "'<'" "'<'" - "1 %= 2" "1 %= 2" - "%w(foo bar\n baz)" "%w(foo bar\n baz)" - "uninitialized" "uninitialized" - "def !=" "def !=" - "1 ~ 2" "1 ~ 2" - "next" "next" - "1 ||= 2" "1 ||= 2" - "a/b" "a/b" - "1 ** 2" "1 ** 2" - "def <<" "def <<" - "# bar\n" "# bar\n" - "def >=" "def >=" - "1 ! 2" "1 ! 2" - "break" "break" - "1 &** 2" "1 &** 2" - "nil" "nil" - "a / b" "a / b" - "of" "of" - "%<foo>" "%<foo>" - "1 &&= 2" "1 &&= 2" - "1 % 2" "1 % 2" - ":\"foo\"" ":\"foo\"" - "false" "false" - "%x(foo)" "%x(foo)" - "1 //= 2" "1 //= 2" - "1 &+ 2" "1 &+ 2" - "return" "return" - "end" "end" - "\"foo\"" "\"foo\"" - "1 // 2" "1 // 2" - "1 **= 2" "1 **= 2" - "1 & 2" "1 & 2" - "super" "super" - "true" "true" - "$2?" "$2?" - "with" "with" - "1 >>= 2" "1 >>= 2" - "1 / 2" "1 / 2" - "1 | 2" "1 | 2" - "def foo" "def foo" - "1 &* 2" "1 &* 2" - "1 >> 2" "1 >> 2" - "1 <= 2" "1 <= 2" - "def **" "def **" - "123_i64" "123_i64" - "# foo\n# bar\n" "# foo\n# bar\n" - "annotation" "annotation" - "in" "in" - "\"foo\#{[1, bar, \"str\"]}baz\"" "\"foo\#{[1, bar, \"str\"]}baz\"" - "as" "as" - "def ~" "def ~" - "1 &-= 2" "1 &-= 2" - "protected" "protected" - "/foo/xim" "/foo/xim" - "def =~" "def =~" - "%r(foo)xim" "%r(foo)xim" - "then" "then" - "1 []? 2" "1 []? 2" - "\"foo\#{bar}baz\"" "\"foo\#{bar}baz\"" - "a /b/" "a /b/" - "1 * 2" "1 * 2" - "out" "out" - "1 =~ 2" "1 =~ 2" - "1 &- 2" "1 &- 2" - "def" "def" - "a/ b" "a/ b" - "1 &= 2" "1 &= 2" - "# foo" "# foo" - "1 *= 2" "1 *= 2" - "def ^" "def ^" - "def /" "def /" - "def >" "def >" - "1 &+= 2" "1 &+= 2" - "1 || 2" "1 || 2" - "def %" "def %" - "1 < 2" "1 < 2" - "union" "union" - "when" "when" - "do" "do" - "begin" "begin" - "%Q(foo)" "%Q(foo)" - "1 += 2" "1 += 2" - "\"nest1\#{foo + \"nest2\#{1 + 1}bar\"}baz\"" "\"nest1\#{foo + \"nest2\#{1 + 1}bar\"}baz\"" - "1 ^= 2" "1 ^= 2" - "1 = 2" "1 = 2" - "Set{1, 2, 3}" "Set{1, 2, 3}" - "1 <=> 2" "1 <=> 2" - "private" "private" - "def &" "def &" - "pointerof" "pointerof" - "1 >= 2" "1 >= 2" - "1 /= 2" "1 /= 2" - "elsif" "elsif" - "foo bar" "foo bar" - "1 + 2" "1 + 2" - "as?" "as?" - "is_a?" "is_a?" - "abstract" "abstract" - "typeof" "typeof" - "1 /2" "1 /2" - "def []?" "def []?" - "struct" "struct" - "verbatim" "verbatim" - "enum" "enum" - "select" "select" - "1 - 2" "1 - 2" - "alias" "alias" - "extend" "extend" - "1 == 2" "1 == 2" - "instance_sizeof" "instance_sizeof" - "1 -= 2" "1 -= 2" - "`foo`" "`foo`" - "def []" "def []" - "def >>" "def >>" - "foo\nbar" "foo\nbar" - "%(foo)" "%(foo)" - "def *" "def *" - "1/2" "1/2" - "def <=>" "def <=>" - "Foo" "Foo" - "self" "self" - "case" "case" - "1 << 2" "1 << 2" - "foo = bar(\"baz\#{PI + 1}\") # comment" "foo = bar(\"baz\#{PI + 1}\") # comment" - "$1" "$1" - "sizeof" "sizeof" - "1 === 2" "1 === 2" - "require" "require" - "nil?" "nil?" - "alignof" "alignof" - "instance_alignof" "instance_alignof" - "while" "while" - "def |" "def |" - "class" "class" - "def +" "def +" - "'a'" "'a'" - "1 != 2" "1 != 2" - "1 !~ 2" "1 !~ 2" - "1 <<= 2" "1 <<= 2" - "1 &*= 2" "1 &*= 2" - "unless" "unless" - "# <\">" "# <\">" - "lib" "lib" - "for" "for" - "def []=" "def []=" - "def -" "def -" - "offsetof" "offsetof" - "1 > 2" "1 > 2" - "1 ^ 2" "1 ^ 2" - "else" "else" - "def //" "def //" - "yield" "yield" - "foo" "foo" - "macro" "macro" - "%w<foo bar baz>" "%w<foo bar baz>" - "1 []= 2" "1 []= 2" - "1/ 2" "1/ 2" - "$~" "$~" - "1 && 2" "1 && 2" - "module" "module" - "type" "type" - "rescue" "rescue" - "until" "until" - "%w(foo bar baz)" "%w(foo bar baz)" - "1 |= 2" "1 |= 2" - "$?" "$?" -SemanticVersion - bumps to the correct version bumps to the correct version - copies with specified modifications copies with specified modifications - compares < compares < - SemanticVersion::Prerelease - compares < compares < - compares build equivalence compares build equivalence - does not accept bad versions does not accept bad versions -HTTP::StaticFileHandler - returns 400 returns 400 - with If-Modified-Since header - returns 304 Not Modified for equal to Last-Modified returns 304 Not Modified for equal to Last-Modified - returns 304 Not Modified for younger than Last-Modified returns 304 Not Modified for younger than Last-Modified - serves content for older than Last-Modified serves content for older than Last-Modified - handles only GET and HEAD method handles only GET and HEAD method - with multiple If-None-Match header - returns 304 Not Modified if at least one header matches etag returns 304 Not Modified if at least one header matches etag - serves file if no header matches etag serves file if no header matches etag - still serve compressed content when modification time is very close still serve compressed content when modification time is very close - unescapes a request path unescapes a request path - does not serve a not found directory does not serve a not found directory - does not list directory's entries when directory_listing is set to false does not list directory's entries when directory_listing is set to false - lists directory's entries lists directory's entries - with If-None-Match header - returns 304 Not Modified if header is * returns 304 Not Modified if header is * - serves file if header does not contain valid etag serves file if header does not contain valid etag - serves file if header is empty serves file if header is empty - serves file if header does not match etag serves file if header does not match etag - returns 304 Not Modified if header matches etag returns 304 Not Modified if header matches etag - serve compressed content serve compressed content - adds Last-Modified header adds Last-Modified header - adds Etag header adds Etag header - does not serve a not found file does not serve a not found file - handles invalid redirect path handles invalid redirect path - handles forbidden characters in windows paths handles forbidden characters in windows paths - when a Range header is provided - invalid Range syntax - open range with negative end open range with negative end - negative end negative end - not a range not a range - open range with negative end open range with negative end - multiple dashes multiple dashes - start > end start > end - byte number without dash byte number without dash - not a number not a number - unsupported unit unsupported unit - int range - start of the range is larger than the file size start of the range is larger than the file size - start >= file_size start >= file_size - serves multiple byte ranges (separator with whitespace) serves multiple byte ranges (separator with whitespace) - serves multiple byte ranges (separator without whitespace) serves multiple byte ranges (separator without whitespace) - serves zero bytes serves zero bytes - serves a byte range serves a byte range - end of the range is larger than the file size end of the range is larger than the file size - serves a single byte serves a single byte - serves an open-ended byte range serves an open-ended byte range - suffix range - partial partial - negative size negative size - empty file empty file - zero zero - more bytes than content more bytes than content - zero zero - doesn't serve compressed content if older than raw file doesn't serve compressed content if older than raw file - serves a file serves a file - with both If-None-Match and If-Modified-Since headers - serves a file if header does not match etag even If-Modified-Since is fresh serves a file if header does not match etag even If-Modified-Since is fresh - ignores If-Modified-Since as specified in RFC 7232 ignores If-Modified-Since as specified in RFC 7232 - does not serve a file as directory does not serve a file as directory - expands a request path expands a request path -YAML - dump - returns YAML as a string returns YAML as a string - writes YAML to a stream writes YAML to a stream - parser - parses alias to scalar parses alias to scalar - parses recursive mapping parses recursive mapping - assert assert - assert assert - assert assert - assert assert - parses recursive sequence parses recursive sequence - assert assert - assert assert - merging with << key - has correct line/number info (2) has correct line/number info (2) - raises if merging with missing alias raises if merging with missing alias - has correct line/number info (#2585) has correct line/number info (#2585) - doesn't merge arrays doesn't merge arrays - has correct message (#4006) has correct message (#4006) - merges other mapping with array of alias merges other mapping with array of alias - doesn't merge empty mapping doesn't merge empty mapping - merges other mapping merges other mapping - merges other mapping with alias merges other mapping with alias - parses from IO parses from IO - doesn't merge explicit string key << doesn't merge explicit string key << -Socket::UNIXAddress - raises when path is too long raises when path is too long - transforms into a C struct and back transforms into a C struct and back - #== #== - .parse - parses relative parses relative - parses relative dot parses relative dot - parses relative subpath parses relative subpath - ignores params ignores params - parses absolute parses absolute - relative with relative with - fails with missing path fails with missing path - to_s to_s -LLVM::Type - .const_int - support Int64 support Int64 - support Int128 support Int128 -JSON::Any - #[]? - of hash of hash - of array of array - dig - raises if not found raises if not found - gets the value at given path given splat gets the value at given path given splat - can compare with === can compare with === - compares to other objects compares to other objects - #dig? - returns nil if not found returns nil if not found - gets the value at given path given splat gets the value at given path given splat - returns nil for non-Hash/Array intermediary values returns nil for non-Hash/Array intermediary values - clones clones - #size - of array of array - of hash of hash - exposes $~ when doing Regex#=== exposes $~ when doing Regex#=== - #to_yaml #to_yaml - #[] - of hash of hash - of array of array - casts - gets nil gets nil - gets float32 gets float32 - gets float32 from JSON integer (#8618) gets float32 from JSON integer (#8618) - gets int64 gets int64 - gets bool gets bool - gets array gets array - gets float64 from JSON integer (#8618) gets float64 from JSON integer (#8618) - gets int32 gets int32 - gets float64 gets float64 - gets string gets string - gets hash gets hash - dups dups - traverses big structure traverses big structure - .new .new -TCPSocket - fails when connection is refused fails when connection is refused - settings settings - sync from server sync from server - #connect - fails to connect IPv6 to IPv4 server fails to connect IPv6 to IPv4 server - address resolution - raises (rather than segfault on darwin) when host doesn't exist and port is 0 raises (rather than segfault on darwin) when host doesn't exist and port is 0 - raises when host doesn't exist raises when host doesn't exist - connects to localhost connects to localhost - using IPv6 - raises when port is negative raises when port is negative - raises when connection is refused raises when connection is refused - raises when port is zero raises when port is zero - connects to server connects to server - using IPv4 - raises when connection is refused raises when connection is refused - raises when port is negative raises when port is negative - raises when port is zero raises when port is zero - connects to server connects to server - sends and receives messages sends and receives messages - sends and receives messages sends and receives messages -Log::IOBackend - yields message yields message - logs any object logs any object - uses custom formatter uses custom formatter - logs context logs context - creates with defaults creates with defaults - formats message formats message - logs messages logs messages - allows setting formatter in initializer allows setting formatter in initializer -Int - #humanize_bytes - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert -Number - converts from UInt64 to Int16 converts from UInt64 to Int16 - converts from Int64 to UInt32 converts from Int64 to UInt32 - converts from UInt8 to Int64 converts from UInt8 to Int64 - division between Int8 / UInt16 returns Float64 division between Int8 / UInt16 returns Float64 - division between Float64 / UInt8 returns Float64 division between Float64 / UInt8 returns Float64 - unchecked initialize from value to Float64 unchecked initialize from value to Float64 - converts from Int32 to Float32 converts from Int32 to Float32 - division between Int16 / Int64 returns Float64 division between Int16 / Int64 returns Float64 - converts from UInt64 to Int8 converts from UInt64 to Int8 - converts from Int128 to Int64 converts from Int128 to Int64 - converts from Int32 to Int128 converts from Int32 to Int128 - floor_division Int128 // Int128 returns Int128 floor_division Int128 // Int128 returns Int128 - converts from UInt16 to UInt8 converts from UInt16 to UInt8 - floor_division Float64 // UInt128 returns Float64 floor_division Float64 // UInt128 returns Float64 - division between Int128 / Float32 returns Float32 division between Int128 / Float32 returns Float32 - converts from Int32 to Int32 converts from Int32 to Int32 - floor_division Int16 // Int128 returns Int16 floor_division Int16 // Int128 returns Int16 - converts from Float32 to UInt128 converts from Float32 to UInt128 - division between UInt32 / Int32 returns Float64 division between UInt32 / Int32 returns Float64 - compare the numbers compare the numbers - floor_division UInt16 // UInt8 returns UInt16 floor_division UInt16 // UInt8 returns UInt16 - converts from Int16 to Int128 converts from Int16 to Int128 - floor_division Int32 // Int64 returns Int32 floor_division Int32 // Int64 returns Int32 - initialize from value to Int16 initialize from value to Int16 - division between Int64 / UInt16 returns Float64 division between Int64 / UInt16 returns Float64 - converts from UInt128 to UInt16 converts from UInt128 to UInt16 - converts from Int32 to UInt128 converts from Int32 to UInt128 - converts from UInt128 to Int16 converts from UInt128 to Int16 - division between UInt16 / Int32 returns Float64 division between UInt16 / Int32 returns Float64 - converts from Int32 to Int16 converts from Int32 to Int16 - converts from Int64 to Int64 converts from Int64 to Int64 - converts from Float64 to Int64 converts from Float64 to Int64 - converts from UInt32 to Int64 converts from UInt32 to Int64 - division between Float64 / UInt16 returns Float64 division between Float64 / UInt16 returns Float64 - unchecked initialize from value to Int64 unchecked initialize from value to Int64 - converts from Int64 to Int16 converts from Int64 to Int16 - floor_division Int8 // UInt128 returns Int8 floor_division Int8 // UInt128 returns Int8 - converts from Float32 to Int64 converts from Float32 to Int64 - converts from Int128 to UInt32 converts from Int128 to UInt32 - floor_division Int16 // Float32 returns Int16 floor_division Int16 // Float32 returns Int16 - division between UInt128 / UInt8 returns Float64 division between UInt128 / UInt8 returns Float64 - converts from Int16 to UInt8 converts from Int16 to UInt8 - unchecked initialize from value to Int128 unchecked initialize from value to Int128 - converts from Int128 to UInt16 converts from Int128 to UInt16 - floor_division Int128 // Int16 returns Int128 floor_division Int128 // Int16 returns Int128 - division between Float64 / Float64 returns Float64 division between Float64 / Float64 returns Float64 - floor_division UInt8 // UInt16 returns UInt8 floor_division UInt8 // UInt16 returns UInt8 - division between Float32 / Int16 returns Float32 division between Float32 / Int16 returns Float32 - converts from Float64 to UInt32 converts from Float64 to UInt32 - converts from UInt32 to Int8 converts from UInt32 to Int8 - converts from UInt8 to Int16 converts from UInt8 to Int16 - unchecked initialize from value to Int32 unchecked initialize from value to Int32 - division between Int8 / Int32 returns Float64 division between Int8 / Int32 returns Float64 - floor_division Float32 // UInt16 returns Float32 floor_division Float32 // UInt16 returns Float32 - converts from Int16 to Int8 converts from Int16 to Int8 - converts from UInt16 to UInt16 converts from UInt16 to UInt16 - significant - 8 base 8 base - 10 base 10 base - preserves type preserves type - 2 base 2 base - converts from Float64 to Int128 converts from Float64 to Int128 - converts from Int16 to UInt32 converts from Int16 to UInt32 - division between Int64 / UInt64 returns Float64 division between Int64 / UInt64 returns Float64 - floor_division Int128 // UInt128 returns Int128 floor_division Int128 // UInt128 returns Int128 - converts from Int8 to UInt32 converts from Int8 to UInt32 - converts from UInt128 to UInt128 converts from UInt128 to UInt128 - floor_division Float64 // UInt8 returns Float64 floor_division Float64 // UInt8 returns Float64 - floor_division Float32 // UInt8 returns Float32 floor_division Float32 // UInt8 returns Float32 - converts from UInt16 to UInt8 converts from UInt16 to UInt8 - converts from UInt16 to UInt64 converts from UInt16 to UInt64 - converts from UInt32 to UInt8 converts from UInt32 to UInt8 - division between Int128 / Float64 returns Float64 division between Int128 / Float64 returns Float64 - converts from UInt64 to Float64 converts from UInt64 to Float64 - converts from Float32 to Float32 converts from Float32 to Float32 - division between Float64 / Int8 returns Float64 division between Float64 / Int8 returns Float64 - floor_division UInt64 // Int16 returns UInt64 floor_division UInt64 // Int16 returns UInt64 - division between UInt128 / Int32 returns Float64 division between UInt128 / Int32 returns Float64 - converts from Int128 to UInt128 converts from Int128 to UInt128 - floor_division UInt128 // Int8 returns UInt128 floor_division UInt128 // Int8 returns UInt128 - floor_division Float64 // Int32 returns Float64 floor_division Float64 // Int32 returns Float64 - converts from UInt32 to UInt128 converts from UInt32 to UInt128 - floor_division Float64 // Float64 returns Float64 floor_division Float64 // Float64 returns Float64 - division between UInt16 / Int8 returns Float64 division between UInt16 / Int8 returns Float64 - converts from UInt32 to Int32 converts from UInt32 to Int32 - floor_division UInt128 // Int64 returns UInt128 floor_division UInt128 // Int64 returns UInt128 - initialize from value to Float32 initialize from value to Float32 - division between Float32 / Int64 returns Float32 division between Float32 / Int64 returns Float32 - floor_division UInt8 // Int32 returns UInt8 floor_division UInt8 // Int32 returns UInt8 - division between UInt16 / Float32 returns Float32 division between UInt16 / Float32 returns Float32 - converts from UInt8 to Int8 converts from UInt8 to Int8 - division between UInt16 / UInt16 returns Float64 division between UInt16 / UInt16 returns Float64 - converts from Int64 to Float64 converts from Int64 to Float64 - converts from Float32 to Int128 converts from Float32 to Int128 - division between Int32 / Int8 returns Float64 division between Int32 / Int8 returns Float64 - floor_division Float64 // Int64 returns Float64 floor_division Float64 // Int64 returns Float64 - floor_division UInt16 // UInt128 returns UInt16 floor_division UInt16 // UInt128 returns UInt16 - converts from Int16 to UInt64 converts from Int16 to UInt64 - division between Int128 / UInt64 returns Float64 division between Int128 / UInt64 returns Float64 - converts from Int128 to UInt64 converts from Int128 to UInt64 - division between Int16 / Float32 returns Float32 division between Int16 / Float32 returns Float32 - converts from Int8 to Int64 converts from Int8 to Int64 - converts from Int64 to UInt128 converts from Int64 to UInt128 - converts from UInt32 to UInt16 converts from UInt32 to UInt16 - floor_division Int32 // UInt64 returns Int32 floor_division Int32 // UInt64 returns Int32 - converts from UInt64 to Int128 converts from UInt64 to Int128 - initialize from value to UInt32 initialize from value to UInt32 - #step - "Float to Int by" iterator "Float to Int by" iterator - "over zero Float" iterator "over zero Float" iterator - "single value Float by Int" yielding "single value Float by Int" yielding - "at min Int" iterator "at min Int" iterator - "downto Int" yielding "downto Int" yielding - "Float to Int by" yielding "Float to Int by" yielding - "basic Float" iterator "basic Float" iterator - "towards limit [max-4, max-2, max]" iterator "towards limit [max-4, max-2, max]" iterator - "downto Float by" yielding "downto Float by" yielding - "empty if `self` can't be compared by" yielding "empty if `self` can't be compared by" yielding - "negative by Float" yielding "negative by Float" yielding - "basic Int" yielding "basic Int" yielding - "single value Int by Float" yielding "single value Int by Float" yielding - "negative by Float" iterator "negative by Float" iterator - "single value Int" iterator "single value Int" iterator - "by Float half" yielding "by Float half" yielding - "downto Int by" yielding "downto Int by" yielding - "Int to Float" iterator "Int to Float" iterator - by zero iterator by zero iterator - without limit - iterator - basic basic - raises overflow error raises overflow error - yielding - basic basic - raises overflow error raises overflow error - "Int by Float" iterator "Int by Float" iterator - "single value Float" yielding "single value Float" yielding - "downto UInt by" iterator "downto UInt by" iterator - "over zero Float" yielding "over zero Float" yielding - "by Float" yielding "by Float" yielding - "empty if `to` can't be compared by" iterator "empty if `to` can't be compared by" iterator - "negative Float" yielding "negative Float" yielding - "Int to Float" yielding "Int to Float" yielding - whole range - "Int8 downwards" yielding "Int8 downwards" yielding - assert assert - "Int8 downwards" iterator "Int8 downwards" iterator - "Int16 upwards" iterator "Int16 upwards" iterator - "Int8 upwards" iterator "Int8 upwards" iterator - "UInt8 downwards" iterator "UInt8 downwards" iterator - "UInt8 upwards" iterator "UInt8 upwards" iterator - "Int8 upwards" yielding "Int8 upwards" yielding - "Int16 upwards" yielding "Int16 upwards" yielding - "Int16 downwards" yielding "Int16 downwards" yielding - assert assert - "UInt8 upwards" yielding "UInt8 upwards" yielding - "Int16 downwards" iterator "Int16 downwards" iterator - assert assert - "UInt8 downwards" yielding "UInt8 downwards" yielding - "Int to Float by" yielding "Int to Float by" yielding - "missing end UInt" yielding "missing end UInt" yielding - "single value by Int" iterator "single value by Int" iterator - "downto Int" iterator "downto Int" iterator - "single value Int by Float" iterator "single value Int by Float" iterator - "towards limit [max-3, max-1, max)" iterator "towards limit [max-3, max-1, max)" iterator - "towards limit [max-3, max-1, max)" yielding "towards limit [max-3, max-1, max)" yielding - "missing end Int" yielding "missing end Int" yielding - "over zero Int" iterator "over zero Int" iterator - "Float to Int" iterator "Float to Int" iterator - "negative Float" iterator "negative Float" iterator - "empty if `self` can't be compared" yielding "empty if `self` can't be compared" yielding - "towards limit [max-4, max-2, max)" yielding "towards limit [max-4, max-2, max)" yielding - "at max Int" iterator "at max Int" iterator - "single value Int" yielding "single value Int" yielding - "negative by Float half" iterator "negative by Float half" iterator - "missing end UInt" iterator "missing end UInt" iterator - "empty if `by` and `to` are opposed" iterator "empty if `by` and `to` are opposed" iterator - "downto Float" yielding "downto Float" yielding - "downto Float" iterator "downto Float" iterator - "Int by Float" yielding "Int by Float" yielding - "basic Float" yielding "basic Float" yielding - "Int to Float by" iterator "Int to Float by" iterator - "over min Int" iterator "over min Int" iterator - "single value by Int" yielding "single value by Int" yielding - "Float by Int" iterator "Float by Int" iterator - "single value Float" iterator "single value Float" iterator - "negative by Int" iterator "negative by Int" iterator - "downto UInt" yielding "downto UInt" yielding - "downto UInt" iterator "downto UInt" iterator - "over zero Int" yielding "over zero Int" yielding - "single value Float by Int" iterator "single value Float by Int" iterator - "by Float half" iterator "by Float half" iterator - "over max Int" yielding "over max Int" yielding - "single value by Float" yielding "single value by Float" yielding - "over min Int" yielding "over min Int" yielding - "negative Int" yielding "negative Int" yielding - "downto UInt by" yielding "downto UInt by" yielding - "at max Int" yielding "at max Int" yielding - "downto Int by" iterator "downto Int by" iterator - "missing end Float" yielding "missing end Float" yielding - "empty if `to` can't be compared" yielding "empty if `to` can't be compared" yielding - "Float by Int" yielding "Float by Int" yielding - "empty if `self` can't be compared" iterator "empty if `self` can't be compared" iterator - "empty if `by` and `to` are opposed" yielding "empty if `by` and `to` are opposed" yielding - "basic Int" iterator "basic Int" iterator - "empty if `to` can't be compared by" yielding "empty if `to` can't be compared by" yielding - "missing end Float" iterator "missing end Float" iterator - "at min Int" yielding "at min Int" yielding - "missing end Int" iterator "missing end Int" iterator - "single value by Float" iterator "single value by Float" iterator - exclusive - "single value Int" yielding "single value Int" yielding - "basic Float" yielding "basic Float" yielding - "single value Float" yielding "single value Float" yielding - "single value Float" iterator "single value Float" iterator - "single value Int" iterator "single value Int" iterator - "basic Float" iterator "basic Float" iterator - "basic Int" yielding "basic Int" yielding - "basic Int" iterator "basic Int" iterator - "empty if `to` can't be compared" iterator "empty if `to` can't be compared" iterator - "Float to Int" yielding "Float to Int" yielding - "by Int" yielding "by Int" yielding - "negative by Float half" yielding "negative by Float half" yielding - "empty if `self` can't be compared by" iterator "empty if `self` can't be compared by" iterator - "towards limit [max-4, max-2, max)" iterator "towards limit [max-4, max-2, max)" iterator - by zero yielding by zero yielding - "by Int" iterator "by Int" iterator - "negative Int" iterator "negative Int" iterator - "towards limit [max-4, max-2, max]" yielding "towards limit [max-4, max-2, max]" yielding - "downto Float by" iterator "downto Float by" iterator - "over max Int" iterator "over max Int" iterator - "negative by Int" yielding "negative by Int" yielding - "by Float" iterator "by Float" iterator - converts from UInt64 to UInt32 converts from UInt64 to UInt32 - gives the square of a value gives the square of a value - unchecked initialize from value to UInt8 unchecked initialize from value to UInt8 - converts from UInt64 to UInt64 converts from UInt64 to UInt64 - converts from Int32 to UInt16 converts from Int32 to UInt16 - #zero? #zero? - converts from Int8 to UInt16 converts from Int8 to UInt16 - converts from UInt16 to Int128 converts from UInt16 to Int128 - converts from Int64 to Int32 converts from Int64 to Int32 - converts from Int128 to Int128 converts from Int128 to Int128 - floor_division Int64 // Int16 returns Int64 floor_division Int64 // Int16 returns Int64 - converts from UInt8 to Float64 converts from UInt8 to Float64 - converts from UInt8 to UInt32 converts from UInt8 to UInt32 - converts from Int64 to UInt8 converts from Int64 to UInt8 - floor_division UInt8 // Int16 returns UInt8 floor_division UInt8 // Int16 returns UInt8 - division between Float32 / UInt8 returns Float32 division between Float32 / UInt8 returns Float32 - unchecked initialize from value to Int16 unchecked initialize from value to Int16 - division between Float32 / Float64 returns Float64 division between Float32 / Float64 returns Float64 - converts from Int128 to UInt32 converts from Int128 to UInt32 - division between Int8 / UInt32 returns Float64 division between Int8 / UInt32 returns Float64 - converts from Float32 to UInt32 converts from Float32 to UInt32 - floor_division UInt64 // UInt16 returns UInt64 floor_division UInt64 // UInt16 returns UInt64 - converts from Float64 to Int8 converts from Float64 to Int8 - floor_division Float64 // Float32 returns Float64 floor_division Float64 // Float32 returns Float64 - converts from Int32 to UInt16 converts from Int32 to UInt16 - floor_division Int16 // Int64 returns Int16 floor_division Int16 // Int64 returns Int16 - converts from UInt16 to Float64 converts from UInt16 to Float64 - division between Int16 / UInt16 returns Float64 division between Int16 / UInt16 returns Float64 - converts from UInt128 to Int8 converts from UInt128 to Int8 - unchecked initialize from value to UInt64 unchecked initialize from value to UInt64 - converts from UInt64 to Int64 converts from UInt64 to Int64 - floor_division UInt64 // Int128 returns UInt64 floor_division UInt64 // Int128 returns UInt64 - division between Int8 / Int128 returns Float64 division between Int8 / Int128 returns Float64 - unchecked initialize from value to Int8 unchecked initialize from value to Int8 - division between Int32 / UInt16 returns Float64 division between Int32 / UInt16 returns Float64 - division between UInt16 / UInt8 returns Float64 division between UInt16 / UInt8 returns Float64 - floor_division Int8 // UInt32 returns Int8 floor_division Int8 // UInt32 returns Int8 - converts from UInt64 to Float64 converts from UInt64 to Float64 - floor_division Int64 // UInt16 returns Int64 floor_division Int64 // UInt16 returns Int64 - converts from UInt8 to Int128 converts from UInt8 to Int128 - converts from UInt128 to UInt128 converts from UInt128 to UInt128 - converts from Float32 to UInt8 converts from Float32 to UInt8 - converts from UInt16 to Float32 converts from UInt16 to Float32 - converts from Int16 to Float64 converts from Int16 to Float64 - floor_division Float32 // UInt64 returns Float32 floor_division Float32 // UInt64 returns Float32 - division between UInt128 / UInt128 returns Float64 division between UInt128 / UInt128 returns Float64 - converts from Float32 to Int32 converts from Float32 to Int32 - floor_division Int32 // Float32 returns Int32 floor_division Int32 // Float32 returns Int32 - division between Int32 / Int128 returns Float64 division between Int32 / Int128 returns Float64 - division between Int128 / UInt128 returns Float64 division between Int128 / UInt128 returns Float64 - division between Int32 / UInt64 returns Float64 division between Int32 / UInt64 returns Float64 - converts from Float64 to Int16 converts from Float64 to Int16 - division between Int16 / UInt8 returns Float64 division between Int16 / UInt8 returns Float64 - floor_division Int8 // Int64 returns Int8 floor_division Int8 // Int64 returns Int8 - converts from UInt64 to Float32 converts from UInt64 to Float32 - division between Int8 / Float64 returns Float64 division between Int8 / Float64 returns Float64 - #negative? #negative? - converts from Int128 to Int8 converts from Int128 to Int8 - floor_division Int32 // Int128 returns Int32 floor_division Int32 // Int128 returns Int32 - floor_division Float32 // Int32 returns Float32 floor_division Float32 // Int32 returns Float32 - division between Float32 / Int128 returns Float32 division between Float32 / Int128 returns Float32 - converts from Int16 to Float64 converts from Int16 to Float64 - converts from UInt16 to Int128 converts from UInt16 to Int128 - converts from UInt32 to Int128 converts from UInt32 to Int128 - converts from UInt128 to UInt64 converts from UInt128 to UInt64 - floor_division UInt32 // Int32 returns UInt32 floor_division UInt32 // Int32 returns UInt32 - creates an array with [] and no elements creates an array with [] and no elements - converts from UInt64 to Int16 converts from UInt64 to Int16 - division between UInt32 / UInt8 returns Float64 division between UInt32 / UInt8 returns Float64 - floor_division Int8 // UInt8 returns Int8 floor_division Int8 // UInt8 returns Int8 - converts from Int8 to UInt8 converts from Int8 to UInt8 - converts from Int8 to Int64 converts from Int8 to Int64 - floor_division UInt64 // Float32 returns UInt64 floor_division UInt64 // Float32 returns UInt64 - converts from UInt16 to UInt128 converts from UInt16 to UInt128 - converts from Int128 to UInt16 converts from Int128 to UInt16 - converts from Int32 to Int16 converts from Int32 to Int16 - division between UInt8 / Int16 returns Float64 division between UInt8 / Int16 returns Float64 - converts from Int8 to UInt8 converts from Int8 to UInt8 - floor_division Int16 // UInt64 returns Int16 floor_division Int16 // UInt64 returns Int16 - floor_division Float64 // Int16 returns Float64 floor_division Float64 // Int16 returns Float64 - floor_division Int128 // UInt16 returns Int128 floor_division Int128 // UInt16 returns Int128 - floor_division Int128 // Int32 returns Int128 floor_division Int128 // Int32 returns Int128 - floor_division UInt8 // UInt128 returns UInt8 floor_division UInt8 // UInt128 returns UInt8 - converts from UInt128 to UInt64 converts from UInt128 to UInt64 - converts from Float32 to UInt32 converts from Float32 to UInt32 - division between UInt32 / Int64 returns Float64 division between UInt32 / Int64 returns Float64 - division between UInt64 / Int8 returns Float64 division between UInt64 / Int8 returns Float64 - converts from Float32 to UInt128 converts from Float32 to UInt128 - creates a slice creates a slice - division between Float64 / Int32 returns Float64 division between Float64 / Int32 returns Float64 - division between Float32 / Int32 returns Float32 division between Float32 / Int32 returns Float32 - floor_division UInt64 // Int64 returns UInt64 floor_division UInt64 // Int64 returns UInt64 - converts from Float64 to Int64 converts from Float64 to Int64 - division between UInt128 / Int16 returns Float64 division between UInt128 / Int16 returns Float64 - division between UInt128 / Float32 returns Float32 division between UInt128 / Float32 returns Float32 - division between Int8 / Int8 returns Float64 division between Int8 / Int8 returns Float64 - converts from Int16 to UInt8 converts from Int16 to UInt8 - floor_division Int64 // Int8 returns Int64 floor_division Int64 // Int8 returns Int64 - converts from Int16 to UInt64 converts from Int16 to UInt64 - division between Int128 / UInt16 returns Float64 division between Int128 / UInt16 returns Float64 - floor_division Int64 // UInt128 returns Int64 floor_division Int64 // UInt128 returns Int64 - converts from Float32 to UInt64 converts from Float32 to UInt64 - converts from UInt8 to Int16 converts from UInt8 to Int16 - floor_division Int8 // Int16 returns Int8 floor_division Int8 // Int16 returns Int8 - division between Int8 / Int64 returns Float64 division between Int8 / Int64 returns Float64 - division between Int8 / Int16 returns Float64 division between Int8 / Int16 returns Float64 - converts from Int64 to UInt128 converts from Int64 to UInt128 - converts from UInt16 to Int8 converts from UInt16 to Int8 - converts from Int128 to UInt128 converts from Int128 to UInt128 - division between UInt64 / Float32 returns Float32 division between UInt64 / Float32 returns Float32 - division between UInt16 / Float64 returns Float64 division between UInt16 / Float64 returns Float64 - division between Int64 / Int64 returns Float64 division between Int64 / Int64 returns Float64 - division between UInt8 / Int128 returns Float64 division between UInt8 / Int128 returns Float64 - division between UInt32 / Int128 returns Float64 division between UInt32 / Int128 returns Float64 - division between UInt128 / UInt16 returns Float64 division between UInt128 / UInt16 returns Float64 - converts from Int32 to Float64 converts from Int32 to Float64 - converts from UInt128 to Int8 converts from UInt128 to Int8 - division between UInt32 / Float32 returns Float32 division between UInt32 / Float32 returns Float32 - unchecked initialize from value to Float32 unchecked initialize from value to Float32 - converts from UInt128 to Int64 converts from UInt128 to Int64 - floor_division UInt16 // Int8 returns UInt16 floor_division UInt16 // Int8 returns UInt16 - division between UInt8 / UInt8 returns Float64 division between UInt8 / UInt8 returns Float64 - converts from Int64 to UInt8 converts from Int64 to UInt8 - division between UInt32 / Int8 returns Float64 division between UInt32 / Int8 returns Float64 - floor_division UInt32 // UInt64 returns UInt32 floor_division UInt32 // UInt64 returns UInt32 - converts from Float64 to Int128 converts from Float64 to Int128 - converts from Int128 to Int32 converts from Int128 to Int32 - converts from UInt32 to UInt128 converts from UInt32 to UInt128 - gives the absolute value gives the absolute value - converts from Int8 to Int16 converts from Int8 to Int16 - division between UInt16 / UInt32 returns Float64 division between UInt16 / UInt32 returns Float64 - converts from Float64 to Float32 converts from Float64 to Float32 - floor_division Int16 // UInt128 returns Int16 floor_division Int16 // UInt128 returns Int16 - converts from Int64 to Int128 converts from Int64 to Int128 - floor_division UInt8 // UInt8 returns UInt8 floor_division UInt8 // UInt8 returns UInt8 - converts from Int8 to UInt128 converts from Int8 to UInt128 - division between UInt64 / UInt64 returns Float64 division between UInt64 / UInt64 returns Float64 - floor_division Float64 // Int8 returns Float64 floor_division Float64 // Int8 returns Float64 - division between UInt128 / Int8 returns Float64 division between UInt128 / Int8 returns Float64 - converts from UInt8 to UInt64 converts from UInt8 to UInt64 - floor_division UInt8 // Int128 returns UInt8 floor_division UInt8 // Int128 returns UInt8 - division between UInt8 / UInt16 returns Float64 division between UInt8 / UInt16 returns Float64 - converts from Int32 to Int8 converts from Int32 to Int8 - division between UInt16 / Int64 returns Float64 division between UInt16 / Int64 returns Float64 - converts from Int64 to UInt16 converts from Int64 to UInt16 - converts from UInt32 to UInt64 converts from UInt32 to UInt64 - converts from UInt8 to Int128 converts from UInt8 to Int128 - division between UInt32 / UInt64 returns Float64 division between UInt32 / UInt64 returns Float64 - floor_division UInt8 // UInt64 returns UInt8 floor_division UInt8 // UInt64 returns UInt8 - converts from Float64 to Float64 converts from Float64 to Float64 - converts from UInt32 to UInt32 converts from UInt32 to UInt32 - floor_division UInt16 // Float32 returns UInt16 floor_division UInt16 // Float32 returns UInt16 - division between Float64 / Int64 returns Float64 division between Float64 / Int64 returns Float64 - converts from UInt64 to Int8 converts from UInt64 to Int8 - floor_division UInt32 // UInt16 returns UInt32 floor_division UInt32 // UInt16 returns UInt32 - converts from UInt64 to UInt8 converts from UInt64 to UInt8 - division between UInt128 / Int64 returns Float64 division between UInt128 / Int64 returns Float64 - division between Int16 / UInt32 returns Float64 division between Int16 / UInt32 returns Float64 - division between Int32 / Float32 returns Float32 division between Int32 / Float32 returns Float32 - unchecked initialize from value to UInt128 unchecked initialize from value to UInt128 - converts from Int32 to UInt32 converts from Int32 to UInt32 - floor_division UInt128 // Int16 returns UInt128 floor_division UInt128 // Int16 returns UInt128 - floor_division Float64 // Int128 returns Float64 floor_division Float64 // Int128 returns Float64 - floor_division Float32 // Int64 returns Float32 floor_division Float32 // Int64 returns Float32 - division between UInt8 / Int32 returns Float64 division between UInt8 / Int32 returns Float64 - converts from Int8 to Int8 converts from Int8 to Int8 - converts from UInt128 to Int16 converts from UInt128 to Int16 - division between Int128 / Int32 returns Float64 division between Int128 / Int32 returns Float64 - division between Int32 / Int64 returns Float64 division between Int32 / Int64 returns Float64 - converts from Int8 to UInt32 converts from Int8 to UInt32 - division between Int64 / UInt128 returns Float64 division between Int64 / UInt128 returns Float64 - division between UInt32 / Float64 returns Float64 division between UInt32 / Float64 returns Float64 - converts from Float32 to UInt16 converts from Float32 to UInt16 - converts from Int8 to Float64 converts from Int8 to Float64 - converts from Float32 to Int128 converts from Float32 to Int128 - converts from UInt128 to UInt8 converts from UInt128 to UInt8 - converts from Float64 to Int16 converts from Float64 to Int16 - converts from UInt8 to Float64 converts from UInt8 to Float64 - floor_division UInt32 // Float32 returns UInt32 floor_division UInt32 // Float32 returns UInt32 - floor_division Int32 // Int8 returns Int32 floor_division Int32 // Int8 returns Int32 - division between UInt128 / Int128 returns Float64 division between UInt128 / Int128 returns Float64 - converts from UInt64 to UInt128 converts from UInt64 to UInt128 - converts from UInt128 to Int32 converts from UInt128 to Int32 - converts from UInt128 to UInt32 converts from UInt128 to UInt32 - converts from Int64 to Int8 converts from Int64 to Int8 - division between UInt16 / Int16 returns Float64 division between UInt16 / Int16 returns Float64 - floor_division UInt32 // UInt128 returns UInt32 floor_division UInt32 // UInt128 returns UInt32 - converts from UInt16 to Float64 converts from UInt16 to Float64 - converts from Float64 to UInt64 converts from Float64 to UInt64 - initialize from value to Int64 initialize from value to Int64 - division between Int64 / Int32 returns Float64 division between Int64 / Int32 returns Float64 - converts from UInt16 to Int16 converts from UInt16 to Int16 - converts from UInt32 to Int64 converts from UInt32 to Int64 - converts from Int128 to Int32 converts from Int128 to Int32 - floor_division Int128 // Float32 returns Int128 floor_division Int128 // Float32 returns Int128 - converts from Int32 to Float64 converts from Int32 to Float64 - converts from Int32 to Float32 converts from Int32 to Float32 - converts from Int32 to Int64 converts from Int32 to Int64 - converts from UInt64 to Int32 converts from UInt64 to Int32 - floor_division Int32 // Int16 returns Int32 floor_division Int32 // Int16 returns Int32 - converts from UInt64 to UInt16 converts from UInt64 to UInt16 - division between UInt16 / UInt64 returns Float64 division between UInt16 / UInt64 returns Float64 - floor_division UInt64 // Int8 returns UInt64 floor_division UInt64 // Int8 returns UInt64 - converts from Float64 to UInt32 converts from Float64 to UInt32 - floor_division Int8 // Float32 returns Int8 floor_division Int8 // Float32 returns Int8 - floor_division UInt16 // Float64 returns UInt16 floor_division UInt16 // Float64 returns UInt16 - converts from UInt16 to Int8 converts from UInt16 to Int8 - division between Int32 / UInt32 returns Float64 division between Int32 / UInt32 returns Float64 - floor_division Int64 // UInt32 returns Int64 floor_division Int64 // UInt32 returns Int64 - converts from Int16 to Float32 converts from Int16 to Float32 - converts from Int16 to UInt32 converts from Int16 to UInt32 - division between UInt8 / UInt128 returns Float64 division between UInt8 / UInt128 returns Float64 - #round_even - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - converts from UInt64 to UInt8 converts from UInt64 to UInt8 - converts from Int16 to Int16 converts from Int16 to Int16 - floor_division Int8 // Int128 returns Int8 floor_division Int8 // Int128 returns Int8 - division between Int32 / Float64 returns Float64 division between Int32 / Float64 returns Float64 - converts from UInt8 to Int64 converts from UInt8 to Int64 - converts from Int128 to Int128 converts from Int128 to Int128 - floor_division UInt16 // Int32 returns UInt16 floor_division UInt16 // Int32 returns UInt16 - floor_division Float32 // Float32 returns Float32 floor_division Float32 // Float32 returns Float32 - floor_division Int8 // UInt16 returns Int8 floor_division Int8 // UInt16 returns Int8 - converts from Float32 to Int16 converts from Float32 to Int16 - converts from UInt64 to UInt16 converts from UInt64 to UInt16 - division between UInt64 / UInt16 returns Float64 division between UInt64 / UInt16 returns Float64 - floor_division UInt16 // UInt32 returns UInt16 floor_division UInt16 // UInt32 returns UInt16 - converts from UInt16 to UInt32 converts from UInt16 to UInt32 - converts from Int64 to Int64 converts from Int64 to Int64 - #positive? #positive? - floor_division Int64 // Int32 returns Int64 floor_division Int64 // Int32 returns Int64 - converts from Int8 to Float32 converts from Int8 to Float32 - converts from UInt32 to UInt16 converts from UInt32 to UInt16 - converts from Float64 to UInt8 converts from Float64 to UInt8 - converts from Float32 to Int8 converts from Float32 to Int8 - floor_division Int128 // Int64 returns Int128 floor_division Int128 // Int64 returns Int128 - floor_division Int16 // Float64 returns Int16 floor_division Int16 // Float64 returns Int16 - converts from Int8 to UInt64 converts from Int8 to UInt64 - floor_division Float32 // Int128 returns Float32 floor_division Float32 // Int128 returns Float32 - floor_division Float32 // UInt32 returns Float32 floor_division Float32 // UInt32 returns Float32 - floor_division Int32 // UInt16 returns Int32 floor_division Int32 // UInt16 returns Int32 - converts from UInt32 to UInt64 converts from UInt32 to UInt64 - converts from UInt64 to Int64 converts from UInt64 to Int64 - floor_division Int32 // UInt32 returns Int32 floor_division Int32 // UInt32 returns Int32 - converts from UInt64 to Float32 converts from UInt64 to Float32 - floor_division UInt128 // Float32 returns UInt128 floor_division UInt128 // Float32 returns UInt128 - converts from UInt8 to UInt8 converts from UInt8 to UInt8 - initialize from value to UInt64 initialize from value to UInt64 - converts from UInt128 to Int32 converts from UInt128 to Int32 - converts from Int64 to Int32 converts from Int64 to Int32 - floor_division Int64 // UInt8 returns Int64 floor_division Int64 // UInt8 returns Int64 - converts from UInt8 to UInt32 converts from UInt8 to UInt32 - converts from Int64 to Int8 converts from Int64 to Int8 - initialize from value to Int8 initialize from value to Int8 - converts from Int128 to UInt8 converts from Int128 to UInt8 - converts from Float32 to Float32 converts from Float32 to Float32 - converts from Int16 to Int32 converts from Int16 to Int32 - converts from UInt128 to Float64 converts from UInt128 to Float64 - converts from Int32 to UInt128 converts from Int32 to UInt128 - floor_division Float32 // Float64 returns Float32 floor_division Float32 // Float64 returns Float32 - division between Int16 / Int8 returns Float64 division between Int16 / Int8 returns Float64 - division between Int32 / UInt8 returns Float64 division between Int32 / UInt8 returns Float64 - division between Float64 / Int16 returns Float64 division between Float64 / Int16 returns Float64 - divides and calculates the modulo divides and calculates the modulo - converts from UInt8 to Float32 converts from UInt8 to Float32 - converts from Float32 to Int64 converts from Float32 to Int64 - converts from UInt64 to Int128 converts from UInt64 to Int128 - converts from UInt16 to UInt64 converts from UInt16 to UInt64 - creates a static array creates a static array - converts from UInt8 to UInt8 converts from UInt8 to UInt8 - division between UInt64 / UInt8 returns Float64 division between UInt64 / UInt8 returns Float64 - floor_division Int64 // Float64 returns Int64 floor_division Int64 // Float64 returns Int64 - converts from UInt32 to Int8 converts from UInt32 to Int8 - floor_division UInt128 // Int128 returns UInt128 floor_division UInt128 // Int128 returns UInt128 - converts from Int8 to UInt64 converts from Int8 to UInt64 - floor_division Int8 // Float64 returns Int8 floor_division Int8 // Float64 returns Int8 - floor_division UInt32 // UInt8 returns UInt32 floor_division UInt32 // UInt8 returns UInt32 - division between Int64 / Int16 returns Float64 division between Int64 / Int16 returns Float64 - floor_division Float32 // Int8 returns Float32 floor_division Float32 // Int8 returns Float32 - converts from UInt32 to Int16 converts from UInt32 to Int16 - division between Int8 / Float32 returns Float32 division between Int8 / Float32 returns Float32 - converts from Int8 to Int32 converts from Int8 to Int32 - converts from Int8 to Int16 converts from Int8 to Int16 - division between Float32 / UInt128 returns Float32 division between Float32 / UInt128 returns Float32 - converts from UInt8 to Int8 converts from UInt8 to Int8 - floor_division UInt16 // Int16 returns UInt16 floor_division UInt16 // Int16 returns UInt16 - converts from Int64 to UInt64 converts from Int64 to UInt64 - division between Int32 / Int32 returns Float64 division between Int32 / Int32 returns Float64 - division between Int64 / Float64 returns Float64 division between Int64 / Float64 returns Float64 - floor_division Float64 // UInt64 returns Float64 floor_division Float64 // UInt64 returns Float64 - converts from Float64 to UInt64 converts from Float64 to UInt64 - division between Float32 / UInt32 returns Float32 division between Float32 / UInt32 returns Float32 - division between Int8 / UInt8 returns Float64 division between Int8 / UInt8 returns Float64 - floor_division UInt16 // UInt16 returns UInt16 floor_division UInt16 // UInt16 returns UInt16 - floor_division Int128 // UInt64 returns Int128 floor_division Int128 // UInt64 returns Int128 - division between UInt8 / UInt32 returns Float64 division between UInt8 / UInt32 returns Float64 - converts from UInt16 to UInt16 converts from UInt16 to UInt16 - floor_division UInt16 // UInt64 returns UInt16 floor_division UInt16 // UInt64 returns UInt16 - floor_division Int64 // Int128 returns Int64 floor_division Int64 // Int128 returns Int64 - division between Int64 / Int128 returns Float64 division between Int64 / Int128 returns Float64 - floor_division Int16 // UInt16 returns Int16 floor_division Int16 // UInt16 returns Int16 - converts from Float32 to Float64 converts from Float32 to Float64 - floor_division Int16 // UInt32 returns Int16 floor_division Int16 // UInt32 returns Int16 - converts from Int16 to UInt128 converts from Int16 to UInt128 - division between Int16 / Int32 returns Float64 division between Int16 / Int32 returns Float64 - converts from UInt128 to Int128 converts from UInt128 to Int128 - converts from Int32 to Int64 converts from Int32 to Int64 - converts from Int32 to UInt64 converts from Int32 to UInt64 - converts from UInt32 to Float64 converts from UInt32 to Float64 - floor_division UInt64 // Int32 returns UInt64 floor_division UInt64 // Int32 returns UInt64 - converts from Float64 to Float32 converts from Float64 to Float32 - converts from UInt16 to Int32 converts from UInt16 to Int32 - floor_division UInt64 // UInt64 returns UInt64 floor_division UInt64 // UInt64 returns UInt64 - division between Int64 / Int8 returns Float64 division between Int64 / Int8 returns Float64 - floor_division UInt128 // UInt64 returns UInt128 floor_division UInt128 // UInt64 returns UInt128 - converts from UInt8 to UInt16 converts from UInt8 to UInt16 - floor_division Int8 // Int32 returns Int8 floor_division Int8 // Int32 returns Int8 - floor_division UInt32 // Int128 returns UInt32 floor_division UInt32 // Int128 returns UInt32 - floor_division UInt32 // Float64 returns UInt32 floor_division UInt32 // Float64 returns UInt32 - floor_division UInt8 // Float32 returns UInt8 floor_division UInt8 // Float32 returns UInt8 - division between Int8 / UInt128 returns Float64 division between Int8 / UInt128 returns Float64 - converts from Int16 to Float32 converts from Int16 to Float32 - division between UInt64 / Int16 returns Float64 division between UInt64 / Int16 returns Float64 - floor_division Float32 // UInt128 returns Float32 floor_division Float32 // UInt128 returns Float32 - converts from Int16 to Int8 converts from Int16 to Int8 - initialize from value to UInt128 initialize from value to UInt128 - division between UInt64 / UInt128 returns Float64 division between UInt64 / UInt128 returns Float64 - floor_division Int64 // UInt64 returns Int64 floor_division Int64 // UInt64 returns Int64 - gives the sign gives the sign - floor_division Float64 // UInt16 returns Float64 floor_division Float64 // UInt16 returns Float64 - division between Int16 / Int16 returns Float64 division between Int16 / Int16 returns Float64 - converts from UInt16 to Int16 converts from UInt16 to Int16 - converts from Int32 to Int32 converts from Int32 to Int32 - converts from Float32 to UInt8 converts from Float32 to UInt8 - converts from Int64 to UInt32 converts from Int64 to UInt32 - floor_division Int128 // Float64 returns Int128 floor_division Int128 // Float64 returns Int128 - floor_division UInt16 // Int64 returns UInt16 floor_division UInt16 // Int64 returns UInt16 - converts from UInt32 to Float32 converts from UInt32 to Float32 - division between UInt32 / UInt16 returns Float64 division between UInt32 / UInt16 returns Float64 - floor_division UInt8 // Float64 returns UInt8 floor_division UInt8 // Float64 returns UInt8 - converts from UInt16 to Int32 converts from UInt16 to Int32 - floor_division UInt8 // Int64 returns UInt8 floor_division UInt8 // Int64 returns UInt8 - initialize from value to Int128 initialize from value to Int128 - converts from Float64 to Int32 converts from Float64 to Int32 - converts from UInt64 to UInt64 converts from UInt64 to UInt64 - unchecked initialize from value to UInt16 unchecked initialize from value to UInt16 - division between Int64 / Float32 returns Float32 division between Int64 / Float32 returns Float32 - converts from UInt16 to UInt128 converts from UInt16 to UInt128 - division between UInt8 / Float32 returns Float32 division between UInt8 / Float32 returns Float32 - converts from UInt128 to Int64 converts from UInt128 to Int64 - converts from UInt128 to UInt16 converts from UInt128 to UInt16 - division between Int16 / Float64 returns Float64 division between Int16 / Float64 returns Float64 - division between Int128 / UInt8 returns Float64 division between Int128 / UInt8 returns Float64 - converts from Float64 to Int32 converts from Float64 to Int32 - converts from Int8 to UInt16 converts from Int8 to UInt16 - floor_division UInt64 // UInt128 returns UInt64 floor_division UInt64 // UInt128 returns UInt64 - floor_division Float64 // UInt32 returns Float64 floor_division Float64 // UInt32 returns Float64 - converts from Int16 to UInt128 converts from Int16 to UInt128 - converts from UInt32 to UInt8 converts from UInt32 to UInt8 - converts from Float32 to Int32 converts from Float32 to Int32 - converts from Int64 to Float32 converts from Int64 to Float32 - division between UInt128 / UInt32 returns Float64 division between UInt128 / UInt32 returns Float64 - converts from Float32 to UInt64 converts from Float32 to UInt64 - floor_division UInt8 // Int8 returns UInt8 floor_division UInt8 // Int8 returns UInt8 - converts from Int16 to Int64 converts from Int16 to Int64 - division between Int8 / UInt64 returns Float64 division between Int8 / UInt64 returns Float64 - floor_division UInt64 // UInt32 returns UInt64 floor_division UInt64 // UInt32 returns UInt64 - converts from UInt8 to UInt16 converts from UInt8 to UInt16 - floor_division UInt64 // Float64 returns UInt64 floor_division UInt64 // Float64 returns UInt64 - floor_division UInt128 // UInt16 returns UInt128 floor_division UInt128 // UInt16 returns UInt128 - converts from UInt8 to Int32 converts from UInt8 to Int32 - division between Int16 / UInt64 returns Float64 division between Int16 / UInt64 returns Float64 - division between Float64 / UInt128 returns Float64 division between Float64 / UInt128 returns Float64 - converts from Int8 to Float32 converts from Int8 to Float32 - floor_division UInt128 // UInt8 returns UInt128 floor_division UInt128 // UInt8 returns UInt128 - converts from UInt64 to Int32 converts from UInt64 to Int32 - floor_division UInt128 // UInt32 returns UInt128 floor_division UInt128 // UInt32 returns UInt128 - division between Int128 / Int8 returns Float64 division between Int128 / Int8 returns Float64 - converts from Float32 to Int16 converts from Float32 to Int16 - converts from UInt32 to Int128 converts from UInt32 to Int128 - division between UInt128 / UInt64 returns Float64 division between UInt128 / UInt64 returns Float64 - converts from Int64 to UInt16 converts from Int64 to UInt16 - division between Float64 / Float32 returns Float64 division between Float64 / Float32 returns Float64 - division between UInt8 / UInt64 returns Float64 division between UInt8 / UInt64 returns Float64 - division between UInt64 / Int32 returns Float64 division between UInt64 / Int32 returns Float64 - division between Int64 / UInt8 returns Float64 division between Int64 / UInt8 returns Float64 - division between Float32 / Float32 returns Float32 division between Float32 / Float32 returns Float32 - converts from Float64 to UInt8 converts from Float64 to UInt8 - converts from Int128 to UInt64 converts from Int128 to UInt64 - division between UInt32 / Int16 returns Float64 division between UInt32 / Int16 returns Float64 - converts from UInt64 to UInt128 converts from UInt64 to UInt128 - division between UInt64 / Int64 returns Float64 division between UInt64 / Int64 returns Float64 - converts from Int64 to Float32 converts from Int64 to Float32 - converts from UInt8 to UInt128 converts from UInt8 to UInt128 - initialize from value to Int32 initialize from value to Int32 - converts from UInt32 to Float64 converts from UInt32 to Float64 - converts from UInt16 to Int64 converts from UInt16 to Int64 - converts from Float32 to Int8 converts from Float32 to Int8 - division between Float64 / UInt64 returns Float64 division between Float64 / UInt64 returns Float64 - converts from Int128 to Float32 converts from Int128 to Float32 - floor_division UInt8 // UInt32 returns UInt8 floor_division UInt8 // UInt32 returns UInt8 - converts from UInt128 to Float64 converts from UInt128 to Float64 - converts from Int16 to UInt16 converts from Int16 to UInt16 - converts from Float64 to UInt128 converts from Float64 to UInt128 - floor_division UInt16 // Int128 returns UInt16 floor_division UInt16 // Int128 returns UInt16 - division between UInt8 / Float64 returns Float64 division between UInt8 / Float64 returns Float64 - division between Int16 / Int128 returns Float64 division between Int16 / Int128 returns Float64 - floor_division Int128 // UInt8 returns Int128 floor_division Int128 // UInt8 returns Int128 - floor_division UInt32 // Int64 returns UInt32 floor_division UInt32 // Int64 returns UInt32 - floor_division UInt64 // UInt8 returns UInt64 floor_division UInt64 // UInt8 returns UInt64 - division between Int16 / UInt128 returns Float64 division between Int16 / UInt128 returns Float64 - converts from Int32 to UInt8 converts from Int32 to UInt8 - converts from Float64 to UInt16 converts from Float64 to UInt16 - converts from UInt64 to UInt32 converts from UInt64 to UInt32 - converts from UInt128 to UInt8 converts from UInt128 to UInt8 - converts from Int32 to Int8 converts from Int32 to Int8 - floor_division UInt128 // Int32 returns UInt128 floor_division UInt128 // Int32 returns UInt128 - division between UInt32 / UInt32 returns Float64 division between UInt32 / UInt32 returns Float64 - converts from Int64 to Int128 converts from Int64 to Int128 - converts from UInt32 to Float32 converts from UInt32 to Float32 - division between Int32 / Int16 returns Float64 division between Int32 / Int16 returns Float64 - floor_division UInt32 // Int16 returns UInt32 floor_division UInt32 // Int16 returns UInt32 - converts from Float32 to UInt16 converts from Float32 to UInt16 - division between UInt64 / Float64 returns Float64 division between UInt64 / Float64 returns Float64 - division between Float64 / Float64 returns Float64 division between Float64 / Float64 returns Float64 - division between UInt16 / UInt128 returns Float64 division between UInt16 / UInt128 returns Float64 - division between Float64 / Int128 returns Float64 division between Float64 / Int128 returns Float64 - converts from UInt128 to UInt32 converts from UInt128 to UInt32 - floor_division Int128 // Int8 returns Int128 floor_division Int128 // Int8 returns Int128 - converts from Int128 to Float32 converts from Int128 to Float32 - floor_division Int64 // Int64 returns Int64 floor_division Int64 // Int64 returns Int64 - converts from UInt16 to UInt32 converts from UInt16 to UInt32 - division between UInt8 / Int64 returns Float64 division between UInt8 / Int64 returns Float64 - converts from UInt16 to Int64 converts from UInt16 to Int64 - converts from UInt16 to Float32 converts from UInt16 to Float32 - converts from Int8 to UInt128 converts from Int8 to UInt128 - converts from Int8 to Int32 converts from Int8 to Int32 - converts from Int8 to Int128 converts from Int8 to Int128 - floor_division UInt32 // Int8 returns UInt32 floor_division UInt32 // Int8 returns UInt32 - converts from Int32 to Int128 converts from Int32 to Int128 - converts from Int128 to Int64 converts from Int128 to Int64 - division between UInt8 / Int8 returns Float64 division between UInt8 / Int8 returns Float64 - converts from UInt32 to Int32 converts from UInt32 to Int32 - division between Float32 / UInt64 returns Float32 division between Float32 / UInt64 returns Float32 - converts from Float32 to Float64 converts from Float32 to Float64 - converts from Int32 to UInt8 converts from Int32 to UInt8 - converts from UInt32 to Int16 converts from UInt32 to Int16 - division between UInt64 / Int128 returns Float64 division between UInt64 / Int128 returns Float64 - floor_division UInt128 // Float64 returns UInt128 floor_division UInt128 // Float64 returns UInt128 - converts from Int128 to Int16 converts from Int128 to Int16 - converts from UInt128 to Float32 converts from UInt128 to Float32 - converts from Float64 to UInt128 converts from Float64 to UInt128 - converts from Int8 to Int8 converts from Int8 to Int8 - converts from Int16 to Int16 converts from Int16 to Int16 - converts from Int128 to Int16 converts from Int128 to Int16 - converts from UInt128 to Int128 converts from UInt128 to Int128 - floor_division Int8 // Int8 returns Int8 floor_division Int8 // Int8 returns Int8 - division between Int32 / UInt128 returns Float64 division between Int32 / UInt128 returns Float64 - division between Float32 / UInt16 returns Float32 division between Float32 / UInt16 returns Float32 - #round_away - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - converts from Float64 to Int8 converts from Float64 to Int8 - converts from Int32 to UInt32 converts from Int32 to UInt32 - converts from UInt32 to UInt32 converts from UInt32 to UInt32 - floor_division Int16 // Int32 returns Int16 floor_division Int16 // Int32 returns Int16 - converts from Int128 to Float64 converts from Int128 to Float64 - division between Int128 / Int16 returns Float64 division between Int128 / Int16 returns Float64 - converts from Int16 to Int32 converts from Int16 to Int32 - floor_division Int32 // Float64 returns Int32 floor_division Int32 // Float64 returns Int32 - #round - preserves type preserves type - rounds to digits rounds to digits - infinity Float64 infinity Float64 - accepts unsigned precision accepts unsigned precision - with digits - to_negative to_negative - to_positive to_positive - ties_even ties_even - ties_away ties_away - to_zero to_zero - nan nan - infinity Float32 infinity Float32 - handle medium amount of digits handle medium amount of digits - edge cases edge cases - base - 2 2 - 8 8 - rounds to nearest integer rounds to nearest integer - assert assert - rounding modes - ties_away ties_away - to_positive to_positive - to_zero to_zero - default (=ties_even) default (=ties_even) - ties_even ties_even - to_negative to_negative - negative digits negative digits - floor_division Int16 // Int8 returns Int16 floor_division Int16 // Int8 returns Int16 - converts from Int64 to Float64 converts from Int64 to Float64 - converts from UInt8 to Int32 converts from UInt8 to Int32 - floor_division Int128 // UInt32 returns Int128 floor_division Int128 // UInt32 returns Int128 - converts from Int128 to Int8 converts from Int128 to Int8 - floor_division Int64 // Float32 returns Int64 floor_division Int64 // Float32 returns Int64 - floor_division Int16 // UInt8 returns Int16 floor_division Int16 // UInt8 returns Int16 - floor_division Int32 // Int32 returns Int32 floor_division Int32 // Int32 returns Int32 - converts from UInt8 to UInt128 converts from UInt8 to UInt128 - division between Float32 / Int8 returns Float32 division between Float32 / Int8 returns Float32 - converts from UInt8 to Float32 converts from UInt8 to Float32 - converts from Int16 to Int128 converts from Int16 to Int128 - floor_division Float32 // Int16 returns Float32 floor_division Float32 // Int16 returns Float32 - converts from Int16 to UInt16 converts from Int16 to UInt16 - division between UInt128 / Float64 returns Float64 division between UInt128 / Float64 returns Float64 - converts from Int64 to Int16 converts from Int64 to Int16 - converts from Float64 to UInt16 converts from Float64 to UInt16 - division between Int128 / Int128 returns Float64 division between Int128 / Int128 returns Float64 - creates an array with [] and some elements creates an array with [] and some elements - floor_division Int32 // UInt128 returns Int32 floor_division Int32 // UInt128 returns Int32 - floor_division Int32 // UInt8 returns Int32 floor_division Int32 // UInt8 returns Int32 - initialize from value to UInt16 initialize from value to UInt16 - converts from UInt128 to Float32 converts from UInt128 to Float32 - converts from Int128 to Float64 converts from Int128 to Float64 - converts from Int128 to UInt8 converts from Int128 to UInt8 - floor_division UInt32 // UInt32 returns UInt32 floor_division UInt32 // UInt32 returns UInt32 - unchecked initialize from value to UInt32 unchecked initialize from value to UInt32 - division between UInt32 / UInt128 returns Float64 division between UInt32 / UInt128 returns Float64 - converts from Int64 to UInt64 converts from Int64 to UInt64 - converts from UInt8 to UInt64 converts from UInt8 to UInt64 - initialize from value to Float64 initialize from value to Float64 - division between Int64 / UInt32 returns Float64 division between Int64 / UInt32 returns Float64 - floor_division Int8 // UInt64 returns Int8 floor_division Int8 // UInt64 returns Int8 - converts from Float64 to Float64 converts from Float64 to Float64 - floor_division UInt128 // UInt128 returns UInt128 floor_division UInt128 // UInt128 returns UInt128 - converts from Int16 to Int64 converts from Int16 to Int64 - converts from Int8 to Float64 converts from Int8 to Float64 - division between UInt64 / UInt32 returns Float64 division between UInt64 / UInt32 returns Float64 - floor_division Int16 // Int16 returns Int16 floor_division Int16 // Int16 returns Int16 - division between Int128 / Int64 returns Float64 division between Int128 / Int64 returns Float64 - converts from Int8 to Int128 converts from Int8 to Int128 - initialize from value to UInt8 initialize from value to UInt8 - division between UInt16 / Int128 returns Float64 division between UInt16 / Int128 returns Float64 - division between Int128 / UInt32 returns Float64 division between Int128 / UInt32 returns Float64 - division between Float64 / UInt32 returns Float64 division between Float64 / UInt32 returns Float64 - converts from Int32 to UInt64 converts from Int32 to UInt64 -NamedTuple - does map does map - compares with named tuple union (#5131) compares with named tuple union (#5131) - gets size gets size - #[]? with non-literal index - gets named tuple value or nil with String key gets named tuple value or nil with String key - gets named tuple value or nil with Symbol key gets named tuple value or nil with Symbol key - compares with other named tuple type compares with other named tuple type - .[] with non-literal index - gets named tuple metaclass value with Symbol key gets named tuple metaclass value with Symbol key - raises missing key raises missing key - gets named tuple metaclass value with String key gets named tuple metaclass value with String key - does NamedTuple.new, without type vars does NamedTuple.new, without type vars - does each_value does each_value - .[]? with non-literal index - gets named tuple metaclass value or nil with String key gets named tuple metaclass value or nil with String key - gets named tuple metaclass value or nil with Symbol key gets named tuple metaclass value or nil with Symbol key - does sorted_keys does sorted_keys - #dig - raises KeyError if not found raises KeyError if not found - gets the value at given path given splat gets the value at given path given splat - does NamedTuple.new, with type vars does NamedTuple.new, with type vars - #dig? - returns nil if not found returns nil if not found - gets the value at given path given splat gets the value at given path given splat - does NamedTuple.new, with hyphen in key does NamedTuple.new, with hyphen in key - compares with same named tuple type compares with same named tuple type - #to_a - creates an array of key-value pairs creates an array of key-value pairs - preserves key type for empty named tuples preserves key type for empty named tuples - does has_key? with symbol does has_key? with symbol - does each does each - dups dups - clones clones - does NamedTuple#from does NamedTuple#from - does empty does empty - does values does values - merges two empty named tuples merges two empty named tuples - does each_key does each_key - does NamedTuple.from does NamedTuple.from +Log + .context + is per fiber is per fiber + is assignable from a named tuple is assignable from a named tuple + is extended by set is extended by set + can be set and cleared can be set and cleared + existing keys are overwritten by set existing keys are overwritten by set + is assignable from a hash with symbol keys is assignable from a hash with symbol keys + .with_context + with arguments restores context after the block with arguments restores context after the block + restores context after the block restores context after the block + assigns context via a named tuple assigns context via a named tuple + assigns context via a hash with symbol keys assigns context via a hash with symbol keys + #with_context + with arguments restores context after the block with arguments restores context after the block + restores context after the block restores context after the block +Process + .chroot + raises when unprivileged raises when unprivileged + .on_interrupt + compiles compiles + .pgid .pgid + .fork + executes the new process with exec executes the new process with exec + #wait + successful exit code successful exit code + unsuccessful exit code unsuccessful exit code + #signal(Signal::KILL) + kills many process kills many process + kills a process kills a process + .new + raises if command doesn't exist raises if command doesn't exist + accepts nilable string for `chdir` (#13767) accepts nilable string for `chdir` (#13767) + raises if command could not be executed raises if command could not be executed + raises if command is not executable raises if command is not executable + raises if command is not executable raises if command is not executable + #terminate #terminate + .on_terminate + compiles compiles + .run + sends input in IO sends input in IO + does not execute batch files + .CmD .CmD + .cmD .cmD + .cmd .cmd + .bat .bat + .BAT .BAT + .Bat .Bat + sets working directory with string sets working directory with string + sends error to IO sends error to IO + environ + deletes existing environment variable deletes existing environment variable + sets an environment variable sets an environment variable + sets an empty environment variable sets an empty environment variable + overrides existing environment variable overrides existing environment variable + preserves and sets an environment variable preserves and sets an environment variable + preserves existing environment variable preserves existing environment variable + clears and sets an environment variable clears and sets an environment variable + clears the environment clears the environment + disallows passing arguments to nowhere disallows passing arguments to nowhere + sets working directory with path sets working directory with path + runs true in block runs true in block + can link processes together can link processes together + does not run shell code in the argument list does not run shell code in the argument list + sends output to IO sends output to IO + gets output gets output + looks up programs in the $PATH with a shell looks up programs in the $PATH with a shell + allows passing huge argument lists to a shell allows passing huge argument lists to a shell + redirects output to /dev/null redirects output to /dev/null + forwards non-blocking file forwards non-blocking file + forwards closed io forwards closed io + waits for the process waits for the process + controls process in block controls process in block + receives arguments in tuple receives arguments in tuple + closes ios after block closes ios after block + receives arguments in array receives arguments in array + .exists? .exists? + .exec + redirects STDIN and STDOUT to files redirects STDIN and STDOUT to files + gets error from exec gets error from exec +Channel(T) + does not raise or change its status when it is closed more than once does not raise or change its status when it is closed more than once + send returns channel send returns channel + does send_first does send_first + .non_blocking_select + mix of receive and receive? multi-channel + raises if receive channel was close and receive? channel was not ready raises if receive channel was close and receive? channel was not ready + returns nil if receive channel was not ready and receive? channel was closed returns nil if receive channel was not ready and receive? channel was closed + receive nil-on-close single-channel + returns nil if channel was closed returns nil if channel was closed + types types + send raise-on-close multi-channel + types types + returns correct index for array argument returns correct index for array argument + timeout + types types + negative amounts should not trigger timeout negative amounts should not trigger timeout + send raise-on-close raises if channel was closed while waiting send raise-on-close raises if channel was closed while waiting + receive raise-on-close raises if channel was closed while waiting receive raise-on-close raises if channel was closed while waiting + should not trigger timeout should not trigger timeout + receive nil-on-close returns index of closed while waiting receive nil-on-close returns index of closed while waiting + receive raise-on-close single-channel + types types + send raise-on-close single-channel + types types + receive raise-on-close multi-channel + types types + .select + send raise-on-close multi-channel + types types + receive raise-on-close single-channel + types nilable channel types nilable channel + raises if channel was closed raises if channel was closed + raises if channel is closed while waiting raises if channel is closed while waiting + awakes all waiting selects awakes all waiting selects + types types + receive nil-on-close multi-channel + returns index of closed channel returns index of closed channel + types types + send raise-on-close single-channel + raises if channel was closed raises if channel was closed + types nilable channel types nilable channel + types types + awakes all waiting selects awakes all waiting selects + raises if channel is closed while waiting raises if channel is closed while waiting + mix of receive and receive? multi-channel + raises if receive channel was closed and receive? channel was not ready raises if receive channel was closed and receive? channel was not ready + returns nil if receive channel was not ready and receive? channel was closed returns nil if receive channel was not ready and receive? channel was closed + timeout + receive nil-on-close returns index of closed while waiting receive nil-on-close returns index of closed while waiting + allows receiving while waiting allows receiving while waiting + triggers timeout (reverse order) triggers timeout (reverse order) + triggers timeout triggers timeout + allows receiving while waiting (reverse order) allows receiving while waiting (reverse order) + allows receiving while waiting (same fiber multiple times) allows receiving while waiting (same fiber multiple times) + types types + triggers timeout (same fiber multiple times) triggers timeout (same fiber multiple times) + send raise-on-close raises if channel was closed while waiting send raise-on-close raises if channel was closed while waiting + negative amounts should not trigger timeout negative amounts should not trigger timeout + receive raise-on-close raises if channel was closed while waiting receive raise-on-close raises if channel was closed while waiting + receive raise-on-close multi-channel + types types + receive nil-on-close single-channel + returns nil if channel was closed returns nil if channel was closed + types nilable channel types nilable channel + types types + returns nil channel is closed while waiting returns nil channel is closed while waiting + awakes all waiting selects awakes all waiting selects + creates unbuffered with no arguments creates unbuffered with no arguments + does receive_first does receive_first + creates buffered with capacity argument creates buffered with capacity argument +Pointer::Appender(T) + #size #size + #<< #<< + .new .new + #to_slice #to_slice +OAuth::Signature + does twitter sample does twitter sample + key + gets when token secret is empty gets when token secret is empty + gets when token secret is not empty gets when token secret is not empty + base string + computes when TLS computes when TLS + computes with port in host computes with port in host + computes without port in host computes without port in host +HTTP::Server::RequestProcessor + handles IO::Error while reading handles IO::Error while reading + reads consecutive requests + closes connection when Connection: close closes connection when Connection: close + fail if body is not consumed fail if body is not consumed + closes connection when request body is not entirely consumed closes connection when request body is not entirely consumed + continues when request body is entirely consumed continues when request body is entirely consumed + when body is consumed when body is consumed + with empty body with empty body + works works + handles IO::Error while flushing handles IO::Error while flushing + does not bleed Log::Context between requests does not bleed Log::Context between requests + doesn't respond with error when headers were already sent doesn't respond with error when headers were already sent + handles IO::Error while writing handles IO::Error while writing + catches raised error on handler and retains context from handler catches raised error on handler and retains context from handler + flushes output buffer when an error happens and some content was already sent flushes output buffer when an error happens and some content was already sent +Fiber + #resumable? #resumable? +HTTP::ChunkedContent + #read_byte stops reading after final chunk #read_byte stops reading after final chunk + long trailer part + fails for long single header fails for long single header + fails for long combined headers fails for long combined headers + #peek handles interrupted io #peek handles interrupted io + #read reads empty content #read reads empty content + #peek handles empty data #peek handles empty data + #read_byte reads empty content #read_byte reads empty content + skips (2) skips (2) + #read stops reading after final chunk #read stops reading after final chunk + #read_byte handles interrupted io #read_byte handles interrupted io + #peek stops reading after final chunk #peek stops reading after final chunk + #gets reads multiple chunks #gets reads multiple chunks + #peek reads empty content #peek reads empty content + fails if unterminated chunked trailer part fails if unterminated chunked trailer part + reads chunk extensions reads chunk extensions + skips skips + fails if not properly delimited fails if not properly delimited + skips (3) skips (3) + #read handles interrupted io #read handles interrupted io + #read_byte handles empty data #read_byte handles empty data + #read handles empty data #read handles empty data + reads chunked trailer part reads chunked trailer part + fails if not properly delimited fails if not properly delimited + #gets reads multiple chunks with + #gets reads multiple chunks with + + delays reading the next chunk as soon as one is consumed (#3270) delays reading the next chunk as soon as one is consumed (#3270) + peeks into next chunk peeks into next chunk + handles empty io handles empty io + fails if invalid chunk size fails if invalid chunk size + peeks peeks +Atomic::Flag + #test_and_set #test_and_set + #clear #clear +HTTP::Client::Response + parses response with body without \r parses response with body without \r + parses response without body but Content-Length == 0, block form (#8461) parses response without body but Content-Length == 0, block form (#8461) + handle invalid IO + unsupported version unsupported version + invalid status invalid status + missing HTTP header missing HTTP header + missing status missing status + parses response without status message parses response without status message + returns content type and charset, removes semicolon returns content type and charset, removes semicolon + sets content length from body sets content length from body + serialize as not chunked with body_io if HTTP/1.0 serialize as not chunked with body_io if HTTP/1.0 + parses 204 response without body but Content-Length == 0 (#2512) parses 204 response without body but Content-Length == 0 (#2512) + creates Response with status code 204, no body and Content-Length == 0 (#2512) creates Response with status code 204, no body and Content-Length == 0 (#2512) + returns content type and charset, removes semicolon, with multiple parameters (#2520) returns content type and charset, removes semicolon, with multiple parameters (#2520) + returns content type and no charset, other parameter (#2520) returns content type and no charset, other parameter (#2520) + parses response with chunked body of size 0 parses response with chunked body of size 0 + sets content length even without body sets content length even without body + success? + returns false for other ranges returns false for other ranges + returns true for the 2xx returns true for the 2xx + deletes Content-Encoding and Content-Length headers after gzip decompression deletes Content-Encoding and Content-Length headers after gzip decompression + parses response with streamed chunked body parses response with streamed chunked body + doesn't sets content length for 1xx, 204 or 304 doesn't sets content length for 1xx, 204 or 304 + parses long headers parses long headers + parses response without body parses response without body + returns no content_type when header is missing returns no content_type when header is missing + parses long request lines parses long request lines + serialize with body serialize with body + returns content type and charset, removes quotes returns content type and charset, removes quotes + returns content type and no charset returns content type and no charset + serialize as chunked with body_io serialize as chunked with body_io + parses response with chunked body parses response with chunked body + returns status_code returns status_code + parses response with body but without content-length parses response with body but without content-length + raises when creating 1xx, 204 or 304 with body raises when creating 1xx, 204 or 304 with body + parses response with empty body but without content-length parses response with empty body but without content-length + parses response with streamed body, huge content-length parses response with streamed body, huge content-length + parses response with streamed body parses response with streamed body + returns content type as nil when empty (#8398) returns content type as nil when empty (#8398) + parses response with cookies parses response with cookies + serialize with body and cookies serialize with body and cookies + parses response ignoring body parses response ignoring body + parses response with body parses response with body + deletes Content-Encoding and Content-Length headers after deflate decompression deletes Content-Encoding and Content-Length headers after deflate decompression + parses response with duplicated headers parses response with duplicated headers +Range + sum + called with no block is specialized for performance (BigInt) called with no block is specialized for performance (BigInt) + is equivalent to Enumerable#sum is equivalent to Enumerable#sum + called with no block is specialized for performance called with no block is specialized for performance + map + works for other types works for other types + optimizes for int range optimizes for int range + initialized with new method initialized with new method + gets basic properties gets basic properties + #reverse_each + gives correct values with exclusive range gives correct values with exclusive range + gives correct values with inclusive range gives correct values with inclusive range + is empty with empty inclusive range is empty with empty inclusive range + iterators on beginless range iterators on beginless range + raises on endless range raises on endless range + #each iterator + is empty with .. and begin > end is empty with .. and begin > end + is not empty with ... and begin.succ == end is not empty with ... and begin.succ == end + is not empty with .. and begin == end is not empty with .. and begin == end + does next with exclusive range does next with exclusive range + does with endless range does with endless range + does next with inclusive range does next with inclusive range + raises on beginless range raises on beginless range + cycles cycles + is empty with ... and begin > end is empty with ... and begin > end + is not empty with ... and begin.succ == end is not empty with ... and begin.succ == end + #== #== does to_s does to_s - does types does types - does keys does keys - #[] with non-literal index - gets named tuple value with Symbol key gets named tuple value with Symbol key - gets named tuple value with String key gets named tuple value with String key - raises missing key raises missing key - does has_key? with string does has_key? with string - computes a hash value computes a hash value - does each_with_index does each_with_index - #to_h - creates an empty hash from an empty named tuple creates an empty hash from an empty named tuple - creates a hash creates a hash - merges with other named tuple merges with other named tuple -Time::Location - .load - loads Europe/Berlin loads Europe/Berlin - validating name - absolute path absolute path - dot dot dot dot - invalid zone file invalid zone file - name is folder name is folder - treats UTC as special case treats UTC as special case - invalid timezone identifier invalid timezone identifier - with ZONEINFO - loads new data if file was changed loads new data if file was changed - loads from custom zipfile loads from custom zipfile - loads new data if ZIP file was changed loads new data if ZIP file was changed - raises if not available raises if not available - loads from custom directory loads from custom directory - does not fall back to default sources does not fall back to default sources - caches result caches result - .local .local - .fixed - negative negative - with name with name - without name without name - raises if offset to large raises if offset to large - positive positive - #lookup - handles dst change handles dst change - reads from cache reads from cache - first zone - Pacific/Fakaofo Pacific/Fakaofo - PST8PDT PST8PDT - looks up looks up - handles value after last transition handles value after last transition - caches last zone caches last zone - UTC UTC - .load_android - loads Europe/Berlin loads Europe/Berlin - loads new data if tzdata file was changed loads new data if tzdata file was changed - .load_local - with unset TZ with unset TZ - with TZ with TZ - with empty TZ with empty TZ -IO::Hexdump - write - prints hexdump prints hexdump - read - prints hexdump prints hexdump + === + no limits no limits + exclusive exclusive + beginless beginless + endless endless + inclusive inclusive + #sample + samples with n = 0 samples with n = 0 + for a float range + samples an exclusive range with n > 1 samples an exclusive range with n > 1 + samples an exclusive range without n samples an exclusive range without n + samples an inclusive range without n samples an inclusive range without n + samples an inclusive range with n > 1 samples an inclusive range with n > 1 + samples an inclusive range with n >= 1 and begin == end samples an inclusive range with n >= 1 and begin == end + raises on invalid range with n = 0 raises on invalid range with n = 0 + samples an exclusive range with n = 1 samples an exclusive range with n = 1 + raises on invalid range with n = 1 raises on invalid range with n = 1 + samples an inclusive range with n = 1 samples an inclusive range with n = 1 + samples an inclusive range with n > 16 samples an inclusive range with n > 16 + raises on invalid range with n > 1 raises on invalid range with n > 1 + samples a float range as a distribution samples a float range as a distribution + for an integer range + samples an inclusive range with n > 16 samples an inclusive range with n > 16 + raises on invalid range with n = 1 raises on invalid range with n = 1 + samples an inclusive range with n > 1 samples an inclusive range with n > 1 + samples an inclusive range with n equal to or bigger than the available values samples an inclusive range with n equal to or bigger than the available values + raises on invalid range without n raises on invalid range without n + samples an inclusive range with n = 1 samples an inclusive range with n = 1 + raises on invalid range with n = 0 raises on invalid range with n = 0 + samples an exclusive range with n = 1 samples an exclusive range with n = 1 + raises on exclusive range that would underflow raises on exclusive range that would underflow + raises on invalid range with n > 1 raises on invalid range with n > 1 + samples an exclusive range without n samples an exclusive range without n + samples an exclusive range with n > 1 samples an exclusive range with n > 1 + samples an inclusive range without n samples an inclusive range without n + raises on open range raises on open range + samples a range with nilable types samples a range with nilable types + is empty with .. and begin > end is empty with .. and begin > end + #each + is empty with empty inclusive range is empty with empty inclusive range + raises on beginless raises on beginless + gives correct values with inclusive range gives correct values with inclusive range + endless endless + doesn't have Nil as a type for endless each doesn't have Nil as a type for endless each + gives correct values with exclusive range gives correct values with exclusive range + doesn't have Nil as a type for beginless each doesn't have Nil as a type for beginless each + #step + "inclusive step over" iterator "inclusive step over" iterator + "begin.succ == end exclusive" yielding "begin.succ == end exclusive" yielding + "begin == end exclusive" yielding "begin == end exclusive" yielding + "exclusive default" iterator "exclusive default" iterator + "begin.succ == end inclusive" yielding "begin.succ == end inclusive" yielding + "endless range" iterator "endless range" iterator + "begin > end inclusive" iterator "begin > end inclusive" iterator + "begin > end exclusive" iterator "begin > end exclusive" iterator + "inclusive step" yielding "inclusive step" yielding + "exclusive step over" yielding "exclusive step over" yielding + "inclusive default" iterator "inclusive default" iterator + "Float step" iterator "Float step" iterator + "Time::Span step" iterator "Time::Span step" iterator + "begin.succ == end inclusive" iterator "begin.succ == end inclusive" iterator + "endless range" yielding "endless range" yielding + "inclusive default" yielding "inclusive default" yielding + "begin > end exclusive" yielding "begin > end exclusive" yielding + "begin.succ == end exclusive" iterator "begin.succ == end exclusive" iterator + "exclusive step" yielding "exclusive step" yielding + "exclusive step" iterator "exclusive step" iterator + "inclusive step" iterator "inclusive step" iterator + "exclusive default" yielding "exclusive default" yielding + "inclusive step over" yielding "inclusive step over" yielding + "begin == end inclusive" iterator "begin == end inclusive" iterator + "begin > end inclusive" yielding "begin > end inclusive" yielding + "Time::Span step" yielding "Time::Span step" yielding + "exclusive step over" iterator "exclusive step over" iterator + "Float step" yielding "Float step" yielding + with #succ type + "at definition range" yielding "at definition range" yielding + "at definition range by" iterator "at definition range by" iterator + "at definition range by" yielding "at definition range by" yielding + "at definition range by" iterator "at definition range by" iterator + "at definition range by" yielding "at definition range by" yielding + "missing end by" yielding "missing end by" yielding + "at definition range" iterator "at definition range" iterator + "basic by" yielding "basic by" yielding + "at definition range missing by" yielding "at definition range missing by" yielding + "missing end by" iterator "missing end by" iterator + "at definition range missing by" iterator "at definition range missing by" iterator + "basic by" iterator "basic by" iterator + "basic" yielding "basic" yielding + "at definition range missing by" iterator "at definition range missing by" iterator + "at definition range missing by" yielding "at definition range missing by" yielding + "basic" iterator "basic" iterator + "begin == end inclusive" yielding "begin == end inclusive" yielding + raises on beginless range raises on beginless range + "begin == end exclusive" iterator "begin == end exclusive" iterator + bsearch + BigInt BigInt + Int Int + Float Float + is empty with ... and begin > end is empty with ... and begin > end + does inspect does inspect + includes? includes? + is not empty with .. and begin == end is not empty with .. and begin == end + clones clones + #size + raises on beginless range raises on beginless range + raises on endless range raises on endless range + works for other types works for other types + optimizes for int range optimizes for int range + #reverse_each iterator + is empty with ... and begin > end is empty with ... and begin > end + does next with inclusive range does next with inclusive range + is not empty with ... and begin.succ == end is not empty with ... and begin.succ == end + raises on endless range raises on endless range + does next with exclusive range does next with exclusive range + does next with beginless range does next with beginless range + reverse cycles reverse cycles + is not empty with .. and begin == end is not empty with .. and begin == end + is empty with .. and begin > end is empty with .. and begin > end +SystemError + .from_os_error + Can build an error from an errno Can build an error from an errno +Random + random_bytes + gets random bytes with default number of digits gets random bytes with default number of digits + generates random bytes generates random bytes + fills given buffer with random bytes fills given buffer with random bytes + gets random bytes with requested number of digits gets random bytes with requested number of digits + hex + gets hex with requested number of digits gets hex with requested number of digits + gets hex with default number of digits gets hex with default number of digits + does with BigInt range does with BigInt range + gets a random bool gets a random bool + raises on invalid number raises on invalid number + does with inclusive range does with inclusive range + limited number limited number + returns a random static array returns a random static array + works using U/Int128 works using U/Int128 + urlsafe_base64 + keeps padding keeps padding + gets urlsafe base64 with requested number of digits gets urlsafe base64 with requested number of digits + gets urlsafe base64 with default number of digits gets urlsafe base64 with default number of digits + does with exclusive range of floats does with exclusive range of floats + works with span exceeding int type's range works with span exceeding int type's range + generates full-range by accumulation generates full-range by accumulation + generates by truncation generates by truncation + limited Float32 number limited Float32 number + does with exclusive range does with exclusive range + float number float number + limited Float64 number limited Float64 number + limited large BigInt limited large BigInt + allows creating a new default random with a seed allows creating a new default random with a seed + generates by accumulation generates by accumulation + generates full-range by truncation generates full-range by truncation + generates full-range generates full-range + raises on invalid float number raises on invalid float number + generates full-range by negation generates full-range by negation + raises on invalid range + Int32 range Int32 range + BigInt range BigInt range + Float64 range Float64 range + base64 + gets base64 with requested number of digits gets base64 with requested number of digits + gets base64 with default number of digits gets base64 with default number of digits + allows creating a new default random allows creating a new default random + limited BigInt limited BigInt + does with inclusive range of floats does with inclusive range of floats + returns a random integer returns a random integer HTTP::WebSocket - handshake fails if server does not switch protocols handshake fails if server does not switch protocols send_masked sends the data with a bitmask sends the data with a bitmask sends long data with correct header sends long data with correct header - doesn't compress upgrade response body doesn't compress upgrade response body - sends correct HTTP basic auth header sends correct HTTP basic auth header - using IPv4 - negotiates over HTTP correctly negotiates over HTTP correctly - negotiates over HTTPS correctly negotiates over HTTPS correctly - stream - sends continuous data and splits it to frames sends continuous data and splits it to frames - sets opcode of first frame to binary if stream is called with binary = true sets opcode of first frame to binary if stream is called with binary = true - sends less data than the frame size if necessary sends less data than the frame size if necessary - ignores body in upgrade response (malformed) ignores body in upgrade response (malformed) - close - closes without message closes without message - closes with code closes with code - closes with message and code closes with message and code - closes with message closes with message - using IPv6 - negotiates over HTTP correctly negotiates over HTTP correctly - negotiates over HTTPS correctly negotiates over HTTPS correctly receive + read ping packet read ping packet can read masked text message can read masked text message - read very long packet read very long packet - can read partial packets can read partial packets can read fragmented packets can read fragmented packets - read long packet read long packet can read a small text packet can read a small text packet + can read partial packets can read partial packets can read a close packet can read a close packet + read very long packet read very long packet + read long packet read long packet read ping packet in between fragmented packet read ping packet in between fragmented packet - read ping packet read ping packet + using IPv4 + negotiates over HTTP correctly negotiates over HTTP correctly + negotiates over HTTPS correctly negotiates over HTTPS correctly + using IPv6 + negotiates over HTTP correctly negotiates over HTTP correctly + negotiates over HTTPS correctly negotiates over HTTPS correctly handshake fails if server does not verify Sec-WebSocket-Key Sec-WebSocket-Accept incorrect Sec-WebSocket-Accept incorrect Sec-WebSocket-Accept missing Sec-WebSocket-Accept missing + doesn't compress upgrade response body doesn't compress upgrade response body + ignores body in upgrade response (malformed) ignores body in upgrade response (malformed) + close + closes with message closes with message + closes with code closes with code + closes without message closes without message + closes with message and code closes with message and code send sends long data with correct header sends long data with correct header sets binary opcode if used with slice sets binary opcode if used with slice -__umodti3 - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests -CSV - gets row iterator gets row iterator - parse - parses empty quoted string parses empty quoted string - takes an optional separator argument takes an optional separator argument - parses two rows parses two rows - parses one simple row parses one simple row - parses with double quote parses with double quote - raises if command, newline or end doesn't follow quote (2) raises if command, newline or end doesn't follow quote (2) - parses from IO parses from IO - raises if single quote in the middle raises if single quote in the middle - parses with quote parses with quote - raises if command, newline or end doesn't follow quote raises if command, newline or end doesn't follow quote - parses one row with spaces parses one row with spaces - parses with quote and newline parses with quote and newline - parses two rows with the last one having a newline parses two rows with the last one having a newline - parses empty string parses empty string - parses some commas parses some commas - takes an optional quote char argument takes an optional quote char argument - does CSV.each_row does CSV.each_row - parses row by row parses row by row - does CSV.each_row with separator and quotes does CSV.each_row with separator and quotes -Bool - | - assert assert + sends correct HTTP basic auth header sends correct HTTP basic auth header + handshake fails if server does not switch protocols handshake fails if server does not switch protocols + stream + sets opcode of first frame to binary if stream is called with binary = true sets opcode of first frame to binary if stream is called with binary = true + sends continuous data and splits it to frames sends continuous data and splits it to frames + sends less data than the frame size if necessary sends less data than the frame size if necessary +MIME::MediaType + #type #type + #fetch #fetch + #sub_type #sub_type + #[]= #[]= + .new + create new instance create new instance + raises for invalid parameter name raises for invalid parameter name + #each_parameter #each_parameter + #to_s #to_s + .parse + parses media type parses media type + sets default charset to utf-8 for text media types sets default charset to utf-8 for text media types + parses params with encoding parses params with encoding + parses params parses params +Log.setup_from_env + raises on invalid level raises on invalid level + default_level + is not used if LOG_LEVEL is set is not used if LOG_LEVEL is set + is info is info + is used if no LOG_LEVEL is set is used if no LOG_LEVEL is set + default_sources + splits sources by comma splits sources by comma + is used is used + is * is * + backend + can be changed can be changed + is a IOBackend is a IOBackend +MIME::Multipart::Parser + raises calling #next after errored raises calling #next after errored + handles padding handles padding + parses basic multipart messages parses basic multipart messages + parses messages with preambles and epilogues parses messages with preambles and epilogues + handles break/next in blocks handles break/next in blocks + raises calling #next after finished raises calling #next after finished + handles invalid multipart data handles invalid multipart data +Hash + creates with initial capacity and block creates with initial capacity and block + "#each_key" iterator "#each_key" iterator + maps maps + transform values in place with keys included transform values in place with keys included + gets from union gets from union + transforms keys transforms keys + "#each" yielding "#each" yielding + clone + clones recursive hash clones recursive hash + retains default block on clone retains default block on clone + clones with size = 1 clones with size = 1 + clones empty hash clones empty hash + clones big hash clones big hash + clones small hash clones small hash + reject assert assert + does not change current hash does not change current hash assert assert assert assert - ! assert assert + does to to_s with instance that was never instantiated does to to_s with instance that was never instantiated + "#each_with_index" yielding "#each_with_index" yielding + gets array of keys gets array of keys + first_value + raises on first value (nilable value) raises on first value (nilable value) + doesn't raise on first value (nilable value) doesn't raise on first value (nilable value) + gets first value gets first value + compacts! compacts! + compacts compacts + does to_a does to_a + key_for + raises when no key pairs with the given value raises when no key pairs with the given value + if block is given, + returns the first key with the given value returns the first key with the given value + yields the argument if no hash key pairs with the value yields the argument if no hash key pairs with the value + returns the first key with the given value returns the first key with the given value + selects selects + merges! with block merges! with block + transforms keys with values included transforms keys with values included + transforms keys with type casting transforms keys with type casting + fetch + fetches with block fetches with block + fetches with default value fetches with default value + compare_by_identity + retains compare_by_identity on dup retains compare_by_identity on dup + small hash small hash + retains compare_by_identity on clone retains compare_by_identity on clone + big hash big hash + merges other type with block merges other type with block + transforms values with keys included transforms values with keys included + "#each_with_index" iterator "#each_with_index" iterator + gets first gets first + sets and gets sets and gets + initializes with default value initializes with default value + == assert assert - hash assert assert + compares hash of nested hash compares hash of nested hash + gets array of values gets array of values + transforms values with type casting values transforms values with type casting values + size + is the same as size is the same as size + inserts many inserts many + rejects! rejects! + initializes with block initializes with block + last_key + raises on last key (nilable key) raises on last key (nilable key) + gets last key gets last key + doesn't raise on last key (nilable key) doesn't raise on last key (nilable key) + "#each" iterator "#each" iterator + does each does each + merges recursive type (#1693) merges recursive type (#1693) + does each_value does each_value + all? + passes key and value into block passes key and value into block + evaluates the block for only for as many kv pairs as necessary evaluates the block for only for as many kv pairs as necessary + returns true if the block evaluates truthy for every kv pair returns true if the block evaluates truthy for every kv pair + #put_if_absent + puts if key doesn't exist puts if key doesn't exist + returns existing value if key exists returns existing value if key exists + accepts a block accepts a block + doesn't put duplicate keys (#14425) doesn't put duplicate keys (#14425) + merges merges + fetches from empty hash with default value fetches from empty hash with default value to_s assert assert assert assert - ^ - assert assert - assert assert - assert assert + zips zips + inserts in one bucket and deletes from the same one inserts in one bucket and deletes from the same one + select! with non-equality key select! with non-equality key + key_for? + returns the first key with the given value returns the first key with the given value + returns nil if no key pairs with the given value returns nil if no key pairs with the given value + does to_a after delete does to_a after delete + #put + puts in a small hash puts in a small hash + puts in a big hash puts in a big hash + yields key yields key + dig + gets the value at given path given splat gets the value at given path given splat + raises KeyError if not found raises KeyError if not found + does each_key does each_key + "#each_value" yielding "#each_value" yielding + returns empty hash when transforming keys of an empty hash returns empty hash when transforming keys of an empty hash + merges! merges! + has_value? + returns false if does not contain the value returns false if does not contain the value + returns true if contains the value returns true if contains the value + select assert assert - & assert assert + does not change current hash does not change current hash assert assert assert assert assert assert - to_unsafe + "#each_with_index(offset)" yielding "#each_with_index(offset)" yielding + transform values in place transform values in place + returns empty hash when transforming values of an empty hash returns empty hash when transforming values of an empty hash + computes hash computes hash + rejects rejects + "#each_key" yielding "#each_key" yielding + clears clears + [] + gets gets + subset/superset operators + #superset_of? + assert assert + #proper_subset_of? + assert assert + handles edge case where both values are nil handles edge case where both values are nil + #subset_of? + handles edge case where both values are nil handles edge case where both values are nil + assert assert + #proper_superset_of? + assert assert + #rehash + rehashes rehashes + resets @first (#14602) resets @first (#14602) + creates with initial capacity creates with initial capacity + gets from literal gets from literal + delete + deletes many in the beginning and then will need a resize deletes many in the beginning and then will need a resize + with block + returns the value if a key is found returns the value if a key is found + returns nil if key is found and value is nil returns nil if key is found and value is nil + returns the value of the block if key is not found returns the value of the block if key is not found + deletes key in the end deletes key in the end + deletes key in the middle deletes key in the middle + deletes not found deletes not found + deletes key in the beginning deletes key in the beginning + deletes only remaining entry deletes only remaining entry + select! assert assert assert assert - clone + does change current hash does change current hash assert assert assert assert -BigRational Math - sqrt sqrt -File - .tempname - creates a path without creating the file creates a path without creating the file - accepts dir argument accepts dir argument - accepts prefix and suffix arguments accepts prefix and suffix arguments - accepts single suffix argument accepts single suffix argument - accepts prefix with separator accepts prefix with separator - .tempfile - fails in nonwriteable folder fails in nonwriteable folder - accepts prefix and suffix arguments accepts prefix and suffix arguments - accepts single suffix argument accepts single suffix argument - rejects null byte rejects null byte - with block - accepts prefix and suffix arguments accepts prefix and suffix arguments - accepts dir argument accepts dir argument - accepts single suffix argument accepts single suffix argument - closes file closes file - accepts dir argument accepts dir argument - creates and writes creates and writes -HTTP::Handler - responds with not found if there's no next handler responds with not found if there's no next handler -HTTP::Client::Response - raises when creating 1xx, 204 or 304 with body raises when creating 1xx, 204 or 304 with body - parses response with chunked body parses response with chunked body - serialize with body and cookies serialize with body and cookies - parses long headers parses long headers - deletes Content-Encoding and Content-Length headers after gzip decompression deletes Content-Encoding and Content-Length headers after gzip decompression - parses response with body but without content-length parses response with body but without content-length - returns content type and charset, removes quotes returns content type and charset, removes quotes - doesn't sets content length for 1xx, 204 or 304 doesn't sets content length for 1xx, 204 or 304 - parses response with body without \r parses response with body without \r - serialize as chunked with body_io serialize as chunked with body_io - parses response with duplicated headers parses response with duplicated headers - deletes Content-Encoding and Content-Length headers after deflate decompression deletes Content-Encoding and Content-Length headers after deflate decompression - sets content length from body sets content length from body - serialize with body serialize with body - parses long request lines parses long request lines - returns content type and charset, removes semicolon, with multiple parameters (#2520) returns content type and charset, removes semicolon, with multiple parameters (#2520) - returns status_code returns status_code - handle invalid IO - unsupported version unsupported version - invalid status invalid status - missing status missing status - missing HTTP header missing HTTP header - returns content type and no charset, other parameter (#2520) returns content type and no charset, other parameter (#2520) - parses response with chunked body of size 0 parses response with chunked body of size 0 - creates Response with status code 204, no body and Content-Length == 0 (#2512) creates Response with status code 204, no body and Content-Length == 0 (#2512) - parses response without status message parses response without status message - parses 204 response without body but Content-Length == 0 (#2512) parses 204 response without body but Content-Length == 0 (#2512) - parses response ignoring body parses response ignoring body - returns content type and charset, removes semicolon returns content type and charset, removes semicolon - returns no content_type when header is missing returns no content_type when header is missing - returns content type and no charset returns content type and no charset - sets content length even without body sets content length even without body - parses response with streamed body, huge content-length parses response with streamed body, huge content-length - success? - returns false for other ranges returns false for other ranges - returns true for the 2xx returns true for the 2xx - parses response with empty body but without content-length parses response with empty body but without content-length - parses response without body but Content-Length == 0, block form (#8461) parses response without body but Content-Length == 0, block form (#8461) - parses response without body parses response without body - returns content type as nil when empty (#8398) returns content type as nil when empty (#8398) - serialize as not chunked with body_io if HTTP/1.0 serialize as not chunked with body_io if HTTP/1.0 - parses response with streamed chunked body parses response with streamed chunked body - parses response with cookies parses response with cookies - parses response with streamed body parses response with streamed body - parses response with body parses response with body -Crystal::Digest::MD5 - calculates hash of #to_slice calculates hash of #to_slice - context are independent context are independent - can't call final twice can't call final twice - calculates hash from string calculates hash from string - #hexdigest can update within a loop by indirect expr (#9483) #hexdigest can update within a loop by indirect expr (#9483) - calculates base64'd hash from string calculates base64'd hash from string - calculates hash from unicode string calculates hash from unicode string - calculates digest from string calculates digest from string - return the digest size return the digest size - can take a block can take a block - calculates hash from UInt8 slices calculates hash from UInt8 slices - digest with file content digest with file content - resets resets - #hexdigest can update within a loop from explicit expr (#9483) #hexdigest can update within a loop from explicit expr (#9483) - .dup - leads to not sharing state leads to not sharing state - preserves value preserves value - leads to deterministic updates leads to deterministic updates - preserves type preserves type -Base64 - urlsafe - work work - encode to stream returns number of written characters encode to stream returns number of written characters - strict - encode to stream returns number of written characters encode to stream returns number of written characters - encode encode - with spec symbols with spec symbols - decode cases - raise error when - in incorrect place raise error when - in incorrect place - raise error when incorrect size raise error when incorrect size - decode - in multiple places decode - in multiple places - raise error when incorrect symbol raise error when incorrect symbol - decode - decode - - decode small tail after last -, was a bug decode small tail after last -, was a bug - encodes static array encodes static array - encodes byte slice encodes byte slice - base - decode from stream returns number of written bytes decode from stream returns number of written bytes - decode from strict form decode from strict form - decode from "U2VuZCByZWluZm9yY2VtZW50cw==\n" to "Send reinforcements" decode from "U2VuZCByZWluZm9yY2VtZW50cw==\n" to "Send reinforcements" - encode "This is line one\nThis is line two\nThis is line three\nAnd so on...\n" to "VGhpcyBpcyBsaW5lIG9uZQpUaGlzIGlzIGxpbmUgdHdvClRoaXMgaXMgbGlu\nZSB0aHJlZQpBbmQgc28gb24uLi4K\n" encode "This is line one\nThis is line two\nThis is line three\nAnd so on...\n" to "VGhpcyBpcyBsaW5lIG9uZQpUaGlzIGlzIGxpbmUgdHdvClRoaXMgaXMgbGlu\nZSB0aHJlZQpBbmQgc28gb24uLi4K\n" - works for most characters works for most characters - encode to stream returns number of written characters encode to stream returns number of written characters - encode "Now is the time for all good coders\nto learn Crystal" to "Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g\nQ3J5c3RhbA==\n" encode "Now is the time for all good coders\nto learn Crystal" to "Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g\nQ3J5c3RhbA==\n" - big message big message - encode "Send reinforcements" to "U2VuZCByZWluZm9yY2VtZW50cw==\n" encode "Send reinforcements" to "U2VuZCByZWluZm9yY2VtZW50cw==\n" - decode from "VGhpcyBpcyBsaW5lIG9uZQpUaGlzIGlzIGxpbmUgdHdvClRoaXMgaXMgbGlu\nZSB0aHJlZQpBbmQgc28gb24uLi4K\n" to "This is line one\nThis is line two\nThis is line three\nAnd so on...\n" decode from "VGhpcyBpcyBsaW5lIG9uZQpUaGlzIGlzIGxpbmUgdHdvClRoaXMgaXMgbGlu\nZSB0aHJlZQpBbmQgc28gb24uLi4K\n" to "This is line one\nThis is line two\nThis is line three\nAnd so on...\n" - decode from "Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g\nQ3J5c3RhbA==\n" to "Now is the time for all good coders\nto learn Crystal" decode from "Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g\nQ3J5c3RhbA==\n" to "Now is the time for all good coders\nto learn Crystal" - decode from "aGFoYWjiipnik6fiipk=\n" to "hahah⊙ⓧ⊙" decode from "aGFoYWjiipnik6fiipk=\n" to "hahah⊙ⓧ⊙" - encode "hahah⊙ⓧ⊙" to "aGFoYWjiipnik6fiipk=\n" encode "hahah⊙ⓧ⊙" to "aGFoYWjiipnik6fiipk=\n" - encodes empty slice encodes empty slice - simple test - decode from "YWJjZGVm\n" to "abcdef" decode from "YWJjZGVm\n" to "abcdef" - encode "ab" to "YWI=\n" encode "ab" to "YWI=\n" - encode "" to "" encode "" to "" - encode "abcde" to "YWJjZGU=\n" encode "abcde" to "YWJjZGU=\n" - decode from "YQ==\n" to "a" decode from "YQ==\n" to "a" - decode from "YWI=\n" to "ab" decode from "YWI=\n" to "ab" - decode from "YWJj\n" to "abc" decode from "YWJj\n" to "abc" - decode from "YWJjZGU=\n" to "abcde" decode from "YWJjZGU=\n" to "abcde" - decode from "YWJjZA==\n" to "abcd" decode from "YWJjZA==\n" to "abcd" - encode "abc" to "YWJj\n" encode "abc" to "YWJj\n" - encode "abcdef" to "YWJjZGVm\n" encode "abcdef" to "YWJjZGVm\n" - encode "abcdefg" to "YWJjZGVmZw==\n" encode "abcdefg" to "YWJjZGVmZw==\n" - decode from "YWJjZGVmZw==\n" to "abcdefg" decode from "YWJjZGVmZw==\n" to "abcdefg" - decode from "" to "" decode from "" to "" - encode "abcd" to "YWJjZA==\n" encode "abcd" to "YWJjZA==\n" - encode "a" to "YQ==\n" encode "a" to "YQ==\n" - - in multiple places - decode from "YWJj\nZGVm\nZw==\n" to "abcdefg" decode from "YWJj\nZGVm\nZw==\n" to "abcdefg" - decode from "YWJj\nZGU=\n" to "abcde" decode from "YWJj\nZGU=\n" to "abcde" - decode from "YWJj\nZA==\n" to "abcd" decode from "YWJj\nZA==\n" to "abcd" - decode from "YWJj\nZGVm\n" to "abcdef" decode from "YWJj\nZGVm\n" to "abcdef" -.__powidf2 .__powidf2 -YAML::Serializable - should parse extra fields (YAMLAttrPersonExtraFields with on_unknown_yaml_attribute) should parse extra fields (YAMLAttrPersonExtraFields with on_unknown_yaml_attribute) - parses yaml with keywords parses yaml with keywords - doesn't raises on false value when not-nil doesn't raises on false value when not-nil - parses array of people with merge, doesn't hang on infinite recursion parses array of people with merge, doesn't hang on infinite recursion - parses strict person with unknown attributes parses strict person with unknown attributes - parses yaml with problematic keys parses yaml with problematic keys - converter with default value converter with default value - parses person with blank age parses person with blank age - parses nilable union parses nilable union - fixes #13337 fixes #13337 - parses yaml with defaults - bool bool - create new array every time create new array every time - with nilable with nilable - mixed mixed - uses Time::EpochMillisConverter uses Time::EpochMillisConverter - works with selective serialization works with selective serialization - parses array of people parses array of people - raises if non-nilable attribute is nil raises if non-nilable attribute is nil - outputs with converter when nilable outputs with converter when nilable - parses person parses person - emit_nulls option emit_nulls option - converter with null value (#13655) converter with null value (#13655) - raises if data type does not match raises if data type does not match - uses Time::EpochConverter uses Time::EpochConverter - YAML::ArrayConverter(Converter) - uses converter instance with nested converter instance uses converter instance with nested converter instance - uses converter instance with nested converter metaclass uses converter instance with nested converter metaclass - uses converter metaclass uses converter metaclass - parses recursive array parses recursive array - serializes YAML with presence markers and ignore_serialize - ignore_serialize is set to a method which returns true when value is nil or empty string - ignores field when value is nil ignores field when value is nil - ignores field when value is empty string ignores field when value is empty string - ignore_serialize is set to conditional expressions 'last_name.nil? && !last_name_present?' - does not emit null when value is null and @last_name_present is false does not emit null when value is null and @last_name_present is false - emits null when value is null and @last_name_present is true emits null when value is null and @last_name_present is true - emits field when value is not nil and @last_name_present is true emits field when value is not nil and @last_name_present is true - emits field when value is not nil and @last_name_present is false emits field when value is not nil and @last_name_present is false - namespaced classes - lets default values use the object's own namespace lets default values use the object's own namespace - checks that non-integer values for integer fields report the expected type checks that non-integer values for integer fields report the expected type - work with inned class using same module name + does not skip elements with an exhaustable enumerable argument (#12736) does not skip elements with an exhaustable enumerable argument (#12736) assert assert - parses person without age parses person without age - with query attributes - defines non-query setter and presence methods defines non-query setter and presence methods - maps non-query attributes maps non-query attributes - raises if non-nilable attribute is nil raises if non-nilable attribute is nil - defines query getter defines query getter - defines query getter with class restriction defines query getter with class restriction - parses recursive nilable (2) parses recursive nilable (2) - outputs YAML with Hash outputs YAML with Hash - parses yaml with any parses yaml with any - empty class with unmapped empty class with unmapped - parses recursive nilable (1) parses recursive nilable (1) - parses recursive parses recursive - calls #finalize calls #finalize - checks that values fit into integer types checks that values fit into integer types - emits null on request when doing to_yaml emits null on request when doing to_yaml - parses simple mapping parses simple mapping - raises if not an object raises if not an object - parses YAML with presence markers - parses person with absent attributes parses person with absent attributes - use_yaml_discriminator - deserializes with variable discriminator value type deserializes with variable discriminator value type - deserializes with discriminator, another recursive type, fixes: #13429 deserializes with discriminator, another recursive type, fixes: #13429 - raises if missing discriminator raises if missing discriminator - raises if unknown discriminator value raises if unknown discriminator value - deserializes with discriminator deserializes with discriminator - deserializes type which nests type with discriminator (#9849) deserializes type which nests type with discriminator (#9849) - deserializes with discriminator, strict recursive type deserializes with discriminator, strict recursive type - empty class empty class - outputs with converter when nilable when emit_null is true outputs with converter when nilable when emit_null is true - parses person with unknown attributes parses person with unknown attributes - work with module and inheritance + clears after shift clears after shift + reject with non-equality key reject with non-equality key + has_key? + doesn't have key doesn't have key + has key has key + some edge cases while changing the implementation to open addressing + edge case 1 edge case 1 + edge case 2 edge case 2 + edge case 3 edge case 3 + merges! with block and nilable keys merges! with block and nilable keys + gets nilable gets nilable + []= + overrides value overrides value + reject with non-equality key reject with non-equality key + reject! assert assert assert assert assert assert + changes current hash changes current hash assert assert - does to_yaml does to_yaml - allows small types of integer allows small types of integer - allows setting a nilable property to nil allows setting a nilable property to nil - works with class with three fields works with class with three fields - doesn't emit null when doing to_yaml doesn't emit null when doing to_yaml - parses recursive hash parses recursive hash - should to store extra fields (YAMLAttrPersonExtraFields with on_to_yaml) should to store extra fields (YAMLAttrPersonExtraFields with on_to_yaml) - parses array of people with merge parses array of people with merge - parses yaml with Time::Format converter parses yaml with Time::Format converter - works with record works with record -raise - should set exception's callstack should set exception's callstack - shouldn't overwrite the callstack on re-raise shouldn't overwrite the callstack on re-raise -CSV - gets current row gets current row - gets row values with integer gets row values with integer - returns a Tuple(String, String) for current row with indices returns a Tuple(String, String) for current row with indices - returns a Tuple(String, String) for this row with headers returns a Tuple(String, String) for this row with headers - gets row values with regex gets row values with regex - gets headers gets headers - gets row values with string gets row values with string - strips strips - works without headers works without headers - rewind - string based - with headers with headers - without headers without headers - IO based - with headers with headers - without headers without headers - works without headers works without headers - raises if trying to access before first row raises if trying to access before first row - returns a Tuple(String, String) for this row with indices returns a Tuple(String, String) for this row with indices - returns a Tuple(String, String) for current row with headers returns a Tuple(String, String) for current row with headers - can do each can do each - can do new with block can do new with block -HTTP::FormData::Parser - parses formdata parses formdata -Time::Format - parses 24h clock with am/pm parses 24h clock with am/pm - parses milliseconds with %3N parses milliseconds with %3N - parses zone name parses zone name - assert assert - formats rfc3339 with different fraction digits formats rfc3339 with different fraction digits - parses the correct amount of digits (#853) parses the correct amount of digits (#853) - parses 24h clock parses 24h clock - formats formats - parses nanoseconds with %9N parses nanoseconds with %9N - parses empty parses empty - assert assert - assert assert - parses milliseconds with %L parses milliseconds with %L - parses microseconds with %6N parses microseconds with %6N - assert assert - parses month blank padded parses month blank padded - parses hour 12 blank padded parses hour 12 blank padded - parses centiseconds parses centiseconds - parses if some decimals are missing parses if some decimals are missing - gives nice error message when end of input is reached (#12047) gives nice error message when end of input is reached (#12047) - parses hour 24 blank padded parses hour 24 blank padded - parses parses - parses timezone parses timezone - parses am/pm parses am/pm - parses day of month blank padded parses day of month blank padded - assert assert - raises when time zone missing raises when time zone missing - parses discarding additional decimals parses discarding additional decimals - can parse in location can parse in location - parses nanoseconds parses nanoseconds - parses day of year parses day of year - formats standard formats formats standard formats - assert assert - parse fails without time zone parse fails without time zone -__floattisf - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + empty + size should be zero size should be zero + merges with block merges with block + does to_a after shift does to_a after shift + does to_h does to_h + shifts? shifts? + #each_with_object + "passes memo, key and value into block" yielding "passes memo, key and value into block" yielding + reduces the hash to the accumulated value of memo reduces the hash to the accumulated value of memo + "passes memo, key and value into block" iterator "passes memo, key and value into block" iterator + last_value + doesn't raise on last value (nilable value) doesn't raise on last value (nilable value) + gets last value gets last value + raises on last value (nilable value) raises on last value (nilable value) + any? + evaluates the block for only for as many kv pairs as necessary evaluates the block for only for as many kv pairs as necessary + returns true if the block evaluates truthy for at least one kv pair returns true if the block evaluates truthy for at least one kv pair + passes key and value into block passes key and value into block + returns true if the hash contains at least one kv pair and no block is given returns true if the hash contains at least one kv pair and no block is given + first_key + gets first key gets first key + doesn't raise on first key (nilable key) doesn't raise on first key (nilable key) + raises on first key (nilable key) raises on first key (nilable key) + transforms values transforms values + update + inserts a new entry using the default value as input, if key does not exist inserts a new entry using the default value as input, if key does not exist + inserts a new entry using the value returned by the default block as input, if key does not exist (big hash) inserts a new entry using the value returned by the default block as input, if key does not exist (big hash) + can update with a nil value can update with a nil value + returns the default value when key does not exist returns the default value when key does not exist + raises if key does not exist and no default value specified (big hash) raises if key does not exist and no default value specified (big hash) + doesn't create a duplicate key, if key does not exist and default block adds the given key (#14416) doesn't create a duplicate key, if key does not exist and default block adds the given key (#14416) + updates the value of an existing key with the given block updates the value of an existing key with the given block + inserts a new entry using the default value as input, if key does not exist (big hash) inserts a new entry using the default value as input, if key does not exist (big hash) + returns the old value when key exists returns the old value when key exists + updates the value of an existing key with the given block (big hash) updates the value of an existing key with the given block (big hash) + can update a current nil value with a new value can update a current nil value with a new value + returns the old value when key exists (big hash) returns the old value when key exists (big hash) + returns the default value when key does not exist (big hash) returns the default value when key does not exist (big hash) + inserts a new entry using the value returned by the default block as input, if key does not exist inserts a new entry using the value returned by the default block as input, if key does not exist + raises if key does not exist and no default value specified raises if key does not exist and no default value specified + "#each_value" iterator "#each_value" iterator + dup + dups empty hash dups empty hash + retains default block on dup retains default block on dup + dups small hash dups small hash + dups big hash dups big hash + reduce + reduces the hash to the accumulated value of memo reduces the hash to the accumulated value of memo + passes memo, key and value into block passes memo, key and value into block + select with non-equality key select with non-equality key + doesn't generate a negative index for the bucket index (#2321) doesn't generate a negative index for the bucket index (#2321) + can be wrapped can be wrapped + creates with initial capacity and default value creates with initial capacity and default value + shifts shifts + dig? + gets the value at given path given splat gets the value at given path given splat + returns nil if not found returns nil if not found + selects! selects! + values_at + works with mixed types works with mixed types + raises when passed an invalid key raises when passed an invalid key + returns the given keys returns the given keys + shifts: delete elements in the middle position and then in the first position shifts: delete elements in the middle position and then in the first position + "#each_with_index(offset)" iterator "#each_with_index(offset)" iterator + inverts inverts +__floatuntidf passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests @@ -23067,133 +21270,6 @@ passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests -LLVM::ABI::X86_Win64 - abi_info - does with structs larger than 128 bits does with structs larger than 128 bits - does with packed struct not containing unaligned fields does with packed struct not containing unaligned fields - does with structs between 64 and 128 bits does with structs between 64 and 128 bits - does with packed struct containing unaligned fields (#9873) does with packed struct containing unaligned fields (#9873) -Log::Builder - uses last level for a source x backend (single-backend) uses last level for a source x backend (single-backend) - removes all logs backends on .clear removes all logs backends on .clear - creates a log with broadcast backend creates a log with broadcast backend - creates a log with nil backend creates a log with nil backend - creates a log for same broadcast backend added multiple times creates a log for same broadcast backend added multiple times - returns log with backend if pattern matches returns log with backend if pattern matches - does not alter user-provided broadcast backend does not alter user-provided broadcast backend - uses last level for a source x backend uses last level for a source x backend - creates a log for broadcast backend creates a log for broadcast backend - should allow collection of unreferenced logs should allow collection of unreferenced logs - can turn off parent and allow child source can turn off parent and allow child source - .matches - avoids prefix collision avoids prefix collision - on first level on first level - on second level on second level - on third level on third level - on top-level on top-level - can reconfigures existing logs can reconfigures existing logs - should allow recreation of deallocated logs should allow recreation of deallocated logs - returns same instance returns same instance - creates a log with single backend creates a log with single backend - returns log without backend if pattern does not match returns log without backend if pattern does not match -Log - can attach exception to entries can attach exception to entries - context supports unsigned values context supports unsigned values - contains the current context contains the current context - emitter dsl - does not emit anything when a nil is emitted does not emit anything when a nil is emitted - can be used with message and data via named tuple can be used with message and data via named tuple - can be used with data only via named arguments can be used with data only via named arguments - can be used with message and data via named arguments can be used with message and data via named arguments - can be used with message and exception can be used with message and exception - can be used with message can be used with message - can be used with message and metadata explicitly can be used with message and metadata explicitly - can be used with data only via named tuple can be used with data only via named tuple - can be used with data only explicitly can be used with data only explicitly - can be used with exception can be used with exception - level can be changed level can be changed - filter messages to the backend above level only filter messages to the backend above level only - context can be changed within the block, yet it's not restored context can be changed within the block, yet it's not restored - Log::Severity - parses parses - values are ordered values are ordered -UNIXSocket - raises when path is too long raises when path is too long - creates a pair of sockets creates a pair of sockets - sends and receives messages sends and receives messages - tests read and write timeouts tests read and write timeouts - sync flag after accept sync flag after accept - tests socket options tests socket options -Set - checks intersects checks intersects - does - does - - add? - returns false when object is in the set returns false when object is in the set - returns true when object is not in the set returns true when object is not in the set - does to_s does to_s - does each does each - concat - returns self returns self - adds all the other elements adds all the other elements - does subtract does subtract - does ^ does ^ - does subtract does subtract - "#each" yielding "#each" yielding - has object_id has object_id - "#each" iterator "#each" iterator - does - does - - does to_a does to_a - does subtract does subtract - does - does - - does ^ does ^ - clone - creates a clone creates a clone - does - does - - new - creates new set with enumerable without block creates new set with enumerable without block - does support giving a block to to_a does support giving a block to to_a - does ^ does ^ - compare_by_identity - retains compare_by_identity on clone retains compare_by_identity on clone - compares by identity compares by identity - retains compare_by_identity on dup retains compare_by_identity on dup - does - does - - #subset_of? #subset_of? - #proper_superset_of? #proper_superset_of? - #proper_subset_of? #proper_subset_of? - dup - creates a dup creates a dup - does subtract does subtract - does subtract does subtract - does ^ does ^ - does clear does clear - == - compares two sets compares two sets - does subtract does subtract - an empty set - has size 0 has size 0 - is empty is empty - does ^ does ^ - aliases + to | aliases + to | - delete - returns true when the object was present returns true when the object was present - returns false when the object was absent returns false when the object was absent - deletes an object deletes an object - compares hashes of sets compares hashes of sets - does ^ does ^ - #rehash - rehashes rehashes - does | does | - does - does - - add - adds and includes adds and includes - returns self returns self - does & does & - #superset_of? #superset_of? -SystemError - .from_os_error - Can build an error from an errno Can build an error from an errno -__mulodi4 passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests @@ -23236,6 +21312,101 @@ passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests +Float::Printer::RyuPrintf + .d2gen + Basic Basic + large precision with fixed notation and scientific notation large precision with fixed notation and scientific notation + UCRT had trouble with rounding this value UCRT had trouble with rounding this value + corner cases corner cases + transitions between fixed notation and scientific notation transitions between fixed notation and scientific notation + varying precision varying precision + trim trailing zeros and decimal point, scientific notation trim trailing zeros and decimal point, scientific notation + tricky corner cases tricky corner cases + more cases that the UCRT had trouble with (e.g. DevCom-1093399) more cases that the UCRT had trouble with (e.g. DevCom-1093399) + transitions between values of the scientific exponent X transitions between values of the scientific exponent X + maximum-length output maximum-length output + trim trailing zeros trim trailing zeros + trim trailing zeros and decimal point trim trailing zeros and decimal point + trim trailing zeros, scientific notation trim trailing zeros, scientific notation + .d2exp + Exponents Exponents + RoundToEven RoundToEven + Carrying Carrying + AllBinaryExponents AllBinaryExponents + MinMax MinMax + PrintDecimalPoint PrintDecimalPoint + RoundToEvenInteger RoundToEvenInteger + Basic Basic + AllPowersOfTen AllPowersOfTen + NonRoundToEvenScenarios NonRoundToEvenScenarios + Zero Zero + VaryingPrecision VaryingPrecision + .d2fixed + MinMax MinMax + Carrying Carrying + AllBinaryExponents AllBinaryExponents + RoundToEven RoundToEven + AllPowersOfTen AllPowersOfTen + NonRoundToEvenScenarios NonRoundToEvenScenarios + Zero Zero + VaryingPrecision VaryingPrecision + Basic Basic + RoundingResultZero RoundingResultZero + Regression Regression + RoundToEvenInteger RoundToEvenInteger +OAuth::RequestToken + creates from response creates from response + equality + checks secret checks secret + checks token checks token +HTTP + generates HTTP date + without time zone without time zone + with local time zone with local time zone + parses RFC 1123 parses RFC 1123 + parses RFC 1036 parses RFC 1036 + .dequote_string + dequotes a string dequotes a string + parses and is UTC (#2744) parses and is UTC (#2744) + parses ANSI C parses ANSI C + parses and is local (#2744) parses and is local (#2744) + parses RFC 1123 without day name parses RFC 1123 without day name + .quote_string + raises on invalid characters raises on invalid characters + quotes a string quotes a string +Spec + hooks + runs in correct order runs in correct order +Float64 boundaries + boundaries max denormal f64 boundaries max denormal f64 + boundaries 1.0 boundaries 1.0 + boundaries min normal f64 boundaries min normal f64 + boundaries min float64 boundaries min float64 + boundaries 1.5 boundaries 1.5 + boundaries max f64 boundaries max f64 +Digest::Adler32 + .dup + preserves value preserves value + leads to deterministic updates leads to deterministic updates + leads to not sharing state leads to not sharing state + preserves type preserves type + can take a block can take a block + calculates hash of #to_slice calculates hash of #to_slice + context are independent context are independent + #hexdigest can update within a loop from explicit expr (#9483) #hexdigest can update within a loop from explicit expr (#9483) + can't call final twice can't call final twice + #hexdigest can update within a loop by indirect expr (#9483) #hexdigest can update within a loop by indirect expr (#9483) + calculates hash from UInt8 slices calculates hash from UInt8 slices + calculates digest from string calculates digest from string + should be able to calculate adler32 combined should be able to calculate adler32 combined + calculates base64'd hash from string calculates base64'd hash from string + digest with file content digest with file content + return the digest size return the digest size + resets resets + calculates hash from unicode string calculates hash from unicode string + calculates hash from string calculates hash from string + should be able to calculate adler32 should be able to calculate adler32 +__fixsfti passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests @@ -23259,2532 +21430,404 @@ passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests -Comparable(T) - can compare against Int (#2461) can compare against Int (#2461) - clamp - number - fails with an exclusive range fails with an exclusive range - clamps integers clamps integers - clamps floats clamps floats - String - clamps strings clamps strings - checks for nil checks for nil -YAML::Schema::FailSafe - parses all "\n foo:\n bar: 123\n\n bar:\n foo: 321\n " parses all "\n foo:\n bar: 123\n\n bar:\n foo: 321\n " - parses all "\n context:\n replace_me: \"Yes please!\"\n " parses all "\n context:\n replace_me: \"Yes please!\"\n " - raises on parse all ":" raises on parse all ":" - parses "321" parses "321" - parses "\n first:\n document:\n\n second:\n document:\n " parses "\n first:\n document:\n\n second:\n document:\n " - raises on parse ":" raises on parse ":" - raises on parse "\n this: \"gives\"\n an: \"error\"\n " raises on parse "\n this: \"gives\"\n an: \"error\"\n " - parses "\n context:\n replace_me: \"Yes please!\"\n " parses "\n context:\n replace_me: \"Yes please!\"\n " - raises on parse all "\n this: \"raises\"\n an: \"yaml\"\n parse: \"exception\"\n " raises on parse all "\n this: \"raises\"\n an: \"yaml\"\n parse: \"exception\"\n " - parses "123" parses "123" -p - can be used with tuples can be used with tuples -Crystal::System::File - .mktemp - creates random file name creates random file name - raises when no valid path is found raises when no valid path is found - retries when file exists retries when file exists -HTTP::Cookie::Parser - parse_cookies - parses special character in name parses special character in name - parses key=key%3Dvalue parses key=key%3Dvalue - parses multiple cookies parses multiple cookies - parses key=key=value parses key=key=value - parses key="value" parses key="value" - parses key=value parses key=value - parses cookie with spaces in value parses cookie with spaces in value - strips spaces around value only when it's unquoted strips spaces around value only when it's unquoted - parses key= parses key= - expired? - not expired when max-age and expires are not provided not expired when max-age and expires are not provided - expired when max-age=0 expired when max-age=0 - not expired with future expires not expired with future expires - not expired with future max-age not expired with future max-age - expired with old expires date expired with old expires date - expiration_time - sets future expiration_time with expires sets future expiration_time with expires - sets expiration_time with old date sets expiration_time with old date - sets future expiration_time with max-age and future cookie creation time sets future expiration_time with max-age and future cookie creation time - sets future expiration_time with max-age sets future expiration_time with max-age - sets expiration_time to be current when max-age=0 sets expiration_time to be current when max-age=0 - returns nil expiration_time when expires and max-age are not set returns nil expiration_time when expires and max-age are not set - parse_set_cookie - parses path parses path - leading dots in domain names are ignored leading dots in domain names are ignored - parses expires rfc1123 parses expires rfc1123 - SameSite - Strict - parses samesite parses samesite - Lax - parses samesite parses samesite - Invalid - parses samesite parses samesite - parses Secure parses Secure - parses expires rfc1036 parses expires rfc1036 - parses expires iis parses expires iis - parses HttpOnly parses HttpOnly - parses expires ansi c parses expires ansi c - parse domain as IP parse domain as IP - parses cookie with spaces in value parses cookie with spaces in value - parses full parses full - with space with space - removes leading and trailing whitespaces removes leading and trailing whitespaces - parse max-age as Time::Span parse max-age as Time::Span - parses expires ansi c, variant with zone parses expires ansi c, variant with zone - strips spaces around value only when it's unquoted strips spaces around value only when it's unquoted - parses domain parses domain -LLVM::ABI::ARM - abi_info - does with structs between 64 and 128 bits does with structs between 64 and 128 bits - does with primitives does with primitives - does with structs less than 64 bits does with structs less than 64 bits - does with structs between 64 and 128 bits does with structs between 64 and 128 bits - size - for packed struct for packed struct - for float for float - for struct for struct - for array for array - for integer for integer - for double for double - for pointer for pointer - align - for packed struct for packed struct - for double for double - for array for array - for pointer for pointer - for float for float - for integer for integer - for struct for struct -Class - casts, allowing the class to be passed in at runtime casts, allowing the class to be passed in at runtime - does to_s with name redefined (#7292) does to_s with name redefined (#7292) - clones clones - does === does === - does to_s does to_s - comparison operators - <= <= - >= >= - > > - < < - #nilable? #nilable? - dups dups - does | does | -Digest::SHA256 +Crystal::Digest::MD5 #hexdigest can update within a loop from explicit expr (#9483) #hexdigest can update within a loop from explicit expr (#9483) - does digest for "a" does digest for "a" - resets resets - does base64digest for "The quick brown fox jumps over the lazy dog" does base64digest for "The quick brown fox jumps over the lazy dog" - does hexdigest for "fooø" does hexdigest for "fooø" - does base64digest for "a" does base64digest for "a" - does base64digest for "abc" does base64digest for "abc" - does digest for "abc" in a block does digest for "abc" in a block - can't call #final more than once can't call #final more than once - resets resets - does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block - does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" - does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567" does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567" - context are independent context are independent - can't call #final more than once can't call #final more than once - does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" - resets resets - resets resets - does digest for "abc" does digest for "abc" - does digest for "" does digest for "" - does hexdigest for "abc" does hexdigest for "abc" - does base64digest for "fooø" does base64digest for "fooø" - does hexdigest for "a" does hexdigest for "a" - returns the digest_size returns the digest_size - digest with file content digest with file content - does digest for "0123456701234567012345670123456701234567012345670123456701234567" does digest for "0123456701234567012345670123456701234567012345670123456701234567" - does digest for "The quick brown fox jumps over the lazy dog" in a block does digest for "The quick brown fox jumps over the lazy dog" in a block #hexdigest can update within a loop by indirect expr (#9483) #hexdigest can update within a loop by indirect expr (#9483) - resets resets - can't call #final more than once can't call #final more than once - does base64digest for "" does base64digest for "" - does digest for "fooø" does digest for "fooø" - can't call #final more than once can't call #final more than once - does digest for "The quick brown fox jumps over the lazy dog" does digest for "The quick brown fox jumps over the lazy dog" - does hexdigest for "" does hexdigest for "" - does hexdigest for "The quick brown fox jumps over the lazy dog" does hexdigest for "The quick brown fox jumps over the lazy dog" - does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block + calculates hash from unicode string calculates hash from unicode string + calculates base64'd hash from string calculates base64'd hash from string .dup - leads to not sharing state leads to not sharing state - preserves type preserves type leads to deterministic updates leads to deterministic updates preserves value preserves value - can't call #final more than once can't call #final more than once - resets resets - does digest for "" in a block does digest for "" in a block - can't call #final more than once can't call #final more than once - does digest for "a" in a block does digest for "a" in a block - does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" - can't call #final more than once can't call #final more than once - resets resets - does base64digest for "0123456701234567012345670123456701234567012345670123456701234567" does base64digest for "0123456701234567012345670123456701234567012345670123456701234567" - does digest for "fooø" in a block does digest for "fooø" in a block -Benchmark::IPS::Job - works in general / integration test works in general / integration test -Socket::IPAddress - #address #address - .valid_v6? .valid_v6? - .v4 - raises on out of bound port number raises on out of bound port number - raises on out of bound field raises on out of bound field - constructs an IPv4 address constructs an IPv4 address - constructs from StaticArray constructs from StaticArray - .valid? .valid? - .parse_v4_fields? - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - won't resolve domains won't resolve domains - #unspecified? #unspecified? - #to_s #to_s - #== #== - .v6 - constructs from StaticArray constructs from StaticArray - raises on out of bound field raises on out of bound field - raises on out of bound port number raises on out of bound port number - constructs an IPv6 address constructs an IPv6 address - errors on out of range port numbers errors on out of range port numbers - transforms an IPv6 address into a C struct and back transforms an IPv6 address into a C struct and back - #link_local? #link_local? - .parse_v6_fields? - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - #private? #private? - .v4_mapped_v6 - constructs from StaticArray constructs from StaticArray - raises on out of bound port number raises on out of bound port number - constructs an IPv4-mapped IPv6 address constructs an IPv4-mapped IPv6 address - raises on out of bound field raises on out of bound field - .valid_v4? .valid_v4? - #loopback? #loopback? - transforms an IPv4 address into a C struct and back transforms an IPv4 address into a C struct and back - .parse - fails with missing port fails with missing port - parses IPv6 parses IPv6 - fails with missing host fails with missing host - ignores path and params ignores path and params - parses IPv4 parses IPv4 - fails host name fails host name - .valid_port? .valid_port? -MIME::Multipart - .parse_boundary - parses quoted boundaries parses quoted boundaries - parses unquoted boundaries parses unquoted boundaries - .parse - parses multipart messages parses multipart messages - .parse - parses multipart messages parses multipart messages - parses multipart messages from HTTP client responses parses multipart messages from HTTP client responses -Random::Secure - returns a random integer in range (#8219) returns a random integer in range (#8219) - fully fills a large buffer fully fills a large buffer - returns random number from a secure system source returns random number from a secure system source -Digest::SHA512 - does #hexdigest for "abc" does #hexdigest for "abc" - does .hexdigest for "0123456701234567012345670123456701234567012345670123456701234567" does .hexdigest for "0123456701234567012345670123456701234567012345670123456701234567" - returns the digest_size returns the digest_size - does base64digest for "The quick brown fox jumps over the lazy dog" does base64digest for "The quick brown fox jumps over the lazy dog" - can't call #final more than once can't call #final more than once - does base64digest for "abc" does base64digest for "abc" - does .hexdigest for "abc" does .hexdigest for "abc" - resets resets - does digest for "" does digest for "" - can't call #final more than once can't call #final more than once - resets resets - context are independent context are independent - can't call #final more than once can't call #final more than once - does digest for "fooø" does digest for "fooø" - does digest for "The quick brown fox jumps over the lazy dog" does digest for "The quick brown fox jumps over the lazy dog" - does .hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does .hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" - does #hexdigest for "0123456701234567012345670123456701234567012345670123456701234567" does #hexdigest for "0123456701234567012345670123456701234567012345670123456701234567" - does #hexdigest for "" does #hexdigest for "" - does base64digest for "a" does base64digest for "a" - can't call #final more than once can't call #final more than once - does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" - does digest for "a" does digest for "a" - #hexdigest can update within a loop by indirect expr (#9483) #hexdigest can update within a loop by indirect expr (#9483) - digest with file content digest with file content - does .hexdigest for "a" does .hexdigest for "a" - does digest for "abc" in a block does digest for "abc" in a block - does .hexdigest for "The quick brown fox jumps over the lazy dog" does .hexdigest for "The quick brown fox jumps over the lazy dog" - does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block - does #hexdigest for "a" does #hexdigest for "a" - does #hexdigest for "fooø" does #hexdigest for "fooø" - resets resets - can't call #final more than once can't call #final more than once - does digest for "0123456701234567012345670123456701234567012345670123456701234567" does digest for "0123456701234567012345670123456701234567012345670123456701234567" - #hexdigest can update within a loop from explicit expr (#9483) #hexdigest can update within a loop from explicit expr (#9483) - does digest for "abc" does digest for "abc" - can't call #final more than once can't call #final more than once - does base64digest for "" does base64digest for "" - does .hexdigest for "" does .hexdigest for "" - does #hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does #hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" - does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block - does digest for "" in a block does digest for "" in a block - does digest for "a" in a block does digest for "a" in a block - resets resets - does #hexdigest for "The quick brown fox jumps over the lazy dog" does #hexdigest for "The quick brown fox jumps over the lazy dog" - .dup - leads to deterministic updates leads to deterministic updates leads to not sharing state leads to not sharing state - preserves value preserves value preserves type preserves type - does .hexdigest for "fooø" does .hexdigest for "fooø" - can't call #final more than once can't call #final more than once - does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" - resets resets - does base64digest for "fooø" does base64digest for "fooø" - resets resets - does digest for "fooø" in a block does digest for "fooø" in a block - does base64digest for "0123456701234567012345670123456701234567012345670123456701234567" does base64digest for "0123456701234567012345670123456701234567012345670123456701234567" - does digest for "The quick brown fox jumps over the lazy dog" in a block does digest for "The quick brown fox jumps over the lazy dog" in a block + calculates hash from UInt8 slices calculates hash from UInt8 slices + context are independent context are independent + can't call final twice can't call final twice + digest with file content digest with file content + can take a block can take a block + calculates hash from string calculates hash from string + calculates hash of #to_slice calculates hash of #to_slice + return the digest size return the digest size + calculates digest from string calculates digest from string resets resets -URI - .encode_path_segment .encode_path_segment - #normalize - prefixes relative path with colon with `./` prefixes relative path with colon with `./` - doesn't modify instance doesn't modify instance - normalizes scheme normalizes scheme - removes default port removes default port - removes dot notation from path removes dot notation from path - normalizes host normalizes host - #== - assert assert - #update_query_params - commits changes to the URI::Object commits changes to the URI::Object - returns self returns self - #resolve - ... ... - removes dot-segments removes dot-segments - relative base relative base - path-absolute URI references path-absolute URI references - absolute URI references absolute URI references - Extras Extras - scheme-relative scheme-relative - path relative references path relative references - RFC 3986: 5.4.2. Abnormal Examples RFC 3986: 5.4.2. Abnormal Examples - fragment fragment - RFC 3986: 5.4.1. Normal Examples RFC 3986: 5.4.1. Normal Examples - encoded characters encoded characters - opaque URIs opaque URIs - multiple slashes multiple slashes - #request_target - assert assert - assert assert - does not add '?' to the end if the query params are empty does not add '?' to the end if the query params are empty - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert +Time::Location::Zone + #inspect #inspect + #name #name +URI::Params::Serializable + .from_www_form + nested type + doubly nested doubly nested + missing required nested property missing required nested property + missing nilable nested data missing nilable nested data + happy path happy path + with nilable values with nilable values + with default values with default values + simple type simple type + child type child type + with custom converter with custom converter + with nilable default with nilable default + missing required property missing required property + #to_www_form + nested type path nested type path + doubly nested doubly nested + simple type simple type +UDPSocket + #connect with a IPv6 address #connect with a IPv6 address + #remote_address resets after connect #remote_address resets after connect + sends broadcast message sends broadcast message + using IPv6 + #bind #bind + joins and transmits to multicast groups joins and transmits to multicast groups + sends and receives messages sends and receives messages + using IPv4 + sends and receives messages sends and receives messages + joins and transmits to multicast groups joins and transmits to multicast groups + #bind #bind +Compress::Zip + reads big file reads big file + reads zip file with different extra in local file header and central directory header reads zip file with different extra in local file header and central directory header + writes comment writes comment + reads file from file system reads file from file system + writes over int16 files to make sure we can parse writes over int16 files to make sure we can parse + reads zip comment reads zip comment + reads file from memory reads file from memory +Signal + CHLD.trap is called after default Crystal child handler CHLD.trap is called after default Crystal child handler + CHLD.reset sets default Crystal child handler CHLD.reset sets default Crystal child handler + runs a signal handler runs a signal handler + ignores a signal ignores a signal + CHLD.ignore sets default Crystal child handler CHLD.ignore sets default Crystal child handler + CHLD.reset removes previously set trap CHLD.reset removes previously set trap + has constants required by C has constants required by C + allows chaining of signals allows chaining of signals +Math + Mathematical constants + E E + LOG2 LOG2 + LOG10 LOG10 + Order-related functions assert assert assert assert - .encode_path .encode_path + fma fma + Inverse trigonometric functions + asin asin + atan2 atan2 + atan atan + acos acos + Roots + cbrt cbrt + isqrt isqrt + sqrt sqrt + .pw2ceil + Int8 Int8 + UInt64 UInt64 + Int16 Int16 + UInt128 UInt128 + UInt32 UInt32 + Int32 Int32 + UInt16 UInt16 + Int64 Int64 + Int128 Int128 + UInt8 UInt8 + Exponents + scalbln scalbln + scalbn scalbn + ilogb ilogb + expm1 expm1 + logb logb + ldexp ldexp + exp2 exp2 + frexp frexp + exp exp + Functions for computing quotient and remainder Functions for computing quotient and remainder + Bessel functions + bessely0 bessely0 + besselj0 besselj0 + bessely bessely + besselj besselj + besselj1 besselj1 + bessely1 bessely1 + Gauss error functions + erf erf + erfc erfc + Functions manipulating signs + copysign copysign + Hyperbolic functions + sinh sinh + tanh tanh + cosh cosh + Inverse hyperbolic functions + atanh atanh + acosh acosh + asinh asinh + Trigonometric functions + tan tan + hypot hypot + sin sin + cos cos + Gamma functions + gamma gamma + lgamma lgamma + Logarithms + log1p log1p + log log + log10 log10 + log2 log2 +System + hostname + returns current hostname returns current hostname + cpu_count + returns current CPU count returns current CPU count +MIME + .register + fails for invalid extension fails for invalid extension + registers new type registers new type + parses media types parses media types + .extensions + returns empty set returns empty set + lists extensions lists extensions + recognizes overridden types recognizes overridden types + .load_mime_database .load_mime_database + .from_extension .from_extension + .from_filename + Path Path + String String + .init + loads defaults loads defaults + skips loading defaults skips loading defaults + loads file loads file + .from_filename? + Path Path + String String + .from_extension? .from_extension? +OAuth2::AccessToken::Mac + computes signature computes signature + authenticates request authenticates request + builds with null refresh token builds with null refresh token + builds from json builds from json + dumps to json dumps to json +HTTP::FormData + .parse(IO, String) + parses formdata parses formdata + .parse(HTTP::Request) + raises on invalid Content-Type raises on invalid Content-Type + raises on empty body raises on empty body + raises on no Content-Type raises on no Content-Type + parses formdata parses formdata + .parse_content_disposition(String) + parses all Content-Disposition fields parses all Content-Disposition fields + .build(HTTP::Server::Response, String) + builds a message builds a message + .build(IO, String) + builds a message builds a message +IO::Hexdump + read + prints hexdump prints hexdump + write + prints hexdump prints hexdump +grisu3 + float32 + largest denormal largest denormal + large number, rounding large number, rounding + smallest normal smallest normal + general whole number, rounding general whole number, rounding + general with rounding down general with rounding down + general with rounding up general with rounding up + general whole number, rounding general whole number, rounding + min min + small number small number + max max + general no rounding general no rounding + float64 + largest denormal largest denormal + max float max float + min float min float + small number small number + point at end point at end + smallest normal smallest normal + failure case failure case + another no point move another no point move + large number large number +Thread::Mutex + synchronizes synchronizes + won't lock recursively won't lock recursively + won't unlock from another thread won't unlock from another thread +JSON::Any + can compare with === can compare with === + .new .new + dig + gets the value at given path given splat gets the value at given path given splat + raises if not found raises if not found + casts + gets nil gets nil + gets int64 gets int64 + gets float32 gets float32 + gets hash gets hash + gets float32 from JSON integer (#8618) gets float32 from JSON integer (#8618) + gets float64 gets float64 + gets float64 from JSON integer (#8618) gets float64 from JSON integer (#8618) + gets int32 gets int32 + gets array gets array + gets bool gets bool + gets string gets string + dups dups #to_yaml #to_yaml - .reserved? .reserved? - .new - with query params with query params - #query_params= - empty empty - params with values params with values - #relative? - assert assert - #authority - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - .unwrap_ipv6 .unwrap_ipv6 - .unreserved? .unreserved? - .parse - `https://alice:pa55w0rd@www.example.com` `https://alice:pa55w0rd@www.example.com` - `//user@foo/path?q=b` `//user@foo/path?q=b` - `?q=1` `?q=1` - `http://www.example.com/foo` `http://www.example.com/foo` - `http://[::1]:81` `http://[::1]:81` - `ldap://[2001:db8::7]/c=GB?objectClass?one` `ldap://[2001:db8::7]/c=GB?objectClass?one` - `http://[::1]:81/` `http://[::1]:81/` - `http://user@/foo` `http://user@/foo` - assert assert - `http:..` `http:..` - assert assert - `magnet:?xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a&dn` `magnet:?xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a&dn` - `https://example.com.:8443/` `https://example.com.:8443/` - `http://www.example.com` `http://www.example.com` - bad urls - assert assert - `http://` `http://` - `news:comp.infosystems.www.servers.unix` `news:comp.infosystems.www.servers.unix` - `http://www.foo-bar.example.com` `http://www.foo-bar.example.com` - `//foo` `//foo` - `http://#` `http://#` - unescaped @ in user/password should not confuse host unescaped @ in user/password should not confuse host - `?a+b=c%2Bd` `?a+b=c%2Bd` - `http://user:pass@bitfission.com:8080/path?a=b#frag` `http://user:pass@bitfission.com:8080/path?a=b#frag` - `foo/another@url/[]and{}` `foo/another@url/[]and{}` - `https://www.example.com/#top` `https://www.example.com/#top` - `mailto:foo@example.org` `mailto:foo@example.org` - `test:/test` `test:/test` - `http:` `http:` - `https://%3AD:%40_%40@www.example.com` `https://%3AD:%40_%40@www.example.com` - `https://example.com./` `https://example.com./` - `http://host/!$&'()*+,;=:@[hello]` `http://host/!$&'()*+,;=:@[hello]` - assert assert - `http://:8000` `http://:8000` - `http:?#` `http:?#` - `file:///C:/FooBar/Baz.txt` `file:///C:/FooBar/Baz.txt` - `http://www.example.com:81` `http://www.example.com:81` - `https://alice@www.example.com` `https://alice@www.example.com` - `http://www.example.com:81/` `http://www.example.com:81/` - `urn:oasis:names:specification:docbook:dtd:xml:4.1.2` `urn:oasis:names:specification:docbook:dtd:xml:4.1.2` - `http:` `http:` - `http:.` `http:.` - `http:?` `http:?` - `/path?a=b#frag` `/path?a=b#frag` - `mysql://a,b,c/bar` `mysql://a,b,c/bar` - `http:#` `http:#` - `tcp://[2020::2020:20:2020:2020%25Windows%20Loves%20Spaces]:2020` `tcp://[2020::2020:20:2020:2020%25Windows%20Loves%20Spaces]:2020` - `http://192.0.2.16:81` `http://192.0.2.16:81` + traverses big structure traverses big structure + #dig? + returns nil if not found returns nil if not found + returns nil for non-Hash/Array intermediary values returns nil for non-Hash/Array intermediary values + gets the value at given path given splat gets the value at given path given splat + #size + of hash of hash + of array of array + #[] + of array of array + of hash of hash + clones clones + #[]? + of hash of hash + of array of array + compares to other objects compares to other objects + exposes $~ when doing Regex#=== exposes $~ when doing Regex#=== +Int + #humanize_bytes assert assert - `http://www.example.com/` `http://www.example.com/` - `tel:+1-816-555-1212` `tel:+1-816-555-1212` - `file:///etc/fstab` `file:///etc/fstab` - `http://www.example.com/foo?` `http://www.example.com/foo?` - `?query=http://example.com` `?query=http://example.com` - `http://www.example.com/foo?q=1` `http://www.example.com/foo?q=1` - `http://example.com//foo` `http://example.com//foo` - `http://:8000/foo` `http://:8000/foo` - `http://192.0.2.16:81/` `http://192.0.2.16:81/` - `scheme://!$&'()*+,;=hello!:12/path` `scheme://!$&'()*+,;=hello!:12/path` - `//user:pass@bitfission.com:8080/path?a=b#frag` `//user:pass@bitfission.com:8080/path?a=b#frag` - `https://alice:@www.example.com` `https://alice:@www.example.com` - `?q=1?` `?q=1?` - `http://user@` `http://user@` - `telnet://192.0.2.16:80/` `telnet://192.0.2.16:80/` - `/foo?q=1` `/foo?q=1` - `http://?#` `http://?#` - `file://localhost/etc/fstab` `file://localhost/etc/fstab` - `http:example.com/?q=foo` `http:example.com/?q=foo` - `http://[fe80::1%25en0]:8080/` `http://[fe80::1%25en0]:8080/` - `/foo` `/foo` - `///foo` `///foo` - `http://?` `http://?` - #userinfo assert assert assert assert assert assert assert assert - #normalize! - modifies the instance modifies the instance - .from_yaml .from_yaml - .from_json .from_json - #absolute? assert assert assert assert assert assert assert assert assert assert assert assert - .encode_www_form - encodes "" encodes "" - encodes "a b+" encodes "a b+" - encodes "abc" encodes "abc" - encodes " ?&=#+%!<>#\"{}|\\^[]`☺\t:/@$'()*,;" encodes " ?&=#+%!<>#\"{}|\\^[]`☺\t:/@$'()*,;" - encodes "* foo=bar baz&hello/" encodes "* foo=bar baz&hello/" - encodes "a b+" encodes "a b+" - encodes "1%41" encodes "1%41" - encodes "10%" encodes "10%" - #hostname assert assert assert assert assert assert - .set_default_port - unregisters port for scheme unregisters port for scheme - treats scheme case insensitively treats scheme case insensitively - registers port for scheme registers port for scheme - #to_json #to_json - #opaque? assert assert assert assert assert assert assert assert assert assert assert assert - #query_params - when there is no query parameters - returns an empty instance of URI::Params returns an empty instance of URI::Params - returns a URI::Params instance based on the query parameters returns a URI::Params instance based on the query parameters - #hash assert assert - .default_port - returns nil for unknown schemes returns nil for unknown schemes - treats scheme case insensitively treats scheme case insensitively - returns default port for well known schemes returns default port for well known schemes - .decode_www_form - encodes "hello+" encodes "hello+" - encodes "hello+world" encodes "hello+world" - decodes "123%45%6" decodes "123%45%6" - decodes "" decodes "" - decodes "%4a" decodes "%4a" - decodes "+%2B %20" decodes "+%2B %20" - decodes "abc" decodes "abc" - decodes "%20%3F%26%3D%23%2B%25%21%3C%3E%23%22%7B%7D%7C%5C%5E%5B%5D%60%E2%98%BA%09%3A%2F%40%24%27%28%29%2A%2C%3B" decodes "%20%3F%26%3D%23%2B%25%21%3C%3E%23%22%7B%7D%7C%5C%5E%5B%5D%60%E2%98%BA%09%3A%2F%40%24%27%28%29%2A%2C%3B" - decodes "1%41" decodes "1%41" - decodes "a+b" decodes "a+b" - encodes "hello%2+world" encodes "hello%2+world" - decodes "%1" decodes "%1" - decodes "%" decodes "%" - decodes "a%20b" decodes "a%20b" - decodes "1%41%42%43" decodes "1%41%42%43" - decodes "%zzzzz" decodes "%zzzzz" - encodes "'Stop!' said Fred" encodes "'Stop!' said Fred" - #relativize - opaque base opaque base - identical identical - ... ... - relative base relative base - encoded characters encoded characters - absolute URI references absolute URI references - RFC 3986: 5.4.2. Abnormal Examples RFC 3986: 5.4.2. Abnormal Examples - ignore base path with dot-segments ignore base path with dot-segments - RFC 3986: 5.4.1. Normal Examples RFC 3986: 5.4.1. Normal Examples - fragment fragment - path relative references path relative references - .decode - decodes "hello%20world" decodes "hello%20world" - decodes "hello%2Bworld" decodes "hello%2Bworld" - decodes "hello%" decodes "hello%" - decodes "%27Stop%21%27+said+Fred" decodes "%27Stop%21%27+said+Fred" - decodes "hello+world" decodes "hello+world" - decodes "hello+world" decodes "hello+world" - decodes "hello%2%2Bworld" decodes "hello%2%2Bworld" - decodes "hello%2" decodes "hello%2" - decodes "hello" decodes "hello" - decodes "%E3%81%AA%E3%81%AA" decodes "%E3%81%AA%E3%81%AA" - decodes "hello%2B" decodes "hello%2B" - does not decode string when block returns true does not decode string when block returns true - decodes "%e3%81%aa%e3%81%aa" decodes "%e3%81%aa%e3%81%aa" - decodes "+%2B %20" decodes "+%2B %20" - .encode - encodes "hello world" encodes "hello world" - encodes "なな" encodes "なな" - encodes "hello%" encodes "hello%" - encodes "hello world" encodes "hello world" - encodes "hello+world" encodes "hello+world" - does not encode character when block returns true does not encode character when block returns true - encodes "hello" encodes "hello" - encodes "'Stop!' said Fred" encodes "'Stop!' said Fred" - encodes "https://en.wikipedia.org/wiki/Crystal (programming language)" encodes "https://en.wikipedia.org/wiki/Crystal (programming language)" - encodes "hello%2" encodes "hello%2" - encodes "hello+" encodes "hello+" - encodes "\n" encodes "\n" - encodes "hello%2+world" encodes "hello%2+world" - encodes "'Stop!' said Fred" encodes "'Stop!' said Fred" - encodes "\xFF" encodes "\xFF" +BigInt Math + sqrt sqrt + pw2ceil pw2ceil + isqrt isqrt +Enum + different enums classes not eq always different enums classes not eq always + does + does + + gets value with to_i gets value with to_i #to_s - assert assert - preserves port for unknown scheme preserves port for unknown scheme - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - preserves port for nil scheme preserves port for nil scheme - preserves non-default port preserves non-default port -Log::Metadata - [] [] - extend against empty values without creating a new instance extend against empty values without creating a new instance - empty empty - == == - json json - defrags defrags - []? []? - empty? empty? - #dup - creates a shallow copy creates a shallow copy - extend extend -Spec - hooks - runs in correct order runs in correct order -HTTP::Headers - it allows indifferent access for underscore and dash separated keys it allows indifferent access for underscore and dash separated keys - doesn't match word with comma separated value, partial match (array) doesn't match word with comma separated value, partial match (array) - does to_s does to_s - clones clones - #serialize #serialize - matches word matches word - matches word with comma separated value, partial match matches word with comma separated value, partial match - is empty is empty - should retain the input casing should retain the input casing - fetches with default value fetches with default value - adds string adds string - does not matches word if missing header does not matches word if missing header - doesn't match word with comma separated value, partial match doesn't match word with comma separated value, partial match - matches word with comma separated value, partial match (array) matches word with comma separated value, partial match (array) - #== - different internal representation different internal representation - equals other instance equals other instance - case-insensitive keys case-insensitive keys - has key has key - doesn't match empty string doesn't match empty string - fetches with block fetches with block - adds array of string adds array of string - raises an error if header value contains invalid character raises an error if header value contains invalid character - can create header value with all US-ASCII visible chars (#2999) can create header value with all US-ASCII visible chars (#2999) - matches word with comma separated value matches word with comma separated value - merges and return self merges and return self - dups dups - deletes deletes - validates content validates content - is case insensitive is case insensitive - gets all values gets all values - matches word among headers matches word among headers - matches word with comma separated value, case insensitive (#3626) matches word with comma separated value, case insensitive (#3626) - is gets with []? is gets with []? -.__ashrti3 .__ashrti3 -Reference - calls #finalize on #dup'ed objects calls #finalize on #dup'ed objects - does to_s for class if virtual does to_s for class if virtual - returns itself returns itself - dups dups - does to_s does to_s - does inspect for class does inspect for class - should not be nil should not be nil - clones with def_clone (recursive type) clones with def_clone (recursive type) - can dup class that inherits abstract class can dup class that inherits abstract class - compares reference to other reference compares reference to other reference - pretty_print pretty_print - does inspect does inspect - does to_s for class does to_s for class - should be false when negated should be false when negated - clones with def_clone clones with def_clone -MIME::Multipart::Parser - raises calling #next after errored raises calling #next after errored - parses messages with preambles and epilogues parses messages with preambles and epilogues - handles break/next in blocks handles break/next in blocks - raises calling #next after finished raises calling #next after finished - parses basic multipart messages parses basic multipart messages - handles invalid multipart data handles invalid multipart data - handles padding handles padding -Log::ProcFormatter - formats formats -ARGV - accepts UTF-8 command-line arguments accepts UTF-8 command-line arguments -Crypto::Blowfish - encrypt and decrypt pair encrypt and decrypt pair -Tuple - does compare does compare - gets last? element gets last? element - does == with different types but same size does == with different types but same size - does comparison does comparison - checks empty? checks empty? - does reverse does reverse - does types does types - does Tuple.new, with type vars does Tuple.new, with type vars - does clone does clone - does at does at - does dup does dup - does compare with different sizes does compare with different sizes - #[]? with non-literal index - gets tuple element or nil gets tuple element or nil - "#each" yielding "#each" yielding - gets first? element gets first? element - does map does map - does map_with_index does map_with_index - does == does == - does map_with_index, with offset does map_with_index, with offset - #[] with non-literal index - gets tuple element gets tuple element - raises index out of bounds raises index out of bounds - does to_s does to_s - does each does each - gets last element gets last element - "#each" iterator "#each" iterator - does === does === - does size does size - does <=> with the same beginning and different size does <=> with the same beginning and different size - "#reverse_each" iterator "#reverse_each" iterator - does to_a does to_a - clones empty tuple clones empty tuple - .[]? with non-literal index - gets tuple metaclass element or nil gets tuple metaclass element or nil - does == with another type does == with another type - does Tuple#from does Tuple#from - does Tuple.from does Tuple.from - does <=> for equality does <=> for equality - values_at - works with mixed types works with mixed types - returns the given indexes returns the given indexes - raises when passed an invalid index raises when passed an invalid index - gets first element gets first element - "#reverse_each" yielding "#reverse_each" yielding - does Tuple.new, without type vars does Tuple.new, without type vars - #to_static_array #to_static_array - .[] with non-literal index - gets tuple metaclass element gets tuple metaclass element - raises index out of bounds raises index out of bounds -UInt - compares with <=> compares with <=> - &- - returns the wrapped negation returns the wrapped negation -IO::FileDescriptor - reopens reopens - #tty? - returns false for null device returns false for null device - returns false for standard streams redirected to null device returns false for standard streams redirected to null device - close_on_exec - can be disabled and reenabled can be disabled and reenabled - is enabled by default (pipe) is enabled by default (pipe) - is copied on reopen is copied on reopen - sets close on exec on the reopened standard descriptors sets close on exec on the reopened standard descriptors - is enabled by default (open) is enabled by default (open) - #initialize - handles closed file descriptor gracefully handles closed file descriptor gracefully - #finalize - does not flush does not flush - closes closes - opens STDERR in binary mode opens STDERR in binary mode - opens STDIN in binary mode opens STDIN in binary mode - opens STDOUT in binary mode opens STDOUT in binary mode - reopen STDIN with the right mode reopen STDIN with the right mode - does not close if close_on_finalize is false does not close if close_on_finalize is false -FileUtils - tests mkdir with multiples existing paths tests mkdir with multiples existing paths - tests mkdir and rmdir with a new path tests mkdir and rmdir with a new path - .ln_sf - overwrites a destination dir in dir overwrites a destination dir in dir - overwrites a destination named pipe overwrites a destination named pipe - creates a symlink even if there's nothing to overwrite creates a symlink even if there's nothing to overwrite - creates multiple symlinks in a destination dir, with overwrites creates multiple symlinks in a destination dir, with overwrites - overwrites a destination file inside a dir overwrites a destination file inside a dir - overwrites a destination file overwrites a destination file - tests rm with nonexistent path tests rm with nonexistent path - tests mkdir and rmdir with multiple new paths tests mkdir and rmdir with multiple new paths - tests rmdir with a path that cannot be removed tests rmdir with a path that cannot be removed - .cmp - compares two equal files compares two equal files - compares two different files compares two different files - .cd - accepts a block accepts a block - should work should work - raises raises - tests rm with multiple existing paths tests rm with multiple existing paths - tests rmdir with an nonexistent path tests rmdir with an nonexistent path - .ln_s - creates a symlink inside a destination dir creates a symlink inside a destination dir - works with a nonexistent source works with a nonexistent source - fails with an existing destination fails with an existing destination - creates a symlink creates a symlink - creates multiple symlinks inside a destination dir creates multiple symlinks inside a destination dir - tests rm with an existing path tests rm with an existing path - tests mkdir with an existing path tests mkdir with an existing path - .ln - creates a hardlink creates a hardlink - creates multiple hardlinks inside a destination dir creates multiple hardlinks inside a destination dir - fails with an extant destination fails with an extant destination - fails with a nonexistent source fails with a nonexistent source - creates a hardlink inside a destination dir creates a hardlink inside a destination dir - .rm_r - doesn't follow symlinks doesn't follow symlinks - deletes a directory recursively deletes a directory recursively - .mv - moves multiple files to one place moves multiple files to one place - raises an error if dest is non correct raises an error if dest is non correct - moves a file from one place to another moves a file from one place to another - moves all existing files to destination moves all existing files to destination - raises an error if non correct arguments raises an error if non correct arguments - tests rm with some nonexistent paths tests rm with some nonexistent paths - .pwd - returns the current working directory returns the current working directory - tests mkdir_p with multiples new path tests mkdir_p with multiples new path - tests rmdir with multiple nonexistent path tests rmdir with multiple nonexistent path - .rm_rf - delete recursively multiple directory delete recursively multiple directory - delete recursively a directory delete recursively a directory - doesn't return error on nonexistent file doesn't return error on nonexistent file - doesn't return error on nonexistent files doesn't return error on nonexistent files - .touch - creates multiple files if they don't exists creates multiple files if they don't exists - creates file if it doesn't exist creates file if it doesn't exist - tests rmdir with multiple path that cannot be removed tests rmdir with multiple path that cannot be removed - .cp_r - copies a directory recursively if destination exists and is empty copies a directory recursively if destination exists and is empty - copies a directory recursively if destination exists leaving existing files copies a directory recursively if destination exists leaving existing files - copies a directory recursively copies a directory recursively - .cp - copies a file copies a file - copies multiple files copies multiple files - copies permissions copies permissions - raises an error if the directory doesn't exist raises an error if the directory doesn't exist - tests mkdir_p with multiple existing path tests mkdir_p with multiple existing path -IO::ARGF - reads from ARGV if specified reads from ARGV if specified - reads when is more data left to read reads when is more data left to read - reads from STDIN if ARGV isn't specified reads from STDIN if ARGV isn't specified - peek - peeks from ARGV if specified peeks from ARGV if specified - peeks from STDIN if ARGV isn't specified peeks from STDIN if ARGV isn't specified - gets - reads from STDIN if ARGV isn't specified reads from STDIN if ARGV isn't specified - reads from ARGV if specified reads from ARGV if specified - reads from STDIN if ARGV isn't specified, chomp = false reads from STDIN if ARGV isn't specified, chomp = false -Deque - last - gets last when non empty gets last when non empty - raises when empty raises when empty - rotate! - rotates with size=capacity rotates with size=capacity - rotates with size=1 rotates with size=1 - rotates rotates - rotates with size=0 rotates with size=0 - == - compares empty compares empty - compares elements compares elements - compares other compares other - compares other types compares other types - size - has size 2 has size 2 - has size 0 has size 0 - each iterator - "#each" iterator "#each" iterator - "#each" yielding "#each" yielding - works while modifying deque works while modifying deque - push - returns the deque returns the deque - adds one element to the deque adds one element to the deque - has the << alias has the << alias - first - gets first when non empty gets first when non empty - raises when empty raises when empty - first? - gives nil when empty gives nil when empty - gets first? when non empty gets first? when non empty - does dup does dup - pop - raises when empty raises when empty - pops more elements than what is available pops more elements than what is available - pops negative count raises pops negative count raises - pops when non empty pops when non empty - pops many elements pops many elements - does clone with recursive type does clone with recursive type - "#reverse_each" iterator "#reverse_each" iterator - reject! - with pattern with pattern - with block with block - does clear does clear - shift - raises when empty raises when empty - shifts more than what is available shifts more than what is available - shifts negative count raises shifts negative count raises - shifts many elements shifts many elements - shifts when non empty shifts when non empty - + - does + does + - does + with different types does + with different types - "#reverse_each" yielding "#reverse_each" yielding - []= - sets on positive index sets on positive index - sets on negative index sets on negative index - "#cycle" yielding "#cycle" yielding - each_index iterator - works while modifying deque works while modifying deque - "#each_index" yielding "#each_index" yielding - "#each_index" iterator "#each_index" iterator - empty - is not empty is not empty - is empty is empty - does each does each - "#cycle(limit)" iterator "#cycle(limit)" iterator - select! - with block with block - with pattern with pattern - swap - swaps but raises out of bounds on right swaps but raises out of bounds on right - swaps but raises out of bounds on left swaps but raises out of bounds on left - swaps with negative indices swaps with negative indices - swaps swaps - delete_at - deletes out of bounds deletes out of bounds - deletes negative index deletes negative index - deletes positive index deletes positive index - to_s - does to_s does to_s - does with recursive does with recursive - concat - concats indexable concats indexable - concats deque concats deque - concats enumerable concats enumerable - concats itself concats itself - concats large deques concats large deques - delete - delete not found delete not found - deletes many deletes many - does hash does hash - insert - inserts with negative index (2) inserts with negative index (2) - inserts with negative index inserts with negative index - inserts with positive index inserts with positive index - inserts out of range inserts out of range - "#cycle" iterator "#cycle" iterator - implementation - works the same as array works the same as array - works the same as array when inserting at 1/8 size and deleting at 3/4 size works the same as array when inserting at 1/8 size and deleting at 3/4 size - works the same as array when inserting at 3/4 size and deleting at 1/8 size works the same as array when inserting at 3/4 size and deleting at 1/8 size - [] - gets on negative index gets on negative index - gets on positive index gets on positive index - gets nilable gets nilable - does clone does clone - does each_index does each_index - new - creates from an array creates from an array - raises on negative capacity raises on negative capacity - raises on negative count raises on negative count - creates with default value in block creates with default value in block - creates with default value creates with default value - inspect - assert assert - does equals? with custom block does equals? with custom block - "#cycle(limit)" yielding "#cycle(limit)" yielding - does unshift does unshift -OpenSSL::Digest - returns the digest size returns the digest size - returns the block size returns the block size - raises a UnsupportedError if digest is unsupported raises a UnsupportedError if digest is unsupported - should be able to calculate SHA1 should be able to calculate SHA1 - correctly reads from IO correctly reads from IO - should be able to calculate SHA256 should be able to calculate SHA256 - .dup - preserves value preserves value - leads to deterministic updates leads to deterministic updates - leads to not sharing state leads to not sharing state - preserves type preserves type - should be able to calculate SHA512 should be able to calculate SHA512 - digest with file content digest with file content - can't call #final more than once can't call #final more than once -Float64#to_s - converts 12345678.0 to "12345678.0" converts 12345678.0 to "12345678.0" - highly-trimmed powers of 2 - converts 0x1p960 to "9.7453140114e+288" converts 0x1p960 to "9.7453140114e+288" - converts 0x1p959 to "4.8726570057e+288" converts 0x1p959 to "4.8726570057e+288" - converts 9007199254740992.0 to "9.007199254740992e+15" converts 9007199254740992.0 to "9.007199254740992e+15" - converts 1000000001000000.0 to "1.000000001e+15" converts 1000000001000000.0 to "1.000000001e+15" - converts 1.2 to "1.2" converts 1.2 to "1.2" - converts 1000000000010000.0 to "1.00000000001e+15" converts 1000000000010000.0 to "1.00000000001e+15" - converts 10000.0 to "10000.0" converts 10000.0 to "10000.0" - converts 1.23456789012 to "1.23456789012" converts 1.23456789012 to "1.23456789012" - converts 549755813888000.0 to "549755813888000.0" converts 549755813888000.0 to "549755813888000.0" - converts 1000001000000000.0 to "1.000001e+15" converts 1000001000000000.0 to "1.000001e+15" - converts 1234567.0 to "1234567.0" converts 1234567.0 to "1234567.0" - converts 70368744177664.0 to "70368744177664.0" converts 70368744177664.0 to "70368744177664.0" - converts 123456789012.0 to "123456789012.0" converts 123456789012.0 to "123456789012.0" - converts 1001000000000000.0 to "1.001e+15" converts 1001000000000000.0 to "1.001e+15" - one-digit cases, where the decimal point can't appear between digits like "17.29" - converts 7e+0 to "7.0" converts 7e+0 to "7.0" - converts 7e-3 to "0.007" converts 7e-3 to "0.007" - converts 7e-1 to "0.7" converts 7e-1 to "0.7" - converts 7e+2 to "700.0" converts 7e+2 to "700.0" - converts 7e-2 to "0.07" converts 7e-2 to "0.07" - converts 7e+1 to "70.0" converts 7e+1 to "70.0" - converts 7e+3 to "7000.0" converts 7e+3 to "7000.0" - converts 8589934592.0 to "8589934592.0" converts 8589934592.0 to "8589934592.0" - converts 12345.0 to "12345.0" converts 12345.0 to "12345.0" - converts 1.0 to "1.0" converts 1.0 to "1.0" - converts 68719476736.0 to "68719476736.0" converts 68719476736.0 to "68719476736.0" - converts 1000000000100000.0 to "1.0000000001e+15" converts 1000000000100000.0 to "1.0000000001e+15" - converts 549755813888.0 to "549755813888.0" converts 549755813888.0 to "549755813888.0" - converts 1100000000000000.0 to "1.1e+15" converts 1100000000000000.0 to "1.1e+15" - converts 10000000000.0 to "10000000000.0" converts 10000000000.0 to "10000000000.0" - anomalous values - converts 0x1p378 to "6.156563468186638e+113" converts 0x1p378 to "6.156563468186638e+113" - converts 0x1p89 to "6.189700196426902e+26" converts 0x1p89 to "6.189700196426902e+26" - converts 0x1p803 to "5.334411546303884e+241" converts 0x1p803 to "5.334411546303884e+241" - converts 0x1p-808 to "5.858190679279809e-244" converts 0x1p-808 to "5.858190679279809e-244" - converts 0x1p534 to "5.623642243178996e+160" converts 0x1p534 to "5.623642243178996e+160" - converts 0x1p-957 to "8.209073602596753e-289" converts 0x1p-957 to "8.209073602596753e-289" - converts 0x1p-24 to "5.960464477539063e-8" converts 0x1p-24 to "5.960464477539063e-8" - converts 0x1p182 to "6.129982163463556e+54" converts 0x1p182 to "6.129982163463556e+54" - converts 0x1p-77 to "6.617444900424222e-24" converts 0x1p-77 to "6.617444900424222e-24" - converts 0x1p-652 to "5.351097043477547e-197" converts 0x1p-652 to "5.351097043477547e-197" - converts 0x1p-1017 to "7.120236347223045e-307" converts 0x1p-1017 to "7.120236347223045e-307" - converts 0x1p-489 to "6.256509672447191e-148" converts 0x1p-489 to "6.256509672447191e-148" - converts 0x1p481 to "6.243497100631985e+144" converts 0x1p481 to "6.243497100631985e+144" - converts 0x1p544 to "5.758609657015292e+163" converts 0x1p544 to "5.758609657015292e+163" - converts 0x1p-366 to "6.653062250012736e-111" converts 0x1p-366 to "6.653062250012736e-111" - converts 0x1p710 to "5.386379163185535e+213" converts 0x1p710 to "5.386379163185535e+213" - converts 0x1p-296 to "7.854549544476363e-90" converts 0x1p-296 to "7.854549544476363e-90" - converts 0x1p574 to "6.183260036827614e+172" converts 0x1p574 to "6.183260036827614e+172" - converts 0x1p-549 to "5.426657103235053e-166" converts 0x1p-549 to "5.426657103235053e-166" - converts 0x1p-705 to "5.940911144672375e-213" converts 0x1p-705 to "5.940911144672375e-213" - converts 0x1p-695 to "6.083493012144512e-210" converts 0x1p-695 to "6.083493012144512e-210" - converts 0x1p132 to "5.444517870735016e+39" converts 0x1p132 to "5.444517870735016e+39" - converts 0x1p172 to "5.986310706507379e+51" converts 0x1p172 to "5.986310706507379e+51" - converts 0x1p-788 to "6.142758149716505e-238" converts 0x1p-788 to "6.142758149716505e-238" - converts 0x1p-509 to "5.966672584960166e-154" converts 0x1p-509 to "5.966672584960166e-154" - converts 0x1p896 to "5.282945311356653e+269" converts 0x1p896 to "5.282945311356653e+269" - converts 0x1p-921 to "5.641232424577593e-278" converts 0x1p-921 to "5.641232424577593e-278" - converts 0x1p-1007 to "7.291122019556398e-304" converts 0x1p-1007 to "7.291122019556398e-304" - converts 0x1p122 to "5.316911983139664e+36" converts 0x1p122 to "5.316911983139664e+36" - converts 0x1p863 to "6.150157786156811e+259" converts 0x1p863 to "6.150157786156811e+259" - converts 0x1p-140 to "7.174648137343064e-43" converts 0x1p-140 to "7.174648137343064e-43" - converts 0x1p-383 to "5.075883674631299e-116" converts 0x1p-383 to "5.075883674631299e-116" - converts 0x1p-778 to "6.290184345309701e-235" converts 0x1p-778 to "6.290184345309701e-235" - converts 0x1p594 to "6.483618076376552e+178" converts 0x1p594 to "6.483618076376552e+178" - converts 0x1p275 to "6.070840288205404e+82" converts 0x1p275 to "6.070840288205404e+82" - converts 0x1p398 to "6.455624695217272e+119" converts 0x1p398 to "6.455624695217272e+119" - converts 0x1p-791 to "7.678447687145631e-239" converts 0x1p-791 to "7.678447687145631e-239" - converts 0x1p-44 to "5.684341886080802e-14" converts 0x1p-44 to "5.684341886080802e-14" - converts 0x1p305 to "6.518515124270356e+91" converts 0x1p305 to "6.518515124270356e+91" - converts 0x1p976 to "6.386688990511104e+293" converts 0x1p976 to "6.386688990511104e+293" - converts 0x1p-496 to "4.887898181599368e-150" converts 0x1p-496 to "4.887898181599368e-150" - converts 0x1p554 to "5.896816288783659e+166" converts 0x1p554 to "5.896816288783659e+166" - converts 0x1p405 to "8.263199609878108e+121" converts 0x1p405 to "8.263199609878108e+121" - converts 0x1p345 to "7.167183174968974e+103" converts 0x1p345 to "7.167183174968974e+103" - converts 0x1p-97 to "6.310887241768095e-30" converts 0x1p-97 to "6.310887241768095e-30" - converts 0x1p-662 to "5.225680706521042e-200" converts 0x1p-662 to "5.225680706521042e-200" - Ryu d2s_test.cc MinMaxShift - converts 0x1.fffffffffffffp+54 to "3.6028797018963964e+16" converts 0x1.fffffffffffffp+54 to "3.6028797018963964e+16" - converts 0x1.fffffffffffffp-1016 to "2.8480945388892175e-306" converts 0x1.fffffffffffffp-1016 to "2.8480945388892175e-306" - converts 0x1.fffffffffffffp-716 to "5.801671039719115e-216" converts 0x1.fffffffffffffp-716 to "5.801671039719115e-216" - converts 0x1.0000000000000p-1019 to "1.7800590868057611e-307" converts 0x1.0000000000000p-1019 to "1.7800590868057611e-307" - converts 0x1.0000000000000p+54 to "1.8014398509481984e+16" converts 0x1.0000000000000p+54 to "1.8014398509481984e+16" - converts 0x1.0000000000000p-716 to "2.900835519859558e-216" converts 0x1.0000000000000p-716 to "2.900835519859558e-216" - converts 0x1.0000000000000p-982 to "2.446494580089078e-296" converts 0x1.0000000000000p-982 to "2.446494580089078e-296" - converts 0x1.fffffffffffffp-982 to "4.8929891601781557e-296" converts 0x1.fffffffffffffp-982 to "4.8929891601781557e-296" - converts 0x1.fa7161a4d6e0cp-89 to "3.196104012172126e-27" converts 0x1.fa7161a4d6e0cp-89 to "3.196104012172126e-27" - Ryu d2s_test.cc 32-bit Chunking - converts 4.294967297 to "4.294967297" converts 4.294967297 to "4.294967297" - converts 4.294967298 to "4.294967298" converts 4.294967298 to "4.294967298" - converts 4.294967296 to "4.294967296" converts 4.294967296 to "4.294967296" - converts 4.294967295 to "4.294967295" converts 4.294967295 to "4.294967295" - converts 4.294967294 to "4.294967294" converts 4.294967294 to "4.294967294" - converts 1000000000000000.0 to "1.0e+15" converts 1000000000000000.0 to "1.0e+15" - converts 1000000000.0 to "1000000000.0" converts 1000000000.0 to "1000000000.0" - converts 1234567890123456.0 to "1.234567890123456e+15" converts 1234567890123456.0 to "1.234567890123456e+15" - converts 1.234567890123456 to "1.234567890123456" converts 1.234567890123456 to "1.234567890123456" - Grisu failures - converts 3.5844466002796428e+298 to "3.5844466002796428e+298" converts 3.5844466002796428e+298 to "3.5844466002796428e+298" - converts 5.547e-6 to "5.547e-6" converts 5.547e-6 to "5.547e-6" - converts 0x1.e0ffed391517ep-186 to "1.9156918820264798e-56" converts 0x1.e0ffed391517ep-186 to "1.9156918820264798e-56" - converts 0x1.a6c767640cd71p+879 to "6.6564021122018745e+264" converts 0x1.a6c767640cd71p+879 to "6.6564021122018745e+264" - converts 1.0e+23 to "1.0e+23" converts 1.0e+23 to "1.0e+23" - converts 4.91e-6 to "4.91e-6" converts 4.91e-6 to "4.91e-6" - converts 1.0 to "1.0" converts 1.0 to "1.0" - converts 12345678901.0 to "12345678901.0" converts 12345678901.0 to "12345678901.0" - converts 100.0 to "100.0" converts 100.0 to "100.0" - converts 100000000000000.0 to "100000000000000.0" converts 100000000000000.0 to "100000000000000.0" - converts 8589934592000.0 to "8589934592000.0" converts 8589934592000.0 to "8589934592000.0" - converts 10.0 to "10.0" converts 10.0 to "10.0" - converts 64000.0 to "64000.0" converts 64000.0 to "64000.0" - special cases - converts 0.0 to "0.0" converts 0.0 to "0.0" - converts 9221120237041090560_u64.unsafe_as(Float64) to "NaN" converts 9221120237041090560_u64.unsafe_as(Float64) to "NaN" - converts Float64::MIN_SUBNORMAL to "5.0e-324" converts Float64::MIN_SUBNORMAL to "5.0e-324" - converts Float64::MIN_POSITIVE to "2.2250738585072014e-308" converts Float64::MIN_POSITIVE to "2.2250738585072014e-308" - converts -Float64::INFINITY to "-Infinity" converts -Float64::INFINITY to "-Infinity" - converts Float64::MIN_POSITIVE.prev_float to "2.225073858507201e-308" converts Float64::MIN_POSITIVE.prev_float to "2.225073858507201e-308" - converts Float64::INFINITY to "Infinity" converts Float64::INFINITY to "Infinity" - converts -0.0 to "-0.0" converts -0.0 to "-0.0" - converts 18444492273895866368_u64.unsafe_as(Float64) to "NaN" converts 18444492273895866368_u64.unsafe_as(Float64) to "NaN" - converts Float64::MAX to "1.7976931348623157e+308" converts Float64::MAX to "1.7976931348623157e+308" - converts 100000000000.0 to "100000000000.0" converts 100000000000.0 to "100000000000.0" - converts 8796093022208.0 to "8796093022208.0" converts 8796093022208.0 to "8796093022208.0" - converts 8192.0 to "8192.0" converts 8192.0 to "8192.0" - converts 1000000000000001.0 to "1.000000000000001e+15" converts 1000000000000001.0 to "1.000000000000001e+15" - converts 1000100000000000.0 to "1.0001e+15" converts 1000100000000000.0 to "1.0001e+15" - converts 8.0 to "8.0" converts 8.0 to "8.0" - converts 12.0 to "12.0" converts 12.0 to "12.0" - converts 100000.0 to "100000.0" converts 100000.0 to "100000.0" - converts 1000000000000.0 to "1000000000000.0" converts 1000000000000.0 to "1000000000000.0" - converts 1000.0 to "1000.0" converts 1000.0 to "1000.0" - converts 65536000.0 to "65536000.0" converts 65536000.0 to "65536000.0" - converts 1.23 to "1.23" converts 1.23 to "1.23" - converts 1000000010000000.0 to "1.00000001e+15" converts 1000000010000000.0 to "1.00000001e+15" - converts 123456.0 to "123456.0" converts 123456.0 to "123456.0" - converts 1.2345678901 to "1.2345678901" converts 1.2345678901 to "1.2345678901" - converts 68719476736000.0 to "68719476736000.0" converts 68719476736000.0 to "68719476736000.0" - converts 1.2345 to "1.2345" converts 1.2345 to "1.2345" - converts 512000.0 to "512000.0" converts 512000.0 to "512000.0" - converts 1.2345678901234 to "1.2345678901234" converts 1.2345678901234 to "1.2345678901234" - converts 562949953421312.0 to "562949953421312.0" converts 562949953421312.0 to "562949953421312.0" - converts 524288000.0 to "524288000.0" converts 524288000.0 to "524288000.0" - converts 65536.0 to "65536.0" converts 65536.0 to "65536.0" - converts 1.23456 to "1.23456" converts 1.23456 to "1.23456" - converts 1000000000000100.0 to "1.0000000000001e+15" converts 1000000000000100.0 to "1.0000000000001e+15" - converts 123.0 to "123.0" converts 123.0 to "123.0" - converts 123456789.0 to "123456789.0" converts 123456789.0 to "123456789.0" - Ryu d2s_test.cc Regression - converts 9.0608011534336e15 to "9.0608011534336e+15" converts 9.0608011534336e15 to "9.0608011534336e+15" - converts 4.940656e-318 to "4.940656e-318" converts 4.940656e-318 to "4.940656e-318" - converts 2.989102097996e-312 to "2.989102097996e-312" converts 2.989102097996e-312 to "2.989102097996e-312" - converts -2.109808898695963e16 to "-2.109808898695963e+16" converts -2.109808898695963e16 to "-2.109808898695963e+16" - converts 4.708356024711512e18 to "4.708356024711512e+18" converts 4.708356024711512e18 to "4.708356024711512e+18" - converts 1.18575755e-316 to "1.18575755e-316" converts 1.18575755e-316 to "1.18575755e-316" - converts 9.409340012568248e18 to "9.409340012568248e+18" converts 9.409340012568248e18 to "9.409340012568248e+18" - converts 8796093022208000.0 to "8.796093022208e+15" converts 8796093022208000.0 to "8.796093022208e+15" - converts 512.0 to "512.0" converts 512.0 to "512.0" - converts 524288.0 to "524288.0" converts 524288.0 to "524288.0" - converts 8192000.0 to "8192000.0" converts 8192000.0 to "8192000.0" - converts 8388608.0 to "8388608.0" converts 8388608.0 to "8388608.0" - converts 536870912.0 to "536870912.0" converts 536870912.0 to "536870912.0" - converts 1.0 to "1.0" converts 1.0 to "1.0" - converts 10000000.0 to "10000000.0" converts 10000000.0 to "10000000.0" - converts 1.234 to "1.234" converts 1.234 to "1.234" - converts 1.23456789012345 to "1.23456789012345" converts 1.23456789012345 to "1.23456789012345" - converts 64.0 to "64.0" converts 64.0 to "64.0" - almost-but-not-quite-anomalous values - converts 0x1p-569 to "5.17526350329881e-172" converts 0x1p-569 to "5.17526350329881e-172" - converts 0x1p890 to "8.25460204899477e+267" converts 0x1p890 to "8.25460204899477e+267" - converts 0x1p966 to "6.237000967296e+290" converts 0x1p966 to "6.237000967296e+290" - converts 0x1p740 to "5.78358058743443e+222" converts 0x1p740 to "5.78358058743443e+222" - converts 0x1p149 to "7.1362384635298e+44" converts 0x1p149 to "7.1362384635298e+44" - converts 0x1p-499 to "6.10987272699921e-151" converts 0x1p-499 to "6.10987272699921e-151" - converts 0x1p-645 to "6.84940421565126e-195" converts 0x1p-645 to "6.84940421565126e-195" - converts 0x1p956 to "6.090821257125e+287" converts 0x1p956 to "6.090821257125e+287" - converts 1.23456789 to "1.23456789" converts 1.23456789 to "1.23456789" - converts 1000010000000000.0 to "1.00001e+15" converts 1000010000000000.0 to "1.00001e+15" - converts 1234.0 to "1234.0" converts 1234.0 to "1234.0" - converts 536870912000.0 to "536870912000.0" converts 536870912000.0 to "536870912000.0" - converts 1.234567 to "1.234567" converts 1.234567 to "1.234567" - converts 67108864000.0 to "67108864000.0" converts 67108864000.0 to "67108864000.0" - converts 100000000.0 to "100000000.0" converts 100000000.0 to "100000000.0" - converts 1.2345678 to "1.2345678" converts 1.2345678 to "1.2345678" - converts 67108864.0 to "67108864.0" converts 67108864.0 to "67108864.0" - converts 1.234567890123 to "1.234567890123" converts 1.234567890123 to "1.234567890123" - converts 1.2345678901234567 to "1.2345678901234567" converts 1.2345678901234567 to "1.2345678901234567" - converts 8388608000.0 to "8388608000.0" converts 8388608000.0 to "8388608000.0" - converts 1010000000000000.0 to "1.01e+15" converts 1010000000000000.0 to "1.01e+15" - converts 1234567895.0 to "1234567895.0" converts 1234567895.0 to "1234567895.0" - Ryu d2s_test.cc LooksLikePow5 - converts 0x1.0f0cf064dd592p+132 to "5.764607523034235e+39" converts 0x1.0f0cf064dd592p+132 to "5.764607523034235e+39" - converts 0x1.0f0cf064dd592p+134 to "2.305843009213694e+40" converts 0x1.0f0cf064dd592p+134 to "2.305843009213694e+40" - converts 0x1.0f0cf064dd592p+133 to "1.152921504606847e+40" converts 0x1.0f0cf064dd592p+133 to "1.152921504606847e+40" - all exponents - converts 1.729e+64 to "1.729e+64" converts 1.729e+64 to "1.729e+64" - converts 1.729e+124 to "1.729e+124" converts 1.729e+124 to "1.729e+124" - converts 1.729e+160 to "1.729e+160" converts 1.729e+160 to "1.729e+160" - converts 1.729e+26 to "1.729e+26" converts 1.729e+26 to "1.729e+26" - converts 1.729e+108 to "1.729e+108" converts 1.729e+108 to "1.729e+108" - converts 1.729e+246 to "1.729e+246" converts 1.729e+246 to "1.729e+246" - converts 1.729e-23 to "1.729e-23" converts 1.729e-23 to "1.729e-23" - converts 1.729e-183 to "1.729e-183" converts 1.729e-183 to "1.729e-183" - converts 1.729e+269 to "1.729e+269" converts 1.729e+269 to "1.729e+269" - converts 1.729e+265 to "1.729e+265" converts 1.729e+265 to "1.729e+265" - converts 1.729e-247 to "1.729e-247" converts 1.729e-247 to "1.729e-247" - converts 1.729e+158 to "1.729e+158" converts 1.729e+158 to "1.729e+158" - converts 1.729e-178 to "1.729e-178" converts 1.729e-178 to "1.729e-178" - converts 1.729e+46 to "1.729e+46" converts 1.729e+46 to "1.729e+46" - converts 1.729e+110 to "1.729e+110" converts 1.729e+110 to "1.729e+110" - converts 1.729e+90 to "1.729e+90" converts 1.729e+90 to "1.729e+90" - converts 1.729e+19 to "1.729e+19" converts 1.729e+19 to "1.729e+19" - converts 1.729e-87 to "1.729e-87" converts 1.729e-87 to "1.729e-87" - converts 1.729e+122 to "1.729e+122" converts 1.729e+122 to "1.729e+122" - converts 1.729e+20 to "1.729e+20" converts 1.729e+20 to "1.729e+20" - converts 1.729e+63 to "1.729e+63" converts 1.729e+63 to "1.729e+63" - converts 1.729e+130 to "1.729e+130" converts 1.729e+130 to "1.729e+130" - converts 1.729e-94 to "1.729e-94" converts 1.729e-94 to "1.729e-94" - converts 1.729e-187 to "1.729e-187" converts 1.729e-187 to "1.729e-187" - converts 1.729e-321 to "1.73e-321" converts 1.729e-321 to "1.73e-321" - converts 1.729e+13 to "17290000000000.0" converts 1.729e+13 to "17290000000000.0" - converts 1.729e-101 to "1.729e-101" converts 1.729e-101 to "1.729e-101" - converts 1.729e+275 to "1.729e+275" converts 1.729e+275 to "1.729e+275" - converts 1.729e-213 to "1.729e-213" converts 1.729e-213 to "1.729e-213" - converts 1.729e-260 to "1.729e-260" converts 1.729e-260 to "1.729e-260" - converts 1.729e+247 to "1.729e+247" converts 1.729e+247 to "1.729e+247" - converts 1.729e+184 to "1.729e+184" converts 1.729e+184 to "1.729e+184" - converts 1.729e+103 to "1.729e+103" converts 1.729e+103 to "1.729e+103" - converts 1.729e+194 to "1.729e+194" converts 1.729e+194 to "1.729e+194" - converts 1.729e+60 to "1.729e+60" converts 1.729e+60 to "1.729e+60" - converts 1.729e-111 to "1.729e-111" converts 1.729e-111 to "1.729e-111" - converts 1.729e+159 to "1.729e+159" converts 1.729e+159 to "1.729e+159" - converts 1.729e+67 to "1.729e+67" converts 1.729e+67 to "1.729e+67" - converts 1.729e-147 to "1.729e-147" converts 1.729e-147 to "1.729e-147" - converts 1.729e-281 to "1.729e-281" converts 1.729e-281 to "1.729e-281" - converts 1.729e-233 to "1.729e-233" converts 1.729e-233 to "1.729e-233" - converts 1.729e-305 to "1.729e-305" converts 1.729e-305 to "1.729e-305" - converts 1.729e-64 to "1.729e-64" converts 1.729e-64 to "1.729e-64" - converts 1.729e-28 to "1.729e-28" converts 1.729e-28 to "1.729e-28" - converts 1.729e-302 to "1.729e-302" converts 1.729e-302 to "1.729e-302" - converts 1.729e+66 to "1.729e+66" converts 1.729e+66 to "1.729e+66" - converts 1.729e-44 to "1.729e-44" converts 1.729e-44 to "1.729e-44" - converts 1.729e+244 to "1.729e+244" converts 1.729e+244 to "1.729e+244" - converts 1.729e+273 to "1.729e+273" converts 1.729e+273 to "1.729e+273" - converts 1.729e-89 to "1.729e-89" converts 1.729e-89 to "1.729e-89" - converts 1.729e-173 to "1.729e-173" converts 1.729e-173 to "1.729e-173" - converts 1.729e+8 to "172900000.0" converts 1.729e+8 to "172900000.0" - converts 1.729e+277 to "1.729e+277" converts 1.729e+277 to "1.729e+277" - converts 1.729e+274 to "1.729e+274" converts 1.729e+274 to "1.729e+274" - converts 1.729e+272 to "1.729e+272" converts 1.729e+272 to "1.729e+272" - converts 1.729e-24 to "1.729e-24" converts 1.729e-24 to "1.729e-24" - converts 1.729e-244 to "1.729e-244" converts 1.729e-244 to "1.729e-244" - converts 1.729e-300 to "1.729e-300" converts 1.729e-300 to "1.729e-300" - converts 1.729e-301 to "1.729e-301" converts 1.729e-301 to "1.729e-301" - converts 1.729e+252 to "1.729e+252" converts 1.729e+252 to "1.729e+252" - converts 1.729e+290 to "1.729e+290" converts 1.729e+290 to "1.729e+290" - converts 1.729e-215 to "1.729e-215" converts 1.729e-215 to "1.729e-215" - converts 1.729e+235 to "1.729e+235" converts 1.729e+235 to "1.729e+235" - converts 1.729e+189 to "1.729e+189" converts 1.729e+189 to "1.729e+189" - converts 1.729e+271 to "1.729e+271" converts 1.729e+271 to "1.729e+271" - converts 1.729e-227 to "1.729e-227" converts 1.729e-227 to "1.729e-227" - converts 1.729e+223 to "1.729e+223" converts 1.729e+223 to "1.729e+223" - converts 1.729e-191 to "1.729e-191" converts 1.729e-191 to "1.729e-191" - converts 1.729e-318 to "1.729e-318" converts 1.729e-318 to "1.729e-318" - converts 1.729e-63 to "1.729e-63" converts 1.729e-63 to "1.729e-63" - converts 1.729e-122 to "1.729e-122" converts 1.729e-122 to "1.729e-122" - converts 1.729e-163 to "1.729e-163" converts 1.729e-163 to "1.729e-163" - converts 1.729e+185 to "1.729e+185" converts 1.729e+185 to "1.729e+185" - converts 1.729e+170 to "1.729e+170" converts 1.729e+170 to "1.729e+170" - converts 1.729e+256 to "1.729e+256" converts 1.729e+256 to "1.729e+256" - converts 1.729e+45 to "1.729e+45" converts 1.729e+45 to "1.729e+45" - converts 1.729e-199 to "1.729e-199" converts 1.729e-199 to "1.729e-199" - converts 1.729e+98 to "1.729e+98" converts 1.729e+98 to "1.729e+98" - converts 1.729e-236 to "1.729e-236" converts 1.729e-236 to "1.729e-236" - converts 1.729e+4 to "17290.0" converts 1.729e+4 to "17290.0" - converts 1.729e+76 to "1.729e+76" converts 1.729e+76 to "1.729e+76" - converts 1.729e+186 to "1.729e+186" converts 1.729e+186 to "1.729e+186" - converts 1.729e+261 to "1.729e+261" converts 1.729e+261 to "1.729e+261" - converts 1.729e-189 to "1.729e-189" converts 1.729e-189 to "1.729e-189" - converts 1.729e+40 to "1.729e+40" converts 1.729e+40 to "1.729e+40" - converts 1.729e-182 to "1.729e-182" converts 1.729e-182 to "1.729e-182" - converts 1.729e+147 to "1.729e+147" converts 1.729e+147 to "1.729e+147" - converts 1.729e+105 to "1.729e+105" converts 1.729e+105 to "1.729e+105" - converts 1.729e+175 to "1.729e+175" converts 1.729e+175 to "1.729e+175" - converts 1.729e+50 to "1.729e+50" converts 1.729e+50 to "1.729e+50" - converts 1.729e+10 to "17290000000.0" converts 1.729e+10 to "17290000000.0" - converts 1.729e-207 to "1.729e-207" converts 1.729e-207 to "1.729e-207" - converts 1.729e+65 to "1.729e+65" converts 1.729e+65 to "1.729e+65" - converts 1.729e-299 to "1.729e-299" converts 1.729e-299 to "1.729e-299" - converts 1.729e-263 to "1.729e-263" converts 1.729e-263 to "1.729e-263" - converts 1.729e-268 to "1.729e-268" converts 1.729e-268 to "1.729e-268" - converts 1.729e+225 to "1.729e+225" converts 1.729e+225 to "1.729e+225" - converts 1.729e+249 to "1.729e+249" converts 1.729e+249 to "1.729e+249" - converts 1.729e-71 to "1.729e-71" converts 1.729e-71 to "1.729e-71" - converts 1.729e-204 to "1.729e-204" converts 1.729e-204 to "1.729e-204" - converts 1.729e-17 to "1.729e-17" converts 1.729e-17 to "1.729e-17" - converts 1.729e+298 to "1.729e+298" converts 1.729e+298 to "1.729e+298" - converts 1.729e+127 to "1.729e+127" converts 1.729e+127 to "1.729e+127" - converts 1.729e+199 to "1.729e+199" converts 1.729e+199 to "1.729e+199" - converts 1.729e+123 to "1.729e+123" converts 1.729e+123 to "1.729e+123" - converts 1.729e+162 to "1.729e+162" converts 1.729e+162 to "1.729e+162" - converts 1.729e+33 to "1.729e+33" converts 1.729e+33 to "1.729e+33" - converts 1.729e+43 to "1.729e+43" converts 1.729e+43 to "1.729e+43" - converts 1.729e+49 to "1.729e+49" converts 1.729e+49 to "1.729e+49" - converts 1.729e+69 to "1.729e+69" converts 1.729e+69 to "1.729e+69" - converts 1.729e-294 to "1.729e-294" converts 1.729e-294 to "1.729e-294" - converts 1.729e+228 to "1.729e+228" converts 1.729e+228 to "1.729e+228" - converts 1.729e-41 to "1.729e-41" converts 1.729e-41 to "1.729e-41" - converts 1.729e-35 to "1.729e-35" converts 1.729e-35 to "1.729e-35" - converts 1.729e+209 to "1.729e+209" converts 1.729e+209 to "1.729e+209" - converts 1.729e-137 to "1.729e-137" converts 1.729e-137 to "1.729e-137" - converts 1.729e+111 to "1.729e+111" converts 1.729e+111 to "1.729e+111" - converts 1.729e-145 to "1.729e-145" converts 1.729e-145 to "1.729e-145" - converts 1.729e+300 to "1.729e+300" converts 1.729e+300 to "1.729e+300" - converts 1.729e+157 to "1.729e+157" converts 1.729e+157 to "1.729e+157" - converts 1.729e+72 to "1.729e+72" converts 1.729e+72 to "1.729e+72" - converts 1.729e-103 to "1.729e-103" converts 1.729e-103 to "1.729e-103" - converts 1.729e-33 to "1.729e-33" converts 1.729e-33 to "1.729e-33" - converts 1.729e+9 to "1729000000.0" converts 1.729e+9 to "1729000000.0" - converts 1.729e+106 to "1.729e+106" converts 1.729e+106 to "1.729e+106" - converts 1.729e+238 to "1.729e+238" converts 1.729e+238 to "1.729e+238" - converts 1.729e+87 to "1.729e+87" converts 1.729e+87 to "1.729e+87" - converts 1.729e+31 to "1.729e+31" converts 1.729e+31 to "1.729e+31" - converts 1.729e+34 to "1.729e+34" converts 1.729e+34 to "1.729e+34" - converts 1.729e-250 to "1.729e-250" converts 1.729e-250 to "1.729e-250" - converts 1.729e+233 to "1.729e+233" converts 1.729e+233 to "1.729e+233" - converts 1.729e+113 to "1.729e+113" converts 1.729e+113 to "1.729e+113" - converts 1.729e+5 to "172900.0" converts 1.729e+5 to "172900.0" - converts 1.729e+81 to "1.729e+81" converts 1.729e+81 to "1.729e+81" - converts 1.729e-60 to "1.729e-60" converts 1.729e-60 to "1.729e-60" - converts 1.729e-219 to "1.729e-219" converts 1.729e-219 to "1.729e-219" - converts 1.729e-138 to "1.729e-138" converts 1.729e-138 to "1.729e-138" - converts 1.729e-277 to "1.729e-277" converts 1.729e-277 to "1.729e-277" - converts 1.729e+38 to "1.729e+38" converts 1.729e+38 to "1.729e+38" - converts 1.729e+207 to "1.729e+207" converts 1.729e+207 to "1.729e+207" - converts 1.729e-193 to "1.729e-193" converts 1.729e-193 to "1.729e-193" - converts 1.729e+132 to "1.729e+132" converts 1.729e+132 to "1.729e+132" - converts 1.729e-211 to "1.729e-211" converts 1.729e-211 to "1.729e-211" - converts 1.729e-97 to "1.729e-97" converts 1.729e-97 to "1.729e-97" - converts 1.729e-85 to "1.729e-85" converts 1.729e-85 to "1.729e-85" - converts 1.729e+187 to "1.729e+187" converts 1.729e+187 to "1.729e+187" - converts 1.729e-264 to "1.729e-264" converts 1.729e-264 to "1.729e-264" - converts 1.729e+84 to "1.729e+84" converts 1.729e+84 to "1.729e+84" - converts 1.729e+227 to "1.729e+227" converts 1.729e+227 to "1.729e+227" - converts 1.729e-32 to "1.729e-32" converts 1.729e-32 to "1.729e-32" - converts 1.729e-100 to "1.729e-100" converts 1.729e-100 to "1.729e-100" - converts 1.729e+176 to "1.729e+176" converts 1.729e+176 to "1.729e+176" - converts 1.729e+302 to "1.729e+302" converts 1.729e+302 to "1.729e+302" - converts 1.729e-91 to "1.729e-91" converts 1.729e-91 to "1.729e-91" - converts 1.729e-15 to "1.729e-15" converts 1.729e-15 to "1.729e-15" - converts 1.729e-56 to "1.729e-56" converts 1.729e-56 to "1.729e-56" - converts 1.729e-293 to "1.729e-293" converts 1.729e-293 to "1.729e-293" - converts 1.729e-303 to "1.729e-303" converts 1.729e-303 to "1.729e-303" - converts 1.729e+270 to "1.729e+270" converts 1.729e+270 to "1.729e+270" - converts 1.729e+96 to "1.729e+96" converts 1.729e+96 to "1.729e+96" - converts 1.729e+41 to "1.729e+41" converts 1.729e+41 to "1.729e+41" - converts 1.729e-126 to "1.729e-126" converts 1.729e-126 to "1.729e-126" - converts 1.729e-3 to "0.001729" converts 1.729e-3 to "0.001729" - converts 1.729e-262 to "1.729e-262" converts 1.729e-262 to "1.729e-262" - converts 1.729e+55 to "1.729e+55" converts 1.729e+55 to "1.729e+55" - converts 1.729e-67 to "1.729e-67" converts 1.729e-67 to "1.729e-67" - converts 1.729e-267 to "1.729e-267" converts 1.729e-267 to "1.729e-267" - converts 1.729e-158 to "1.729e-158" converts 1.729e-158 to "1.729e-158" - converts 1.729e-99 to "1.729e-99" converts 1.729e-99 to "1.729e-99" - converts 1.729e+89 to "1.729e+89" converts 1.729e+89 to "1.729e+89" - converts 1.729e-308 to "1.729e-308" converts 1.729e-308 to "1.729e-308" - converts 1.729e-58 to "1.729e-58" converts 1.729e-58 to "1.729e-58" - converts 1.729e-205 to "1.729e-205" converts 1.729e-205 to "1.729e-205" - converts 1.729e-177 to "1.729e-177" converts 1.729e-177 to "1.729e-177" - converts 1.729e+121 to "1.729e+121" converts 1.729e+121 to "1.729e+121" - converts 1.729e+101 to "1.729e+101" converts 1.729e+101 to "1.729e+101" - converts 1.729e-162 to "1.729e-162" converts 1.729e-162 to "1.729e-162" - converts 1.729e-212 to "1.729e-212" converts 1.729e-212 to "1.729e-212" - converts 1.729e+165 to "1.729e+165" converts 1.729e+165 to "1.729e+165" - converts 1.729e+301 to "1.729e+301" converts 1.729e+301 to "1.729e+301" - converts 1.729e+259 to "1.729e+259" converts 1.729e+259 to "1.729e+259" - converts 1.729e+23 to "1.729e+23" converts 1.729e+23 to "1.729e+23" - converts 1.729e-288 to "1.729e-288" converts 1.729e-288 to "1.729e-288" - converts 1.729e-84 to "1.729e-84" converts 1.729e-84 to "1.729e-84" - converts 1.729e-181 to "1.729e-181" converts 1.729e-181 to "1.729e-181" - converts 1.729e+172 to "1.729e+172" converts 1.729e+172 to "1.729e+172" - converts 1.729e+114 to "1.729e+114" converts 1.729e+114 to "1.729e+114" - converts 1.729e-201 to "1.729e-201" converts 1.729e-201 to "1.729e-201" - converts 1.729e+232 to "1.729e+232" converts 1.729e+232 to "1.729e+232" - converts 1.729e-297 to "1.729e-297" converts 1.729e-297 to "1.729e-297" - converts 1.729e-1 to "0.1729" converts 1.729e-1 to "0.1729" - converts 1.729e-180 to "1.729e-180" converts 1.729e-180 to "1.729e-180" - converts 1.729e+237 to "1.729e+237" converts 1.729e+237 to "1.729e+237" - converts 1.729e+48 to "1.729e+48" converts 1.729e+48 to "1.729e+48" - converts 1.729e-179 to "1.729e-179" converts 1.729e-179 to "1.729e-179" - converts 1.729e-72 to "1.729e-72" converts 1.729e-72 to "1.729e-72" - converts 1.729e+217 to "1.729e+217" converts 1.729e+217 to "1.729e+217" - converts 1.729e+263 to "1.729e+263" converts 1.729e+263 to "1.729e+263" - converts 1.729e-197 to "1.729e-197" converts 1.729e-197 to "1.729e-197" - converts 1.729e+42 to "1.729e+42" converts 1.729e+42 to "1.729e+42" - converts 1.729e+200 to "1.729e+200" converts 1.729e+200 to "1.729e+200" - converts 1.729e+6 to "1729000.0" converts 1.729e+6 to "1729000.0" - converts 1.729e+80 to "1.729e+80" converts 1.729e+80 to "1.729e+80" - converts 1.729e+62 to "1.729e+62" converts 1.729e+62 to "1.729e+62" - converts 1.729e+288 to "1.729e+288" converts 1.729e+288 to "1.729e+288" - converts 1.729e+47 to "1.729e+47" converts 1.729e+47 to "1.729e+47" - converts 1.729e-81 to "1.729e-81" converts 1.729e-81 to "1.729e-81" - converts 1.729e-70 to "1.729e-70" converts 1.729e-70 to "1.729e-70" - converts 1.729e+141 to "1.729e+141" converts 1.729e+141 to "1.729e+141" - converts 1.729e-190 to "1.729e-190" converts 1.729e-190 to "1.729e-190" - converts 1.729e+266 to "1.729e+266" converts 1.729e+266 to "1.729e+266" - converts 1.729e-317 to "1.729e-317" converts 1.729e-317 to "1.729e-317" - converts 1.729e-220 to "1.729e-220" converts 1.729e-220 to "1.729e-220" - converts 1.729e-314 to "1.729e-314" converts 1.729e-314 to "1.729e-314" - converts 1.729e-156 to "1.729e-156" converts 1.729e-156 to "1.729e-156" - converts 1.729e+1 to "17.29" converts 1.729e+1 to "17.29" - converts 1.729e-195 to "1.729e-195" converts 1.729e-195 to "1.729e-195" - converts 1.729e+11 to "172900000000.0" converts 1.729e+11 to "172900000000.0" - converts 1.729e-306 to "1.729e-306" converts 1.729e-306 to "1.729e-306" - converts 1.729e-164 to "1.729e-164" converts 1.729e-164 to "1.729e-164" - converts 1.729e-319 to "1.729e-319" converts 1.729e-319 to "1.729e-319" - converts 1.729e+125 to "1.729e+125" converts 1.729e+125 to "1.729e+125" - converts 1.729e+140 to "1.729e+140" converts 1.729e+140 to "1.729e+140" - converts 1.729e+154 to "1.729e+154" converts 1.729e+154 to "1.729e+154" - converts 1.729e-52 to "1.729e-52" converts 1.729e-52 to "1.729e-52" - converts 1.729e-57 to "1.729e-57" converts 1.729e-57 to "1.729e-57" - converts 1.729e-270 to "1.729e-270" converts 1.729e-270 to "1.729e-270" - converts 1.729e-275 to "1.729e-275" converts 1.729e-275 to "1.729e-275" - converts 1.729e+102 to "1.729e+102" converts 1.729e+102 to "1.729e+102" - converts 1.729e+258 to "1.729e+258" converts 1.729e+258 to "1.729e+258" - converts 1.729e-124 to "1.729e-124" converts 1.729e-124 to "1.729e-124" - converts 1.729e+153 to "1.729e+153" converts 1.729e+153 to "1.729e+153" - converts 1.729e+92 to "1.729e+92" converts 1.729e+92 to "1.729e+92" - converts 1.729e-223 to "1.729e-223" converts 1.729e-223 to "1.729e-223" - converts 1.729e-170 to "1.729e-170" converts 1.729e-170 to "1.729e-170" - converts 1.729e+52 to "1.729e+52" converts 1.729e+52 to "1.729e+52" - converts 1.729e-21 to "1.729e-21" converts 1.729e-21 to "1.729e-21" - converts 1.729e-185 to "1.729e-185" converts 1.729e-185 to "1.729e-185" - converts 1.729e+205 to "1.729e+205" converts 1.729e+205 to "1.729e+205" - converts 1.729e-256 to "1.729e-256" converts 1.729e-256 to "1.729e-256" - converts 1.729e+36 to "1.729e+36" converts 1.729e+36 to "1.729e+36" - converts 1.729e+219 to "1.729e+219" converts 1.729e+219 to "1.729e+219" - converts 1.729e-274 to "1.729e-274" converts 1.729e-274 to "1.729e-274" - converts 1.729e-74 to "1.729e-74" converts 1.729e-74 to "1.729e-74" - converts 1.729e+254 to "1.729e+254" converts 1.729e+254 to "1.729e+254" - converts 1.729e+75 to "1.729e+75" converts 1.729e+75 to "1.729e+75" - converts 1.729e-271 to "1.729e-271" converts 1.729e-271 to "1.729e-271" - converts 1.729e+181 to "1.729e+181" converts 1.729e+181 to "1.729e+181" - converts 1.729e+177 to "1.729e+177" converts 1.729e+177 to "1.729e+177" - converts 1.729e-51 to "1.729e-51" converts 1.729e-51 to "1.729e-51" - converts 1.729e+27 to "1.729e+27" converts 1.729e+27 to "1.729e+27" - converts 1.729e+169 to "1.729e+169" converts 1.729e+169 to "1.729e+169" - converts 1.729e-174 to "1.729e-174" converts 1.729e-174 to "1.729e-174" - converts 1.729e+25 to "1.729e+25" converts 1.729e+25 to "1.729e+25" - converts 1.729e-171 to "1.729e-171" converts 1.729e-171 to "1.729e-171" - converts 1.729e+305 to "1.729e+305" converts 1.729e+305 to "1.729e+305" - converts 1.729e-230 to "1.729e-230" converts 1.729e-230 to "1.729e-230" - converts 1.729e+306 to "1.729e+306" converts 1.729e+306 to "1.729e+306" - converts 1.729e+308 to "1.729e+308" converts 1.729e+308 to "1.729e+308" - converts 1.729e-19 to "1.729e-19" converts 1.729e-19 to "1.729e-19" - converts 1.729e+163 to "1.729e+163" converts 1.729e+163 to "1.729e+163" - converts 1.729e+202 to "1.729e+202" converts 1.729e+202 to "1.729e+202" - converts 1.729e-141 to "1.729e-141" converts 1.729e-141 to "1.729e-141" - converts 1.729e+257 to "1.729e+257" converts 1.729e+257 to "1.729e+257" - converts 1.729e-34 to "1.729e-34" converts 1.729e-34 to "1.729e-34" - converts 1.729e-40 to "1.729e-40" converts 1.729e-40 to "1.729e-40" - converts 1.729e+245 to "1.729e+245" converts 1.729e+245 to "1.729e+245" - converts 1.729e-218 to "1.729e-218" converts 1.729e-218 to "1.729e-218" - converts 1.729e+188 to "1.729e+188" converts 1.729e+188 to "1.729e+188" - converts 1.729e-258 to "1.729e-258" converts 1.729e-258 to "1.729e-258" - converts 1.729e-112 to "1.729e-112" converts 1.729e-112 to "1.729e-112" - converts 1.729e+100 to "1.729e+100" converts 1.729e+100 to "1.729e+100" - converts 1.729e-206 to "1.729e-206" converts 1.729e-206 to "1.729e-206" - converts 1.729e-217 to "1.729e-217" converts 1.729e-217 to "1.729e-217" - converts 1.729e+131 to "1.729e+131" converts 1.729e+131 to "1.729e+131" - converts 1.729e+297 to "1.729e+297" converts 1.729e+297 to "1.729e+297" - converts 1.729e+28 to "1.729e+28" converts 1.729e+28 to "1.729e+28" - converts 1.729e-165 to "1.729e-165" converts 1.729e-165 to "1.729e-165" - converts 1.729e-292 to "1.729e-292" converts 1.729e-292 to "1.729e-292" - converts 1.729e-298 to "1.729e-298" converts 1.729e-298 to "1.729e-298" - converts 1.729e-114 to "1.729e-114" converts 1.729e-114 to "1.729e-114" - converts 1.729e-116 to "1.729e-116" converts 1.729e-116 to "1.729e-116" - converts 1.729e-61 to "1.729e-61" converts 1.729e-61 to "1.729e-61" - converts 1.729e+224 to "1.729e+224" converts 1.729e+224 to "1.729e+224" - converts 1.729e+29 to "1.729e+29" converts 1.729e+29 to "1.729e+29" - converts 1.729e-241 to "1.729e-241" converts 1.729e-241 to "1.729e-241" - converts 1.729e-296 to "1.729e-296" converts 1.729e-296 to "1.729e-296" - converts 1.729e-9 to "1.729e-9" converts 1.729e-9 to "1.729e-9" - converts 1.729e+211 to "1.729e+211" converts 1.729e+211 to "1.729e+211" - converts 1.729e-117 to "1.729e-117" converts 1.729e-117 to "1.729e-117" - converts 1.729e-76 to "1.729e-76" converts 1.729e-76 to "1.729e-76" - converts 1.729e+293 to "1.729e+293" converts 1.729e+293 to "1.729e+293" - converts 1.729e-136 to "1.729e-136" converts 1.729e-136 to "1.729e-136" - converts 1.729e+174 to "1.729e+174" converts 1.729e+174 to "1.729e+174" - converts 1.729e+51 to "1.729e+51" converts 1.729e+51 to "1.729e+51" - converts 1.729e+79 to "1.729e+79" converts 1.729e+79 to "1.729e+79" - converts 1.729e-192 to "1.729e-192" converts 1.729e-192 to "1.729e-192" - converts 1.729e+32 to "1.729e+32" converts 1.729e+32 to "1.729e+32" - converts 1.729e-11 to "1.729e-11" converts 1.729e-11 to "1.729e-11" - converts 1.729e+118 to "1.729e+118" converts 1.729e+118 to "1.729e+118" - converts 1.729e+77 to "1.729e+77" converts 1.729e+77 to "1.729e+77" - converts 1.729e+192 to "1.729e+192" converts 1.729e+192 to "1.729e+192" - converts 1.729e+215 to "1.729e+215" converts 1.729e+215 to "1.729e+215" - converts 1.729e+17 to "1.729e+17" converts 1.729e+17 to "1.729e+17" - converts 1.729e+73 to "1.729e+73" converts 1.729e+73 to "1.729e+73" - converts 1.729e-234 to "1.729e-234" converts 1.729e-234 to "1.729e-234" - converts 1.729e-269 to "1.729e-269" converts 1.729e-269 to "1.729e-269" - converts 1.729e-265 to "1.729e-265" converts 1.729e-265 to "1.729e-265" - converts 1.729e+168 to "1.729e+168" converts 1.729e+168 to "1.729e+168" - converts 1.729e-37 to "1.729e-37" converts 1.729e-37 to "1.729e-37" - converts 1.729e+68 to "1.729e+68" converts 1.729e+68 to "1.729e+68" - converts 1.729e+116 to "1.729e+116" converts 1.729e+116 to "1.729e+116" - converts 1.729e-243 to "1.729e-243" converts 1.729e-243 to "1.729e-243" - converts 1.729e-224 to "1.729e-224" converts 1.729e-224 to "1.729e-224" - converts 1.729e+148 to "1.729e+148" converts 1.729e+148 to "1.729e+148" - converts 1.729e+204 to "1.729e+204" converts 1.729e+204 to "1.729e+204" - converts 1.729e+74 to "1.729e+74" converts 1.729e+74 to "1.729e+74" - converts 1.729e+253 to "1.729e+253" converts 1.729e+253 to "1.729e+253" - converts 1.729e-53 to "1.729e-53" converts 1.729e-53 to "1.729e-53" - converts 1.729e+280 to "1.729e+280" converts 1.729e+280 to "1.729e+280" - converts 1.729e-39 to "1.729e-39" converts 1.729e-39 to "1.729e-39" - converts 1.729e-55 to "1.729e-55" converts 1.729e-55 to "1.729e-55" - converts 1.729e-169 to "1.729e-169" converts 1.729e-169 to "1.729e-169" - converts 1.729e+78 to "1.729e+78" converts 1.729e+78 to "1.729e+78" - converts 1.729e-108 to "1.729e-108" converts 1.729e-108 to "1.729e-108" - converts 1.729e-209 to "1.729e-209" converts 1.729e-209 to "1.729e-209" - converts 1.729e-107 to "1.729e-107" converts 1.729e-107 to "1.729e-107" - converts 1.729e-235 to "1.729e-235" converts 1.729e-235 to "1.729e-235" - converts 1.729e-315 to "1.729e-315" converts 1.729e-315 to "1.729e-315" - converts 1.729e+44 to "1.729e+44" converts 1.729e+44 to "1.729e+44" - converts 1.729e-45 to "1.729e-45" converts 1.729e-45 to "1.729e-45" - converts 1.729e+201 to "1.729e+201" converts 1.729e+201 to "1.729e+201" - converts 1.729e+137 to "1.729e+137" converts 1.729e+137 to "1.729e+137" - converts 1.729e+171 to "1.729e+171" converts 1.729e+171 to "1.729e+171" - converts 1.729e-133 to "1.729e-133" converts 1.729e-133 to "1.729e-133" - converts 1.729e+126 to "1.729e+126" converts 1.729e+126 to "1.729e+126" - converts 1.729e-253 to "1.729e-253" converts 1.729e-253 to "1.729e-253" - converts 1.729e+231 to "1.729e+231" converts 1.729e+231 to "1.729e+231" - converts 1.729e+292 to "1.729e+292" converts 1.729e+292 to "1.729e+292" - converts 1.729e+255 to "1.729e+255" converts 1.729e+255 to "1.729e+255" - converts 1.729e-65 to "1.729e-65" converts 1.729e-65 to "1.729e-65" - converts 1.729e+167 to "1.729e+167" converts 1.729e+167 to "1.729e+167" - converts 1.729e-239 to "1.729e-239" converts 1.729e-239 to "1.729e-239" - converts 1.729e-221 to "1.729e-221" converts 1.729e-221 to "1.729e-221" - converts 1.729e+86 to "1.729e+86" converts 1.729e+86 to "1.729e+86" - converts 1.729e-291 to "1.729e-291" converts 1.729e-291 to "1.729e-291" - converts 1.729e-102 to "1.729e-102" converts 1.729e-102 to "1.729e-102" - converts 1.729e-196 to "1.729e-196" converts 1.729e-196 to "1.729e-196" - converts 1.729e+218 to "1.729e+218" converts 1.729e+218 to "1.729e+218" - converts 1.729e+210 to "1.729e+210" converts 1.729e+210 to "1.729e+210" - converts 1.729e-13 to "1.729e-13" converts 1.729e-13 to "1.729e-13" - converts 1.729e+299 to "1.729e+299" converts 1.729e+299 to "1.729e+299" - converts 1.729e-286 to "1.729e-286" converts 1.729e-286 to "1.729e-286" - converts 1.729e-259 to "1.729e-259" converts 1.729e-259 to "1.729e-259" - converts 1.729e-143 to "1.729e-143" converts 1.729e-143 to "1.729e-143" - converts 1.729e-285 to "1.729e-285" converts 1.729e-285 to "1.729e-285" - converts 1.729e-22 to "1.729e-22" converts 1.729e-22 to "1.729e-22" - converts 1.729e+24 to "1.729e+24" converts 1.729e+24 to "1.729e+24" - converts 1.729e+119 to "1.729e+119" converts 1.729e+119 to "1.729e+119" - converts 1.729e+203 to "1.729e+203" converts 1.729e+203 to "1.729e+203" - converts 1.729e-90 to "1.729e-90" converts 1.729e-90 to "1.729e-90" - converts 1.729e+279 to "1.729e+279" converts 1.729e+279 to "1.729e+279" - converts 1.729e-261 to "1.729e-261" converts 1.729e-261 to "1.729e-261" - converts 1.729e-113 to "1.729e-113" converts 1.729e-113 to "1.729e-113" - converts 1.729e-284 to "1.729e-284" converts 1.729e-284 to "1.729e-284" - converts 1.729e+283 to "1.729e+283" converts 1.729e+283 to "1.729e+283" - converts 1.729e+104 to "1.729e+104" converts 1.729e+104 to "1.729e+104" - converts 1.729e-47 to "1.729e-47" converts 1.729e-47 to "1.729e-47" - converts 1.729e+287 to "1.729e+287" converts 1.729e+287 to "1.729e+287" - converts 1.729e-255 to "1.729e-255" converts 1.729e-255 to "1.729e-255" - converts 1.729e-38 to "1.729e-38" converts 1.729e-38 to "1.729e-38" - converts 1.729e+242 to "1.729e+242" converts 1.729e+242 to "1.729e+242" - converts 1.729e-131 to "1.729e-131" converts 1.729e-131 to "1.729e-131" - converts 1.729e-309 to "1.729e-309" converts 1.729e-309 to "1.729e-309" - converts 1.729e-148 to "1.729e-148" converts 1.729e-148 to "1.729e-148" - converts 1.729e-78 to "1.729e-78" converts 1.729e-78 to "1.729e-78" - converts 1.729e-168 to "1.729e-168" converts 1.729e-168 to "1.729e-168" - converts 1.729e+30 to "1.729e+30" converts 1.729e+30 to "1.729e+30" - converts 1.729e+15 to "1.729e+15" converts 1.729e+15 to "1.729e+15" - converts 1.729e+291 to "1.729e+291" converts 1.729e+291 to "1.729e+291" - converts 1.729e-8 to "1.729e-8" converts 1.729e-8 to "1.729e-8" - converts 1.729e+222 to "1.729e+222" converts 1.729e+222 to "1.729e+222" - converts 1.729e-310 to "1.729e-310" converts 1.729e-310 to "1.729e-310" - converts 1.729e-66 to "1.729e-66" converts 1.729e-66 to "1.729e-66" - converts 1.729e+2 to "172.9" converts 1.729e+2 to "172.9" - converts 1.729e-93 to "1.729e-93" converts 1.729e-93 to "1.729e-93" - converts 1.729e+179 to "1.729e+179" converts 1.729e+179 to "1.729e+179" - converts 1.729e-120 to "1.729e-120" converts 1.729e-120 to "1.729e-120" - converts 1.729e+268 to "1.729e+268" converts 1.729e+268 to "1.729e+268" - converts 1.729e-82 to "1.729e-82" converts 1.729e-82 to "1.729e-82" - converts 1.729e+193 to "1.729e+193" converts 1.729e+193 to "1.729e+193" - converts 1.729e-240 to "1.729e-240" converts 1.729e-240 to "1.729e-240" - converts 1.729e+281 to "1.729e+281" converts 1.729e+281 to "1.729e+281" - converts 1.729e-161 to "1.729e-161" converts 1.729e-161 to "1.729e-161" - converts 1.729e-226 to "1.729e-226" converts 1.729e-226 to "1.729e-226" - converts 1.729e-115 to "1.729e-115" converts 1.729e-115 to "1.729e-115" - converts 1.729e+295 to "1.729e+295" converts 1.729e+295 to "1.729e+295" - converts 1.729e-43 to "1.729e-43" converts 1.729e-43 to "1.729e-43" - converts 1.729e+117 to "1.729e+117" converts 1.729e+117 to "1.729e+117" - converts 1.729e+144 to "1.729e+144" converts 1.729e+144 to "1.729e+144" - converts 1.729e-202 to "1.729e-202" converts 1.729e-202 to "1.729e-202" - converts 1.729e+95 to "1.729e+95" converts 1.729e+95 to "1.729e+95" - converts 1.729e-4 to "0.0001729" converts 1.729e-4 to "0.0001729" - converts 1.729e-304 to "1.729e-304" converts 1.729e-304 to "1.729e-304" - converts 1.729e+151 to "1.729e+151" converts 1.729e+151 to "1.729e+151" - converts 1.729e-144 to "1.729e-144" converts 1.729e-144 to "1.729e-144" - converts 1.729e+180 to "1.729e+180" converts 1.729e+180 to "1.729e+180" - converts 1.729e+221 to "1.729e+221" converts 1.729e+221 to "1.729e+221" - converts 1.729e+145 to "1.729e+145" converts 1.729e+145 to "1.729e+145" - converts 1.729e+61 to "1.729e+61" converts 1.729e+61 to "1.729e+61" - converts 1.729e-10 to "1.729e-10" converts 1.729e-10 to "1.729e-10" - converts 1.729e+260 to "1.729e+260" converts 1.729e+260 to "1.729e+260" - converts 1.729e-237 to "1.729e-237" converts 1.729e-237 to "1.729e-237" - converts 1.729e+35 to "1.729e+35" converts 1.729e+35 to "1.729e+35" - converts 1.729e-134 to "1.729e-134" converts 1.729e-134 to "1.729e-134" - converts 1.729e-216 to "1.729e-216" converts 1.729e-216 to "1.729e-216" - converts 1.729e-323 to "1.5e-323" converts 1.729e-323 to "1.5e-323" - converts 1.729e-31 to "1.729e-31" converts 1.729e-31 to "1.729e-31" - converts 1.729e-248 to "1.729e-248" converts 1.729e-248 to "1.729e-248" - converts 1.729e-245 to "1.729e-245" converts 1.729e-245 to "1.729e-245" - converts 1.729e+59 to "1.729e+59" converts 1.729e+59 to "1.729e+59" - converts 1.729e+85 to "1.729e+85" converts 1.729e+85 to "1.729e+85" - converts 1.729e-150 to "1.729e-150" converts 1.729e-150 to "1.729e-150" - converts 1.729e+12 to "1729000000000.0" converts 1.729e+12 to "1729000000000.0" - converts 1.729e-127 to "1.729e-127" converts 1.729e-127 to "1.729e-127" - converts 1.729e+107 to "1.729e+107" converts 1.729e+107 to "1.729e+107" - converts 1.729e-118 to "1.729e-118" converts 1.729e-118 to "1.729e-118" - converts 1.729e+18 to "1.729e+18" converts 1.729e+18 to "1.729e+18" - converts 1.729e-203 to "1.729e-203" converts 1.729e-203 to "1.729e-203" - converts 1.729e-257 to "1.729e-257" converts 1.729e-257 to "1.729e-257" - converts 1.729e-30 to "1.729e-30" converts 1.729e-30 to "1.729e-30" - converts 1.729e-186 to "1.729e-186" converts 1.729e-186 to "1.729e-186" - converts 1.729e+236 to "1.729e+236" converts 1.729e+236 to "1.729e+236" - converts 1.729e-228 to "1.729e-228" converts 1.729e-228 to "1.729e-228" - converts 1.729e-29 to "1.729e-29" converts 1.729e-29 to "1.729e-29" - converts 1.729e-123 to "1.729e-123" converts 1.729e-123 to "1.729e-123" - converts 1.729e-282 to "1.729e-282" converts 1.729e-282 to "1.729e-282" - converts 1.729e+3 to "1729.0" converts 1.729e+3 to "1729.0" - converts 1.729e-88 to "1.729e-88" converts 1.729e-88 to "1.729e-88" - converts 1.729e+149 to "1.729e+149" converts 1.729e+149 to "1.729e+149" - converts 1.729e-59 to "1.729e-59" converts 1.729e-59 to "1.729e-59" - converts 1.729e+161 to "1.729e+161" converts 1.729e+161 to "1.729e+161" - converts 1.729e+112 to "1.729e+112" converts 1.729e+112 to "1.729e+112" - converts 1.729e-36 to "1.729e-36" converts 1.729e-36 to "1.729e-36" - converts 7.29e-324 to "5.0e-324" converts 7.29e-324 to "5.0e-324" - converts 1.729e-210 to "1.729e-210" converts 1.729e-210 to "1.729e-210" - converts 1.729e-42 to "1.729e-42" converts 1.729e-42 to "1.729e-42" - converts 1.729e-184 to "1.729e-184" converts 1.729e-184 to "1.729e-184" - converts 1.729e-280 to "1.729e-280" converts 1.729e-280 to "1.729e-280" - converts 1.729e-238 to "1.729e-238" converts 1.729e-238 to "1.729e-238" - converts 1.729e+143 to "1.729e+143" converts 1.729e+143 to "1.729e+143" - converts 1.729e-154 to "1.729e-154" converts 1.729e-154 to "1.729e-154" - converts 1.729e-254 to "1.729e-254" converts 1.729e-254 to "1.729e-254" - converts 1.729e-27 to "1.729e-27" converts 1.729e-27 to "1.729e-27" - converts 1.729e-80 to "1.729e-80" converts 1.729e-80 to "1.729e-80" - converts 1.729e+142 to "1.729e+142" converts 1.729e+142 to "1.729e+142" - converts 1.729e+214 to "1.729e+214" converts 1.729e+214 to "1.729e+214" - converts 1.729e+39 to "1.729e+39" converts 1.729e+39 to "1.729e+39" - converts 1.729e+37 to "1.729e+37" converts 1.729e+37 to "1.729e+37" - converts 1.729e+243 to "1.729e+243" converts 1.729e+243 to "1.729e+243" - converts 1.729e+120 to "1.729e+120" converts 1.729e+120 to "1.729e+120" - converts 1.729e-16 to "1.729e-16" converts 1.729e-16 to "1.729e-16" - converts 1.729e+195 to "1.729e+195" converts 1.729e+195 to "1.729e+195" - converts 1.729e+230 to "1.729e+230" converts 1.729e+230 to "1.729e+230" - converts 1.729e+197 to "1.729e+197" converts 1.729e+197 to "1.729e+197" - converts 1.729e+136 to "1.729e+136" converts 1.729e+136 to "1.729e+136" - converts 1.729e-175 to "1.729e-175" converts 1.729e-175 to "1.729e-175" - converts 1.729e+196 to "1.729e+196" converts 1.729e+196 to "1.729e+196" - converts 1.729e-79 to "1.729e-79" converts 1.729e-79 to "1.729e-79" - converts 1.729e-276 to "1.729e-276" converts 1.729e-276 to "1.729e-276" - converts 1.729e-104 to "1.729e-104" converts 1.729e-104 to "1.729e-104" - converts 1.729e+239 to "1.729e+239" converts 1.729e+239 to "1.729e+239" - converts 1.729e+173 to "1.729e+173" converts 1.729e+173 to "1.729e+173" - converts 1.729e-151 to "1.729e-151" converts 1.729e-151 to "1.729e-151" - converts 1.729e+134 to "1.729e+134" converts 1.729e+134 to "1.729e+134" - converts 1.729e+57 to "1.729e+57" converts 1.729e+57 to "1.729e+57" - converts 1.729e-222 to "1.729e-222" converts 1.729e-222 to "1.729e-222" - converts 1.729e-95 to "1.729e-95" converts 1.729e-95 to "1.729e-95" - converts 1.729e-20 to "1.729e-20" converts 1.729e-20 to "1.729e-20" - converts 1.729e-12 to "1.729e-12" converts 1.729e-12 to "1.729e-12" - converts 1.729e+226 to "1.729e+226" converts 1.729e+226 to "1.729e+226" - converts 1.729e-295 to "1.729e-295" converts 1.729e-295 to "1.729e-295" - converts 1.729e+16 to "1.729e+16" converts 1.729e+16 to "1.729e+16" - converts 1.729e+71 to "1.729e+71" converts 1.729e+71 to "1.729e+71" - converts 1.729e-50 to "1.729e-50" converts 1.729e-50 to "1.729e-50" - converts 1.729e-132 to "1.729e-132" converts 1.729e-132 to "1.729e-132" - converts 1.729e+139 to "1.729e+139" converts 1.729e+139 to "1.729e+139" - converts 1.729e+83 to "1.729e+83" converts 1.729e+83 to "1.729e+83" - converts 1.729e+115 to "1.729e+115" converts 1.729e+115 to "1.729e+115" - converts 1.729e+294 to "1.729e+294" converts 1.729e+294 to "1.729e+294" - converts 1.729e-86 to "1.729e-86" converts 1.729e-86 to "1.729e-86" - converts 1.729e+190 to "1.729e+190" converts 1.729e+190 to "1.729e+190" - converts 1.729e+289 to "1.729e+289" converts 1.729e+289 to "1.729e+289" - converts 1.729e-316 to "1.729e-316" converts 1.729e-316 to "1.729e-316" - converts 1.729e+307 to "1.729e+307" converts 1.729e+307 to "1.729e+307" - converts 1.729e+216 to "1.729e+216" converts 1.729e+216 to "1.729e+216" - converts 1.729e-77 to "1.729e-77" converts 1.729e-77 to "1.729e-77" - converts 1.729e+278 to "1.729e+278" converts 1.729e+278 to "1.729e+278" - converts 1.729e-49 to "1.729e-49" converts 1.729e-49 to "1.729e-49" - converts 1.729e+164 to "1.729e+164" converts 1.729e+164 to "1.729e+164" - converts 1.729e-176 to "1.729e-176" converts 1.729e-176 to "1.729e-176" - converts 1.729e-135 to "1.729e-135" converts 1.729e-135 to "1.729e-135" - converts 1.729e-231 to "1.729e-231" converts 1.729e-231 to "1.729e-231" - converts 1.729e+212 to "1.729e+212" converts 1.729e+212 to "1.729e+212" - converts 1.729e-48 to "1.729e-48" converts 1.729e-48 to "1.729e-48" - converts 1.729e-68 to "1.729e-68" converts 1.729e-68 to "1.729e-68" - converts 1.729e+150 to "1.729e+150" converts 1.729e+150 to "1.729e+150" - converts 1.729e+133 to "1.729e+133" converts 1.729e+133 to "1.729e+133" - converts 1.729e-105 to "1.729e-105" converts 1.729e-105 to "1.729e-105" - converts 1.729e-246 to "1.729e-246" converts 1.729e-246 to "1.729e-246" - converts 1.729e+286 to "1.729e+286" converts 1.729e+286 to "1.729e+286" - converts 1.729e+213 to "1.729e+213" converts 1.729e+213 to "1.729e+213" - converts 1.729e+303 to "1.729e+303" converts 1.729e+303 to "1.729e+303" - converts 1.729e-251 to "1.729e-251" converts 1.729e-251 to "1.729e-251" - converts 1.729e+58 to "1.729e+58" converts 1.729e+58 to "1.729e+58" - converts 1.729e+267 to "1.729e+267" converts 1.729e+267 to "1.729e+267" - converts 1.729e-128 to "1.729e-128" converts 1.729e-128 to "1.729e-128" - converts 1.729e+250 to "1.729e+250" converts 1.729e+250 to "1.729e+250" - converts 1.729e+191 to "1.729e+191" converts 1.729e+191 to "1.729e+191" - converts 1.729e-54 to "1.729e-54" converts 1.729e-54 to "1.729e-54" - converts 1.729e+56 to "1.729e+56" converts 1.729e+56 to "1.729e+56" - converts 1.729e+229 to "1.729e+229" converts 1.729e+229 to "1.729e+229" - converts 1.729e+82 to "1.729e+82" converts 1.729e+82 to "1.729e+82" - converts 1.729e+284 to "1.729e+284" converts 1.729e+284 to "1.729e+284" - converts 1.729e-5 to "1.729e-5" converts 1.729e-5 to "1.729e-5" - converts 1.729e-160 to "1.729e-160" converts 1.729e-160 to "1.729e-160" - converts 1.729e+138 to "1.729e+138" converts 1.729e+138 to "1.729e+138" - converts 1.729e-313 to "1.729e-313" converts 1.729e-313 to "1.729e-313" - converts 1.729e+135 to "1.729e+135" converts 1.729e+135 to "1.729e+135" - converts 1.729e+276 to "1.729e+276" converts 1.729e+276 to "1.729e+276" - converts 1.729e-273 to "1.729e-273" converts 1.729e-273 to "1.729e-273" - converts 1.729e+296 to "1.729e+296" converts 1.729e+296 to "1.729e+296" - converts 1.729e-152 to "1.729e-152" converts 1.729e-152 to "1.729e-152" - converts 1.729e-159 to "1.729e-159" converts 1.729e-159 to "1.729e-159" - converts 1.729e-311 to "1.729e-311" converts 1.729e-311 to "1.729e-311" - converts 1.729e+166 to "1.729e+166" converts 1.729e+166 to "1.729e+166" - converts 1.729e-7 to "1.729e-7" converts 1.729e-7 to "1.729e-7" - converts 1.729e+183 to "1.729e+183" converts 1.729e+183 to "1.729e+183" - converts 1.729e-214 to "1.729e-214" converts 1.729e-214 to "1.729e-214" - converts 1.729e-149 to "1.729e-149" converts 1.729e-149 to "1.729e-149" - converts 1.729e+208 to "1.729e+208" converts 1.729e+208 to "1.729e+208" - converts 1.729e-194 to "1.729e-194" converts 1.729e-194 to "1.729e-194" - converts 1.729e+182 to "1.729e+182" converts 1.729e+182 to "1.729e+182" - converts 1.729e-225 to "1.729e-225" converts 1.729e-225 to "1.729e-225" - converts 1.729e-106 to "1.729e-106" converts 1.729e-106 to "1.729e-106" - converts 1.729e-25 to "1.729e-25" converts 1.729e-25 to "1.729e-25" - converts 1.729e+248 to "1.729e+248" converts 1.729e+248 to "1.729e+248" - converts 1.729e+198 to "1.729e+198" converts 1.729e+198 to "1.729e+198" - converts 1.729e+240 to "1.729e+240" converts 1.729e+240 to "1.729e+240" - converts 1.729e-278 to "1.729e-278" converts 1.729e-278 to "1.729e-278" - converts 1.729e-272 to "1.729e-272" converts 1.729e-272 to "1.729e-272" - converts 1.729e+262 to "1.729e+262" converts 1.729e+262 to "1.729e+262" - converts 1.729e+0 to "1.729" converts 1.729e+0 to "1.729" - converts 1.729e+220 to "1.729e+220" converts 1.729e+220 to "1.729e+220" - converts 1.729e-26 to "1.729e-26" converts 1.729e-26 to "1.729e-26" - converts 1.729e-283 to "1.729e-283" converts 1.729e-283 to "1.729e-283" - converts 1.729e-232 to "1.729e-232" converts 1.729e-232 to "1.729e-232" - converts 1.729e+152 to "1.729e+152" converts 1.729e+152 to "1.729e+152" - converts 1.729e+264 to "1.729e+264" converts 1.729e+264 to "1.729e+264" - converts 1.729e-83 to "1.729e-83" converts 1.729e-83 to "1.729e-83" - converts 1.729e+54 to "1.729e+54" converts 1.729e+54 to "1.729e+54" - converts 1.729e-73 to "1.729e-73" converts 1.729e-73 to "1.729e-73" - converts 1.729e+304 to "1.729e+304" converts 1.729e+304 to "1.729e+304" - converts 1.729e-287 to "1.729e-287" converts 1.729e-287 to "1.729e-287" - converts 1.729e-98 to "1.729e-98" converts 1.729e-98 to "1.729e-98" - converts 1.729e-249 to "1.729e-249" converts 1.729e-249 to "1.729e-249" - converts 1.729e-75 to "1.729e-75" converts 1.729e-75 to "1.729e-75" - converts 1.729e-279 to "1.729e-279" converts 1.729e-279 to "1.729e-279" - converts 1.729e+129 to "1.729e+129" converts 1.729e+129 to "1.729e+129" - converts 1.729e-142 to "1.729e-142" converts 1.729e-142 to "1.729e-142" - converts 1.729e+91 to "1.729e+91" converts 1.729e+91 to "1.729e+91" - converts 1.729e-198 to "1.729e-198" converts 1.729e-198 to "1.729e-198" - converts 1.729e+21 to "1.729e+21" converts 1.729e+21 to "1.729e+21" - converts 1.729e+156 to "1.729e+156" converts 1.729e+156 to "1.729e+156" - converts 1.729e+22 to "1.729e+22" converts 1.729e+22 to "1.729e+22" - converts 1.729e-172 to "1.729e-172" converts 1.729e-172 to "1.729e-172" - converts 1.729e+282 to "1.729e+282" converts 1.729e+282 to "1.729e+282" - converts 1.729e-109 to "1.729e-109" converts 1.729e-109 to "1.729e-109" - converts 1.729e-229 to "1.729e-229" converts 1.729e-229 to "1.729e-229" - converts 1.729e-200 to "1.729e-200" converts 1.729e-200 to "1.729e-200" - converts 1.729e+7 to "17290000.0" converts 1.729e+7 to "17290000.0" - converts 1.729e-166 to "1.729e-166" converts 1.729e-166 to "1.729e-166" - converts 1.729e-139 to "1.729e-139" converts 1.729e-139 to "1.729e-139" - converts 1.729e-69 to "1.729e-69" converts 1.729e-69 to "1.729e-69" - converts 1.729e-110 to "1.729e-110" converts 1.729e-110 to "1.729e-110" - converts 1.729e-14 to "1.729e-14" converts 1.729e-14 to "1.729e-14" - converts 1.729e-2 to "0.01729" converts 1.729e-2 to "0.01729" - converts 1.729e-157 to "1.729e-157" converts 1.729e-157 to "1.729e-157" - converts 1.729e+94 to "1.729e+94" converts 1.729e+94 to "1.729e+94" - converts 1.729e+206 to "1.729e+206" converts 1.729e+206 to "1.729e+206" - converts 1.729e+88 to "1.729e+88" converts 1.729e+88 to "1.729e+88" - converts 1.729e-208 to "1.729e-208" converts 1.729e-208 to "1.729e-208" - converts 1.729e+155 to "1.729e+155" converts 1.729e+155 to "1.729e+155" - converts 1.729e-96 to "1.729e-96" converts 1.729e-96 to "1.729e-96" - converts 1.729e+128 to "1.729e+128" converts 1.729e+128 to "1.729e+128" - converts 1.729e-153 to "1.729e-153" converts 1.729e-153 to "1.729e-153" - converts 1.729e-62 to "1.729e-62" converts 1.729e-62 to "1.729e-62" - converts 1.729e-119 to "1.729e-119" converts 1.729e-119 to "1.729e-119" - converts 1.729e-266 to "1.729e-266" converts 1.729e-266 to "1.729e-266" - converts 1.729e-167 to "1.729e-167" converts 1.729e-167 to "1.729e-167" - converts 1.729e-188 to "1.729e-188" converts 1.729e-188 to "1.729e-188" - converts 1.729e-92 to "1.729e-92" converts 1.729e-92 to "1.729e-92" - converts 1.729e+53 to "1.729e+53" converts 1.729e+53 to "1.729e+53" - converts 1.729e+93 to "1.729e+93" converts 1.729e+93 to "1.729e+93" - converts 1.729e-18 to "1.729e-18" converts 1.729e-18 to "1.729e-18" - converts 1.729e+251 to "1.729e+251" converts 1.729e+251 to "1.729e+251" - converts 1.729e-125 to "1.729e-125" converts 1.729e-125 to "1.729e-125" - converts 1.729e-140 to "1.729e-140" converts 1.729e-140 to "1.729e-140" - converts 1.729e-146 to "1.729e-146" converts 1.729e-146 to "1.729e-146" - converts 1.729e+146 to "1.729e+146" converts 1.729e+146 to "1.729e+146" - converts 1.729e+70 to "1.729e+70" converts 1.729e+70 to "1.729e+70" - converts 1.729e+285 to "1.729e+285" converts 1.729e+285 to "1.729e+285" - converts 1.729e-312 to "1.729e-312" converts 1.729e-312 to "1.729e-312" - converts 1.729e-289 to "1.729e-289" converts 1.729e-289 to "1.729e-289" - converts 1.729e+178 to "1.729e+178" converts 1.729e+178 to "1.729e+178" - converts 1.729e+241 to "1.729e+241" converts 1.729e+241 to "1.729e+241" - converts 1.729e-46 to "1.729e-46" converts 1.729e-46 to "1.729e-46" - converts 1.729e+109 to "1.729e+109" converts 1.729e+109 to "1.729e+109" - converts 1.729e-252 to "1.729e-252" converts 1.729e-252 to "1.729e-252" - converts 1.729e-320 to "1.729e-320" converts 1.729e-320 to "1.729e-320" - converts 1.729e-129 to "1.729e-129" converts 1.729e-129 to "1.729e-129" - converts 1.729e+97 to "1.729e+97" converts 1.729e+97 to "1.729e+97" - converts 1.729e-322 to "1.73e-322" converts 1.729e-322 to "1.73e-322" - converts 1.729e-290 to "1.729e-290" converts 1.729e-290 to "1.729e-290" - converts 1.729e-307 to "1.729e-307" converts 1.729e-307 to "1.729e-307" - converts 1.729e-130 to "1.729e-130" converts 1.729e-130 to "1.729e-130" - converts 1.729e-6 to "1.729e-6" converts 1.729e-6 to "1.729e-6" - converts 1.729e+14 to "172900000000000.0" converts 1.729e+14 to "172900000000000.0" - converts 1.729e-121 to "1.729e-121" converts 1.729e-121 to "1.729e-121" - converts 1.729e+234 to "1.729e+234" converts 1.729e+234 to "1.729e+234" - converts 1.729e-242 to "1.729e-242" converts 1.729e-242 to "1.729e-242" - converts 1.729e-155 to "1.729e-155" converts 1.729e-155 to "1.729e-155" - converts 1.729e+99 to "1.729e+99" converts 1.729e+99 to "1.729e+99" - Ryu d2s_test.cc SmallIntegers - converts 9007199254740991.0 to "9.007199254740991e+15" converts 9007199254740991.0 to "9.007199254740991e+15" - converts 9007199254740992.0 to "9.007199254740992e+15" converts 9007199254740992.0 to "9.007199254740992e+15" - converts 1.234567895 to "1.234567895" converts 1.234567895 to "1.234567895" - converts 1000000000001000.0 to "1.000000000001e+15" converts 1000000000001000.0 to "1.000000000001e+15" - converts 1234567890.0 to "1234567890.0" converts 1234567890.0 to "1234567890.0" - converts 12345678901234.0 to "12345678901234.0" converts 12345678901234.0 to "12345678901234.0" - converts 1000000100000000.0 to "1.0000001e+15" converts 1000000100000000.0 to "1.0000001e+15" - converts 1000000000000010.0 to "1.00000000000001e+15" converts 1000000000000010.0 to "1.00000000000001e+15" - converts 10000000000000.0 to "10000000000000.0" converts 10000000000000.0 to "10000000000000.0" - converts 123456789012345.0 to "123456789012345.0" converts 123456789012345.0 to "123456789012345.0" - converts 8000.0 to "8000.0" converts 8000.0 to "8000.0" - converts 1000000.0 to "1000000.0" converts 1000000.0 to "1000000.0" - Ryu d2s_test.cc LotsOfTrailingZeros - converts 2.98023223876953125e-8 to "2.9802322387695312e-8" converts 2.98023223876953125e-8 to "2.9802322387695312e-8" - converts 1234567890123.0 to "1234567890123.0" converts 1234567890123.0 to "1234567890123.0" - odd mantissas (unaffected by shifting) - converts 115292150459e7 to "1.15292150459e+18" converts 115292150459e7 to "1.15292150459e+18" - converts 81192061763584e18 to "8.1192061763584e+31" converts 81192061763584e18 to "8.1192061763584e+31" - converts 2361e18 to "2.361e+21" converts 2361e18 to "2.361e+21" - converts 2882303761517e5 to "2.882303761517e+17" converts 2882303761517e5 to "2.882303761517e+17" - converts 302230528e15 to "3.02230528e+23" converts 302230528e15 to "3.02230528e+23" - converts 36893489e12 to "3.6893489e+19" converts 36893489e12 to "3.6893489e+19" - converts 360287970189639e2 to "3.60287970189639e+16" converts 360287970189639e2 to "3.60287970189639e+16" - converts 72057594037927e3 to "7.2057594037927e+16" converts 72057594037927e3 to "7.2057594037927e+16" - converts 4611686019e9 to "4.611686019e+18" converts 4611686019e9 to "4.611686019e+18" - converts 23058430091e8 to "2.3058430091e+18" converts 23058430091e8 to "2.3058430091e+18" - converts 302232576e15 to "3.02232576e+23" converts 302232576e15 to "3.02232576e+23" - converts 14411518807587e4 to "1.4411518807587e+17" converts 14411518807587e4 to "1.4411518807587e+17" - converts 4611686017e9 to "4.611686017e+18" converts 4611686017e9 to "4.611686017e+18" - converts 2882303761519e5 to "2.882303761519e+17" converts 2882303761519e5 to "2.882303761519e+17" - converts 7378697e13 to "7.378697e+19" converts 7378697e13 to "7.378697e+19" - converts 11807e17 to "1.1807e+21" converts 11807e17 to "1.1807e+21" - converts 59031e16 to "5.9031e+20" converts 59031e16 to "5.9031e+20" - converts 295147e15 to "2.95147e+20" converts 295147e15 to "2.95147e+20" - converts 1475739e14 to "1.475739e+20" converts 1475739e14 to "1.475739e+20" - converts 471e19 to "4.71e+21" converts 471e19 to "4.71e+21" - converts 81123342286848e18 to "8.1123342286848e+31" converts 81123342286848e18 to "8.1123342286848e+31" - converts 17e21 to "1.7e+22" converts 17e21 to "1.7e+22" - converts 576460752303e6 to "5.76460752303e+17" converts 576460752303e6 to "5.76460752303e+17" - converts 11805e17 to "1.1805e+21" converts 11805e17 to "1.1805e+21" - converts 922337205e10 to "9.22337205e+18" converts 922337205e10 to "9.22337205e+18" - converts 36893487e12 to "3.6893487e+19" converts 36893487e12 to "3.6893487e+19" - converts 360287970189641e2 to "3.60287970189641e+16" converts 360287970189641e2 to "3.60287970189641e+16" - converts 115292150461e7 to "1.15292150461e+18" converts 115292150461e7 to "1.15292150461e+18" - converts 473e19 to "4.73e+21" converts 473e19 to "4.73e+21" - converts 95e20 to "9.5e+21" converts 95e20 to "9.5e+21" - converts 576460752305e6 to "5.76460752305e+17" converts 576460752305e6 to "5.76460752305e+17" - converts 7378699e13 to "7.378699e+19" converts 7378699e13 to "7.378699e+19" - converts 1801439850948197e1 to "1.801439850948197e+16" converts 1801439850948197e1 to "1.801439850948197e+16" - converts 59029e16 to "5.9029e+20" converts 59029e16 to "5.9029e+20" - converts 295149e15 to "2.95149e+20" converts 295149e15 to "2.95149e+20" - converts 184467439e11 to "1.84467439e+19" converts 184467439e11 to "1.84467439e+19" - converts 72057594037929e3 to "7.2057594037929e+16" converts 72057594037929e3 to "7.2057594037929e+16" - converts 3e22 to "3.0e+22" converts 3e22 to "3.0e+22" - converts 2363e18 to "2.363e+21" converts 2363e18 to "2.363e+21" - converts 23058430093e8 to "2.3058430093e+18" converts 23058430093e8 to "2.3058430093e+18" - converts 184467441e11 to "1.84467441e+19" converts 184467441e11 to "1.84467441e+19" - converts 1475741e14 to "1.475741e+20" converts 1475741e14 to "1.475741e+20" - converts 19e21 to "1.9e+22" converts 19e21 to "1.9e+22" - converts 14411518807585e4 to "1.4411518807585e+17" converts 14411518807585e4 to "1.4411518807585e+17" - converts 1801439850948199e1 to "1.801439850948199e+16" converts 1801439850948199e1 to "1.801439850948199e+16" - converts 5e22 to "5.0e+22" converts 5e22 to "5.0e+22" - converts 93e20 to "9.3e+21" converts 93e20 to "9.3e+21" - converts 922337203e10 to "9.22337203e+18" converts 922337203e10 to "9.22337203e+18" -StringPool - gets string gets string - #get? #get? - doesn't fail if initial capacity is not a power of 2 doesn't fail if initial capacity is not a power of 2 - doesn't fail if initial capacity is too small doesn't fail if initial capacity is too small - gets slice gets slice - gets pointer with size gets pointer with size - gets string IO gets string IO - can be created with larger initial capacity can be created with larger initial capacity - is empty is empty - puts many puts many -OAuth::Signature - base string - computes with port in host computes with port in host - computes when TLS computes when TLS - computes without port in host computes without port in host - key - gets when token secret is empty gets when token secret is empty - gets when token secret is not empty gets when token secret is not empty - does twitter sample does twitter sample -Proc - does == does == - #arity #arity - does to_s when closured does to_s when closured - does new does new - clones clones - gets closure data for closure gets closure data for closure - does to_s(io) when closured does to_s(io) when closured - does to_s does to_s - #partial #partial - gets closure data for non-closure gets closure data for non-closure - gets pointer gets pointer - does to_s(io) does to_s(io) -ENV - gets non existent key as nilable gets non existent key as nilable - gets non existent key raises gets non existent key raises - sets to empty string sets to empty string - does .values does .values - fetch - fetches and raises fetches and raises - fetches with block fetches with block - fetches with one argument fetches with one argument - fetches with default value fetches with default value - fetches arbitrary default value fetches arbitrary default value - handles unicode handles unicode - does has_key? does has_key? - does not have an empty key does not have an empty key - does .keys does .keys - []= - disallows NUL-bytes in value disallows NUL-bytes in value - disallows NUL-bytes in key if value is nil disallows NUL-bytes in key if value is nil - disallows NUL-bytes in key disallows NUL-bytes in key - #to_h #to_h - sets and gets case-sensitive sets and gets case-sensitive - set and gets set and gets - sets to nil (same as delete) sets to nil (same as delete) - deletes a key deletes a key -OpenSSL::Cipher - encrypts/decrypts encrypts/decrypts - authenticated? authenticated? -File - exists? - follows symlinks follows symlinks - gives false gives false - gives true gives true - gives false when a component of the path is a file gives false when a component of the path is a file - raises when writing to a file with no permission raises when writing to a file with no permission - symlink? - gives false gives false - gives false when the symlink doesn't exist gives false when the symlink doesn't exist - gives false when a component of the path is a file gives false when a component of the path is a file - iterates with each_byte iterates with each_byte - File::Info - gets for open file gets for open file - .writable? - gives false when the file has no write permissions gives false when the file has no write permissions - gives false when a component of the path is a file gives false when a component of the path is a file - gives false when the file doesn't exist gives false when the file doesn't exist - follows symlinks follows symlinks - gives true gives true - gives false when the symbolic link destination doesn't exist gives false when the symbolic link destination doesn't exist - tests equal for the same directory tests equal for the same directory - gets for this file gets for this file - .executable? - follows symlinks follows symlinks - gives true gives true - gives false gives false - gives false when the file doesn't exist gives false when the file doesn't exist - gives false when a component of the path is a file gives false when a component of the path is a file - gets for a character device gets for a character device - tests unequal for different files tests unequal for different files - .readable? - gives false when the symbolic link destination doesn't exist gives false when the symbolic link destination doesn't exist - gives false when a component of the path is a file gives false when a component of the path is a file - follows symlinks follows symlinks - gives true gives true - gives false when the file has no read permissions gives false when the file has no read permissions - gives false when the file has no permissions gives false when the file has no permissions - gives false when the file doesn't exist gives false when the file doesn't exist - tests equal for the same file tests equal for the same file - gets for non-existent file and raises gets for non-existent file and raises - tests unequal for file and directory tests unequal for file and directory - gets for a symlink gets for a symlink - gets for pipe gets for pipe - gets mtime for new file gets mtime for new file - gets for this directory gets for this directory - File::Permissions - does to_s does to_s - reads lines from file with each reads lines from file with each - blocking - reads non-blocking file reads non-blocking file - opens fifo file as non-blocking opens fifo file as non-blocking - opens regular file as blocking opens regular file as blocking - writes and reads large non-blocking file writes and reads large non-blocking file - opens character device opens character device - opens regular file as non-blocking opens regular file as non-blocking - raises when reading a file with no permission raises when reading a file with no permission - opens with perm (int) opens with perm (int) - encoding - opens with encoding opens with encoding - does each line with encoding does each line with encoding - reads with encoding reads with encoding - reads lines with encoding reads lines with encoding - writes with encoding writes with encoding - opens with perm (File::Permissions) opens with perm (File::Permissions) - gets basename removing suffix gets basename removing suffix - .delete - raises when file doesn't exist raises when file doesn't exist - deletes a file deletes a file - deletes? a file deletes? a file - deletes a symlink directory deletes a symlink directory - deletes a read-only file deletes a read-only file - deletes an open file deletes an open file - .same_content? - compares two different files compares two different files - compares two equal files compares two equal files - does not overwrite existing content in append mode does not overwrite existing content in append mode - clears the read buffer after a seek clears the read buffer after a seek - gets path gets path - supports the `b` mode flag supports the `b` mode flag - directory? - gives false when the directory doesn't exist gives false when the directory doesn't exist - gives true gives true - gives false gives false - gives false when a component of the path is a file gives false when a component of the path is a file - closed stream - raises if writing on a closed stream raises if writing on a closed stream - flock - blocking: false - #flock_shared soft blocking fiber #flock_shared soft blocking fiber - #flock_exclusive soft blocking fiber #flock_exclusive soft blocking fiber - #flock_shared #flock_shared - blocking: true - #flock_shared soft blocking fiber #flock_shared soft blocking fiber - #flock_exclusive soft blocking fiber #flock_exclusive soft blocking fiber - #flock_shared #flock_shared - #flock_exclusive #flock_exclusive - close - does to_s when closed does to_s when closed - should not raise when closing twice should not raise when closing twice - is closed when closed is closed when closed - is not closed when opening is not closed when opening - chown chown - truncates file opened in append mode (#14702) truncates file opened in append mode (#14702) - iterates with each_char iterates with each_char - rename - renames a File instance renames a File instance - replaces a file replaces a file - raises if old file doesn't exist raises if old file doesn't exist - renames a file renames a file - #realpath - expands paths of symlinks expands paths of symlinks - raises if file doesn't exist raises if file doesn't exist - expands multiple layers of symlinks expands multiple layers of symlinks - expands paths for normal files expands paths for normal files - gets dirname gets dirname - .expand_path - converts a pathname to an absolute pathname converts a pathname to an absolute pathname - empty? - raises an error when the file does not exist raises an error when the file does not exist - gives false when file is not empty gives false when file is not empty - gives true when file is empty gives true when file is empty - raises an error when a component of the path is a file raises an error when a component of the path is a file - returns the current write position with tell returns the current write position with tell - .copy - copies a file copies a file - overwrites existing destination and permissions overwrites existing destination and permissions - copies permissions copies permissions - does to_s and inspect does to_s and inspect - file? - gives true gives true - gives false with dir gives false with dir - gives false when a component of the path is a file gives false when a component of the path is a file - gives false when the file doesn't exist gives false when the file doesn't exist - same? - compares following symlinks only if requested compares following symlinks only if requested - .touch - raises if path contains non-existent directory raises if path contains non-existent directory - touches existing - directory directory - file file - raises if file cannot be accessed raises if file cannot be accessed - sets file times to current time if no time argument given sets file times to current time if no time argument given - creates file if it doesn't exist creates file if it doesn't exist - sets file times to given time sets file times to given time - reads lines from file with chomp = false reads lines from file with chomp = false - returns the current read position with tell returns the current read position with tell - .match? - alternates alternates - matches multiple expansions matches multiple expansions - special chars special chars - * don't match path separator * don't match path separator - escape escape - classes escapes classes escapes - matches basics matches basics - ** matches path separator ** matches path separator - matches unicode characters matches unicode characters - classes classes - reads lines from file with each, chomp = false reads lines from file with each, chomp = false - returns the actual position with tell after append returns the actual position with tell after append - #delete - deletes deletes - gets extname gets extname - link - creates a hard link creates a hard link - truncate - requires a file opened for writing requires a file opened for writing - truncates completely when no size is passed truncates completely when no size is passed - truncates truncates - rewinds rewinds - utime - sets times with class method sets times with class method - sets times with instance method sets times with instance method - raises if file not found raises if file not found - size - raises an error when the file does not exist raises an error when the file does not exist - raises an error when a component of the path is a file raises an error when a component of the path is a file - assert assert - assert assert - reads entire file reads entire file - seeks from the current position seeks from the current position - raises on null byte - errors on dirname errors on dirname - errors on executable? errors on executable? - errors on join errors on join - errors on symlink, first arg errors on symlink, first arg - errors on rename (second arg) errors on rename (second arg) - errors on size errors on size - errors on extname errors on extname - errors on rename (first arg) errors on rename (first arg) - errors on basename errors on basename - errors on expand_path, first arg errors on expand_path, first arg - errors on expand_path, second arg errors on expand_path, second arg - errors on readable? errors on readable? - errors on directory? errors on directory? - errors on writable? errors on writable? - errors on info? errors on info? - errors on link, first arg errors on link, first arg - errors on info errors on info - errors on symlink, second arg errors on symlink, second arg - errors on basename 2, second arg errors on basename 2, second arg - errors on new errors on new - errors on link, second arg errors on link, second arg - errors on symlink? errors on symlink? - errors on file? errors on file? - errors on basename 2, first arg errors on basename 2, first arg - errors on delete errors on delete - errors on exists? errors on exists? - write - can write to a file can write to a file - can create a new file in append mode can create a new file in append mode - writes io writes io - can append to an existing file can append to an existing file - raises if trying to write to a file not opened for writing raises if trying to write to a file not opened for writing - writes bytes writes bytes - raises if invoking tell with a closed file raises if invoking tell with a closed file - gets basename gets basename - chmod - changes file permissions with instance method changes file permissions with instance method - raises when destination doesn't exist raises when destination doesn't exist - can take File::Permissions can take File::Permissions - changes dir permissions changes dir permissions - follows symlinks follows symlinks - changes file permissions with class method changes file permissions with class method - reads lines from file reads lines from file - raises if invoking seek with a closed file raises if invoking seek with a closed file - reads at offset reads at offset - raises if opening a non-existent file raises if opening a non-existent file - reads entire file from proc virtual filesystem reads entire file from proc virtual filesystem - locks file opened in append mode (#14702) locks file opened in append mode (#14702) - fsync - syncs OS file buffer to disk syncs OS file buffer to disk - can navigate with pos can navigate with pos - .readlink - reads link reads link - symlink - creates a symbolic link creates a symbolic link - works if destination contains forward slashes (#14520) works if destination contains forward slashes (#14520) - constructs a path from parts constructs a path from parts - raises when reading at offset outside of bounds raises when reading at offset outside of bounds -Crypto::Bcrypt::Base64 - decodes decodes - encodes encodes -Digest::CRC32 - calculates hash from string calculates hash from string - calculates hash from unicode string calculates hash from unicode string - #hexdigest can update within a loop from explicit expr (#9483) #hexdigest can update within a loop from explicit expr (#9483) - can't call final twice can't call final twice - #hexdigest can update within a loop by indirect expr (#9483) #hexdigest can update within a loop by indirect expr (#9483) - should be able to calculate crc32 combined should be able to calculate crc32 combined - return the digest size return the digest size - should be able to calculate crc32 should be able to calculate crc32 - calculates hash from UInt8 slices calculates hash from UInt8 slices - digest with file content digest with file content - resets resets - calculates base64'd hash from string calculates base64'd hash from string - .dup - leads to not sharing state leads to not sharing state - preserves value preserves value - leads to deterministic updates leads to deterministic updates - preserves type preserves type - calculates hash of #to_slice calculates hash of #to_slice - calculates digest from string calculates digest from string - can take a block can take a block - context are independent context are independent -BigFloat Math - .ilogb .ilogb - .sqrt .sqrt - .frexp .frexp - .logb .logb - .copysign .copysign - .scalbln .scalbln - .ldexp .ldexp - .scalbn .scalbn -Regex::MatchData - #inspect #inspect - #string #string - #pretty_print #pretty_print - #pre_match - works with unicode works with unicode - returns the part of the string before the match returns the part of the string before the match - returns an empty string when there's nothing before returns an empty string when there's nothing before - #== #== - #named_captures - gets a hash of named captures with optional gets a hash of named captures with optional - gets a hash of named captures gets a hash of named captures - gets a hash of named captures with duplicated name gets a hash of named captures with duplicated name - gets more than 127 named captures gets more than 127 named captures - #[] - Range - can use start and count can use start and count - can use range can use range - Int - raises exception on optional empty group raises exception on optional empty group - can use negative index can use negative index - captures empty group captures empty group - raises if outside match range with [] raises if outside match range with [] - raises if special variable accessed on invalid capture group raises if special variable accessed on invalid capture group - String - raises exception when named group doesn't exist raises exception when named group doesn't exist - capture named group capture named group - named groups with same prefix named groups with same prefix - captures duplicated named group captures duplicated named group - captures empty group captures empty group - raises exception on optional empty group raises exception on optional empty group - #byte_begin - with unmatched capture with unmatched capture - char index char index - #to_s #to_s - #captures - gets an array of unnamed captures gets an array of unnamed captures - doesn't get named captures when there are more than 255 doesn't get named captures when there are more than 255 - gets an array of unnamed captures with optional gets an array of unnamed captures with optional - #end - char index char index - no captures no captures - with capture with capture - with unmatched capture with unmatched capture - out of range out of range - #byte_end - char index char index - with unmatched capture with unmatched capture - #hash #hash - #begin - out of range out of range - char index char index - with capture with capture - no captures no captures - with unmatched capture with unmatched capture - #to_a - converts into an array converts into an array - converts into an array having nil converts into an array having nil - #[]? - Int - capture empty group capture empty group - returns nil if outside match range with [] returns nil if outside match range with [] - can use negative index can use negative index - capture optional empty group capture optional empty group - Range - can use start and count can use start and count - can use range can use range - String - capture empty group capture empty group - captures duplicated named group captures duplicated named group - capture optional empty group capture optional empty group - capture named group capture named group - returns nil exception when named group doesn't exist returns nil exception when named group doesn't exist - #regex #regex - #post_match - returns the part of the string after the match returns the part of the string after the match - works with unicode works with unicode - returns an empty string when there's nothing after returns an empty string when there's nothing after - #size #size - #to_h - converts into a hash with duplicated names converts into a hash with duplicated names - converts into a hash having nil converts into a hash having nil - converts into a hash converts into a hash -URI - serializes - #to_json #to_json - from_json_object_key? from_json_object_key? -#to_www_form - Time Time - Nil Nil - Bool Bool - String String - Enum Enum - Number Number - Array(T) - of a union of types of a union of types - of a single type of a single type -concurrent - accepts method call with receiver accepts method call with receiver - schedules intermitting sleeps schedules intermitting sleeps - spawn - spawns named with macro spawns named with macro - spawns named spawns named - uses spawn macro uses spawn macro -pp - can be used with tuples can be used with tuples -HTTP::Status - #client_error? - returns true when given 4xx status code returns true when given 4xx status code - returns false unless given 4xx status code returns false unless given 4xx status code - .new - returns an instance when given undefined status code returns an instance when given undefined status code - raises when given invalid status code raises when given invalid status code - returns an instance when given defined status code returns an instance when given defined status code - #server_error? - returns false unless given 5xx status code returns false unless given 5xx status code - returns true when given 5xx status code returns true when given 5xx status code - #code - returns the status code returns the status code - #redirection? - returns false unless given 3xx status code returns false unless given 3xx status code - returns true when given 3xx status code returns true when given 3xx status code - #success? - returns false unless given 2xx status code returns false unless given 2xx status code - returns true when given 2xx status code returns true when given 2xx status code - #description - returns default description for status 200 returns default description for status 200 - returns nil on non-existent status returns nil on non-existent status - #informational? - returns false unless given 1xx status code returns false unless given 1xx status code - returns true when given 1xx status code returns true when given 1xx status code -WaitGroup - #wait - immediately returns when counter is zero immediately returns when counter is zero - raises when counter is positive after wake up raises when counter is positive after wake up - immediately raises when counter is negative immediately raises when counter is negative - #add - can't decrement to a negative counter can't decrement to a negative counter - can't increment after reaching negative counter can't increment after reaching negative counter - resumes waiters when reaching negative counter resumes waiters when reaching negative counter - stress add/done/wait stress add/done/wait - waits until concurrent executions are finished waits until concurrent executions are finished - increments the counter from executing fibers increments the counter from executing fibers - takes a block to WaitGroup.wait takes a block to WaitGroup.wait - #done - resumes waiters when reaching negative counter resumes waiters when reaching negative counter - can't decrement to a negative counter can't decrement to a negative counter -Dir - gets dir iterator gets dir iterator - cd - accepts path accepts path - raises raises - accepts string accepts string - accepts a block with string accepts a block with string - accepts a block with path accepts a block with path - glob - tests a glob with recursion inside alternation tests a glob with recursion inside alternation - tests with relative path tests with relative path - matches symlink dir matches symlink dir - with path - windows path windows path - posix path posix path - tests with \ tests with \ - tests with relative path (starts with .) tests with relative path (starts with .) - tests with ** (same as *) tests with ** (same as *) - tests a recursive glob tests a recursive glob - root pattern root pattern - tests glob with a single pattern with extra slashes tests glob with a single pattern with extra slashes - tests with relative path starting recursive tests with relative path starting recursive - tests with relative path (starts with ..) tests with relative path (starts with ..) - tests glob with a single pattern with block tests glob with a single pattern with block - empty pattern empty pattern - pattern ending with */.. pattern ending with */.. - pattern ending with */. pattern ending with */. - pattern ending with . pattern ending with . - tests a recursive glob with alternation tests a recursive glob with alternation - tests double recursive matcher, multiple paths tests double recursive matcher, multiple paths - tests glob with multiple patterns tests glob with multiple patterns - tests with {} tests with {} - tests double recursive matcher (#10807) tests double recursive matcher (#10807) - tests glob with a single pattern tests glob with a single pattern - tests a recursive glob with nested alternations tests a recursive glob with nested alternations - tests with [] tests with [] - matches symlinks matches symlinks - tests with * tests with * - pattern ending with .. pattern ending with .. - match: :dot_files / match_hidden - ignores hidden files ignores hidden files - matches dot files matches dot files - ignores hidden files recursively ignores hidden files recursively - tests with */ tests with */ - tests a recursive glob with '?' tests a recursive glob with '?' - opens with open opens with open - tests exists? on nonexistent directory tests exists? on nonexistent directory - double close doesn't error double close doesn't error - lists children lists children - .delete - raises with an nonexistent path raises with an nonexistent path - raises with symlink directory raises with symlink directory - raises with a path that cannot be removed raises with a path that cannot be removed - deletes a read-only directory deletes a read-only directory - .current - follows $PWD follows $PWD - matches shell matches shell - tests exists? on existing directory tests exists? on existing directory - lists entries lists entries - .tempdir - returns default directory for tempfiles returns default directory for tempfiles - returns configure directory for tempfiles returns configure directory for tempfiles - does to_s does to_s - .mkdir_p - path exists - fails when path is a file fails when path is a file - noop when path is a directory noop when path is a directory - with a new path with a new path - tests mkdir and rmdir with a new path tests mkdir and rmdir with a new path - tests mkdir with an existing path tests mkdir with an existing path - opens with new opens with new - tests info on existing directory tests info on existing directory - tests exists? on existing file tests exists? on existing file - empty? - tests empty? on nonexistent directory tests empty? on nonexistent directory - tests empty? on a full directory tests empty? on a full directory - tests empty? on an empty directory tests empty? on an empty directory - tests empty? on a directory path to a file tests empty? on a directory path to a file - tests mkdir and delete with a new path tests mkdir and delete with a new path - #path - returns init value returns init value - gets child iterator gets child iterator - raises on null byte - errors on new errors on new - errors on mkdir_p errors on mkdir_p - errors on cd errors on cd - errors on delete errors on delete - errors on exists? errors on exists? - errors on mkdir errors on mkdir - tests exists? on a directory path to a file tests exists? on a directory path to a file - tests mkdir and delete? with a new path tests mkdir and delete? with a new path -Spec::RootContext - #run_filters - by focus - on an example on an example - on a context on a context - by locations - on a context's start line' on a context's start line' - in an example in an example - on an example's start line on an example's start line - between examples between examples - on an example's end line on an example's end line - on a context's end line' on a context's end line' - by line - between examples between examples - on an example's start line on an example's start line - in an example in an example - on an example's end line on an example's end line - on a context's end line' on a context's end line' - on a context's start line' on a context's start line' - by tags - on an example on an example - on a context on a context - by anti_tags - on a context on a context - on an example on an example - by pattern - on a context on a context - on an example on an example -select - non-blocking raise-on-close multi-channel - types and exec when (2) types and exec when (2) - raises if channel was closed (1) raises if channel was closed (1) - exec else if no message was ready exec else if no message was ready - raises if channel was closed (2) raises if channel was closed (2) - types and exec when (1) types and exec when (1) - select many receivers select many receivers - blocking nil-on-close single-channel - types and exec when types and exec when - types and exec when with nil if channel was closed types and exec when with nil if channel was closed - select fiber has one chance to be enqueued into scheduler (1) select fiber has one chance to be enqueued into scheduler (1) - select same channel multiple times select same channel multiple times - blocking raise-on-close single-channel - types and exec when types and exec when - raises if channel was closed raises if channel was closed - select many receivers, senders select many receivers, senders - stress select with send/receive in multiple fibers stress select with send/receive in multiple fibers - blocking nil-on-close multi-channel - types and exec when (1) types and exec when (1) - types and exec when with nil if channel is closed while waiting (1) types and exec when with nil if channel is closed while waiting (1) - types and exec when with nil if channel is closed while waiting (2) types and exec when with nil if channel is closed while waiting (2) - types and exec when with nil if channel was closed (1) types and exec when with nil if channel was closed (1) - types and exec when (2) types and exec when (2) - types and exec when with nil if channel was closed (2) types and exec when with nil if channel was closed (2) - prioritize by order when entering in a select prioritize by order when entering in a select - blocking raise-on-close multi-channel - types and exec when (2) types and exec when (2) - raises if channel was closed (1) raises if channel was closed (1) - raises if channel was closed (2) raises if channel was closed (2) - types and exec when (1) types and exec when (1) - non-blocking nil-on-close multi-channel - types and exec when (2) types and exec when (2) - types and exec when with nil if channel is closed while waiting (2) types and exec when with nil if channel is closed while waiting (2) - types and exec when with nil if channel is closed while waiting (1) types and exec when with nil if channel is closed while waiting (1) - types and exec when (1) types and exec when (1) - types and exec when with nil if channel was closed (2) types and exec when with nil if channel was closed (2) - types and exec when with nil if channel was closed (1) types and exec when with nil if channel was closed (1) - exec else if no message was ready exec else if no message was ready - select fiber has one chance to be enqueued into scheduler (2) select fiber has one chance to be enqueued into scheduler (2) - non-blocking nil-on-close single-channel - types and exec when types and exec when - types and exec when with nil if channel was closed types and exec when with nil if channel was closed - exec else if no message was ready exec else if no message was ready - select should work with send which started before receive, fixed #3862 select should work with send which started before receive, fixed #3862 - non-blocking raise-on-close single-channel - exec else if no message was ready exec else if no message was ready - raises if channel was closed raises if channel was closed - types and exec when if message was ready types and exec when if message was ready - select many senders select many senders -__floatuntidf - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + for simple enum for simple enum + for flags enum for flags enum + for private enum for private enum + gets value gets value + values + for simple enum for simple enum + for flags enum for flags enum + has hash has hash + gets value with to_u<bit> gets value with to_u<bit> + #inspect + for flags enum for flags enum + for private enum for private enum + for simple enum for simple enum + .parse? .parse? + each + yields each member yields each member + won't yield All won't yield All + won't yield None won't yield None + private enum private enum + names + for simple enum for simple enum + for flags enum for flags enum + .[] + non-flags enum non-flags enum + flags enum flags enum + private flags enum private flags enum + gets value with to_i<bit> gets value with to_i<bit> + does - does - + valid? + for simple enum for simple enum + for Int64 enum for Int64 enum + for flags enum for flags enum + creates an enum instance from an auto-casted symbol (#8573) creates an enum instance from an auto-casted symbol (#8573) + from_value + for simple enum for simple enum + for flags enum for flags enum + for private enum for private enum + .flags + private flags enum private flags enum + non-flags enum non-flags enum + flags enum flags enum + sorts sorts + .parse .parse + from_value? + for flags enum for flags enum + for simple enum for simple enum + each + iterates each member iterates each member + iterates private enum members iterates private enum members + iterates each flag iterates each flag + does includes? does includes? + clones clones +BigFloat Math + .ilogb .ilogb + .logb .logb + .scalbln .scalbln + .ldexp .ldexp + .scalbn .scalbn + .copysign .copysign + .sqrt .sqrt + .frexp .frexp +Time::Span + test compare test compare + min milliseconds min milliseconds + min days min days + max milliseconds max milliseconds + test equals test equals + initializes with big seconds value initializes with big seconds value + #negative? #negative? + max seconds max seconds + arithmetic + #sign #sign + #/(self) #/(self) + #+ #+ + #- #- + #/(Number) #/(Number) + #* #* + negative timespan negative timespan + can substract big amount using milliseconds can substract big amount using milliseconds + converts units converts units + #step + "basic" yielding "basic" yielding + "basic" iterator "basic" iterator + test float extension methods test float extension methods + test properties test properties + test to_s test to_s + test negate and abs test negate and abs + min seconds min seconds + #zero? #zero? + test int extension methods test int extension methods + test hash code test hash code + can substract big amount using microseconds can substract big amount using microseconds + should sum should sum + initializes with type restrictions initializes with type restrictions + test totals test totals + days overflows days overflows + max days max days + initializes initializes + #positive? #positive? +Log::TestFormatter + formats formats +Thread::ConditionVariable + resumes before timeout resumes before timeout + timeouts timeouts + signals & broadcasts signals & broadcasts + signals signals +__divti3 passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests @@ -25795,6 +21838,122 @@ passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests +PROGRAM_NAME + works for UTF-8 name works for UTF-8 name +Proc + does to_s does to_s + does new does new + #arity #arity + does to_s when closured does to_s when closured + gets pointer gets pointer + does == does == + does to_s(io) does to_s(io) + does to_s(io) when closured does to_s(io) when closured + #partial #partial + gets closure data for closure gets closure data for closure + clones clones + gets closure data for non-closure gets closure data for non-closure +Time::Format + ISO_8601_DATE + parses ordinal date parses ordinal date + parses week date parses week date + parses calendar date parses calendar date + formats default format formats default format + RFC_3339 + parses regular format parses regular format + ISO_8601_DATE_TIME + parses ordinal date parses ordinal date + parses calendar date parses calendar date + parses hour parses hour + week date week date + formats default format formats default format + parses hour:minutes parses hour:minutes + parses decimal fractions parses decimal fractions + RFC_2822 + parses regular format parses regular format +Log::IOBackend + yields message yields message + logs context logs context + logs any object logs any object + uses custom formatter uses custom formatter + creates with defaults creates with defaults + logs messages logs messages + allows setting formatter in initializer allows setting formatter in initializer + formats message formats message +OpenSSL::Cipher + authenticated? authenticated? + encrypts/decrypts encrypts/decrypts +Log + level can be changed level can be changed + context can be changed within the block, yet it's not restored context can be changed within the block, yet it's not restored + Log::Severity + parses parses + values are ordered values are ordered + emitter dsl + can be used with message can be used with message + can be used with message and metadata explicitly can be used with message and metadata explicitly + does not emit anything when a nil is emitted does not emit anything when a nil is emitted + can be used with message and data via named tuple can be used with message and data via named tuple + can be used with data only explicitly can be used with data only explicitly + can be used with data only via named tuple can be used with data only via named tuple + can be used with message and exception can be used with message and exception + can be used with exception can be used with exception + can be used with message and data via named arguments can be used with message and data via named arguments + can be used with data only via named arguments can be used with data only via named arguments + context supports unsigned values context supports unsigned values + filter messages to the backend above level only filter messages to the backend above level only + contains the current context contains the current context + can attach exception to entries can attach exception to entries +HTTP::Cookie::Parser + parse_set_cookie + with space with space + parses expires rfc1036 parses expires rfc1036 + parses path parses path + parse domain as IP parse domain as IP + parses full parses full + parses cookie with spaces in value parses cookie with spaces in value + parses expires ansi c, variant with zone parses expires ansi c, variant with zone + parses expires rfc1123 parses expires rfc1123 + parses expires ansi c parses expires ansi c + parse max-age as Time::Span parse max-age as Time::Span + parses Secure parses Secure + SameSite + Invalid + parses samesite parses samesite + Strict + parses samesite parses samesite + Lax + parses samesite parses samesite + leading dots in domain names are ignored leading dots in domain names are ignored + parses domain parses domain + parses HttpOnly parses HttpOnly + strips spaces around value only when it's unquoted strips spaces around value only when it's unquoted + parses expires iis parses expires iis + removes leading and trailing whitespaces removes leading and trailing whitespaces + parse_cookies + parses key= parses key= + parses multiple cookies parses multiple cookies + strips spaces around value only when it's unquoted strips spaces around value only when it's unquoted + parses cookie with spaces in value parses cookie with spaces in value + parses key="value" parses key="value" + parses special character in name parses special character in name + parses key=value parses key=value + parses key=key%3Dvalue parses key=key%3Dvalue + parses key=key=value parses key=key=value + expired? + not expired with future max-age not expired with future max-age + expired with old expires date expired with old expires date + not expired when max-age and expires are not provided not expired when max-age and expires are not provided + expired when max-age=0 expired when max-age=0 + not expired with future expires not expired with future expires + expiration_time + sets future expiration_time with expires sets future expiration_time with expires + returns nil expiration_time when expires and max-age are not set returns nil expiration_time when expires and max-age are not set + sets expiration_time to be current when max-age=0 sets expiration_time to be current when max-age=0 + sets future expiration_time with max-age and future cookie creation time sets future expiration_time with max-age and future cookie creation time + sets future expiration_time with max-age sets future expiration_time with max-age + sets expiration_time with old date sets expiration_time with old date +__floatuntisf passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests @@ -25837,1310 +21996,168 @@ passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests -Hash - "#each_value" yielding "#each_value" yielding - dup - dups big hash dups big hash - dups empty hash dups empty hash - retains default block on dup retains default block on dup - dups small hash dups small hash - size - is the same as size is the same as size - compacts! compacts! - gets array of keys gets array of keys - transform values in place with keys included transform values in place with keys included - reject with non-equality key reject with non-equality key - #each_with_object - "passes memo, key and value into block" iterator "passes memo, key and value into block" iterator - reduces the hash to the accumulated value of memo reduces the hash to the accumulated value of memo - "passes memo, key and value into block" yielding "passes memo, key and value into block" yielding - key_for - raises when no key pairs with the given value raises when no key pairs with the given value - returns the first key with the given value returns the first key with the given value - if block is given, - returns the first key with the given value returns the first key with the given value - yields the argument if no hash key pairs with the value yields the argument if no hash key pairs with the value - []= - overrides value overrides value - "#each_with_index(offset)" iterator "#each_with_index(offset)" iterator - has_key? - doesn't have key doesn't have key - has key has key - == - compares hash of nested hash compares hash of nested hash +Dir + tests exists? on a directory path to a file tests exists? on a directory path to a file + .mkdir_p + with a new path with a new path + path exists + noop when path is a directory noop when path is a directory + fails when path is a file fails when path is a file + tests mkdir with an existing path tests mkdir with an existing path + opens with new opens with new + gets dir iterator gets dir iterator + tests mkdir and delete with a new path tests mkdir and delete with a new path + #path + returns init value returns init value + does to_s does to_s + lists children lists children + lists entries lists entries + cd + accepts string accepts string + accepts a block with string accepts a block with string + raises raises + accepts path accepts path + accepts a block with path accepts a block with path + double close doesn't error double close doesn't error + tests mkdir and rmdir with a new path tests mkdir and rmdir with a new path + gets child iterator gets child iterator + tests exists? on existing file tests exists? on existing file + empty? + tests empty? on an empty directory tests empty? on an empty directory + tests empty? on a directory path to a file tests empty? on a directory path to a file + tests empty? on a full directory tests empty? on a full directory + tests empty? on nonexistent directory tests empty? on nonexistent directory + .tempdir + returns configure directory for tempfiles returns configure directory for tempfiles + returns default directory for tempfiles returns default directory for tempfiles + .delete + raises with symlink directory raises with symlink directory + raises with an nonexistent path raises with an nonexistent path + raises with a path that cannot be removed raises with a path that cannot be removed + deletes a read-only directory deletes a read-only directory + tests mkdir and delete? with a new path tests mkdir and delete? with a new path + tests exists? on nonexistent directory tests exists? on nonexistent directory + raises on null byte + errors on exists? errors on exists? + errors on mkdir errors on mkdir + errors on delete errors on delete + errors on cd errors on cd + errors on mkdir_p errors on mkdir_p + errors on new errors on new + tests info on existing directory tests info on existing directory + opens with open opens with open + tests exists? on existing directory tests exists? on existing directory + glob + tests with * tests with * + tests with [] tests with [] + matches symlink dir matches symlink dir + tests with */ tests with */ + pattern ending with .. pattern ending with .. + tests a recursive glob with '?' tests a recursive glob with '?' + tests with {} tests with {} + tests a recursive glob with alternation tests a recursive glob with alternation + tests with relative path tests with relative path + tests a glob with recursion inside alternation tests a glob with recursion inside alternation + tests a recursive glob tests a recursive glob + tests glob with a single pattern with extra slashes tests glob with a single pattern with extra slashes + tests with ** (same as *) tests with ** (same as *) + match: :dot_files / match_hidden + ignores hidden files ignores hidden files + ignores hidden files recursively ignores hidden files recursively + matches dot files matches dot files + tests double recursive matcher (#10807) tests double recursive matcher (#10807) + empty pattern empty pattern + tests with relative path starting recursive tests with relative path starting recursive + root pattern root pattern + tests with relative path (starts with ..) tests with relative path (starts with ..) + tests with \ tests with \ + pattern ending with . pattern ending with . + with path + windows path windows path + posix path posix path + tests a recursive glob with nested alternations tests a recursive glob with nested alternations + pattern ending with */. pattern ending with */. + tests glob with a single pattern with block tests glob with a single pattern with block + pattern ending with */.. pattern ending with */.. + tests with relative path (starts with .) tests with relative path (starts with .) + tests glob with a single pattern tests glob with a single pattern + tests double recursive matcher, multiple paths tests double recursive matcher, multiple paths + tests glob with multiple patterns tests glob with multiple patterns + matches symlinks matches symlinks + .current + matches shell matches shell + follows $PWD follows $PWD +IO::ARGF + peek + peeks from STDIN if ARGV isn't specified peeks from STDIN if ARGV isn't specified + peeks from ARGV if specified peeks from ARGV if specified + reads when is more data left to read reads when is more data left to read + gets + reads from STDIN if ARGV isn't specified reads from STDIN if ARGV isn't specified + reads from ARGV if specified reads from ARGV if specified + reads from STDIN if ARGV isn't specified, chomp = false reads from STDIN if ARGV isn't specified, chomp = false + reads from ARGV if specified reads from ARGV if specified + reads from STDIN if ARGV isn't specified reads from STDIN if ARGV isn't specified +Websocket integration tests + streams less than the buffer frame size streams less than the buffer frame size + streams single messages made up of multiple parts that eventually become more than the buffer frame size streams single messages made up of multiple parts that eventually become more than the buffer frame size + sends single text messages sends single text messages + streams single messages more than the buffer frame size streams single messages more than the buffer frame size +WeakRef(T) + should get dereferenced object in data section should get dereferenced object in data section + FinalizeState counts released objects FinalizeState counts released objects + Referenced object should not be released Referenced object should not be released + Weak referenced object should be released if no other reference Weak referenced object should be released if no other reference + should get dereferenced object should get dereferenced object + should not crash with object in data section during GC should not crash with object in data section during GC +expectations + be_falsey assert assert assert assert - "#each" yielding "#each" yielding - rejects! rejects! - empty - size should be zero size should be zero - [] - gets gets - gets from literal gets from literal - "#each_with_index" yielding "#each_with_index" yielding - dig? - returns nil if not found returns nil if not found - gets the value at given path given splat gets the value at given path given splat - inverts inverts - returns empty hash when transforming keys of an empty hash returns empty hash when transforming keys of an empty hash - "#each_key" yielding "#each_key" yielding - "#each_value" iterator "#each_value" iterator - zips zips - select! with non-equality key select! with non-equality key - selects selects - compacts compacts - #rehash - resets @first (#14602) resets @first (#14602) - rehashes rehashes - clears after shift clears after shift - key_for? - returns nil if no key pairs with the given value returns nil if no key pairs with the given value - returns the first key with the given value returns the first key with the given value - inserts many inserts many - select assert assert - does not change current hash does not change current hash assert assert + be assert assert assert assert assert assert - "#each_with_index(offset)" yielding "#each_with_index(offset)" yielding - initializes with default value initializes with default value - transforms keys transforms keys - rejects rejects - transforms values with keys included transforms values with keys included - select! assert assert - does change current hash does change current hash assert assert assert assert + end_with assert assert assert assert - does not skip elements with an exhaustable enumerable argument (#12736) does not skip elements with an exhaustable enumerable argument (#12736) - gets nilable gets nilable - selects! selects! - does to to_s with instance that was never instantiated does to to_s with instance that was never instantiated - inserts in one bucket and deletes from the same one inserts in one bucket and deletes from the same one - reduce - reduces the hash to the accumulated value of memo reduces the hash to the accumulated value of memo - passes memo, key and value into block passes memo, key and value into block - can be wrapped can be wrapped - some edge cases while changing the implementation to open addressing - edge case 2 edge case 2 - edge case 1 edge case 1 - edge case 3 edge case 3 - delete - deletes only remaining entry deletes only remaining entry - deletes not found deletes not found - deletes key in the end deletes key in the end - deletes key in the beginning deletes key in the beginning - deletes key in the middle deletes key in the middle - with block - returns the value of the block if key is not found returns the value of the block if key is not found - returns nil if key is found and value is nil returns nil if key is found and value is nil - returns the value if a key is found returns the value if a key is found - deletes many in the beginning and then will need a resize deletes many in the beginning and then will need a resize - fetches from empty hash with default value fetches from empty hash with default value - last_value - raises on last value (nilable value) raises on last value (nilable value) - gets last value gets last value - doesn't raise on last value (nilable value) doesn't raise on last value (nilable value) - merges recursive type (#1693) merges recursive type (#1693) - does to_a after delete does to_a after delete - dig - gets the value at given path given splat gets the value at given path given splat - raises KeyError if not found raises KeyError if not found - select with non-equality key select with non-equality key - reject assert assert assert assert assert assert - does not change current hash does not change current hash assert assert - reject! - changes current hash changes current hash + be_a assert assert assert assert + restricts type on should restricts type on should assert assert assert assert - subset/superset operators - #superset_of? - assert assert - #proper_subset_of? - handles edge case where both values are nil handles edge case where both values are nil - assert assert - #subset_of? - handles edge case where both values are nil handles edge case where both values are nil - assert assert - #proper_superset_of? - assert assert - merges merges - gets array of values gets array of values - transforms values with type casting values transforms values with type casting values - merges with block merges with block - computes hash computes hash - clone - clones recursive hash clones recursive hash - clones big hash clones big hash - clones small hash clones small hash - clones with size = 1 clones with size = 1 - clones empty hash clones empty hash - retains default block on clone retains default block on clone - all? - evaluates the block for only for as many kv pairs as necessary evaluates the block for only for as many kv pairs as necessary - passes key and value into block passes key and value into block - returns true if the block evaluates truthy for every kv pair returns true if the block evaluates truthy for every kv pair - doesn't generate a negative index for the bucket index (#2321) doesn't generate a negative index for the bucket index (#2321) - compare_by_identity - retains compare_by_identity on clone retains compare_by_identity on clone - big hash big hash - small hash small hash - retains compare_by_identity on dup retains compare_by_identity on dup - shifts shifts - transforms values transforms values - does to_h does to_h - maps maps - does to_a after shift does to_a after shift - does each does each - update - raises if key does not exist and no default value specified (big hash) raises if key does not exist and no default value specified (big hash) - inserts a new entry using the default value as input, if key does not exist inserts a new entry using the default value as input, if key does not exist - can update with a nil value can update with a nil value - can update a current nil value with a new value can update a current nil value with a new value - returns the old value when key exists (big hash) returns the old value when key exists (big hash) - inserts a new entry using the value returned by the default block as input, if key does not exist inserts a new entry using the value returned by the default block as input, if key does not exist - returns the default value when key does not exist returns the default value when key does not exist - returns the old value when key exists returns the old value when key exists - raises if key does not exist and no default value specified raises if key does not exist and no default value specified - updates the value of an existing key with the given block (big hash) updates the value of an existing key with the given block (big hash) - inserts a new entry using the default value as input, if key does not exist (big hash) inserts a new entry using the default value as input, if key does not exist (big hash) - returns the default value when key does not exist (big hash) returns the default value when key does not exist (big hash) - inserts a new entry using the value returned by the default block as input, if key does not exist (big hash) inserts a new entry using the value returned by the default block as input, if key does not exist (big hash) - updates the value of an existing key with the given block updates the value of an existing key with the given block - doesn't create a duplicate key, if key does not exist and default block adds the given key (#14416) doesn't create a duplicate key, if key does not exist and default block adds the given key (#14416) - sets and gets sets and gets - transform values in place transform values in place - does each_key does each_key - does to_a does to_a - gets from union gets from union - "#each_with_index" iterator "#each_with_index" iterator - "#each_key" iterator "#each_key" iterator - shifts? shifts? - last_key - doesn't raise on last key (nilable key) doesn't raise on last key (nilable key) - gets last key gets last key - raises on last key (nilable key) raises on last key (nilable key) - creates with initial capacity and default value creates with initial capacity and default value - creates with initial capacity and block creates with initial capacity and block - merges! merges! - transforms keys with values included transforms keys with values included - fetch - fetches with block fetches with block - fetches with default value fetches with default value - "#each" iterator "#each" iterator - shifts: delete elements in the middle position and then in the first position shifts: delete elements in the middle position and then in the first position - merges! with block and nilable keys merges! with block and nilable keys - first_key - doesn't raise on first key (nilable key) doesn't raise on first key (nilable key) - gets first key gets first key - raises on first key (nilable key) raises on first key (nilable key) - does each_value does each_value - clears clears - merges! with block merges! with block - merges other type with block merges other type with block - values_at - works with mixed types works with mixed types - raises when passed an invalid key raises when passed an invalid key - returns the given keys returns the given keys - creates with initial capacity creates with initial capacity - reject with non-equality key reject with non-equality key - any? - returns true if the block evaluates truthy for at least one kv pair returns true if the block evaluates truthy for at least one kv pair - evaluates the block for only for as many kv pairs as necessary evaluates the block for only for as many kv pairs as necessary - passes key and value into block passes key and value into block - returns true if the hash contains at least one kv pair and no block is given returns true if the hash contains at least one kv pair and no block is given - initializes with block initializes with block - #put - puts in a big hash puts in a big hash - puts in a small hash puts in a small hash - yields key yields key - #put_if_absent - puts if key doesn't exist puts if key doesn't exist - doesn't put duplicate keys (#14425) doesn't put duplicate keys (#14425) - accepts a block accepts a block - returns existing value if key exists returns existing value if key exists - gets first gets first - first_value - gets first value gets first value - doesn't raise on first value (nilable value) doesn't raise on first value (nilable value) - raises on first value (nilable value) raises on first value (nilable value) - returns empty hash when transforming values of an empty hash returns empty hash when transforming values of an empty hash - to_s + restricts type on should_not restricts type on should_not + be_nil assert assert assert assert - has_value? - returns false if does not contain the value returns false if does not contain the value - returns true if contains the value returns true if contains the value - transforms keys with type casting transforms keys with type casting -#errors - makes errors accessible makes errors accessible -HTTP::ErrorHandler - doesn't write errors when there is some output already sent doesn't write errors when there is some output already sent - rescues from exception rescues from exception - log debug message when the output is closed log debug message when the output is closed - can return a generic error message can return a generic error message - logs to custom logger logs to custom logger -Crystal::Hasher - to_s - should not expose internal data should not expose internal data - inspect - should not expose internal data should not expose internal data - normalization of numbers - should 1_f32 and 1.to_big_i hashes equal should 1_f32 and 1.to_big_i hashes equal - should 1_f32 and 1.to_big_r hashes equal should 1_f32 and 1.to_big_r hashes equal - should 1_f32 and 1.to_big_f hashes equal should 1_f32 and 1.to_big_f hashes equal - should 1_i32 and 1_f64 hashes equal should 1_i32 and 1_f64 hashes equal - behavior - #char should change state and differ #char should change state and differ - #string should change state and differ #string should change state and differ - #enum should change state and differ #enum should change state and differ - #float should change state and differ #float should change state and differ - #int should change state and differ #int should change state and differ - #symbol should change state and differ #symbol should change state and differ - 128bit types should be hashed ok 128bit types should be hashed ok - #bytes should change state and differ #bytes should change state and differ - #reference should change state and differ #reference should change state and differ - #int should be equal for different types #int should be equal for different types - #bool should change state and differ #bool should change state and differ - #class should change state and differ #class should change state and differ - #nil should change hasher state #nil should change hasher state - Big i64 numbers should be hashed ok Big i64 numbers should be hashed ok - .reduce_num - reduces BigDecimal reduces BigDecimal - reduces primitive float reduces primitive float - reduces BigFloat reduces BigFloat - reduces primitive int reduces primitive int - reduces BigRational reduces BigRational - reduces BigInt reduces BigInt - funny_hash - #bool should match test vectors #bool should match test vectors - #nil should match test vectors #nil should match test vectors - #int should match test vectors #int should match test vectors - #string should match test vectors #string should match test vectors - #float should match test vectors #float should match test vectors - result should work result should work -Indexable::Mutable(T) - #rotate! - left-shifts all elements left-shifts all elements - #shuffle! - randomizes the order of all elements randomizes the order of all elements - #fill - with block + range - raises on out of bound start index raises on out of bound start index - sets zero elements sets zero elements - yields index to the block and sets elements in a subrange yields index to the block and sets elements in a subrange - with block + start + count - yields index to the block and sets elements in a subrange yields index to the block and sets elements in a subrange - raises on out of bound start index raises on out of bound start index - sets zero elements sets zero elements - with block + offset - yields index plus offset to the block and sets all elements yields index plus offset to the block and sets all elements - without block - sets all elements to the same value sets all elements to the same value - with block - yields index to the block and sets all elements yields index to the block and sets all elements - without block, with range - sets a subrange of elements to the same value sets a subrange of elements to the same value - raises on out of bound start index raises on out of bound start index - sets zero elements sets zero elements - without block, with start + count - sets a subrange of elements to the same value sets a subrange of elements to the same value - sets zero elements sets zero elements - raises on out of bound start index raises on out of bound start index - #map_with_index! - with offset - yields each element and index plus offset to the block yields each element and index plus offset to the block - without offset - yields each element and index to the block yields each element and index to the block - #reverse! - reverses the order of all elements in place reverses the order of all elements in place - #[]= - sets the value at the given index sets the value at the given index - wraps negative indices wraps negative indices - raises on out-of-bound indices raises on out-of-bound indices - #update - raises on out-of-bound indices raises on out-of-bound indices - wraps negative indices wraps negative indices - updates the value at the given index with the block updates the value at the given index with the block - #map! - replaces each element with the block value replaces each element with the block value - #swap - exchanges the values at two indices exchanges the values at two indices - wraps negative indices wraps negative indices - raises on out-of-bound indices raises on out-of-bound indices -HTTP::Cookie - #valid? & #validate! - raises on invalid cookie with __Host- prefix raises on invalid cookie with __Host- prefix - with a __Secure- prefix, but @secure is somehow `nil` with a __Secure- prefix, but @secure is somehow `nil` - raises on invalid cookie with __Secure- prefix raises on invalid cookie with __Secure- prefix - #name= - automatically configures the cookie __Secure- prefix and related properties are unset automatically configures the cookie __Secure- prefix and related properties are unset - automatically configures the cookie __Host- prefix and related unset properties automatically configures the cookie __Host- prefix and related unset properties - doesn't raise on invalid cookie with __Secure- prefix doesn't raise on invalid cookie with __Secure- prefix - doesn't raise on invalid cookie with __Host- prefix doesn't raise on invalid cookie with __Host- prefix - raises on invalid name raises on invalid name - #to_set_cookie_header + restricts type on should_not restricts type on should_not assert assert + contain assert assert assert assert assert assert assert assert assert assert assert assert - samesite samesite - #value= - raises on invalid value raises on invalid value - .new - raises on invalid name raises on invalid name - raises on invalid value raises on invalid value - with a security prefix - raises on invalid cookie with prefix raises on invalid cookie with prefix - automatically configures the cookie if it has the __Host- prefix and no explicit values provided automatically configures the cookie if it has the __Host- prefix and no explicit values provided - automatically makes the cookie secure if it has the __Secure- prefix and no explicit *secure* value is provided automatically makes the cookie secure if it has the __Secure- prefix and no explicit *secure* value is provided - #== #== -UUID - serializes - #from_yaml #from_yaml - #to_yaml #to_yaml -System::Group - #id - is the same as the source ID is the same as the source ID - #to_s - returns a string representation returns a string representation - #name - is the same as the source name is the same as the source name - .find_by(*, id) - raises on nonexistent group name raises on nonexistent group name - returns a group by id returns a group by id - .find_by?(*, name) - returns a group by name returns a group by name - returns nil on nonexistent group returns nil on nonexistent group - .find_by(*, name) - raises on nonexistent group raises on nonexistent group - returns a group by name returns a group by name - .find_by?(*, id) - returns nil on nonexistent group id returns nil on nonexistent group id - returns a group by id returns a group by id -Time - #day_of_week - 2012-1-2 is 1 2012-1-2 is 1 - 2013-1-1 is 2 2013-1-1 is 2 - 2014-1-1 is 3 2014-1-1 is 3 - 2024-1-1 is 1 2024-1-1 is 1 - 2011-1-3 is 1 2011-1-3 is 1 - 2012-12-31 is 1 2012-12-31 is 1 - 2011-1-10 is 1 2011-1-10 is 1 - 2023-1-1 is 7 2023-1-1 is 7 - 2015-1-1 is 4 2015-1-1 is 4 - 2016-1-1 is 5 2016-1-1 is 5 - 2012-1-8 is 7 2012-1-8 is 7 - 1985-1-1 is 2 1985-1-1 is 2 - 2021-1-1 is 5 2021-1-1 is 5 - 1996-1-8 is 1 1996-1-8 is 1 - 2011-1-2 is 7 2011-1-2 is 7 - 2027-1-1 is 5 2027-1-1 is 5 - 2011-1-7 is 5 2011-1-7 is 5 - 1993-1-1 is 5 1993-1-1 is 5 - 2017-1-1 is 7 2017-1-1 is 7 - 1995-1-2 is 1 1995-1-2 is 1 - 2012-1-1 is 7 2012-1-1 is 7 - 2039-1-1 is 6 2039-1-1 is 6 - 2011-1-8 is 6 2011-1-8 is 6 - 2011-1-1 is 6 2011-1-1 is 6 - 1984-1-1 is 7 1984-1-1 is 7 - 1996-1-7 is 7 1996-1-7 is 7 - 1982-1-1 is 5 1982-1-1 is 5 - 2011-6-13 is 1 2011-6-13 is 1 - 2036-1-1 is 2 2036-1-1 is 2 - 2025-1-1 is 3 2025-1-1 is 3 - 1981-1-1 is 4 1981-1-1 is 4 - 2013-12-30 is 1 2013-12-30 is 1 - 2014-1-5 is 7 2014-1-5 is 7 - 2018-1-1 is 1 2018-1-1 is 1 - 1997-1-1 is 3 1997-1-1 is 3 - 1991-1-1 is 2 1991-1-1 is 2 - 2033-1-1 is 6 2033-1-1 is 6 - 1986-1-1 is 3 1986-1-1 is 3 - 2012-12-30 is 7 2012-12-30 is 7 - 2020-1-1 is 3 2020-1-1 is 3 - 2011-1-11 is 2 2011-1-11 is 2 - 2011-6-12 is 7 2011-6-12 is 7 - 2011-12-27 is 2 2011-12-27 is 2 - 1987-1-1 is 4 1987-1-1 is 4 - 1995-1-1 is 7 1995-1-1 is 7 - 2002-1-1 is 2 2002-1-1 is 2 - 2011-12-28 is 3 2011-12-28 is 3 - 2008-1-1 is 2 2008-1-1 is 2 - 2000-1-1 is 6 2000-1-1 is 6 - 2029-1-1 is 1 2029-1-1 is 1 - 1992-1-1 is 3 1992-1-1 is 3 - 2032-1-1 is 4 2032-1-1 is 4 - 2009-1-1 is 4 2009-1-1 is 4 - 2010-1-1 is 5 2010-1-1 is 5 - 2011-12-31 is 6 2011-12-31 is 6 - 2007-1-1 is 1 2007-1-1 is 1 - 2011-12-25 is 7 2011-12-25 is 7 - 2011-1-5 is 3 2011-1-5 is 3 - gets day of week gets day of week - 2011-12-29 is 4 2011-12-29 is 4 - 2004-1-1 is 4 2004-1-1 is 4 - 2022-1-1 is 6 2022-1-1 is 6 - 1989-1-1 is 7 1989-1-1 is 7 - 2011-12-30 is 5 2011-12-30 is 5 - 2031-1-1 is 3 2031-1-1 is 3 - 2012-12-24 is 1 2012-12-24 is 1 - 2012-12-23 is 7 2012-12-23 is 7 - 1990-1-1 is 1 1990-1-1 is 1 - 2013-12-23 is 1 2013-12-23 is 1 - 1998-1-1 is 4 1998-1-1 is 4 - 2013-12-22 is 7 2013-12-22 is 7 - 2026-1-1 is 4 2026-1-1 is 4 - 2019-1-1 is 2 2019-1-1 is 2 - 2003-1-1 is 3 2003-1-1 is 3 - 2011-12-26 is 1 2011-12-26 is 1 - 2001-1-1 is 1 2001-1-1 is 1 - 2011-1-4 is 2 2011-1-4 is 2 - 2037-1-1 is 4 2037-1-1 is 4 - 1988-1-1 is 5 1988-1-1 is 5 - 2006-1-1 is 7 2006-1-1 is 7 - 2038-1-1 is 5 2038-1-1 is 5 - 1996-1-1 is 1 1996-1-1 is 1 - 2013-1-7 is 1 2013-1-7 is 1 - 2034-1-1 is 7 2034-1-1 is 7 - 2010-1-1 is 5 2010-1-1 is 5 - 1999-1-1 is 5 1999-1-1 is 5 - 2013-12-29 is 7 2013-12-29 is 7 - 2040-1-1 is 7 2040-1-1 is 7 - 2030-1-1 is 2 2030-1-1 is 2 - 2014-1-6 is 1 2014-1-6 is 1 - 2035-1-1 is 1 2035-1-1 is 1 - 1983-1-1 is 6 1983-1-1 is 6 - 2012-1-9 is 1 2012-1-9 is 1 - 1985-4-12 is 5 1985-4-12 is 5 - 2011-1-6 is 4 2011-1-6 is 4 - 2028-1-1 is 6 2028-1-1 is 6 - 2011-1-9 is 7 2011-1-9 is 7 - 1994-1-1 is 6 1994-1-1 is 6 - 2013-1-6 is 7 2013-1-6 is 7 - 2005-1-1 is 6 2005-1-1 is 6 - answers day name predicates answers day name predicates - #calendar_week - 2011-1-9 to 2011-1 2011-1-9 to 2011-1 - 1995-1-1 to 1994-52 1995-1-1 to 1994-52 - 2003-1-1 to 2003-1 2003-1-1 to 2003-1 - 2004-1-1 to 2004-1 2004-1-1 to 2004-1 - 1997-1-1 to 1997-1 1997-1-1 to 1997-1 - 2015-1-1 to 2015-1 2015-1-1 to 2015-1 - 2025-1-1 to 2025-1 2025-1-1 to 2025-1 - 2033-1-1 to 2032-53 2033-1-1 to 2032-53 - 2010-1-1 to 2009-53 2010-1-1 to 2009-53 - 2012-1-8 to 2012-1 2012-1-8 to 2012-1 - 2011-1-4 to 2011-1 2011-1-4 to 2011-1 - 1994-1-1 to 1993-52 1994-1-1 to 1993-52 - 2012-12-31 to 2013-1 2012-12-31 to 2013-1 - 1987-1-1 to 1987-1 1987-1-1 to 1987-1 - 1990-1-1 to 1990-1 1990-1-1 to 1990-1 - 1996-1-1 to 1996-1 1996-1-1 to 1996-1 - 1988-1-1 to 1987-53 1988-1-1 to 1987-53 - 2026-1-1 to 2026-1 2026-1-1 to 2026-1 - 2021-1-1 to 2020-53 2021-1-1 to 2020-53 - 2011-12-28 to 2011-52 2011-12-28 to 2011-52 - 2012-1-1 to 2011-52 2012-1-1 to 2011-52 - 2011-1-1 to 2010-52 2011-1-1 to 2010-52 - 2029-1-1 to 2029-1 2029-1-1 to 2029-1 - 1983-1-1 to 1982-52 1983-1-1 to 1982-52 - 2028-1-1 to 2027-52 2028-1-1 to 2027-52 - 2011-1-10 to 2011-2 2011-1-10 to 2011-2 - 2011-12-31 to 2011-52 2011-12-31 to 2011-52 - 2013-1-1 to 2013-1 2013-1-1 to 2013-1 - 2011-12-27 to 2011-52 2011-12-27 to 2011-52 - 2036-1-1 to 2036-1 2036-1-1 to 2036-1 - 2030-1-1 to 2030-1 2030-1-1 to 2030-1 - 2011-1-3 to 2011-1 2011-1-3 to 2011-1 - 2031-1-1 to 2031-1 2031-1-1 to 2031-1 - 1986-1-1 to 1986-1 1986-1-1 to 1986-1 - 2023-1-1 to 2022-52 2023-1-1 to 2022-52 - 2032-1-1 to 2032-1 2032-1-1 to 2032-1 - 1996-1-8 to 1996-2 1996-1-8 to 1996-2 - 1981-1-1 to 1981-1 1981-1-1 to 1981-1 - 1984-1-1 to 1983-52 1984-1-1 to 1983-52 - 2011-1-6 to 2011-1 2011-1-6 to 2011-1 - 2009-1-1 to 2009-1 2009-1-1 to 2009-1 - 2034-1-1 to 2033-52 2034-1-1 to 2033-52 - 1992-1-1 to 1992-1 1992-1-1 to 1992-1 - 2039-1-1 to 2038-52 2039-1-1 to 2038-52 - 2012-1-2 to 2012-1 2012-1-2 to 2012-1 - 2011-1-7 to 2011-1 2011-1-7 to 2011-1 - 2011-12-29 to 2011-52 2011-12-29 to 2011-52 - 2013-12-22 to 2013-51 2013-12-22 to 2013-51 - 2011-12-30 to 2011-52 2011-12-30 to 2011-52 - 2017-1-1 to 2016-52 2017-1-1 to 2016-52 - 2001-1-1 to 2001-1 2001-1-1 to 2001-1 - 2011-6-13 to 2011-24 2011-6-13 to 2011-24 - 2022-1-1 to 2021-52 2022-1-1 to 2021-52 - 2011-12-25 to 2011-51 2011-12-25 to 2011-51 - 2018-1-1 to 2018-1 2018-1-1 to 2018-1 - 2013-12-30 to 2014-1 2013-12-30 to 2014-1 - 2002-1-1 to 2002-1 2002-1-1 to 2002-1 - 1999-1-1 to 1998-53 1999-1-1 to 1998-53 - 2024-1-1 to 2024-1 2024-1-1 to 2024-1 - 2013-1-6 to 2013-1 2013-1-6 to 2013-1 - 1989-1-1 to 1988-52 1989-1-1 to 1988-52 - 1995-1-2 to 1995-1 1995-1-2 to 1995-1 - 1993-1-1 to 1992-53 1993-1-1 to 1992-53 - 2011-12-26 to 2011-52 2011-12-26 to 2011-52 - 2020-1-1 to 2020-1 2020-1-1 to 2020-1 - 2016-1-1 to 2015-53 2016-1-1 to 2015-53 - 2012-12-24 to 2012-52 2012-12-24 to 2012-52 - 2040-1-1 to 2039-52 2040-1-1 to 2039-52 - 2005-1-1 to 2004-53 2005-1-1 to 2004-53 - 2011-1-5 to 2011-1 2011-1-5 to 2011-1 - 2012-12-23 to 2012-51 2012-12-23 to 2012-51 - 2011-1-2 to 2010-52 2011-1-2 to 2010-52 - 2010-1-1 to 2009-53 2010-1-1 to 2009-53 - 2037-1-1 to 2037-1 2037-1-1 to 2037-1 - 2035-1-1 to 2035-1 2035-1-1 to 2035-1 - 2013-12-29 to 2013-52 2013-12-29 to 2013-52 - 1991-1-1 to 1991-1 1991-1-1 to 1991-1 - 2019-1-1 to 2019-1 2019-1-1 to 2019-1 - 2011-1-11 to 2011-2 2011-1-11 to 2011-2 - 2000-1-1 to 1999-52 2000-1-1 to 1999-52 - 2011-6-12 to 2011-23 2011-6-12 to 2011-23 - 1998-1-1 to 1998-1 1998-1-1 to 1998-1 - 2012-12-30 to 2012-52 2012-12-30 to 2012-52 - 2006-1-1 to 2005-52 2006-1-1 to 2005-52 - 2014-1-5 to 2014-1 2014-1-5 to 2014-1 - 2007-1-1 to 2007-1 2007-1-1 to 2007-1 - 2013-12-23 to 2013-52 2013-12-23 to 2013-52 - 1985-1-1 to 1985-1 1985-1-1 to 1985-1 - 2038-1-1 to 2037-53 2038-1-1 to 2037-53 - 2011-1-8 to 2011-1 2011-1-8 to 2011-1 - 2012-1-9 to 2012-2 2012-1-9 to 2012-2 - 2013-1-7 to 2013-2 2013-1-7 to 2013-2 - 1985-4-12 to 1985-15 1985-4-12 to 1985-15 - 2014-1-6 to 2014-2 2014-1-6 to 2014-2 - 1982-1-1 to 1981-53 1982-1-1 to 1981-53 - 2027-1-1 to 2026-53 2027-1-1 to 2026-53 - 1996-1-7 to 1996-1 1996-1-7 to 1996-1 - 2014-1-1 to 2014-1 2014-1-1 to 2014-1 - 2008-1-1 to 2008-1 2008-1-1 to 2008-1 - #shift - adds zero span adds zero span - adds days - out of range min out of range min - over dst over dst - out of range max out of range max - simple simple - out of range min (shift days) out of range min (shift days) - out of range max (shift days) out of range max (shift days) - raises out of range min raises out of range min - covers date boundaries with zone offset (#8741) covers date boundaries with zone offset (#8741) - adds nanoseconds adds nanoseconds - adds months adds months - checks boundary at time max checks boundary at time max - raises out of range max raises out of range max - adds hours adds hours - preserves location when adding preserves location when adding - adds hours, minutes, seconds adds hours, minutes, seconds - checks boundary at time min checks boundary at time min - covers date boundaries with zone offset (#10869) covers date boundaries with zone offset (#10869) - adds years adds years - irregular calendaric unit ratios - shifts by conceptual hour even if elapsed time is less shifts by conceptual hour even if elapsed time is less - shifts by a week if one day is left out shifts by a week if one day is left out - #step - "advent" yielding "advent" yielding - "advent" iterator "advent" iterator - #clone #clone - .unix_ns - supports minimum valid time supports minimum valid time - supports maximum valid time supports maximum valid time - supports Int64 values supports Int64 values - #<=> - compares different locations compares different locations - compares compares - #in - changes location changes location - .unix .unix - .monotonic - returns always increasing monotonic clock returns always increasing monotonic clock - .days_in_month - raises exception for invalid year raises exception for invalid year - raises exception for invalid month raises exception for invalid month - returns days for valid month and year returns days for valid month and year - #year #year - #time_of_day #time_of_day - .local without arguments - current time is similar in different locations current time is similar in different locations - .leap_year? - knows that 400-year centuries are leap years knows that 400-year centuries are leap years - knows that typical non-century leap years are divisible by 4 knows that typical non-century leap years are divisible by 4 - knows that 100-year centuries are normal years knows that 100-year centuries are normal years - knows years *not* divisible by 4 are normal knows years *not* divisible by 4 are normal - .local - initializes initializes - fails with negative nanosecond fails with negative nanosecond - checks boundary at time min checks boundary at time min - fails with too big nanoseconds fails with too big nanoseconds - checks boundary at time max checks boundary at time max - initializes max value initializes max value - accepts midnight 24:00 accepts midnight 24:00 - #day_of_year #day_of_year - #to_s - prints offset for fixed location prints offset for fixed location - prints offset for location prints offset for location - prints string prints string - prints date-time fields prints date-time fields - prints local time prints local time - omits nanoseconds omits nanoseconds - .measure - measures elapsed time measures elapsed time - .week_date - verify test data - W2010-52-7 eq 2011-1-2 W2010-52-7 eq 2011-1-2 - W1988-52-7 eq 1989-1-1 W1988-52-7 eq 1989-1-1 - W1992-53-5 eq 1993-1-1 W1992-53-5 eq 1993-1-1 - W2011-52-1 eq 2011-12-26 W2011-52-1 eq 2011-12-26 - W2014-1-1 eq 2013-12-30 W2014-1-1 eq 2013-12-30 - W2008-1-2 eq 2008-1-1 W2008-1-2 eq 2008-1-1 - W2026-1-4 eq 2026-1-1 W2026-1-4 eq 2026-1-1 - W1982-52-6 eq 1983-1-1 W1982-52-6 eq 1983-1-1 - W2035-1-1 eq 2035-1-1 W2035-1-1 eq 2035-1-1 - W2014-1-3 eq 2014-1-1 W2014-1-3 eq 2014-1-1 - W2009-53-5 eq 2010-1-1 W2009-53-5 eq 2010-1-1 - W1981-53-5 eq 1982-1-1 W1981-53-5 eq 1982-1-1 - W2011-1-3 eq 2011-1-5 W2011-1-3 eq 2011-1-5 - W2013-52-1 eq 2013-12-23 W2013-52-1 eq 2013-12-23 - W1998-53-5 eq 1999-1-1 W1998-53-5 eq 1999-1-1 - W2015-1-4 eq 2015-1-1 W2015-1-4 eq 2015-1-1 - W1983-52-7 eq 1984-1-1 W1983-52-7 eq 1984-1-1 - W2011-1-7 eq 2011-1-9 W2011-1-7 eq 2011-1-9 - W2024-1-1 eq 2024-1-1 W2024-1-1 eq 2024-1-1 - W2009-1-4 eq 2009-1-1 W2009-1-4 eq 2009-1-1 - W2001-1-1 eq 2001-1-1 W2001-1-1 eq 2001-1-1 - W2021-52-6 eq 2022-1-1 W2021-52-6 eq 2022-1-1 - W2007-1-1 eq 2007-1-1 W2007-1-1 eq 2007-1-1 - W2020-53-5 eq 2021-1-1 W2020-53-5 eq 2021-1-1 - W2011-51-7 eq 2011-12-25 W2011-51-7 eq 2011-12-25 - W2014-2-1 eq 2014-1-6 W2014-2-1 eq 2014-1-6 - W2032-1-4 eq 2032-1-1 W2032-1-4 eq 2032-1-1 - W2011-1-5 eq 2011-1-7 W2011-1-5 eq 2011-1-7 - W1996-1-1 eq 1996-1-1 W1996-1-1 eq 1996-1-1 - W2012-52-7 eq 2012-12-30 W2012-52-7 eq 2012-12-30 - W2022-52-7 eq 2023-1-1 W2022-52-7 eq 2023-1-1 - W2011-52-2 eq 2011-12-27 W2011-52-2 eq 2011-12-27 - W2036-1-2 eq 2036-1-1 W2036-1-2 eq 2036-1-1 - W1998-1-4 eq 1998-1-1 W1998-1-4 eq 1998-1-1 - W2013-2-1 eq 2013-1-7 W2013-2-1 eq 2013-1-7 - W2013-1-7 eq 2013-1-6 W2013-1-7 eq 2013-1-6 - W1997-1-3 eq 1997-1-1 W1997-1-3 eq 1997-1-1 - W2011-1-4 eq 2011-1-6 W2011-1-4 eq 2011-1-6 - W1996-2-1 eq 1996-1-8 W1996-2-1 eq 1996-1-8 - W1991-1-2 eq 1991-1-1 W1991-1-2 eq 1991-1-1 - W2031-1-3 eq 2031-1-1 W2031-1-3 eq 2031-1-1 - W2014-1-7 eq 2014-1-5 W2014-1-7 eq 2014-1-5 - W2011-1-1 eq 2011-1-3 W2011-1-1 eq 2011-1-3 - W1994-52-7 eq 1995-1-1 W1994-52-7 eq 1995-1-1 - W2015-53-5 eq 2016-1-1 W2015-53-5 eq 2016-1-1 - W2011-1-2 eq 2011-1-4 W2011-1-2 eq 2011-1-4 - W2011-24-1 eq 2011-6-13 W2011-24-1 eq 2011-6-13 - W2011-52-3 eq 2011-12-28 W2011-52-3 eq 2011-12-28 - W2011-23-7 eq 2011-6-12 W2011-23-7 eq 2011-6-12 - W2030-1-2 eq 2030-1-1 W2030-1-2 eq 2030-1-1 - W2032-53-6 eq 2033-1-1 W2032-53-6 eq 2033-1-1 - W2029-1-1 eq 2029-1-1 W2029-1-1 eq 2029-1-1 - W2011-52-6 eq 2011-12-31 W2011-52-6 eq 2011-12-31 - W1987-1-4 eq 1987-1-1 W1987-1-4 eq 1987-1-1 - W2012-52-1 eq 2012-12-24 W2012-52-1 eq 2012-12-24 - W2012-2-1 eq 2012-1-9 W2012-2-1 eq 2012-1-9 - W2005-52-7 eq 2006-1-1 W2005-52-7 eq 2006-1-1 - W2038-52-6 eq 2039-1-1 W2038-52-6 eq 2039-1-1 - W1996-1-7 eq 1996-1-7 W1996-1-7 eq 1996-1-7 - W1992-1-3 eq 1992-1-1 W1992-1-3 eq 1992-1-1 - W2013-52-7 eq 2013-12-29 W2013-52-7 eq 2013-12-29 - W2037-53-5 eq 2038-1-1 W2037-53-5 eq 2038-1-1 - W2011-1-6 eq 2011-1-8 W2011-1-6 eq 2011-1-8 - W1993-52-6 eq 1994-1-1 W1993-52-6 eq 1994-1-1 - W1981-1-4 eq 1981-1-1 W1981-1-4 eq 1981-1-1 - W2003-1-3 eq 2003-1-1 W2003-1-3 eq 2003-1-1 - W1987-53-5 eq 1988-1-1 W1987-53-5 eq 1988-1-1 - W2037-1-4 eq 2037-1-1 W2037-1-4 eq 2037-1-1 - W2011-2-2 eq 2011-1-11 W2011-2-2 eq 2011-1-11 - W2010-52-6 eq 2011-1-1 W2010-52-6 eq 2011-1-1 - W2025-1-3 eq 2025-1-1 W2025-1-3 eq 2025-1-1 - W2011-2-1 eq 2011-1-10 W2011-2-1 eq 2011-1-10 - W1999-52-6 eq 2000-1-1 W1999-52-6 eq 2000-1-1 - W2027-52-6 eq 2028-1-1 W2027-52-6 eq 2028-1-1 - W2004-53-6 eq 2005-1-1 W2004-53-6 eq 2005-1-1 - W2002-1-2 eq 2002-1-1 W2002-1-2 eq 2002-1-1 - W1985-15-5 eq 1985-4-12 W1985-15-5 eq 1985-4-12 - W2016-52-7 eq 2017-1-1 W2016-52-7 eq 2017-1-1 - W2013-1-2 eq 2013-1-1 W2013-1-2 eq 2013-1-1 - W2018-1-1 eq 2018-1-1 W2018-1-1 eq 2018-1-1 - W2009-53-5 eq 2010-1-1 W2009-53-5 eq 2010-1-1 - W1985-1-2 eq 1985-1-1 W1985-1-2 eq 1985-1-1 - W2026-53-5 eq 2027-1-1 W2026-53-5 eq 2027-1-1 - W2012-51-7 eq 2012-12-23 W2012-51-7 eq 2012-12-23 - W2020-1-3 eq 2020-1-1 W2020-1-3 eq 2020-1-1 - W2011-52-7 eq 2012-1-1 W2011-52-7 eq 2012-1-1 - W2033-52-7 eq 2034-1-1 W2033-52-7 eq 2034-1-1 - W2004-1-4 eq 2004-1-1 W2004-1-4 eq 2004-1-1 - W2012-1-7 eq 2012-1-8 W2012-1-7 eq 2012-1-8 - W2039-52-7 eq 2040-1-1 W2039-52-7 eq 2040-1-1 - W2013-51-7 eq 2013-12-22 W2013-51-7 eq 2013-12-22 - W2013-1-1 eq 2012-12-31 W2013-1-1 eq 2012-12-31 - W2019-1-2 eq 2019-1-1 W2019-1-2 eq 2019-1-1 - W2011-52-4 eq 2011-12-29 W2011-52-4 eq 2011-12-29 - W1986-1-3 eq 1986-1-1 W1986-1-3 eq 1986-1-1 - W2012-1-1 eq 2012-1-2 W2012-1-1 eq 2012-1-2 - W1995-1-1 eq 1995-1-2 W1995-1-1 eq 1995-1-2 - W1990-1-1 eq 1990-1-1 W1990-1-1 eq 1990-1-1 - W2011-52-5 eq 2011-12-30 W2011-52-5 eq 2011-12-30 - accepts time arguments accepts time arguments - .days_in_year .days_in_year - #to_s #to_s - does diff of utc vs local time does diff of utc vs local time - #to_local_in - keeps wall clock keeps wall clock - is the difference of offsets apart is the difference of offsets apart - Time::DayOfWeek - .from_value .from_value - #value #value - .new does not identify 0 as Sunday .new does not identify 0 as Sunday - .unix_ms .unix_ms - #inspect #inspect - at methods at methods - #to_unix - gets unix seconds gets unix seconds - gets unix seconds at GMT gets unix seconds at GMT - UNIX_EPOCH UNIX_EPOCH -Fiber - #resumable? #resumable? -log/spec - fails on non-consecutive logs fails on non-consecutive logs - can capture from all sources can capture from all sources - it does not capture below level it does not capture below level - can get the entry matched by next can get the entry matched by next - can capture with source pattern can capture with source pattern - allows matching logs allows matching logs - fails on non-empty logs fails on non-empty logs - allows matching with regex allows matching with regex - allows matching logs strictly allows matching logs strictly - can get the entry matched by check can get the entry matched by check - allows matching non-consecutive logs allows matching non-consecutive logs - entries can be cleared entries can be cleared - yield and returns the dsl yield and returns the dsl - can capture in different checkers can capture in different checkers -Log::BroadcastBackend - writes to the backend based on level writes to the backend based on level - overwriting log level overwrites to all backends overwriting log level overwrites to all backends - #min_level - on empty on empty - single backend single backend - multiple backends multiple backends -Iterator(T) - each - yields the individual elements to the block yields the individual elements to the block - #cons - conses conses - reuse - reuse as deque reuse as deque - reuse as Bool reuse as Bool - reuse as nil reuse as nil - reuse as Array reuse as Array - #cons_pair - doesn't include stop in return type doesn't include stop in return type - conses conses - first - is cool to first 0 elements is cool to first 0 elements - does first with Range iterator does first with Range iterator - raises ArgumentError if negative size is provided raises ArgumentError if negative size is provided - does first with more than available does first with more than available - cycle - does not cycle provided 0 does not cycle provided 0 - cycles an empty array cycles an empty array - does not cycle provided a negative size does not cycle provided a negative size - does cycle from range does cycle from range - cycles N times cycles N times - skip - is cool to skip 0 elements is cool to skip 0 elements - does skip with Range iterator does skip with Range iterator - raises ArgumentError if negative size is provided raises ArgumentError if negative size is provided - integration - combines many iterators combines many iterators - compact_map - does not return nil values does not return nil values - with object - does with object, with block does with object, with block - does with object does with object - select - does with pattern does with pattern - does select with Range iterator does select with Range iterator - does with type does with type - #accumulate - generic cumulative fold, with init - accumulates values accumulates values - preserves initial type preserves initial type - empty iterator returns only initial value empty iterator returns only initial value - prefix sums - empty iterator stops immediately empty iterator stops immediately - returns prefix sums returns prefix sums - prefix sums, with init - empty iterator returns only initial value empty iterator returns only initial value - preserves initial type preserves initial type - returns prefix sums returns prefix sums - generic cumulative fold - empty iterator stops immediately empty iterator stops immediately - accumulates values accumulates values - #slice_before - slices before: non-bool block slices before: non-bool block - slices before pattern slices before pattern - slices before: #rewind slices before: #rewind - slices before nil slices before nil - slices before pattern with reuse = true slices before pattern with reuse = true - slices before slices before - slices before with reuse = true slices before with reuse = true - slices before with reuse = array slices before with reuse = array - slices before: #to_a slices before: #to_a - slices before: first element matches slices before: first element matches - #flat_map - flattens returned values flattens returned values - flattens returned iterators flattens returned iterators - flattens returned arrays flattens returned arrays - flattens returned values of mixed element types in #to_a flattens returned values of mixed element types in #to_a - flattens returned items flattens returned items - in_groups_of - still works with other iterator methods like to_a still works with other iterator methods like to_a - creates a group of two with reuse = true creates a group of two with reuse = true - fills up with the fill up argument fills up with the fill up argument - creates groups of one creates groups of one - creates a group of two creates a group of two - raises argument error if size is less than 0 raises argument error if size is less than 0 - compact_map - applies the function and removes nil values applies the function and removes nil values - sums after compact_map to_a sums after compact_map to_a - zip - takes multiple Iterators takes multiple Iterators - does skip with Range iterator does skip with Range iterator - take_while - does take_while with more than available does take_while with more than available - only calls the block as much as needed only calls the block as much as needed - does take_while with Range iterator does take_while with Range iterator - #chunk_while - chunks while chunks while - flatten - flattens an iterator of mixed-type iterators flattens an iterator of mixed-type iterators - flattens an iterator of mixed-type elements and iterators and iterators of iterators flattens an iterator of mixed-type elements and iterators and iterators of iterators - flattens a variety of edge cases flattens a variety of edge cases - return iterator itself by rewind return iterator itself by rewind - flattens a deeply-nested iterables and arrays (#3703) flattens a deeply-nested iterables and arrays (#3703) - flattens an iterator of mixed-type elements and iterators flattens an iterator of mixed-type elements and iterators - flattens deeply-nested and mixed type iterators flattens deeply-nested and mixed type iterators - flattens nested struct iterators with internal state being value types flattens nested struct iterators with internal state being value types - #with_index - "with default offset" iterator "with default offset" iterator - "with explicit offset" iterator "with explicit offset" iterator - "with default offset" yielding "with default offset" yielding - "with non-Int32 offset" iterator "with non-Int32 offset" iterator - "with non-Int32 offset" yielding "with non-Int32 offset" yielding - "with explicit offset" yielding "with explicit offset" yielding - uniq - without block without block - with block with block - map - does map with Range iterator does map with Range iterator - skip_while - does skip_while with an array does skip_while with an array - only calls the block as much as needed only calls the block as much as needed - can skip everything can skip everything - returns the full array if the condition is false for the first item returns the full array if the condition is false for the first item - chain - does not experience tuple upcase bug of #13411 does not experience tuple upcase bug of #13411 - chain indeterminate number of iterators - chains array of empty chains array of empty - chains all together chains all together - chains iterators of different type chains iterators of different type - rewinds rewinds - chains empty chains empty - chains chains - #slice_after - slices after pattern with reuse = true slices after pattern with reuse = true - slices after: non-bool block slices after: non-bool block - slices after: #to_a slices after: #to_a - slices after with reuse = true slices after with reuse = true - slices after pattern slices after pattern - slices after: #rewind slices after: #rewind - slices after slices after - slices after with reuse = array slices after with reuse = array - each_slice - returns each_slice iterator with reuse = array returns each_slice iterator with reuse = array - also works if it does not add up also works if it does not add up - returns each_slice iterator with reuse = true returns each_slice iterator with reuse = true - gets all the slices of the size n gets all the slices of the size n - #slice_when - slices when: single value slices when: single value - slices when: non-bool block slices when: non-bool block - slices when with reuse = array slices when with reuse = array - slices when: two values slices when: two values - slices when: #to_a slices when: #to_a - slices when slices when - slices when with reuse = true slices when with reuse = true - slices when: #rewind slices when: #rewind - step - returns every third element returns every third element - returns every element returns every element - raises with nonsensical steps raises with nonsensical steps - returns every other element returns every other element - tap - taps taps - slice - slices slices - doesnt conflict with `::Slice` type doesnt conflict with `::Slice` type - Iterator.of - creates singleton from block can call Iterator.stop creates singleton from block can call Iterator.stop - creates singleton from block creates singleton from block - creates singleton creates singleton - reject - does reject with Range iterator does reject with Range iterator - does with type does with type - does with pattern does with pattern -PROGRAM_NAME - works for UTF-8 name works for UTF-8 name -UUID - v7 - generates a v7 UUID generates a v7 UUID - generates UUIDs that are sortable with 1ms precision generates UUIDs that are sortable with 1ms precision - initializes with slice initializes with slice - v2 - returns true if UUID is v2, false otherwise returns true if UUID is v2, false otherwise - v5 - generates OID based names correctly generates OID based names correctly - generates X500 based names correctly generates X500 based names correctly - generates DNS based names correctly generates DNS based names correctly - generates URL based names correctly generates URL based names correctly - random initialize - works with no options works with no options - does inspect does inspect - works with variant works with variant - works with version works with version - v3 - generates X500 based names correctly generates X500 based names correctly - generates URL based names correctly generates URL based names correctly - generates OID based names correctly generates OID based names correctly - generates DNS based names correctly generates DNS based names correctly - parsing strings - returns nil if it has the wrong number of characters returns nil if it has the wrong number of characters - returns nil if it has incorrect characters returns nil if it has incorrect characters - returns a properly parsed UUID returns a properly parsed UUID - #<=> - correctly compares two UUIDs correctly compares two UUIDs - v4? - returns true if UUID is v4, false otherwise returns true if UUID is v4, false otherwise - initialize from static array - works with static array and variant works with static array and variant - works with static array, variant and version works with static array, variant and version - works with static array only works with static array only - works with static array and version works with static array and version - v4! - returns true if UUID is v4, raises otherwise returns true if UUID is v4, raises otherwise - initialize with String - works with string and variant works with string and variant - can be built from strings can be built from strings - works with string only works with string only - works with string and version works with string and version - initializes zeroed UUID initializes zeroed UUID - supports different string formats - normal output normal output - hexstring hexstring - urn urn - #== - matches identical UUIDs matches identical UUIDs - v1 - returns true if UUID is v1, false otherwise returns true if UUID is v1, false otherwise - fails on invalid arguments when creating fails on invalid arguments when creating - initializes from UUID initializes from UUID -LLVM - .default_target_triple .default_target_triple - .normalize_triple - works works - substitutes unknown for empty components substitutes unknown for empty components -Compress::Gzip - writes and reads to memory writes and reads to memory - rewinds rewinds - reads file with extra fields from file system reads file with extra fields from file system - writes and reads file with extra fields writes and reads file with extra fields -HTTP::Params - is alias for URI::Params is alias for URI::Params -.from_www_form - Bool - a truthy value a truthy value - any other value any other value - a falsey value a falsey value - Array(T) Array(T) - Enum - invalid value invalid value - valid value valid value - Union(*T) - valid valid - invalid invalid - Time - invalid value invalid value - valid value valid value - String - scalar string scalar string - with alternate casing with alternate casing - empty value empty value - with missing key with missing key - with key with key - Nil - invalid value invalid value - valid values valid values - Number - Int - with whitespace with whitespace - valid numbers valid numbers - empty value empty value - Float - empty value empty value - valid numbers valid numbers - with whitespace with whitespace -Socket - == == - .ip? .ip? -XML - #namespace_scopes - gets root namespaces scopes gets root namespaces scopes - returns empty array if no namespaces scopes exists returns empty array if no namespaces scopes exists - includes parent namespaces includes parent namespaces - .build .build - raises exception on empty string raises exception on empty string - gets empty content gets empty content - #namespace_definitions - returns namespaces explicitly defined returns namespaces explicitly defined - returns an empty array if no namespaces are defined returns an empty array if no namespaces are defined - #namespace - when the element does not have a namespace, but has namespace declarations - should return nil should return nil - when the node does not have namespace - should return nil should return nil - when the node has a namespace - without an explicit declaration on the node - returns the related namespace returns the related namespace - with a prefix - return the prefixed namespace return the prefixed namespace - with a default prefix - return the default namespace return the default namespace - doesn't set invalid node content doesn't set invalid node content - sets node name sets node name - navigates in tree navigates in tree - sets node text/content sets node text/content - parses XML UTF-8 from IO (#13703) parses XML UTF-8 from IO (#13703) - .build_fragment - builds fragment without XML declaration builds fragment without XML declaration - closes open elements closes open elements - gets version gets version - changes an attribute changes an attribute - does to_s with correct encoding (#2319) does to_s with correct encoding (#2319) - unlinks nodes unlinks nodes - gets encoding gets encoding - parses HTML UTF-8 from memory (#13703) parses HTML UTF-8 from memory (#13703) - does to_s does to_s - sets an attribute sets an attribute - doesn't set invalid node name doesn't set invalid node name - shows content when inspecting attribute shows content when inspecting attribute - #namespaces - returns an empty hash if there are no namespaces returns an empty hash if there are no namespaces - gets root namespaces as hash gets root namespaces as hash - includes parent namespaces includes parent namespaces - escapes content HTML fragment escapes content HTML fragment - #errors #errors - gets encoding when nil gets encoding when nil - escapes content escapes content - reads big xml file (#1455) reads big xml file (#1455) - parses XML UTF-8 from memory (#13703) parses XML UTF-8 from memory (#13703) - parses from io parses from io - deletes an attribute deletes an attribute - parses parses - parses HTML UTF-8 from IO (#13703) parses HTML UTF-8 from IO (#13703) -Float64 - #to_hexfloat - exponents - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - trimming - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - hexits - assert assert - assert assert - corner cases - assert assert - assert assert - assert assert - assert assert - assert assert - special cases - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - .parse_hexfloat - round-to-nearest, ties-to-even - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert assert assert assert assert assert assert + be_truthy assert assert assert assert assert assert - values close to MIN_POSITIVE and MAX - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert assert assert + empty assert assert assert assert assert assert @@ -27148,40 +22165,152 @@ assert assert assert assert assert assert + be_close assert assert assert assert + eq assert assert assert assert + be + works with module type (#14920) works with module type (#14920) assert assert assert assert + works with type that does not implement `#object_id` works with type that does not implement `#object_id` + match assert assert assert assert assert assert + expect_raises + pass if raises MyError pass if raises MyError + start_with assert assert assert assert assert assert assert assert - special cases - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert assert assert assert assert + be_false assert assert assert assert - values close to zero - assert assert - assert assert - assert assert - assert assert + assert assert + assert assert + be_true + assert assert + assert assert + assert assert + assert assert + accept a custom failure message + assert assert + assert assert +Crystal::System + .printf + supports %u supports %u + works works + supports %p supports %p + supports %l width supports %l width + supports %s supports %s + supports %x supports %x + supports %d supports %d +OptionParser + does to_s with multi line description (#5832) does to_s with multi line description (#5832) + gets short option with value that looks like flag gets short option with value that looks like flag + has required option with = has required option with = + doesn't raise if optional option is not specified with short flag doesn't raise if optional option is not specified with short flag + parses argument when only referenced in long flag parses argument when only referenced in long flag + raises on invalid option if value is given to none value handler (short flag, #9553) raises on invalid option if value is given to none value handler (short flag, #9553) + parses argument when referenced in long and short flag parses argument when referenced in long and short flag + can run a callback on every argument can run a callback on every argument + doesn't raise if required option is not specified doesn't raise if required option is not specified + gets long option with value -- (#8937) gets long option with value -- (#8937) + has required option with = (2) has required option with = (2) + unregisters subcommands on call unregisters subcommands on call + gnu_optional_args + doesn't get optional argument for long flag after space doesn't get optional argument for long flag after space + doesn't get optional argument for short flag after space doesn't get optional argument for short flag after space + raises if missing required argument separated from long flag raises if missing required argument separated from long flag + has flag has flag + multiple times + gets a double flag option multiple times gets a double flag option multiple times + gets a single flag option multiple times gets a single flag option multiple times + gets an existence flag multiple times gets an existence flag multiple times + has required option with space has required option with space + has required option separated from long flag has required option separated from long flag + calls the handler for invalid options calls the handler for invalid options + has flag with double dash has flag with double dash + has required option separated from flag has required option separated from flag + raises if flag pair doesn't start with dash (#4001) raises if flag pair doesn't start with dash (#4001) + doesn't raise if optional option is not specified with separated short flag doesn't raise if optional option is not specified with separated short flag + doesn't have flag doesn't have flag + raises if missing required option with space raises if missing required option with space + does to_s with separators does to_s with separators + handles subcommands handles subcommands + forward-match + distinguishes between '--lamb VALUE' and '--lambda VALUE' distinguishes between '--lamb VALUE' and '--lambda VALUE' + distinguishes between '--lamb=VALUE' and '--lambda=VALUE' distinguishes between '--lamb=VALUE' and '--lambda=VALUE' + raises if missing option next to flag raises if missing option next to flag + handles subcommand --help well (top level) handles subcommand --help well (top level) + has required option next to flag has required option next to flag + stops when asked stops when asked + has required option with long flag space has required option with long flag space + does to_s with banner does to_s with banner + gets short option with value -- (#8937) gets short option with value -- (#8937) + does to_s with very long flag (#3305) does to_s with very long flag (#3305) + doesn't have flag with double dash doesn't have flag with double dash + handles subcommand --help well (subcommand) handles subcommand --help well (subcommand) + calls the handler for missing options calls the handler for missing options + doesn't raise if optional option is not specified with long flag doesn't raise if optional option is not specified with long flag + has required option separated from flag but given together has required option separated from flag but given together + raises on invalid option if value is given to none value handler (long flag, #9553) raises on invalid option if value is given to none value handler (long flag, #9553) + parses with subcommands twice parses with subcommands twice + has required option with = (3) handles empty has required option with = (3) handles empty + raises on invalid option raises on invalid option + handles subcommands with hyphen handles subcommands with hyphen + has required option next to flag but given separated has required option next to flag but given separated + has flag with many letters has flag with many letters + doesn't raise if required option is not specified with separated short flag doesn't raise if required option is not specified with separated short flag + Consumption of flags following an ungiven optional argument + Given a long option with an optional value + doesn't eat further short options doesn't eat further short options + doesn't eat further long options doesn't eat further long options + Given a short option with an optional value + doesn't eat a following long option doesn't eat a following long option + does eat a value that looks like an option does eat a value that looks like an option + doesn't eat a following short option doesn't eat a following short option + -- + initializes without block and does parse! initializes without block and does parse! + ignores everything after -- with bool flag ignores everything after -- with bool flag + returns a pair with things coming before and after -- returns a pair with things coming before and after -- + gets `-` as argument gets `-` as argument + ignores everything after -- with double flag ignores everything after -- with double flag + ignores everything after -- with single flag) ignores everything after -- with single flag) + returns a pair with things coming before and after --, without -- returns a pair with things coming before and after --, without -- +String + gets each_line with chomp = false gets each_line with chomp = false + interpolation + of a single string of a single string + of multiple strings of multiple strings + of a single non-string of a single non-string + of string and char of string and char + of char and string of char and string + of multiple possibly non-strings of multiple possibly non-strings + escapes with unicode escapes with unicode + does each_char_with_index, with offset does each_char_with_index, with offset + creating from a slice + allows creating from an empty slice allows creating from an empty slice + raises if String.build negative capacity raises if String.build negative capacity + to_i + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + to_i128 assert assert assert assert assert assert @@ -27190,6 +22319,8 @@ assert assert assert assert assert assert + assert assert + to_i16 assert assert assert assert assert assert @@ -27198,6 +22329,12 @@ assert assert assert assert assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + to_i32 assert assert assert assert assert assert @@ -27206,6 +22343,13 @@ assert assert assert assert assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + to_u32 assert assert assert assert assert assert @@ -27214,6 +22358,11 @@ assert assert assert assert assert assert + assert assert + assert assert + assert assert + assert assert + to_i64 assert assert assert assert assert assert @@ -27226,11 +22375,7 @@ assert assert assert assert assert assert - assert assert - assert assert - assert assert - assert assert - invalid hexfloats + to_u16 assert assert assert assert assert assert @@ -27239,10 +22384,18 @@ assert assert assert assert assert assert + assert assert + assert assert + assert assert + to_u64 + assert assert + assert assert + assert assert assert assert assert assert assert assert assert assert + to_i8 assert assert assert assert assert assert @@ -27251,6 +22404,9 @@ assert assert assert assert assert assert + assert assert + assert assert + to_u8 assert assert assert assert assert assert @@ -27270,2070 +22426,17 @@ assert assert assert assert assert assert -WinError - .value .value - #message #message - .wsa_value .wsa_value -OpenSSL::SSL::HostnameValidation - matches_hostname? - literal matches literal matches - matches IDNA label matches IDNA label - normalizes case normalizes case - matches leading dot matches leading dot - wildcard matches according to RFC 6125, section 6.4.3 wildcard matches according to RFC 6125, section 6.4.3 - skips trailing dot skips trailing dot - validate_hostname - falls back to CN entry (unless SAN entry is defined) falls back to CN entry (unless SAN entry is defined) - verifies all SAN entries verifies all SAN entries - matches domains from certificate SAN entries matches domains from certificate SAN entries - matches IP from certificate SAN entries matches IP from certificate SAN entries -GC - .prof_stats .prof_stats - compiles GC.stats compiles GC.stats - .stats .stats - raises if calling enable when not disabled raises if calling enable when not disabled -Compress::Zlib::Reader - can be closed with sync (1) can be closed with sync (1) - can be closed without sync can be closed without sync - should be able to read should be able to read - should not read from empty stream should not read from empty stream - rewinds rewinds - can be closed with sync (2) can be closed with sync (2) - should not freeze when reading empty slice should not freeze when reading empty slice - should raise buffer error on error (#6575) should raise buffer error on error (#6575) -Crypto::Bcrypt - validates salt size validates salt size - validates password size validates password size - computes digest vectors computes digest vectors - doesn't have the sign expansion (high 8bit) security flaw doesn't have the sign expansion (high 8bit) security flaw - validates cost validates cost -Range - #each - doesn't have Nil as a type for beginless each doesn't have Nil as a type for beginless each - gives correct values with exclusive range gives correct values with exclusive range - raises on beginless raises on beginless - endless endless - doesn't have Nil as a type for endless each doesn't have Nil as a type for endless each - gives correct values with inclusive range gives correct values with inclusive range - is empty with empty inclusive range is empty with empty inclusive range - #size - raises on endless range raises on endless range - optimizes for int range optimizes for int range - works for other types works for other types - raises on beginless range raises on beginless range - is empty with ... and begin > end is empty with ... and begin > end - does inspect does inspect - #== #== - clones clones - gets basic properties gets basic properties - sum - called with no block is specialized for performance (BigInt) called with no block is specialized for performance (BigInt) - is equivalent to Enumerable#sum is equivalent to Enumerable#sum - called with no block is specialized for performance called with no block is specialized for performance - initialized with new method initialized with new method - does to_s does to_s - #step - "begin == end exclusive" yielding "begin == end exclusive" yielding - "begin > end exclusive" iterator "begin > end exclusive" iterator - raises on beginless range raises on beginless range - "exclusive step over" iterator "exclusive step over" iterator - "Float step" yielding "Float step" yielding - "begin == end inclusive" yielding "begin == end inclusive" yielding - "begin > end exclusive" yielding "begin > end exclusive" yielding - "Time::Span step" yielding "Time::Span step" yielding - "begin.succ == end inclusive" iterator "begin.succ == end inclusive" iterator - "endless range" iterator "endless range" iterator - "begin.succ == end exclusive" yielding "begin.succ == end exclusive" yielding - "inclusive step" iterator "inclusive step" iterator - "endless range" yielding "endless range" yielding - "inclusive step over" iterator "inclusive step over" iterator - "Float step" iterator "Float step" iterator - "inclusive default" yielding "inclusive default" yielding - "begin.succ == end exclusive" iterator "begin.succ == end exclusive" iterator - "exclusive default" iterator "exclusive default" iterator - "begin == end exclusive" iterator "begin == end exclusive" iterator - "exclusive step" yielding "exclusive step" yielding - "inclusive step" yielding "inclusive step" yielding - "exclusive step" iterator "exclusive step" iterator - "begin.succ == end inclusive" yielding "begin.succ == end inclusive" yielding - "begin == end inclusive" iterator "begin == end inclusive" iterator - "Time::Span step" iterator "Time::Span step" iterator - "begin > end inclusive" iterator "begin > end inclusive" iterator - "inclusive step over" yielding "inclusive step over" yielding - "exclusive default" yielding "exclusive default" yielding - with #succ type - "at definition range by" yielding "at definition range by" yielding - "at definition range missing by" iterator "at definition range missing by" iterator - "basic" yielding "basic" yielding - "missing end by" yielding "missing end by" yielding - "at definition range missing by" iterator "at definition range missing by" iterator - "missing end by" iterator "missing end by" iterator - "at definition range" iterator "at definition range" iterator - "basic by" yielding "basic by" yielding - "at definition range by" iterator "at definition range by" iterator - "at definition range missing by" yielding "at definition range missing by" yielding - "at definition range by" iterator "at definition range by" iterator - "basic" iterator "basic" iterator - "at definition range by" yielding "at definition range by" yielding - "at definition range missing by" yielding "at definition range missing by" yielding - "basic by" iterator "basic by" iterator - "at definition range" yielding "at definition range" yielding - "exclusive step over" yielding "exclusive step over" yielding - "begin > end inclusive" yielding "begin > end inclusive" yielding - "inclusive default" iterator "inclusive default" iterator - #each iterator - is not empty with ... and begin.succ == end is not empty with ... and begin.succ == end - is not empty with .. and begin == end is not empty with .. and begin == end - is empty with ... and begin > end is empty with ... and begin > end - does next with inclusive range does next with inclusive range - is empty with .. and begin > end is empty with .. and begin > end - raises on beginless range raises on beginless range - does next with exclusive range does next with exclusive range - cycles cycles - does with endless range does with endless range - includes? includes? - is not empty with ... and begin.succ == end is not empty with ... and begin.succ == end - is not empty with .. and begin == end is not empty with .. and begin == end - #sample - for an integer range - raises on exclusive range that would underflow raises on exclusive range that would underflow - samples an inclusive range with n = 1 samples an inclusive range with n = 1 - raises on invalid range with n > 1 raises on invalid range with n > 1 - samples an inclusive range with n > 1 samples an inclusive range with n > 1 - samples an exclusive range with n > 1 samples an exclusive range with n > 1 - samples an inclusive range without n samples an inclusive range without n - raises on invalid range with n = 1 raises on invalid range with n = 1 - samples an inclusive range with n equal to or bigger than the available values samples an inclusive range with n equal to or bigger than the available values - samples an inclusive range with n > 16 samples an inclusive range with n > 16 - raises on invalid range with n = 0 raises on invalid range with n = 0 - samples an exclusive range with n = 1 samples an exclusive range with n = 1 - samples an exclusive range without n samples an exclusive range without n - raises on invalid range without n raises on invalid range without n - samples a range with nilable types samples a range with nilable types - for a float range - samples an exclusive range with n > 1 samples an exclusive range with n > 1 - samples an inclusive range with n > 1 samples an inclusive range with n > 1 - samples an exclusive range without n samples an exclusive range without n - samples an inclusive range with n > 16 samples an inclusive range with n > 16 - samples an exclusive range with n = 1 samples an exclusive range with n = 1 - samples an inclusive range with n >= 1 and begin == end samples an inclusive range with n >= 1 and begin == end - raises on invalid range with n = 1 raises on invalid range with n = 1 - raises on invalid range with n > 1 raises on invalid range with n > 1 - samples an inclusive range without n samples an inclusive range without n - raises on invalid range with n = 0 raises on invalid range with n = 0 - samples an inclusive range with n = 1 samples an inclusive range with n = 1 - raises on open range raises on open range - samples with n = 0 samples with n = 0 - samples a float range as a distribution samples a float range as a distribution - is empty with .. and begin > end is empty with .. and begin > end - === - endless endless - beginless beginless - inclusive inclusive - exclusive exclusive - no limits no limits - #reverse_each iterator - is empty with .. and begin > end is empty with .. and begin > end - raises on endless range raises on endless range - is not empty with ... and begin.succ == end is not empty with ... and begin.succ == end - reverse cycles reverse cycles - does next with inclusive range does next with inclusive range - does next with beginless range does next with beginless range - is empty with ... and begin > end is empty with ... and begin > end - is not empty with .. and begin == end is not empty with .. and begin == end - does next with exclusive range does next with exclusive range - bsearch - Float Float - Int Int - BigInt BigInt - map - optimizes for int range optimizes for int range - works for other types works for other types - #reverse_each - iterators on beginless range iterators on beginless range - is empty with empty inclusive range is empty with empty inclusive range - gives correct values with exclusive range gives correct values with exclusive range - gives correct values with inclusive range gives correct values with inclusive range - raises on endless range raises on endless range -Random::ISAAC - generates random numbers as generated official implementation generates random numbers as generated official implementation - different instances generate different numbers (#7976) different instances generate different numbers (#7976) - can be initialized without explicit seed can be initialized without explicit seed -Path - #absolute? - "C:/foo/bar" (posix) "C:/foo/bar" (posix) - "C:\foo" (posix) "C:\foo" (posix) - "C:\" (windows) "C:\" (windows) - "C:/foo/bar" (windows) "C:/foo/bar" (windows) - "\\some\share\" (posix) "\\some\share\" (posix) - "./foo" (posix) "./foo" (posix) - ".\foo" (posix) ".\foo" (posix) - "./foo" (windows) "./foo" (windows) - "~\foo" (posix) "~\foo" (posix) - "c:\\" (posix) "c:\\" (posix) - "//some/share/" (posix) "//some/share/" (posix) - "\.\foo" (posix) "\.\foo" (posix) - "C:/" (windows) "C:/" (windows) - "//some/share" (posix) "//some/share" (posix) - "/foo" (windows) "/foo" (windows) - "//some/share/" (windows) "//some/share/" (windows) - "C:/foo" (windows) "C:/foo" (windows) - "foo" (windows) "foo" (windows) - "C:/foo" (posix) "C:/foo" (posix) - "C:" (windows) "C:" (windows) - "foo" (posix) "foo" (posix) - "C:" (posix) "C:" (posix) - "\foo" (windows) "\foo" (windows) - "C:\" (posix) "C:\" (posix) - ".\foo" (windows) ".\foo" (windows) - "\\some\share" (posix) "\\some\share" (posix) - "\foo" (posix) "\foo" (posix) - "foo" (windows) "foo" (windows) - "/foo" (posix) "/foo" (posix) - "~\foo" (windows) "~\foo" (windows) - "C:\foo" (windows) "C:\foo" (windows) - "/./foo" (windows) "/./foo" (windows) - "//some/share" (windows) "//some/share" (windows) - "C:/" (posix) "C:/" (posix) - "foo" (posix) "foo" (posix) - "\\some\share" (windows) "\\some\share" (windows) - "\\some\share\" (windows) "\\some\share\" (windows) - "/./foo" (posix) "/./foo" (posix) - "\.\foo" (windows) "\.\foo" (windows) - "~/foo" (posix) "~/foo" (posix) - "c:\\" (windows) "c:\\" (windows) - "~/foo" (windows) "~/foo" (windows) - #parents - "////" (windows) "////" (windows) - "" (posix) "" (posix) - "/" (windows) "/" (windows) - "foo\" (posix) "foo\" (posix) - "foo/../bar/" (posix) "foo/../bar/" (posix) - "C:\." (posix) "C:\." (posix) - "\Users/foo\bar.cr" (windows) "\Users/foo\bar.cr" (windows) - "foo/bar/.." (windows) "foo/bar/.." (windows) - "C:\" (windows) "C:\" (windows) - "foo/bar/../." (posix) "foo/bar/../." (posix) - "foo/./bar/" (windows) "foo/./bar/" (windows) - "C:\\folder" (posix) "C:\\folder" (posix) - "foo/./bar/." (windows) "foo/./bar/." (windows) - ".\foo" (posix) ".\foo" (posix) - "foo/bar/./." (windows) "foo/bar/./." (windows) - "/Users/foo/bar.cr" (windows) "/Users/foo/bar.cr" (windows) - "\" (windows) "\" (windows) - "/m" (windows) "/m" (windows) - "foo" (posix) "foo" (posix) - "m/.gitignore" (windows) "m/.gitignore" (windows) - "foo/../bar/" (windows) "foo/../bar/" (windows) - "/foo" (posix) "/foo" (posix) - "C:/" (posix) "C:/" (posix) - "C:\Users\foo\bar.cr" (posix) "C:\Users\foo\bar.cr" (posix) - "m//" (posix) "m//" (posix) - "foo/../bar/." (posix) "foo/../bar/." (posix) - "foo\bar\" (windows) "foo\bar\" (windows) - "foo/../bar/." (windows) "foo/../bar/." (windows) - "/." (posix) "/." (posix) - "/" (posix) "/" (posix) - "foo/bar/./." (posix) "foo/bar/./." (posix) - "foo/bar/" (windows) "foo/bar/" (windows) - "\" (posix) "\" (posix) - "C:\" (posix) "C:\" (posix) - "." (posix) "." (posix) - "Users/foo/bar.cr" (posix) "Users/foo/bar.cr" (posix) - "/m/" (windows) "/m/" (windows) - "m/" (posix) "m/" (posix) - "\Users\foo\bar.cr" (windows) "\Users\foo\bar.cr" (windows) - "/m" (posix) "/m" (posix) - "m//" (windows) "m//" (windows) - "./foo" (windows) "./foo" (windows) - "\Users\foo\bar.cr" (posix) "\Users\foo\bar.cr" (posix) - "C:\folder" (windows) "C:\folder" (windows) - "/foo" (windows) "/foo" (windows) - "foo/bar/." (posix) "foo/bar/." (posix) - "." (windows) "." (windows) - "m" (windows) "m" (windows) - "/m/" (posix) "/m/" (posix) - ".\foo" (windows) ".\foo" (windows) - "m//a/b" (windows) "m//a/b" (windows) - "foo/bar/." (posix) "foo/bar/." (posix) - "m/.gitignore" (posix) "m/.gitignore" (posix) - "C:folder" (windows) "C:folder" (windows) - "C:" (windows) "C:" (windows) - "m//a/b" (posix) "m//a/b" (posix) - "////" (posix) "////" (posix) - "m/" (windows) "m/" (windows) - "C:\\folder" (windows) "C:\\folder" (windows) - "C:\Users\foo\bar.cr" (windows) "C:\Users\foo\bar.cr" (windows) - "\Users/foo\bar.cr" (posix) "\Users/foo\bar.cr" (posix) - "C:" (posix) "C:" (posix) - "m" (posix) "m" (posix) - "foo" (windows) "foo" (windows) - "foo/bar/../." (windows) "foo/bar/../." (windows) - "" (windows) "" (windows) - "foo/bar/." (windows) "foo/bar/." (windows) - "foo\" (windows) "foo\" (windows) - "/." (windows) "/." (windows) - "C:\folder" (posix) "C:\folder" (posix) - "Users/foo/bar.cr" (windows) "Users/foo/bar.cr" (windows) - "foo/bar/" (posix) "foo/bar/" (posix) - "foo/./bar/." (posix) "foo/./bar/." (posix) - "foo/bar/." (windows) "foo/bar/." (windows) - "foo/./bar/" (posix) "foo/./bar/" (posix) - "C:\." (windows) "C:\." (windows) - "foo/" (windows) "foo/" (windows) - "foo/bar/.." (posix) "foo/bar/.." (posix) - "foo\bar\" (posix) "foo\bar\" (posix) - "/Users/foo/bar.cr" (posix) "/Users/foo/bar.cr" (posix) - "C:/" (windows) "C:/" (windows) - "C:folder" (posix) "C:folder" (posix) - "./foo" (posix) "./foo" (posix) - "foo/" (posix) "foo/" (posix) - #extension - "test.ext/" (posix) "test.ext/" (posix) - "test/." (posix) "test/." (posix) - "test.ext/foo" (windows) "test.ext/foo" (windows) - "/foo/bar/foo." (posix) "/foo/bar/foo." (posix) - "test.ext/" (windows) "test.ext/" (windows) - "/foo/bar/baz.cr" (windows) "/foo/bar/baz.cr" (windows) - "test.ext/foo" (posix) "test.ext/foo" (posix) - "/foo/bar/foo." (windows) "/foo/bar/foo." (windows) - "/foo/bar/baz.cr.cz" (windows) "/foo/bar/baz.cr.cz" (windows) - "test" (windows) "test" (windows) - "/foo/bar/.profile.sh" (windows) "/foo/bar/.profile.sh" (windows) - "test\." (posix) "test\." (posix) - "test/." (windows) "test/." (windows) - "/foo/bar/baz.cr.cz" (posix) "/foo/bar/baz.cr.cz" (posix) - "/foo/bar/.profile.sh" (posix) "/foo/bar/.profile.sh" (posix) - "test.ext\" (windows) "test.ext\" (windows) - "/foo/bar/.profile" (posix) "/foo/bar/.profile" (posix) - "/foo/bar/baz.cr" (posix) "/foo/bar/baz.cr" (posix) - "/foo/bar/.profile" (windows) "/foo/bar/.profile" (windows) - "test.ext\" (posix) "test.ext\" (posix) - "test.ext/foo/" (posix) "test.ext/foo/" (posix) - "test\." (windows) "test\." (windows) - "test.ext/foo/" (windows) "test.ext/foo/" (windows) - "test" (posix) "test" (posix) - #relative_to - relativizable paths relativizable paths - mixed input paths mixed input paths - paths that can't be relativized paths that can't be relativized - #normalize - paths with backslash - removes trailing slash - normalizes "abc\def\" (posix) normalizes "abc\def\" (posix) - normalizes "..\" (windows) normalizes "..\" (windows) - normalizes "abc\def\" (windows) normalizes "abc\def\" (windows) - normalizes "..\..\" (posix) normalizes "..\..\" (posix) - normalizes ".\" (posix) normalizes ".\" (posix) - normalizes "abc\" (windows) normalizes "abc\" (windows) - normalizes "a\b\c\" (windows) normalizes "a\b\c\" (windows) - normalizes "\abc\" (windows) normalizes "\abc\" (windows) - normalizes "abc\" (posix) normalizes "abc\" (posix) - normalizes "..\..\" (windows) normalizes "..\..\" (windows) - normalizes "a\b\c\" (posix) normalizes "a\b\c\" (posix) - normalizes "..\" (posix) normalizes "..\" (posix) - normalizes "\abc\" (posix) normalizes "\abc\" (posix) - normalizes ".\" (windows) normalizes ".\" (windows) - removes . - normalizes "abc\." (posix) normalizes "abc\." (posix) - normalizes "\.\abc\def" (posix) normalizes "\.\abc\def" (posix) - normalizes "abc\.\def" (posix) normalizes "abc\.\def" (posix) - normalizes "abc\.\def" (windows) normalizes "abc\.\def" (windows) - normalizes "\.\abc\def" (windows) normalizes "\.\abc\def" (windows) - normalizes "abc\." (windows) normalizes "abc\." (windows) - already clean - normalizes "..\.." (posix) normalizes "..\.." (posix) - normalizes "\abc" (posix) normalizes "\abc" (posix) - normalizes "a\b\c" (posix) normalizes "a\b\c" (posix) - normalizes "\" (posix) normalizes "\" (posix) - normalizes "..\.." (windows) normalizes "..\.." (windows) - normalizes "\abc" (windows) normalizes "\abc" (windows) - normalizes "abc\def" (windows) normalizes "abc\def" (windows) - normalizes "\" (windows) normalizes "\" (windows) - normalizes "abc\def" (posix) normalizes "abc\def" (posix) - normalizes "a\b\c" (windows) normalizes "a\b\c" (windows) - normalizes "..\..\abc" (posix) normalizes "..\..\abc" (posix) - normalizes "..\..\abc" (windows) normalizes "..\..\abc" (windows) - removes .. - normalizes "abc\def\..\ghi\..\jkl" (posix) normalizes "abc\def\..\ghi\..\jkl" (posix) - normalizes "abc\def\..\.." (posix) normalizes "abc\def\..\.." (posix) - normalizes "abc\def\.." (windows) normalizes "abc\def\.." (windows) - normalizes "abc\def\.." (posix) normalizes "abc\def\.." (posix) - normalizes "abc\def\..\ghi\..\jkl" (windows) normalizes "abc\def\..\ghi\..\jkl" (windows) - normalizes "abc\def\..\..\.." (windows) normalizes "abc\def\..\..\.." (windows) - normalizes "abc\def\..\..\.." (posix) normalizes "abc\def\..\..\.." (posix) - normalizes "\abc\def\..\..\.." (posix) normalizes "\abc\def\..\..\.." (posix) - normalizes "\abc\def\..\..\.." (windows) normalizes "\abc\def\..\..\.." (windows) - normalizes "abc\def\ghi\..\jkl" (windows) normalizes "abc\def\ghi\..\jkl" (windows) - normalizes "abc\def\..\..\..\ghi\jkl\..\..\..\mno" (posix) normalizes "abc\def\..\..\..\ghi\jkl\..\..\..\mno" (posix) - normalizes "\abc\def\..\.." (windows) normalizes "\abc\def\..\.." (windows) - normalizes "\abc\def\..\.." (posix) normalizes "\abc\def\..\.." (posix) - normalizes "abc\def\..\..\..\ghi\jkl\..\..\..\mno" (windows) normalizes "abc\def\..\..\..\ghi\jkl\..\..\..\mno" (windows) - normalizes "abc\def\ghi\..\jkl" (posix) normalizes "abc\def\ghi\..\jkl" (posix) - normalizes "abc\def\..\.." (windows) normalizes "abc\def\..\.." (windows) - combinations - normalizes "abc\.\..\def" (windows) normalizes "abc\.\..\def" (windows) - normalizes "abc\\.\..\def" (posix) normalizes "abc\\.\..\def" (posix) - normalizes "abc\\.\..\def" (windows) normalizes "abc\\.\..\def" (windows) - normalizes "abc\..\..\.\.\..\def" (windows) normalizes "abc\..\..\.\.\..\def" (windows) - normalizes "abc\.\..\def" (posix) normalizes "abc\.\..\def" (posix) - normalizes "abc\..\..\.\.\..\def" (posix) normalizes "abc\..\..\.\.\..\def" (posix) - removes double slash - normalizes "\\\abc" (windows) normalizes "\\\abc" (windows) - normalizes "abc\\def\\ghi" (windows) normalizes "abc\\def\\ghi" (windows) - normalizes "\\abc\\" (windows) normalizes "\\abc\\" (windows) - normalizes "\\\abc" (posix) normalizes "\\\abc" (posix) - normalizes "\\abc" (windows) normalizes "\\abc" (windows) - normalizes "abc\\def\\ghi" (posix) normalizes "abc\\def\\ghi" (posix) - normalizes "abc\\" (windows) normalizes "abc\\" (windows) - normalizes "\\abc" (posix) normalizes "\\abc" (posix) - normalizes "\\abc\\" (posix) normalizes "\\abc\\" (posix) - normalizes "abc\\" (posix) normalizes "abc\\" (posix) - path with forward slash - removes .. - normalizes "abc/def/../../../ghi/jkl/../../../mno" (posix) normalizes "abc/def/../../../ghi/jkl/../../../mno" (posix) - normalizes "abc/def/../../../ghi/jkl/../../../mno" (windows) normalizes "abc/def/../../../ghi/jkl/../../../mno" (windows) - normalizes "abc/def/../../.." (windows) normalizes "abc/def/../../.." (windows) - normalizes "/abc/def/../../.." (windows) normalizes "/abc/def/../../.." (windows) - normalizes "abc/def/.." (windows) normalizes "abc/def/.." (windows) - normalizes "/abc/def/../.." (windows) normalizes "/abc/def/../.." (windows) - normalizes "abc/def/ghi/../jkl" (posix) normalizes "abc/def/ghi/../jkl" (posix) - normalizes "abc/def/.." (posix) normalizes "abc/def/.." (posix) - normalizes "abc/def/../ghi/../jkl" (windows) normalizes "abc/def/../ghi/../jkl" (windows) - normalizes "/abc/def/../../.." (posix) normalizes "/abc/def/../../.." (posix) - normalizes "/abc/def/../.." (posix) normalizes "/abc/def/../.." (posix) - normalizes "abc/def/../ghi/../jkl" (posix) normalizes "abc/def/../ghi/../jkl" (posix) - normalizes "abc/def/../.." (posix) normalizes "abc/def/../.." (posix) - normalizes "abc/def/../.." (windows) normalizes "abc/def/../.." (windows) - normalizes "abc/def/ghi/../jkl" (windows) normalizes "abc/def/ghi/../jkl" (windows) - normalizes "abc/def/../../.." (posix) normalizes "abc/def/../../.." (posix) - already clean - normalizes "" (posix) normalizes "" (posix) - normalizes "a/b/c" (windows) normalizes "a/b/c" (windows) - normalizes ".." (posix) normalizes ".." (posix) - normalizes "/abc" (windows) normalizes "/abc" (windows) - normalizes "abc/def" (posix) normalizes "abc/def" (posix) - normalizes "" (windows) normalizes "" (windows) - normalizes "../.." (windows) normalizes "../.." (windows) - normalizes "abc" (windows) normalizes "abc" (windows) - normalizes "." (windows) normalizes "." (windows) - normalizes "../.." (posix) normalizes "../.." (posix) - normalizes "../../abc" (windows) normalizes "../../abc" (windows) - normalizes "/" (posix) normalizes "/" (posix) - normalizes "." (posix) normalizes "." (posix) - normalizes "../../abc" (posix) normalizes "../../abc" (posix) - normalizes "/" (windows) normalizes "/" (windows) - normalizes "a/b/c" (posix) normalizes "a/b/c" (posix) - normalizes ".." (windows) normalizes ".." (windows) - normalizes "/abc" (posix) normalizes "/abc" (posix) - normalizes "abc" (posix) normalizes "abc" (posix) - normalizes "abc/def" (windows) normalizes "abc/def" (windows) - removes double slash - normalizes "abc//" (windows) normalizes "abc//" (windows) - normalizes "//abc//" (windows) normalizes "//abc//" (windows) - normalizes "abc//" (posix) normalizes "abc//" (posix) - normalizes "//abc//" (posix) normalizes "//abc//" (posix) - normalizes "abc//def//ghi" (windows) normalizes "abc//def//ghi" (windows) - normalizes "//abc" (windows) normalizes "//abc" (windows) - normalizes "abc//def//ghi" (posix) normalizes "abc//def//ghi" (posix) - normalizes "///abc" (windows) normalizes "///abc" (windows) - normalizes "///abc" (posix) normalizes "///abc" (posix) - normalizes "//abc" (posix) normalizes "//abc" (posix) - removes trailing slash - normalizes "a/b/c/" (posix) normalizes "a/b/c/" (posix) - normalizes "abc/def/" (posix) normalizes "abc/def/" (posix) - normalizes "./" (windows) normalizes "./" (windows) - normalizes "../../" (windows) normalizes "../../" (windows) - normalizes "/abc/" (windows) normalizes "/abc/" (windows) - normalizes "a/b/c/" (windows) normalizes "a/b/c/" (windows) - normalizes "../" (windows) normalizes "../" (windows) - normalizes "./" (posix) normalizes "./" (posix) - normalizes "/abc/" (posix) normalizes "/abc/" (posix) - normalizes "../../" (posix) normalizes "../../" (posix) - normalizes "abc/" (windows) normalizes "abc/" (windows) - normalizes "../" (posix) normalizes "../" (posix) - normalizes "abc/def/" (windows) normalizes "abc/def/" (windows) - normalizes "abc/" (posix) normalizes "abc/" (posix) - combinations - normalizes "abc//./../def" (posix) normalizes "abc//./../def" (posix) - normalizes "abc/./../def" (windows) normalizes "abc/./../def" (windows) - normalizes "abc/../../././../def" (windows) normalizes "abc/../../././../def" (windows) - normalizes "abc/./../def" (posix) normalizes "abc/./../def" (posix) - normalizes "abc/../../././../def" (posix) normalizes "abc/../../././../def" (posix) - normalizes "abc//./../def" (windows) normalizes "abc//./../def" (windows) - removes . - normalizes "abc/./def" (posix) normalizes "abc/./def" (posix) - normalizes "/./abc/def" (posix) normalizes "/./abc/def" (posix) - normalizes "abc/./def" (windows) normalizes "abc/./def" (windows) - normalizes "abc/." (posix) normalizes "abc/." (posix) - normalizes "/./abc/def" (windows) normalizes "/./abc/def" (windows) - normalizes "abc/." (windows) normalizes "abc/." (windows) - with drive - normalizes "C:/foo" (posix) normalizes "C:/foo" (posix) - normalizes "C:/" (posix) normalizes "C:/" (posix) - normalizes "C:\" (posix) normalizes "C:\" (posix) - normalizes "C:/foo" (windows) normalizes "C:/foo" (windows) - normalizes "C:" (posix) normalizes "C:" (posix) - normalizes "C:" (windows) normalizes "C:" (windows) - normalizes "C:foo" (posix) normalizes "C:foo" (posix) - normalizes "C:\" (windows) normalizes "C:\" (windows) - normalizes "C:/" (windows) normalizes "C:/" (windows) - normalizes "C:\foo" (posix) normalizes "C:\foo" (posix) - normalizes "C:\foo" (windows) normalizes "C:\foo" (windows) - normalizes "C:foo" (windows) normalizes "C:foo" (windows) - #<=> - case sensitivity case sensitivity - #expand - supports ~\ for Windows paths only - (base: "") "~\a" (posix) (base: "") "~\a" (posix) - (base: "") "~\a" (windows) (base: "") "~\a" (windows) - converts a pathname to an absolute pathname, using ~ (home) as base - (base: "~/b") "~/a" (windows) (base: "~/b") "~/a" (windows) - (base: "/tmp/gumby/ddd") "~/a" (windows) (base: "/tmp/gumby/ddd") "~/a" (windows) - (base: "/tmp/gumby/ddd") "~/a" (posix) (base: "/tmp/gumby/ddd") "~/a" (posix) - (base: "/tmp/gumby/ddd") "~" (posix) (base: "/tmp/gumby/ddd") "~" (posix) - (base: "") "~/" (windows) (base: "") "~/" (windows) - (base: "") ".." (windows) (base: "") ".." (windows) - (base: "") ".." (posix) (base: "") ".." (posix) - (base: "") "~/..badfilename" (windows) (base: "") "~/..badfilename" (windows) - (base: "/tmp/gumby/ddd") "~" (windows) (base: "/tmp/gumby/ddd") "~" (windows) - (base: "~/b") "~/a" (posix) (base: "~/b") "~/a" (posix) - (base: "") "~/..badfilename" (posix) (base: "") "~/..badfilename" (posix) - (base: "") "~" (posix) (base: "") "~" (posix) - (base: "") "~/" (posix) (base: "") "~/" (posix) - (base: "") "~" (windows) (base: "") "~" (windows) - replaces multiple / with a single / - (base: "") "////some/path" (posix) (base: "") "////some/path" (posix) - (base: "") "//some/path" (posix) (base: "") "//some/path" (posix) - (base: "") "/some////path" (posix) (base: "") "/some////path" (posix) - (base: "") "/some////path" (windows) (base: "") "/some////path" (windows) - (base: "") "////some/path" (windows) (base: "") "////some/path" (windows) - (base: "") "//some/path" (windows) (base: "") "//some/path" (windows) - doesn't expand ~ doesn't expand ~ - checks all possible types for expand(home:) - (base: "") "~/a" (posix) (base: "") "~/a" (posix) - (base: "") "~/a" (windows) (base: "") "~/a" (windows) - (base: "") "~/a" (windows) (base: "") "~/a" (windows) - (base: "") "~/a" (posix) (base: "") "~/a" (posix) - (base: "") "~/a" (windows) (base: "") "~/a" (windows) - (base: "") "~/a" (posix) (base: "") "~/a" (posix) - ignores name starting with ~ - (base: "/current") "~foo.txt" (posix) (base: "/current") "~foo.txt" (posix) - (base: "/current") "~foo.txt" (windows) (base: "/current") "~foo.txt" (windows) - with drive - (base: "D:") "\foo" (windows) (base: "D:") "\foo" (windows) - (base: "D:\") "C:" (posix) (base: "D:\") "C:" (posix) - (base: "D:\") "foo" (windows) (base: "D:\") "foo" (windows) - (base: "D:\") "foo" (posix) (base: "D:\") "foo" (posix) - (base: "D:\") "foo" (windows) (base: "D:\") "foo" (windows) - (base: "D:/") "C:foo" (posix) (base: "D:/") "C:foo" (posix) - (base: "D:\") "C:/foo" (windows) (base: "D:\") "C:/foo" (windows) - (base: "D:") "C:" (windows) (base: "D:") "C:" (windows) - (base: "D:\") "C:\foo" (windows) (base: "D:\") "C:\foo" (windows) - (base: "D:") "/foo" (posix) (base: "D:") "/foo" (posix) - (base: "D:\") "C:foo" (windows) (base: "D:\") "C:foo" (windows) - (base: "D:\") "C:/" (posix) (base: "D:\") "C:/" (posix) - (base: "D:") "foo" (posix) (base: "D:") "foo" (posix) - (base: "D:/") "C:\" (windows) (base: "D:/") "C:\" (windows) - (base: "D:\") "/foo" (windows) (base: "D:\") "/foo" (windows) - (base: "D:") "C:/foo" (windows) (base: "D:") "C:/foo" (windows) - (base: "D:\") "foo" (posix) (base: "D:\") "foo" (posix) - (base: "D:\") "\foo" (posix) (base: "D:\") "\foo" (posix) - (base: "D:") "\foo" (posix) (base: "D:") "\foo" (posix) - (base: "D:\") "C:" (posix) (base: "D:\") "C:" (posix) - (base: "D:\") "C:\" (posix) (base: "D:\") "C:\" (posix) - (base: "D:\") "C:\foo" (posix) (base: "D:\") "C:\foo" (posix) - (base: "D:\") "C:" (windows) (base: "D:\") "C:" (windows) - (base: "D:\") "C:/" (windows) (base: "D:\") "C:/" (windows) - (base: "D:/") "C:\" (posix) (base: "D:/") "C:\" (posix) - (base: "D:\") "C:\foo" (posix) (base: "D:\") "C:\foo" (posix) - (base: "D:\") "C:" (windows) (base: "D:\") "C:" (windows) - (base: "D:\") "C:/" (posix) (base: "D:\") "C:/" (posix) - (base: "D:/") "C:/" (posix) (base: "D:/") "C:/" (posix) - (base: "D:/") "C:\foo" (windows) (base: "D:/") "C:\foo" (windows) - (base: "D:\") "C:/foo" (windows) (base: "D:\") "C:/foo" (windows) - (base: "D:\") "C:\" (windows) (base: "D:\") "C:\" (windows) - (base: "D:\") "C:/" (windows) (base: "D:\") "C:/" (windows) - (base: "D:\") "C:foo" (posix) (base: "D:\") "C:foo" (posix) - (base: "D:/") "\foo" (windows) (base: "D:/") "\foo" (windows) - (base: "D:") "foo" (windows) (base: "D:") "foo" (windows) - (base: "D:/") "C:foo" (windows) (base: "D:/") "C:foo" (windows) - (base: "D:") "C:/" (posix) (base: "D:") "C:/" (posix) - (base: "D:") "C:foo" (windows) (base: "D:") "C:foo" (windows) - (base: "D:/") "\foo" (posix) (base: "D:/") "\foo" (posix) - (base: "D:") "C:" (posix) (base: "D:") "C:" (posix) - (base: "D:/") "C:/" (windows) (base: "D:/") "C:/" (windows) - (base: "D:/") "/foo" (posix) (base: "D:/") "/foo" (posix) - (base: "D:/") "C:" (posix) (base: "D:/") "C:" (posix) - (base: "D:\") "C:\" (windows) (base: "D:\") "C:\" (windows) - (base: "D:\") "C:\" (posix) (base: "D:\") "C:\" (posix) - (base: "D:") "C:/" (windows) (base: "D:") "C:/" (windows) - (base: "D:\") "C:/foo" (posix) (base: "D:\") "C:/foo" (posix) - (base: "D:/") "foo" (windows) (base: "D:/") "foo" (windows) - (base: "D:\") "\foo" (posix) (base: "D:\") "\foo" (posix) - (base: "D:/") "C:/foo" (posix) (base: "D:/") "C:/foo" (posix) - (base: "D:/") "C:\foo" (posix) (base: "D:/") "C:\foo" (posix) - (base: "D:") "C:\foo" (posix) (base: "D:") "C:\foo" (posix) - (base: "D:/") "C:/foo" (windows) (base: "D:/") "C:/foo" (windows) - (base: "D:") "C:foo" (posix) (base: "D:") "C:foo" (posix) - (base: "D:\") "C:/foo" (posix) (base: "D:\") "C:/foo" (posix) - (base: "D:") "C:\" (posix) (base: "D:") "C:\" (posix) - (base: "D:/") "foo" (posix) (base: "D:/") "foo" (posix) - (base: "D:\") "C:\foo" (windows) (base: "D:\") "C:\foo" (windows) - (base: "D:\") "C:foo" (posix) (base: "D:\") "C:foo" (posix) - (base: "D:") "/foo" (windows) (base: "D:") "/foo" (windows) - (base: "D:\") "C:foo" (windows) (base: "D:\") "C:foo" (windows) - (base: "D:/") "/foo" (windows) (base: "D:/") "/foo" (windows) - (base: "D:\") "\foo" (windows) (base: "D:\") "\foo" (windows) - (base: "D:") "C:\foo" (windows) (base: "D:") "C:\foo" (windows) - (base: "D:") "C:\" (windows) (base: "D:") "C:\" (windows) - (base: "D:/") "C:" (windows) (base: "D:/") "C:" (windows) - (base: "D:\") "\foo" (windows) (base: "D:\") "\foo" (windows) - (base: "D:\") "/foo" (posix) (base: "D:\") "/foo" (posix) - (base: "D:") "C:/foo" (posix) (base: "D:") "C:/foo" (posix) - converts a pathname to an absolute pathname - (base: "") "a" (posix) (base: "") "a" (posix) - (base: "") "a" (windows) (base: "") "a" (windows) - (base: "") "a" (posix) (base: "") "a" (posix) - (base: "") "a" (windows) (base: "") "a" (windows) - (base: "") "" (posix) (base: "") "" (posix) - (base: "") "" (windows) (base: "") "" (windows) - expands /./dir to /dir - (base: "/") "/./dir" (posix) (base: "/") "/./dir" (posix) - (base: "/") "/./dir" (windows) (base: "/") "/./dir" (windows) - converts a pathname to an absolute pathname, using ~ (home) as base (trailing /) - (base: "~/b") "~/a" (posix) (base: "~/b") "~/a" (posix) - (base: "") "~/" (windows) (base: "") "~/" (windows) - (base: "/tmp/gumby/ddd") "~" (windows) (base: "/tmp/gumby/ddd") "~" (windows) - (base: "") "~/.." (posix) (base: "") "~/.." (posix) - (base: "") "~/..badfilename" (windows) (base: "") "~/..badfilename" (windows) - (base: "") "~/" (posix) (base: "") "~/" (posix) - (base: "/tmp/gumby/ddd") "~" (posix) (base: "/tmp/gumby/ddd") "~" (posix) - (base: "~/b") "~/a" (windows) (base: "~/b") "~/a" (windows) - (base: "") "~/..badfilename" (posix) (base: "") "~/..badfilename" (posix) - (base: "") "~/.." (windows) (base: "") "~/.." (windows) - (base: "/tmp/gumby/ddd") "~/a" (posix) (base: "/tmp/gumby/ddd") "~/a" (posix) - (base: "/tmp/gumby/ddd") "~/a" (windows) (base: "/tmp/gumby/ddd") "~/a" (windows) - (base: "") "~" (windows) (base: "") "~" (windows) - (base: "") "~" (posix) (base: "") "~" (posix) - expand path with .. - (base: "tmp/x") "../bin" (windows) (base: "tmp/x") "../bin" (windows) - (base: "/") "../../bin" (windows) (base: "/") "../../bin" (windows) - (base: "/tmp/x") "../../bin" (posix) (base: "/tmp/x") "../../bin" (posix) - (base: "tmp/x") "../bin" (posix) (base: "tmp/x") "../bin" (posix) - (base: "x/../tmp") "../bin" (windows) (base: "x/../tmp") "../bin" (windows) - (base: "/tmp/x") "../../bin" (windows) (base: "/tmp/x") "../../bin" (windows) - (base: "/tmp") "../../bin" (windows) (base: "/tmp") "../../bin" (windows) - (base: "x/../tmp") "../bin" (posix) (base: "x/../tmp") "../bin" (posix) - (base: "/") "../../bin" (posix) (base: "/") "../../bin" (posix) - (base: "/tmp") "../../bin" (posix) (base: "/tmp") "../../bin" (posix) - UNC path - (base: "\\foo$\bar\") "baz" (posix) (base: "\\foo$\bar\") "baz" (posix) - (base: "\\foo\bar\") "baz" (windows) (base: "\\foo\bar\") "baz" (windows) - (base: "\\foo\bar\") "baz" (posix) (base: "\\foo\bar\") "baz" (posix) - (base: "\\foo$\bar\") "baz" (windows) (base: "\\foo$\bar\") "baz" (windows) - expands a path with multi-byte characters - (base: "") "Ångström" (posix) (base: "") "Ångström" (posix) - (base: "") "Ångström" (windows) (base: "") "Ångström" (windows) - keeps trailing dots on absolute pathname - (base: "") "a." (posix) (base: "") "a." (posix) - (base: "") "a.." (posix) (base: "") "a.." (posix) - (base: "") "a." (windows) (base: "") "a." (windows) - (base: "") "a.." (windows) (base: "") "a.." (windows) - converts a pathname to an absolute pathname, Ruby-Talk:18512 - (base: "") "..a" (posix) (base: "") "..a" (posix) - (base: "") "..a" (windows) (base: "") "..a" (windows) - (base: "") ".a" (windows) (base: "") ".a" (windows) - (base: "") "a../b" (posix) (base: "") "a../b" (posix) - (base: "") "a../b" (windows) (base: "") "a../b" (windows) - (base: "") ".a" (posix) (base: "") ".a" (posix) - expand_path for common unix path gives a full path - (base: "") "/default/base" (windows) (base: "") "/default/base" (windows) - (base: "") "" (posix) (base: "") "" (posix) - (base: "") "/tmp/" (windows) (base: "") "/tmp/" (windows) - (base: "") "./////" (posix) (base: "") "./////" (posix) - (base: "") "" (windows) (base: "") "" (windows) - (base: "") "/tmp/../../../tmp" (posix) (base: "") "/tmp/../../../tmp" (posix) - (base: "") "/tmp/../../../tmp" (windows) (base: "") "/tmp/../../../tmp" (windows) - (base: "") "/default/base" (posix) (base: "") "/default/base" (posix) - (base: "") "." (windows) (base: "") "." (windows) - (base: "") "./////" (windows) (base: "") "./////" (windows) - (base: "") "/tmp/" (posix) (base: "") "/tmp/" (posix) - (base: "") "." (posix) (base: "") "." (posix) - converts a pathname to an absolute pathname, using a complete path - (base: "C:\tmp\xxx") "../a" (posix) (base: "C:\tmp\xxx") "../a" (posix) - (base: "/tmp/xxx") "../a" (windows) (base: "/tmp/xxx") "../a" (windows) - (base: "/tmp") "" (posix) (base: "/tmp") "" (posix) - (base: "C:\tmp") "a" (posix) (base: "C:\tmp") "a" (posix) - (base: "/tmp/xxx") "../a" (posix) (base: "/tmp/xxx") "../a" (posix) - (base: "C:\tmp") "" (windows) (base: "C:\tmp") "" (windows) - (base: "/tmp") "a" (posix) (base: "/tmp") "a" (posix) - (base: "/tmp") "a" (windows) (base: "/tmp") "a" (windows) - (base: "C:\tmp\xxx") "../a" (windows) (base: "C:\tmp\xxx") "../a" (windows) - (base: "/") "." (windows) (base: "/") "." (windows) - (base: "/tmp/xxx") "../a" (windows) (base: "/tmp/xxx") "../a" (windows) - (base: "C:\tmp") "a" (windows) (base: "C:\tmp") "a" (windows) + to_u128 + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert assert assert - (base: "/tmp") "" (windows) (base: "/tmp") "" (windows) - (base: "/") "." (posix) (base: "/") "." (posix) - (base: "C:\tmp\xxx") "../a" (windows) (base: "C:\tmp\xxx") "../a" (windows) - (base: "/tmp/xxx") "../a" (posix) (base: "/tmp/xxx") "../a" (posix) - (base: "C:\tmp\xxx") "../a" (posix) (base: "C:\tmp\xxx") "../a" (posix) - (base: "C:\tmp") "" (posix) (base: "C:\tmp") "" (posix) - converts a pathname to an absolute pathname, using ~ (home) as base (HOME=/) - (base: "/tmp/gumby/ddd") "~" (posix) (base: "/tmp/gumby/ddd") "~" (posix) - (base: "") "~" (windows) (base: "") "~" (windows) - (base: "") "~/" (posix) (base: "") "~/" (posix) - (base: "/tmp/gumby/ddd") "~/a" (posix) (base: "/tmp/gumby/ddd") "~/a" (posix) - (base: "~/b") "~/a" (windows) (base: "~/b") "~/a" (windows) - (base: "") "~" (posix) (base: "") "~" (posix) - (base: "") "~/..badfilename" (posix) (base: "") "~/..badfilename" (posix) - (base: "") "~/" (windows) (base: "") "~/" (windows) - (base: "~/b") "~/a" (posix) (base: "~/b") "~/a" (posix) - (base: "") "~/..badfilename" (windows) (base: "") "~/..badfilename" (windows) - (base: "/tmp/gumby/ddd") "~/a" (windows) (base: "/tmp/gumby/ddd") "~/a" (windows) - (base: "") ".." (posix) (base: "") ".." (posix) - (base: "/tmp/gumby/ddd") "~" (windows) (base: "/tmp/gumby/ddd") "~" (windows) - (base: "") ".." (windows) (base: "") ".." (windows) - .new - joins components joins components - assert assert - assert assert - fails with null byte fails with null byte - assert assert - #to_posix - "C:\foo\bar" (windows) "C:\foo\bar" (windows) - "/" (windows) "/" (windows) - "foo/bar" (windows) "foo/bar" (windows) - "Cfoobar" (posix) "Cfoobar" (posix) - default: mappings=true "Cfoobar" (windows) default: mappings=true "Cfoobar" (windows) - default: mappings=true "Cfoobar" (posix) default: mappings=true "Cfoobar" (posix) - "Cfoobar" (windows) "Cfoobar" (windows) - "/" (posix) "/" (posix) - "Cfoobar" (windows) "Cfoobar" (windows) - "/" (posix) "/" (posix) - "C:\foo\bar" (windows) "C:\foo\bar" (windows) - "foo/bar" (posix) "foo/bar" (posix) - "foo/bar" (posix) "foo/bar" (posix) - "C:\foo\bar" (posix) "C:\foo\bar" (posix) - "Cfoobar" (posix) "Cfoobar" (posix) - "foo/bar" (windows) "foo/bar" (windows) - "C:\foo\bar" (posix) "C:\foo\bar" (posix) - "/" (windows) "/" (windows) - #anchor - "\\some\share" (windows) "\\some\share" (windows) - "\foo" (posix) "\foo" (posix) - "\\some\share\" (posix) "\\some\share\" (posix) - "//some/share" (windows) "//some/share" (windows) - "C:\foo" (windows) "C:\foo" (windows) - "//some/share" (posix) "//some/share" (posix) - "\\some\share\" (windows) "\\some\share\" (windows) - "C:\foo" (posix) "C:\foo" (posix) - "C:/foo" (windows) "C:/foo" (windows) - "/foo" (windows) "/foo" (windows) - "//some/share/" (posix) "//some/share/" (posix) - "\foo" (windows) "\foo" (windows) - "\\some\share" (posix) "\\some\share" (posix) - "C:foo" (posix) "C:foo" (posix) - "//some/share/" (windows) "//some/share/" (windows) - "/foo" (posix) "/foo" (posix) - "C:/foo" (posix) "C:/foo" (posix) - "C:foo" (windows) "C:foo" (windows) - .posix - assert assert - fails with null byte fails with null byte - joins components joins components - assert assert - assert assert - assert assert - .windows - joins components joins components - assert assert - assert assert - fails with null byte fails with null byte - assert assert assert assert - .home - uses home from environment variable if set uses home from environment variable if set - doesn't raise if environment variable is missing doesn't raise if environment variable is missing - doesn't return empty string if environment variable is empty doesn't return empty string if environment variable is empty - #relative_to? - on "/a/b": "/a/b/../c" (windows) on "/a/b": "/a/b/../c" (windows) - on "..": "a" (posix) on "..": "a" (posix) - on "/": "/" (windows) on "/": "/" (windows) - on "ab/cd": "ab/c" (posix) on "ab/cd": "ab/c" (posix) - on ".": ".." (windows) on ".": ".." (windows) - on "a/b": "a/b/c/d" (windows) on "a/b": "a/b/c/d" (windows) - on "a/b/c": "a/c/d" (posix) on "a/b/c": "a/c/d" (posix) - on "/a/b": "/c/d" (posix) on "/a/b": "/c/d" (posix) - on "a/b": "a/b/../c" (windows) on "a/b": "a/b/../c" (windows) - on "a/b/c/d/": "a/b/" (posix) on "a/b/c/d/": "a/b/" (posix) - on "a/b": "a/b" (windows) on "a/b": "a/b" (windows) - on "a/b": "a/b/c" (windows) on "a/b": "a/b/c" (windows) - on "/": "/" (posix) on "/": "/" (posix) - on "/a/b/.": "/a/b" (windows) on "/a/b/.": "/a/b" (windows) - on "a/b/../c": "a/b" (windows) on "a/b/../c": "a/b" (windows) - on "../../a/b": "../../a/b/c/d" (posix) on "../../a/b": "../../a/b/c/d" (posix) - on "/a/b/c/d/": "/a/b" (posix) on "/a/b/c/d/": "/a/b" (posix) - on "/a/b/.": "/a/b" (posix) on "/a/b/.": "/a/b" (posix) - on "/a/b": "/a/b/c/d" (windows) on "/a/b": "/a/b/c/d" (windows) - on "a": "/a" (windows) on "a": "/a" (windows) - on "..": "a" (windows) on "..": "a" (windows) - on "a": "/a" (posix) on "a": "/a" (posix) - on "a/b/c/d": "a/b" (posix) on "a/b/c/d": "a/b" (posix) - on "a/b/.": "a/b" (windows) on "a/b/.": "a/b" (windows) - on "/a/b/../c": "/a/b" (windows) on "/a/b/../c": "/a/b" (windows) - on "/a/b": "/a/b" (windows) on "/a/b": "/a/b" (windows) - on "/a/b/c/d/": "/a/b" (windows) on "/a/b/c/d/": "/a/b" (windows) - on "/a/b/c": "/a/c/d" (windows) on "/a/b/c": "/a/c/d" (windows) - on "/a/b": "/a/b/c/d" (posix) on "/a/b": "/a/b/c/d" (posix) - on "/a/b/../c": "/a/b" (posix) on "/a/b/../c": "/a/b" (posix) - on "../../a/b": "../../a/b/c/d" (windows) on "../../a/b": "../../a/b/c/d" (windows) - on "/a/b/c/d": "/a/b" (posix) on "/a/b/c/d": "/a/b" (posix) - on "a/b": "a/b/." (windows) on "a/b": "a/b/." (windows) - on "/a/b/c/d": "/a/b/" (windows) on "/a/b/c/d": "/a/b/" (windows) - on "/ab/cd": "/ab/cde" (windows) on "/ab/cd": "/ab/cde" (windows) - on "/ab/cd": "/ab/cde" (posix) on "/ab/cd": "/ab/cde" (posix) - on "../..": ".." (windows) on "../..": ".." (windows) - on "/": "/a/c" (posix) on "/": "/a/c" (posix) - on "../..": ".." (posix) on "../..": ".." (posix) - on "a/b": "a/b/c" (posix) on "a/b": "a/b/c" (posix) - on "a/b/../c": "a/b" (posix) on "a/b/../c": "a/b" (posix) - on "/": "/a/c" (windows) on "/": "/a/c" (windows) - on "a/b/c/d": "a/b/" (posix) on "a/b/c/d": "a/b/" (posix) - on "a/b": "./a/b" (windows) on "a/b": "./a/b" (windows) - on "/a/b": "/c/d" (windows) on "/a/b": "/c/d" (windows) - on "..": "." (posix) on "..": "." (posix) - on "/ab/cd": "/ab/c" (posix) on "/ab/cd": "/ab/c" (posix) - on "..": "." (windows) on "..": "." (windows) - on "ab/cd": "ab/c" (windows) on "ab/cd": "ab/c" (windows) - special windows paths - on "C:\Projects": "c:\projects\src" (windows) on "C:\Projects": "c:\projects\src" (windows) - on "/a": "a" (posix) on "/a": "a" (posix) - on "C:": "D:" (windows) on "C:": "D:" (windows) - on "C:\Projects": "c:\projects\src" (posix) on "C:\Projects": "c:\projects\src" (posix) - on "C:a\b\c": "c:a/b/d" (windows) on "C:a\b\c": "c:a/b/d" (windows) - on "C:\Projects": "c:\projects" (windows) on "C:\Projects": "c:\projects" (windows) - on "C:\": "D:\" (posix) on "C:\": "D:\" (posix) - on "C:\Projects\a\..": "c:\projects" (posix) on "C:\Projects\a\..": "c:\projects" (posix) - on "C:a\b\c": "C:a/b/d" (posix) on "C:a\b\c": "C:a/b/d" (posix) - on "C:\Projects": "c:\projects" (posix) on "C:\Projects": "c:\projects" (posix) - on "/a": "a" (windows) on "/a": "a" (windows) - on "C:a\b\c": "C:a/b/d" (windows) on "C:a\b\c": "C:a/b/d" (windows) - on "C:a\b\c": "c:a/b/d" (posix) on "C:a\b\c": "c:a/b/d" (posix) - on "C:": "D:" (posix) on "C:": "D:" (posix) - on "C:\": "D:\" (windows) on "C:\": "D:\" (windows) - on "C:\Projects\a\..": "c:\projects" (windows) on "C:\Projects\a\..": "c:\projects" (windows) - on "/../../a/b": "/../../a/b/c/d" (windows) on "/../../a/b": "/../../a/b/c/d" (windows) - on "a/b/c/d": "a/b" (windows) on "a/b/c/d": "a/b" (windows) - on "a/b/c/d/": "a/b" (windows) on "a/b/c/d/": "a/b" (windows) - on "a/b/c/d/": "a/b/" (windows) on "a/b/c/d/": "a/b/" (windows) - on "ab/cd": "ab/cde" (windows) on "ab/cd": "ab/cde" (windows) - on "/a/b": "/a/b" (posix) on "/a/b": "/a/b" (posix) - on "/a/b/c/d/": "/a/b/" (posix) on "/a/b/c/d/": "/a/b/" (posix) - on "a/b/c": "a/c/d" (windows) on "a/b/c": "a/c/d" (windows) - on "/a/b/c/d": "/a/b/" (posix) on "/a/b/c/d": "/a/b/" (posix) - on "/a/b": "/a/b/." (posix) on "/a/b": "/a/b/." (posix) - on "a/b": "a/b/." (posix) on "a/b": "a/b/." (posix) - on "a/b": "a/b/c/d" (posix) on "a/b": "a/b/c/d" (posix) - on "a/b": "c/d" (windows) on "a/b": "c/d" (windows) - on "ab/cd": "ab/cde" (posix) on "ab/cd": "ab/cde" (posix) - on "/a/b": "/a/b/../c" (posix) on "/a/b": "/a/b/../c" (posix) - on "a/b": "a/b/../c" (posix) on "a/b": "a/b/../c" (posix) - on "/a/b/c": "/a/c/d" (posix) on "/a/b/c": "/a/c/d" (posix) - on "/a/b/c/d/": "/a/b/" (windows) on "/a/b/c/d/": "/a/b/" (windows) - on "/ab/cd": "/ab/c" (windows) on "/ab/cd": "/ab/c" (windows) - on "a/b": "c/d" (posix) on "a/b": "c/d" (posix) - on "a/b/.": "a/b" (posix) on "a/b/.": "a/b" (posix) - on "a/b": "a/b" (posix) on "a/b": "a/b" (posix) - on "a/b/c/d/": "a/b" (posix) on "a/b/c/d/": "a/b" (posix) - on "./a/b": "a/b" (posix) on "./a/b": "a/b" (posix) - on "a/b": "./a/b" (posix) on "a/b": "./a/b" (posix) - on "a/b/c/d": "a/b/" (windows) on "a/b/c/d": "a/b/" (windows) - on "/a/b": "/a/b/." (windows) on "/a/b": "/a/b/." (windows) - on "/../../a/b": "/../../a/b/c/d" (posix) on "/../../a/b": "/../../a/b/c/d" (posix) - on ".": "a/b" (posix) on ".": "a/b" (posix) - on "./a/b": "a/b" (windows) on "./a/b": "a/b" (windows) - on ".": "a/b" (windows) on ".": "a/b" (windows) - on "/a/b/c/d": "/a/b" (windows) on "/a/b/c/d": "/a/b" (windows) - on ".": ".." (posix) on ".": ".." (posix) - #stem - "foo..txt" (windows) "foo..txt" (windows) - ".txt.txt/" (posix) ".txt.txt/" (posix) - "bar\foo.txt.txt" (posix) "bar\foo.txt.txt" (posix) - ".txt.txt" (windows) ".txt.txt" (windows) - "bar\foo.txt" (posix) "bar\foo.txt" (posix) - "foo.txt.txt/" (posix) "foo.txt.txt/" (posix) - "bar/foo..txt" (windows) "bar/foo..txt" (windows) - ".txt" (windows) ".txt" (windows) - "bar\foo.txt." (windows) "bar\foo.txt." (windows) - "bar\foo..txt" (windows) "bar\foo..txt" (windows) - "bar/.txt.txt" (posix) "bar/.txt.txt" (posix) - "foo.txt" (windows) "foo.txt" (windows) - "bar/.txt.txt" (windows) "bar/.txt.txt" (windows) - "foo..txt" (posix) "foo..txt" (posix) - "bar/.txt" (posix) "bar/.txt" (posix) - "bar/foo." (posix) "bar/foo." (posix) - "foo..txt/" (posix) "foo..txt/" (posix) - "bar/foo.txt." (windows) "bar/foo.txt." (windows) - "bar/foo..txt" (posix) "bar/foo..txt" (posix) - "foo." (posix) "foo." (posix) - "bar\foo." (posix) "bar\foo." (posix) - "foo.txt.txt" (posix) "foo.txt.txt" (posix) - "foo." (windows) "foo." (windows) - ".txt/" (posix) ".txt/" (posix) - "foo.txt.txt/" (windows) "foo.txt.txt/" (windows) - "bar/foo.txt.txt" (windows) "bar/foo.txt.txt" (windows) - "foo.txt/" (posix) "foo.txt/" (posix) - "bar/foo.txt" (posix) "bar/foo.txt" (posix) - ".txt.txt" (posix) ".txt.txt" (posix) - "bar/foo." (windows) "bar/foo." (windows) - "foo.txt/" (windows) "foo.txt/" (windows) - "bar/.txt" (windows) "bar/.txt" (windows) - "bar\foo." (windows) "bar\foo." (windows) - "foo./" (posix) "foo./" (posix) - "foo.txt.txt" (windows) "foo.txt.txt" (windows) - "bar\.txt" (windows) "bar\.txt" (windows) - ".txt.txt/" (windows) ".txt.txt/" (windows) - "foo.txt." (posix) "foo.txt." (posix) - "bar\.txt.txt" (windows) "bar\.txt.txt" (windows) - "foo.txt." (windows) "foo.txt." (windows) - "foo.txt" (posix) "foo.txt" (posix) - "bar/foo.txt.txt" (posix) "bar/foo.txt.txt" (posix) - "bar\foo..txt" (posix) "bar\foo..txt" (posix) - "bar\foo.txt." (posix) "bar\foo.txt." (posix) - ".txt" (posix) ".txt" (posix) - "bar/foo.txt" (windows) "bar/foo.txt" (windows) - "bar\.txt.txt" (posix) "bar\.txt.txt" (posix) - "foo..txt/" (windows) "foo..txt/" (windows) - "foo./" (windows) "foo./" (windows) - ".txt/" (windows) ".txt/" (windows) - "bar\foo.txt" (windows) "bar\foo.txt" (windows) - "foo.txt./" (windows) "foo.txt./" (windows) - "bar\foo.txt.txt" (windows) "bar\foo.txt.txt" (windows) - "bar\.txt" (posix) "bar\.txt" (posix) - "foo.txt./" (posix) "foo.txt./" (posix) - "bar/foo.txt." (posix) "bar/foo.txt." (posix) - #drive - "/foo" (windows) "/foo" (windows) - "\\_.-~!$;=&'()*+,aB1\ !-.@^_`{}~#$%&'()aB1\" (posix) "\\_.-~!$;=&'()*+,aB1\ !-.@^_`{}~#$%&'()aB1\" (posix) - "//foo" (windows) "//foo" (windows) - "\\some\share\" (posix) "\\some\share\" (posix) - "\\not-a\\share" (windows) "\\not-a\\share" (windows) - "\\\not-a\share" (posix) "\\\not-a\share" (posix) - "//some/share/foo/" (windows) "//some/share/foo/" (windows) - "C:\foo" (posix) "C:\foo" (posix) - "/not-a//share/" (posix) "/not-a//share/" (posix) - "/foo" (posix) "/foo" (posix) - "\\_.-~!$;=&'()*+,aB1\ !-.@^_`{}~#$%&'()aB1\" (windows) "\\_.-~!$;=&'()*+,aB1\ !-.@^_`{}~#$%&'()aB1\" (windows) - "//some/share" (windows) "//some/share" (windows) - "C:foo" (posix) "C:foo" (posix) - "\\some\share" (windows) "\\some\share" (windows) - "//some/share/foo/" (posix) "//some/share/foo/" (posix) - "//some/share/" (posix) "//some/share/" (posix) - "///not-a/share/" (posix) "///not-a/share/" (posix) - "C:/foo" (windows) "C:/foo" (windows) - "\\some\share\" (windows) "\\some\share\" (windows) - "\\\not-a\share" (windows) "\\\not-a\share" (windows) - "\\some$\share\" (windows) "\\some$\share\" (windows) - "C:\foo" (windows) "C:\foo" (windows) - "\\some\share\foo" (windows) "\\some\share\foo" (windows) - "C:foo" (windows) "C:foo" (windows) - "\\some\share" (posix) "\\some\share" (posix) - "\\127.0.0.1\share\" (posix) "\\127.0.0.1\share\" (posix) - "C:/foo" (posix) "C:/foo" (posix) - "\\127.0.0.1\share\" (windows) "\\127.0.0.1\share\" (windows) - "//some/share" (posix) "//some/share" (posix) - "\\%10%20\share\" (posix) "\\%10%20\share\" (posix) - "\\some\share\foo" (posix) "\\some\share\foo" (posix) - "\\not-a\\share" (posix) "\\not-a\\share" (posix) - "//foo" (posix) "//foo" (posix) - "\\some$\share\" (posix) "\\some$\share\" (posix) - "///not-a/share/" (windows) "///not-a/share/" (windows) - "/not-a//share/" (windows) "/not-a//share/" (windows) - "//some/share/" (windows) "//some/share/" (windows) - "\\%10%20\share\" (windows) "\\%10%20\share\" (windows) - #== - case sensitivity case sensitivity - simple simple - #parent - "/foo/C:/bar" (posix) "/foo/C:/bar" (posix) - "\Users/foo\bar.cr" (posix) "\Users/foo\bar.cr" (posix) - "C:\" (posix) "C:\" (posix) - "////" (windows) "////" (windows) - "\Users/foo\bar.cr" (windows) "\Users/foo\bar.cr" (windows) - "foo\" (windows) "foo\" (windows) - "foo/bar/.." (windows) "foo/bar/.." (windows) - "/foo" (windows) "/foo" (windows) - "Users/foo/bar.cr" (posix) "Users/foo/bar.cr" (posix) - "/" (posix) "/" (posix) - "/" (windows) "/" (windows) - "" (posix) "" (posix) - "foo//.//" (posix) "foo//.//" (posix) - "foo\bar\." (posix) "foo\bar\." (posix) - "foo/bar/" (windows) "foo/bar/" (windows) - "////" (posix) "////" (posix) - "foo" (posix) "foo" (posix) - "C:/" (posix) "C:/" (posix) - "foo\bar\" (posix) "foo\bar\" (posix) - ".\foo" (windows) ".\foo" (windows) - "\Users\foo\bar.cr" (posix) "\Users\foo\bar.cr" (posix) - "C:\foo" (posix) "C:\foo" (posix) - "foo" (windows) "foo" (windows) - "/Users/foo/bar.cr" (posix) "/Users/foo/bar.cr" (posix) - "foo\bar\." (windows) "foo\bar\." (windows) - "foo/bar/.." (posix) "foo/bar/.." (posix) - "." (windows) "." (windows) - "/foo" (posix) "/foo" (posix) - "foo/bar/." (posix) "foo/bar/." (posix) - "\" (posix) "\" (posix) - "foo\bar\.." (windows) "foo\bar\.." (windows) - "C:/foo" (windows) "C:/foo" (windows) - "C:/" (windows) "C:/" (windows) - "Users/foo/bar.cr" (windows) "Users/foo/bar.cr" (windows) - "foo/bar/" (posix) "foo/bar/" (posix) - "\" (windows) "\" (windows) - "foo\" (posix) "foo\" (posix) - "/." (windows) "/." (windows) - "foo\bar\.." (posix) "foo\bar\.." (posix) - "foo/" (posix) "foo/" (posix) - "C:/foo" (posix) "C:/foo" (posix) - "." (posix) "." (posix) - "C:" (windows) "C:" (windows) - "foo/" (windows) "foo/" (windows) - "/Users/foo/bar.cr" (windows) "/Users/foo/bar.cr" (windows) - "/." (posix) "/." (posix) - "C:\" (windows) "C:\" (windows) - "" (windows) "" (windows) - "\." (posix) "\." (posix) - "./foo" (windows) "./foo" (windows) - "C:" (posix) "C:" (posix) - "foo//.//" (windows) "foo//.//" (windows) - "\Users\foo\bar.cr" (windows) "\Users\foo\bar.cr" (windows) - "./foo" (posix) "./foo" (posix) - "foo/bar/." (windows) "foo/bar/." (windows) - "/foo/C:/bar" (windows) "/foo/C:/bar" (windows) - "foo\bar\" (windows) "foo\bar\" (windows) - ".\foo" (posix) ".\foo" (posix) - "\." (windows) "\." (windows) - "/." (windows) "/." (windows) - "/." (posix) "/." (posix) - "C:\foo" (windows) "C:\foo" (windows) - #root - "//some/share" (windows) "//some/share" (windows) - "//some/share/" (windows) "//some/share/" (windows) - "\\some\share\" (posix) "\\some\share\" (posix) - "\\foo" (posix) "\\foo" (posix) - "C:/foo" (windows) "C:/foo" (windows) - "\\some\share" (posix) "\\some\share" (posix) - "//foo" (windows) "//foo" (windows) - "C:foo" (windows) "C:foo" (windows) - "\foo" (posix) "\foo" (posix) - "/foo" (posix) "/foo" (posix) - "C:/foo" (posix) "C:/foo" (posix) - "//some/share/" (posix) "//some/share/" (posix) - "C:foo" (posix) "C:foo" (posix) - "\\foo" (windows) "\\foo" (windows) - "/foo" (windows) "/foo" (windows) - "C:\foo" (windows) "C:\foo" (windows) - "\foo" (windows) "\foo" (windows) - "//some/share" (posix) "//some/share" (posix) - "//foo" (posix) "//foo" (posix) - "C:\foo" (posix) "C:\foo" (posix) - "\\some\share\" (windows) "\\some\share\" (windows) - "\\some\share" (windows) "\\some\share" (windows) - .[] .[] - #dirname - "foo/" (posix) "foo/" (posix) - "m/" (posix) "m/" (posix) - "C:/" (windows) "C:/" (windows) - "/foo/" (windows) "/foo/" (windows) - "/m/" (windows) "/m/" (windows) - "/m/" (posix) "/m/" (posix) - "m/.gitignore" (posix) "m/.gitignore" (posix) - "m//" (posix) "m//" (posix) - "m//a/b" (posix) "m//a/b" (posix) - "m//" (windows) "m//" (windows) - "m/.gitignore" (windows) "m/.gitignore" (windows) - "foo/" (windows) "foo/" (windows) - "/foo" (windows) "/foo" (windows) - "/m" (windows) "/m" (windows) - "/Users/foo/bar.cr" (posix) "/Users/foo/bar.cr" (posix) - "C:" (posix) "C:" (posix) - "C:\" (windows) "C:\" (windows) - "m" (posix) "m" (posix) - "/m" (posix) "/m" (posix) - "/foo" (posix) "/foo" (posix) - "/foo//" (windows) "/foo//" (windows) - "C:\" (posix) "C:\" (posix) - "/Users/foo/bar.cr" (windows) "/Users/foo/bar.cr" (windows) - "foo" (windows) "foo" (windows) - "m/" (windows) "m/" (windows) - "/foo/" (posix) "/foo/" (posix) - "C:" (windows) "C:" (windows) - "C:/" (posix) "C:/" (posix) - "m" (windows) "m" (windows) - "foo" (posix) "foo" (posix) - "m//a/b" (windows) "m//a/b" (windows) - "/foo//" (posix) "/foo//" (posix) - #to_windows - ""*/:<>?\| " (posix) ""*/:<>?\| " (posix) - default: mappings=true "C:\foo\bar" (posix) default: mappings=true "C:\foo\bar" (posix) - "C:\foo\bar" (windows) "C:\foo\bar" (windows) - "foo/bar" (windows) "foo/bar" (windows) - "foo/bar" (windows) "foo/bar" (windows) - ""*/:<>?\| " (posix) ""*/:<>?\| " (posix) - "C:\foo\bar" (posix) "C:\foo\bar" (posix) - ""*/:<>?\| " (windows) ""*/:<>?\| " (windows) - default: mappings=true "C:\foo\bar" (windows) default: mappings=true "C:\foo\bar" (windows) - "foo/bar" (posix) "foo/bar" (posix) - "C:\foo\bar" (posix) "C:\foo\bar" (posix) - "foo/bar" (posix) "foo/bar" (posix) - ""*/:<>?\| " (windows) ""*/:<>?\| " (windows) - "C:\foo\bar" (windows) "C:\foo\bar" (windows) - #ends_with_separator? - "foo/." (posix) "foo/." (posix) - "C:/" (posix) "C:/" (posix) - "foo" (windows) "foo" (windows) - "C:/" (windows) "C:/" (windows) - "foo" (posix) "foo" (posix) - "foo/" (windows) "foo/" (windows) - "foo/bar" (windows) "foo/bar" (windows) - "foo\" (windows) "foo\" (windows) - "foo/." (windows) "foo/." (windows) - "foo/bar" (posix) "foo/bar" (posix) - "foo/" (posix) "foo/" (posix) - "foo\" (posix) "foo\" (posix) - #join - resolving "bar" "///foo" (windows) resolving "bar" "///foo" (windows) - resolving "bar\baz" "foo" (windows) resolving "bar\baz" "foo" (windows) - resolving ["\bar"].each "\foo\" (posix) resolving ["\bar"].each "\foo\" (posix) - resolving "a" "" (windows) resolving "a" "" (windows) - resolving [""].each "" (windows) resolving [""].each "" (windows) - resolving "\\bar" "\\\foo" (posix) resolving "\\bar" "\\\foo" (posix) - resolving "{"\\bar\\", "\\baz\\"}" "\foo\" (windows) resolving "{"\\bar\\", "\\baz\\"}" "\foo\" (windows) - resolving ["bar"] "\\\\foo" (windows) resolving ["bar"] "\\\\foo" (windows) - resolving ["/"] "" (posix) resolving ["/"] "" (posix) - resolving "{"/bar/", "/baz/"}" "/foo/" (posix) resolving "{"/bar/", "/baz/"}" "/foo/" (posix) - resolving "/a" "" (windows) resolving "/a" "" (windows) - resolving "{"bar", ""}" "foo" (windows) resolving "{"bar", ""}" "foo" (windows) - resolving [""] "/" (posix) resolving [""] "/" (posix) - resolving ["Program Files"] "c:\" (posix) resolving ["Program Files"] "c:\" (posix) - resolving "\" "foo" (posix) resolving "\" "foo" (posix) - resolving "bar/baz" "foo" (windows) resolving "bar/baz" "foo" (windows) - resolving "{"/foo", "/", "bar/", "/"}" "/" (windows) resolving "{"/foo", "/", "bar/", "/"}" "/" (windows) - resolving [""] "" (posix) resolving [""] "" (posix) - resolving ["/"].each "" (posix) resolving ["/"].each "" (posix) - resolving ["/"] "" (windows) resolving ["/"] "" (windows) - resolving ["\\bar"].each "\\\foo" (posix) resolving ["\\bar"].each "\\\foo" (posix) - resolving ["bar\baz"] "foo" (windows) resolving ["bar\baz"] "foo" (windows) - resolving ["/a"] "" (windows) resolving ["/a"] "" (windows) - resolving ["\bar"] "\foo\" (posix) resolving ["\bar"] "\foo\" (posix) - resolving ["/"] "foo" (windows) resolving ["/"] "foo" (windows) - resolving "" "" (windows) resolving "" "" (windows) - resolving ["a"] "\" (windows) resolving ["a"] "\" (windows) - resolving "{"bar", ""}" "foo" (posix) resolving "{"bar", ""}" "foo" (posix) - resolving ["bar/baz"].each "foo" (posix) resolving ["bar/baz"].each "foo" (posix) - resolving ["bar"] "///foo" (posix) resolving ["bar"] "///foo" (posix) - resolving ["Program Files"] "c:/" (windows) resolving ["Program Files"] "c:/" (windows) - resolving "bar/baz" "foo" (posix) resolving "bar/baz" "foo" (posix) - resolving ["bar/baz"].each "foo" (windows) resolving ["bar/baz"].each "foo" (windows) - resolving [""] "/" (windows) resolving [""] "/" (windows) - resolving "Program Files" "c:" (windows) resolving "Program Files" "c:" (windows) - resolving ["/"].each "foo" (windows) resolving ["/"].each "foo" (windows) - resolving ["Program Files"] "c:/" (posix) resolving ["Program Files"] "c:/" (posix) - resolving "{"/foo", "/", "bar/", "/"}" "/" (posix) resolving "{"/foo", "/", "bar/", "/"}" "/" (posix) - resolving ["Program Files"].each "c:/" (windows) resolving ["Program Files"].each "c:/" (windows) - resolving "bar\baz" "foo" (windows) resolving "bar\baz" "foo" (windows) - resolving "/" "" (posix) resolving "/" "" (posix) - resolving [""].each "/" (posix) resolving [""].each "/" (posix) - resolving "{"\\\\bar\\\\", "baz\\\\\\"}" "foo" (posix) resolving "{"\\\\bar\\\\", "baz\\\\\\"}" "foo" (posix) - resolving ["bar"].each "\\\\foo" (windows) resolving ["bar"].each "\\\\foo" (windows) - resolving "/" "foo" (posix) resolving "/" "foo" (posix) - resolving "a" "\" (windows) resolving "a" "\" (windows) - resolving "{"bar", ""}" "foo" (windows) resolving "{"bar", ""}" "foo" (windows) - resolving "Program Files" "c:" (posix) resolving "Program Files" "c:" (posix) - resolving ["Program Files"].each "c:\" (windows) resolving ["Program Files"].each "c:\" (windows) - resolving "{"//bar//", "baz///"}" "foo" (windows) resolving "{"//bar//", "baz///"}" "foo" (windows) - resolving ["//bar"] "///foo" (posix) resolving ["//bar"] "///foo" (posix) - resolving "Program Files" "c:/" (posix) resolving "Program Files" "c:/" (posix) - resolving ["bar"].each "///foo" (posix) resolving ["bar"].each "///foo" (posix) - resolving "{"/bar/", "/baz/"}" "/foo/" (windows) resolving "{"/bar/", "/baz/"}" "/foo/" (windows) - resolving "//bar" "///foo" (posix) resolving "//bar" "///foo" (posix) - resolving ["/a"].each "" (posix) resolving ["/a"].each "" (posix) - resolving "{"bar", "baz"}" "foo" (windows) resolving "{"bar", "baz"}" "foo" (windows) - resolving ["a"].each "" (posix) resolving ["a"].each "" (posix) - resolving ["bar/baz"] "foo" (posix) resolving ["bar/baz"] "foo" (posix) - resolving ["Program Files"] "c:\" (windows) resolving ["Program Files"] "c:\" (windows) - resolving ["a"].each "/" (posix) resolving ["a"].each "/" (posix) - resolving ["\a"] "" (posix) resolving ["\a"] "" (posix) - resolving ["//bar"].each "///foo" (posix) resolving ["//bar"].each "///foo" (posix) - resolving "{"/", "bar"}" "foo" (windows) resolving "{"/", "bar"}" "foo" (windows) - resolving ["\"] "foo" (windows) resolving ["\"] "foo" (windows) - resolving ["Program Files"] "c:" (posix) resolving ["Program Files"] "c:" (posix) - resolving "" "/" (windows) resolving "" "/" (windows) - resolving ["bar\baz"].each "foo" (windows) resolving ["bar\baz"].each "foo" (windows) - resolving "a" "/" (posix) resolving "a" "/" (posix) - resolving ["bar\baz"] "foo" (posix) resolving ["bar\baz"] "foo" (posix) - resolving ["a"].each "\" (windows) resolving ["a"].each "\" (windows) - resolving ["Program Files"].each "c:/" (posix) resolving ["Program Files"].each "c:/" (posix) - resolving "/bar" "/foo/" (windows) resolving "/bar" "/foo/" (windows) - resolving ["bar\baz"].each "foo" (posix) resolving ["bar\baz"].each "foo" (posix) - resolving "a" "\" (posix) resolving "a" "\" (posix) - resolving "{"/", "/", "bar"}" "foo" (posix) resolving "{"/", "/", "bar"}" "foo" (posix) - resolving "/" "foo" (windows) resolving "/" "foo" (windows) - resolving ["\\bar"] "\\\foo" (windows) resolving ["\\bar"] "\\\foo" (windows) - resolving ["Program Files"].each "c:" (windows) resolving ["Program Files"].each "c:" (windows) - resolving [""].each "" (posix) resolving [""].each "" (posix) - resolving ["/bar"].each "/foo/" (windows) resolving ["/bar"].each "/foo/" (windows) - resolving "{"\\", "\\", "bar"}" "foo" (posix) resolving "{"\\", "\\", "bar"}" "foo" (posix) - resolving ["bar"].each "///foo" (windows) resolving ["bar"].each "///foo" (windows) - resolving ["\bar"].each "\foo\" (windows) resolving ["\bar"].each "\foo\" (windows) - resolving "/bar" "/foo/" (posix) resolving "/bar" "/foo/" (posix) - resolving "\a" "" (posix) resolving "\a" "" (posix) - resolving "\" "foo" (windows) resolving "\" "foo" (windows) - resolving ["\"] "foo" (posix) resolving ["\"] "foo" (posix) - resolving "" "" (posix) resolving "" "" (posix) - resolving ["\a"].each "" (windows) resolving ["\a"].each "" (windows) - resolving ["//bar"].each "///foo" (windows) resolving ["//bar"].each "///foo" (windows) - resolving ["bar\baz"] "foo" (windows) resolving ["bar\baz"] "foo" (windows) - resolving "bar" "\\\\foo" (windows) resolving "bar" "\\\\foo" (windows) - resolving "bar\baz" "foo" (posix) resolving "bar\baz" "foo" (posix) - resolving "{"\\\\bar\\\\", "baz\\\\\\"}" "foo" (windows) resolving "{"\\\\bar\\\\", "baz\\\\\\"}" "foo" (windows) - resolving "\bar" "\foo\" (posix) resolving "\bar" "\foo\" (posix) - resolving "{"bar", "baz"}" "foo" (posix) resolving "{"bar", "baz"}" "foo" (posix) - resolving ["bar"] "\\\\foo" (posix) resolving ["bar"] "\\\\foo" (posix) - resolving ["Program Files"] "c:" (windows) resolving ["Program Files"] "c:" (windows) - resolving ["bar\baz"].each "foo" (posix) resolving ["bar\baz"].each "foo" (posix) - resolving "{"\\", "bar"}" "foo" (windows) resolving "{"\\", "bar"}" "foo" (windows) - resolving ["\a"] "" (windows) resolving ["\a"] "" (windows) - resolving "a" "/" (windows) resolving "a" "/" (windows) - resolving "/" "" (windows) resolving "/" "" (windows) - resolving "{"/", "bar"}" "foo" (posix) resolving "{"/", "bar"}" "foo" (posix) - resolving "bar" "\\\\foo" (posix) resolving "bar" "\\\\foo" (posix) - resolving ["\"].each "foo" (windows) resolving ["\"].each "foo" (windows) - resolving ["Program Files"].each "c:\" (posix) resolving ["Program Files"].each "c:\" (posix) - resolving "{"bar", ""}" "foo" (posix) resolving "{"bar", ""}" "foo" (posix) - resolving ["a"].each "/" (windows) resolving ["a"].each "/" (windows) - resolving ["a"] "" (windows) resolving ["a"] "" (windows) - resolving "{"\\", "\\", "bar"}" "foo" (windows) resolving "{"\\", "\\", "bar"}" "foo" (windows) - resolving ["/"].each "foo" (posix) resolving ["/"].each "foo" (posix) - resolving "bar" "///foo" (posix) resolving "bar" "///foo" (posix) - resolving [""] "" (windows) resolving [""] "" (windows) - resolving ["a"].each "" (windows) resolving ["a"].each "" (windows) - resolving "\\bar" "\\\foo" (windows) resolving "\\bar" "\\\foo" (windows) - resolving ["\bar"] "\foo\" (windows) resolving ["\bar"] "\foo\" (windows) - resolving ["/a"].each "" (windows) resolving ["/a"].each "" (windows) - resolving "Program Files" "c:\" (posix) resolving "Program Files" "c:\" (posix) - resolving "\a" "" (windows) resolving "\a" "" (windows) - resolving ["a"] "/" (posix) resolving ["a"] "/" (posix) - resolving "//bar" "///foo" (windows) resolving "//bar" "///foo" (windows) - resolving ["a"].each "\" (posix) resolving ["a"].each "\" (posix) - resolving "Program Files" "c:/" (windows) resolving "Program Files" "c:/" (windows) - resolving ["\"].each "foo" (posix) resolving ["\"].each "foo" (posix) - resolving ["/"].each "" (windows) resolving ["/"].each "" (windows) - resolving "{"\\", "bar"}" "foo" (posix) resolving "{"\\", "bar"}" "foo" (posix) - resolving [""].each "/" (windows) resolving [""].each "/" (windows) - resolving ["/bar"] "/foo/" (windows) resolving ["/bar"] "/foo/" (windows) - resolving ["bar\baz"] "foo" (posix) resolving ["bar\baz"] "foo" (posix) - resolving ["Program Files"].each "c:" (posix) resolving ["Program Files"].each "c:" (posix) - resolving "" "/" (posix) resolving "" "/" (posix) - resolving "{"/", "/", "bar"}" "foo" (windows) resolving "{"/", "/", "bar"}" "foo" (windows) - resolving "{"\\bar\\", "\\baz\\"}" "\foo\" (posix) resolving "{"\\bar\\", "\\baz\\"}" "\foo\" (posix) - resolving "\bar" "\foo\" (windows) resolving "\bar" "\foo\" (windows) - resolving ["/bar"] "/foo/" (posix) resolving ["/bar"] "/foo/" (posix) - resolving ["bar"].each "\\\\foo" (posix) resolving ["bar"].each "\\\\foo" (posix) - resolving ["bar\baz"].each "foo" (windows) resolving ["bar\baz"].each "foo" (windows) - resolving ["//bar"] "///foo" (windows) resolving ["//bar"] "///foo" (windows) - resolving ["\\bar"].each "\\\foo" (windows) resolving ["\\bar"].each "\\\foo" (windows) - resolving ["a"] "\" (posix) resolving ["a"] "\" (posix) - resolving ["bar/baz"] "foo" (windows) resolving ["bar/baz"] "foo" (windows) - resolving ["/a"] "" (posix) resolving ["/a"] "" (posix) - resolving ["bar"] "///foo" (windows) resolving ["bar"] "///foo" (windows) - resolving "{"//bar//", "baz///"}" "foo" (posix) resolving "{"//bar//", "baz///"}" "foo" (posix) - resolving "bar\baz" "foo" (posix) resolving "bar\baz" "foo" (posix) - resolving "/a" "" (posix) resolving "/a" "" (posix) - resolving "{"\\foo", "\\", "bar\\", "\\"}" "\" (windows) resolving "{"\\foo", "\\", "bar\\", "\\"}" "\" (windows) - resolving ["a"] "/" (windows) resolving ["a"] "/" (windows) - resolving "Program Files" "c:\" (windows) resolving "Program Files" "c:\" (windows) - resolving ["\a"].each "" (posix) resolving ["\a"].each "" (posix) - resolving ["/bar"].each "/foo/" (posix) resolving ["/bar"].each "/foo/" (posix) - resolving "{"\\foo", "\\", "bar\\", "\\"}" "\" (posix) resolving "{"\\foo", "\\", "bar\\", "\\"}" "\" (posix) - resolving "a" "" (posix) resolving "a" "" (posix) - resolving ["/"] "foo" (posix) resolving ["/"] "foo" (posix) - resolving ["\\bar"] "\\\foo" (posix) resolving ["\\bar"] "\\\foo" (posix) - resolving ["a"] "" (posix) resolving ["a"] "" (posix) - #each_part - block "foo/bar/.." (posix) block "foo/bar/.." (posix) - iterator "//some/share/bar.cr" (posix) iterator "//some/share/bar.cr" (posix) - iterator "foo" (windows) iterator "foo" (windows) - #parts "m\" (posix) #parts "m\" (posix) - #parts "foo/../bar/" (windows) #parts "foo/../bar/" (windows) - block "foo/../bar/." (windows) block "foo/../bar/." (windows) - #parts "foo/bar/." (posix) #parts "foo/bar/." (posix) - #parts "foo\bar\" (posix) #parts "foo\bar\" (posix) - block "C:/" (windows) block "C:/" (windows) - iterator "\Users\foo\bar.cr" (posix) iterator "\Users\foo\bar.cr" (posix) - block "/Users/foo/bar.cr" (posix) block "/Users/foo/bar.cr" (posix) - block "foo\bar\" (windows) block "foo\bar\" (windows) - #parts ".\foo" (windows) #parts ".\foo" (windows) - iterator "C:folder" (windows) iterator "C:folder" (windows) - block "C:\" (posix) block "C:\" (posix) - block "foo/bar/." (windows) block "foo/bar/." (windows) - iterator ".\foo" (posix) iterator ".\foo" (posix) - iterator "C:\folder" (posix) iterator "C:\folder" (posix) - block "." (posix) block "." (posix) - iterator "/foo" (posix) iterator "/foo" (posix) - block "foo/../bar/." (posix) block "foo/../bar/." (posix) - block "\\some\share\bar.cr" (posix) block "\\some\share\bar.cr" (posix) - #parts "./foo" (posix) #parts "./foo" (posix) - #parts "//some/share/" (windows) #parts "//some/share/" (windows) - #parts "C:\" (posix) #parts "C:\" (posix) - iterator "foo\bar\" (windows) iterator "foo\bar\" (windows) - iterator "foo\" (posix) iterator "foo\" (posix) - #parts "C:/" (windows) #parts "C:/" (windows) - block "m//" (posix) block "m//" (posix) - iterator "m//a/b" (posix) iterator "m//a/b" (posix) - iterator "foo/../bar/" (posix) iterator "foo/../bar/" (posix) - #parts "\\some\share\" (windows) #parts "\\some\share\" (windows) - iterator "m\a/b" (posix) iterator "m\a/b" (posix) - #parts "C:\folder" (posix) #parts "C:\folder" (posix) - #parts "////" (windows) #parts "////" (windows) - #parts "m/.gitignore" (posix) #parts "m/.gitignore" (posix) - #parts "/." (windows) #parts "/." (windows) - #parts "foo/./bar/" (posix) #parts "foo/./bar/" (posix) - #parts "Users/foo/bar.cr" (posix) #parts "Users/foo/bar.cr" (posix) - #parts "C:\\folder" (posix) #parts "C:\\folder" (posix) - block "\\some\share\" (posix) block "\\some\share\" (posix) - #parts "/Users/foo/bar.cr" (posix) #parts "/Users/foo/bar.cr" (posix) - iterator "C:\." (windows) iterator "C:\." (windows) - iterator "//some/share" (windows) iterator "//some/share" (windows) - #parts ".\foo" (posix) #parts ".\foo" (posix) - #parts "C:/" (posix) #parts "C:/" (posix) - #parts "\Users\foo\bar.cr" (posix) #parts "\Users\foo\bar.cr" (posix) - iterator "C:\Users\foo\bar.cr" (posix) iterator "C:\Users\foo\bar.cr" (posix) - #parts "////" (posix) #parts "////" (posix) - #parts "foo/bar/" (windows) #parts "foo/bar/" (windows) - block "/" (posix) block "/" (posix) - block "\Users\foo\bar.cr" (posix) block "\Users\foo\bar.cr" (posix) - block "m/" (posix) block "m/" (posix) - block "Users/foo/bar.cr" (windows) block "Users/foo/bar.cr" (windows) - block "/." (posix) block "/." (posix) - iterator "m/.gitignore" (posix) iterator "m/.gitignore" (posix) - #parts "C:\Users\foo\bar.cr" (windows) #parts "C:\Users\foo\bar.cr" (windows) - block "//some/share/bar.cr" (posix) block "//some/share/bar.cr" (posix) - #parts "foo/../bar/." (posix) #parts "foo/../bar/." (posix) - block "C:\Users\foo\bar.cr" (windows) block "C:\Users\foo\bar.cr" (windows) - iterator "/Users/foo/bar.cr" (windows) iterator "/Users/foo/bar.cr" (windows) - #parts "\\some\share\bar.cr" (posix) #parts "\\some\share\bar.cr" (posix) - #parts "/m" (windows) #parts "/m" (windows) - iterator "/m" (windows) iterator "/m" (windows) - iterator "\Users/foo\bar.cr" (windows) iterator "\Users/foo\bar.cr" (windows) - block "foo/bar/.." (windows) block "foo/bar/.." (windows) - #parts "" (windows) #parts "" (windows) - iterator "/." (windows) iterator "/." (windows) - iterator "////" (windows) iterator "////" (windows) - block "/m" (windows) block "/m" (windows) - iterator "Users/foo/bar.cr" (posix) iterator "Users/foo/bar.cr" (posix) - block "\\some\share\bar.cr" (windows) block "\\some\share\bar.cr" (windows) - #parts "/m/" (windows) #parts "/m/" (windows) - #parts "C:\Users\foo\bar.cr" (posix) #parts "C:\Users\foo\bar.cr" (posix) - iterator "\Users\foo\bar.cr" (windows) iterator "\Users\foo\bar.cr" (windows) - #parts "\\some\share" (posix) #parts "\\some\share" (posix) - #parts "foo/bar/." (posix) #parts "foo/bar/." (posix) - block "////" (posix) block "////" (posix) - iterator "C:\\folder" (posix) iterator "C:\\folder" (posix) - #parts "C:\folder" (windows) #parts "C:\folder" (windows) - iterator "C:\folder" (windows) iterator "C:\folder" (windows) - block "/foo" (posix) block "/foo" (posix) - #parts "foo/bar/.." (windows) #parts "foo/bar/.." (windows) - block "Users/foo/bar.cr" (posix) block "Users/foo/bar.cr" (posix) - block "\\some\share\" (windows) block "\\some\share\" (windows) - block "" (windows) block "" (windows) - iterator "//some/share/" (windows) iterator "//some/share/" (windows) - #parts "\Users/foo\bar.cr" (posix) #parts "\Users/foo\bar.cr" (posix) - block "foo/" (posix) block "foo/" (posix) - #parts "\Users\foo\bar.cr" (windows) #parts "\Users\foo\bar.cr" (windows) - block "/foo" (windows) block "/foo" (windows) - block "//some/share" (windows) block "//some/share" (windows) - #parts "m/" (windows) #parts "m/" (windows) - block "m\" (windows) block "m\" (windows) - iterator "m/" (posix) iterator "m/" (posix) - block "foo\" (windows) block "foo\" (windows) - #parts "C:folder" (windows) #parts "C:folder" (windows) - block "/m/" (posix) block "/m/" (posix) - block "/m" (posix) block "/m" (posix) - iterator "\\some\share" (windows) iterator "\\some\share" (windows) - block "m\a/b" (windows) block "m\a/b" (windows) - block "C:" (posix) block "C:" (posix) - block "/." (windows) block "/." (windows) - block ".\foo" (posix) block ".\foo" (posix) - iterator "foo/bar/" (posix) iterator "foo/bar/" (posix) - iterator "\Users/foo\bar.cr" (posix) iterator "\Users/foo\bar.cr" (posix) - block "m/" (windows) block "m/" (windows) - block "/" (windows) block "/" (windows) - block "m" (windows) block "m" (windows) - #parts "foo/bar/./." (windows) #parts "foo/bar/./." (windows) - iterator "foo/./bar/" (posix) iterator "foo/./bar/" (posix) - iterator "foo/bar/../." (windows) iterator "foo/bar/../." (windows) - #parts "./foo" (windows) #parts "./foo" (windows) - block "\" (windows) block "\" (windows) - iterator "." (posix) iterator "." (posix) - block "foo/../bar/" (posix) block "foo/../bar/" (posix) - iterator "/m/" (windows) iterator "/m/" (windows) - iterator "\\some\share\" (posix) iterator "\\some\share\" (posix) - block "foo/bar/../." (posix) block "foo/bar/../." (posix) - iterator "foo/bar/../." (posix) iterator "foo/bar/../." (posix) - block "m" (posix) block "m" (posix) - iterator "m/" (windows) iterator "m/" (windows) - #parts "\" (posix) #parts "\" (posix) - #parts "m//a/b" (posix) #parts "m//a/b" (posix) - #parts "foo/bar/" (posix) #parts "foo/bar/" (posix) - block "/Users/foo/bar.cr" (windows) block "/Users/foo/bar.cr" (windows) - #parts "foo" (posix) #parts "foo" (posix) - iterator "C:\\folder" (windows) iterator "C:\\folder" (windows) - block "m\a/b" (posix) block "m\a/b" (posix) - #parts "C:\." (windows) #parts "C:\." (windows) - #parts "m/.gitignore" (windows) #parts "m/.gitignore" (windows) - iterator "C:folder" (posix) iterator "C:folder" (posix) - #parts "foo/bar/./." (posix) #parts "foo/bar/./." (posix) - iterator "m" (windows) iterator "m" (windows) - #parts "/m/" (posix) #parts "/m/" (posix) - block "./foo" (posix) block "./foo" (posix) - block "C:\folder" (windows) block "C:\folder" (windows) - #parts "foo/../bar/." (windows) #parts "foo/../bar/." (windows) - block "m//a/b" (posix) block "m//a/b" (posix) - iterator "m/.gitignore" (windows) iterator "m/.gitignore" (windows) - #parts "//some/share/bar.cr" (posix) #parts "//some/share/bar.cr" (posix) - #parts "m/" (posix) #parts "m/" (posix) - iterator "\" (posix) iterator "\" (posix) - #parts "" (posix) #parts "" (posix) - iterator "foo/../bar/." (windows) iterator "foo/../bar/." (windows) - iterator "foo/bar/.." (posix) iterator "foo/bar/.." (posix) - #parts "/" (windows) #parts "/" (windows) - iterator "foo/bar/./." (posix) iterator "foo/bar/./." (posix) - #parts "foo/bar/../." (posix) #parts "foo/bar/../." (posix) - iterator "foo/../bar/" (windows) iterator "foo/../bar/" (windows) - block ".\foo" (windows) block ".\foo" (windows) - iterator "foo\bar\" (posix) iterator "foo\bar\" (posix) - #parts "foo/../bar/" (posix) #parts "foo/../bar/" (posix) - block "" (posix) block "" (posix) - block "C:\\folder" (windows) block "C:\\folder" (windows) - #parts "m\" (windows) #parts "m\" (windows) - block "foo/./bar/" (posix) block "foo/./bar/" (posix) - iterator "m\a/b" (windows) iterator "m\a/b" (windows) - block "//some/share/" (posix) block "//some/share/" (posix) - block "foo/./bar/." (windows) block "foo/./bar/." (windows) - iterator "m" (posix) iterator "m" (posix) - iterator "m//a/b" (windows) iterator "m//a/b" (windows) - block "foo/../bar/" (windows) block "foo/../bar/" (windows) - #parts "foo\bar\" (windows) #parts "foo\bar\" (windows) - block "C:folder" (posix) block "C:folder" (posix) - block "//some/share/bar.cr" (windows) block "//some/share/bar.cr" (windows) - iterator "/m" (posix) iterator "/m" (posix) - block "\Users\foo\bar.cr" (windows) block "\Users\foo\bar.cr" (windows) - #parts "//some/share/bar.cr" (windows) #parts "//some/share/bar.cr" (windows) - #parts "." (posix) #parts "." (posix) - iterator "////" (posix) iterator "////" (posix) - iterator "foo/bar/" (windows) iterator "foo/bar/" (windows) - block "foo/bar/../." (windows) block "foo/bar/../." (windows) - block "m/.gitignore" (posix) block "m/.gitignore" (posix) - #parts "\" (windows) #parts "\" (windows) - block "foo" (posix) block "foo" (posix) - block "////" (windows) block "////" (windows) - iterator "foo/bar/." (windows) iterator "foo/bar/." (windows) - #parts "C:\" (windows) #parts "C:\" (windows) - block "C:\folder" (posix) block "C:\folder" (posix) - iterator "foo/bar/." (windows) iterator "foo/bar/." (windows) - block "C:\." (posix) block "C:\." (posix) - #parts "m\a/b" (posix) #parts "m\a/b" (posix) - #parts "\\some\share" (windows) #parts "\\some\share" (windows) - #parts "/" (posix) #parts "/" (posix) - block "//some/share/" (windows) block "//some/share/" (windows) - #parts "foo\" (windows) #parts "foo\" (windows) - block "foo/bar/." (posix) block "foo/bar/." (posix) - iterator "//some/share/" (posix) iterator "//some/share/" (posix) - iterator "./foo" (posix) iterator "./foo" (posix) - #parts "//some/share/" (posix) #parts "//some/share/" (posix) - block "/m/" (windows) block "/m/" (windows) - block "C:\\folder" (posix) block "C:\\folder" (posix) - #parts "foo" (windows) #parts "foo" (windows) - block "foo" (windows) block "foo" (windows) - iterator "\\some\share" (posix) iterator "\\some\share" (posix) - iterator "/" (windows) iterator "/" (windows) - iterator "foo/../bar/." (posix) iterator "foo/../bar/." (posix) - iterator "\\some\share\bar.cr" (windows) iterator "\\some\share\bar.cr" (windows) - block "m//a/b" (windows) block "m//a/b" (windows) - block "C:\Users\foo\bar.cr" (posix) block "C:\Users\foo\bar.cr" (posix) - block "C:\" (windows) block "C:\" (windows) - block "foo/bar/" (windows) block "foo/bar/" (windows) - iterator "/" (posix) iterator "/" (posix) - iterator "/." (posix) iterator "/." (posix) - iterator "Users/foo/bar.cr" (windows) iterator "Users/foo/bar.cr" (windows) - #parts "foo/./bar/." (posix) #parts "foo/./bar/." (posix) - iterator "m\" (windows) iterator "m\" (windows) - iterator "//some/share" (posix) iterator "//some/share" (posix) - block "//some/share" (posix) block "//some/share" (posix) - iterator "m//" (windows) iterator "m//" (windows) - iterator "foo" (posix) iterator "foo" (posix) - block "foo/bar/." (posix) block "foo/bar/." (posix) - #parts "/Users/foo/bar.cr" (windows) #parts "/Users/foo/bar.cr" (windows) - #parts "foo/bar/../." (windows) #parts "foo/bar/../." (windows) - #parts "/m" (posix) #parts "/m" (posix) - iterator "C:/" (windows) iterator "C:/" (windows) - block "foo/bar/./." (windows) block "foo/bar/./." (windows) - block "\" (posix) block "\" (posix) - iterator "C:/" (posix) iterator "C:/" (posix) - block "./foo" (windows) block "./foo" (windows) - #parts "C:" (windows) #parts "C:" (windows) - #parts "foo/./bar/" (windows) #parts "foo/./bar/" (windows) - block "." (windows) block "." (windows) - iterator "foo/" (posix) iterator "foo/" (posix) - iterator "/Users/foo/bar.cr" (posix) iterator "/Users/foo/bar.cr" (posix) - iterator "\" (windows) iterator "\" (windows) - block "foo/bar/." (windows) block "foo/bar/." (windows) - block "foo/bar/./." (posix) block "foo/bar/./." (posix) - iterator "foo/bar/.." (windows) iterator "foo/bar/.." (windows) - #parts "C:folder" (posix) #parts "C:folder" (posix) - #parts "foo/./bar/." (windows) #parts "foo/./bar/." (windows) - iterator "/foo" (windows) iterator "/foo" (windows) - iterator ".\foo" (windows) iterator ".\foo" (windows) - iterator "\\some\share\" (windows) iterator "\\some\share\" (windows) - block "C:" (windows) block "C:" (windows) - block "m/.gitignore" (windows) block "m/.gitignore" (windows) - #parts "C:\\folder" (windows) #parts "C:\\folder" (windows) - #parts "m//" (windows) #parts "m//" (windows) - #parts "foo/bar/.." (posix) #parts "foo/bar/.." (posix) - iterator "foo\" (windows) iterator "foo\" (windows) - #parts "C:" (posix) #parts "C:" (posix) - #parts "m//a/b" (windows) #parts "m//a/b" (windows) - #parts "C:\." (posix) #parts "C:\." (posix) - iterator "foo/bar/." (posix) iterator "foo/bar/." (posix) - iterator "C:\Users\foo\bar.cr" (windows) iterator "C:\Users\foo\bar.cr" (windows) - #parts "//some/share" (windows) #parts "//some/share" (windows) - iterator "/m/" (posix) iterator "/m/" (posix) - block "foo\" (posix) block "foo\" (posix) - #parts "//some/share" (posix) #parts "//some/share" (posix) - #parts "\\some\share\" (posix) #parts "\\some\share\" (posix) - #parts "foo/bar/." (windows) #parts "foo/bar/." (windows) - block "\\some\share" (windows) block "\\some\share" (windows) - #parts "m//" (posix) #parts "m//" (posix) - iterator "foo/" (windows) iterator "foo/" (windows) - #parts "." (windows) #parts "." (windows) - #parts "foo/" (posix) #parts "foo/" (posix) - block "foo/bar/" (posix) block "foo/bar/" (posix) - iterator "foo/./bar/." (posix) iterator "foo/./bar/." (posix) - block "m//" (windows) block "m//" (windows) - block "foo/./bar/." (posix) block "foo/./bar/." (posix) - #parts "m\a/b" (windows) #parts "m\a/b" (windows) - iterator "./foo" (windows) iterator "./foo" (windows) - #parts "Users/foo/bar.cr" (windows) #parts "Users/foo/bar.cr" (windows) - iterator "" (windows) iterator "" (windows) - iterator "foo/bar/." (posix) iterator "foo/bar/." (posix) - iterator "C:\." (posix) iterator "C:\." (posix) - block "\Users/foo\bar.cr" (windows) block "\Users/foo\bar.cr" (windows) - iterator "m//" (posix) iterator "m//" (posix) - iterator "C:\" (windows) iterator "C:\" (windows) - block "foo\bar\" (posix) block "foo\bar\" (posix) - #parts "m" (windows) #parts "m" (windows) - block "\Users/foo\bar.cr" (posix) block "\Users/foo\bar.cr" (posix) - iterator "foo/./bar/" (windows) iterator "foo/./bar/" (windows) - iterator "C:\" (posix) iterator "C:\" (posix) - #parts "m" (posix) #parts "m" (posix) - iterator "C:" (posix) iterator "C:" (posix) - #parts "\\some\share\bar.cr" (windows) #parts "\\some\share\bar.cr" (windows) - iterator "foo/bar/./." (windows) iterator "foo/bar/./." (windows) - block "C:folder" (windows) block "C:folder" (windows) - #parts "foo/bar/." (windows) #parts "foo/bar/." (windows) - #parts "\Users/foo\bar.cr" (windows) #parts "\Users/foo\bar.cr" (windows) - iterator "foo/./bar/." (windows) iterator "foo/./bar/." (windows) - block "C:/" (posix) block "C:/" (posix) - #parts "foo\" (posix) #parts "foo\" (posix) - block "foo/./bar/" (windows) block "foo/./bar/" (windows) - block "\\some\share" (posix) block "\\some\share" (posix) - iterator "\\some\share\bar.cr" (posix) iterator "\\some\share\bar.cr" (posix) - iterator "//some/share/bar.cr" (windows) iterator "//some/share/bar.cr" (windows) - #parts "foo/" (windows) #parts "foo/" (windows) - block "C:\." (windows) block "C:\." (windows) - #parts "/foo" (windows) #parts "/foo" (windows) - iterator "m\" (posix) iterator "m\" (posix) - iterator "." (windows) iterator "." (windows) - #parts "/foo" (posix) #parts "/foo" (posix) - block "m\" (posix) block "m\" (posix) - iterator "" (posix) iterator "" (posix) - block "foo/" (windows) block "foo/" (windows) - iterator "C:" (windows) iterator "C:" (windows) - #parts "/." (posix) #parts "/." (posix) - #basename - "" (windows) "" (windows) - "x" (posix) "x" (posix) - "////" (windows) "////" (windows) - "a/x." (posix) "a/x." (posix) - "a/.x" (posix) "a/.x" (posix) - "\foo\" (windows) "\foo\" (windows) - "/" (windows) "/" (windows) - "\foo\bar\baz.cr" (windows) "\foo\bar\baz.cr" (windows) - "/foo/bar/baz.cr" (posix) "/foo/bar/baz.cr" (posix) - "////" (posix) "////" (posix) - "a/x." (windows) "a/x." (windows) - "a/.x" (windows) "a/.x" (windows) - "/." (posix) "/." (posix) - "/foo/" (posix) "/foo/" (posix) - "x" (windows) "x" (windows) - "\." (posix) "\." (posix) - "." (windows) "." (windows) - "/." (windows) "/." (windows) - "a/x" (posix) "a/x" (posix) - removes suffix - "\foo\bar\baz.cr.tmp" (posix) "\foo\bar\baz.cr.tmp" (posix) - "\foo/bar\baz.cr" (posix) "\foo/bar\baz.cr" (posix) - "a.x" (posix) "a.x" (posix) - "/foo/bar/baz.cr.tmp" (windows) "/foo/bar/baz.cr.tmp" (windows) - "\foo\bar\baz.cr" (posix) "\foo\bar\baz.cr" (posix) - "/foo/bar/baz.cr.tmp" (posix) "/foo/bar/baz.cr.tmp" (posix) - "\foo\bar\baz.cr" (windows) "\foo\bar\baz.cr" (windows) - "\foo\bar\baz.cr.tmp" (windows) "\foo\bar\baz.cr.tmp" (windows) - "/foo/bar/baz.cr" (windows) "/foo/bar/baz.cr" (windows) - "\foo\bar\baz.cr.tmp" (windows) "\foo\bar\baz.cr.tmp" (windows) - "/foo/bar/baz.cr.tmp" (posix) "/foo/bar/baz.cr.tmp" (posix) - "a.x" (windows) "a.x" (windows) - "/foo/bar/baz.cr" (posix) "/foo/bar/baz.cr" (posix) - "\foo\bar\baz.cr.tmp" (posix) "\foo\bar\baz.cr.tmp" (posix) - "\foo/bar\baz.cr" (windows) "\foo/bar\baz.cr" (windows) - "/foo/bar/baz.cr.tmp" (posix) "/foo/bar/baz.cr.tmp" (posix) - "\foo\bar\baz.cr.tmp" (posix) "\foo\bar\baz.cr.tmp" (posix) - "\foo\bar\baz.cr.tmp" (windows) "\foo\bar\baz.cr.tmp" (windows) - "/foo/bar/baz.cr.tmp" (windows) "/foo/bar/baz.cr.tmp" (windows) - "/foo/bar/baz.cr.tmp" (windows) "/foo/bar/baz.cr.tmp" (windows) - "a.txt" (windows) "a.txt" (windows) - "a.txt" (posix) "a.txt" (posix) - "a/x" (windows) "a/x" (windows) - "\foo\" (posix) "\foo\" (posix) - "\." (windows) "\." (windows) - "" (posix) "" (posix) - "foo" (windows) "foo" (windows) - "\" (posix) "\" (posix) - "foo" (posix) "foo" (posix) - "\foo\bar\baz.cr" (posix) "\foo\bar\baz.cr" (posix) - "." (posix) "." (posix) - "/foo/" (windows) "/foo/" (windows) - "/" (posix) "/" (posix) - "/foo/bar/baz.cr" (windows) "/foo/bar/baz.cr" (windows) - "\" (windows) "\" (windows) -Socket - #tty? - with non TTY with non TTY - .unix - creates a unix socket creates a unix socket - .accept .accept - sends messages sends messages - sends datagram over unix socket sends datagram over unix socket - #bind - using IPv4 - binds to port using default IP binds to port using default IP - binds to port binds to port - binds to port using Socket::IPAddress binds to port using Socket::IPAddress - using IPv6 - binds to port binds to port - binds to port using Socket::IPAddress binds to port using Socket::IPAddress - binds to port using default IP binds to port using default IP - #finalize - does not flush does not flush - accept raises timeout error if read_timeout is specified accept raises timeout error if read_timeout is specified - closes on exec by default closes on exec by default -JSON::Parser - parses [ 0 ] parses [ 0 ] - raises on parse [0] 1 raises on parse [0] 1 - parses [1, 2, 3] parses [1, 2, 3] - raises on parse {1} raises on parse {1} - raises on parse {"foo": 1,} raises on parse {"foo": 1,} - raises on parse "\u201cello world" raises on parse "\u201cello world" - raises on parse [2.] raises on parse [2.] - parses [[1]] parses [[1]] - parses [false] parses [false] - raises on parse "{"foo":} raises on parse "{"foo":} - parses 1 parses 1 - parses [0] parses [0] - parses {"fo\no": 1} parses {"fo\no": 1} - raises on parse "hello world" raises on parse "hello world" - parses [null] parses [null] - raises on parse "\u201cello -world" raises on parse "\u201cello -world" - prevents stack overflow for hashes prevents stack overflow for hashes - parses [{"foo": 1}] parses [{"foo": 1}] - parses ["日"] parses ["日"] - parses [1] parses [1] - parses {"foo": 1, "bar": 1.5} parses {"foo": 1, "bar": 1.5} - parses [true] parses [true] - parses [] parses [] - parses ["hello"] parses ["hello"] - parses true parses true - raises on parse 1� raises on parse 1� - raises on parse ["\u123z"] raises on parse ["\u123z"] - parses false parses false - parses {} parses {} - raises on parse [1,] raises on parse [1,] - returns raw returns raw - parses "hello" parses "hello" - parses null parses null - parses [1.5] parses [1.5] - parses 2.5 parses 2.5 - raises on parse [0]1 raises on parse [0]1 - raises on parse {"foo"1} raises on parse {"foo"1} - raises on parse {"foo": 1 "bar": 2} raises on parse {"foo": 1 "bar": 2} - parses {"foo": 1} parses {"foo": 1} - parses "\nПривет, мир!" parses "\nПривет, мир!" - prevents stack overflow for arrays prevents stack overflow for arrays - raises on parse "hello -world" raises on parse "hello -world" - raises on parse [1 true] raises on parse [1 true] -URI::Params::Serializable - #to_www_form - doubly nested doubly nested - simple type simple type - nested type path nested type path - .from_www_form - with nilable values with nilable values - simple type simple type - with nilable default with nilable default - with custom converter with custom converter - child type child type - with default values with default values - nested type - doubly nested doubly nested - missing nilable nested data missing nilable nested data - missing required nested property missing required nested property - happy path happy path - missing required property missing required property -YAML::Builder - writes scalar writes scalar - writes mapping with tag writes mapping with tag - writes scalar with style writes scalar with style - writes mapping with anchor writes mapping with anchor - writes mapping writes mapping - writes sequence writes sequence - writes sequence with tag writes sequence with tag - writes alias writes alias - errors on max nesting (mapping) errors on max nesting (mapping) - writes mapping with alias writes mapping with alias - writes scalar with anchor writes scalar with anchor - writes mapping with merge writes mapping with merge - writes sequence with style writes sequence with style - writes mapping with style writes mapping with style - errors on max nesting (sequence) errors on max nesting (sequence) - writes scalar with tag writes scalar with tag - writes sequence with anchor writes sequence with anchor - .build (with block) .build (with block) -LLVM::ABI::X86 - abi_info - does with structs less than 64 bits does with structs less than 64 bits - does with structs between 64 and 128 bits does with structs between 64 and 128 bits - does with structs between 64 and 128 bits does with structs between 64 and 128 bits - does with primitives does with primitives - size - for double for double - for struct for struct - for pointer for pointer - for array for array - for integer for integer - for packed struct for packed struct - for float for float - align - for struct for struct - for array for array - for double for double - for integer for integer - for packed struct for packed struct - for pointer for pointer - for float for float -HTTP - parses RFC 1123 without day name parses RFC 1123 without day name - parses and is UTC (#2744) parses and is UTC (#2744) - parses and is local (#2744) parses and is local (#2744) - parses ANSI C parses ANSI C - .quote_string - quotes a string quotes a string - raises on invalid characters raises on invalid characters - parses RFC 1123 parses RFC 1123 - generates HTTP date - with local time zone with local time zone - without time zone without time zone - parses RFC 1036 parses RFC 1036 - .dequote_string - dequotes a string dequotes a string -LLVM::ABI::X86_64 - size - for struct for struct - for integer for integer - for packed struct for packed struct - for array for array - for pointer for pointer - for double for double - for float for float - abi_info - does with primitives does with primitives - does with structs less than 64 bits does with structs less than 64 bits - does with structs larger than 128 bits does with structs larger than 128 bits - does with structs between 64 and 128 bits does with structs between 64 and 128 bits - align - for double for double - for array for array - for integer for integer - for packed struct for packed struct - for pointer for pointer - for struct for struct - for float for float -HTTP::ChunkedContent - #read stops reading after final chunk #read stops reading after final chunk - #read_byte handles empty data #read_byte handles empty data - #gets reads multiple chunks #gets reads multiple chunks - fails if invalid chunk size fails if invalid chunk size - #peek stops reading after final chunk #peek stops reading after final chunk - handles empty io handles empty io - long trailer part - fails for long single header fails for long single header - fails for long combined headers fails for long combined headers - #peek reads empty content #peek reads empty content - #read handles interrupted io #read handles interrupted io - fails if unterminated chunked trailer part fails if unterminated chunked trailer part - peeks peeks - #gets reads multiple chunks with - #gets reads multiple chunks with - - #read handles empty data #read handles empty data - #read_byte stops reading after final chunk #read_byte stops reading after final chunk - skips (3) skips (3) - #read_byte reads empty content #read_byte reads empty content - reads chunk extensions reads chunk extensions - reads chunked trailer part reads chunked trailer part - #read reads empty content #read reads empty content - skips (2) skips (2) - delays reading the next chunk as soon as one is consumed (#3270) delays reading the next chunk as soon as one is consumed (#3270) - fails if not properly delimited fails if not properly delimited - peeks into next chunk peeks into next chunk - #peek handles interrupted io #peek handles interrupted io - fails if not properly delimited fails if not properly delimited - #read_byte handles interrupted io #read_byte handles interrupted io - #peek handles empty data #peek handles empty data - skips skips -Log.setup_from_env - default_level - is not used if LOG_LEVEL is set is not used if LOG_LEVEL is set - is used if no LOG_LEVEL is set is used if no LOG_LEVEL is set - is info is info - default_sources - is * is * - is used is used - splits sources by comma splits sources by comma - backend - can be changed can be changed - is a IOBackend is a IOBackend - raises on invalid level raises on invalid level -OpenSSL::X509::Certificate - subject subject - extension extension - #signature_algorithm #signature_algorithm - #digest #digest -Char::Reader - #each - checks bounds after block checks bounds after block - yields chars yields chars - does not yield if empty does not yield if empty - iterates through string of size one iterates through string of size one - iterates through chars iterates through chars - starts at pos starts at pos - #previous_char? #previous_char? - peeks next char peeks next char - sets pos sets pos - #current_char? #current_char? - gets previous char (ascii) gets previous char (ascii) - gets previous char (unicode) gets previous char (unicode) - #next_char? #next_char? - iterates through empty string iterates through empty string - errors on invalid UTF-8 errors on invalid UTF-8 - #previous_char - reads on valid UTF-8 reads on valid UTF-8 - errors on invalid UTF-8 errors on invalid UTF-8 - starts at end starts at end -HTTP::Request - #if_match - reads multiple values reads multiple values - reads * reads * - reads single value reads single value - serialize GET (with cookies, from headers) serialize GET (with cookies, from headers) - serialize POST (with body) serialize POST (with body) - #path - returns parsed path returns parsed path - falls back to / falls back to / - serialize GET serialize GET - #path= - updates serialized form updates serialized form - updates @resource updates @resource - sets path sets path - #if_none_match - reads single value reads single value - reads * reads * - reads multiple values reads multiple values - #host_with_port - gets request host with port from the headers gets request host with port from the headers - serialize GET (with cookie) serialize GET (with cookie) - serialize POST (with io body, with content-length header) serialize POST (with io body, with content-length header) - #hostname - #hostname #hostname - gets request hostname from the headers gets request hostname from the headers - doesn't raise on request with multiple Content_length headers doesn't raise on request with multiple Content_length headers - #query_params - updates serialized form when modified updates serialized form when modified - is affected when #query is modified is affected when #query is modified - affects #query when modified affects #query when modified - happily parses when query is not a canonical url-encoded string happily parses when query is not a canonical url-encoded string - returns parsed URI::Params returns parsed URI::Params - updates @resource when modified updates @resource when modified - #form_params - returns ignors invalid content-type returns ignors invalid content-type - returns can safely be called on get requests returns can safely be called on get requests - returns parsed HTTP::Params returns parsed HTTP::Params - raises if serializing POST body with incorrect content-length (more then real) raises if serializing POST body with incorrect content-length (more then real) - .from_io - parses GET (just \n instead of \r\n) parses GET (just \n instead of \r\n) - parses GET without \r parses GET without \r - headers are case insensitive headers are case insensitive - parses GET with query params parses GET with query params - parses GET with spaces in request line parses GET with spaces in request line - parses empty header parses empty header - parses empty string (EOF), returns nil parses empty string (EOF), returns nil - long single header - fails for too-long header fails for too-long header - handles long header handles long header - handles unsupported HTTP version handles unsupported HTTP version - stores normalized case for common header name (lowercase) (#8060) stores normalized case for common header name (lowercase) (#8060) - stores normalized case for common header name (mixed) (#8060) stores normalized case for common header name (mixed) (#8060) - stores normalized case for common header name (capitalized) (#8060) stores normalized case for common header name (capitalized) (#8060) - long headers - fails for too-long headers with custom size fails for too-long headers with custom size - handles long headers with custom size handles long headers with custom size - handles long headers handles long headers - fails for too-long headers fails for too-long headers - parses POST (with body) parses POST (with body) - parses GET parses GET - long request lines - fails for too-long URI fails for too-long URI - handles long URI handles long URI - handles long URI with custom size handles long URI with custom size - fails for too-long URI with custom size fails for too-long URI with custom size - parses GET with cookie parses GET with cookie - parses empty string (EOF), returns nil (no peek) parses empty string (EOF), returns nil (no peek) - handles malformed request handles malformed request - serialize GET (with query params) serialize GET (with query params) - #query= - updates @resource updates @resource - sets query sets query - updates serialized form updates serialized form - serialize POST (with io body, without content-length header) serialize POST (with io body, without content-length header) - serialize POST (with bytes body) serialize POST (with bytes body) - raises if request has multiple and differing content-length headers raises if request has multiple and differing content-length headers - raises if serializing POST body with incorrect content-length (less then real) raises if serializing POST body with incorrect content-length (less then real) - keep-alive - is false by default in HTTP/1.0 is false by default in HTTP/1.0 - is true by default in HTTP/1.1 is true by default in HTTP/1.1 - is false in HTTP/1.1 if `Connection: close` header is present is false in HTTP/1.1 if `Connection: close` header is present - is true in HTTP/1.0 if `Connection: keep-alive` header is present is true in HTTP/1.0 if `Connection: keep-alive` header is present - #query - returns request's query returns request's query -Enum - gets value with to_i<bit> gets value with to_i<bit> - different enums classes not eq always different enums classes not eq always - valid? - for flags enum for flags enum - for Int64 enum for Int64 enum - for simple enum for simple enum - .parse .parse - each - private enum private enum - yields each member yields each member - won't yield None won't yield None - won't yield All won't yield All - does includes? does includes? - #to_s - for flags enum for flags enum - for private enum for private enum - for simple enum for simple enum - from_value? - for flags enum for flags enum - for simple enum for simple enum - sorts sorts - gets value with to_i gets value with to_i - has hash has hash - does + does + - each - iterates each member iterates each member - iterates private enum members iterates private enum members - iterates each flag iterates each flag - gets value with to_u<bit> gets value with to_u<bit> - .parse? .parse? - #inspect - for private enum for private enum - for simple enum for simple enum - for flags enum for flags enum - gets value gets value - .[] - flags enum flags enum - private flags enum private flags enum - non-flags enum non-flags enum - clones clones - from_value - for simple enum for simple enum - for flags enum for flags enum - for private enum for private enum - values - for simple enum for simple enum - for flags enum for flags enum - .flags - non-flags enum non-flags enum - flags enum flags enum - private flags enum private flags enum - names - for flags enum for flags enum - for simple enum for simple enum - does - does - - creates an enum instance from an auto-casted symbol (#8573) creates an enum instance from an auto-casted symbol (#8573) -__divti3 - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests - passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests -buffered - does pretty_inspect on unbuffered channel does pretty_inspect on unbuffered channel - does pretty_inspect on buffered channel does pretty_inspect on buffered channel - can send and receive nil can send and receive nil - does inspect on unbuffered channel does inspect on unbuffered channel - cannot send if closed cannot send if closed - can send successfully without raise can send successfully without raise - blocks when full blocks when full - works with select works with select - gets ready with data gets ready with data - can be closed from different fiber can be closed from different fiber - can receive? when not empty can receive? when not empty - pings pings - can be closed can be closed - doesn't block when not full doesn't block when not full - can be closed after sending can be closed after sending - can receive? when closed can receive? when closed - does inspect on buffered channel does inspect on buffered channel -Int - gets downto iterator gets downto iterator - even? assert assert assert assert - #bit_reverse assert assert assert assert assert assert @@ -29342,6 +22445,7 @@ assert assert assert assert assert assert + byte_index assert assert assert assert assert assert @@ -29353,19 +22457,29 @@ assert assert assert assert assert assert + gets byte index of string gets byte index of string assert assert assert assert + builds with write_byte builds with write_byte + #inspect #inspect + compares strings: same size, same string compares strings: same size, same string + #byte_slice + gets byte_slice(Int) with start out of bounds gets byte_slice(Int) with start out of bounds + gets byte_slice with negative index gets byte_slice with negative index + gets byte_slice with start out of bounds gets byte_slice with start out of bounds + gets byte_slice with negative count gets byte_slice with negative count + gets byte_slice gets byte_slice + gets byte_slice with large count gets byte_slice with large count + gets byte_slice with negative count at last gets byte_slice with negative count at last + does byte_at? does byte_at? + =~ + returns nil with regex and regex returns nil with regex and regex + matches with group matches with group + returns nil with string returns nil with string + count assert assert assert assert assert assert - #digits - works for non-Int32 works for non-Int32 - raises for negative numbers raises for negative numbers - raises for invalid base raises for invalid base - works for positive numbers or zero works for positive numbers or zero - works with a base works with a base - works for maximums works for maximums - #integer? assert assert assert assert assert assert @@ -29374,6 +22488,8 @@ assert assert assert assert assert assert + compares strings: different size compares strings: different size + lchop assert assert assert assert assert assert @@ -29386,19 +22502,9 @@ assert assert assert assert assert assert - #to_unsigned - does for UInt32 does for UInt32 - does for Int8 does for Int8 - does for Int64 does for Int64 - does for Int32 does for Int32 - does for UInt16 does for UInt16 - does for Int16 does for Int16 - does for Int128 does for Int128 - does for UInt128 does for UInt128 - does for UInt8 does for UInt8 - does for UInt64 does for UInt64 - #bits - raises when invalid indexes are provided raises when invalid indexes are provided + has size (same as size) has size (same as size) + matches with position matches with position + rchop assert assert assert assert assert assert @@ -29413,24 +22519,28 @@ assert assert assert assert assert assert + multiplies with negative size multiplies with negative size + matches, but returns Bool matches, but returns Bool + encode + doesn't raise if incomplete byte sequence doesn't raise if incomplete byte sequence + decodes decodes + raises if wrong encoding raises if wrong encoding + decodes with skip decodes with skip + encodes encodes + raises if illegal byte sequence raises if illegal byte sequence + doesn't raise on invalid byte sequence doesn't raise on invalid byte sequence + decodes with shift state decodes with shift state + raises if incomplete byte sequence raises if incomplete byte sequence + flushes the shift state (#11992) flushes the shift state (#11992) + raises if wrong encoding with skip raises if wrong encoding with skip + #underscore assert assert assert assert assert assert - upto iterator ups and downs upto iterator ups and downs - #bit_length - for BigInt for BigInt - for primitive integers for primitive integers - ~ assert assert + handles multi-character mappings correctly handles multi-character mappings correctly assert assert - does downto min does downto min - gets upto iterator max gets upto iterator max - divmod assert assert - abs - does for signed does for signed - does for unsigned does for unsigned - #trailing_zeros_count assert assert assert assert assert assert @@ -29438,78 +22548,425 @@ assert assert assert assert assert assert + gets each_line gets each_line + #index + by regex + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + with offset + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + by char + assert assert + with offset + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + by string + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + with offset + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + gets lines gets lines + partition + by string + assert assert + assert assert + assert assert + assert assert + assert assert + by regex + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + by char + assert assert + assert assert + assert assert + assert assert + #rindex! + by string + assert assert + with offset + assert assert + assert assert + assert assert + assert assert + assert assert + by regex + assert assert + with offset + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + by char + assert assert + assert assert + assert assert + with offset + assert assert + assert assert + has match has match + sub + subs with regex and hash subs with regex and hash + replaces with multiple named back-reference replaces with multiple named back-reference + subs range with string, non-ascii subs range with string, non-ascii + subs at index with string, non-ascii subs at index with string, non-ascii + subs with char hash subs with char hash + subs with string and string (utf-8) subs with string and string (utf-8) + subs with empty regex subs with empty regex + replaces with numeric back-reference replaces with numeric back-reference + replaces with incomplete named back-reference (1) replaces with incomplete named back-reference (1) + subs range with char, non-ascii subs range with char, non-ascii + subs range with string subs range with string + subs at index with string subs at index with string + subs the last char subs the last char + subs with regex and string, returns self if no match subs with regex and string, returns self if no match + subs beginless range with string subs beginless range with string + replaces with named back-reference replaces with named back-reference + subs with string and block subs with string and block + raises if index is out of bounds raises if index is out of bounds + subs using with z\w subs using with z\w + replaces with incomplete named back-reference (2) replaces with incomplete named back-reference (2) + subs with empty string subs with empty string + subs with regex and named tuple subs with regex and named tuple + subs endless range with char subs endless range with char + ignores if backreferences: false ignores if backreferences: false + subs with string and string (#3258) subs with string and string (#3258) + replaces with \a replaces with \a + subs char with string subs char with string + subs using with \ subs using with \ + subs endless range with string subs endless range with string + subs with regex and block subs with regex and block + subs at negative index with char subs at negative index with char + subs with string and string subs with string and string + subs char with char subs char with char + subs beginless range with char subs beginless range with char + subs range with char subs range with char + subs with regex and block with group subs with regex and block with group + subs with regex and string (utf-8) subs with regex and string (utf-8) + subs with string and string return self if no match subs with string and string return self if no match + subs at index with char, non-ascii subs at index with char, non-ascii + subs null character subs null character + subs char with string subs char with string + replaces with \\\1 replaces with \\\1 + subs at negative index with string subs at negative index with string + subs at index with char subs at index with char + subs with regex and string subs with regex and string + subs using $~ subs using $~ + "#each_char with empty string" yielding "#each_char with empty string" yielding + interpolates string interpolates string + lstrip assert assert assert assert + does not touch invalid code units in an otherwise ascii string does not touch invalid code units in an otherwise ascii string assert assert assert assert assert assert assert assert assert assert assert assert - does remainder does remainder - pred assert assert assert assert assert assert - #to_signed - does for UInt16 does for UInt16 - does for Int8 does for Int8 - does for UInt32 does for UInt32 - does for UInt64 does for UInt64 - does for UInt8 does for UInt8 - does for Int32 does for Int32 - does for Int16 does for Int16 - does for UInt128 does for UInt128 - does for Int128 does for Int128 - does for Int64 does for Int64 - #popcount assert assert assert assert assert assert + #byte_slice? + gets byte_slice with large count gets byte_slice with large count + gets byte_slice(Int) with start out of bounds gets byte_slice(Int) with start out of bounds + gets byte_slice with negative index gets byte_slice with negative index + gets byte_slice with start out of bounds gets byte_slice with start out of bounds + gets byte_slice with negative count gets byte_slice with negative count + gets byte_slice with negative count at last gets byte_slice with negative count at last + gets byte_slice gets byte_slice + inserts inserts + squeeze assert assert assert assert assert assert assert assert assert assert + "#each_char" yielding "#each_char" yielding + delete_at + start, count + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + raises on negative count raises on negative count + assert assert + assert assert + raises on negative count raises on negative count + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + range + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + char + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + "#each_char with empty string" iterator "#each_char with empty string" iterator + "#each_line" yielding "#each_line" yielding + invalid UTF-8 byte sequence + gets chars gets chars + valid_encoding? valid_encoding? + gets chars (2) gets chars (2) + gets size (2) gets size (2) + gets size gets size + scrubs scrubs + #index! + by regex + assert assert + assert assert + assert assert + with offset + assert assert + assert assert + assert assert + assert assert + assert assert + by string + assert assert + assert assert + with offset + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + by char + assert assert + with offset + assert assert + assert assert + assert assert + assert assert + assert assert + hexbytes hexbytes + #match_full! #match_full! + tr + given no replacement characters + acts as #delete acts as #delete + translates translates + compare + compares with == when same string compares with == when same string + compares with == when different contents compares with == when different contents + sorts strings sorts strings + compares with == when different strings same contents compares with == when different strings same contents + [] + raises on too negative left bound raises on too negative left bound + raises if count is negative with utf-8 raises if count is negative with utf-8 + raises index out of bound on index out of range with range raises index out of bound on index out of range with range + gets when index is last and count is zero gets when index is last and count is zero + gets with exclusive range with unicode gets with exclusive range with unicode + gets with positive index gets with positive index + gets with inclusive range gets with inclusive range + gets with a char gets with a char + gets with range without end gets with range without end + raises if index out of bounds with utf-8 raises if index out of bounds with utf-8 + gets with single char gets with single char + gets when index is last and count is negative at last with utf-8 gets when index is last and count is negative at last with utf-8 + gets with negative index gets with negative index + gets with start and count with negative start gets with start and count with negative start + raises if index out of bounds raises if index out of bounds + raises index out of bound on index out of range with range and utf-8 raises index out of bound on index out of range with range and utf-8 assert assert + gets when index is last and count is zero in utf-8 gets when index is last and count is zero in utf-8 + gets with exclusive range gets with exclusive range + gets with inclusive range with negative indices gets with inclusive range with negative indices + raises IndexError if pointing after last char which is non-ASCII raises IndexError if pointing after last char which is non-ASCII + raises if count is negative raises if count is negative + with a regex + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + gets with a string gets with a string + gets when index is last and count is positive in utf-8 gets when index is last and count is positive in utf-8 + gets with exclusive with start and count to end gets with exclusive with start and count to end + gets with start and count gets with start and count + gets when index is last and count is positive gets when index is last and count is positive + gets with range without beginning gets with range without beginning + gets with exclusive with start and count gets with exclusive with start and count + gets when index is last and count is negative at last gets when index is last and count is negative at last + starts_with? assert assert assert assert assert assert + treats first char as replacement char if invalid in an otherwise ascii string treats first char as replacement char if invalid in an otherwise ascii string assert assert assert assert assert assert assert assert assert assert assert assert - bit assert assert + delete assert assert assert assert assert assert assert assert assert assert assert assert + deletes one char deletes one char assert assert - "#times" yielding "#times" yielding - #to_unsigned! - does for UInt64 does for UInt64 - does for UInt16 does for UInt16 - does for UInt32 does for UInt32 - does for UInt8 does for UInt8 - does for Int128 does for Int128 - does for Int16 does for Int16 - does for Int8 does for Int8 - does for Int64 does for Int64 - does for UInt128 does for UInt128 - does for Int32 does for Int32 - clones clones - does upto max does upto max - #leading_zeros_count assert assert assert assert assert assert + empty? assert assert assert assert + creating from a pointer + raises an exception when creating a string with a null pointer and no size raises an exception when creating a string with a null pointer and no size + doesn't raise creating from a null pointer with size 0 doesn't raise creating from a null pointer with size 0 + allows creating a string with zeros allows creating a string with zeros + raises when creating from a null pointer with a nonzero size raises when creating from a null pointer with a nonzero size + does byte_at does byte_at + does to_f64 does to_f64 + String.new(&) + raises if returned bytesize is greater than capacity raises if returned bytesize is greater than capacity + raises if capacity too big with UInt32::MAX - String::HEADER_SIZE - 1 raises if capacity too big with UInt32::MAX - String::HEADER_SIZE - 1 + creates with matching capacity creates with matching capacity + raises if capacity too big with UInt32::MAX raises if capacity too big with UInt32::MAX + raises if capacity too big with UInt64::MAX raises if capacity too big with UInt64::MAX + allocates buffer of correct size (#3332) allocates buffer of correct size (#3332) + creates with excess capacity creates with excess capacity + raises if string capacity is negative raises if string capacity is negative + scans using $~ scans using $~ + ascii_only? + broken UTF-8 is not ascii_only broken UTF-8 is not ascii_only + answers ascii_only? answers ascii_only? + #gsub + gsubs with empty regex gsubs with empty regex + gsubs char with string depending on the char gsubs char with string depending on the char + gsubs with regex and hash gsubs with regex and hash + gsubs with regex and string, returns self if no match gsubs with regex and string, returns self if no match + raises with incomplete back-reference (2) raises with incomplete back-reference (2) + gsubs char with char in non-ascii string gsubs char with char in non-ascii string + gsubs null character gsubs null character + gsubs char with string (nop) gsubs char with string (nop) + gsubs with regex and block gsubs with regex and block + replaces with escaped back-reference replaces with escaped back-reference + gsubs with string and string (utf-8) gsubs with string and string (utf-8) + gsubs with empty string gsubs with empty string + replaces with incomplete back-reference (3) replaces with incomplete back-reference (3) + empty string empty string + replaces with back-reference to missing capture group replaces with back-reference to missing capture group + gsubs with regex and named tuple gsubs with regex and named tuple + gsubs using $~ gsubs using $~ + gsubs with regex and string gsubs with regex and string + gsubs with char hash gsubs with char hash + gsubs char with char gsubs char with char + gsubs with regex and string (utf-8) gsubs with regex and string (utf-8) + replaces with numeric back-reference replaces with numeric back-reference + raises with incomplete back-reference (1) raises with incomplete back-reference (1) + gsubs char with string gsubs char with string + gsubs with regex and block with group gsubs with regex and block with group + replaces with named back-reference replaces with named back-reference + empty match empty match + replaces with incomplete back-reference (1) replaces with incomplete back-reference (1) + gsubs with string and string gsubs with string and string + gsubs with string and string return self if no match gsubs with string and string return self if no match + ignores if backreferences: false ignores if backreferences: false + gsubs with char named tuple gsubs with char named tuple + gsubs with string and block gsubs with string and block + replaces with incomplete back-reference (2) replaces with incomplete back-reference (2) + #compare + compares case-insensitive compares case-insensitive + compares case-sensitive compares case-sensitive + compares case-insensitive, multiple chars after case conversion (#4513) compares case-insensitive, multiple chars after case conversion (#4513) + treats invalid code units as replacement char in an otherwise ascii string treats invalid code units as replacement char in an otherwise ascii string + rstrip assert assert assert assert assert assert @@ -29520,88 +22977,129 @@ assert assert assert assert assert assert - succ assert assert assert assert assert assert - #chr #chr - to - does when same does when same - does upwards does upwards - does downwards does downwards - raises when divides Int::MIN by -1 raises when divides Int::MIN by -1 - compares signed vs. unsigned integers compares signed vs. unsigned integers - odd? + does not touch invalid code units in an otherwise ascii string does not touch invalid code units in an otherwise ascii string assert assert assert assert - arithmetic division / - divides Int::MIN by -1 divides Int::MIN by -1 - divides by zero divides by zero - divides negative numbers divides negative numbers - returns 0 when doing IntN::MIN.remainder(-1) (#8306) returns 0 when doing IntN::MIN.remainder(-1) (#8306) - tdivs tdivs - "#times" iterator "#times" iterator - ** - with positive UInt8 with positive UInt8 - with float + rpartition + by regex assert assert assert assert assert assert - should work with large integers should work with large integers - raises with negative exponent raises with negative exponent - with positive Int32 with positive Int32 - divisible_by? - assert assert + assert assert + assert assert + by char + assert assert + assert assert + assert assert + by string + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + split + by whitespace + assert assert + assert assert + assert assert + assert assert + assert assert + by regex + assert assert + assert assert + assert assert + assert assert + keeps groups keeps groups + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + by string + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + by char + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + gets lines with chomp = false gets lines with chomp = false + does pretty_inspect does pretty_inspect + raises if String.build capacity too big raises if String.build capacity too big + gets size of \0 string gets size of \0 string + strip assert assert - #abs_unsigned - does not overflow on Int8::MIN does not overflow on Int8::MIN - does not overflow on Int128::MIN does not overflow on Int128::MIN - does not overflow on Int16::MIN does not overflow on Int16::MIN - does not overflow on Int32::MIN does not overflow on Int32::MIN - does for Int128 does for Int128 - does for UInt32 does for UInt32 - does for UInt8 does for UInt8 - does for UInt128 does for UInt128 - does for Int8 does for Int8 - does not overflow on Int64::MIN does not overflow on Int64::MIN - does for Int64 does for Int64 - does for UInt16 does for UInt16 - does for Int16 does for Int16 - does for UInt64 does for UInt64 - does for Int32 does for Int32 - "#times for UInt32 (#5019)" iterator "#times for UInt32 (#5019)" iterator - floor division // - divides negative numbers divides negative numbers - preserves type of lhs preserves type of lhs - raises when mods by zero raises when mods by zero - gcd assert assert assert assert assert assert assert assert assert assert - doesn't silently overflow doesn't silently overflow - raises on too big result to fit in result type raises on too big result to fit in result type assert assert assert assert assert assert - &** - with positive Int32 with positive Int32 - with UInt8 with UInt8 - wraps with larger integers wraps with larger integers - works with large integers works with large integers - raises with negative exponent raises with negative exponent - #===(:Char) assert assert assert assert assert assert assert assert - does % does % - downto iterator ups and downs downto iterator ups and downs - step - steps through limit steps through limit - "#times for UInt32 (#5019)" yielding "#times for UInt32 (#5019)" yielding - #rotate_right assert assert assert assert assert assert @@ -29615,6 +23113,9 @@ assert assert assert assert assert assert + does * does * + has codepoints has codepoints + chomp assert assert assert assert assert assert @@ -29622,16 +23123,11 @@ assert assert assert assert assert assert - does downto min unsigned does downto min unsigned - does downto does downto - compares equality and inequality of signed vs. unsigned integers compares equality and inequality of signed vs. unsigned integers - fdiv assert assert assert assert assert assert assert assert assert assert - #byte_swap assert assert assert assert assert assert @@ -29639,6 +23135,8 @@ assert assert assert assert assert assert + does each_char_with_index does each_char_with_index + #downcase assert assert assert assert assert assert @@ -29651,240 +23149,127 @@ assert assert assert assert assert assert + does not touch invalid code units in an otherwise ascii string does not touch invalid code units in an otherwise ascii string + #dump #dump + #scan + works with strings works with strings + works when match is empty, multibyte char works when match is empty, multibyte char + does with block does with block + does without block does without block + does with utf-8 does with utf-8 + works with strings with block works with strings with block + does with number and string does with number and string + works when match is empty works when match is empty + options parameter options parameter + #upcase assert assert + does not touch invalid code units in an otherwise ascii string does not touch invalid code units in an otherwise ascii string assert assert assert assert + with IO + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert assert assert assert assert - #unsafe_chr #unsafe_chr - #to_signed! - does for Int64 does for Int64 - does for Int8 does for Int8 - does for Int32 does for Int32 - does for UInt64 does for UInt64 - does for UInt32 does for UInt32 - does for UInt8 does for UInt8 - does for Int128 does for Int128 - does for UInt16 does for UInt16 - does for Int16 does for Int16 - does for UInt128 does for UInt128 - >> assert assert assert assert assert assert assert assert - holds true that x == q*y + r holds true that x == q*y + r - lcm + "#each_line" iterator "#each_line" iterator + does to_f32 does to_f32 + #matches_full? #matches_full? + #dump_unquoted #dump_unquoted + clones clones + dups dups + "#each_char" iterator "#each_char" iterator + presence assert assert assert assert assert assert - doesn't silently overflow doesn't silently overflow + match! + with options + Regex::Match options Regex::Match options + returns matchdata returns matchdata + assigns captures assigns captures + raises on non-match raises on non-match + "#each_codepoint" iterator "#each_codepoint" iterator + hexbytes? hexbytes? + compares strings: same size, different string compares strings: same size, different string + matches empty string matches empty string + rjust assert assert assert assert - << assert assert assert assert + to io + assert assert + assert assert + assert assert + assert assert + #reverse + converts invalid code units to replacement char converts invalid code units to replacement char + reverses taking grapheme clusters into account reverses taking grapheme clusters into account + reverses utf-8 string reverses utf-8 string + reverses string reverses string + does each_char does each_char + + + does when right is empty does when right is empty + does with ascii char does with ascii char + does with unicode char does with unicode char + does for both unicode does for both unicode + does when left is empty does when left is empty + does for both ascii does for both ascii + #camelcase assert assert assert assert - gets to iterator gets to iterator - .new - fallback overload fallback overload - String overload String overload - gets upto iterator gets upto iterator - #neg_signed - does for Int8 does for Int8 - does not overflow on Int16::MIN.abs_unsigned does not overflow on Int16::MIN.abs_unsigned - does for UInt8 does for UInt8 - does for Int16 does for Int16 - does for UInt64 does for UInt64 - does not overflow on Int128::MIN.abs_unsigned does not overflow on Int128::MIN.abs_unsigned - does not overflow on Int32::MIN.abs_unsigned does not overflow on Int32::MIN.abs_unsigned - does not overflow on Int8::MIN.abs_unsigned does not overflow on Int8::MIN.abs_unsigned - does for UInt16 does for UInt16 - does for Int32 does for Int32 - does for Int64 does for Int64 - does not overflow on Int64::MIN.abs_unsigned does not overflow on Int64::MIN.abs_unsigned - does for UInt128 does for UInt128 - does for UInt32 does for UInt32 - does for Int128 does for Int128 - gets downto iterator unsigned gets downto iterator unsigned - returns 0 when doing IntN::MIN % -1 (#8306) returns 0 when doing IntN::MIN % -1 (#8306) - does upto does upto - raises when divides by zero raises when divides by zero - #to_s - converts 1 to "1" converts 1 to "1" - converts 0 to "0" converts 0 to "0" - extrema for various int sizes - converts 4294967295_u32 to "4294967295" converts 4294967295_u32 to "4294967295" - converts -9223372036854775808_i64 to "-9223372036854775808" converts -9223372036854775808_i64 to "-9223372036854775808" - converts 255_u8 to "255" converts 255_u8 to "255" - converts 32767_i16 to "32767" converts 32767_i16 to "32767" - converts -128_i8 to "-128" converts -128_i8 to "-128" - converts Int128::MIN to "-170141183460469231731687303715884105728" converts Int128::MIN to "-170141183460469231731687303715884105728" - converts 9223372036854775807_i64 to "9223372036854775807" converts 9223372036854775807_i64 to "9223372036854775807" - converts UInt128::MAX to "340282366920938463463374607431768211455" converts UInt128::MAX to "340282366920938463463374607431768211455" - converts Int128::MAX to "170141183460469231731687303715884105727" converts Int128::MAX to "170141183460469231731687303715884105727" - converts 18446744073709551615_u64 to "18446744073709551615" converts 18446744073709551615_u64 to "18446744073709551615" - converts 65535_u16 to "65535" converts 65535_u16 to "65535" - converts 2147483647 to "2147483647" converts 2147483647 to "2147483647" - converts 127_i8 to "127" converts 127_i8 to "127" - converts -2147483648 to "-2147483648" converts -2147483648 to "-2147483648" - converts -32768_i16 to "-32768" converts -32768_i16 to "-32768" - base and upcase parameters - converts 0 to "0" converts 0 to "0" - converts 35 to "z" converts 35 to "z" - converts -1234 to "-4D2" converts -1234 to "-4D2" - converts -1234 to "-YA" converts -1234 to "-YA" - converts -1234 to "-4d2" converts -1234 to "-4d2" - converts 1234 to "4d2" converts 1234 to "4d2" - converts -12 to "-1100" converts -12 to "-1100" - converts 1234 to "YA" converts 1234 to "YA" - converts 62 to "10" converts 62 to "10" - converts 36 to "A" converts 36 to "A" - converts -123456 to "-11110001001000000" converts -123456 to "-11110001001000000" - converts 0 to "0" converts 0 to "0" - converts 10 to "a" converts 10 to "a" - converts Int128::MIN to "-1#{"0" * 127}" converts Int128::MIN to "-1#{"0" * 127}" - converts 12 to "1100" converts 12 to "1100" - converts 1 to "1" converts 1 to "1" - raises on base 37 raises on base 37 - converts 1 to "1" converts 1 to "1" - converts 0 to "0" converts 0 to "0" - converts 1234 to "4D2" converts 1234 to "4D2" - converts 97 to "1z" converts 97 to "1z" - converts 61 to "Z" converts 61 to "Z" - raises on base 1 raises on base 1 - converts 3843 to "ZZ" converts 3843 to "ZZ" - converts -1234 to "-ya" converts -1234 to "-ya" - converts 1 to "1" converts 1 to "1" - raises on base 62 with upcase raises on base 62 with upcase - converts 1234 to "ya" converts 1234 to "ya" - precision parameter - converts 123 to "123" converts 123 to "123" - converts 1 to "1" converts 1 to "1" - converts 1 to "01" converts 1 to "01" - converts 0 to "0" converts 0 to "0" - converts 9223372036854775807_i64 to "#{"0" * 137}#{"1" * 63}" converts 9223372036854775807_i64 to "#{"0" * 137}#{"1" * 63}" - converts 0 to "0" * 200 converts 0 to "0" * 200 - converts 123 to "00123" converts 123 to "00123" - converts -9223372036854775808_i64 to "-#{"0" * 136}1#{"0" * 63}" converts -9223372036854775808_i64 to "-#{"0" * 136}1#{"0" * 63}" - converts -9223372036854775808_i64 to "-1#{"0" * 63}" converts -9223372036854775808_i64 to "-1#{"0" * 63}" - converts -1 to "-1" converts -1 to "-1" - converts 123 to "123" converts 123 to "123" - raises on negative precision raises on negative precision - converts 123 to "#{"0" * 197}123" converts 123 to "#{"0" * 197}123" - converts 0 to "00000" converts 0 to "00000" - converts 1 to "1" converts 1 to "1" - converts -1 to "-1" converts -1 to "-1" - converts 0 to "" converts 0 to "" - converts -9223372036854775808_i64 to "-01#{"0" * 63}" converts -9223372036854775808_i64 to "-01#{"0" * 63}" - converts -1 to "-00001" converts -1 to "-00001" - converts 2 to "00002" converts 2 to "00002" - converts 2 to "2" converts 2 to "2" - converts -9223372036854775808_i64 to "-1#{"0" * 63}" converts -9223372036854775808_i64 to "-1#{"0" * 63}" - converts 123 to "123" converts 123 to "123" - converts 1 to "#{"0" * 199}1" converts 1 to "#{"0" * 199}1" - converts -1 to "-01" converts -1 to "-01" - converts -1 to "-#{"0" * 199}1" converts -1 to "-#{"0" * 199}1" - converts 0 to "00" converts 0 to "00" - converts 9223372036854775807_i64 to "#{"1" * 63}" converts 9223372036854775807_i64 to "#{"1" * 63}" - converts 2 to "02" converts 2 to "02" - converts 9223372036854775807_i64 to "#{"1" * 63}" converts 9223372036854775807_i64 to "#{"1" * 63}" - converts 2 to "#{"0" * 199}2" converts 2 to "#{"0" * 199}2" - converts 1 to "00001" converts 1 to "00001" - converts 9223372036854775807_i64 to "0#{"1" * 63}" converts 9223372036854775807_i64 to "0#{"1" * 63}" - converts 2 to "2" converts 2 to "2" - % doesn't overflow (#7979) % doesn't overflow (#7979) - #rotate_left assert assert assert assert + handles multi-character mappings correctly (#13533) handles multi-character mappings correctly (#13533) assert assert assert assert assert assert assert assert + #titleize assert assert assert assert + with IO + assert assert + assert assert + assert assert assert assert assert assert assert assert assert assert assert assert + handles multi-character mappings correctly (#13533) handles multi-character mappings correctly (#13533) assert assert assert assert assert assert assert assert + does not touch invalid code units in an otherwise ascii string does not touch invalid code units in an otherwise ascii string + #capitalize assert assert assert assert assert assert - #inspect - doesn't append the type doesn't append the type - doesn't append the type using IO doesn't append the type using IO -Thread::Mutex - won't lock recursively won't lock recursively - won't unlock from another thread won't unlock from another thread - synchronizes synchronizes -Atomic(T) - #swap - with reference union with reference union - with nilable reference with nilable reference - with pointer type with pointer type - with integer with integer - explicit ordering explicit ordering - with bool with bool - with reference type with reference type - #or #or - atomic bool - sizeof sizeof - gets and sets gets and sets - #max with signed #max with signed - #and #and - #adds #adds - #min with signed #min with signed - #xor #xor - #min with signed enum #min with signed enum - #compare_and_set - with integer with integer - with flags enum with flags enum - with enum with enum - with nilable reference with nilable reference - with reference type with reference type - with pointer with pointer - with reference union with reference union - explicit ordering explicit ordering - with bool with bool - #sub #sub - #min with pointer type #min with pointer type - #set - with pointer type with pointer type - explicit ordering explicit ordering - with bool with bool - with integer with integer - with nil (#4062) with nil (#4062) - #max with pointer type #max with pointer type - #max with unsigned #max with unsigned - #lazy_set #lazy_set - #nand #nand - #min with unsigned #min with unsigned - #max with signed enum #max with signed enum -Char - does to_f does to_f - #upcase + handles multi-character mappings correctly (#13533) handles multi-character mappings correctly (#13533) + does not touch invalid code units in an otherwise ascii string does not touch invalid code units in an otherwise ascii string assert assert + rchop? assert assert assert assert - #titlecase? assert assert assert assert assert assert assert assert - does ord for multibyte char does ord for multibyte char - does to_i without a base does to_i without a base - + assert assert - does <=> does <=> - - assert assert - ascii_whitespace? assert assert assert assert assert assert @@ -29892,29 +23277,158 @@ assert assert assert assert assert assert - hex? + multiplies multiplies + #rindex + by char + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + with offset + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + by regex + which matches empty string + assert assert + assert assert + assert assert + assert assert + assert assert + with offset + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + by string + with offset + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + escapes chars escapes chars + includes? + by string + assert assert + assert assert + assert assert + by char + assert assert + assert assert + "#each_codepoint" yielding "#each_codepoint" yielding + "#each_byte" iterator "#each_byte" iterator + succ + adds an additional character (just left to the last increased one) if there is a carry and no character left to increase adds an additional character (just left to the last increased one) if there is a carry and no character left to increase + increases the next best alphanumeric (jumping over non-alphanumerics) if there is a carry increases the next best alphanumeric (jumping over non-alphanumerics) if there is a carry + returns the successor by increasing the rightmost alphanumeric (digit => digit, letter => letter with same case) returns the successor by increasing the rightmost alphanumeric (digit => digit, letter => letter with same case) + returns an empty string for empty strings returns an empty string for empty strings + increases non-alphanumerics (via ascii rules) if there are no alphanumerics increases non-alphanumerics (via ascii rules) if there are no alphanumerics + #match_full #match_full + does % does % + does to_f does to_f + center assert assert assert assert assert assert + to io + assert assert + assert assert + assert assert + assert assert assert assert + compares strings: same object compares strings: same object + #inspect_unquoted #inspect_unquoted + escapes with octal escapes with octal + does char_at does char_at + char_index_to_byte_index + with ascii with ascii + with utf-8 with utf-8 + ljust + to io + assert assert + assert assert + assert assert + assert assert assert assert assert assert assert assert assert assert + blank? assert assert assert assert assert assert + "#each_line(chomp: false)" iterator "#each_line(chomp: false)" iterator + "#each_byte" yielding "#each_byte" yielding + byte_index_to_char_index + with utf-8 with utf-8 + with ascii with ascii + ends_with? assert assert assert assert assert assert assert assert assert assert assert assert + treats last char as replacement char if invalid in an otherwise ascii string treats last char as replacement char if invalid in an otherwise ascii string assert assert assert assert assert assert assert assert assert assert + "#each_line(chomp: false)" yielding "#each_line(chomp: false)" yielding + multiplies with size one multiplies with size one + []? + gets with a char gets with a char + gets with a string gets with a string + gets with range without end gets with range without end + gets with range gets with range + gets with range without beginning gets with range without beginning + returns nil if pointing after last char which is non-ASCII returns nil if pointing after last char which is non-ASCII + gets with start and count gets with start and count + gets with index gets with index + does chars does chars + lchop? assert assert assert assert assert assert @@ -29927,658 +23441,3134 @@ assert assert assert assert assert assert +YAML::Builder + writes scalar with style writes scalar with style + writes mapping with anchor writes mapping with anchor + writes alias writes alias + errors on max nesting (sequence) errors on max nesting (sequence) + writes mapping with tag writes mapping with tag + writes mapping with style writes mapping with style + writes sequence with style writes sequence with style + writes sequence with anchor writes sequence with anchor + errors on max nesting (mapping) errors on max nesting (mapping) + writes scalar writes scalar + writes mapping writes mapping + writes sequence with tag writes sequence with tag + .build (with block) .build (with block) + writes sequence writes sequence + writes mapping with alias writes mapping with alias + writes scalar with tag writes scalar with tag + writes mapping with merge writes mapping with merge + writes scalar with anchor writes scalar with anchor +Float32#to_s + converts 8388608000.0_f32 to "8388608000.0" converts 8388608000.0_f32 to "8388608000.0" + converts 1234567890.0_f32 to "1234568000.0" converts 1234567890.0_f32 to "1234568000.0" + anomalous values + converts 0x1p90_f32 to "1.2379401e+27" converts 0x1p90_f32 to "1.2379401e+27" + converts 0x1p-96_f32 to "1.2621775e-29" converts 0x1p-96_f32 to "1.2621775e-29" + converts 0x1p87_f32 to "1.5474251e+26" converts 0x1p87_f32 to "1.5474251e+26" + converts 12345678.0_f32 to "12345678.0" converts 12345678.0_f32 to "12345678.0" + converts 1000000000000.0_f32 to "1000000000000.0" converts 1000000000000.0_f32 to "1000000000000.0" + converts 67108864000.0_f32 to "67108864000.0" converts 67108864000.0_f32 to "67108864000.0" + Ryu f2s_test.cc ExactValueRoundEven + converts 3.0540412e5_f32 to "305404.12" converts 3.0540412e5_f32 to "305404.12" + converts 8.0990312e3_f32 to "8099.0312" converts 8.0990312e3_f32 to "8099.0312" + converts 1.23_f32 to "1.23" converts 1.23_f32 to "1.23" + converts 12345678901234.0_f32 to "12345679000000.0" converts 12345678901234.0_f32 to "12345679000000.0" + converts 1000000000000000.0_f32 to "1.0e+15" converts 1000000000000000.0_f32 to "1.0e+15" + converts 1.234_f32 to "1.234" converts 1.234_f32 to "1.234" + converts 8.0_f32 to "8.0" converts 8.0_f32 to "8.0" + converts 1001000000000000.0_f32 to "1.001e+15" converts 1001000000000000.0_f32 to "1.001e+15" + converts 100.0_f32 to "100.0" converts 100.0_f32 to "100.0" + converts 1.0_f32 to "1.0" converts 1.0_f32 to "1.0" + converts 1.0_f32 to "1.0" converts 1.0_f32 to "1.0" + converts 1.23456789_f32 to "1.2345679" converts 1.23456789_f32 to "1.2345679" + odd mantissas (unaffected by shifting) + converts 5367e5_f32 to "536700000.0" converts 5367e5_f32 to "536700000.0" + converts 5497856e5_f32 to "549785600000.0" converts 5497856e5_f32 to "549785600000.0" + converts 671087e2_f32 to "67108700.0" converts 671087e2_f32 to "67108700.0" + converts 671089e2_f32 to "67108900.0" converts 671089e2_f32 to "67108900.0" + converts 5369e5_f32 to "536900000.0" converts 5369e5_f32 to "536900000.0" + converts 26843e4_f32 to "268430000.0" converts 26843e4_f32 to "268430000.0" + converts 1e10_f32 to "10000000000.0" converts 1e10_f32 to "10000000000.0" + converts 5495808e5_f32 to "549580800000.0" converts 5495808e5_f32 to "549580800000.0" + converts 9e9_f32 to "9000000000.0" converts 9e9_f32 to "9000000000.0" + converts 215e7_f32 to "2150000000.0" converts 215e7_f32 to "2150000000.0" + converts 134219e3_f32 to "134219000.0" converts 134219e3_f32 to "134219000.0" + converts 3355445e1_f32 to "33554450.0" converts 3355445e1_f32 to "33554450.0" + converts 41e8_f32 to "4100000000.0" converts 41e8_f32 to "4100000000.0" + converts 43e8_f32 to "4300000000.0" converts 43e8_f32 to "4300000000.0" + converts 26845e4_f32 to "268450000.0" converts 26845e4_f32 to "268450000.0" + converts 7e9_f32 to "7000000000.0" converts 7e9_f32 to "7000000000.0" + converts 213e7_f32 to "2130000000.0" converts 213e7_f32 to "2130000000.0" + converts 3e10_f32 to "30000000000.0" converts 3e10_f32 to "30000000000.0" + converts 1073e6_f32 to "1073000000.0" converts 1073e6_f32 to "1073000000.0" + converts 1075e6_f32 to "1075000000.0" converts 1075e6_f32 to "1075000000.0" + converts 3355443e1_f32 to "33554430.0" converts 3355443e1_f32 to "33554430.0" + converts 134217e3_f32 to "134217000.0" converts 134217e3_f32 to "134217000.0" + converts 1000001000000000.0_f32 to "1.000001e+15" converts 1000001000000000.0_f32 to "1.000001e+15" + one-digit cases, where the decimal point can't appear between digits like "17.29" + converts 7e-2_f32 to "0.07" converts 7e-2_f32 to "0.07" + converts 7e-3_f32 to "0.007" converts 7e-3_f32 to "0.007" + converts 7e+0_f32 to "7.0" converts 7e+0_f32 to "7.0" + converts 7e+3_f32 to "7000.0" converts 7e+3_f32 to "7000.0" + converts 7e-1_f32 to "0.7" converts 7e-1_f32 to "0.7" + converts 7e+1_f32 to "70.0" converts 7e+1_f32 to "70.0" + converts 7e+2_f32 to "700.0" converts 7e+2_f32 to "700.0" + converts 10000000.0_f32 to "10000000.0" converts 10000000.0_f32 to "10000000.0" + all exponents + converts 1.729e-9_f32 to "1.729e-9" converts 1.729e-9_f32 to "1.729e-9" + converts 1.729e19_f32 to "1.729e+19" converts 1.729e19_f32 to "1.729e+19" + converts 1.729e-20_f32 to "1.729e-20" converts 1.729e-20_f32 to "1.729e-20" + converts 1.729e-28_f32 to "1.729e-28" converts 1.729e-28_f32 to "1.729e-28" + converts 1.729e-1_f32 to "0.1729" converts 1.729e-1_f32 to "0.1729" + converts 1.729e-3_f32 to "0.001729" converts 1.729e-3_f32 to "0.001729" + converts 1.729e-35_f32 to "1.729e-35" converts 1.729e-35_f32 to "1.729e-35" + converts 1.729e30_f32 to "1.729e+30" converts 1.729e30_f32 to "1.729e+30" + converts 1.729e-43_f32 to "1.72e-43" converts 1.729e-43_f32 to "1.72e-43" + converts 1.729e+9_f32 to "1729000000.0" converts 1.729e+9_f32 to "1729000000.0" + converts 1.729e17_f32 to "1.729e+17" converts 1.729e17_f32 to "1.729e+17" + converts 1.729e+10_f32 to "17290000000.0" converts 1.729e+10_f32 to "17290000000.0" + converts 1.729e+2_f32 to "172.9" converts 1.729e+2_f32 to "172.9" + converts 1.729e-8_f32 to "1.729e-8" converts 1.729e-8_f32 to "1.729e-8" + converts 1.729e15_f32 to "1.729e+15" converts 1.729e15_f32 to "1.729e+15" + converts 1.729e-2_f32 to "0.01729" converts 1.729e-2_f32 to "0.01729" + converts 1.729e-11_f32 to "1.729e-11" converts 1.729e-11_f32 to "1.729e-11" + converts 1.729e35_f32 to "1.729e+35" converts 1.729e35_f32 to "1.729e+35" + converts 1.729e+13_f32 to "17290000000000.0" converts 1.729e+13_f32 to "17290000000000.0" + converts 1.729e-15_f32 to "1.729e-15" converts 1.729e-15_f32 to "1.729e-15" + converts 1.729e-22_f32 to "1.729e-22" converts 1.729e-22_f32 to "1.729e-22" + converts 1.729e-33_f32 to "1.729e-33" converts 1.729e-33_f32 to "1.729e-33" + converts 1.729e-29_f32 to "1.729e-29" converts 1.729e-29_f32 to "1.729e-29" + converts 1.729e27_f32 to "1.729e+27" converts 1.729e27_f32 to "1.729e+27" + converts 1.729e16_f32 to "1.729e+16" converts 1.729e16_f32 to "1.729e+16" + converts 1.729e-39_f32 to "1.729e-39" converts 1.729e-39_f32 to "1.729e-39" + converts 1.729e-12_f32 to "1.729e-12" converts 1.729e-12_f32 to "1.729e-12" + converts 1.729e+5_f32 to "172900.0" converts 1.729e+5_f32 to "172900.0" + converts 1.729e21_f32 to "1.729e+21" converts 1.729e21_f32 to "1.729e+21" + converts 1.729e26_f32 to "1.729e+26" converts 1.729e26_f32 to "1.729e+26" + converts 1.729e-42_f32 to "1.729e-42" converts 1.729e-42_f32 to "1.729e-42" + converts 1.729e-45_f32 to "1.0e-45" converts 1.729e-45_f32 to "1.0e-45" + converts 1.729e-6_f32 to "1.729e-6" converts 1.729e-6_f32 to "1.729e-6" + converts 1.729e34_f32 to "1.729e+34" converts 1.729e34_f32 to "1.729e+34" + converts 1.729e-38_f32 to "1.729e-38" converts 1.729e-38_f32 to "1.729e-38" + converts 1.729e-21_f32 to "1.729e-21" converts 1.729e-21_f32 to "1.729e-21" + converts 1.729e-23_f32 to "1.729e-23" converts 1.729e-23_f32 to "1.729e-23" + converts 1.729e-25_f32 to "1.729e-25" converts 1.729e-25_f32 to "1.729e-25" + converts 1.729e37_f32 to "1.729e+37" converts 1.729e37_f32 to "1.729e+37" + converts 1.729e-10_f32 to "1.729e-10" converts 1.729e-10_f32 to "1.729e-10" + converts 1.729e20_f32 to "1.729e+20" converts 1.729e20_f32 to "1.729e+20" + converts 1.729e32_f32 to "1.729e+32" converts 1.729e32_f32 to "1.729e+32" + converts 1.729e-41_f32 to "1.729e-41" converts 1.729e-41_f32 to "1.729e-41" + converts 1.729e-26_f32 to "1.729e-26" converts 1.729e-26_f32 to "1.729e-26" + converts 1.729e+14_f32 to "172900000000000.0" converts 1.729e+14_f32 to "172900000000000.0" + converts 1.729e28_f32 to "1.729e+28" converts 1.729e28_f32 to "1.729e+28" + converts 1.729e-19_f32 to "1.729e-19" converts 1.729e-19_f32 to "1.729e-19" + converts 1.729e-36_f32 to "1.729e-36" converts 1.729e-36_f32 to "1.729e-36" + converts 1.729e-18_f32 to "1.729e-18" converts 1.729e-18_f32 to "1.729e-18" + converts 1.729e24_f32 to "1.729e+24" converts 1.729e24_f32 to "1.729e+24" + converts 1.729e-34_f32 to "1.729e-34" converts 1.729e-34_f32 to "1.729e-34" + converts 1.729e-37_f32 to "1.729e-37" converts 1.729e-37_f32 to "1.729e-37" + converts 1.729e-30_f32 to "1.729e-30" converts 1.729e-30_f32 to "1.729e-30" + converts 1.729e-16_f32 to "1.729e-16" converts 1.729e-16_f32 to "1.729e-16" + converts 1.729e36_f32 to "1.729e+36" converts 1.729e36_f32 to "1.729e+36" + converts 1.729e+3_f32 to "1729.0" converts 1.729e+3_f32 to "1729.0" + converts 1.729e29_f32 to "1.729e+29" converts 1.729e29_f32 to "1.729e+29" + converts 1.729e-17_f32 to "1.729e-17" converts 1.729e-17_f32 to "1.729e-17" + converts 1.729e-32_f32 to "1.729e-32" converts 1.729e-32_f32 to "1.729e-32" + converts 1.729e+1_f32 to "17.29" converts 1.729e+1_f32 to "17.29" + converts 1.729e-24_f32 to "1.729e-24" converts 1.729e-24_f32 to "1.729e-24" + converts 1.729e25_f32 to "1.729e+25" converts 1.729e25_f32 to "1.729e+25" + converts 1.729e-27_f32 to "1.729e-27" converts 1.729e-27_f32 to "1.729e-27" + converts 1.729e+7_f32 to "17290000.0" converts 1.729e+7_f32 to "17290000.0" + converts 1.729e-31_f32 to "1.729e-31" converts 1.729e-31_f32 to "1.729e-31" + converts 1.729e+6_f32 to "1729000.0" converts 1.729e+6_f32 to "1729000.0" + converts 1.729e+8_f32 to "172900000.0" converts 1.729e+8_f32 to "172900000.0" + converts 1.729e33_f32 to "1.729e+33" converts 1.729e33_f32 to "1.729e+33" + converts 1.729e-5_f32 to "1.729e-5" converts 1.729e-5_f32 to "1.729e-5" + converts 1.729e31_f32 to "1.729e+31" converts 1.729e31_f32 to "1.729e+31" + converts 1.729e-4_f32 to "0.0001729" converts 1.729e-4_f32 to "0.0001729" + converts 1.729e18_f32 to "1.729e+18" converts 1.729e18_f32 to "1.729e+18" + converts 1.729e23_f32 to "1.729e+23" converts 1.729e23_f32 to "1.729e+23" + converts 1.729e-14_f32 to "1.729e-14" converts 1.729e-14_f32 to "1.729e-14" + converts 1.729e-44_f32 to "1.7e-44" converts 1.729e-44_f32 to "1.7e-44" + converts 1.729e+11_f32 to "172900000000.0" converts 1.729e+11_f32 to "172900000000.0" + converts 1.729e+4_f32 to "17290.0" converts 1.729e+4_f32 to "17290.0" + converts 1.729e-7_f32 to "1.729e-7" converts 1.729e-7_f32 to "1.729e-7" + converts 1.729e22_f32 to "1.729e+22" converts 1.729e22_f32 to "1.729e+22" + converts 1.729e38_f32 to "1.729e+38" converts 1.729e38_f32 to "1.729e+38" + converts 1.729e-13_f32 to "1.729e-13" converts 1.729e-13_f32 to "1.729e-13" + converts 1.729e+12_f32 to "1729000000000.0" converts 1.729e+12_f32 to "1729000000000.0" + converts 1.729e-40_f32 to "1.729e-40" converts 1.729e-40_f32 to "1.729e-40" + converts 1.729e+0_f32 to "1.729" converts 1.729e+0_f32 to "1.729" + converts 100000000000000.0_f32 to "100000000000000.0" converts 100000000000000.0_f32 to "100000000000000.0" + converts 1000000000.0_f32 to "1000000000.0" converts 1000000000.0_f32 to "1000000000.0" + converts 524288000.0_f32 to "524288000.0" converts 524288000.0_f32 to "524288000.0" + converts 1000000.0_f32 to "1000000.0" converts 1000000.0_f32 to "1000000.0" + converts 1.2345678_f32 to "1.2345678" converts 1.2345678_f32 to "1.2345678" + converts 8192.0_f32 to "8192.0" converts 8192.0_f32 to "8192.0" + converts 65536.0_f32 to "65536.0" converts 65536.0_f32 to "65536.0" + converts 8192000.0_f32 to "8192000.0" converts 8192000.0_f32 to "8192000.0" + converts 1000010000000000.0_f32 to "1.00001e+15" converts 1000010000000000.0_f32 to "1.00001e+15" + converts 123.0_f32 to "123.0" converts 123.0_f32 to "123.0" + converts 64000.0_f32 to "64000.0" converts 64000.0_f32 to "64000.0" + converts 12345678901.0_f32 to "12345679000.0" converts 12345678901.0_f32 to "12345679000.0" + converts 1.2_f32 to "1.2" converts 1.2_f32 to "1.2" + Ryu f2s_test.cc BoundaryRoundEven + converts 8.999999e9_f32 to "9000000000.0" converts 8.999999e9_f32 to "9000000000.0" + converts 3.4366717e10_f32 to "34366720000.0" converts 3.4366717e10_f32 to "34366720000.0" + converts 3.355445e7_f32 to "33554450.0" converts 3.355445e7_f32 to "33554450.0" + converts 8000.0_f32 to "8000.0" converts 8000.0_f32 to "8000.0" + converts 123456789012.0_f32 to "123456790000.0" converts 123456789012.0_f32 to "123456790000.0" + converts 12.0_f32 to "12.0" converts 12.0_f32 to "12.0" + converts 100000000.0_f32 to "100000000.0" converts 100000000.0_f32 to "100000000.0" + highly-trimmed powers of 2 + converts 0x1p118_f32 to "3.32307e+35" converts 0x1p118_f32 to "3.32307e+35" + converts 0x1p119_f32 to "6.64614e+35" converts 0x1p119_f32 to "6.64614e+35" + converts 1.234567_f32 to "1.234567" converts 1.234567_f32 to "1.234567" + Ryu f2s_test.cc LooksLikePow5 + converts 0x1.2a05f2p+59_f32 to "6.7108864e+17" converts 0x1.2a05f2p+59_f32 to "6.7108864e+17" + converts 0x1.2a05f2p+60_f32 to "1.3421773e+18" converts 0x1.2a05f2p+60_f32 to "1.3421773e+18" + converts 0x1.2a05f2p+61_f32 to "2.6843546e+18" converts 0x1.2a05f2p+61_f32 to "2.6843546e+18" + converts 1000100000000000.0_f32 to "1.0001e+15" converts 1000100000000000.0_f32 to "1.0001e+15" + converts 1000000010000000.0_f32 to "1.0e+15" converts 1000000010000000.0_f32 to "1.0e+15" + converts 1010000000000000.0_f32 to "1.01e+15" converts 1010000000000000.0_f32 to "1.01e+15" + converts 64.0_f32 to "64.0" converts 64.0_f32 to "64.0" + converts 512.0_f32 to "512.0" converts 512.0_f32 to "512.0" + Ryu f2s_test.cc Regression + converts 5.368709e18_f32 to "5.368709e+18" converts 5.368709e18_f32 to "5.368709e+18" + converts 1.00014165e-36_f32 to "1.00014165e-36" converts 1.00014165e-36_f32 to "1.00014165e-36" + converts 9.223372e18_f32 to "9.223372e+18" converts 9.223372e18_f32 to "9.223372e+18" + converts 2.8823261e17_f32 to "2.882326e+17" converts 2.8823261e17_f32 to "2.882326e+17" + converts 1.6777216e7_f32 to "16777216.0" converts 1.6777216e7_f32 to "16777216.0" + converts 4.7223665e21_f32 to "4.7223665e+21" converts 4.7223665e21_f32 to "4.7223665e+21" + converts -2.47e-43_f32 to "-2.47e-43" converts -2.47e-43_f32 to "-2.47e-43" + converts 4.6143165e18_f32 to "4.6143166e+18" converts 4.6143165e18_f32 to "4.6143166e+18" + converts 6.7108872e7_f32 to "67108870.0" converts 6.7108872e7_f32 to "67108870.0" + converts 0.007812537_f32 to "0.007812537" converts 0.007812537_f32 to "0.007812537" + converts 6.7131496e7_f32 to "67131496.0" converts 6.7131496e7_f32 to "67131496.0" + converts 7.038531e-26_f32 to "7.038531e-26" converts 7.038531e-26_f32 to "7.038531e-26" + converts 200.0_f32 to "200.0" converts 200.0_f32 to "200.0" + converts 1.0e-44_f32 to "1.0e-44" converts 1.0e-44_f32 to "1.0e-44" + converts 0.0010310042_f32 to "0.0010310042" converts 0.0010310042_f32 to "0.0010310042" + converts 1.1811161e19_f32 to "1.1811161e+19" converts 1.1811161e19_f32 to "1.1811161e+19" + converts 1.4e-45_f32 to "1.0e-45" converts 1.4e-45_f32 to "1.0e-45" + converts 1.5846085e29_f32 to "1.5846086e+29" converts 1.5846085e29_f32 to "1.5846086e+29" + converts 8388608.0_f32 to "8388608.0" converts 8388608.0_f32 to "8388608.0" + converts 5.3399997e9_f32 to "5339999700.0" converts 5.3399997e9_f32 to "5339999700.0" + converts 1.9310392e-38_f32 to "1.9310392e-38" converts 1.9310392e-38_f32 to "1.9310392e-38" + converts 6.0898e-39_f32 to "6.0898e-39" converts 6.0898e-39_f32 to "6.0898e-39" + converts 3.3554436e7_f32 to "33554436.0" converts 3.3554436e7_f32 to "33554436.0" + converts 3.3554432e7_f32 to "33554432.0" converts 3.3554432e7_f32 to "33554432.0" + converts 1.18697724e20_f32 to "1.18697725e+20" converts 1.18697724e20_f32 to "1.18697725e+20" + converts 1.993244e-38_f32 to "1.993244e-38" converts 1.993244e-38_f32 to "1.993244e-38" + converts 4103.9003_f32 to "4103.9004" converts 4103.9003_f32 to "4103.9004" + converts 2.816025e14_f32 to "281602500000000.0" converts 2.816025e14_f32 to "281602500000000.0" + converts 9.2234038e17_f32 to "9.223404e+17" converts 9.2234038e17_f32 to "9.223404e+17" + converts 1.0_f32 to "1.0" converts 1.0_f32 to "1.0" + converts 123456789012345.0_f32 to "123456790000000.0" converts 123456789012345.0_f32 to "123456790000000.0" + Ryu f2s_test.cc LotsOfTrailingZeros + converts 2.4414062e-3_f32 to "0.0024414062" converts 2.4414062e-3_f32 to "0.0024414062" + converts 6.3476562e-3_f32 to "0.0063476562" converts 6.3476562e-3_f32 to "0.0063476562" + converts 4.3945312e-3_f32 to "0.0043945312" converts 4.3945312e-3_f32 to "0.0043945312" + converts 2.4414062e-4_f32 to "0.00024414062" converts 2.4414062e-4_f32 to "0.00024414062" + converts 1234567890123.0_f32 to "1234568000000.0" converts 1234567890123.0_f32 to "1234568000000.0" + converts 1234.0_f32 to "1234.0" converts 1234.0_f32 to "1234.0" + converts 1100000000000000.0_f32 to "1.1e+15" converts 1100000000000000.0_f32 to "1.1e+15" + converts 524288.0_f32 to "524288.0" converts 524288.0_f32 to "524288.0" + converts 1000000100000000.0_f32 to "1.0000001e+15" converts 1000000100000000.0_f32 to "1.0000001e+15" + Grisu failures + converts 85_f32 / 512_f32 to "0.16601562" converts 85_f32 / 512_f32 to "0.16601562" + converts 8388608.0_f32 to "8388608.0" converts 8388608.0_f32 to "8388608.0" + converts 12345.0_f32 to "12345.0" converts 12345.0_f32 to "12345.0" + converts 100000000000.0_f32 to "100000000000.0" converts 100000000000.0_f32 to "100000000000.0" + converts 67108864.0_f32 to "67108864.0" converts 67108864.0_f32 to "67108864.0" + converts 123456789.0_f32 to "123456790.0" converts 123456789.0_f32 to "123456790.0" + special cases + converts -Float32::INFINITY to "-Infinity" converts -Float32::INFINITY to "-Infinity" + converts -0.0_f32 to "-0.0" converts -0.0_f32 to "-0.0" + converts 4290772992_u32.unsafe_as(Float32) to "NaN" converts 4290772992_u32.unsafe_as(Float32) to "NaN" + converts Float32::MIN_SUBNORMAL to "1.0e-45" converts Float32::MIN_SUBNORMAL to "1.0e-45" + converts Float32::INFINITY to "Infinity" converts Float32::INFINITY to "Infinity" + converts Float32::MAX to "3.4028235e+38" converts Float32::MAX to "3.4028235e+38" + converts 0.0_f32 to "0.0" converts 0.0_f32 to "0.0" + converts 2143289344_u32.unsafe_as(Float32) to "NaN" converts 2143289344_u32.unsafe_as(Float32) to "NaN" + converts Float32::MIN_POSITIVE to "1.1754944e-38" converts Float32::MIN_POSITIVE to "1.1754944e-38" + converts Float32::MIN_POSITIVE.prev_float to "1.1754942e-38" converts Float32::MIN_POSITIVE.prev_float to "1.1754942e-38" + converts 100000.0_f32 to "100000.0" converts 100000.0_f32 to "100000.0" + converts 1000.0_f32 to "1000.0" converts 1000.0_f32 to "1000.0" + converts 1234567895.0_f32 to "1234568000.0" converts 1234567895.0_f32 to "1234568000.0" + converts 10.0_f32 to "10.0" converts 10.0_f32 to "10.0" + converts 10000000000.0_f32 to "10000000000.0" converts 10000000000.0_f32 to "10000000000.0" + converts 65536000.0_f32 to "65536000.0" converts 65536000.0_f32 to "65536000.0" + converts 123456.0_f32 to "123456.0" converts 123456.0_f32 to "123456.0" + converts 1.2345_f32 to "1.2345" converts 1.2345_f32 to "1.2345" + converts 1234567.0_f32 to "1234567.0" converts 1234567.0_f32 to "1234567.0" + converts 1.23456735e-36_f32 to "1.23456735e-36" converts 1.23456735e-36_f32 to "1.23456735e-36" + converts 1.23456_f32 to "1.23456" converts 1.23456_f32 to "1.23456" + converts 1234567890123456.0_f32 to "1.234568e+15" converts 1234567890123456.0_f32 to "1.234568e+15" + converts 512000.0_f32 to "512000.0" converts 512000.0_f32 to "512000.0" + converts 10000000000000.0_f32 to "10000000000000.0" converts 10000000000000.0_f32 to "10000000000000.0" + converts 10000.0_f32 to "10000.0" converts 10000.0_f32 to "10000.0" +HTTP::Server::Response + changes status and others after headers sent changes status and others after headers sent + retrieves status code retrieves status code + prints with content length prints with content length + changes status and others changes status and others + flushes flushes + sets content type sets content type + closes closes + prints less then buffer's size to output prints less then buffer's size to output + sets status code sets status code + does not automatically add the `content-length` header if the response is informational does not automatically add the `content-length` header if the response is informational + #respond_with_status + uses default values uses default values + raises when response is closed raises when response is closed + raises when headers written raises when headers written + sends HTTP::Status and custom message sends HTTP::Status and custom message + sends HTTP::Status sends HTTP::Status + sends custom code and message sends custom code and message + #redirect + with header with header + doesn't encode URIs twice doesn't encode URIs twice + fails if headers already sent fails if headers already sent + permanent redirect permanent redirect + encodes special characters encodes special characters + URI location URI location + fails if closed fails if closed + String location String location + writes and flushes with HTTP 1.0 writes and flushes with HTTP 1.0 + prints more then buffer's size prints more then buffer's size + doesn't override content-length when there's no body doesn't override content-length when there's no body + adds header adds header + does not automatically add the `content-length` header if the response is a 204 does not automatically add the `content-length` header if the response is a 204 + allows specifying the content-length header explicitly allows specifying the content-length header explicitly + closes when it fails to write closes when it fails to write + does not automatically add the `content-length` header if the response is a 304 does not automatically add the `content-length` header if the response is a 304 + wraps output wraps output + closes gracefully with replaced output that syncs close (#11389) closes gracefully with replaced output that syncs close (#11389) + changes status message changes status message + writes cookie headers writes cookie headers + sets content type after headers sent sets content type after headers sent + prints less then buffer's size prints less then buffer's size + prints with content length (method) prints with content length (method) + resets and clears headers and cookies resets and clears headers and cookies +OpenSSL::SSL::HostnameValidation + validate_hostname + falls back to CN entry (unless SAN entry is defined) falls back to CN entry (unless SAN entry is defined) + matches IP from certificate SAN entries matches IP from certificate SAN entries + matches domains from certificate SAN entries matches domains from certificate SAN entries + verifies all SAN entries verifies all SAN entries + matches_hostname? + matches leading dot matches leading dot + matches IDNA label matches IDNA label + skips trailing dot skips trailing dot + wildcard matches according to RFC 6125, section 6.4.3 wildcard matches according to RFC 6125, section 6.4.3 + literal matches literal matches + normalizes case normalizes case +IO + "#each_line(chomp: false)" iterator "#each_line(chomp: false)" iterator + IO::Error + .new + accepts `cause` argument (#14241) accepts `cause` argument (#14241) + read operations + does gets with empty string (with peek) does gets with empty string (with peek) + gets with string as delimiter and chomp = true gets with string as delimiter and chomp = true + raises on EOF with readline and delimiter raises on EOF with readline and delimiter + does gets with \n (no peek) does gets with \n (no peek) + does each_line does each_line + does gets with \r\n (with peek) does gets with \r\n (with peek) + does gets with \r\n, chomp true goes past \r does gets with \r\n, chomp true goes past \r + does gets with limit does gets with limit + does gets with unicode char delimiter does gets with unicode char delimiter + does read_line with limit does read_line with limit + does read_fully does read_fully + reads char reads char + does each_byte does each_byte + .same_content? + compares two ios, one way (false) compares two ios, one way (false) + compares two ios, second way (false) compares two ios, second way (false) + refutes prefix match, second way refutes prefix match, second way + refutes prefix match, one way refutes prefix match, one way + refutes prefix match, one way refutes prefix match, one way + compares two ios, one way (true) compares two ios, one way (true) + compares two ios, second way (true) compares two ios, second way (true) + refutes prefix match, second way refutes prefix match, second way + does gets with \r\n (no peek) does gets with \r\n (no peek) + gets with string as delimiter gets with string as delimiter + reads byte reads byte + reads all remaining content as bytes reads all remaining content as bytes + does gets with char and limit does gets with char and limit + does gets with \r\n does gets with \r\n + does gets with chomp false does gets with chomp false + raises if invoking gets with negative limit raises if invoking gets with negative limit + does read_line with char and limit does read_line with char and limit + reads all remaining content reads all remaining content + does read_fully? does read_fully? + does gets with char delimiter does gets with char delimiter + does gets with big line does gets with big line + gets with single byte string as delimiter gets with single byte string as delimiter + raises on EOF with read_line raises on EOF with read_line + does gets with \n (with peek) does gets with \n (with peek) + doesn't underflow when limit is unsigned doesn't underflow when limit is unsigned + reads string reads string + gets with empty string as delimiter gets with empty string as delimiter + does gets does gets + does gets with empty string (no peek) does gets with empty string (no peek) + does each_char does each_char + raises if trying to read to an IO not opened for reading raises if trying to read to an IO not opened for reading + #close + aborts 'write' in a different fiber aborts 'write' in a different fiber + aborts 'read' in a different fiber aborts 'read' in a different fiber + "#char" iterator "#char" iterator + encoding + #encoding + returns "UTF-8" if the encoding is not manually set returns "UTF-8" if the encoding is not manually set + returns the name of the encoding set via #set_encoding returns the name of the encoding set via #set_encoding + decode + sets encoding to utf8 and stays as UTF-8 sets encoding to utf8 and stays as UTF-8 + gets with string delimiter gets with string delimiter + gets with limit gets with limit + sets encoding to utf-8 and stays as UTF-8 sets encoding to utf-8 and stays as UTF-8 + does skips when converting to UTF-8 does skips when converting to UTF-8 + decodes incomplete multibyte sequence with skip (2) (#3285) decodes incomplete multibyte sequence with skip (2) (#3285) + decodes incomplete multibyte sequence with skip (3) (#3285) decodes incomplete multibyte sequence with skip (3) (#3285) + reads string reads string + gets_to_end gets_to_end + gets gets + gets with non-ascii and chomp: false gets with non-ascii and chomp: false + reads char reads char + gets with limit (big) gets with limit (big) + gets with non-ascii gets with non-ascii + reads utf8 byte reads utf8 byte + gets with limit (small, no newline) gets with limit (small, no newline) + says invalid encoding says invalid encoding + says invalid 'invalid' option says invalid 'invalid' option + skips invalid byte sequences skips invalid byte sequences + gets ascii from socket (#9056) gets ascii from socket (#9056) + reads utf8 reads utf8 + gets big EUC-JP string gets big EUC-JP string + raises on incomplete byte sequence raises on incomplete byte sequence + decodes incomplete multibyte sequence with skip (#3285) decodes incomplete multibyte sequence with skip (#3285) + does gets on unicode with char and limit without off-by-one does gets on unicode with char and limit without off-by-one + says invalid byte sequence says invalid byte sequence + gets big string gets big string + gets with chomp = false gets with chomp = false + encode + printf printf + raises on invalid byte sequence raises on invalid byte sequence + raises on incomplete byte sequence raises on incomplete byte sequence + prints char prints char + puts puts + prints a string prints a string + prints numbers prints numbers + skips on invalid byte sequence skips on invalid byte sequence + prints big int prints big int + prints symbol prints symbol + says invalid encoding says invalid encoding + prints bool prints bool + partial read + doesn't block on first read. blocks on 2nd read doesn't block on first read. blocks on 2nd read + "#each_line" iterator "#each_line" iterator + write operations + skips but raises if not enough bytes skips but raises if not enough bytes + writes bytes writes bytes + skips a few bytes skips a few bytes + writes with printf as an array writes with printf as an array + skips to end skips to end + prints prints + writes with printf writes with printf + puts several arguments puts several arguments + raises if trying to write to an IO not opened for writing raises if trying to write to an IO not opened for writing + prints several arguments prints several arguments + does puts does puts + does puts with big string does puts with big string + does puts many times does puts many times + skips more than 4096 bytes skips more than 4096 bytes + "#each_line(chomp: false)" yielding "#each_line(chomp: false)" yielding + "#char" yielding "#char" yielding + "#char" iterator "#char" iterator + raises on copy with negative limit raises on copy with negative limit + copies with limit copies with limit + copies copies + "#each_line" yielding "#each_line" yielding + "#char" yielding "#char" yielding +HTTP::Cookies + allows transform to hash allows transform to hash + allows adding cookies and retrieving allows adding cookies and retrieving + .from_client_headers + parses Cookie header parses Cookie header + does not accept Set-Cookie header does not accept Set-Cookie header + allows deleting a particular cookie by key allows deleting a particular cookie by key + adding request headers + merges multiple cookies into one Cookie header merges multiple cookies into one Cookie header + overwrites a pre-existing Cookie header overwrites a pre-existing Cookie header + use encode_www_form to write the cookie's value use encode_www_form to write the cookie's value + when no cookies are set + does not set a Cookie header does not set a Cookie header + allows to iterate over the cookies allows to iterate over the cookies + allows clearing the cookies collection allows clearing the cookies collection + .from_server_headers + does not accept Cookie header does not accept Cookie header + parses Set-Cookie header parses Set-Cookie header + disallows adding inconsistent state disallows adding inconsistent state + adding response headers + overwrites all pre-existing Set-Cookie headers overwrites all pre-existing Set-Cookie headers + when no cookies are set + does not set a Set-Cookie header does not set a Set-Cookie header + uses encode_www_form on Set-Cookie value uses encode_www_form on Set-Cookie value + sets one Set-Cookie header per cookie sets one Set-Cookie header per cookie + allows retrieving the size of the cookies collection allows retrieving the size of the cookies collection +BigFloat + #+ assert assert assert assert assert assert assert assert + #trunc assert assert assert assert assert assert + #ceil assert assert assert assert assert assert + .new + new(String) new(String) + raises if creating from NaN raises if creating from NaN + raises if creating from infinity raises if creating from infinity + new(BigRational) new(BigRational) + new(BigInt) new(BigInt) + new(Int) new(Int) + new(BigFloat) new(BigFloat) + raises an ArgumentError unless string denotes valid float raises an ArgumentError unless string denotes valid float + #* assert assert - does number? does number? - does ascii_number? does ascii_number? - #dump #dump - lowercase? assert assert assert assert assert assert + #** assert assert assert assert assert assert assert assert assert assert - in_set? assert assert assert assert assert assert assert assert assert assert assert assert - rejects invalid ranges rejects invalid ranges assert assert assert assert + #- assert assert assert assert assert assert assert assert + #to_i64! + doesn't raise on overflow doesn't raise on overflow + basic basic + clones clones + #to_u64! + basic basic + doesn't raise on overflow doesn't raise on overflow + #integer? assert assert assert assert assert assert + #to_i assert assert assert assert assert assert + #<=> + compares against NaNs compares against NaNs + #to_u! assert assert assert assert assert assert + #to_f assert assert assert assert assert assert + unary #- assert assert assert assert assert assert + #/ assert assert assert assert assert assert assert assert assert assert assert assert + #round + rounding modes + default (=ties_even) default (=ties_even) + to_negative to_negative + ties_away ties_away + to_zero to_zero + ties_even ties_even + to_positive to_positive + #abs assert assert assert assert - to_i rejects unsupported base (1) to_i rejects unsupported base (1) - uppercase? assert assert assert assert + #to_f! assert assert assert assert assert assert + #to_i64 assert assert + basic basic assert assert assert assert + #to_u64 assert assert - does each_byte does each_byte - #pred #pred - escapes escapes - #unicode_escape #unicode_escape - does to_i with 16 base does to_i with 16 base - index + basic basic assert assert assert assert - #letter? #letter? - does ascii? does ascii? - does to_s for multibyte char does to_s for multibyte char - + - does for both unicode does for both unicode - does for both ascii does for both ascii - #titlecase + #to_u assert assert assert assert assert assert assert assert - #printable? #printable? - escapes with unicode escapes with unicode - #inspect #inspect - bytesize - does for unicode does for unicode - does for ascii does for ascii - #===(:Int) #===(:Int) - #ascii_control? #ascii_control? - ascii_letter? + #to_i! assert assert assert assert assert assert + #inspect assert assert - ascii_uppercase? + to_s assert assert + converts to 3.0 converts to 3.0 assert assert assert assert assert assert - to_i rejects unsupported base (37) to_i rejects unsupported base (37) - #succ #succ - does to_s for single-byte char does to_s for single-byte char - #downcase + converts to 48600000.0 converts to 48600000.0 + converts to 10.0 converts to 10.0 + converts to 1.0e-234 converts to 1.0e-234 assert assert + converts to 1.0 converts to 1.0 + converts to 100.0 converts to 100.0 assert assert + converts to 0.01 converts to 0.01 + converts to -3.0 converts to -3.0 + converts to 1.23e+45 converts to 1.23e+45 assert assert + converts to 3.0 converts to 3.0 + converts to 150.0 converts to 150.0 + converts to 1.2345678901234567e+16 converts to 1.2345678901234567e+16 + converts to 1.7976931348623157e+308 converts to 1.7976931348623157e+308 + converts to -0.01 converts to -0.01 + converts to 1.0e-6 converts to 1.0e-6 + converts to -0.1 converts to -0.1 + converts to 0.0 converts to 0.0 + converts to 12345678.87654 converts to 12345678.87654 assert assert + converts to 12345678.87654321 converts to 12345678.87654321 + converts to 9.000000000000987 converts to 9.000000000000987 + converts to 0.0 converts to 0.0 + converts to 0.1 converts to 0.1 + converts to -1.0 converts to -1.0 assert assert + converts to 2.2250738585072014e-308 converts to 2.2250738585072014e-308 + converts to 1.234567890123456789e+18 converts to 1.234567890123456789e+18 + #// assert assert assert assert - #step - "basic by" yielding "basic by" yielding - "basic by" iterator "basic by" iterator - "basic" iterator "basic" iterator - "basic" yielding "basic" yielding - clone assert assert - does bytes does bytes - does mark? does mark? - alphanumeric? assert assert assert assert assert assert assert assert - ascii_lowercase? + #floor assert assert assert assert assert assert + #hash #hash +JSON::PullParser + errors on {"foo",1} errors on {"foo",1} + parses false parses false + parses [1.5] parses [1.5] + #read? + reads > Float32::MAX reads > Float32::MAX + reads Int64: -10 reads Int64: -10 + returns nil in place of Int128 when an overflow occurs returns nil in place of Int128 when an overflow occurs + reads Int128: 0 reads Int128: 0 + reads UInt16: 10 reads UInt16: 10 + reads Int8: 0 reads Int8: 0 + returns nil instead of Float64 when the token is not compatible returns nil instead of Float64 when the token is not compatible + returns nil instead of Int8 when the token is not compatible returns nil instead of Int8 when the token is not compatible + reads Int32: 2147483647 reads Int32: 2147483647 + reads Int64: 10 reads Int64: 10 + reads Int8 when the token is a compatible kind reads Int8 when the token is a compatible kind + returns nil in place of UInt64 when an overflow occurs returns nil in place of UInt64 when an overflow occurs + reads UInt8: 255 reads UInt8: 255 + reads Int8: -128 reads Int8: -128 + reads Int128: -10 reads Int128: -10 + reads UInt32 when the token is a compatible kind reads UInt32 when the token is a compatible kind + returns nil in place of Int64 when an overflow occurs returns nil in place of Int64 when an overflow occurs + reads UInt8: 0 reads UInt8: 0 + reads UInt64: 18446744073709551615 reads UInt64: 18446744073709551615 + returns nil instead of Int64 when the token is not compatible returns nil instead of Int64 when the token is not compatible + reads UInt64: 10 reads UInt64: 10 + returns nil instead of UInt128 when the token is not compatible returns nil instead of UInt128 when the token is not compatible + reads Bool when the token is a compatible kind reads Bool when the token is a compatible kind + reads UInt128: 340282366920938463463374607431768211455 reads UInt128: 340282366920938463463374607431768211455 + reads UInt16: 0 reads UInt16: 0 + returns nil instead of UInt32 when the token is not compatible returns nil instead of UInt32 when the token is not compatible + reads Int128: 10 reads Int128: 10 + returns nil in place of Int8 when an overflow occurs returns nil in place of Int8 when an overflow occurs + returns nil instead of String when the token is not compatible returns nil instead of String when the token is not compatible + returns nil in place of UInt16 when an overflow occurs returns nil in place of UInt16 when an overflow occurs + reads UInt8: 10 reads UInt8: 10 + reads UInt8 when the token is a compatible kind reads UInt8 when the token is a compatible kind + reads Int16 when the token is a compatible kind reads Int16 when the token is a compatible kind + reads < Float64::MIN reads < Float64::MIN + reads UInt128 when the token is a compatible kind reads UInt128 when the token is a compatible kind + returns nil in place of Int32 when an overflow occurs returns nil in place of Int32 when an overflow occurs + reads Float64 when the token is a compatible kind reads Float64 when the token is a compatible kind + reads Int16: -32768 reads Int16: -32768 + reads UInt16: 65535 reads UInt16: 65535 + reads Int128: 170141183460469231731687303715884105727 reads Int128: 170141183460469231731687303715884105727 + reads UInt16 when the token is a compatible kind reads UInt16 when the token is a compatible kind + returns nil instead of UInt64 when the token is not compatible returns nil instead of UInt64 when the token is not compatible + returns nil instead of UInt16 when the token is not compatible returns nil instead of UInt16 when the token is not compatible + reads Int8: 10 reads Int8: 10 + reads Int128: -170141183460469231731687303715884105728 reads Int128: -170141183460469231731687303715884105728 + returns nil instead of Float32 when the token is not compatible returns nil instead of Float32 when the token is not compatible + reads Int32: -2147483648 reads Int32: -2147483648 + doesn't accept nan or infinity doesn't accept nan or infinity + reads < Float32::MIN reads < Float32::MIN + returns nil in place of UInt8 when an overflow occurs returns nil in place of UInt8 when an overflow occurs + returns nil instead of Bool when the token is not compatible returns nil instead of Bool when the token is not compatible + reads UInt64: 0 reads UInt64: 0 + reads Int64 when the token is a compatible kind reads Int64 when the token is a compatible kind + reads UInt128: 0 reads UInt128: 0 + reads Int32: -10 reads Int32: -10 + returns nil instead of Int16 when the token is not compatible returns nil instead of Int16 when the token is not compatible + reads Int16: 10 reads Int16: 10 + reads Int64: -9223372036854775808 reads Int64: -9223372036854775808 + reads Int16: 0 reads Int16: 0 + reads > Float64::MAX reads > Float64::MAX + reads Int8: 127 reads Int8: 127 + returns nil instead of Int128 when the token is not compatible returns nil instead of Int128 when the token is not compatible + reads String when the token is a compatible kind reads String when the token is a compatible kind + reads Int32 when the token is a compatible kind reads Int32 when the token is a compatible kind + returns nil instead of UInt8 when the token is not compatible returns nil instead of UInt8 when the token is not compatible + reads Int32: 0 reads Int32: 0 + reads UInt32: 0 reads UInt32: 0 + returns nil in place of Int16 when an overflow occurs returns nil in place of Int16 when an overflow occurs + reads Int16: -10 reads Int16: -10 + reads Float32 when the token is a compatible kind reads Float32 when the token is a compatible kind + reads Int64: 9223372036854775807 reads Int64: 9223372036854775807 + reads Int16: 32767 reads Int16: 32767 + returns nil instead of Int32 when the token is not compatible returns nil instead of Int32 when the token is not compatible + returns nil in place of UInt32 when an overflow occurs returns nil in place of UInt32 when an overflow occurs + reads UInt32: 4294967295 reads UInt32: 4294967295 + returns nil in place of UInt128 when an overflow occurs returns nil in place of UInt128 when an overflow occurs + reads Int8: -10 reads Int8: -10 + reads UInt32: 10 reads UInt32: 10 + reads Int32: 10 reads Int32: 10 + reads UInt128: 10 reads UInt128: 10 + reads UInt64 when the token is a compatible kind reads UInt64 when the token is a compatible kind + reads Int128 when the token is a compatible kind reads Int128 when the token is a compatible kind + reads Int64: 0 reads Int64: 0 + parses [[]] parses [[]] + reads array or null reads array or null + errors on {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} errors on {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} + parses ["hello"] parses ["hello"] + parses {"foo": "foo1", "bar": "bar1"} parses {"foo": "foo1", "bar": "bar1"} + parses [false] parses [false] + parses "hello" parses "hello" + parses true parses true + parses [1, 2] parses [1, 2] + errors on [[] errors on [[] + parses {} parses {} + reads object or null reads object or null + errors on [true 2] errors on [true 2] + errors on [null 2] errors on [null 2] + parses {"foo": [1, 2]} parses {"foo": [1, 2]} + errors on []] errors on []] + parses {"foo": 1} parses {"foo": 1} + #raise #raise + errors on {}} errors on {}} + errors on ["foo":1] errors on ["foo":1] + errors on {"name": "John", "age": "foo", "bar"} errors on {"name": "John", "age": "foo", "bar"} + parses [] parses [] + reads float or null reads float or null + parses [1] parses [1] + errors on {"foo"::1} errors on {"foo"::1} + parses when the input IO is already empty parses when the input IO is already empty + parses [null] parses [null] + errors on [ errors on [ + errors on [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] errors on [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] + errors on [1 2] errors on [1 2] + reads bool or null reads bool or null + parses 1 parses 1 + parses {"foo": 1, "bar": 2} parses {"foo": 1, "bar": 2} + reads string or null reads string or null + raw + parses raw "{\"foo\":[1,2,{\"bar\":[1,\"hello\",true,false,1.5]}]}" parses raw "{\"foo\":[1,2,{\"bar\":[1,\"hello\",true,false,1.5]}]}" + parses raw "null" parses raw "null" + parses raw "[1,\"hello\",true,false,null,[1,2,3]]" parses raw "[1,\"hello\",true,false,null,[1,2,3]]" + parses raw "1234.5678" parses raw "1234.5678" + parses raw "{\"foo\":\"bar\"}" parses raw "{\"foo\":\"bar\"}" + parses raw "true" parses raw "true" + parses raw "false" parses raw "false" + parses raw "1234" parses raw "1234" + parses raw "\"hello\"" parses raw "\"hello\"" + parses null parses null + parses 1.5 parses 1.5 + on key + doesn't find key doesn't find key + finds key finds key + yields all keys when skipping [1] yields all keys when skipping [1] + yields all keys when skipping {"x": [1]} yields all keys when skipping {"x": [1]} + yields all keys when skipping 1 yields all keys when skipping 1 + yields parser with bang yields parser with bang + doesn't find key with bang doesn't find key with bang + finds key with bang finds key with bang + yields parser yields parser + reads float when it is an int reads float when it is an int + errors on [,1] errors on [,1] + errors on {"foo": []:1} errors on {"foo": []:1} + errors on {,"foo": 1} errors on {,"foo": 1} + errors on [}] errors on [}] + prevents stack overflow for arrays prevents stack overflow for arrays + errors on [false 2] errors on [false 2] + reads int or null reads int or null + errors on {"name": "John", "age", 1} errors on {"name": "John", "age", 1} + parses [true] parses [true] + prevents stack overflow for hashes prevents stack overflow for hashes + parses {"foo": "bar"} parses {"foo": "bar"} + errors on ["hello" 2] errors on ["hello" 2] + errors on {"foo": {} errors on {"foo": {} + errors on [1.5 2] errors on [1.5 2] + skip + skips object skips object + skips array skips array + skips null skips null + skips bool skips bool + skips string skips string + skips int skips int + skips float skips float +::sprintf + strings + works works + calls to_s on non-strings calls to_s on non-strings + works works + numbered parameters + can be used before flags can be used before flags + raises if used as width or precision specifier of a sequential parameter raises if used as width or precision specifier of a sequential parameter + raises if sequential parameters also given raises if sequential parameters also given + raises if index is zero raises if index is zero + raises if multiple indices specified raises if multiple indices specified + gets width and precision specifier at specified index gets width and precision specifier at specified index + gets argument at specified index gets argument at specified index + raises if index is out of bounds raises if index is out of bounds + raises if named parameters also given raises if named parameters also given + doesn't format %% doesn't format %% + doesn't stop at null character when doing '%' doesn't stop at null character when doing '%' + doesn't accept modifiers for %% doesn't accept modifiers for %% + accepts multiple positional arguments accepts multiple positional arguments + formatted substitution + raises if numbered parameters also given raises if numbered parameters also given + applies formatting to %<...> placeholder applies formatting to %<...> placeholder + doesn't raise if plain substitution also given doesn't raise if plain substitution also given + raises if sequential parameters also given raises if sequential parameters also given + sequential parameters + raises if numbered parameters also given raises if numbered parameters also given + raises if named parameters also given raises if named parameters also given + floats + not-a-numbers not-a-numbers + general format + zero flag + can be used with precision can be used with precision + is ignored if string is left-justified is ignored if string is left-justified + left-pads the result with zeros left-pads the result with zeros + width specifier + sets the minimum length of the string sets the minimum length of the string + left-justifies on negative width left-justifies on negative width + space flag + writes a space for positive values writes a space for positive values + writes space before left space-padding writes space before left space-padding + is ignored if plus flag is also specified is ignored if plus flag is also specified + precision specifier + is ignored if precision argument is negative is ignored if precision argument is negative + can be used with width can be used with width + sets the precision of the value sets the precision of the value + sharp flag + prints decimal point and trailing zeros prints decimal point and trailing zeros + minus flag + left-justifies the string left-justifies the string + plus flag + writes plus sign after left space-padding writes plus sign after left space-padding + writes plus sign before left zero-padding writes plus sign before left zero-padding + writes a plus sign for positive values writes a plus sign for positive values + works works + scientific format + sharp flag + prints a decimal point even if no digits follow prints a decimal point even if no digits follow + plus flag + writes a plus sign for positive values writes a plus sign for positive values + writes plus sign after left space-padding writes plus sign after left space-padding + writes plus sign before left zero-padding writes plus sign before left zero-padding + zero flag + can be used with precision can be used with precision + is ignored if string is left-justified is ignored if string is left-justified + left-pads the result with zeros left-pads the result with zeros + works works + minus flag + left-justifies the string left-justifies the string + width specifier + left-justifies on negative width left-justifies on negative width + sets the minimum length of the string sets the minimum length of the string + space flag + is ignored if plus flag is also specified is ignored if plus flag is also specified + writes space before left space-padding writes space before left space-padding + writes a space for positive values writes a space for positive values + precision specifier + is ignored if precision argument is negative is ignored if precision argument is negative + can be used with width can be used with width + sets the minimum length of the fractional part sets the minimum length of the fractional part + infinities infinities + not-a-numbers not-a-numbers + infinities infinities + hex format + width specifier + left-justifies on negative width left-justifies on negative width + sets the minimum length of the string sets the minimum length of the string + zero flag + can be used with precision can be used with precision + is ignored if string is left-justified is ignored if string is left-justified + left-pads the result with zeros left-pads the result with zeros + minus flag + left-justifies the string left-justifies the string + space flag + is ignored if plus flag is also specified is ignored if plus flag is also specified + writes a space for positive values writes a space for positive values + writes space before left space-padding writes space before left space-padding + sharp flag + prints a decimal point even if no digits follow prints a decimal point even if no digits follow + works works + plus flag + writes plus sign after left space-padding writes plus sign after left space-padding + writes plus sign before left zero-padding writes plus sign before left zero-padding + writes a plus sign for positive values writes a plus sign for positive values + precision specifier + sets the minimum length of the fractional part sets the minimum length of the fractional part + is ignored if precision argument is negative is ignored if precision argument is negative + can be used with width can be used with width + fixed format + works works + plain substitution + raises if sequential parameters also given raises if sequential parameters also given + throws an error when the key is not found throws an error when the key is not found + raises if expecting hash or named tuple but not given raises if expecting hash or named tuple but not given + raises on unbalanced curly raises on unbalanced curly + doesn't raise if 1-element list of hash or named tuple given doesn't raise if 1-element list of hash or named tuple given + substitutes one placeholder substitutes one placeholder + doesn't raise on balanced curly with null byte doesn't raise on balanced curly with null byte + doesn't raise if formatted substitution also given doesn't raise if formatted substitution also given + substitutes multiple placeholder substitutes multiple placeholder + raises if numbered parameters also given raises if numbered parameters also given + integers + width specifier + sets the minimum length of the string sets the minimum length of the string + left-justifies on negative width left-justifies on negative width + sharp flag + omits the base prefix for 0 omits the base prefix for 0 + adds a base prefix adds a base prefix + base specifier + supports base 16 supports base 16 + supports base 2 supports base 2 + supports base 10 supports base 10 + supports base 8 supports base 8 + works with BigInt works with BigInt + plus flag + writes plus sign before left zero-padding writes plus sign before left zero-padding + writes a plus sign for positive integers writes a plus sign for positive integers + writes plus sign after left space-padding writes plus sign after left space-padding + works with Int*::MIN works with Int*::MIN + precision specifier + sets the minimum length of the number part sets the minimum length of the number part + is ignored if precision argument is negative is ignored if precision argument is negative + can be used with width can be used with width + space flag + writes space before left padding writes space before left padding + writes a space for positive integers writes a space for positive integers + is ignored if plus flag is also specified is ignored if plus flag is also specified + zero flag + is ignored if precision is specified is ignored if precision is specified + left-pads the result with zeros left-pads the result with zeros + is ignored if string is left-justified is ignored if string is left-justified + minus flag + left-justifies the string left-justifies the string + reserves space for the number prefix reserves space for the number prefix +OpenSSL::Digest + returns the digest size returns the digest size + correctly reads from IO correctly reads from IO + .dup + leads to not sharing state leads to not sharing state + leads to deterministic updates leads to deterministic updates + preserves value preserves value + preserves type preserves type + returns the block size returns the block size + digest with file content digest with file content + should be able to calculate SHA1 should be able to calculate SHA1 + should be able to calculate SHA256 should be able to calculate SHA256 + raises a UnsupportedError if digest is unsupported raises a UnsupportedError if digest is unsupported + can't call #final more than once can't call #final more than once + should be able to calculate SHA512 should be able to calculate SHA512 +LLVM::ABI::ARM + size + for double for double + for struct for struct + for array for array + for float for float + for packed struct for packed struct + for integer for integer + for pointer for pointer + align + for packed struct for packed struct + for array for array + for struct for struct + for pointer for pointer + for double for double + for integer for integer + for float for float + abi_info + does with structs between 64 and 128 bits does with structs between 64 and 128 bits + does with structs between 64 and 128 bits does with structs between 64 and 128 bits + does with primitives does with primitives + does with structs less than 64 bits does with structs less than 64 bits +YAML::PullParser + raises exception at correct location raises exception at correct location + reads a sequence with an anchor reads a sequence with an anchor + reads a mapping reads a mapping + reads empty stream reads empty stream + reads an empty document reads an empty document + reads a scalar with an anchor reads a scalar with an anchor + reads a mapping with an anchor reads a mapping with an anchor + reads a sequence reads a sequence + skip + skips event in other cases skips event in other cases + document document + sequence sequence + mapping mapping + scalar scalar + alias alias + stream stream + reads a scalar reads a scalar + reads a scalar having a null character reads a scalar having a null character + parses alias parses alias +CSV + lex + raises if command, newline or end doesn't follow quote raises if command, newline or end doesn't follow quote + lexes with a given quote char lexes with a given quote char + lexes with a given separator lexes with a given separator + lexes two columns lexes two columns + lexes two empty columns lexes two empty columns + doesn't consume char after \n (#11172) doesn't consume char after \n (#11172) + lexes two columns with two rows with + lexes two columns with two rows with + + lexes two with inner quotes lexes two with inner quotes + doesn't consume char after \r (#11172) doesn't consume char after \r (#11172) + lexes two with quotes lexes two with quotes + raises on unclosed quote raises on unclosed quote + lexes newline followed by eof lexes newline followed by eof + lexes last empty column lexes last empty column + lexes with comma inside quote lexes with comma inside quote + lexes two columns with two rows lexes two columns with two rows + lexes with whitespace lexes with whitespace + raises if single quote in the middle raises if single quote in the middle + lexes with newline inside quote lexes with newline inside quote + lexes with empty columns lexes with empty columns +Log::AsyncDispatcher + dispatches entry dispatches entry + wait for entries to flush before closing wait for entries to flush before closing + can be closed twice can be closed twice +Symbol + clone assert assert - does to_i with base 36 does to_i with base 36 -XML::XPathContext - finds with variable binding (node) finds with variable binding (node) - returns nil with invalid xpath returns nil with invalid xpath - finds with variable binding (float) finds with variable binding (float) - NodeSet#to_s NodeSet#to_s - finds with variable binding (bool) finds with variable binding (bool) - finds with root namespaces (using prefix) finds with root namespaces (using prefix) - finds number finds number - finds nodes finds nodes - finds with variable binding finds with variable binding - finds with implicit (root) namespaces finds with implicit (root) namespaces - finds with root namespaces finds with root namespaces - finds with variable binding (string) finds with variable binding (string) - finds boolean finds boolean - raises on invalid xpath raises on invalid xpath - finds with explicit namespace finds with explicit namespace - finds string finds string - finds with variable binding (nodes) finds with variable binding (nodes) -Float::Printer::RyuPrintf - .d2fixed - MinMax MinMax - VaryingPrecision VaryingPrecision - Carrying Carrying - Basic Basic - RoundingResultZero RoundingResultZero - AllBinaryExponents AllBinaryExponents - RoundToEvenInteger RoundToEvenInteger - NonRoundToEvenScenarios NonRoundToEvenScenarios - RoundToEven RoundToEven - Regression Regression - AllPowersOfTen AllPowersOfTen - Zero Zero - .d2gen - varying precision varying precision - trim trailing zeros trim trailing zeros - transitions between fixed notation and scientific notation transitions between fixed notation and scientific notation - trim trailing zeros and decimal point trim trailing zeros and decimal point - UCRT had trouble with rounding this value UCRT had trouble with rounding this value - large precision with fixed notation and scientific notation large precision with fixed notation and scientific notation - trim trailing zeros, scientific notation trim trailing zeros, scientific notation - maximum-length output maximum-length output - more cases that the UCRT had trouble with (e.g. DevCom-1093399) more cases that the UCRT had trouble with (e.g. DevCom-1093399) - corner cases corner cases - transitions between values of the scientific exponent X transitions between values of the scientific exponent X - Basic Basic - tricky corner cases tricky corner cases - trim trailing zeros and decimal point, scientific notation trim trailing zeros and decimal point, scientific notation - .d2exp - PrintDecimalPoint PrintDecimalPoint - MinMax MinMax - VaryingPrecision VaryingPrecision - Basic Basic - AllPowersOfTen AllPowersOfTen - AllBinaryExponents AllBinaryExponents - Zero Zero - Carrying Carrying - Exponents Exponents - RoundToEvenInteger RoundToEvenInteger - NonRoundToEvenScenarios NonRoundToEvenScenarios - RoundToEven RoundToEven -JSON serialization - provide symmetric encoding and decoding for Union types provide symmetric encoding and decoding for Union types - to_pretty_json - does for Array does for Array - does for nested Hash with indent does for nested Hash with indent - does for Int32 does for Int32 - does for Hash does for Hash - does for Float64 does for Float64 - does for empty Hash does for empty Hash - does for String does for String - does for empty Array does for empty Array - Time - #to_json #to_json - omit sub-second precision omit sub-second precision - does for Nil does for Nil - does for nested Hash does for nested Hash - does for nested Array does for nested Array - does for Array with indent does for Array with indent - does for Bool does for Bool - from_json - deserializes with root deserializes with root - raises if UInt32.from_json overflows raises if UInt32.from_json overflows - raises if Int128.from_json overflows raises if Int128.from_json overflows - deserializes union with Int64 (fast path) deserializes union with Int64 (fast path) - does for named tuple with nilable fields (#8089) does for named tuple with nilable fields (#8089) - does Int64.from_json does Int64.from_json - deserializes union of Int32 and Float64 (#7333) deserializes union of Int32 and Float64 (#7333) - does for named tuple with spaces in key (#10918) does for named tuple with spaces in key (#10918) - deserializes union with Float32 (fast path) deserializes union with Float32 (fast path) - does for BigFloat from string does for BigFloat from string - does Array(Nil)#from_json does Array(Nil)#from_json - deserializes union deserializes union - does Hash(Int32, String)#from_json does Hash(Int32, String)#from_json - does UInt32.from_json does UInt32.from_json - does String.from_json does String.from_json - does Array(Int64)#from_json does Array(Int64)#from_json - does for BigDecimal from string does for BigDecimal from string - does for UUID (hex) does for UUID (hex) - deserializes union with UInt64 (fast path) deserializes union with UInt64 (fast path) - deserializes union with Int8 (fast path) deserializes union with Int8 (fast path) - raises an error Iterator(String)#from_json with invalid types raises an error Iterator(String)#from_json with invalid types - does Array(Bool)#from_json does Array(Bool)#from_json - raises if UInt128.from_json overflows raises if UInt128.from_json overflows - raises if Int32.from_json overflows raises if Int32.from_json overflows - raises an error Hash(String, Int32)#from_json with null value raises an error Hash(String, Int32)#from_json with null value - does UInt128.from_json does UInt128.from_json - does Hash(Float32, String)#from_json does Hash(Float32, String)#from_json - does for BigInt does for BigInt - raises if UInt64.from_json overflows raises if UInt64.from_json overflows - does for UUID (hyphenated) does for UUID (hyphenated) - raises if UInt8.from_json overflows raises if UInt8.from_json overflows - does for empty named tuple does for empty named tuple - deserializes union with UInt16 (fast path) deserializes union with UInt16 (fast path) - Enum - normal enum normal enum - flag enum flag enum - raises an error Iterator(String)#from_json with invalid JSON raises an error Iterator(String)#from_json with invalid JSON - does for BigFloat from int does for BigFloat from int - deserializes union with Int32 (fast path) deserializes union with Int32 (fast path) - Enum::ValueConverter.from_json - flag enum flag enum - normal enum normal enum - does for tuple with file-private type does for tuple with file-private type - deserializes unions of the same kind and remains stable deserializes unions of the same kind and remains stable - does Int128.from_json does Int128.from_json - does for named tuple with spaces in key and quote char (#10918) does for named tuple with spaces in key and quote char (#10918) - does Hash(BigInt, String)#from_json does Hash(BigInt, String)#from_json - errors on underscores inside ints errors on underscores inside ints - does UInt16.from_json does UInt16.from_json - raises if UInt16.from_json overflows raises if UInt16.from_json overflows - does Array(Int32)#from_json does Array(Int32)#from_json - does Iterator(String)#from_json does Iterator(String)#from_json - deserializes union with UInt8 (fast path) deserializes union with UInt8 (fast path) - raises for BigInt from unsupported types raises for BigInt from unsupported types - parse exceptions - has correct location when raises in Union#from_json has correct location when raises in Union#from_json - has correct location when raises in NamedTuple#from_json has correct location when raises in NamedTuple#from_json - captures overflows for integer types captures overflows for integer types - does for BigFloat does for BigFloat - deserializes union with Int128 (fast path) deserializes union with Int128 (fast path) - deserializes union with UInt32 (fast path) deserializes union with UInt32 (fast path) - deserializes union with bool (fast path) deserializes union with bool (fast path) - does for named tuple does for named tuple - does for UUID (urn) does for UUID (urn) - deserializes union with UInt128 (fast path) deserializes union with UInt128 (fast path) - deserializes union with Int16 (fast path) deserializes union with Int16 (fast path) - raises for BigDecimal from unsupported types raises for BigDecimal from unsupported types - does Array(Float64)#from_json does Array(Float64)#from_json - does for tuple does for tuple - does UInt64.from_json does UInt64.from_json - does Int32.from_json does Int32.from_json - does for Array(Int32) from IO does for Array(Int32) from IO - raises if Int16.from_json overflows raises if Int16.from_json overflows - does Int16.from_json does Int16.from_json - does Hash(String, Int32)#from_json does Hash(String, Int32)#from_json - does Array(Float32)#from_json does Array(Float32)#from_json - raises if Int64.from_json overflows raises if Int64.from_json overflows - deserializes Time deserializes Time - does Hash(BigDecimal, String)#from_json does Hash(BigDecimal, String)#from_json - does for named tuple with nilable fields and null (#8089) does for named tuple with nilable fields and null (#8089) - does for empty tuple does for empty tuple - deserializes union with Float64 (fast path) deserializes union with Float64 (fast path) - does UInt8.from_json does UInt8.from_json - does Hash(String, String)#from_json does Hash(String, String)#from_json - does for BigDecimal from int does for BigDecimal from int - errors on non-base-10 ints errors on non-base-10 ints - does for Array(Int32) with block does for Array(Int32) with block - raises if Int8.from_json overflows raises if Int8.from_json overflows - does Int8.from_json does Int8.from_json - does Deque(String)#from_json does Deque(String)#from_json - does Hash(Float64, String)#from_json does Hash(Float64, String)#from_json - does Hash(BigFloat, String)#from_json does Hash(BigFloat, String)#from_json - does for BigDecimal from float does for BigDecimal from float - does for named tuple with file-private type does for named tuple with file-private type - does Path.from_json does Path.from_json - raises for BigFloat from unsupported types raises for BigFloat from unsupported types - to_json - does for Hash does for Hash - does for String with slash does for String with slash - does for Hash with Float64 keys does for Hash with Float64 keys - Enum::ValueConverter - normal enum normal enum - flag enum flag enum - does for String with control codes in a few places does for String with control codes in a few places - does for Hash with symbol keys does for Hash with symbol keys - does for Nil does for Nil - Enum - flag enum flag enum - normal enum normal enum - does for Int128 does for Int128 - does for String with control codes does for String with control codes - does for Hash with BigInt keys does for Hash with BigInt keys - does for Hash with newlines does for Hash with newlines - does for BigInt does for BigInt - does for Deque does for Deque - does for UUID does for UUID - does for Float64 does for Float64 - does for String with quote does for String with quote - does for Bool does for Bool - does for BigDecimal does for BigDecimal - does for StaticArray does for StaticArray - does for BigFloat does for BigFloat - raises if Float is infinity raises if Float is infinity - raises if Float is NaN raises if Float is NaN - does for Tuple does for Tuple - does for Set does for Set - does for Path does for Path - does for Hash with Float32 keys does for Hash with Float32 keys - does for NamedTuple does for NamedTuple - does for Int32 does for Int32 - does for String does for String - does for Hash with int keys does for Hash with int keys - does for Array does for Array - does for Iterator does for Iterator -IO::Digest - calculates digest from reading calculates digest from reading - does not calculate digest on read does not calculate digest on read - calculates digest from writing a string calculates digest from writing a string - can be created with ongoing digest can be created with ongoing digest - calculates digest from writing calculates digest from writing - calculates digest from multiple reads calculates digest from multiple reads - calculates digest from multiple writes calculates digest from multiple writes - does not calculate digest on write does not calculate digest on write -JSON::Builder - writes object with array and scalar and indent writes object with array and scalar and indent - writes field with arbitrary value in object writes field with arbitrary value in object - writes array with indent level writes array with indent level - errors on max nesting (array) errors on max nesting (array) - errors on infinity errors on infinity - errors on max nesting (object) errors on max nesting (object) - writes array with indent string writes array with indent string - writes empty array with indent level writes empty array with indent level - errors if writing two scalars errors if writing two scalars - raises if array is left open raises if array is left open - writes object with indent level writes object with indent level - #next_is_object_key? #next_is_object_key? - errors if writing before document start errors if writing before document start - writes bool writes bool - writes nested array writes nested array - writes string writes string - writes object with scalar and indent writes object with scalar and indent - writes empty object with indent level writes empty object with indent level - writes null writes null - writes nested array writes nested array - writes object writes object - writes float writes float - writes nested object writes nested object - writes field with scalar in object writes field with scalar in object - raises if object is left open raises if object is left open - writes raw writes raw - writes integer writes integer - writes string with controls and slashes writes string with controls and slashes - errors on nan errors on nan - writes array writes array - raises if nothing written raises if nothing written -OpenSSL::SSL::Context - calls #finalize on insecure server context calls #finalize on insecure server context - insecure for server insecure for server - alpn_protocol= alpn_protocol= - sets private key sets private key - removes options removes options - fails to set private key fails to set private key - sets certificate chain sets certificate chain - returns options returns options - sets the verify mode sets the verify mode - adds modes adds modes - adds temporary ecdh curve (P-256) adds temporary ecdh curve (P-256) - ciphers - sets old ciphers sets old ciphers - uses intermediate default ciphers uses intermediate default ciphers - sets ciphers sets ciphers - sets cipher_suites sets cipher_suites - sets intermediate ciphers sets intermediate ciphers - sets modern ciphers sets modern ciphers - changes security level changes security level - fails to set certificate chain fails to set certificate chain - LibSSL::VerifyMode - .parse none (#7455) .parse none (#7455) - returns modes returns modes - calls #finalize on insecure client context calls #finalize on insecure client context - insecure for client insecure for client - new for client new for client - removes modes removes modes - .from_hash - builds builds - errors errors - new for server new for server - adds options adds options -Time::Format - ISO_8601_DATE - formats default format formats default format - parses week date parses week date - parses ordinal date parses ordinal date - parses calendar date parses calendar date - RFC_2822 - parses regular format parses regular format - RFC_3339 - parses regular format parses regular format - ISO_8601_DATE_TIME - parses hour parses hour - parses hour:minutes parses hour:minutes - parses decimal fractions parses decimal fractions - parses calendar date parses calendar date - parses ordinal date parses ordinal date - week date week date - formats default format formats default format -INI - build to an INI-formatted output - builds with no sections builds with no sections - builds with no spaces around `=` builds with no spaces around `=` - builds from a Hash builds from a Hash - builds from a NamedTuple builds from a NamedTuple - builds an empty section before non-empty sections builds an empty section before non-empty sections - parse - from IO - parses a file parses a file - from String - ignores whitespaces ignores whitespaces - parses key = value parses key = value - parses a reopened section parses a reopened section - parses empty values parses empty values - parses empty section parses empty section - ignores comments ignores comments - fails on malformed section fails on malformed section - fails on data after section fails on data after section - fails on malformed declaration fails on malformed declaration - parses sections parses sections -BitArray - #count - without block - returns the number of bits cleared returns the number of bits cleared - returns the number of bits set returns the number of bits set - provides dup provides dup - is initially empty is initially empty - #all? - without block - returns true if all bits are set returns true if all bits are set - "#each_index" yielding "#each_index" yielding - #any? - without block - returns true if any bits are set returns true if any bits are set - sets last bit to true with negative index sets last bit to true with negative index - does to_s and inspect does to_s and inspect - "#reverse_each" yielding "#reverse_each" yielding - #includes? - returns whether the given bit is included returns whether the given bit is included - #none? - without block - returns true if no bits are set returns true if no bits are set - #fill - without block, with start and count - sets or clears a subrange of bits sets or clears a subrange of bits - raises if start index is out of range raises if start index is out of range - without block, with range - raises if start index is out of range raises if start index is out of range - sets or clears a subrange of bits sets or clears a subrange of bits - without block - clears all bits clears all bits - sets all bits sets all bits - "#reverse_each" iterator "#reverse_each" iterator - sets first bit to false sets first bit to false - sets second bit to false sets second bit to false - "#each" iterator "#each" iterator - raises when out of bounds raises when out of bounds + inspects inspects + can be compared with another symbol can be compared with another symbol + displays symbols that don't need quotes without quotes displays symbols that don't need quotes without quotes + displays the empty symbol with quotes displays the empty symbol with quotes +Log::DirectDispatcher + dispatches entry dispatches entry +OAuth::Params + builds builds +IO::FileDescriptor + #finalize + does not flush does not flush + closes closes + reopens reopens + opens STDERR in binary mode opens STDERR in binary mode + #tty? + returns false for standard streams redirected to null device returns false for standard streams redirected to null device + returns false for null device returns false for null device + does not close if close_on_finalize is false does not close if close_on_finalize is false + #initialize + handles closed file descriptor gracefully handles closed file descriptor gracefully + opens STDIN in binary mode opens STDIN in binary mode + close_on_exec + can be disabled and reenabled can be disabled and reenabled + is enabled by default (open) is enabled by default (open) + sets close on exec on the reopened standard descriptors sets close on exec on the reopened standard descriptors + is copied on reopen is copied on reopen + is enabled by default (pipe) is enabled by default (pipe) +/bin/sh: line 1: echo: write error: Broken pipe + reopen STDIN with the right mode reopen STDIN with the right mode + opens STDOUT in binary mode opens STDOUT in binary mode +UNIXServer + accept? + sets close on exec flag sets close on exec flag + returns nil when server is closed returns nil when server is closed + returns the client UNIXSocket returns the client UNIXSocket .new - raises if size is negative raises if size is negative - with block - initializes elements with block initializes elements with block - without block - initializes with false by default initializes with false by default - initializes with unused bits cleared initializes with unused bits cleared - initializes with non-Int32 size initializes with non-Int32 size - initializes with initial value initializes with initial value - #one? - returns true if exactly one bit is set returns true if exactly one bit is set - #reverse! - reverses large BitArray reverses large BitArray - reverses empty BitArray reverses empty BitArray - reverses short BitArray reverses short BitArray - reverses medium BitArray reverses medium BitArray - reads bits from slice reads bits from slice - #rindex - without block - accepts a start offset accepts a start offset - returns index of last bit cleared returns index of last bit cleared - returns index of last bit set returns index of last bit set - #tally - without block - tallies the number of set and cleared bits tallies the number of set and cleared bits - tallies into the given hash tallies into the given hash - doesn't add key into the tally hash if element doesn't exist doesn't add key into the tally hash if element doesn't exist - read bits written from slice read bits written from slice - #toggle - toggles with index < 0 and count toggles with index < 0 and count - toggles a bit toggles a bit - toggles zero bits correctly toggles zero bits correctly - toggles with index and count toggles with index and count - toggles with index == size and count toggles with index == size and count + raises when path is too long raises when path is too long + raises when socket file already exists raises when socket file already exists + won't delete existing file on bind failure won't delete existing file on bind failure + creates the socket file creates the socket file + deletes socket file on close deletes socket file on close + accept + returns the client UNIXSocket returns the client UNIXSocket + raises when server is closed raises when server is closed + datagrams + can send and receive datagrams can send and receive datagrams +Log::SyncDispatcher + dispatches entry dispatches entry +Compress::Deflate::Writer + can be closed with sync (1) can be closed with sync (1) + .open + yields itself to block yields itself to block + should be able to write should be able to write + can be closed without sync can be closed without sync + can be closed with sync (2) can be closed with sync (2) +YAML::Schema::Core + parses "0o123" parses "0o123" + raises on parse "!!binary [1]" raises on parse "!!binary [1]" + parses "!!int 123" parses "!!int 123" + parses "2002-1-2T10:11:12+03x" parses "2002-1-2T10:11:12+03x" + parses "-.INF" parses "-.INF" + parses "+.Inf" parses "+.Inf" + parses "2002-1-2 10:11:12" parses "2002-1-2 10:11:12" + parses "0x123abc" parses "0x123abc" + parses "Yes" parses "Yes" + parses "OFF" parses "OFF" + parses "off" parses "off" + .parse_null_or .parse_null_or + parses "TRUE" parses "TRUE" + parses "!!int 0755" parses "!!int 0755" + parses "!!int 0" parses "!!int 0" + parses ".inf" parses ".inf" + parses "2002-34-45" parses "2002-34-45" + raises on parse "!!float 'hello'" raises on parse "!!float 'hello'" + parses "0." parses "0." + parses "+.inf" parses "+.inf" + raises on parse "!!null 1" raises on parse "!!null 1" + parses "!!seq [ 1, 2, 3 ]" parses "!!seq [ 1, 2, 3 ]" + parses !!float .nan parses !!float .nan + parses "-.inf" parses "-.inf" + parses "!!float '1.2'" parses "!!float '1.2'" + parses "!!timestamp 2010-01-02" parses "!!timestamp 2010-01-02" + parses "!!binary aGVsbG8=" parses "!!binary aGVsbG8=" + parses "!!set { 1, 2, 3 }" parses "!!set { 1, 2, 3 }" + parses "2002-1-2T10:11:12Z" parses "2002-1-2T10:11:12Z" + parses "-123" parses "-123" + parses "NULL" parses "NULL" + raises on parse "!!timestamp foo" raises on parse "!!timestamp foo" + parses "\"1\"" parses "\"1\"" + parses ".Inf" parses ".Inf" + parses "!!float '1_234.2'" parses "!!float '1_234.2'" + parses "+.INF" parses "+.INF" + raises on parse "!!pairs 1" raises on parse "!!pairs 1" + parses "FALSE" parses "FALSE" + raises on parse "!!set 1" raises on parse "!!set 1" + parses "2002-1-2T10:11:12 Z" parses "2002-1-2T10:11:12 Z" + parses ".5" parses ".5" + parses "2002-1-2T10:11:12.3456" parses "2002-1-2T10:11:12.3456" + parses "!!float 0" parses "!!float 0" + parses "0" parses "0" + parses "y" parses "y" + parses "!!float '0.5'" parses "!!float '0.5'" + parses "True" parses "True" + parses "0b10110" parses "0b10110" + parses "!!pairs [{1: 2}, {3: 4}]" parses "!!pairs [{1: 2}, {3: 4}]" + parses "0x0" parses "0x0" + parses "1.2" parses "1.2" + parses "Null" parses "Null" + parses "n" parses "n" + parses "!!float -1" parses "!!float -1" + parses "2002-12-14" parses "2002-12-14" + parses "2002-1-2T10:11:12 -03:31" parses "2002-1-2T10:11:12 -03:31" + parses "true" parses "true" + parses "no" parses "no" + parses "2002-1-2T10:11:12 +3" parses "2002-1-2T10:11:12 +3" + parses "On" parses "On" + parses "-.5" parses "-.5" + parses "2002-1-2T10:11:12.3" parses "2002-1-2T10:11:12.3" + parses "~" parses "~" + raises on parse "!!int 'hello'" raises on parse "!!int 'hello'" + parses nan parses nan + parses "2002-1-2T10:11:12.345" parses "2002-1-2T10:11:12.345" + raises on parse "!!omap 1" raises on parse "!!omap 1" + parses "-0.0" parses "-0.0" + parses "+123" parses "+123" + parses "+.5" parses "+.5" + parses "0.815" parses "0.815" + parses "-2E+05" parses "-2E+05" + parses "2002-1-2T10:11:12 +03:00" parses "2002-1-2T10:11:12 +03:00" + parses "!!str 1" parses "!!str 1" + parses "2002-12-14 x" parses "2002-12-14 x" + parses "!!bool yes" parses "!!bool yes" + parses "False" parses "False" + raises on parse "!!bool 1" raises on parse "!!bool 1" + parses "1_234.2" parses "1_234.2" + parses "null" parses "null" + parses "2002-1-2T10:11:12Zx" parses "2002-1-2T10:11:12Zx" + parses "-.Inf" parses "-.Inf" + parses "!!int 0o123" parses "!!int 0o123" + parses "2002-1-2T10:11:12x" parses "2002-1-2T10:11:12x" + parses "2002-1-2T10:11:12.34" parses "2002-1-2T10:11:12.34" + parses "123" parses "123" + parses "2002-1-2" parses "2002-1-2" + parses "ON" parses "ON" + parses "!!null ~" parses "!!null ~" + parses "!!float .inf" parses "!!float .inf" + parses "!!int -123" parses "!!int -123" + parses "!!omap {1: 2}" parses "!!omap {1: 2}" + parses "No" parses "No" + parses "2002-1-2T10:11:12-03:31" parses "2002-1-2T10:11:12-03:31" + parses "Y" parses "Y" + parses "on" parses "on" + parses "!!int 0xabc" parses "!!int 0xabc" + parses "+12.3" parses "+12.3" + parses "false" parses "false" + parses "-0x123abc" parses "-0x123abc" + parses "!!float 2.3e4" parses "!!float 2.3e4" + raises on parse "!!str [1]" raises on parse "!!str [1]" + parses "0b0" parses "0b0" + parses "0o0" parses "0o0" + parses "2002-1-2 1:11:12" parses "2002-1-2 1:11:12" + parses "2002-1-2T10:11:12 -03:00" parses "2002-1-2T10:11:12 -03:00" + parses "2002-1-2T10:11:12" parses "2002-1-2T10:11:12" + parses "!!map {1: 2}" parses "!!map {1: 2}" + parses "NO" parses "NO" + parses ".INF" parses ".INF" + parses "00" parses "00" + parses "Off" parses "Off" + parses "YES" parses "YES" + raises on parse "!!seq 1" raises on parse "!!seq 1" + raises on parse "!!binary 1" raises on parse "!!binary 1" + parses "2002-1-2T10:11:12 +0300" parses "2002-1-2T10:11:12 +0300" + parses "yes" parses "yes" + parses "!!int 0b10" parses "!!int 0b10" + raises on parse "!!pairs [{1: 2, 3: 4}]" raises on parse "!!pairs [{1: 2, 3: 4}]" + parses "N" parses "N" + raises on parse "!!map 1" raises on parse "!!map 1" + parses "0755" parses "0755" +Compress::Zlib + write read should be inverse with random string write read should be inverse with random string + write read should be inverse (utf-8) write read should be inverse (utf-8) +hardware exception + detects stack overflow on a fiber stack detects stack overflow on a fiber stack + detects stack overflow on the main stack detects stack overflow on the main stack + reports invalid memory access reports invalid memory access +levenshtein + assert assert + assert assert + assert assert + assert assert + assert assert + finds with finder finds with finder + finds with finder and other values finds with finder and other values + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert +UUID + serializes + #to_json #to_json + from_json_object_key? from_json_object_key? +CSV + parses row by row parses row by row + does CSV.each_row with separator and quotes does CSV.each_row with separator and quotes + parse + parses some commas parses some commas + raises if command, newline or end doesn't follow quote raises if command, newline or end doesn't follow quote + parses one simple row parses one simple row + parses from IO parses from IO + parses with quote parses with quote + parses empty quoted string parses empty quoted string + parses two rows parses two rows + raises if command, newline or end doesn't follow quote (2) raises if command, newline or end doesn't follow quote (2) + parses with double quote parses with double quote + parses one row with spaces parses one row with spaces + parses empty string parses empty string + parses with quote and newline parses with quote and newline + parses two rows with the last one having a newline parses two rows with the last one having a newline + raises if single quote in the middle raises if single quote in the middle + takes an optional quote char argument takes an optional quote char argument + takes an optional separator argument takes an optional separator argument + gets row iterator gets row iterator + does CSV.each_row does CSV.each_row +Crypto::Bcrypt + doesn't have the sign expansion (high 8bit) security flaw doesn't have the sign expansion (high 8bit) security flaw + validates cost validates cost + computes digest vectors computes digest vectors + validates password size validates password size + validates salt size validates salt size +Crypto::Blowfish + encrypt and decrypt pair encrypt and decrypt pair +String::Grapheme + #size #size + #== #== + .new .new + #inspect #inspect + #to_s #to_s + .break? .break? + #bytesize #bytesize +VaList + works with C code works with C code +Crystal::PointerLinkedList(T) + empty? + return true if there is no element in list return true if there is no element in list + does each does each + delete + remove a node from list remove a node from list + push + append the node into the list append the node into the list + shift? + return nil if list is empty return nil if list is empty + remove and return the first element remove and return the first element +Deque + does each does each + select! + with pattern with pattern + with block with block + "#cycle(limit)" yielding "#cycle(limit)" yielding + first? + gives nil when empty gives nil when empty + gets first? when non empty gets first? when non empty + does clear does clear + new + creates with default value in block creates with default value in block + creates from an array creates from an array + creates with default value creates with default value + raises on negative capacity raises on negative capacity raises on negative count raises on negative count - raises on out of bound index raises on out of bound index - toggles with range toggles with range - toggles with index and count, not enough bits toggles with index and count, not enough bits + "#cycle" iterator "#cycle" iterator + implementation + works the same as array when inserting at 3/4 size and deleting at 1/8 size works the same as array when inserting at 3/4 size and deleting at 1/8 size + works the same as array works the same as array + works the same as array when inserting at 1/8 size and deleting at 3/4 size works the same as array when inserting at 1/8 size and deleting at 3/4 size + does clone does clone + inspect + assert assert + does clone with recursive type does clone with recursive type + does hash does hash + [] + gets nilable gets nilable + gets on positive index gets on positive index + gets on negative index gets on negative index + delete + deletes many deletes many + delete not found delete not found + + + does + does + + does + with different types does + with different types + last + gets last when non empty gets last when non empty + raises when empty raises when empty + []= + sets on positive index sets on positive index + sets on negative index sets on negative index + each_index iterator + works while modifying deque works while modifying deque + "#each_index" iterator "#each_index" iterator + "#each_index" yielding "#each_index" yielding == - compares elements compares elements - compares other compares other - compares other type compares other type - compares other initialized with true (#8543) compares other initialized with true (#8543) compares empty compares empty - "#each" yielding "#each" yielding - #rotate! - rotates medium BitArray rotates medium BitArray - rotates empty BitArray rotates empty BitArray - rotates large BitArray rotates large BitArray - rotates short BitArray rotates short BitArray - sets first bit to true sets first bit to true - has size has size - sets second bit to true sets second bit to true - "#each_index" iterator "#each_index" iterator - inverts all bits inverts all bits - #index - without block - returns index of first bit set returns index of first bit set - returns index of first bit cleared returns index of first bit cleared - accepts a start offset accepts a start offset - [] - gets 0, 0 on empty array gets 0, 0 on empty array - gets on inclusive range gets on inclusive range - raises on index out of bounds raises on index out of bounds - preserves equality preserves equality - gets on medium bitarrays gets on medium bitarrays - returns empty if at end returns empty if at end - gets (0..0) on empty array gets (0..0) on empty array - gets on range with start higher than negative end gets on range with start higher than negative end + compares other types compares other types + compares other compares other + compares elements compares elements + each iterator + "#each" yielding "#each" yielding + works while modifying deque works while modifying deque + "#each" iterator "#each" iterator + does unshift does unshift + shift + shifts when non empty shifts when non empty + shifts negative count raises shifts negative count raises + shifts more than what is available shifts more than what is available + raises when empty raises when empty + shifts many elements shifts many elements + swap + swaps but raises out of bounds on right swaps but raises out of bounds on right + swaps with negative indices swaps with negative indices + swaps swaps + swaps but raises out of bounds on left swaps but raises out of bounds on left + concat + concats deque concats deque + concats enumerable concats enumerable + concats large deques concats large deques + concats itself concats itself + concats indexable concats indexable + first + gets first when non empty gets first when non empty + raises when empty raises when empty + empty + is empty is empty + is not empty is not empty + rotate! + rotates with size=0 rotates with size=0 + rotates with size=capacity rotates with size=capacity + rotates rotates + rotates with size=1 rotates with size=1 + "#cycle" yielding "#cycle" yielding + does each_index does each_index + pop + pops many elements pops many elements + pops negative count raises pops negative count raises + raises when empty raises when empty + pops when non empty pops when non empty + pops more elements than what is available pops more elements than what is available + "#reverse_each" yielding "#reverse_each" yielding + size + has size 2 has size 2 + has size 0 has size 0 + insert + inserts with negative index inserts with negative index + inserts with positive index inserts with positive index + inserts out of range inserts out of range + inserts with negative index (2) inserts with negative index (2) + to_s + does with recursive does with recursive + does to_s does to_s + "#cycle(limit)" iterator "#cycle(limit)" iterator + does dup does dup + reject! + with block with block + with pattern with pattern + delete_at + deletes out of bounds deletes out of bounds + deletes negative index deletes negative index + deletes positive index deletes positive index + does equals? with custom block does equals? with custom block + "#reverse_each" iterator "#reverse_each" iterator + push + has the << alias has the << alias + returns the deque returns the deque + adds one element to the deque adds one element to the deque +Time::Location + .load_android + loads Europe/Berlin loads Europe/Berlin + loads new data if tzdata file was changed loads new data if tzdata file was changed + .fixed + with name with name + positive positive + raises if offset to large raises if offset to large + negative negative + without name without name + .load_local + with empty TZ with empty TZ + with TZ with TZ + with unset TZ with unset TZ + #lookup + reads from cache reads from cache + looks up looks up + first zone + PST8PDT PST8PDT + Pacific/Fakaofo Pacific/Fakaofo + handles dst change handles dst change + handles value after last transition handles value after last transition + caches last zone caches last zone + UTC UTC + .load + treats UTC as special case treats UTC as special case + invalid timezone identifier invalid timezone identifier + invalid zone file invalid zone file + loads Europe/Berlin loads Europe/Berlin + validating name + dot dot dot dot + absolute path absolute path + name is folder name is folder + with ZONEINFO + does not fall back to default sources does not fall back to default sources + loads new data if ZIP file was changed loads new data if ZIP file was changed + loads from custom directory loads from custom directory + loads from custom zipfile loads from custom zipfile + caches result caches result + raises if not available raises if not available + loads new data if file was changed loads new data if file was changed + .local .local +Float32 boundaries + largest denormal 32 largest denormal 32 + smallest normal 32 smallest normal 32 + max Float32 max Float32 + min Float32 min Float32 + boundaries 1.5 boundaries 1.5 + boundaries 1.0 boundaries 1.0 +Crystal::System::File + .mktemp + creates random file name creates random file name + raises when no valid path is found raises when no valid path is found + retries when file exists retries when file exists +HTTP::LogHandler + logs logs + log failed request log failed request + logs to custom logger logs to custom logger +Char::Reader + #next_char? #next_char? + errors on invalid UTF-8 errors on invalid UTF-8 + #current_char? #current_char? + gets previous char (unicode) gets previous char (unicode) + #previous_char + reads on valid UTF-8 reads on valid UTF-8 + errors on invalid UTF-8 errors on invalid UTF-8 + #each + yields chars yields chars + does not yield if empty does not yield if empty + checks bounds after block checks bounds after block + starts at pos starts at pos + starts at end starts at end + iterates through chars iterates through chars + gets previous char (ascii) gets previous char (ascii) + iterates through empty string iterates through empty string + iterates through string of size one iterates through string of size one + sets pos sets pos + peeks next char peeks next char + #previous_char? #previous_char? +__udivti3 + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests +Pointer + creates from int creates from int + move_to + performs with overlap left to right performs with overlap left to right raises on negative count raises on negative count - gets on endless range gets on endless range - doesn't exceed limits doesn't exceed limits - gets on beginless range gets on beginless range - gets on large bitarrays gets on large bitarrays - gets on inclusive range with negative indices gets on inclusive range with negative indices - gets with start and count exceeding size gets with start and count exceeding size - raises on index out of bounds with range raises on index out of bounds with range - gets on range with start higher than end gets on range with start higher than end - gets on exclusive range with negative indices gets on exclusive range with negative indices - raises on too negative left bound raises on too negative left bound - does not cause overflow (#8494) does not cause overflow (#8494) - gets with start and count gets with start and count - raises on negative count on empty Array raises on negative count on empty Array - zeroes unused bits zeroes unused bits + performs with overlap right to left performs with overlap right to left + moves to union of pointers moves to union of pointers + maps_with_index! maps_with_index! + performs arithmetic with u32 performs arithmetic with u32 + does to_s does to_s + copy_to raises on negative count raises on negative count - gets with negative start gets with negative start - raises on index out of bounds with start and count raises on index out of bounds with start and count - gets on exclusive range gets on exclusive range -Signal - CHLD.ignore sets default Crystal child handler CHLD.ignore sets default Crystal child handler - ignores a signal ignores a signal - CHLD.trap is called after default Crystal child handler CHLD.trap is called after default Crystal child handler - allows chaining of signals allows chaining of signals - has constants required by C has constants required by C - runs a signal handler runs a signal handler - CHLD.reset removes previously set trap CHLD.reset removes previously set trap - CHLD.reset sets default Crystal child handler CHLD.reset sets default Crystal child handler -.__lshrti3 .__lshrti3 -Float - floor division // - preserves type of lhs preserves type of lhs - applies floor applies floor - .new - fallback overload fallback overload - String overload String overload - #next_float - does for f32 does for f32 - does for f64 does for f64 - ceil - assert assert - assert assert - assert assert - assert assert - assert assert - assert assert - fdiv - assert assert - assert assert - assert assert - assert assert + doesn't raise OverflowError on unsigned size and different target type doesn't raise OverflowError on unsigned size and different target type + performs performs + copies to union of pointers copies to union of pointers + memcmp assert assert - returns nil in <=> for NaN values (Float64) returns nil in <=> for NaN values (Float64) - does infinite? does infinite? - #abs #abs - does nan? does nan? - % - uses modulo behavior, not remainder behavior uses modulo behavior, not remainder behavior - floor + compares two pointers by address compares two pointers by address + does malloc with value does malloc with value + maps! maps! + maps_with_index!, with offset maps_with_index!, with offset + does ! does ! + does malloc with value from block does malloc with value from block + realloc + raises on negative count raises on negative count + move_from + performs with overlap right to left performs with overlap right to left + moves from union of pointers moves from union of pointers + performs with overlap left to right performs with overlap left to right + raises on negative count raises on negative count + does index with count does index with count + raises if mallocs negative size raises if mallocs negative size + copy_from + raises on negative count raises on negative count + copies from union of pointers copies from union of pointers + performs performs + copies/move with different types copies/move with different types + clear + clears with union clears with union + clears many clears many + clears one clears one + clones clones + shuffles! shuffles! + performs arithmetic with u64 performs arithmetic with u64 +BigRational Math + sqrt sqrt +NamedTuple + compares with other named tuple type compares with other named tuple type + #to_h + creates a hash creates a hash + creates an empty hash from an empty named tuple creates an empty hash from an empty named tuple + does keys does keys + compares with same named tuple type compares with same named tuple type + does has_key? with symbol does has_key? with symbol + merges with other named tuple merges with other named tuple + .[] with non-literal index + gets named tuple metaclass value with String key gets named tuple metaclass value with String key + raises missing key raises missing key + gets named tuple metaclass value with Symbol key gets named tuple metaclass value with Symbol key + #dig? + gets the value at given path given splat gets the value at given path given splat + returns nil if not found returns nil if not found + does map does map + does NamedTuple#from does NamedTuple#from + gets size gets size + does sorted_keys does sorted_keys + does has_key? with string does has_key? with string + dups dups + does empty does empty + does each does each + #[]? with non-literal index + gets named tuple value or nil with Symbol key gets named tuple value or nil with Symbol key + gets named tuple value or nil with String key gets named tuple value or nil with String key + does types does types + does each_with_index does each_with_index + #to_a + creates an array of key-value pairs creates an array of key-value pairs + preserves key type for empty named tuples preserves key type for empty named tuples + #dig + gets the value at given path given splat gets the value at given path given splat + raises KeyError if not found raises KeyError if not found + does to_s does to_s + .[]? with non-literal index + gets named tuple metaclass value or nil with Symbol key gets named tuple metaclass value or nil with Symbol key + gets named tuple metaclass value or nil with String key gets named tuple metaclass value or nil with String key + does each_value does each_value + compares with named tuple union (#5131) compares with named tuple union (#5131) + clones clones + does values does values + does NamedTuple.from does NamedTuple.from + computes a hash value computes a hash value + does NamedTuple.new, without type vars does NamedTuple.new, without type vars + #[] with non-literal index + raises missing key raises missing key + gets named tuple value with Symbol key gets named tuple value with Symbol key + gets named tuple value with String key gets named tuple value with String key + does NamedTuple.new, with hyphen in key does NamedTuple.new, with hyphen in key + does NamedTuple.new, with type vars does NamedTuple.new, with type vars + merges two empty named tuples merges two empty named tuples + does each_key does each_key +OpenSSL::SSL::Socket + OpenSSL::SSL::Socket::Server + doesn't accept client when specified doesn't accept client when specified + auto accept client by default auto accept client by default +LLVM::ABI::X86_Win64 + abi_info + does with packed struct containing unaligned fields (#9873) does with packed struct containing unaligned fields (#9873) + does with packed struct not containing unaligned fields does with packed struct not containing unaligned fields + does with structs between 64 and 128 bits does with structs between 64 and 128 bits + does with structs larger than 128 bits does with structs larger than 128 bits +Path + #parent + "/foo" (posix) "/foo" (posix) + "C:\foo" (windows) "C:\foo" (windows) + "foo\" (posix) "foo\" (posix) + "/." (posix) "/." (posix) + "C:/foo" (windows) "C:/foo" (windows) + "\Users/foo\bar.cr" (posix) "\Users/foo\bar.cr" (posix) + "./foo" (windows) "./foo" (windows) + "/foo/C:/bar" (posix) "/foo/C:/bar" (posix) + "\Users\foo\bar.cr" (windows) "\Users\foo\bar.cr" (windows) + "foo/bar/" (posix) "foo/bar/" (posix) + "foo//.//" (windows) "foo//.//" (windows) + "C:\" (posix) "C:\" (posix) + "/" (posix) "/" (posix) + "./foo" (posix) "./foo" (posix) + "C:/" (posix) "C:/" (posix) + "/" (windows) "/" (windows) + "foo" (posix) "foo" (posix) + ".\foo" (windows) ".\foo" (windows) + "/Users/foo/bar.cr" (posix) "/Users/foo/bar.cr" (posix) + "C:/" (windows) "C:/" (windows) + "foo\bar\." (windows) "foo\bar\." (windows) + "/foo" (windows) "/foo" (windows) + "Users/foo/bar.cr" (windows) "Users/foo/bar.cr" (windows) + "/foo/C:/bar" (windows) "/foo/C:/bar" (windows) + "foo\" (windows) "foo\" (windows) + "C:" (windows) "C:" (windows) + "foo\bar\" (posix) "foo\bar\" (posix) + "\Users\foo\bar.cr" (posix) "\Users\foo\bar.cr" (posix) + "foo/bar/." (posix) "foo/bar/." (posix) + "." (windows) "." (windows) + "/." (posix) "/." (posix) + "foo//.//" (posix) "foo//.//" (posix) + "foo/bar/.." (windows) "foo/bar/.." (windows) + "foo/bar/." (windows) "foo/bar/." (windows) + "" (windows) "" (windows) + "C:\" (windows) "C:\" (windows) + "foo\bar\.." (windows) "foo\bar\.." (windows) + "\Users/foo\bar.cr" (windows) "\Users/foo\bar.cr" (windows) + "foo" (windows) "foo" (windows) + "////" (windows) "////" (windows) + "\" (posix) "\" (posix) + "\." (posix) "\." (posix) + "C:\foo" (posix) "C:\foo" (posix) + "" (posix) "" (posix) + "foo\bar\." (posix) "foo\bar\." (posix) + "foo/" (windows) "foo/" (windows) + "/Users/foo/bar.cr" (windows) "/Users/foo/bar.cr" (windows) + "foo\bar\" (windows) "foo\bar\" (windows) + ".\foo" (posix) ".\foo" (posix) + "." (posix) "." (posix) + "C:" (posix) "C:" (posix) + "C:/foo" (posix) "C:/foo" (posix) + "foo/bar/" (windows) "foo/bar/" (windows) + "foo/bar/.." (posix) "foo/bar/.." (posix) + "Users/foo/bar.cr" (posix) "Users/foo/bar.cr" (posix) + "////" (posix) "////" (posix) + "/." (windows) "/." (windows) + "\" (windows) "\" (windows) + "foo/" (posix) "foo/" (posix) + "foo\bar\.." (posix) "foo\bar\.." (posix) + "/." (windows) "/." (windows) + "\." (windows) "\." (windows) + #== + simple simple + case sensitivity case sensitivity + .home + uses home from environment variable if set uses home from environment variable if set + doesn't return empty string if environment variable is empty doesn't return empty string if environment variable is empty + doesn't raise if environment variable is missing doesn't raise if environment variable is missing + #relative_to + mixed input paths mixed input paths + paths that can't be relativized paths that can't be relativized + relativizable paths relativizable paths + #to_windows + "foo/bar" (posix) "foo/bar" (posix) + ""*/:<>?\| " (posix) ""*/:<>?\| " (posix) + "C:\foo\bar" (posix) "C:\foo\bar" (posix) + default: mappings=true "C:\foo\bar" (windows) default: mappings=true "C:\foo\bar" (windows) + "C:\foo\bar" (windows) "C:\foo\bar" (windows) + "C:\foo\bar" (posix) "C:\foo\bar" (posix) + ""*/:<>?\| " (posix) ""*/:<>?\| " (posix) + "C:\foo\bar" (windows) "C:\foo\bar" (windows) + default: mappings=true "C:\foo\bar" (posix) default: mappings=true "C:\foo\bar" (posix) + ""*/:<>?\| " (windows) ""*/:<>?\| " (windows) + "foo/bar" (windows) "foo/bar" (windows) + ""*/:<>?\| " (windows) ""*/:<>?\| " (windows) + "foo/bar" (windows) "foo/bar" (windows) + "foo/bar" (posix) "foo/bar" (posix) + #drive + "\\_.-~!$;=&'()*+,aB1\ !-.@^_`{}~#$%&'()aB1\" (posix) "\\_.-~!$;=&'()*+,aB1\ !-.@^_`{}~#$%&'()aB1\" (posix) + "\\not-a\\share" (windows) "\\not-a\\share" (windows) + "//foo" (posix) "//foo" (posix) + "\\127.0.0.1\share\" (posix) "\\127.0.0.1\share\" (posix) + "\\%10%20\share\" (posix) "\\%10%20\share\" (posix) + "///not-a/share/" (posix) "///not-a/share/" (posix) + "///not-a/share/" (windows) "///not-a/share/" (windows) + "/not-a//share/" (windows) "/not-a//share/" (windows) + "\\%10%20\share\" (windows) "\\%10%20\share\" (windows) + "//some/share/foo/" (posix) "//some/share/foo/" (posix) + "\\\not-a\share" (windows) "\\\not-a\share" (windows) + "C:foo" (posix) "C:foo" (posix) + "/foo" (windows) "/foo" (windows) + "//some/share/" (posix) "//some/share/" (posix) + "\\some\share" (windows) "\\some\share" (windows) + "C:/foo" (posix) "C:/foo" (posix) + "\\127.0.0.1\share\" (windows) "\\127.0.0.1\share\" (windows) + "\\some\share\" (windows) "\\some\share\" (windows) + "\\some\share" (posix) "\\some\share" (posix) + "C:\foo" (windows) "C:\foo" (windows) + "\\some$\share\" (windows) "\\some$\share\" (windows) + "//some/share/" (windows) "//some/share/" (windows) + "//foo" (windows) "//foo" (windows) + "//some/share" (posix) "//some/share" (posix) + "\\some\share\" (posix) "\\some\share\" (posix) + "C:foo" (windows) "C:foo" (windows) + "C:\foo" (posix) "C:\foo" (posix) + "C:/foo" (windows) "C:/foo" (windows) + "\\_.-~!$;=&'()*+,aB1\ !-.@^_`{}~#$%&'()aB1\" (windows) "\\_.-~!$;=&'()*+,aB1\ !-.@^_`{}~#$%&'()aB1\" (windows) + "\\not-a\\share" (posix) "\\not-a\\share" (posix) + "\\some\share\foo" (windows) "\\some\share\foo" (windows) + "//some/share" (windows) "//some/share" (windows) + "/foo" (posix) "/foo" (posix) + "\\some$\share\" (posix) "\\some$\share\" (posix) + "\\\not-a\share" (posix) "\\\not-a\share" (posix) + "\\some\share\foo" (posix) "\\some\share\foo" (posix) + "//some/share/foo/" (windows) "//some/share/foo/" (windows) + "/not-a//share/" (posix) "/not-a//share/" (posix) + #anchor + "C:foo" (windows) "C:foo" (windows) + "C:/foo" (posix) "C:/foo" (posix) + "C:\foo" (windows) "C:\foo" (windows) + "\foo" (posix) "\foo" (posix) + "\\some\share" (posix) "\\some\share" (posix) + "//some/share/" (posix) "//some/share/" (posix) + "\\some\share\" (windows) "\\some\share\" (windows) + "/foo" (posix) "/foo" (posix) + "C:foo" (posix) "C:foo" (posix) + "//some/share" (windows) "//some/share" (windows) + "\foo" (windows) "\foo" (windows) + "/foo" (windows) "/foo" (windows) + "C:/foo" (windows) "C:/foo" (windows) + "//some/share/" (windows) "//some/share/" (windows) + "\\some\share" (windows) "\\some\share" (windows) + "C:\foo" (posix) "C:\foo" (posix) + "\\some\share\" (posix) "\\some\share\" (posix) + "//some/share" (posix) "//some/share" (posix) + #basename + "a/x" (posix) "a/x" (posix) + "a/.x" (posix) "a/.x" (posix) + "////" (posix) "////" (posix) + "/foo/" (windows) "/foo/" (windows) + "" (windows) "" (windows) + "\" (posix) "\" (posix) + "\." (posix) "\." (posix) + "/." (posix) "/." (posix) + "\foo\bar\baz.cr" (windows) "\foo\bar\baz.cr" (windows) + removes suffix + "/foo/bar/baz.cr.tmp" (windows) "/foo/bar/baz.cr.tmp" (windows) + "\foo\bar\baz.cr" (windows) "\foo\bar\baz.cr" (windows) + "\foo/bar\baz.cr" (windows) "\foo/bar\baz.cr" (windows) + "/foo/bar/baz.cr.tmp" (windows) "/foo/bar/baz.cr.tmp" (windows) + "/foo/bar/baz.cr.tmp" (posix) "/foo/bar/baz.cr.tmp" (posix) + "\foo\bar\baz.cr" (posix) "\foo\bar\baz.cr" (posix) + "/foo/bar/baz.cr" (posix) "/foo/bar/baz.cr" (posix) + "a.x" (windows) "a.x" (windows) + "/foo/bar/baz.cr.tmp" (posix) "/foo/bar/baz.cr.tmp" (posix) + "/foo/bar/baz.cr" (windows) "/foo/bar/baz.cr" (windows) + "\foo\bar\baz.cr.tmp" (posix) "\foo\bar\baz.cr.tmp" (posix) + "\foo\bar\baz.cr.tmp" (windows) "\foo\bar\baz.cr.tmp" (windows) + "/foo/bar/baz.cr.tmp" (posix) "/foo/bar/baz.cr.tmp" (posix) + "\foo/bar\baz.cr" (posix) "\foo/bar\baz.cr" (posix) + "/foo/bar/baz.cr.tmp" (windows) "/foo/bar/baz.cr.tmp" (windows) + "a.x" (posix) "a.x" (posix) + "a.txt" (posix) "a.txt" (posix) + "\foo\bar\baz.cr.tmp" (windows) "\foo\bar\baz.cr.tmp" (windows) + "\foo\bar\baz.cr.tmp" (posix) "\foo\bar\baz.cr.tmp" (posix) + "\foo\bar\baz.cr.tmp" (posix) "\foo\bar\baz.cr.tmp" (posix) + "\foo\bar\baz.cr.tmp" (windows) "\foo\bar\baz.cr.tmp" (windows) + "a.txt" (windows) "a.txt" (windows) + "a/x." (posix) "a/x." (posix) + "/foo/" (posix) "/foo/" (posix) + "/foo/bar/baz.cr" (windows) "/foo/bar/baz.cr" (windows) + "foo" (posix) "foo" (posix) + "a/x" (windows) "a/x" (windows) + "\." (windows) "\." (windows) + "." (posix) "." (posix) + "/" (windows) "/" (windows) + "\foo\" (posix) "\foo\" (posix) + "x" (windows) "x" (windows) + "////" (windows) "////" (windows) + "a/.x" (windows) "a/.x" (windows) + "foo" (windows) "foo" (windows) + "/foo/bar/baz.cr" (posix) "/foo/bar/baz.cr" (posix) + "/" (posix) "/" (posix) + "x" (posix) "x" (posix) + "/." (windows) "/." (windows) + "." (windows) "." (windows) + "\foo\bar\baz.cr" (posix) "\foo\bar\baz.cr" (posix) + "\" (windows) "\" (windows) + "\foo\" (windows) "\foo\" (windows) + "a/x." (windows) "a/x." (windows) + "" (posix) "" (posix) + #to_posix + default: mappings=true "Cfoobar" (windows) default: mappings=true "Cfoobar" (windows) + "C:\foo\bar" (windows) "C:\foo\bar" (windows) + default: mappings=true "Cfoobar" (posix) default: mappings=true "Cfoobar" (posix) + "/" (posix) "/" (posix) + "/" (windows) "/" (windows) + "Cfoobar" (posix) "Cfoobar" (posix) + "C:\foo\bar" (posix) "C:\foo\bar" (posix) + "Cfoobar" (windows) "Cfoobar" (windows) + "Cfoobar" (windows) "Cfoobar" (windows) + "/" (posix) "/" (posix) + "foo/bar" (posix) "foo/bar" (posix) + "foo/bar" (windows) "foo/bar" (windows) + "foo/bar" (posix) "foo/bar" (posix) + "C:\foo\bar" (posix) "C:\foo\bar" (posix) + "Cfoobar" (posix) "Cfoobar" (posix) + "foo/bar" (windows) "foo/bar" (windows) + "C:\foo\bar" (windows) "C:\foo\bar" (windows) + "/" (windows) "/" (windows) + .[] .[] + .posix assert assert assert assert - converts infinity converts infinity - remainder assert assert + joins components joins components + fails with null byte fails with null byte assert assert + .new assert assert - preserves type preserves type + fails with null byte fails with null byte assert assert assert assert + joins components joins components + #expand + expands a path with multi-byte characters + (base: "") "Ångström" (posix) (base: "") "Ångström" (posix) + (base: "") "Ångström" (windows) (base: "") "Ångström" (windows) + converts a pathname to an absolute pathname, using ~ (home) as base (trailing /) + (base: "/tmp/gumby/ddd") "~/a" (posix) (base: "/tmp/gumby/ddd") "~/a" (posix) + (base: "") "~" (posix) (base: "") "~" (posix) + (base: "/tmp/gumby/ddd") "~/a" (windows) (base: "/tmp/gumby/ddd") "~/a" (windows) + (base: "") "~/..badfilename" (posix) (base: "") "~/..badfilename" (posix) + (base: "~/b") "~/a" (posix) (base: "~/b") "~/a" (posix) + (base: "") "~/.." (windows) (base: "") "~/.." (windows) + (base: "") "~/..badfilename" (windows) (base: "") "~/..badfilename" (windows) + (base: "/tmp/gumby/ddd") "~" (windows) (base: "/tmp/gumby/ddd") "~" (windows) + (base: "~/b") "~/a" (windows) (base: "~/b") "~/a" (windows) + (base: "") "~" (windows) (base: "") "~" (windows) + (base: "/tmp/gumby/ddd") "~" (posix) (base: "/tmp/gumby/ddd") "~" (posix) + (base: "") "~/" (windows) (base: "") "~/" (windows) + (base: "") "~/.." (posix) (base: "") "~/.." (posix) + (base: "") "~/" (posix) (base: "") "~/" (posix) + keeps trailing dots on absolute pathname + (base: "") "a.." (posix) (base: "") "a.." (posix) + (base: "") "a.." (windows) (base: "") "a.." (windows) + (base: "") "a." (posix) (base: "") "a." (posix) + (base: "") "a." (windows) (base: "") "a." (windows) + ignores name starting with ~ + (base: "/current") "~foo.txt" (posix) (base: "/current") "~foo.txt" (posix) + (base: "/current") "~foo.txt" (windows) (base: "/current") "~foo.txt" (windows) + expands /./dir to /dir + (base: "/") "/./dir" (posix) (base: "/") "/./dir" (posix) + (base: "/") "/./dir" (windows) (base: "/") "/./dir" (windows) + converts a pathname to an absolute pathname + (base: "") "a" (windows) (base: "") "a" (windows) + (base: "") "" (posix) (base: "") "" (posix) + (base: "") "a" (windows) (base: "") "a" (windows) + (base: "") "a" (posix) (base: "") "a" (posix) + (base: "") "" (windows) (base: "") "" (windows) + (base: "") "a" (posix) (base: "") "a" (posix) + UNC path + (base: "\\foo\bar\") "baz" (posix) (base: "\\foo\bar\") "baz" (posix) + (base: "\\foo\bar\") "baz" (windows) (base: "\\foo\bar\") "baz" (windows) + (base: "\\foo$\bar\") "baz" (posix) (base: "\\foo$\bar\") "baz" (posix) + (base: "\\foo$\bar\") "baz" (windows) (base: "\\foo$\bar\") "baz" (windows) + expand path with .. + (base: "/tmp") "../../bin" (windows) (base: "/tmp") "../../bin" (windows) + (base: "x/../tmp") "../bin" (windows) (base: "x/../tmp") "../bin" (windows) + (base: "tmp/x") "../bin" (windows) (base: "tmp/x") "../bin" (windows) + (base: "/") "../../bin" (posix) (base: "/") "../../bin" (posix) + (base: "/tmp/x") "../../bin" (windows) (base: "/tmp/x") "../../bin" (windows) + (base: "/tmp/x") "../../bin" (posix) (base: "/tmp/x") "../../bin" (posix) + (base: "x/../tmp") "../bin" (posix) (base: "x/../tmp") "../bin" (posix) + (base: "tmp/x") "../bin" (posix) (base: "tmp/x") "../bin" (posix) + (base: "/") "../../bin" (windows) (base: "/") "../../bin" (windows) + (base: "/tmp") "../../bin" (posix) (base: "/tmp") "../../bin" (posix) + expand_path for common unix path gives a full path + (base: "") "/tmp/" (windows) (base: "") "/tmp/" (windows) + (base: "") "." (windows) (base: "") "." (windows) + (base: "") "/tmp/" (posix) (base: "") "/tmp/" (posix) + (base: "") "." (posix) (base: "") "." (posix) + (base: "") "/default/base" (windows) (base: "") "/default/base" (windows) + (base: "") "/default/base" (posix) (base: "") "/default/base" (posix) + (base: "") "" (posix) (base: "") "" (posix) + (base: "") "./////" (windows) (base: "") "./////" (windows) + (base: "") "" (windows) (base: "") "" (windows) + (base: "") "/tmp/../../../tmp" (windows) (base: "") "/tmp/../../../tmp" (windows) + (base: "") "./////" (posix) (base: "") "./////" (posix) + (base: "") "/tmp/../../../tmp" (posix) (base: "") "/tmp/../../../tmp" (posix) + converts a pathname to an absolute pathname, using ~ (home) as base (HOME=/) + (base: "") "~/..badfilename" (windows) (base: "") "~/..badfilename" (windows) + (base: "") ".." (windows) (base: "") ".." (windows) + (base: "/tmp/gumby/ddd") "~" (windows) (base: "/tmp/gumby/ddd") "~" (windows) + (base: "/tmp/gumby/ddd") "~/a" (windows) (base: "/tmp/gumby/ddd") "~/a" (windows) + (base: "") "~/..badfilename" (posix) (base: "") "~/..badfilename" (posix) + (base: "") "~/" (posix) (base: "") "~/" (posix) + (base: "~/b") "~/a" (windows) (base: "~/b") "~/a" (windows) + (base: "/tmp/gumby/ddd") "~/a" (posix) (base: "/tmp/gumby/ddd") "~/a" (posix) + (base: "/tmp/gumby/ddd") "~" (posix) (base: "/tmp/gumby/ddd") "~" (posix) + (base: "~/b") "~/a" (posix) (base: "~/b") "~/a" (posix) + (base: "") ".." (posix) (base: "") ".." (posix) + (base: "") "~" (posix) (base: "") "~" (posix) + (base: "") "~/" (windows) (base: "") "~/" (windows) + (base: "") "~" (windows) (base: "") "~" (windows) + supports ~\ for Windows paths only + (base: "") "~\a" (windows) (base: "") "~\a" (windows) + (base: "") "~\a" (posix) (base: "") "~\a" (posix) + checks all possible types for expand(home:) + (base: "") "~/a" (posix) (base: "") "~/a" (posix) + (base: "") "~/a" (posix) (base: "") "~/a" (posix) + (base: "") "~/a" (posix) (base: "") "~/a" (posix) + (base: "") "~/a" (windows) (base: "") "~/a" (windows) + (base: "") "~/a" (windows) (base: "") "~/a" (windows) + (base: "") "~/a" (windows) (base: "") "~/a" (windows) + replaces multiple / with a single / + (base: "") "////some/path" (posix) (base: "") "////some/path" (posix) + (base: "") "/some////path" (posix) (base: "") "/some////path" (posix) + (base: "") "//some/path" (windows) (base: "") "//some/path" (windows) + (base: "") "////some/path" (windows) (base: "") "////some/path" (windows) + (base: "") "/some////path" (windows) (base: "") "/some////path" (windows) + (base: "") "//some/path" (posix) (base: "") "//some/path" (posix) + converts a pathname to an absolute pathname, using ~ (home) as base + (base: "") "~" (windows) (base: "") "~" (windows) + (base: "/tmp/gumby/ddd") "~/a" (posix) (base: "/tmp/gumby/ddd") "~/a" (posix) + (base: "") "~/..badfilename" (windows) (base: "") "~/..badfilename" (windows) + (base: "/tmp/gumby/ddd") "~" (posix) (base: "/tmp/gumby/ddd") "~" (posix) + (base: "~/b") "~/a" (windows) (base: "~/b") "~/a" (windows) + (base: "") "~/..badfilename" (posix) (base: "") "~/..badfilename" (posix) + (base: "") "~" (posix) (base: "") "~" (posix) + (base: "") "~/" (posix) (base: "") "~/" (posix) + (base: "~/b") "~/a" (posix) (base: "~/b") "~/a" (posix) + (base: "") ".." (windows) (base: "") ".." (windows) + (base: "") ".." (posix) (base: "") ".." (posix) + (base: "") "~/" (windows) (base: "") "~/" (windows) + (base: "/tmp/gumby/ddd") "~" (windows) (base: "/tmp/gumby/ddd") "~" (windows) + (base: "/tmp/gumby/ddd") "~/a" (windows) (base: "/tmp/gumby/ddd") "~/a" (windows) + converts a pathname to an absolute pathname, using a complete path + (base: "C:\tmp") "a" (posix) (base: "C:\tmp") "a" (posix) + (base: "C:\tmp") "" (windows) (base: "C:\tmp") "" (windows) + (base: "C:\tmp\xxx") "../a" (windows) (base: "C:\tmp\xxx") "../a" (windows) + (base: "C:\tmp") "" (posix) (base: "C:\tmp") "" (posix) + (base: "/tmp") "a" (posix) (base: "/tmp") "a" (posix) + (base: "C:\tmp\xxx") "../a" (posix) (base: "C:\tmp\xxx") "../a" (posix) + assert assert + (base: "/") "." (posix) (base: "/") "." (posix) + (base: "/tmp") "" (posix) (base: "/tmp") "" (posix) + (base: "C:\tmp\xxx") "../a" (windows) (base: "C:\tmp\xxx") "../a" (windows) + (base: "/tmp") "" (windows) (base: "/tmp") "" (windows) + (base: "/tmp/xxx") "../a" (posix) (base: "/tmp/xxx") "../a" (posix) + (base: "C:\tmp") "a" (windows) (base: "C:\tmp") "a" (windows) + (base: "/tmp/xxx") "../a" (windows) (base: "/tmp/xxx") "../a" (windows) + (base: "/tmp/xxx") "../a" (windows) (base: "/tmp/xxx") "../a" (windows) + (base: "/") "." (windows) (base: "/") "." (windows) + (base: "/tmp/xxx") "../a" (posix) (base: "/tmp/xxx") "../a" (posix) + (base: "/tmp") "a" (windows) (base: "/tmp") "a" (windows) + (base: "C:\tmp\xxx") "../a" (posix) (base: "C:\tmp\xxx") "../a" (posix) + with drive + (base: "D:\") "foo" (windows) (base: "D:\") "foo" (windows) + (base: "D:\") "C:\foo" (posix) (base: "D:\") "C:\foo" (posix) + (base: "D:\") "C:\" (windows) (base: "D:\") "C:\" (windows) + (base: "D:\") "C:/foo" (posix) (base: "D:\") "C:/foo" (posix) + (base: "D:\") "C:\" (windows) (base: "D:\") "C:\" (windows) + (base: "D:") "foo" (posix) (base: "D:") "foo" (posix) + (base: "D:") "C:" (windows) (base: "D:") "C:" (windows) + (base: "D:\") "C:foo" (windows) (base: "D:\") "C:foo" (windows) + (base: "D:\") "C:\" (posix) (base: "D:\") "C:\" (posix) + (base: "D:/") "/foo" (posix) (base: "D:/") "/foo" (posix) + (base: "D:\") "/foo" (windows) (base: "D:\") "/foo" (windows) + (base: "D:/") "C:\foo" (windows) (base: "D:/") "C:\foo" (windows) + (base: "D:") "\foo" (windows) (base: "D:") "\foo" (windows) + (base: "D:/") "foo" (windows) (base: "D:/") "foo" (windows) + (base: "D:\") "C:\foo" (windows) (base: "D:\") "C:\foo" (windows) + (base: "D:\") "C:\foo" (windows) (base: "D:\") "C:\foo" (windows) + (base: "D:/") "C:\" (windows) (base: "D:/") "C:\" (windows) + (base: "D:\") "\foo" (windows) (base: "D:\") "\foo" (windows) + (base: "D:") "C:/" (windows) (base: "D:") "C:/" (windows) + (base: "D:") "C:foo" (windows) (base: "D:") "C:foo" (windows) + (base: "D:\") "foo" (windows) (base: "D:\") "foo" (windows) + (base: "D:\") "C:foo" (posix) (base: "D:\") "C:foo" (posix) + (base: "D:") "C:/" (posix) (base: "D:") "C:/" (posix) + (base: "D:") "/foo" (posix) (base: "D:") "/foo" (posix) + (base: "D:/") "C:/" (windows) (base: "D:/") "C:/" (windows) + (base: "D:\") "C:/" (windows) (base: "D:\") "C:/" (windows) + (base: "D:\") "C:foo" (posix) (base: "D:\") "C:foo" (posix) + (base: "D:\") "C:/" (windows) (base: "D:\") "C:/" (windows) + (base: "D:") "C:/foo" (windows) (base: "D:") "C:/foo" (windows) + (base: "D:\") "C:/foo" (windows) (base: "D:\") "C:/foo" (windows) + (base: "D:\") "/foo" (posix) (base: "D:\") "/foo" (posix) + (base: "D:/") "C:/foo" (windows) (base: "D:/") "C:/foo" (windows) + (base: "D:\") "C:/" (posix) (base: "D:\") "C:/" (posix) + (base: "D:/") "\foo" (posix) (base: "D:/") "\foo" (posix) + (base: "D:") "\foo" (posix) (base: "D:") "\foo" (posix) + (base: "D:/") "C:" (posix) (base: "D:/") "C:" (posix) + (base: "D:/") "C:\foo" (posix) (base: "D:/") "C:\foo" (posix) + (base: "D:") "C:\" (windows) (base: "D:") "C:\" (windows) + (base: "D:\") "C:/" (posix) (base: "D:\") "C:/" (posix) + (base: "D:/") "C:/foo" (posix) (base: "D:/") "C:/foo" (posix) + (base: "D:") "C:/foo" (posix) (base: "D:") "C:/foo" (posix) + (base: "D:\") "C:foo" (windows) (base: "D:\") "C:foo" (windows) + (base: "D:") "C:\foo" (windows) (base: "D:") "C:\foo" (windows) + (base: "D:/") "C:/" (posix) (base: "D:/") "C:/" (posix) + (base: "D:") "C:\" (posix) (base: "D:") "C:\" (posix) + (base: "D:\") "foo" (posix) (base: "D:\") "foo" (posix) + (base: "D:\") "C:\" (posix) (base: "D:\") "C:\" (posix) + (base: "D:/") "C:foo" (posix) (base: "D:/") "C:foo" (posix) + (base: "D:/") "C:" (windows) (base: "D:/") "C:" (windows) + (base: "D:/") "C:foo" (windows) (base: "D:/") "C:foo" (windows) + (base: "D:") "C:\foo" (posix) (base: "D:") "C:\foo" (posix) + (base: "D:\") "C:" (posix) (base: "D:\") "C:" (posix) + (base: "D:\") "C:\foo" (posix) (base: "D:\") "C:\foo" (posix) + (base: "D:\") "\foo" (windows) (base: "D:\") "\foo" (windows) + (base: "D:\") "\foo" (posix) (base: "D:\") "\foo" (posix) + (base: "D:\") "\foo" (posix) (base: "D:\") "\foo" (posix) + (base: "D:") "C:foo" (posix) (base: "D:") "C:foo" (posix) + (base: "D:") "foo" (windows) (base: "D:") "foo" (windows) + (base: "D:\") "C:/foo" (windows) (base: "D:\") "C:/foo" (windows) + (base: "D:\") "C:" (windows) (base: "D:\") "C:" (windows) + (base: "D:\") "C:" (windows) (base: "D:\") "C:" (windows) + (base: "D:\") "foo" (posix) (base: "D:\") "foo" (posix) + (base: "D:/") "C:\" (posix) (base: "D:/") "C:\" (posix) + (base: "D:/") "foo" (posix) (base: "D:/") "foo" (posix) + (base: "D:") "C:" (posix) (base: "D:") "C:" (posix) + (base: "D:\") "C:/foo" (posix) (base: "D:\") "C:/foo" (posix) + (base: "D:/") "\foo" (windows) (base: "D:/") "\foo" (windows) + (base: "D:/") "/foo" (windows) (base: "D:/") "/foo" (windows) + (base: "D:") "/foo" (windows) (base: "D:") "/foo" (windows) + (base: "D:\") "C:" (posix) (base: "D:\") "C:" (posix) + doesn't expand ~ doesn't expand ~ + converts a pathname to an absolute pathname, Ruby-Talk:18512 + (base: "") ".a" (windows) (base: "") ".a" (windows) + (base: "") "a../b" (windows) (base: "") "a../b" (windows) + (base: "") "..a" (posix) (base: "") "..a" (posix) + (base: "") "..a" (windows) (base: "") "..a" (windows) + (base: "") ".a" (posix) (base: "") ".a" (posix) + (base: "") "a../b" (posix) (base: "") "a../b" (posix) + #absolute? + "C:/" (windows) "C:/" (windows) + "foo" (posix) "foo" (posix) + "foo" (windows) "foo" (windows) + "\\some\share" (posix) "\\some\share" (posix) + "C:" (posix) "C:" (posix) + "C:" (windows) "C:" (windows) + "./foo" (posix) "./foo" (posix) + "c:\\" (windows) "c:\\" (windows) + "//some/share/" (windows) "//some/share/" (windows) + "C:/foo/bar" (posix) "C:/foo/bar" (posix) + "\foo" (posix) "\foo" (posix) + "C:/" (posix) "C:/" (posix) + "/foo" (windows) "/foo" (windows) + "\\some\share" (windows) "\\some\share" (windows) + "C:\foo" (windows) "C:\foo" (windows) + "c:\\" (posix) "c:\\" (posix) + "foo" (windows) "foo" (windows) + "/foo" (posix) "/foo" (posix) + "foo" (posix) "foo" (posix) + "/./foo" (windows) "/./foo" (windows) + "./foo" (windows) "./foo" (windows) + "C:/foo" (posix) "C:/foo" (posix) + "\.\foo" (posix) "\.\foo" (posix) + "\\some\share\" (posix) "\\some\share\" (posix) + "\.\foo" (windows) "\.\foo" (windows) + "C:/foo" (windows) "C:/foo" (windows) + "//some/share" (windows) "//some/share" (windows) + "~\foo" (posix) "~\foo" (posix) + "C:\" (posix) "C:\" (posix) + "~/foo" (windows) "~/foo" (windows) + "C:/foo/bar" (windows) "C:/foo/bar" (windows) + "\foo" (windows) "\foo" (windows) + "C:\" (windows) "C:\" (windows) + ".\foo" (posix) ".\foo" (posix) + "\\some\share\" (windows) "\\some\share\" (windows) + "//some/share/" (posix) "//some/share/" (posix) + ".\foo" (windows) ".\foo" (windows) + "/./foo" (posix) "/./foo" (posix) + "~/foo" (posix) "~/foo" (posix) + "~\foo" (windows) "~\foo" (windows) + "C:\foo" (posix) "C:\foo" (posix) + "//some/share" (posix) "//some/share" (posix) + #join + resolving "/a" "" (posix) resolving "/a" "" (posix) + resolving "bar/baz" "foo" (posix) resolving "bar/baz" "foo" (posix) + resolving "{"bar", "baz"}" "foo" (windows) resolving "{"bar", "baz"}" "foo" (windows) + resolving ["/"] "" (windows) resolving ["/"] "" (windows) + resolving "{"/", "bar"}" "foo" (posix) resolving "{"/", "bar"}" "foo" (posix) + resolving ["bar\baz"] "foo" (posix) resolving ["bar\baz"] "foo" (posix) + resolving ["a"].each "/" (posix) resolving ["a"].each "/" (posix) + resolving ["bar"] "\\\\foo" (posix) resolving ["bar"] "\\\\foo" (posix) + resolving [""] "/" (windows) resolving [""] "/" (windows) + resolving ["\"].each "foo" (windows) resolving ["\"].each "foo" (windows) + resolving ["Program Files"].each "c:" (windows) resolving ["Program Files"].each "c:" (windows) + resolving ["\"] "foo" (windows) resolving ["\"] "foo" (windows) + resolving ["/bar"] "/foo/" (posix) resolving ["/bar"] "/foo/" (posix) + resolving ["Program Files"].each "c:\" (posix) resolving ["Program Files"].each "c:\" (posix) + resolving "Program Files" "c:/" (windows) resolving "Program Files" "c:/" (windows) + resolving "//bar" "///foo" (windows) resolving "//bar" "///foo" (windows) + resolving ["a"] "/" (posix) resolving ["a"] "/" (posix) + resolving "{"\\", "bar"}" "foo" (windows) resolving "{"\\", "bar"}" "foo" (windows) + resolving "a" "" (posix) resolving "a" "" (posix) + resolving ["//bar"] "///foo" (posix) resolving ["//bar"] "///foo" (posix) + resolving ["/bar"] "/foo/" (windows) resolving ["/bar"] "/foo/" (windows) + resolving "{"bar", ""}" "foo" (posix) resolving "{"bar", ""}" "foo" (posix) + resolving "\" "foo" (windows) resolving "\" "foo" (windows) + resolving "\\bar" "\\\foo" (windows) resolving "\\bar" "\\\foo" (windows) + resolving ["a"].each "/" (windows) resolving ["a"].each "/" (windows) + resolving "Program Files" "c:\" (windows) resolving "Program Files" "c:\" (windows) + resolving ["bar\baz"].each "foo" (windows) resolving ["bar\baz"].each "foo" (windows) + resolving "{"/", "bar"}" "foo" (windows) resolving "{"/", "bar"}" "foo" (windows) + resolving [""].each "/" (windows) resolving [""].each "/" (windows) + resolving ["//bar"] "///foo" (windows) resolving ["//bar"] "///foo" (windows) + resolving ["Program Files"].each "c:\" (windows) resolving ["Program Files"].each "c:\" (windows) + resolving "a" "/" (posix) resolving "a" "/" (posix) + resolving ["bar/baz"].each "foo" (windows) resolving ["bar/baz"].each "foo" (windows) + resolving ["bar"] "\\\\foo" (windows) resolving ["bar"] "\\\\foo" (windows) + resolving ["/a"].each "" (windows) resolving ["/a"].each "" (windows) + resolving "bar\baz" "foo" (windows) resolving "bar\baz" "foo" (windows) + resolving [""].each "" (posix) resolving [""].each "" (posix) + resolving "/bar" "/foo/" (posix) resolving "/bar" "/foo/" (posix) + resolving ["bar"].each "\\\\foo" (posix) resolving ["bar"].each "\\\\foo" (posix) + resolving "a" "\" (windows) resolving "a" "\" (windows) + resolving "bar\baz" "foo" (windows) resolving "bar\baz" "foo" (windows) + resolving "\a" "" (posix) resolving "\a" "" (posix) + resolving "{"/bar/", "/baz/"}" "/foo/" (posix) resolving "{"/bar/", "/baz/"}" "/foo/" (posix) + resolving ["a"].each "\" (windows) resolving ["a"].each "\" (windows) + resolving "{"\\", "\\", "bar"}" "foo" (posix) resolving "{"\\", "\\", "bar"}" "foo" (posix) + resolving ["/"].each "foo" (posix) resolving ["/"].each "foo" (posix) + resolving [""] "" (posix) resolving [""] "" (posix) + resolving "bar\baz" "foo" (posix) resolving "bar\baz" "foo" (posix) + resolving "{"\\foo", "\\", "bar\\", "\\"}" "\" (posix) resolving "{"\\foo", "\\", "bar\\", "\\"}" "\" (posix) + resolving "{"\\\\bar\\\\", "baz\\\\\\"}" "foo" (windows) resolving "{"\\\\bar\\\\", "baz\\\\\\"}" "foo" (windows) + resolving ["/"].each "foo" (windows) resolving ["/"].each "foo" (windows) + resolving ["\\bar"] "\\\foo" (posix) resolving ["\\bar"] "\\\foo" (posix) + resolving ["a"] "" (windows) resolving ["a"] "" (windows) + resolving ["\a"].each "" (posix) resolving ["\a"].each "" (posix) + resolving ["Program Files"] "c:/" (posix) resolving ["Program Files"] "c:/" (posix) + resolving ["/"] "foo" (windows) resolving ["/"] "foo" (windows) + resolving ["\a"].each "" (windows) resolving ["\a"].each "" (windows) + resolving ["a"].each "" (windows) resolving ["a"].each "" (windows) + resolving "{"bar", "baz"}" "foo" (posix) resolving "{"bar", "baz"}" "foo" (posix) + resolving "/a" "" (windows) resolving "/a" "" (windows) + resolving "{"/", "/", "bar"}" "foo" (posix) resolving "{"/", "/", "bar"}" "foo" (posix) + resolving "" "" (posix) resolving "" "" (posix) + resolving "bar" "\\\\foo" (posix) resolving "bar" "\\\\foo" (posix) + resolving "{"\\foo", "\\", "bar\\", "\\"}" "\" (windows) resolving "{"\\foo", "\\", "bar\\", "\\"}" "\" (windows) + resolving ["/"].each "" (windows) resolving ["/"].each "" (windows) + resolving ["bar"].each "///foo" (posix) resolving ["bar"].each "///foo" (posix) + resolving ["bar/baz"] "foo" (windows) resolving ["bar/baz"] "foo" (windows) + resolving "{"//bar//", "baz///"}" "foo" (windows) resolving "{"//bar//", "baz///"}" "foo" (windows) + resolving ["Program Files"].each "c:/" (posix) resolving ["Program Files"].each "c:/" (posix) + resolving "Program Files" "c:" (windows) resolving "Program Files" "c:" (windows) + resolving "bar" "///foo" (posix) resolving "bar" "///foo" (posix) + resolving "" "" (windows) resolving "" "" (windows) + resolving "{"/bar/", "/baz/"}" "/foo/" (windows) resolving "{"/bar/", "/baz/"}" "/foo/" (windows) + resolving "a" "\" (posix) resolving "a" "\" (posix) + resolving "/" "" (posix) resolving "/" "" (posix) + resolving ["Program Files"] "c:\" (windows) resolving ["Program Files"] "c:\" (windows) + resolving ["/a"] "" (windows) resolving ["/a"] "" (windows) + resolving ["bar"] "///foo" (posix) resolving ["bar"] "///foo" (posix) + resolving "/bar" "/foo/" (windows) resolving "/bar" "/foo/" (windows) + resolving ["a"] "\" (posix) resolving ["a"] "\" (posix) + resolving ["a"] "\" (windows) resolving ["a"] "\" (windows) + resolving ["/"] "" (posix) resolving ["/"] "" (posix) + resolving "a" "/" (windows) resolving "a" "/" (windows) + resolving "{"/foo", "/", "bar/", "/"}" "/" (posix) resolving "{"/foo", "/", "bar/", "/"}" "/" (posix) + resolving ["\bar"].each "\foo\" (posix) resolving ["\bar"].each "\foo\" (posix) + resolving [""] "/" (posix) resolving [""] "/" (posix) + resolving ["a"].each "" (posix) resolving ["a"].each "" (posix) + resolving "{"/", "/", "bar"}" "foo" (windows) resolving "{"/", "/", "bar"}" "foo" (windows) + resolving "bar\baz" "foo" (posix) resolving "bar\baz" "foo" (posix) + resolving ["//bar"].each "///foo" (windows) resolving ["//bar"].each "///foo" (windows) + resolving "a" "" (windows) resolving "a" "" (windows) + resolving ["\\bar"] "\\\foo" (windows) resolving ["\\bar"] "\\\foo" (windows) + resolving "{"\\\\bar\\\\", "baz\\\\\\"}" "foo" (posix) resolving "{"\\\\bar\\\\", "baz\\\\\\"}" "foo" (posix) + resolving ["Program Files"].each "c:/" (windows) resolving ["Program Files"].each "c:/" (windows) + resolving ["\"].each "foo" (posix) resolving ["\"].each "foo" (posix) + resolving ["\bar"] "\foo\" (posix) resolving ["\bar"] "\foo\" (posix) + resolving ["bar/baz"].each "foo" (posix) resolving ["bar/baz"].each "foo" (posix) + resolving ["\a"] "" (posix) resolving ["\a"] "" (posix) + resolving "Program Files" "c:\" (posix) resolving "Program Files" "c:\" (posix) + resolving "Program Files" "c:" (posix) resolving "Program Files" "c:" (posix) + resolving ["Program Files"] "c:" (posix) resolving ["Program Files"] "c:" (posix) + resolving "\bar" "\foo\" (windows) resolving "\bar" "\foo\" (windows) + resolving "{"bar", ""}" "foo" (windows) resolving "{"bar", ""}" "foo" (windows) + resolving ["\a"] "" (windows) resolving ["\a"] "" (windows) + resolving ["\\bar"].each "\\\foo" (posix) resolving ["\\bar"].each "\\\foo" (posix) + resolving ["a"] "/" (windows) resolving ["a"] "/" (windows) + resolving ["/bar"].each "/foo/" (windows) resolving ["/bar"].each "/foo/" (windows) + resolving ["bar\baz"].each "foo" (windows) resolving ["bar\baz"].each "foo" (windows) + resolving ["bar\baz"] "foo" (windows) resolving ["bar\baz"] "foo" (windows) + resolving "/" "" (windows) resolving "/" "" (windows) + resolving "" "/" (posix) resolving "" "/" (posix) + resolving ["Program Files"] "c:\" (posix) resolving ["Program Files"] "c:\" (posix) + resolving ["bar\baz"].each "foo" (posix) resolving ["bar\baz"].each "foo" (posix) + resolving ["bar/baz"] "foo" (posix) resolving ["bar/baz"] "foo" (posix) + resolving "{"/foo", "/", "bar/", "/"}" "/" (windows) resolving "{"/foo", "/", "bar/", "/"}" "/" (windows) + resolving ["\\bar"].each "\\\foo" (windows) resolving ["\\bar"].each "\\\foo" (windows) + resolving ["/a"].each "" (posix) resolving ["/a"].each "" (posix) + resolving "\\bar" "\\\foo" (posix) resolving "\\bar" "\\\foo" (posix) + resolving "{"bar", ""}" "foo" (posix) resolving "{"bar", ""}" "foo" (posix) + resolving ["/"] "foo" (posix) resolving ["/"] "foo" (posix) + resolving "/" "foo" (windows) resolving "/" "foo" (windows) + resolving [""].each "/" (posix) resolving [""].each "/" (posix) + resolving ["Program Files"] "c:/" (windows) resolving ["Program Files"] "c:/" (windows) + resolving "{"\\bar\\", "\\baz\\"}" "\foo\" (windows) resolving "{"\\bar\\", "\\baz\\"}" "\foo\" (windows) + resolving "//bar" "///foo" (posix) resolving "//bar" "///foo" (posix) + resolving [""].each "" (windows) resolving [""].each "" (windows) + resolving "\bar" "\foo\" (posix) resolving "\bar" "\foo\" (posix) + resolving ["\"] "foo" (posix) resolving ["\"] "foo" (posix) + resolving ["/a"] "" (posix) resolving ["/a"] "" (posix) + resolving ["a"] "" (posix) resolving ["a"] "" (posix) + resolving "{"\\", "bar"}" "foo" (posix) resolving "{"\\", "bar"}" "foo" (posix) + resolving "{"//bar//", "baz///"}" "foo" (posix) resolving "{"//bar//", "baz///"}" "foo" (posix) + resolving ["Program Files"] "c:" (windows) resolving ["Program Files"] "c:" (windows) + resolving "Program Files" "c:/" (posix) resolving "Program Files" "c:/" (posix) + resolving ["/"].each "" (posix) resolving ["/"].each "" (posix) + resolving ["bar\baz"].each "foo" (posix) resolving ["bar\baz"].each "foo" (posix) + resolving ["bar"].each "\\\\foo" (windows) resolving ["bar"].each "\\\\foo" (windows) + resolving ["bar\baz"] "foo" (windows) resolving ["bar\baz"] "foo" (windows) + resolving "{"\\", "\\", "bar"}" "foo" (windows) resolving "{"\\", "\\", "bar"}" "foo" (windows) + resolving "{"bar", ""}" "foo" (windows) resolving "{"bar", ""}" "foo" (windows) + resolving ["Program Files"].each "c:" (posix) resolving ["Program Files"].each "c:" (posix) + resolving ["\bar"] "\foo\" (windows) resolving ["\bar"] "\foo\" (windows) + resolving "{"\\bar\\", "\\baz\\"}" "\foo\" (posix) resolving "{"\\bar\\", "\\baz\\"}" "\foo\" (posix) + resolving "" "/" (windows) resolving "" "/" (windows) + resolving ["//bar"].each "///foo" (posix) resolving ["//bar"].each "///foo" (posix) + resolving ["a"].each "\" (posix) resolving ["a"].each "\" (posix) + resolving "/" "foo" (posix) resolving "/" "foo" (posix) + resolving ["bar"].each "///foo" (windows) resolving ["bar"].each "///foo" (windows) + resolving "bar" "\\\\foo" (windows) resolving "bar" "\\\\foo" (windows) + resolving [""] "" (windows) resolving [""] "" (windows) + resolving ["bar\baz"] "foo" (posix) resolving ["bar\baz"] "foo" (posix) + resolving "\a" "" (windows) resolving "\a" "" (windows) + resolving "\" "foo" (posix) resolving "\" "foo" (posix) + resolving ["\bar"].each "\foo\" (windows) resolving ["\bar"].each "\foo\" (windows) + resolving "bar" "///foo" (windows) resolving "bar" "///foo" (windows) + resolving ["/bar"].each "/foo/" (posix) resolving ["/bar"].each "/foo/" (posix) + resolving "bar/baz" "foo" (windows) resolving "bar/baz" "foo" (windows) + resolving ["bar"] "///foo" (windows) resolving ["bar"] "///foo" (windows) + #parents + "foo/bar/." (posix) "foo/bar/." (posix) + "/foo" (windows) "/foo" (windows) + "foo/../bar/" (windows) "foo/../bar/" (windows) + "./foo" (posix) "./foo" (posix) + "foo/bar/." (windows) "foo/bar/." (windows) + "foo/./bar/." (posix) "foo/./bar/." (posix) + ".\foo" (windows) ".\foo" (windows) + "." (windows) "." (windows) + "C:\Users\foo\bar.cr" (windows) "C:\Users\foo\bar.cr" (windows) + "foo\bar\" (windows) "foo\bar\" (windows) + "" (posix) "" (posix) + "foo/bar/../." (windows) "foo/bar/../." (windows) + "/" (posix) "/" (posix) + "m/" (posix) "m/" (posix) + "m/.gitignore" (windows) "m/.gitignore" (windows) + "\" (posix) "\" (posix) + "\Users\foo\bar.cr" (windows) "\Users\foo\bar.cr" (windows) + "foo/../bar/." (windows) "foo/../bar/." (windows) + "/Users/foo/bar.cr" (posix) "/Users/foo/bar.cr" (posix) + "C:folder" (posix) "C:folder" (posix) + "foo/bar/" (windows) "foo/bar/" (windows) + "\Users/foo\bar.cr" (posix) "\Users/foo\bar.cr" (posix) + "\Users\foo\bar.cr" (posix) "\Users\foo\bar.cr" (posix) + "foo" (posix) "foo" (posix) + "C:\" (posix) "C:\" (posix) + "foo\bar\" (posix) "foo\bar\" (posix) + "foo/./bar/" (posix) "foo/./bar/" (posix) + "Users/foo/bar.cr" (posix) "Users/foo/bar.cr" (posix) + "foo/bar/." (windows) "foo/bar/." (windows) + "" (windows) "" (windows) + "/" (windows) "/" (windows) + "C:\" (windows) "C:\" (windows) + "m/.gitignore" (posix) "m/.gitignore" (posix) + "foo\" (windows) "foo\" (windows) + "////" (windows) "////" (windows) + "foo/./bar/" (windows) "foo/./bar/" (windows) + "m//" (windows) "m//" (windows) + "C:" (windows) "C:" (windows) + "foo/../bar/." (posix) "foo/../bar/." (posix) + "foo/bar/." (posix) "foo/bar/." (posix) + "m" (windows) "m" (windows) + "C:\." (windows) "C:\." (windows) + "foo/bar/.." (posix) "foo/bar/.." (posix) + "foo/bar/./." (posix) "foo/bar/./." (posix) + "/m/" (posix) "/m/" (posix) + "m//a/b" (posix) "m//a/b" (posix) + "C:/" (windows) "C:/" (windows) + "C:\\folder" (posix) "C:\\folder" (posix) + "foo" (windows) "foo" (windows) + "C:\\folder" (windows) "C:\\folder" (windows) + "foo\" (posix) "foo\" (posix) + "foo/../bar/" (posix) "foo/../bar/" (posix) + "/." (posix) "/." (posix) + "foo/bar/.." (windows) "foo/bar/.." (windows) + "." (posix) "." (posix) + "C:folder" (windows) "C:folder" (windows) + "C:\Users\foo\bar.cr" (posix) "C:\Users\foo\bar.cr" (posix) + "C:" (posix) "C:" (posix) + "C:\folder" (posix) "C:\folder" (posix) + "foo/" (posix) "foo/" (posix) + "foo/bar/../." (posix) "foo/bar/../." (posix) + "////" (posix) "////" (posix) + "m//" (posix) "m//" (posix) + "m" (posix) "m" (posix) + "foo/./bar/." (windows) "foo/./bar/." (windows) + ".\foo" (posix) ".\foo" (posix) + "/m" (windows) "/m" (windows) + "/foo" (posix) "/foo" (posix) + "m//a/b" (windows) "m//a/b" (windows) + "foo/bar/" (posix) "foo/bar/" (posix) + "m/" (windows) "m/" (windows) + "foo/" (windows) "foo/" (windows) + "/." (windows) "/." (windows) + "/Users/foo/bar.cr" (windows) "/Users/foo/bar.cr" (windows) + "/m" (posix) "/m" (posix) + "./foo" (windows) "./foo" (windows) + "C:\." (posix) "C:\." (posix) + "C:/" (posix) "C:/" (posix) + "\Users/foo\bar.cr" (windows) "\Users/foo\bar.cr" (windows) + "foo/bar/./." (windows) "foo/bar/./." (windows) + "\" (windows) "\" (windows) + "C:\folder" (windows) "C:\folder" (windows) + "/m/" (windows) "/m/" (windows) + "Users/foo/bar.cr" (windows) "Users/foo/bar.cr" (windows) + #relative_to? + on "/a/b": "/c/d" (windows) on "/a/b": "/c/d" (windows) + on "./a/b": "a/b" (windows) on "./a/b": "a/b" (windows) + on "a/b": "./a/b" (posix) on "a/b": "./a/b" (posix) + on ".": ".." (posix) on ".": ".." (posix) + on "a/b": "a/b/c/d" (posix) on "a/b": "a/b/c/d" (posix) + on "a/b": "a/b/c/d" (windows) on "a/b": "a/b/c/d" (windows) + on "a": "/a" (windows) on "a": "/a" (windows) + on "a/b/c/d": "a/b/" (posix) on "a/b/c/d": "a/b/" (posix) + on "/a/b/c/d": "/a/b/" (posix) on "/a/b/c/d": "/a/b/" (posix) + on "/a/b": "/a/b" (posix) on "/a/b": "/a/b" (posix) + on "a/b/c": "a/c/d" (posix) on "a/b/c": "a/c/d" (posix) + on "a/b": "a/b/." (windows) on "a/b": "a/b/." (windows) + on "./a/b": "a/b" (posix) on "./a/b": "a/b" (posix) + on "a/b": "a/b/c" (windows) on "a/b": "a/b/c" (windows) + on "/": "/a/c" (posix) on "/": "/a/c" (posix) + on "/a/b/../c": "/a/b" (windows) on "/a/b/../c": "/a/b" (windows) + on ".": "a/b" (windows) on ".": "a/b" (windows) + on "/a/b": "/a/b/../c" (posix) on "/a/b": "/a/b/../c" (posix) + on "a/b": "c/d" (posix) on "a/b": "c/d" (posix) + on "a/b/.": "a/b" (windows) on "a/b/.": "a/b" (windows) + on "/a/b": "/a/b" (windows) on "/a/b": "/a/b" (windows) + on "a/b/.": "a/b" (posix) on "a/b/.": "a/b" (posix) + on "a/b": "a/b/c" (posix) on "a/b": "a/b/c" (posix) + on "/a/b": "/a/b/." (windows) on "/a/b": "/a/b/." (windows) + on "../../a/b": "../../a/b/c/d" (windows) on "../../a/b": "../../a/b/c/d" (windows) + on "/a/b/.": "/a/b" (windows) on "/a/b/.": "/a/b" (windows) + on "a": "/a" (posix) on "a": "/a" (posix) + on "/a/b/../c": "/a/b" (posix) on "/a/b/../c": "/a/b" (posix) + on "/ab/cd": "/ab/c" (windows) on "/ab/cd": "/ab/c" (windows) + on "a/b": "a/b/../c" (posix) on "a/b": "a/b/../c" (posix) + on "a/b": "c/d" (windows) on "a/b": "c/d" (windows) + on "/a/b": "/a/b/c/d" (posix) on "/a/b": "/a/b/c/d" (posix) + on "/a/b": "/a/b/c/d" (windows) on "/a/b": "/a/b/c/d" (windows) + on "a/b/../c": "a/b" (posix) on "a/b/../c": "a/b" (posix) + on "/": "/" (windows) on "/": "/" (windows) + on "/a/b/c/d": "/a/b/" (windows) on "/a/b/c/d": "/a/b/" (windows) + on "ab/cd": "ab/c" (windows) on "ab/cd": "ab/c" (windows) + on "/a/b/c/d": "/a/b" (posix) on "/a/b/c/d": "/a/b" (posix) + on "a/b/c/d": "a/b/" (windows) on "a/b/c/d": "a/b/" (windows) + on "/a/b": "/c/d" (posix) on "/a/b": "/c/d" (posix) + on "a/b/c/d": "a/b" (posix) on "a/b/c/d": "a/b" (posix) + on "a/b": "a/b" (posix) on "a/b": "a/b" (posix) + on "..": "a" (posix) on "..": "a" (posix) + on "..": "." (windows) on "..": "." (windows) + on "/ab/cd": "/ab/c" (posix) on "/ab/cd": "/ab/c" (posix) + on "..": "." (posix) on "..": "." (posix) + on "a/b": "a/b/." (posix) on "a/b": "a/b/." (posix) + on "/": "/a/c" (windows) on "/": "/a/c" (windows) + on "/a/b/c/d/": "/a/b" (windows) on "/a/b/c/d/": "/a/b" (windows) + on "/a/b/c/d/": "/a/b/" (windows) on "/a/b/c/d/": "/a/b/" (windows) + on ".": "a/b" (posix) on ".": "a/b" (posix) + on "/a/b/c": "/a/c/d" (windows) on "/a/b/c": "/a/c/d" (windows) + on "/a/b": "/a/b/../c" (windows) on "/a/b": "/a/b/../c" (windows) + on "ab/cd": "ab/cde" (windows) on "ab/cd": "ab/cde" (windows) + on "a/b/c/d/": "a/b/" (posix) on "a/b/c/d/": "a/b/" (posix) + on "a/b/c/d": "a/b" (windows) on "a/b/c/d": "a/b" (windows) + on "/a/b/c/d/": "/a/b/" (posix) on "/a/b/c/d/": "/a/b/" (posix) + on "/a/b/c": "/a/c/d" (posix) on "/a/b/c": "/a/c/d" (posix) + on "../../a/b": "../../a/b/c/d" (posix) on "../../a/b": "../../a/b/c/d" (posix) + on "a/b/c/d/": "a/b/" (windows) on "a/b/c/d/": "a/b/" (windows) + on "/a/b/.": "/a/b" (posix) on "/a/b/.": "/a/b" (posix) + on "a/b/c": "a/c/d" (windows) on "a/b/c": "a/c/d" (windows) + special windows paths + on "C:\Projects\a\..": "c:\projects" (posix) on "C:\Projects\a\..": "c:\projects" (posix) + on "C:\Projects": "c:\projects" (windows) on "C:\Projects": "c:\projects" (windows) + on "/a": "a" (windows) on "/a": "a" (windows) + on "C:\Projects": "c:\projects\src" (windows) on "C:\Projects": "c:\projects\src" (windows) + on "C:a\b\c": "c:a/b/d" (windows) on "C:a\b\c": "c:a/b/d" (windows) + on "C:a\b\c": "c:a/b/d" (posix) on "C:a\b\c": "c:a/b/d" (posix) + on "/a": "a" (posix) on "/a": "a" (posix) + on "C:": "D:" (windows) on "C:": "D:" (windows) + on "C:\Projects\a\..": "c:\projects" (windows) on "C:\Projects\a\..": "c:\projects" (windows) + on "C:": "D:" (posix) on "C:": "D:" (posix) + on "C:\": "D:\" (posix) on "C:\": "D:\" (posix) + on "C:a\b\c": "C:a/b/d" (posix) on "C:a\b\c": "C:a/b/d" (posix) + on "C:\Projects": "c:\projects" (posix) on "C:\Projects": "c:\projects" (posix) + on "C:\": "D:\" (windows) on "C:\": "D:\" (windows) + on "C:\Projects": "c:\projects\src" (posix) on "C:\Projects": "c:\projects\src" (posix) + on "C:a\b\c": "C:a/b/d" (windows) on "C:a\b\c": "C:a/b/d" (windows) + on "a/b": "./a/b" (windows) on "a/b": "./a/b" (windows) + on "/a/b": "/a/b/." (posix) on "/a/b": "/a/b/." (posix) + on "a/b": "a/b" (windows) on "a/b": "a/b" (windows) + on "a/b": "a/b/../c" (windows) on "a/b": "a/b/../c" (windows) + on "/../../a/b": "/../../a/b/c/d" (windows) on "/../../a/b": "/../../a/b/c/d" (windows) + on "../..": ".." (posix) on "../..": ".." (posix) + on "/": "/" (posix) on "/": "/" (posix) + on ".": ".." (windows) on ".": ".." (windows) + on "a/b/c/d/": "a/b" (posix) on "a/b/c/d/": "a/b" (posix) + on "a/b/c/d/": "a/b" (windows) on "a/b/c/d/": "a/b" (windows) + on "/ab/cd": "/ab/cde" (windows) on "/ab/cd": "/ab/cde" (windows) + on "/a/b/c/d/": "/a/b" (posix) on "/a/b/c/d/": "/a/b" (posix) + on "a/b/../c": "a/b" (windows) on "a/b/../c": "a/b" (windows) + on "../..": ".." (windows) on "../..": ".." (windows) + on "ab/cd": "ab/cde" (posix) on "ab/cd": "ab/cde" (posix) + on "..": "a" (windows) on "..": "a" (windows) + on "/../../a/b": "/../../a/b/c/d" (posix) on "/../../a/b": "/../../a/b/c/d" (posix) + on "/a/b/c/d": "/a/b" (windows) on "/a/b/c/d": "/a/b" (windows) + on "ab/cd": "ab/c" (posix) on "ab/cd": "ab/c" (posix) + on "/ab/cd": "/ab/cde" (posix) on "/ab/cd": "/ab/cde" (posix) + #stem + "bar/foo.txt." (windows) "bar/foo.txt." (windows) + "bar\.txt" (windows) "bar\.txt" (windows) + "foo.txt.txt/" (posix) "foo.txt.txt/" (posix) + "bar\foo.txt." (windows) "bar\foo.txt." (windows) + ".txt.txt" (windows) ".txt.txt" (windows) + ".txt.txt/" (posix) ".txt.txt/" (posix) + "foo./" (posix) "foo./" (posix) + "foo." (windows) "foo." (windows) + "foo.txt./" (windows) "foo.txt./" (windows) + "foo.txt." (posix) "foo.txt." (posix) + "foo./" (windows) "foo./" (windows) + "bar\foo.txt" (posix) "bar\foo.txt" (posix) + "bar\.txt.txt" (windows) "bar\.txt.txt" (windows) + ".txt.txt" (posix) ".txt.txt" (posix) + "bar/foo.txt.txt" (windows) "bar/foo.txt.txt" (windows) + "foo..txt" (windows) "foo..txt" (windows) + "bar/foo..txt" (windows) "bar/foo..txt" (windows) + "bar/foo.txt.txt" (posix) "bar/foo.txt.txt" (posix) + "foo.txt" (windows) "foo.txt" (windows) + "bar\.txt.txt" (posix) "bar\.txt.txt" (posix) + "bar\.txt" (posix) "bar\.txt" (posix) + "foo.txt" (posix) "foo.txt" (posix) + "bar\foo..txt" (windows) "bar\foo..txt" (windows) + "bar/foo." (posix) "bar/foo." (posix) + "foo.txt./" (posix) "foo.txt./" (posix) + "foo..txt/" (posix) "foo..txt/" (posix) + "bar\foo.txt" (windows) "bar\foo.txt" (windows) + "bar\foo.txt.txt" (posix) "bar\foo.txt.txt" (posix) + "bar/.txt.txt" (windows) "bar/.txt.txt" (windows) + "bar/foo.txt" (posix) "bar/foo.txt" (posix) + ".txt.txt/" (windows) ".txt.txt/" (windows) + "foo.txt." (windows) "foo.txt." (windows) + "foo.txt.txt" (windows) "foo.txt.txt" (windows) + "foo.txt.txt/" (windows) "foo.txt.txt/" (windows) + "bar/.txt.txt" (posix) "bar/.txt.txt" (posix) + "bar/foo.txt." (posix) "bar/foo.txt." (posix) + "bar\foo..txt" (posix) "bar\foo..txt" (posix) + "foo.txt.txt" (posix) "foo.txt.txt" (posix) + "bar\foo." (windows) "bar\foo." (windows) + "foo..txt/" (windows) "foo..txt/" (windows) + ".txt" (posix) ".txt" (posix) + "bar/foo." (windows) "bar/foo." (windows) + ".txt/" (windows) ".txt/" (windows) + "bar/.txt" (windows) "bar/.txt" (windows) + "bar/foo..txt" (posix) "bar/foo..txt" (posix) + ".txt/" (posix) ".txt/" (posix) + "foo.txt/" (windows) "foo.txt/" (windows) + "foo..txt" (posix) "foo..txt" (posix) + "bar\foo.txt.txt" (windows) "bar\foo.txt.txt" (windows) + "bar/.txt" (posix) "bar/.txt" (posix) + "bar/foo.txt" (windows) "bar/foo.txt" (windows) + "bar\foo.txt." (posix) "bar\foo.txt." (posix) + "foo.txt/" (posix) "foo.txt/" (posix) + "bar\foo." (posix) "bar\foo." (posix) + "foo." (posix) "foo." (posix) + ".txt" (windows) ".txt" (windows) + #extension + "test.ext/foo" (windows) "test.ext/foo" (windows) + "/foo/bar/foo." (windows) "/foo/bar/foo." (windows) + "test.ext/foo/" (posix) "test.ext/foo/" (posix) + "/foo/bar/baz.cr" (posix) "/foo/bar/baz.cr" (posix) + "test.ext\" (posix) "test.ext\" (posix) + "test.ext/" (posix) "test.ext/" (posix) + "/foo/bar/baz.cr.cz" (windows) "/foo/bar/baz.cr.cz" (windows) + "test.ext/foo" (posix) "test.ext/foo" (posix) + "/foo/bar/.profile.sh" (windows) "/foo/bar/.profile.sh" (windows) + "test" (windows) "test" (windows) + "test.ext/foo/" (windows) "test.ext/foo/" (windows) + "/foo/bar/.profile.sh" (posix) "/foo/bar/.profile.sh" (posix) + "test.ext/" (windows) "test.ext/" (windows) + "test/." (posix) "test/." (posix) + "/foo/bar/baz.cr.cz" (posix) "/foo/bar/baz.cr.cz" (posix) + "test" (posix) "test" (posix) + "/foo/bar/baz.cr" (windows) "/foo/bar/baz.cr" (windows) + "/foo/bar/foo." (posix) "/foo/bar/foo." (posix) + "test\." (posix) "test\." (posix) + "test\." (windows) "test\." (windows) + "test.ext\" (windows) "test.ext\" (windows) + "/foo/bar/.profile" (posix) "/foo/bar/.profile" (posix) + "/foo/bar/.profile" (windows) "/foo/bar/.profile" (windows) + "test/." (windows) "test/." (windows) + #each_part + iterator "./foo" (windows) iterator "./foo" (windows) + block "foo/bar/." (posix) block "foo/bar/." (posix) + iterator "/" (windows) iterator "/" (windows) + iterator "m//" (posix) iterator "m//" (posix) + block ".\foo" (posix) block ".\foo" (posix) + block "//some/share" (posix) block "//some/share" (posix) + iterator "C:\." (windows) iterator "C:\." (windows) + #parts "/." (posix) #parts "/." (posix) + #parts "C:folder" (posix) #parts "C:folder" (posix) + iterator "foo/bar/" (windows) iterator "foo/bar/" (windows) + iterator "Users/foo/bar.cr" (windows) iterator "Users/foo/bar.cr" (windows) + #parts "//some/share/bar.cr" (windows) #parts "//some/share/bar.cr" (windows) + block "m//" (posix) block "m//" (posix) + #parts "\\some\share\bar.cr" (windows) #parts "\\some\share\bar.cr" (windows) + block "m/" (posix) block "m/" (posix) + block "foo/bar/./." (windows) block "foo/bar/./." (windows) + iterator "\\some\share\" (windows) iterator "\\some\share\" (windows) + block "foo/bar/./." (posix) block "foo/bar/./." (posix) + block "C:" (posix) block "C:" (posix) + #parts "foo/bar/../." (windows) #parts "foo/bar/../." (windows) + iterator "\Users/foo\bar.cr" (windows) iterator "\Users/foo\bar.cr" (windows) + iterator "/m/" (posix) iterator "/m/" (posix) + iterator "C:\\folder" (windows) iterator "C:\\folder" (windows) + block "/." (posix) block "/." (posix) + #parts "foo" (windows) #parts "foo" (windows) + block "/Users/foo/bar.cr" (posix) block "/Users/foo/bar.cr" (posix) + iterator "foo/bar/./." (windows) iterator "foo/bar/./." (windows) + block "foo/./bar/" (windows) block "foo/./bar/" (windows) + iterator "\\some\share" (windows) iterator "\\some\share" (windows) + iterator "." (posix) iterator "." (posix) + block "C:/" (posix) block "C:/" (posix) + iterator "m/" (posix) iterator "m/" (posix) + iterator "//some/share" (windows) iterator "//some/share" (windows) + block "C:/" (windows) block "C:/" (windows) + block "foo/../bar/" (windows) block "foo/../bar/" (windows) + block "m/.gitignore" (windows) block "m/.gitignore" (windows) + #parts "foo/bar/.." (windows) #parts "foo/bar/.." (windows) + #parts "/m" (windows) #parts "/m" (windows) + iterator "C:/" (windows) iterator "C:/" (windows) + #parts "foo/bar/." (windows) #parts "foo/bar/." (windows) + #parts "C:\Users\foo\bar.cr" (windows) #parts "C:\Users\foo\bar.cr" (windows) + block "foo/" (posix) block "foo/" (posix) + block "foo/bar/." (windows) block "foo/bar/." (windows) + block "foo/bar/" (posix) block "foo/bar/" (posix) + iterator "C:\." (posix) iterator "C:\." (posix) + #parts "m//a/b" (windows) #parts "m//a/b" (windows) + block "Users/foo/bar.cr" (windows) block "Users/foo/bar.cr" (windows) + block "foo/./bar/." (posix) block "foo/./bar/." (posix) + iterator "C:\Users\foo\bar.cr" (posix) iterator "C:\Users\foo\bar.cr" (posix) + #parts "foo/" (windows) #parts "foo/" (windows) + iterator "m" (posix) iterator "m" (posix) + block "foo\" (posix) block "foo\" (posix) + #parts "//some/share" (posix) #parts "//some/share" (posix) + #parts "foo/../bar/." (posix) #parts "foo/../bar/." (posix) + #parts "foo\" (windows) #parts "foo\" (windows) + iterator "m/.gitignore" (posix) iterator "m/.gitignore" (posix) + iterator "foo/bar/.." (posix) iterator "foo/bar/.." (posix) + iterator "" (windows) iterator "" (windows) + block "foo/./bar/." (windows) block "foo/./bar/." (windows) + #parts "foo\bar\" (windows) #parts "foo\bar\" (windows) + #parts ".\foo" (windows) #parts ".\foo" (windows) + #parts "////" (windows) #parts "////" (windows) + iterator "foo/bar/." (posix) iterator "foo/bar/." (posix) + iterator "/m/" (windows) iterator "/m/" (windows) + iterator "m" (windows) iterator "m" (windows) + block "foo/../bar/." (windows) block "foo/../bar/." (windows) + block "\\some\share" (windows) block "\\some\share" (windows) + #parts "m/" (posix) #parts "m/" (posix) + #parts "m\" (windows) #parts "m\" (windows) + block "foo/" (windows) block "foo/" (windows) + block "\\some\share\" (posix) block "\\some\share\" (posix) + iterator "C:\folder" (windows) iterator "C:\folder" (windows) + block "C:\Users\foo\bar.cr" (posix) block "C:\Users\foo\bar.cr" (posix) + #parts "m//a/b" (posix) #parts "m//a/b" (posix) + #parts "C:\" (windows) #parts "C:\" (windows) + #parts "C:\\folder" (posix) #parts "C:\\folder" (posix) + block "/" (windows) block "/" (windows) + #parts "C:/" (posix) #parts "C:/" (posix) + iterator "foo\bar\" (windows) iterator "foo\bar\" (windows) + iterator "C:\Users\foo\bar.cr" (windows) iterator "C:\Users\foo\bar.cr" (windows) + block "//some/share/bar.cr" (posix) block "//some/share/bar.cr" (posix) + iterator "foo/bar/." (windows) iterator "foo/bar/." (windows) + block "foo/bar/.." (posix) block "foo/bar/.." (posix) + block "foo\bar\" (posix) block "foo\bar\" (posix) + iterator "foo/" (windows) iterator "foo/" (windows) + block "m\" (windows) block "m\" (windows) + #parts "C:\" (posix) #parts "C:\" (posix) + block "C:folder" (windows) block "C:folder" (windows) + #parts "/m" (posix) #parts "/m" (posix) + block "." (posix) block "." (posix) + iterator "foo" (posix) iterator "foo" (posix) + block "foo" (windows) block "foo" (windows) + #parts "//some/share/bar.cr" (posix) #parts "//some/share/bar.cr" (posix) + iterator "m\a/b" (windows) iterator "m\a/b" (windows) + #parts ".\foo" (posix) #parts ".\foo" (posix) + #parts "/m/" (posix) #parts "/m/" (posix) + #parts "foo\bar\" (posix) #parts "foo\bar\" (posix) + iterator "m\" (windows) iterator "m\" (windows) + #parts "/" (windows) #parts "/" (windows) + block "C:" (windows) block "C:" (windows) + #parts "foo/bar/." (posix) #parts "foo/bar/." (posix) + iterator "\\some\share" (posix) iterator "\\some\share" (posix) + block "m" (posix) block "m" (posix) + iterator "//some/share/" (posix) iterator "//some/share/" (posix) + block "m//a/b" (windows) block "m//a/b" (windows) + #parts "C:\folder" (windows) #parts "C:\folder" (windows) + #parts "foo/bar/../." (posix) #parts "foo/bar/../." (posix) + iterator "foo/bar/./." (posix) iterator "foo/bar/./." (posix) + #parts "foo/../bar/." (windows) #parts "foo/../bar/." (windows) + iterator "/." (posix) iterator "/." (posix) + block "/Users/foo/bar.cr" (windows) block "/Users/foo/bar.cr" (windows) + block "foo/../bar/." (posix) block "foo/../bar/." (posix) + iterator "/m" (windows) iterator "/m" (windows) + block "foo/./bar/" (posix) block "foo/./bar/" (posix) + block "////" (windows) block "////" (windows) + #parts "/Users/foo/bar.cr" (windows) #parts "/Users/foo/bar.cr" (windows) + iterator "foo/./bar/." (windows) iterator "foo/./bar/." (windows) + iterator "m\a/b" (posix) iterator "m\a/b" (posix) + #parts "/." (windows) #parts "/." (windows) + iterator "Users/foo/bar.cr" (posix) iterator "Users/foo/bar.cr" (posix) + #parts "Users/foo/bar.cr" (windows) #parts "Users/foo/bar.cr" (windows) + iterator "\\some\share\bar.cr" (posix) iterator "\\some\share\bar.cr" (posix) + #parts "foo/bar/./." (windows) #parts "foo/bar/./." (windows) + iterator "C:\" (posix) iterator "C:\" (posix) + block "foo/bar/../." (windows) block "foo/bar/../." (windows) + iterator "/foo" (posix) iterator "/foo" (posix) + #parts "C:/" (windows) #parts "C:/" (windows) + block "m//" (windows) block "m//" (windows) + block "C:\Users\foo\bar.cr" (windows) block "C:\Users\foo\bar.cr" (windows) + #parts "foo/./bar/." (windows) #parts "foo/./bar/." (windows) + iterator "foo/../bar/." (windows) iterator "foo/../bar/." (windows) + #parts "m//" (posix) #parts "m//" (posix) + iterator "\Users/foo\bar.cr" (posix) iterator "\Users/foo\bar.cr" (posix) + #parts "C:\." (posix) #parts "C:\." (posix) + iterator "C:folder" (posix) iterator "C:folder" (posix) + iterator "" (posix) iterator "" (posix) + block "\\some\share\bar.cr" (windows) block "\\some\share\bar.cr" (windows) + #parts "m" (windows) #parts "m" (windows) + iterator "foo/bar/.." (windows) iterator "foo/bar/.." (windows) + iterator "foo/bar/../." (posix) iterator "foo/bar/../." (posix) + iterator "foo/../bar/" (posix) iterator "foo/../bar/" (posix) + iterator "/" (posix) iterator "/" (posix) + block "////" (posix) block "////" (posix) + block "/" (posix) block "/" (posix) + block "C:\\folder" (posix) block "C:\\folder" (posix) + block "\\some\share\" (windows) block "\\some\share\" (windows) + block "m\a/b" (windows) block "m\a/b" (windows) + iterator "C:\\folder" (posix) iterator "C:\\folder" (posix) + #parts "." (windows) #parts "." (windows) + block "/." (windows) block "/." (windows) + block "//some/share/bar.cr" (windows) block "//some/share/bar.cr" (windows) + #parts "foo/" (posix) #parts "foo/" (posix) + iterator "C:\folder" (posix) iterator "C:\folder" (posix) + #parts "//some/share/" (windows) #parts "//some/share/" (windows) + block ".\foo" (windows) block ".\foo" (windows) + #parts "C:" (windows) #parts "C:" (windows) + iterator "/Users/foo/bar.cr" (windows) iterator "/Users/foo/bar.cr" (windows) + block "//some/share" (windows) block "//some/share" (windows) + #parts "./foo" (posix) #parts "./foo" (posix) + iterator "//some/share/bar.cr" (posix) iterator "//some/share/bar.cr" (posix) + block "/m" (windows) block "/m" (windows) + iterator "foo/bar/." (posix) iterator "foo/bar/." (posix) + #parts "C:\Users\foo\bar.cr" (posix) #parts "C:\Users\foo\bar.cr" (posix) + #parts "m/.gitignore" (posix) #parts "m/.gitignore" (posix) + #parts "foo/../bar/" (posix) #parts "foo/../bar/" (posix) + iterator "foo/./bar/" (windows) iterator "foo/./bar/" (windows) + block "m\" (posix) block "m\" (posix) + iterator "////" (windows) iterator "////" (windows) + iterator "foo/bar/." (windows) iterator "foo/bar/." (windows) + iterator "m/" (windows) iterator "m/" (windows) + #parts "\" (posix) #parts "\" (posix) + iterator "foo/bar/../." (windows) iterator "foo/bar/../." (windows) + iterator "m\" (posix) iterator "m\" (posix) + #parts "foo/bar/.." (posix) #parts "foo/bar/.." (posix) + block "//some/share/" (windows) block "//some/share/" (windows) + #parts "/" (posix) #parts "/" (posix) + #parts "foo/bar/." (windows) #parts "foo/bar/." (windows) + block "foo" (posix) block "foo" (posix) + iterator "foo/./bar/" (posix) iterator "foo/./bar/" (posix) + iterator "m//a/b" (posix) iterator "m//a/b" (posix) + #parts "./foo" (windows) #parts "./foo" (windows) + #parts "foo/../bar/" (windows) #parts "foo/../bar/" (windows) + iterator "m/.gitignore" (windows) iterator "m/.gitignore" (windows) + block "m" (windows) block "m" (windows) + block "/m/" (posix) block "/m/" (posix) + iterator "foo/./bar/." (posix) iterator "foo/./bar/." (posix) + block "Users/foo/bar.cr" (posix) block "Users/foo/bar.cr" (posix) + iterator "foo\" (windows) iterator "foo\" (windows) + iterator "/m" (posix) iterator "/m" (posix) + #parts "\\some\share" (posix) #parts "\\some\share" (posix) + #parts "\Users/foo\bar.cr" (posix) #parts "\Users/foo\bar.cr" (posix) + block "foo/bar/." (posix) block "foo/bar/." (posix) + block "" (posix) block "" (posix) + #parts "/foo" (posix) #parts "/foo" (posix) + iterator "m//" (windows) iterator "m//" (windows) + #parts "foo/bar/" (windows) #parts "foo/bar/" (windows) + #parts "C:" (posix) #parts "C:" (posix) + iterator "." (windows) iterator "." (windows) + block "\Users\foo\bar.cr" (posix) block "\Users\foo\bar.cr" (posix) + iterator "foo/../bar/" (windows) iterator "foo/../bar/" (windows) + block "C:\" (windows) block "C:\" (windows) + iterator "C:/" (posix) iterator "C:/" (posix) + iterator "/Users/foo/bar.cr" (posix) iterator "/Users/foo/bar.cr" (posix) + #parts "foo" (posix) #parts "foo" (posix) + block "C:\\folder" (windows) block "C:\\folder" (windows) + #parts "////" (posix) #parts "////" (posix) + #parts "foo/./bar/." (posix) #parts "foo/./bar/." (posix) + iterator "//some/share" (posix) iterator "//some/share" (posix) + #parts "C:\\folder" (windows) #parts "C:\\folder" (windows) + iterator "//some/share/bar.cr" (windows) iterator "//some/share/bar.cr" (windows) + #parts "m/" (windows) #parts "m/" (windows) + #parts "\" (windows) #parts "\" (windows) + #parts "m\a/b" (windows) #parts "m\a/b" (windows) + block "foo/../bar/" (posix) block "foo/../bar/" (posix) + block "C:\folder" (windows) block "C:\folder" (windows) + block "C:\." (posix) block "C:\." (posix) + iterator "foo/" (posix) iterator "foo/" (posix) + #parts "C:\." (windows) #parts "C:\." (windows) + block "." (windows) block "." (windows) + #parts "\\some\share\" (posix) #parts "\\some\share\" (posix) + iterator "foo\bar\" (posix) iterator "foo\bar\" (posix) + block "\Users/foo\bar.cr" (posix) block "\Users/foo\bar.cr" (posix) + #parts "m/.gitignore" (windows) #parts "m/.gitignore" (windows) + block "m\a/b" (posix) block "m\a/b" (posix) + iterator "foo/../bar/." (posix) iterator "foo/../bar/." (posix) + block "\\some\share" (posix) block "\\some\share" (posix) + #parts "foo/./bar/" (posix) #parts "foo/./bar/" (posix) + iterator "/." (windows) iterator "/." (windows) + #parts "//some/share/" (posix) #parts "//some/share/" (posix) + #parts "C:folder" (windows) #parts "C:folder" (windows) + block "/m" (posix) block "/m" (posix) + #parts "." (posix) #parts "." (posix) + #parts "/Users/foo/bar.cr" (posix) #parts "/Users/foo/bar.cr" (posix) + iterator "\\some\share\bar.cr" (windows) iterator "\\some\share\bar.cr" (windows) + #parts "//some/share" (windows) #parts "//some/share" (windows) + #parts "" (windows) #parts "" (windows) + #parts "C:\folder" (posix) #parts "C:\folder" (posix) + #parts "\\some\share\" (windows) #parts "\\some\share\" (windows) + #parts "m\a/b" (posix) #parts "m\a/b" (posix) + iterator "C:" (posix) iterator "C:" (posix) + block "\\some\share\bar.cr" (posix) block "\\some\share\bar.cr" (posix) + block "\Users\foo\bar.cr" (windows) block "\Users\foo\bar.cr" (windows) + block "" (windows) block "" (windows) + iterator ".\foo" (posix) iterator ".\foo" (posix) + #parts "foo/bar/." (posix) #parts "foo/bar/." (posix) + iterator "C:folder" (windows) iterator "C:folder" (windows) + block "\Users/foo\bar.cr" (windows) block "\Users/foo\bar.cr" (windows) + #parts "/m/" (windows) #parts "/m/" (windows) + block "foo/bar/.." (windows) block "foo/bar/.." (windows) + block "//some/share/" (posix) block "//some/share/" (posix) + iterator "\" (windows) iterator "\" (windows) + iterator "foo\" (posix) iterator "foo\" (posix) + iterator "./foo" (posix) iterator "./foo" (posix) + block "foo\" (windows) block "foo\" (windows) + #parts "\\some\share" (windows) #parts "\\some\share" (windows) + iterator "/foo" (windows) iterator "/foo" (windows) + block "/foo" (posix) block "/foo" (posix) + block "/foo" (windows) block "/foo" (windows) + #parts "foo\" (posix) #parts "foo\" (posix) + #parts "m" (posix) #parts "m" (posix) + block "\" (posix) block "\" (posix) + block "./foo" (windows) block "./foo" (windows) + block "m/" (windows) block "m/" (windows) + iterator "C:\" (windows) iterator "C:\" (windows) + iterator "\\some\share\" (posix) iterator "\\some\share\" (posix) + block "foo/bar/." (windows) block "foo/bar/." (windows) + iterator "C:" (windows) iterator "C:" (windows) + block "C:folder" (posix) block "C:folder" (posix) + iterator "////" (posix) iterator "////" (posix) + #parts "m\" (posix) #parts "m\" (posix) + block "C:\folder" (posix) block "C:\folder" (posix) + iterator "foo/bar/" (posix) iterator "foo/bar/" (posix) + block "m/.gitignore" (posix) block "m/.gitignore" (posix) + #parts "" (posix) #parts "" (posix) + #parts "foo/bar/" (posix) #parts "foo/bar/" (posix) + block "C:\." (windows) block "C:\." (windows) + #parts "\Users\foo\bar.cr" (windows) #parts "\Users\foo\bar.cr" (windows) + #parts "\\some\share\bar.cr" (posix) #parts "\\some\share\bar.cr" (posix) + block "foo/bar/../." (posix) block "foo/bar/../." (posix) + #parts "\Users/foo\bar.cr" (windows) #parts "\Users/foo\bar.cr" (windows) + block "m//a/b" (posix) block "m//a/b" (posix) + iterator "m//a/b" (windows) iterator "m//a/b" (windows) + block "C:\" (posix) block "C:\" (posix) + #parts "m//" (windows) #parts "m//" (windows) + block "foo\bar\" (windows) block "foo\bar\" (windows) + #parts "foo/bar/./." (posix) #parts "foo/bar/./." (posix) + iterator "\Users\foo\bar.cr" (posix) iterator "\Users\foo\bar.cr" (posix) + iterator ".\foo" (windows) iterator ".\foo" (windows) + block "./foo" (posix) block "./foo" (posix) + iterator "\" (posix) iterator "\" (posix) + #parts "foo/./bar/" (windows) #parts "foo/./bar/" (windows) + block "\" (windows) block "\" (windows) + iterator "//some/share/" (windows) iterator "//some/share/" (windows) + iterator "\Users\foo\bar.cr" (windows) iterator "\Users\foo\bar.cr" (windows) + #parts "Users/foo/bar.cr" (posix) #parts "Users/foo/bar.cr" (posix) + block "/m/" (windows) block "/m/" (windows) + block "foo/bar/" (windows) block "foo/bar/" (windows) + #parts "/foo" (windows) #parts "/foo" (windows) + #parts "\Users\foo\bar.cr" (posix) #parts "\Users\foo\bar.cr" (posix) + iterator "foo" (windows) iterator "foo" (windows) + #ends_with_separator? + "foo\" (posix) "foo\" (posix) + "foo/" (windows) "foo/" (windows) + "C:/" (posix) "C:/" (posix) + "foo\" (windows) "foo\" (windows) + "foo/" (posix) "foo/" (posix) + "C:/" (windows) "C:/" (windows) + "foo" (windows) "foo" (windows) + "foo/." (posix) "foo/." (posix) + "foo/bar" (windows) "foo/bar" (windows) + "foo/." (windows) "foo/." (windows) + "foo" (posix) "foo" (posix) + "foo/bar" (posix) "foo/bar" (posix) + .windows assert assert assert assert + joins components joins components assert assert - raises when mods by zero raises when mods by zero - does unary - does unary - - constants have right binary value constants have right binary value - hash - does for Float64 does for Float64 - does for Float32 does for Float32 - modulo + fails with null byte fails with null byte assert assert + #dirname + "C:\" (posix) "C:\" (posix) + "m" (windows) "m" (windows) + "/foo" (windows) "/foo" (windows) + "/foo//" (windows) "/foo//" (windows) + "C:/" (posix) "C:/" (posix) + "m//a/b" (posix) "m//a/b" (posix) + "foo" (posix) "foo" (posix) + "m//" (posix) "m//" (posix) + "foo/" (windows) "foo/" (windows) + "m" (posix) "m" (posix) + "m//a/b" (windows) "m//a/b" (windows) + "m/" (posix) "m/" (posix) + "C:" (windows) "C:" (windows) + "/m" (posix) "/m" (posix) + "C:" (posix) "C:" (posix) + "m/.gitignore" (posix) "m/.gitignore" (posix) + "m/.gitignore" (windows) "m/.gitignore" (windows) + "/m" (windows) "/m" (windows) + "/Users/foo/bar.cr" (posix) "/Users/foo/bar.cr" (posix) + "C:\" (windows) "C:\" (windows) + "/Users/foo/bar.cr" (windows) "/Users/foo/bar.cr" (windows) + "m//" (windows) "m//" (windows) + "C:/" (windows) "C:/" (windows) + "/foo" (posix) "/foo" (posix) + "/m/" (posix) "/m/" (posix) + "/foo//" (posix) "/foo//" (posix) + "m/" (windows) "m/" (windows) + "/m/" (windows) "/m/" (windows) + "/foo/" (windows) "/foo/" (windows) + "/foo/" (posix) "/foo/" (posix) + "foo/" (posix) "foo/" (posix) + "foo" (windows) "foo" (windows) + #root + "C:\foo" (windows) "C:\foo" (windows) + "//some/share" (posix) "//some/share" (posix) + "//foo" (posix) "//foo" (posix) + "\\foo" (posix) "\\foo" (posix) + "\\foo" (windows) "\\foo" (windows) + "/foo" (posix) "/foo" (posix) + "/foo" (windows) "/foo" (windows) + "C:foo" (windows) "C:foo" (windows) + "\foo" (posix) "\foo" (posix) + "\foo" (windows) "\foo" (windows) + "//foo" (windows) "//foo" (windows) + "//some/share" (windows) "//some/share" (windows) + "\\some\share" (posix) "\\some\share" (posix) + "\\some\share\" (windows) "\\some\share\" (windows) + "\\some\share\" (posix) "\\some\share\" (posix) + "C:\foo" (posix) "C:\foo" (posix) + "\\some\share" (windows) "\\some\share" (windows) + "C:/foo" (posix) "C:/foo" (posix) + "//some/share/" (posix) "//some/share/" (posix) + "C:foo" (posix) "C:foo" (posix) + "C:/foo" (windows) "C:/foo" (windows) + "//some/share/" (windows) "//some/share/" (windows) + #normalize + paths with backslash + removes . + normalizes "abc\." (windows) normalizes "abc\." (windows) + normalizes "abc\.\def" (posix) normalizes "abc\.\def" (posix) + normalizes "abc\.\def" (windows) normalizes "abc\.\def" (windows) + normalizes "\.\abc\def" (posix) normalizes "\.\abc\def" (posix) + normalizes "abc\." (posix) normalizes "abc\." (posix) + normalizes "\.\abc\def" (windows) normalizes "\.\abc\def" (windows) + already clean + normalizes "a\b\c" (windows) normalizes "a\b\c" (windows) + normalizes "..\.." (posix) normalizes "..\.." (posix) + normalizes "abc\def" (windows) normalizes "abc\def" (windows) + normalizes "\abc" (windows) normalizes "\abc" (windows) + normalizes "..\..\abc" (posix) normalizes "..\..\abc" (posix) + normalizes "\" (windows) normalizes "\" (windows) + normalizes "\abc" (posix) normalizes "\abc" (posix) + normalizes "a\b\c" (posix) normalizes "a\b\c" (posix) + normalizes "\" (posix) normalizes "\" (posix) + normalizes "..\..\abc" (windows) normalizes "..\..\abc" (windows) + normalizes "abc\def" (posix) normalizes "abc\def" (posix) + normalizes "..\.." (windows) normalizes "..\.." (windows) + removes .. + normalizes "abc\def\..\..\.." (posix) normalizes "abc\def\..\..\.." (posix) + normalizes "abc\def\..\ghi\..\jkl" (windows) normalizes "abc\def\..\ghi\..\jkl" (windows) + normalizes "\abc\def\..\..\.." (windows) normalizes "\abc\def\..\..\.." (windows) + normalizes "abc\def\..\.." (windows) normalizes "abc\def\..\.." (windows) + normalizes "abc\def\.." (posix) normalizes "abc\def\.." (posix) + normalizes "abc\def\..\.." (posix) normalizes "abc\def\..\.." (posix) + normalizes "abc\def\ghi\..\jkl" (posix) normalizes "abc\def\ghi\..\jkl" (posix) + normalizes "abc\def\..\..\.." (windows) normalizes "abc\def\..\..\.." (windows) + normalizes "abc\def\..\ghi\..\jkl" (posix) normalizes "abc\def\..\ghi\..\jkl" (posix) + normalizes "\abc\def\..\..\.." (posix) normalizes "\abc\def\..\..\.." (posix) + normalizes "abc\def\..\..\..\ghi\jkl\..\..\..\mno" (posix) normalizes "abc\def\..\..\..\ghi\jkl\..\..\..\mno" (posix) + normalizes "\abc\def\..\.." (posix) normalizes "\abc\def\..\.." (posix) + normalizes "abc\def\.." (windows) normalizes "abc\def\.." (windows) + normalizes "abc\def\ghi\..\jkl" (windows) normalizes "abc\def\ghi\..\jkl" (windows) + normalizes "\abc\def\..\.." (windows) normalizes "\abc\def\..\.." (windows) + normalizes "abc\def\..\..\..\ghi\jkl\..\..\..\mno" (windows) normalizes "abc\def\..\..\..\ghi\jkl\..\..\..\mno" (windows) + removes double slash + normalizes "abc\\def\\ghi" (windows) normalizes "abc\\def\\ghi" (windows) + normalizes "abc\\def\\ghi" (posix) normalizes "abc\\def\\ghi" (posix) + normalizes "\\abc" (posix) normalizes "\\abc" (posix) + normalizes "\\abc\\" (windows) normalizes "\\abc\\" (windows) + normalizes "\\abc\\" (posix) normalizes "\\abc\\" (posix) + normalizes "\\\abc" (posix) normalizes "\\\abc" (posix) + normalizes "abc\\" (posix) normalizes "abc\\" (posix) + normalizes "\\\abc" (windows) normalizes "\\\abc" (windows) + normalizes "\\abc" (windows) normalizes "\\abc" (windows) + normalizes "abc\\" (windows) normalizes "abc\\" (windows) + combinations + normalizes "abc\..\..\.\.\..\def" (posix) normalizes "abc\..\..\.\.\..\def" (posix) + normalizes "abc\\.\..\def" (windows) normalizes "abc\\.\..\def" (windows) + normalizes "abc\.\..\def" (windows) normalizes "abc\.\..\def" (windows) + normalizes "abc\\.\..\def" (posix) normalizes "abc\\.\..\def" (posix) + normalizes "abc\.\..\def" (posix) normalizes "abc\.\..\def" (posix) + normalizes "abc\..\..\.\.\..\def" (windows) normalizes "abc\..\..\.\.\..\def" (windows) + removes trailing slash + normalizes "abc\" (posix) normalizes "abc\" (posix) + normalizes "abc\def\" (windows) normalizes "abc\def\" (windows) + normalizes "a\b\c\" (windows) normalizes "a\b\c\" (windows) + normalizes "abc\" (windows) normalizes "abc\" (windows) + normalizes "..\" (posix) normalizes "..\" (posix) + normalizes "\abc\" (windows) normalizes "\abc\" (windows) + normalizes "a\b\c\" (posix) normalizes "a\b\c\" (posix) + normalizes ".\" (posix) normalizes ".\" (posix) + normalizes "abc\def\" (posix) normalizes "abc\def\" (posix) + normalizes ".\" (windows) normalizes ".\" (windows) + normalizes "..\" (windows) normalizes "..\" (windows) + normalizes "..\..\" (posix) normalizes "..\..\" (posix) + normalizes "..\..\" (windows) normalizes "..\..\" (windows) + normalizes "\abc\" (posix) normalizes "\abc\" (posix) + path with forward slash + removes . + normalizes "abc/." (posix) normalizes "abc/." (posix) + normalizes "abc/./def" (windows) normalizes "abc/./def" (windows) + normalizes "abc/." (windows) normalizes "abc/." (windows) + normalizes "/./abc/def" (posix) normalizes "/./abc/def" (posix) + normalizes "abc/./def" (posix) normalizes "abc/./def" (posix) + normalizes "/./abc/def" (windows) normalizes "/./abc/def" (windows) + removes trailing slash + normalizes "../" (posix) normalizes "../" (posix) + normalizes "a/b/c/" (windows) normalizes "a/b/c/" (windows) + normalizes "../" (windows) normalizes "../" (windows) + normalizes "abc/" (windows) normalizes "abc/" (windows) + normalizes "abc/def/" (posix) normalizes "abc/def/" (posix) + normalizes "abc/" (posix) normalizes "abc/" (posix) + normalizes "../../" (windows) normalizes "../../" (windows) + normalizes "a/b/c/" (posix) normalizes "a/b/c/" (posix) + normalizes "/abc/" (posix) normalizes "/abc/" (posix) + normalizes "../../" (posix) normalizes "../../" (posix) + normalizes "./" (windows) normalizes "./" (windows) + normalizes "/abc/" (windows) normalizes "/abc/" (windows) + normalizes "abc/def/" (windows) normalizes "abc/def/" (windows) + normalizes "./" (posix) normalizes "./" (posix) + removes double slash + normalizes "//abc" (windows) normalizes "//abc" (windows) + normalizes "abc//def//ghi" (windows) normalizes "abc//def//ghi" (windows) + normalizes "abc//" (windows) normalizes "abc//" (windows) + normalizes "abc//" (posix) normalizes "abc//" (posix) + normalizes "///abc" (windows) normalizes "///abc" (windows) + normalizes "//abc" (posix) normalizes "//abc" (posix) + normalizes "//abc//" (windows) normalizes "//abc//" (windows) + normalizes "abc//def//ghi" (posix) normalizes "abc//def//ghi" (posix) + normalizes "///abc" (posix) normalizes "///abc" (posix) + normalizes "//abc//" (posix) normalizes "//abc//" (posix) + combinations + normalizes "abc/../../././../def" (windows) normalizes "abc/../../././../def" (windows) + normalizes "abc//./../def" (posix) normalizes "abc//./../def" (posix) + normalizes "abc//./../def" (windows) normalizes "abc//./../def" (windows) + normalizes "abc/./../def" (windows) normalizes "abc/./../def" (windows) + normalizes "abc/./../def" (posix) normalizes "abc/./../def" (posix) + normalizes "abc/../../././../def" (posix) normalizes "abc/../../././../def" (posix) + removes .. + normalizes "abc/def/../../.." (posix) normalizes "abc/def/../../.." (posix) + normalizes "abc/def/ghi/../jkl" (windows) normalizes "abc/def/ghi/../jkl" (windows) + normalizes "abc/def/ghi/../jkl" (posix) normalizes "abc/def/ghi/../jkl" (posix) + normalizes "abc/def/.." (windows) normalizes "abc/def/.." (windows) + normalizes "/abc/def/../.." (windows) normalizes "/abc/def/../.." (windows) + normalizes "/abc/def/../../.." (windows) normalizes "/abc/def/../../.." (windows) + normalizes "/abc/def/../../.." (posix) normalizes "/abc/def/../../.." (posix) + normalizes "abc/def/../ghi/../jkl" (posix) normalizes "abc/def/../ghi/../jkl" (posix) + normalizes "abc/def/../../.." (windows) normalizes "abc/def/../../.." (windows) + normalizes "abc/def/../../../ghi/jkl/../../../mno" (posix) normalizes "abc/def/../../../ghi/jkl/../../../mno" (posix) + normalizes "abc/def/.." (posix) normalizes "abc/def/.." (posix) + normalizes "abc/def/../.." (windows) normalizes "abc/def/../.." (windows) + normalizes "abc/def/../ghi/../jkl" (windows) normalizes "abc/def/../ghi/../jkl" (windows) + normalizes "/abc/def/../.." (posix) normalizes "/abc/def/../.." (posix) + normalizes "abc/def/../../../ghi/jkl/../../../mno" (windows) normalizes "abc/def/../../../ghi/jkl/../../../mno" (windows) + normalizes "abc/def/../.." (posix) normalizes "abc/def/../.." (posix) + already clean + normalizes "a/b/c" (posix) normalizes "a/b/c" (posix) + normalizes "." (posix) normalizes "." (posix) + normalizes "abc" (windows) normalizes "abc" (windows) + normalizes "" (windows) normalizes "" (windows) + normalizes ".." (posix) normalizes ".." (posix) + normalizes "../.." (posix) normalizes "../.." (posix) + normalizes "" (posix) normalizes "" (posix) + normalizes "abc" (posix) normalizes "abc" (posix) + normalizes "abc/def" (posix) normalizes "abc/def" (posix) + normalizes ".." (windows) normalizes ".." (windows) + normalizes "../../abc" (posix) normalizes "../../abc" (posix) + normalizes "/" (windows) normalizes "/" (windows) + normalizes "abc/def" (windows) normalizes "abc/def" (windows) + normalizes "../.." (windows) normalizes "../.." (windows) + normalizes "../../abc" (windows) normalizes "../../abc" (windows) + normalizes "." (windows) normalizes "." (windows) + normalizes "a/b/c" (windows) normalizes "a/b/c" (windows) + normalizes "/" (posix) normalizes "/" (posix) + normalizes "/abc" (posix) normalizes "/abc" (posix) + normalizes "/abc" (windows) normalizes "/abc" (windows) + with drive + normalizes "C:\foo" (posix) normalizes "C:\foo" (posix) + normalizes "C:\" (windows) normalizes "C:\" (windows) + normalizes "C:foo" (windows) normalizes "C:foo" (windows) + normalizes "C:" (windows) normalizes "C:" (windows) + normalizes "C:" (posix) normalizes "C:" (posix) + normalizes "C:\foo" (windows) normalizes "C:\foo" (windows) + normalizes "C:foo" (posix) normalizes "C:foo" (posix) + normalizes "C:/foo" (windows) normalizes "C:/foo" (windows) + normalizes "C:/foo" (posix) normalizes "C:/foo" (posix) + normalizes "C:/" (windows) normalizes "C:/" (windows) + normalizes "C:/" (posix) normalizes "C:/" (posix) + normalizes "C:\" (posix) normalizes "C:\" (posix) + #<=> + case sensitivity case sensitivity +p + can be used with tuples can be used with tuples +Float32 + #to_hexfloat + trimming + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + exponents + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + hexits + assert assert + assert assert + assert assert + assert assert + corner cases + assert assert + assert assert + assert assert + assert assert + assert assert + special cases + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + .parse_hexfloat assert assert assert assert assert assert @@ -30586,8 +26576,6 @@ assert assert assert assert assert assert - raises when mods by zero raises when mods by zero - #integer? assert assert assert assert assert assert @@ -30596,9 +26584,37 @@ assert assert assert assert assert assert + invalid hexfloats + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert assert assert assert assert - ** assert assert assert assert assert assert @@ -30607,15 +26623,22 @@ assert assert assert assert assert assert - does finite? does finite? - #prev_float - does for f32 does for f32 - does for f64 does for f64 - divmod assert assert assert assert assert assert assert assert + special cases + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert assert assert assert assert assert assert @@ -30623,11 +26646,160 @@ assert assert assert assert assert assert + values close to zero + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert assert assert assert assert assert assert assert assert assert assert + values close to MIN_POSITIVE and MAX + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert assert assert assert assert assert assert @@ -30636,585 +26808,320 @@ assert assert assert assert assert assert - returns nil in <=> for NaN values (Float32) returns nil in <=> for NaN values (Float32) - clones clones - #inspect - does inspect for f32 does inspect for f32 - does inspect for f64 with IO does inspect for f64 with IO - does inspect for f32 does inspect for f32 - does inspect for f64 does inspect for f64 +pp + can be used with tuples can be used with tuples +Indexable::Mutable(T) + #map! + replaces each element with the block value replaces each element with the block value + #update + updates the value at the given index with the block updates the value at the given index with the block + raises on out-of-bound indices raises on out-of-bound indices + wraps negative indices wraps negative indices + #[]= + wraps negative indices wraps negative indices + raises on out-of-bound indices raises on out-of-bound indices + sets the value at the given index sets the value at the given index + #shuffle! + randomizes the order of all elements randomizes the order of all elements + #map_with_index! + without offset + yields each element and index to the block yields each element and index to the block + with offset + yields each element and index plus offset to the block yields each element and index plus offset to the block + #reverse! + reverses the order of all elements in place reverses the order of all elements in place + #swap + wraps negative indices wraps negative indices + raises on out-of-bound indices raises on out-of-bound indices + exchanges the values at two indices exchanges the values at two indices + #fill + with block + range + sets zero elements sets zero elements + yields index to the block and sets elements in a subrange yields index to the block and sets elements in a subrange + raises on out of bound start index raises on out of bound start index + with block + start + count + raises on out of bound start index raises on out of bound start index + yields index to the block and sets elements in a subrange yields index to the block and sets elements in a subrange + sets zero elements sets zero elements + without block + sets all elements to the same value sets all elements to the same value + without block, with range + sets zero elements sets zero elements + sets a subrange of elements to the same value sets a subrange of elements to the same value + raises on out of bound start index raises on out of bound start index + without block, with start + count + sets zero elements sets zero elements + raises on out of bound start index raises on out of bound start index + sets a subrange of elements to the same value sets a subrange of elements to the same value + with block + yields index to the block and sets all elements yields index to the block and sets all elements + with block + offset + yields index plus offset to the block and sets all elements yields index plus offset to the block and sets all elements + #rotate! + left-shifts all elements left-shifts all elements +Digest::SHA256 + does digest for "" in a block does digest for "" in a block + digest with file content digest with file content + does hexdigest for "" does hexdigest for "" + resets resets + does digest for "abc" in a block does digest for "abc" in a block + does digest for "The quick brown fox jumps over the lazy dog" in a block does digest for "The quick brown fox jumps over the lazy dog" in a block + resets resets + #hexdigest can update within a loop from explicit expr (#9483) #hexdigest can update within a loop from explicit expr (#9483) + #hexdigest can update within a loop by indirect expr (#9483) #hexdigest can update within a loop by indirect expr (#9483) + can't call #final more than once can't call #final more than once + does digest for "a" does digest for "a" + does digest for "0123456701234567012345670123456701234567012345670123456701234567" does digest for "0123456701234567012345670123456701234567012345670123456701234567" + does digest for "fooø" does digest for "fooø" + does digest for "a" in a block does digest for "a" in a block + resets resets + can't call #final more than once can't call #final more than once + resets resets + does base64digest for "" does base64digest for "" + does base64digest for "fooø" does base64digest for "fooø" + resets resets + does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567" does hexdigest for "0123456701234567012345670123456701234567012345670123456701234567" + does hexdigest for "a" does hexdigest for "a" + does digest for "abc" does digest for "abc" + does digest for "The quick brown fox jumps over the lazy dog" does digest for "The quick brown fox jumps over the lazy dog" + resets resets + does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block does digest for "0123456701234567012345670123456701234567012345670123456701234567" in a block + does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + can't call #final more than once can't call #final more than once + does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block does digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" in a block + does hexdigest for "fooø" does hexdigest for "fooø" + does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does base64digest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + context are independent context are independent + .dup + leads to deterministic updates leads to deterministic updates + preserves value preserves value + leads to not sharing state leads to not sharing state + preserves type preserves type + resets resets + does digest for "fooø" in a block does digest for "fooø" in a block + does base64digest for "a" does base64digest for "a" + does digest for "" does digest for "" + does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" does hexdigest for "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + does base64digest for "The quick brown fox jumps over the lazy dog" does base64digest for "The quick brown fox jumps over the lazy dog" + can't call #final more than once can't call #final more than once + can't call #final more than once can't call #final more than once + does hexdigest for "abc" does hexdigest for "abc" + does base64digest for "0123456701234567012345670123456701234567012345670123456701234567" does base64digest for "0123456701234567012345670123456701234567012345670123456701234567" + does hexdigest for "The quick brown fox jumps over the lazy dog" does hexdigest for "The quick brown fox jumps over the lazy dog" + can't call #final more than once can't call #final more than once + does base64digest for "abc" does base64digest for "abc" + can't call #final more than once can't call #final more than once + returns the digest_size returns the digest_size +HTTP::Server + #bind_tls + binds SSL server context binds SSL server context + doesn't raise on accept after close #2692 doesn't raise on accept after close #2692 + binds to unused port binds to unused port + #max_headers_size + sets and gets size sets and gets size + respects size on request respects size on request + #close + closes gracefully closes gracefully + closes the server closes the server + can process simultaneous SSL handshakes can process simultaneous SSL handshakes + reuses the TCP port (SO_REUSEPORT) reuses the TCP port (SO_REUSEPORT) + lists addresses lists addresses + handles exception during SSL handshake (#6577) handles exception during SSL handshake (#6577) + handles Expect: 100-continue correctly when body is read handles Expect: 100-continue correctly when body is read + #remote_address / #local_address + for https server for https server + for http server for http server + handles Expect: 100-continue correctly when body isn't read handles Expect: 100-continue correctly when body isn't read + binds to different ports binds to different ports + #bind + fails after close fails after close + with URI + accepts String accepts String + accepts URI accepts URI + parses SSL parses SSL + parses TCP parses TCP + fails with unknown scheme fails with unknown scheme + fails SSL with invalid params fails SSL with invalid params + fails after listen fails after listen + #max_request_line_size + respects size on request respects size on request + sets and gets size sets and gets size + #listen + fails after listen fails after listen + fails after close fails after close + #bind_unix + binds to different unix sockets binds to different unix sockets + #max_request_line_size + respects size on request respects size on request + sets and gets size sets and gets size +System::Group + .find_by?(*, name) + returns a group by name returns a group by name + returns nil on nonexistent group returns nil on nonexistent group #to_s - does to_s for f32 does to_s for f32 - does to_s for f64 does to_s for f64 - round - assert assert - assert assert - assert assert -OAuth::Consumer - gets authorize uri - without custom authorize uri without custom authorize uri - with absolute uri with absolute uri - with callback url with callback url - without callback url without callback url - without block without block -OAuth2::AccessToken::Mac - dumps to json dumps to json - builds from json builds from json - authenticates request authenticates request - builds with null refresh token builds with null refresh token - computes signature computes signature -Spec::ExampleGroup - #all_tags - should include ancestor tags should include ancestor tags - #randomize - with a seed with a seed - by default by default - #report - should include parent's description should include parent's description -XML::Reader - #expand - raises an exception if the node could not be expanded raises an exception if the node could not be expanded - parses the content of the node and subtree parses the content of the node and subtree - is only available until the next read is only available until the next read - #value - reads node text value reads node text value - #read - reads all nodes reads all nodes - reads all non-blank nodes with NOBLANKS option reads all non-blank nodes with NOBLANKS option - #attributes_count - returns the node's number of attributes returns the node's number of attributes - #next_sibling - reads next sibling node in doc order, skipping subtrees reads next sibling node in doc order, skipping subtrees - #empty_element? - checks if the node is empty checks if the node is empty - .new - with default parser options - can be initialized from an io can be initialized from an io - can be initialized from a string can be initialized from a string - with custom parser options - can be initialized from a string can be initialized from a string - can be initialized from an io can be initialized from an io - #depth - returns the depth of the node returns the depth of the node - #expand? - parses the content of the node and subtree parses the content of the node and subtree - is only available until the next read is only available until the next read + returns a string representation returns a string representation + .find_by(*, name) + raises on nonexistent group raises on nonexistent group + returns a group by name returns a group by name + .find_by?(*, id) + returns nil on nonexistent group id returns nil on nonexistent group id + returns a group by id returns a group by id #name - reads node name reads node name - #read_inner_xml - reads the contents of the node including child nodes and markup reads the contents of the node including child nodes and markup - #move_to_next_attribute - moves to the next attribute of the node moves to the next attribute of the node - #has_attributes? - checks if the node has attributes checks if the node has attributes - #[] - reads node attributes reads node attributes - raises if attribute contains null byte raises if attribute contains null byte - #move_to_attribute - raises if attribute contains null byte raises if attribute contains null byte - moves to attribute with the specified name moves to attribute with the specified name - #move_to_element - moves to the element node that contains the current attribute node moves to the element node that contains the current attribute node - #node_type - returns the node type returns the node type - #next - reads next node in doc order, skipping subtrees reads next node in doc order, skipping subtrees - #move_to_first_attribute - moves to the first attribute of the node moves to the first attribute of the node - #to_unsafe - returns a pointer to the underlying LibXML::XMLTextReader returns a pointer to the underlying LibXML::XMLTextReader - #[]? - raises if attribute contains null byte raises if attribute contains null byte - reads node attributes reads node attributes - #read_outer_xml - reads the xml of the node including child nodes and markup reads the xml of the node including child nodes and markup -UDPSocket - using IPv4 - sends and receives messages sends and receives messages - #bind #bind - joins and transmits to multicast groups joins and transmits to multicast groups - using IPv6 - joins and transmits to multicast groups joins and transmits to multicast groups - #bind #bind - sends and receives messages sends and receives messages - sends broadcast message sends broadcast message - #remote_address resets after connect #remote_address resets after connect - #connect with a IPv6 address #connect with a IPv6 address -colorize - colorizes background with 8-bit color colorizes background with 8-bit color - inspects inspects - colorizes foreground with background colorizes foreground with background - colorizes mode with symbol colorizes mode with symbol - colorizes background colorizes background - colorizes with surround colorizes with surround - raises on unknown foreground color raises on unknown foreground color - colorizes foreground with 8-bit color colorizes foreground with 8-bit color - colorizes with surround and reset colorizes with surround and reset - colorizes with surround and no reset colorizes with surround and no reset - colorizes foreground with symbol colorizes foreground with symbol - toggles off and on toggles off and on - colorizes foreground with background with mode colorizes foreground with background with mode - colorizes mode colorizes mode - colorizes mode combination colorizes mode combination - colorizes background with true color colorizes background with true color - colorizes with to_s colorizes with to_s - colorizes without change colorizes without change - colorizes with surround and default colorizes with surround and default - colorizes foreground with true color colorizes foreground with true color - raises on unknown background color raises on unknown background color - toggles off toggles off - colorizes foreground colorizes foreground -exit - exits normally with status 0 exits normally with status 0 - exits with given error code exits with given error code -IO::Delimited - #write - raises raises - #read - with partial read - handles partial reads handles partial reads - without peeking - doesn't clobber the buffer on closely-offset partial matches doesn't clobber the buffer on closely-offset partial matches - doesn't read past the limit doesn't read past the limit - doesn't clobber active_delimiter_buffer doesn't clobber active_delimiter_buffer - handles the delimiter at the end handles the delimiter at the end - handles nearly a delimiter at the end handles nearly a delimiter at the end - doesn't read past the limit (char-by-char) doesn't read past the limit (char-by-char) - handles the delimiter at the start handles the delimiter at the start - with peeking - handles the case of peek matching first byte, not having enough room, but later matching handles the case of peek matching first byte, not having enough room, but later matching - handles the case of peek matching first byte, not having enough room, but rest not immediately matching (with a potential match afterwards) handles the case of peek matching first byte, not having enough room, but rest not immediately matching (with a potential match afterwards) - can peek if first byte found but doesn't fully match, and there's that first byte again in the peek buffer can peek if first byte found but doesn't fully match, and there's that first byte again in the peek buffer - can peek if first byte found but doesn't fully match, and the byte isn't there in the peek buffer can peek if first byte found but doesn't fully match, and the byte isn't there in the peek buffer - doesn't read past the limit, single byte doesn't read past the limit, single byte - doesn't read past the limit (char-by-char) doesn't read past the limit (char-by-char) - handles the case of peek matching first byte, not having enough room, but later not matching (limted slice) handles the case of peek matching first byte, not having enough room, but later not matching (limted slice) - handles nearly a delimiter at the end handles nearly a delimiter at the end - handles the case of peek matching first byte, not having enough room, but rest not matching handles the case of peek matching first byte, not having enough room, but rest not matching - handles the case of peek matching first byte, not having enough room, later only partially matching handles the case of peek matching first byte, not having enough room, later only partially matching - doesn't read past the limit doesn't read past the limit - doesn't clobber the buffer on closely-offset partial matches doesn't clobber the buffer on closely-offset partial matches - handles the case of peek matching first byte, not having enough room, but later not matching handles the case of peek matching first byte, not having enough room, but later not matching - handles the delimiter at the end handles the delimiter at the end - peeks, everything matches but we can't know what will happen after that peeks, everything matches but we can't know what will happen after that - handles the case of the active delimited buffer including the delimiter handles the case of the active delimited buffer including the delimiter - doesn't clobber active_delimiter_buffer doesn't clobber active_delimiter_buffer - handles the delimiter at the start handles the delimiter at the start - returns empty when there's no data returns empty when there's no data - #close - closes the underlying stream if sync_close is true closes the underlying stream if sync_close is true - stops reading stops reading - #gets with peeking when can't peek - peeks peeks - gets gets -BigInt Math - pw2ceil pw2ceil - sqrt sqrt - isqrt isqrt -OpenSSL::PKCS5 - computes pbkdf2_hmac SHA384 computes pbkdf2_hmac SHA384 - computes pbkdf2_hmac MD5 computes pbkdf2_hmac MD5 - computes pbkdf2_hmac SHA256 computes pbkdf2_hmac SHA256 - computes pbkdf2_hmac SHA224 computes pbkdf2_hmac SHA224 - computes pbkdf2_hmac MD5 computes pbkdf2_hmac MD5 - computes pbkdf2_hmac SHA256 computes pbkdf2_hmac SHA256 - computes pbkdf2_hmac_sha1 computes pbkdf2_hmac_sha1 - computes pbkdf2_hmac SHA1 computes pbkdf2_hmac SHA1 - computes pbkdf2_hmac SHA512 computes pbkdf2_hmac SHA512 - computes pbkdf2_hmac SHA384 computes pbkdf2_hmac SHA384 - computes pbkdf2_hmac SHA256 computes pbkdf2_hmac SHA256 - computes pbkdf2_hmac MD5 computes pbkdf2_hmac MD5 - computes pbkdf2_hmac SHA512 computes pbkdf2_hmac SHA512 - computes pbkdf2_hmac SHA1 computes pbkdf2_hmac SHA1 - computes pbkdf2_hmac SHA1 computes pbkdf2_hmac SHA1 - computes pbkdf2_hmac MD5 computes pbkdf2_hmac MD5 - computes pbkdf2_hmac SHA224 computes pbkdf2_hmac SHA224 - computes pbkdf2_hmac SHA256 computes pbkdf2_hmac SHA256 - computes pbkdf2_hmac SHA224 computes pbkdf2_hmac SHA224 - computes pbkdf2_hmac SHA512 computes pbkdf2_hmac SHA512 - computes pbkdf2_hmac SHA512 computes pbkdf2_hmac SHA512 - computes pbkdf2_hmac SHA1 computes pbkdf2_hmac SHA1 - computes pbkdf2_hmac SHA384 computes pbkdf2_hmac SHA384 - computes pbkdf2_hmac SHA224 computes pbkdf2_hmac SHA224 - computes pbkdf2_hmac SHA384 computes pbkdf2_hmac SHA384 -Compress::Deflate::Reader - should rewind should rewind - should read byte by byte (#4192) should read byte by byte (#4192) - .open - yields itself to block yields itself to block -Socket::Addrinfo - #ip_address + is the same as the source name is the same as the source name + .find_by(*, id) + raises on nonexistent group name raises on nonexistent group name + returns a group by id returns a group by id + #id + is the same as the source ID is the same as the source ID +Bool + to_unsafe assert assert - .udp - yields each result yields each result - returns an array returns an array - .tcp - returns an array returns an array - yields each result yields each result - Error - .new (deprecated) .new (deprecated) - #inspect #inspect - .resolve - eventually raises returned error eventually raises returned error - returns an array returns an array - yields each result yields each result - raises helpful message on getaddrinfo failure raises helpful message on getaddrinfo failure -HTML - .unescape - numeric entities - does not escape non-space unicode control characters does not escape non-space unicode control characters - does not unescape Char::MAX_CODEPOINT does not unescape Char::MAX_CODEPOINT - does not escape noncharacter codepoints does not escape noncharacter codepoints - ISO-8859-1 replacement ISO-8859-1 replacement - decimal decimal - does not unescape characters above Char::MAX_CODEPOINT does not unescape characters above Char::MAX_CODEPOINT - space characters space characters - early termination early termination - hex hex - does not escape unicode surrogate characters does not escape unicode surrogate characters - ignores leading zeros ignores leading zeros - empty entity empty entity - unescapes javascript example from a string unescapes javascript example from a string - identity identity - invalid utf-8 invalid utf-8 - named entities - entity with numerical characters entity with numerical characters - without trailing semicolon without trailing semicolon - simple named entities simple named entities - multi codepoint multi codepoint - invalid entities invalid entities - end of string end of string - .escape - escapes dangerous characters from a string escapes dangerous characters from a string - does not change a safe string does not change a safe string -VaList - works with C code works with C code -BigRational - #>> #>> - #tdiv #tdiv - #to_f64 #to_f64 - #to_f32 #to_f32 - #to_f32! #to_f32! - #to_s #to_s - Float32#to_big_r Float32#to_big_r - clones clones - #// #// - BigDecimal#to_big_r BigDecimal#to_big_r - .new - raises if creating from NaN raises if creating from NaN - initialize initialize - raises if creating from infinity raises if creating from infinity - initializes from BigFloat with high precision initializes from BigFloat with high precision - #to_f! #to_f! - #trunc #trunc - #<=> - Int and Comparable Int and Comparable - compares against NaNs compares against NaNs - Float and Comparable Float and Comparable - BigInt and Comparable BigInt and Comparable - BigRational and Comparable BigRational and Comparable - BigFloat and Comparable BigFloat and Comparable - #round - rounding modes - default (=ties_even) default (=ties_even) - to_positive to_positive - ties_away ties_away - ties_even ties_even - to_zero to_zero - to_negative to_negative - Int#to_big_r Int#to_big_r - #% #% - #- (negation) #- (negation) - #+ #+ - #- #- - #* #* - #** - exponentiates with positive powers exponentiates with positive powers - exponentiates with negative powers exponentiates with negative powers - cannot raise 0 to a negative power cannot raise 0 to a negative power - #/ #/ - #ceil #ceil - #inspect assert assert - #format #format - Float64#to_big_r Float64#to_big_r - #to_big_f #to_big_f - #integer? + ! assert assert assert assert + | assert assert assert assert assert assert assert assert - #to_big_r #to_big_r - #to_f64! #to_f64! - #numerator #numerator - #inv #inv - #denominator #denominator - #remainder #remainder - #<< #<< - #floor #floor - #to_f #to_f - is a number is a number - #abs #abs -Mutex - checked - raises if locked recursively raises if locked recursively - raises if unlocks without lock raises if unlocks without lock - can't be unlocked by another fiber can't be unlocked by another fiber - reentrant - can't be unlocked by another fiber can't be unlocked by another fiber - can be locked many times from the same fiber can be locked many times from the same fiber - raises if unlocks without lock raises if unlocks without lock - works with multiple threads works with multiple threads - locks and unlocks locks and unlocks - unchecked - can lock and unlock from multiple fibers can lock and unlock from multiple fibers -OAuth2::AccessToken::Bearer - builds from json with unknown key (#4437) builds from json with unknown key (#4437) - dumps to json dumps to json - authenticates request authenticates request - builds from json without token_type, assumes Bearer (#4503) builds from json without token_type, assumes Bearer (#4503) - builds from json builds from json - builds from json without expires_in (#4041) builds from json without expires_in (#4041) -Slice - #same? #same? - does Bytes[] does Bytes[] - does []? with range does []? with range - does map_with_index!, with offset does map_with_index!, with offset - .copy_to(Slice) - raises if dst is smaller raises if dst is smaller - copies at most src.size copies at most src.size - copies bytes copies bytes - shuffles shuffles - does macro [] does macro [] - does [] does [] - raises if size is negative on new raises if size is negative on new - does []? with start and count does []? with start and count - .additive_identity - returns an empty slice returns an empty slice - #hexdump - works for empty slice works for empty slice - works for Bytes works for Bytes - "#reverse_each" iterator "#reverse_each" iterator - does copy_from pointer does copy_from pointer - creates read-only slice creates read-only slice - does macro [] with numbers (#3055) does macro [] with numbers (#3055) - does map! does map! - #clone - buffer copy buffer copy - clones primitive clones primitive - deep copy deep copy - clones non-primitive clones non-primitive - #[] keeps read-only value #[] keeps read-only value - "#each" yielding "#each" yielding - creates empty slice creates empty slice - does rindex does rindex - .copy_from(Slice) - copies at most src.size copies at most src.size - copies bytes copies bytes - raises if dst is smaller raises if dst is smaller - #unsafe_slice_of - reinterprets a slice's elements reinterprets a slice's elements - reverses reverses - "#each_index" iterator "#each_index" iterator - #to_unsafe_bytes - reinterprets a slice's elements as bytes reinterprets a slice's elements as bytes - optimizes hash for Bytes optimizes hash for Bytes - #hexstring - works for Bytes works for Bytes - does to_s for bytes does to_s for bytes - #[] #[] - uses percent vars in [] macro (#2954) uses percent vars in [] macro (#2954) - does to_s does to_s - == - does == does == - does == with same type, different runtime instances does == with same type, different runtime instances - does == for bytes does == for bytes - does bytesize does bytesize - gets pointer and size gets pointer and size - does map_with_index, with offset does map_with_index, with offset - "#each" iterator "#each" iterator - #dup - don't deep copy don't deep copy - buffer copy buffer copy - .move_to(Slice) - handles intersecting ranges handles intersecting ranges - moves bytes moves bytes - raises if dst is smaller raises if dst is smaller - moves most src.size moves most src.size - does [] with start and count does [] with start and count - #+(Slice) - concatenates two slices concatenates two slices - .move_from(Slice) - handles intersecting ranges handles intersecting ranges - moves bytes moves bytes - raises if dst is smaller raises if dst is smaller - moves at most src.size moves at most src.size - does to_a does to_a - does map_with_index does map_with_index - does map does map - sort - #sort! - can sort! just by using <=> (#6608) can sort! just by using <=> (#6608) - without block without block - stable sort with a block stable sort with a block - raises if sort! block returns nil raises if sort! block returns nil - raises if <=> returns nil raises if <=> returns nil - sorts with invalid block (#4379) sorts with invalid block (#4379) - stable sort without a block stable sort without a block - with a block with a block - #sort - stable sort without a block stable sort without a block - without block without block - with a block with a block - stable sort with a block stable sort with a block - #sort_by - sorts sorts - stable sort stable sort - #unstable_sort - without block without block - with a block with a block - #unstable_sort_by - sorts sorts - #unstable_sort! - without block without block - raises if <=> returns nil raises if <=> returns nil - raises if sort! block returns nil raises if sort! block returns nil - with a block with a block - sorts with invalid block (#4379) sorts with invalid block (#4379) - can sort! just by using <=> (#6608) can sort! just by using <=> (#6608) - #unstable_sort_by - sorts sorts - calls given block exactly once for each element calls given block exactly once for each element - #sort_by - stable sort stable sort - sorts sorts - calls given block exactly once for each element calls given block exactly once for each element - .join - concatenates a slice of slices concatenates a slice of slices - concatenates an empty indexable of slices concatenates an empty indexable of slices - concatenates an indexable of slices concatenates an indexable of slices - rotate! + & assert assert assert assert assert assert assert assert + clone assert assert assert assert + to_s assert assert assert assert + ^ assert assert assert assert assert assert assert assert + hash assert assert - "#reverse_each" yielding "#reverse_each" yielding - <=> - compares (UInt8) compares (UInt8) - is comparable is comparable - compares compares - does copy_to pointer does copy_to pointer - hashes each item in collection hashes each item in collection - #+(Int) #+(Int) - "#each_index" yielding "#each_index" yielding - does []= does []= - does []? does []? - #fill - works for bytes works for bytes - replaces values in a subrange replaces values in a subrange - does map_with_index! does map_with_index! - does empty? does empty? -UUID - serializes - #to_json #to_json - from_json_object_key? from_json_object_key? +.__powidf2 .__powidf2 +#to_www_form + Number Number + Enum Enum + Bool Bool + String String + Array(T) + of a union of types of a union of types + of a single type of a single type + Nil Nil + Time Time String#each_grapheme + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator @@ -31223,23 +27130,39 @@ string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding @@ -31249,7 +27172,7 @@ string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator @@ -31260,15 +27183,29 @@ string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -31276,39 +27213,53 @@ string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator @@ -31316,35 +27267,48 @@ string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + GB9c GB9c string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding @@ -31353,6 +27317,13 @@ string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding @@ -31362,65 +27333,90 @@ string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator + GB9c GB9c string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + GB9c GB9c + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding @@ -31431,31 +27427,39 @@ string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator @@ -31466,21 +27470,29 @@ string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -31489,35 +27501,47 @@ string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator @@ -31525,21 +27549,18 @@ string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -31547,83 +27568,99 @@ string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - GB9c GB9c - GB9c GB9c + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -31632,86 +27669,90 @@ string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator @@ -31720,15 +27761,11 @@ string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -31737,8 +27774,6 @@ string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator @@ -31747,21 +27782,26 @@ string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator @@ -31769,18 +27809,14 @@ string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding @@ -31789,12 +27825,11 @@ string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator @@ -31806,30 +27841,37 @@ string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator @@ -31837,54 +27879,54 @@ string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding - GB9c GB9c string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator + GB9c GB9c string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator @@ -31896,7 +27938,8 @@ string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator @@ -31905,15 +27948,17 @@ string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -31926,38 +27971,46 @@ string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding @@ -31965,24 +28018,29 @@ string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -31990,25 +28048,32 @@ string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -32018,9 +28083,11 @@ string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator @@ -32030,18 +28097,24 @@ string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -32050,51 +28123,56 @@ string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding + GB9c GB9c string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator - GB9c GB9c string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -32102,11 +28180,9 @@ string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator @@ -32115,26 +28191,17 @@ string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator @@ -32146,33 +28213,36 @@ string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + GB9c GB9c + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator @@ -32182,38 +28252,32 @@ string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator @@ -32221,45 +28285,33 @@ string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -32267,13 +28319,14 @@ string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding @@ -32281,8 +28334,12 @@ string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator @@ -32291,28 +28348,29 @@ string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -32320,9 +28378,12 @@ string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator @@ -32330,28 +28391,33 @@ string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator @@ -32359,24 +28425,22 @@ string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -32384,75 +28448,41 @@ string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding @@ -32467,29 +28497,26 @@ string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding @@ -32497,8 +28524,11 @@ string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator @@ -32508,12 +28538,11 @@ string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - GB9c GB9c string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator @@ -32523,58 +28552,50 @@ string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -32586,21 +28607,14 @@ string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator @@ -32610,43 +28624,21 @@ string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -32664,15 +28656,9 @@ string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -32686,23 +28672,23 @@ string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - GB9c GB9c string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator @@ -32710,27 +28696,19 @@ string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator @@ -32741,13 +28719,8 @@ string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator @@ -32756,112 +28729,95 @@ string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator @@ -32869,6 +28825,7 @@ string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -32878,28 +28835,20 @@ string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding @@ -32911,33 +28860,21 @@ string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump yielding string.dump yielding + GB9c GB9c string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator @@ -32948,59 +28885,35 @@ string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -33009,24 +28922,18 @@ string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator @@ -33034,47 +28941,33 @@ string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -33085,18 +28978,11 @@ string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator @@ -33104,58 +28990,46 @@ string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -33167,22 +29041,25 @@ string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding - GB9c GB9c + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator @@ -33192,6 +29069,8 @@ string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator @@ -33201,22 +29080,24 @@ string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -33225,16 +29106,19 @@ string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator @@ -33242,13 +29126,7 @@ string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator @@ -33257,24 +29135,27 @@ string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding - string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator + string.dump iterator string.dump iterator + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding @@ -33282,342 +29163,3455 @@ string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding - string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump yielding + string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator - string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator - string.dump iterator string.dump iterator + string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding string.dump iterator string.dump iterator string.dump yielding string.dump yielding + string.dump yielding string.dump yielding string.dump iterator string.dump iterator -Pointer::Appender(T) - #size #size - #<< #<< - .new .new - #to_slice #to_slice +IO::MultiWriter + #read + raises raises + #close + stops reading stops reading + closes the underlying stream if sync_close is true closes the underlying stream if sync_close is true + #flush + writes to IO and File writes to IO and File + #write + writes to multiple IOs writes to multiple IOs +LLVM::Type + .const_int + support Int128 support Int128 + support Int64 support Int64 +HTTP::Headers + #serialize #serialize + doesn't match empty string doesn't match empty string + deletes deletes + does to_s does to_s + doesn't match word with comma separated value, partial match doesn't match word with comma separated value, partial match + #== + equals other instance equals other instance + case-insensitive keys case-insensitive keys + different internal representation different internal representation + adds array of string adds array of string + matches word with comma separated value, partial match matches word with comma separated value, partial match + fetches with block fetches with block + is case insensitive is case insensitive + gets all values gets all values + is empty is empty + raises an error if header value contains invalid character raises an error if header value contains invalid character + dups dups + validates content validates content + merges and return self merges and return self + fetches with default value fetches with default value + matches word with comma separated value, partial match (array) matches word with comma separated value, partial match (array) + adds string adds string + matches word among headers matches word among headers + doesn't match word with comma separated value, partial match (array) doesn't match word with comma separated value, partial match (array) + is gets with []? is gets with []? + clones clones + matches word matches word + can create header value with all US-ASCII visible chars (#2999) can create header value with all US-ASCII visible chars (#2999) + matches word with comma separated value matches word with comma separated value + matches word with comma separated value, case insensitive (#3626) matches word with comma separated value, case insensitive (#3626) + has key has key + it allows indifferent access for underscore and dash separated keys it allows indifferent access for underscore and dash separated keys + should retain the input casing should retain the input casing + does not matches word if missing header does not matches word if missing header +Char + hex? + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + does to_s for multibyte char does to_s for multibyte char + to_i rejects unsupported base (37) to_i rejects unsupported base (37) + #dump #dump + bytesize + does for ascii does for ascii + does for unicode does for unicode + - + assert assert + in_set? + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + rejects invalid ranges rejects invalid ranges + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + does <=> does <=> + does to_i with 16 base does to_i with 16 base + index + assert assert + assert assert + does bytes does bytes + #inspect #inspect + does to_i with base 36 does to_i with base 36 + ascii_whitespace? + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + does to_f does to_f + #titlecase? + assert assert + assert assert + assert assert + assert assert + does number? does number? + #unicode_escape #unicode_escape + does ord for multibyte char does ord for multibyte char + #step + "basic by" iterator "basic by" iterator + "basic" iterator "basic" iterator + "basic by" yielding "basic by" yielding + "basic" yielding "basic" yielding + does to_i without a base does to_i without a base + #letter? #letter? + does each_byte does each_byte + lowercase? + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + + + assert assert + #titlecase + assert assert + assert assert + assert assert + assert assert + #ascii_control? #ascii_control? + uppercase? + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + escapes escapes + does ascii_number? does ascii_number? + #pred #pred + + + does for both unicode does for both unicode + does for both ascii does for both ascii + escapes with unicode escapes with unicode + ascii_uppercase? + assert assert + assert assert + assert assert + assert assert + #===(:Int) #===(:Int) + #downcase + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + #upcase + assert assert + assert assert + assert assert + ascii_letter? + assert assert + assert assert + assert assert + assert assert + does mark? does mark? + ascii_lowercase? + assert assert + assert assert + assert assert + assert assert + does ascii? does ascii? + #printable? #printable? + to_i rejects unsupported base (1) to_i rejects unsupported base (1) + clone + assert assert + #succ #succ + alphanumeric? + assert assert + assert assert + assert assert + assert assert + does to_s for single-byte char does to_s for single-byte char +.__ashlti3 .__ashlti3 +FileUtils + tests rm with an existing path tests rm with an existing path + .rm_rf + delete recursively multiple directory delete recursively multiple directory + doesn't return error on nonexistent file doesn't return error on nonexistent file + delete recursively a directory delete recursively a directory + doesn't return error on nonexistent files doesn't return error on nonexistent files + .touch + creates file if it doesn't exist creates file if it doesn't exist + creates multiple files if they don't exists creates multiple files if they don't exists + .ln + fails with an extant destination fails with an extant destination + fails with a nonexistent source fails with a nonexistent source + creates a hardlink inside a destination dir creates a hardlink inside a destination dir + creates multiple hardlinks inside a destination dir creates multiple hardlinks inside a destination dir + creates a hardlink creates a hardlink + tests mkdir_p with multiple existing path tests mkdir_p with multiple existing path + tests mkdir with an existing path tests mkdir with an existing path + .cp_r + copies a directory recursively if destination exists leaving existing files copies a directory recursively if destination exists leaving existing files + copies a directory recursively copies a directory recursively + copies a directory recursively if destination exists and is empty copies a directory recursively if destination exists and is empty + tests mkdir and rmdir with multiple new paths tests mkdir and rmdir with multiple new paths + tests rmdir with multiple nonexistent path tests rmdir with multiple nonexistent path + tests rmdir with an nonexistent path tests rmdir with an nonexistent path + .cmp + compares two equal files compares two equal files + compares two different files compares two different files + .pwd + returns the current working directory returns the current working directory + .mv + raises an error if non correct arguments raises an error if non correct arguments + raises an error if dest is non correct raises an error if dest is non correct + moves multiple files to one place moves multiple files to one place + moves a file from one place to another moves a file from one place to another + moves all existing files to destination moves all existing files to destination + .cp + copies a file copies a file + raises an error if the directory doesn't exist raises an error if the directory doesn't exist + copies permissions copies permissions + copies multiple files copies multiple files + tests rmdir with multiple path that cannot be removed tests rmdir with multiple path that cannot be removed + .ln_sf + overwrites a destination file inside a dir overwrites a destination file inside a dir + creates multiple symlinks in a destination dir, with overwrites creates multiple symlinks in a destination dir, with overwrites + overwrites a destination named pipe overwrites a destination named pipe + overwrites a destination file overwrites a destination file + overwrites a destination dir in dir overwrites a destination dir in dir + creates a symlink even if there's nothing to overwrite creates a symlink even if there's nothing to overwrite + .cd + accepts a block accepts a block + raises raises + should work should work + tests mkdir_p with multiples new path tests mkdir_p with multiples new path + tests rm with nonexistent path tests rm with nonexistent path + tests mkdir and rmdir with a new path tests mkdir and rmdir with a new path + tests mkdir with multiples existing paths tests mkdir with multiples existing paths + tests rm with multiple existing paths tests rm with multiple existing paths + .rm_r + deletes a directory recursively deletes a directory recursively + doesn't follow symlinks doesn't follow symlinks + tests rm with some nonexistent paths tests rm with some nonexistent paths + tests rmdir with a path that cannot be removed tests rmdir with a path that cannot be removed + .ln_s + creates a symlink creates a symlink + creates multiple symlinks inside a destination dir creates multiple symlinks inside a destination dir + creates a symlink inside a destination dir creates a symlink inside a destination dir + works with a nonexistent source works with a nonexistent source + fails with an existing destination fails with an existing destination +BigDecimal + performs arithmetic with other number types performs arithmetic with other number types + can be converted from scientific notation can be converted from scientific notation + #inspect + assert assert + keeps precision keeps precision + upkeeps hashing invariant upkeeps hashing invariant + is comparable with other types is comparable with other types + #trunc + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + #round + #integer? + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + with digits + to_positive to_positive + ties_away ties_away + to_negative to_negative + ties_even ties_even + to_zero to_zero + rounding modes + ties_even ties_even + to_positive to_positive + default (=ties_even) default (=ties_even) + to_zero to_zero + to_negative to_negative + ties_away ties_away + raises if creating from infinity raises if creating from infinity + performs arithmetic with bigdecimals performs arithmetic with bigdecimals + initializes from valid input initializes from valid input + exponentiates exponentiates + can normalize quotient can normalize quotient + exponentiates with negative powers exponentiates with negative powers + #<=> + compares against NaNs compares against NaNs + can be converted from other types can be converted from other types + converts to string converts to string + #ceil + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + raises if creating from NaN raises if creating from NaN + handles modulus correctly handles modulus correctly + converts to other number types converts to other number types + hashes hashes + #floor + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + raises InvalidBigDecimalException when initializing from invalid input raises InvalidBigDecimalException when initializing from invalid input +Log + building for type ignores parent source (types are absolute sources) building for type ignores parent source (types are absolute sources) + can build with Log = ::Log.for(self) can build with Log = ::Log.for(self) + can build nested with level override can build nested with level override + can build for class can build for class + can build with level override can build with level override + can build sources from nested can build sources from nested + can build for structs can build for structs + can build for module type can build for module type + can build for generic class (ignores generic args) can build for generic class (ignores generic args) +Class + does to_s does to_s + clones clones + #nilable? #nilable? + does | does | + does === does === + does to_s with name redefined (#7292) does to_s with name redefined (#7292) + comparison operators + >= >= + > > + < < + <= <= + dups dups + casts, allowing the class to be passed in at runtime casts, allowing the class to be passed in at runtime +Socket + .accept .accept + .unix + creates a unix socket creates a unix socket + closes on exec by default closes on exec by default + sends messages sends messages + #tty? + with non TTY with non TTY + #finalize + does not flush does not flush + accept raises timeout error if read_timeout is specified accept raises timeout error if read_timeout is specified + #bind + using IPv4 + binds to port using Socket::IPAddress binds to port using Socket::IPAddress + binds to port using default IP binds to port using default IP + binds to port binds to port + using IPv6 + binds to port using Socket::IPAddress binds to port using Socket::IPAddress + binds to port using default IP binds to port using default IP + binds to port binds to port + sends datagram over unix socket sends datagram over unix socket +XML::XPathContext + finds with variable binding (float) finds with variable binding (float) + finds nodes finds nodes + finds boolean finds boolean + finds with variable binding (nodes) finds with variable binding (nodes) + finds with implicit (root) namespaces finds with implicit (root) namespaces + finds string finds string + finds with root namespaces (using prefix) finds with root namespaces (using prefix) + finds with root namespaces finds with root namespaces + raises on invalid xpath raises on invalid xpath + NodeSet#to_s NodeSet#to_s + returns nil with invalid xpath returns nil with invalid xpath + finds with variable binding (bool) finds with variable binding (bool) + finds with variable binding finds with variable binding + finds with explicit namespace finds with explicit namespace + finds with variable binding (node) finds with variable binding (node) + finds with variable binding (string) finds with variable binding (string) + finds number finds number +Compress::Gzip + writes and reads to memory writes and reads to memory + reads file with extra fields from file system reads file with extra fields from file system + rewinds rewinds + writes and reads file with extra fields writes and reads file with extra fields +XML + doesn't set invalid node name doesn't set invalid node name + parses HTML UTF-8 from IO (#13703) parses HTML UTF-8 from IO (#13703) + unlinks nodes unlinks nodes + deletes an attribute deletes an attribute + parses XML UTF-8 from IO (#13703) parses XML UTF-8 from IO (#13703) + #namespace + when the element does not have a namespace, but has namespace declarations + should return nil should return nil + when the node has a namespace + with a default prefix + return the default namespace return the default namespace + with a prefix + return the prefixed namespace return the prefixed namespace + without an explicit declaration on the node + returns the related namespace returns the related namespace + when the node does not have namespace + should return nil should return nil + gets version gets version + parses parses + #namespace_scopes + includes parent namespaces includes parent namespaces + returns empty array if no namespaces scopes exists returns empty array if no namespaces scopes exists + gets root namespaces scopes gets root namespaces scopes + #namespaces + gets root namespaces as hash gets root namespaces as hash + returns an empty hash if there are no namespaces returns an empty hash if there are no namespaces + includes parent namespaces includes parent namespaces + does to_s with correct encoding (#2319) does to_s with correct encoding (#2319) + escapes content escapes content + shows content when inspecting attribute shows content when inspecting attribute + gets empty content gets empty content + changes an attribute changes an attribute + #namespace_definitions + returns namespaces explicitly defined returns namespaces explicitly defined + returns an empty array if no namespaces are defined returns an empty array if no namespaces are defined + parses HTML UTF-8 from memory (#13703) parses HTML UTF-8 from memory (#13703) + sets node text/content sets node text/content + does to_s does to_s + .build_fragment + closes open elements closes open elements + builds fragment without XML declaration builds fragment without XML declaration + gets encoding gets encoding + parses from io parses from io + sets an attribute sets an attribute + gets encoding when nil gets encoding when nil + escapes content HTML fragment escapes content HTML fragment + raises exception on empty string raises exception on empty string + #errors #errors + navigates in tree navigates in tree + parses XML UTF-8 from memory (#13703) parses XML UTF-8 from memory (#13703) + reads big xml file (#1455) reads big xml file (#1455) + .build .build + doesn't set invalid node content doesn't set invalid node content + sets node name sets node name +String UTF16 + .from_utf16 + in the range U+D800..U+DFFF in the range U+D800..U+DFFF + in the range U+E000 to U+FFFF in the range U+E000 to U+FFFF + handles null bytes handles null bytes + in the range U+10000..U+10FFFF in the range U+10000..U+10FFFF + in the range U+0000..U+D7FF in the range U+0000..U+D7FF + with pointer reads multiple strings with pointer reads multiple strings + to_utf16 + in the range U+E000 to U+FFFF in the range U+E000 to U+FFFF + in the range U+D800..U+DFFF in the range U+D800..U+DFFF + in the range U+0000..U+D7FF in the range U+0000..U+D7FF + in the range U+10000..U+10FFFF in the range U+10000..U+10FFFF + in the range U+0000..U+FF in the range U+0000..U+FF +BitArray + #any? + without block + returns true if any bits are set returns true if any bits are set + "#each" yielding "#each" yielding + #rotate! + rotates medium BitArray rotates medium BitArray + rotates large BitArray rotates large BitArray + rotates short BitArray rotates short BitArray + rotates empty BitArray rotates empty BitArray + #includes? + returns whether the given bit is included returns whether the given bit is included + #toggle + toggles a bit toggles a bit + raises on out of bound index raises on out of bound index + toggles with index == size and count toggles with index == size and count + toggles with index and count toggles with index and count + toggles with range toggles with range + toggles with index < 0 and count toggles with index < 0 and count + toggles with index and count, not enough bits toggles with index and count, not enough bits + raises on negative count raises on negative count + toggles zero bits correctly toggles zero bits correctly + #none? + without block + returns true if no bits are set returns true if no bits are set + does to_s and inspect does to_s and inspect + .new + without block + initializes with initial value initializes with initial value + initializes with false by default initializes with false by default + initializes with non-Int32 size initializes with non-Int32 size + initializes with unused bits cleared initializes with unused bits cleared + raises if size is negative raises if size is negative + with block + initializes elements with block initializes elements with block + sets first bit to false sets first bit to false + #tally + without block + tallies into the given hash tallies into the given hash + doesn't add key into the tally hash if element doesn't exist doesn't add key into the tally hash if element doesn't exist + tallies the number of set and cleared bits tallies the number of set and cleared bits + sets first bit to true sets first bit to true + #one? + returns true if exactly one bit is set returns true if exactly one bit is set + "#each_index" yielding "#each_index" yielding + #fill + without block, with range + raises if start index is out of range raises if start index is out of range + sets or clears a subrange of bits sets or clears a subrange of bits + without block + sets all bits sets all bits + clears all bits clears all bits + without block, with start and count + raises if start index is out of range raises if start index is out of range + sets or clears a subrange of bits sets or clears a subrange of bits + reads bits from slice reads bits from slice + [] + gets with start and count exceeding size gets with start and count exceeding size + gets on inclusive range gets on inclusive range + zeroes unused bits zeroes unused bits + raises on index out of bounds raises on index out of bounds + doesn't exceed limits doesn't exceed limits + gets on inclusive range with negative indices gets on inclusive range with negative indices + gets (0..0) on empty array gets (0..0) on empty array + raises on too negative left bound raises on too negative left bound + gets with negative start gets with negative start + raises on negative count raises on negative count + gets 0, 0 on empty array gets 0, 0 on empty array + gets on endless range gets on endless range + raises on index out of bounds with start and count raises on index out of bounds with start and count + gets on exclusive range gets on exclusive range + gets with start and count gets with start and count + gets on large bitarrays gets on large bitarrays + gets on beginless range gets on beginless range + raises on negative count on empty Array raises on negative count on empty Array + raises on index out of bounds with range raises on index out of bounds with range + gets on range with start higher than end gets on range with start higher than end + does not cause overflow (#8494) does not cause overflow (#8494) + gets on medium bitarrays gets on medium bitarrays + returns empty if at end returns empty if at end + gets on exclusive range with negative indices gets on exclusive range with negative indices + raises on negative count raises on negative count + preserves equality preserves equality + gets on range with start higher than negative end gets on range with start higher than negative end + sets second bit to false sets second bit to false + provides dup provides dup + #rindex + without block + accepts a start offset accepts a start offset + returns index of last bit cleared returns index of last bit cleared + returns index of last bit set returns index of last bit set + has size has size + #count + without block + returns the number of bits set returns the number of bits set + returns the number of bits cleared returns the number of bits cleared + "#reverse_each" iterator "#reverse_each" iterator + is initially empty is initially empty + #all? + without block + returns true if all bits are set returns true if all bits are set + sets last bit to true with negative index sets last bit to true with negative index + == + compares other type compares other type + compares other initialized with true (#8543) compares other initialized with true (#8543) + compares empty compares empty + compares elements compares elements + compares other compares other + sets second bit to true sets second bit to true + raises when out of bounds raises when out of bounds + "#reverse_each" yielding "#reverse_each" yielding + inverts all bits inverts all bits + #reverse! + reverses large BitArray reverses large BitArray + reverses empty BitArray reverses empty BitArray + reverses short BitArray reverses short BitArray + reverses medium BitArray reverses medium BitArray + read bits written from slice read bits written from slice + #index + without block + returns index of first bit cleared returns index of first bit cleared + accepts a start offset accepts a start offset + returns index of first bit set returns index of first bit set + "#each_index" iterator "#each_index" iterator + "#each" iterator "#each" iterator +Exception + inspects with cause inspects with cause + allows subclassing #message allows subclassing #message + inspects inspects + collect memory within ensure block collect memory within ensure block +IO::Buffered + does new with block does new with block + sync + syncs (write) syncs (write) + does puts with big string does puts with big string + encoding + decode + gets big string gets big string + gets gets + gets_to_end gets_to_end + gets big EUC-JP string gets big EUC-JP string + reads char reads char + gets with chomp = false gets with chomp = false + does gets with chomp = false does gets with chomp = false + shouldn't call unbuffered read if reading to an empty slice shouldn't call unbuffered read if reading to an empty slice + skips skips + does gets with char delimiter does gets with char delimiter + does gets with char and limit without off-by-one does gets with char and limit without off-by-one + does gets does gets + does gets with big line does gets with big line + read_buffering + works with IO#read_byte works with IO#read_byte + works with IO#read_byte (already buffered) works with IO#read_byte (already buffered) + works with IO#read works with IO#read + works with IO#read (already buffered) works with IO#read (already buffered) + does gets with char and limit when not found in buffer does gets with char and limit when not found in buffer + does puts does puts + does gets with unicode char delimiter does gets with unicode char delimiter + does gets with char and limit does gets with char and limit + can set buffer_size to the same value after first use can set buffer_size to the same value after first use + raises if invoking gets with negative limit raises if invoking gets with negative limit + does puts many times does puts many times + does gets with limit does gets with limit + reads char reads char + skips big skips big + can report buffer_size can report buffer_size + does gets with char and limit when not found in buffer (2) does gets with char and limit when not found in buffer (2) + can not set buffer_size after first use can not set buffer_size after first use + does gets with big line and \r\n does gets with big line and \r\n + rewinds rewinds + reads more than the buffer's internal capacity reads more than the buffer's internal capacity + peeks peeks + flush_on_newline + flushes on + flushes on + + doesn't write past count doesn't write past count + can set buffer_size can set buffer_size + reads byte reads byte + does gets with big line and chomp = false does gets with big line and chomp = false + writes more than the buffer's internal capacity writes more than the buffer's internal capacity + writes bytes writes bytes +Log::Metadata::Value + initialize initialize + json json + accessors accessors +Float::Printer::DiyFP + normalizes ordered normalizes ordered + converts min f64 converts min f64 + multiply rounding multiply rounding + normalizes min f64 normalizes min f64 + converts ordered 64 converts ordered 64 + multiply rounding multiply rounding + multiply multiply + converts ordered 32 converts ordered 32 + converts max f64 converts max f64 + converts min f32 converts min f32 + multiply multiply + normalizes max f64 normalizes max f64 + multiply big numbers multiply big numbers + converts max f32 converts max f32 +Crypto::Bcrypt::Password + new + parses salt parses salt + validates the hash string has the required amount of parts validates the hash string has the required amount of parts + parses cost parses cost + parses digest parses digest + raises on unsupported version (#11584) raises on unsupported version (#11584) + parses version parses version + verify + verifies password version 2 is correct (#11584) verifies password version 2 is correct (#11584) + verifies password version 2y is correct verifies password version 2y is correct + verifies password version 2b is correct (#11584) verifies password version 2b is correct (#11584) + verifies password is correct verifies password is correct + verifies password version 2a is correct (#11584) verifies password version 2a is correct (#11584) + verifies password is incorrect verifies password is incorrect + create + generates salt generates salt + generates digest generates digest + uses cost uses cost +OAuth::AuthorizationHeader + builds builds +Digest::CRC32 + calculates hash from UInt8 slices calculates hash from UInt8 slices + calculates digest from string calculates digest from string + #hexdigest can update within a loop from explicit expr (#9483) #hexdigest can update within a loop from explicit expr (#9483) + can take a block can take a block + calculates hash from string calculates hash from string + should be able to calculate crc32 should be able to calculate crc32 + digest with file content digest with file content + context are independent context are independent + should be able to calculate crc32 combined should be able to calculate crc32 combined + calculates hash from unicode string calculates hash from unicode string + resets resets + calculates base64'd hash from string calculates base64'd hash from string + .dup + preserves type preserves type + preserves value preserves value + leads to deterministic updates leads to deterministic updates + leads to not sharing state leads to not sharing state + return the digest size return the digest size + can't call final twice can't call final twice + calculates hash of #to_slice calculates hash of #to_slice + #hexdigest can update within a loop by indirect expr (#9483) #hexdigest can update within a loop by indirect expr (#9483) +UUID + parsing strings + returns nil if it has the wrong number of characters returns nil if it has the wrong number of characters + returns a properly parsed UUID returns a properly parsed UUID + returns nil if it has incorrect characters returns nil if it has incorrect characters + initialize from static array + works with static array and version works with static array and version + works with static array, variant and version works with static array, variant and version + works with static array and variant works with static array and variant + works with static array only works with static array only + #== + matches identical UUIDs matches identical UUIDs + initialize with String + works with string and version works with string and version + works with string only works with string only + works with string and variant works with string and variant + can be built from strings can be built from strings + v1 + returns true if UUID is v1, false otherwise returns true if UUID is v1, false otherwise + v4! + returns true if UUID is v4, raises otherwise returns true if UUID is v4, raises otherwise + v3 + generates DNS based names correctly generates DNS based names correctly + generates X500 based names correctly generates X500 based names correctly + generates OID based names correctly generates OID based names correctly + generates URL based names correctly generates URL based names correctly + v4? + returns true if UUID is v4, false otherwise returns true if UUID is v4, false otherwise + v7 + generates UUIDs that are sortable with 1ms precision generates UUIDs that are sortable with 1ms precision + generates a v7 UUID generates a v7 UUID + initializes zeroed UUID initializes zeroed UUID + fails on invalid arguments when creating fails on invalid arguments when creating + #<=> + correctly compares two UUIDs correctly compares two UUIDs + v2 + returns true if UUID is v2, false otherwise returns true if UUID is v2, false otherwise + v5 + generates OID based names correctly generates OID based names correctly + generates X500 based names correctly generates X500 based names correctly + generates DNS based names correctly generates DNS based names correctly + generates URL based names correctly generates URL based names correctly + initializes with slice initializes with slice + initializes from UUID initializes from UUID + supports different string formats + hexstring hexstring + urn urn + normal output normal output + random initialize + does inspect does inspect + works with no options works with no options + works with variant works with variant + works with version works with version +exit + exits with given error code exits with given error code + exits normally with status 0 exits normally with status 0 +Log::Dispatcher + create dispatcher from enum create dispatcher from enum +Log::Metadata + empty? empty? + []? []? + extend extend + json json + extend against empty values without creating a new instance extend against empty values without creating a new instance + #dup + creates a shallow copy creates a shallow copy + defrags defrags + [] [] + == == + empty empty +Regex + #inspect + with literal-compatible options + escapes escapes + prints flags prints flags + with non-literal-compatible options + escapes escapes + prints flags prints flags + #== #== + .error? .error? + #matches? + options + anchored anchored + extended + ignores white space ignores white space + ignores comments ignores comments + multiline + anchor anchor + span span + ignore case ignore case + with options + deprecated Regex::Options deprecated Regex::Options + Regex::MatchOptions Regex::MatchOptions + doesn't crash with a large single line string doesn't crash with a large single line string + basic basic + unicode + unicode support unicode support + matches unicode char against [[:print:]] (#11262) matches unicode char against [[:print:]] (#11262) + matches unicode char against [[:alnum:]] (#4704) matches unicode char against [[:alnum:]] (#4704) + invalid codepoint invalid codepoint + #=== + basic basic + assigns captures assigns captures + #match + with options + deprecated Regex::Options deprecated Regex::Options + Regex::Match options Regex::Match options + returns nil on non-match returns nil on non-match + with invalid UTF-8 with invalid UTF-8 + skip invalid UTF check skip invalid UTF check + with pos + char index char index + positive positive + negative negative + assigns captures assigns captures + returns matchdata returns matchdata + #options #options + #+ #+ + #match! + with options + Regex::Match options Regex::Match options + assigns captures assigns captures + raises on non-match raises on non-match + returns match data returns match data + #name_table + alpanumeric alpanumeric + is a map of capture group number to name is a map of capture group number to name + more than 255 groups more than 255 groups + duplicate name duplicate name + .new + doesn't crash when PCRE tries to free some memory (#771) doesn't crash when PCRE tries to free some memory (#771) + raises on invalid UTF-8 raises on invalid UTF-8 + raises exception with invalid regex raises exception with invalid regex + options + regular regular + unnamed option unnamed option + #capture_count #capture_count + #clone #clone + .supports_match_options? .supports_match_options? + .escape .escape + #to_s + with options with options + with slash with slash + interpolation interpolation + #matches_at_byte_index? + positive index positive index + multibyte index multibyte index + negative negative + with options + deprecated Regex::Options deprecated Regex::Options + Regex::MatchOptions Regex::MatchOptions + #dup #dup + .literal .literal + .union + combines Regex objects in the same way as Regex#+ combines Regex objects in the same way as Regex#+ + constructs a Regex that matches things any of its arguments match constructs a Regex that matches things any of its arguments match + returns a regular expression that will match passed arguments returns a regular expression that will match passed arguments + accepts a single Array(String | Regex) argument accepts a single Array(String | Regex) argument + quotes any string arguments quotes any string arguments + returns a Regex with an Array(String) with special characters returns a Regex with an Array(String) with special characters + accepts a single Tuple(String | Regex) argument accepts a single Tuple(String | Regex) argument + #hash #hash + #=~ + accepts any type accepts any type + returns match index or nil returns match index or nil + assigns captures assigns captures + #match_at_byte_index + negative negative + with options + deprecated Regex::Options deprecated Regex::Options + Regex::MatchOptions Regex::MatchOptions + assigns captures assigns captures + positive index positive index + multibyte index multibyte index + .supports_compile_options? .supports_compile_options? + #source #source + .needs_escape? + String String + Char Char +XML::Reader + #node_type + returns the node type returns the node type + #next + reads next node in doc order, skipping subtrees reads next node in doc order, skipping subtrees + #[]? + reads node attributes reads node attributes + raises if attribute contains null byte raises if attribute contains null byte + #move_to_first_attribute + moves to the first attribute of the node moves to the first attribute of the node + #move_to_attribute + moves to attribute with the specified name moves to attribute with the specified name + raises if attribute contains null byte raises if attribute contains null byte + #read_inner_xml + reads the contents of the node including child nodes and markup reads the contents of the node including child nodes and markup + #expand? + is only available until the next read is only available until the next read + parses the content of the node and subtree parses the content of the node and subtree + .new + with default parser options + can be initialized from an io can be initialized from an io + can be initialized from a string can be initialized from a string + with custom parser options + can be initialized from a string can be initialized from a string + can be initialized from an io can be initialized from an io + #expand + parses the content of the node and subtree parses the content of the node and subtree + is only available until the next read is only available until the next read + raises an exception if the node could not be expanded raises an exception if the node could not be expanded + #read + reads all nodes reads all nodes + reads all non-blank nodes with NOBLANKS option reads all non-blank nodes with NOBLANKS option + #move_to_next_attribute + moves to the next attribute of the node moves to the next attribute of the node + #depth + returns the depth of the node returns the depth of the node + #empty_element? + checks if the node is empty checks if the node is empty + #to_unsafe + returns a pointer to the underlying LibXML::XMLTextReader returns a pointer to the underlying LibXML::XMLTextReader + #read_outer_xml + reads the xml of the node including child nodes and markup reads the xml of the node including child nodes and markup + #move_to_element + moves to the element node that contains the current attribute node moves to the element node that contains the current attribute node + #value + reads node text value reads node text value + #[] + reads node attributes reads node attributes + raises if attribute contains null byte raises if attribute contains null byte + #name + reads node name reads node name + #has_attributes? + checks if the node has attributes checks if the node has attributes + #attributes_count + returns the node's number of attributes returns the node's number of attributes + #next_sibling + reads next sibling node in doc order, skipping subtrees reads next sibling node in doc order, skipping subtrees +Spec + list_tags + does nothing if there are no examples does nothing if there are no examples + lists the count of all tags lists the count of all tags + lists the count of slow tags lists the count of slow tags +Indexable(T) + #to_a + without a block of an interface type without a block of an interface type + permutations + accepts a block accepts a block + assert assert + assert assert + assert assert + returns iterator returns iterator + yielding dup of arrays yielding dup of arrays + yields with reuse = true yields with reuse = true + returns iterator with given size returns iterator with given size + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + returns iterator with reuse = true returns iterator with reuse = true + does each does each + .each_cartesian + does with an Indexable of Indexables, without block, combined with select does with an Indexable of Indexables, without block, combined with select + does with reuse = array, with block does with reuse = array, with block + does with an Indexable of Indexables, without block does with an Indexable of Indexables, without block + does with reuse = true, with block does with reuse = true, with block + does with reuse = true, without block does with reuse = true, without block + does with an Indexable of Indexables, with block does with an Indexable of Indexables, with block + does with reuse = array, without block does with reuse = array, without block + combinations + yielding dup of arrays yielding dup of arrays + assert assert + assert assert + assert assert + accepts a block accepts a block + assert assert + does with reuse = true does with reuse = true + returns iterator with reuse = array returns iterator with reuse = array + assert assert + assert assert + returns iterator with reuse = true returns iterator with reuse = true + assert assert + does with reuse = array does with reuse = array + assert assert + assert assert + assert assert + returns iterator returns iterator + assert assert + fetch + fetches with block fetches with block + fetches with default value fetches with default value + .cartesian_product + does with an Indexable of Indexables does with an Indexable of Indexables + does with a Tuple of Tuples with mixed types does with a Tuple of Tuples with mixed types + #join + joins non-strings joins non-strings + joins strings (non-empty case) joins strings (non-empty case) + joins when T has String joins when T has String + joins strings (empty case) joins strings (empty case) + with IO with IO + iterates until its size, having mutated (#3386) iterates until its size, having mutated (#3386) + iterates through a subset of its elements (#3386) iterates through a subset of its elements (#3386) + #index + does index with big offset does index with big offset + offset type offset type + does index with big negative offset does index with big negative offset + #index! + raises if no element is found raises if no element is found + offset type offset type + #rindex + does rindex with big offset does rindex with big offset + offset type offset type + does rindex with big negative offset does rindex with big negative offset + #cartesian_product + does with >1 other Indexables does with >1 other Indexables + does with 1 other Indexable does with 1 other Indexable + does each_index does each_index + iterates within a range of indices, no beginning iterates within a range of indices, no beginning + iterates within a range of indices, no end iterates within a range of indices, no end + iterates until its size, having mutated (#3386) iterates until its size, having mutated (#3386) + #rindex! + does rindex with big negative offset does rindex with big negative offset + does rindex with big offset does rindex with big offset + offset type offset type + iterates within a range of indices (#3386) iterates within a range of indices (#3386) + iterates until its size (#3386) iterates until its size (#3386) + dig + raises IndexError if not found raises IndexError if not found + gets the value at given path given splat gets the value at given path given splat + dig? + returns nil if not found returns nil if not found + gets the value at given path given splat gets the value at given path given splat + repeated_combinations + returns iterator with reuse = array returns iterator with reuse = array + assert assert + yields with reuse = array yields with reuse = array + assert assert + returns iterator returns iterator + assert assert + assert assert + assert assert + yielding dup of arrays yielding dup of arrays + returns iterator with reuse = true returns iterator with reuse = true + assert assert + accepts a block accepts a block + n > size (#14088) + "#each_repeated_combination" iterator "#each_repeated_combination" iterator + "#each_repeated_combination" yielding "#each_repeated_combination" yielding + "#each_repeated_combination" iterator "#each_repeated_combination" iterator + "#each_repeated_combination" yielding "#each_repeated_combination" yielding + assert assert + yields with reuse = true yields with reuse = true + assert assert + assert assert + #each_cartesian + does with 1 other Indexable, without block does with 1 other Indexable, without block + does with >1 other Indexables, without block does with >1 other Indexables, without block + does with 1 other Indexable, with block does with 1 other Indexable, with block + does with 1 other Indexable, without block, combined with select does with 1 other Indexable, without block, combined with select + does with >1 other Indexables, with block does with >1 other Indexables, with block +JSON serialization + provide symmetric encoding and decoding for Union types provide symmetric encoding and decoding for Union types + to_json + does for Int32 does for Int32 + does for Hash with Float64 keys does for Hash with Float64 keys + does for Iterator does for Iterator + does for Set does for Set + does for Array does for Array + does for Int128 does for Int128 + does for BigDecimal does for BigDecimal + does for Hash with Float32 keys does for Hash with Float32 keys + does for String with control codes does for String with control codes + does for Tuple does for Tuple + does for String with control codes in a few places does for String with control codes in a few places + does for String with quote does for String with quote + raises if Float is NaN raises if Float is NaN + does for String does for String + does for BigFloat does for BigFloat + raises if Float is infinity raises if Float is infinity + Enum + normal enum normal enum + flag enum flag enum + does for NamedTuple does for NamedTuple + does for Path does for Path + does for Hash does for Hash + does for Nil does for Nil + does for Float64 does for Float64 + does for Hash with symbol keys does for Hash with symbol keys + does for Hash with newlines does for Hash with newlines + Enum::ValueConverter + flag enum flag enum + normal enum normal enum + does for Hash with BigInt keys does for Hash with BigInt keys + does for Hash with int keys does for Hash with int keys + does for UUID does for UUID + does for Deque does for Deque + does for StaticArray does for StaticArray + does for Bool does for Bool + does for BigInt does for BigInt + does for String with slash does for String with slash + from_json + deserializes union with Int64 (fast path) deserializes union with Int64 (fast path) + does UInt128.from_json does UInt128.from_json + deserializes with root deserializes with root + does for tuple does for tuple + parse exceptions + captures overflows for integer types captures overflows for integer types + has correct location when raises in NamedTuple#from_json has correct location when raises in NamedTuple#from_json + has correct location when raises in Union#from_json has correct location when raises in Union#from_json + deserializes union with UInt64 (fast path) deserializes union with UInt64 (fast path) + errors on non-base-10 ints errors on non-base-10 ints + does for BigDecimal from int does for BigDecimal from int + does Array(Float64)#from_json does Array(Float64)#from_json + Enum::ValueConverter.from_json + flag enum flag enum + normal enum normal enum + deserializes union with Int16 (fast path) deserializes union with Int16 (fast path) + does UInt16.from_json does UInt16.from_json + raises for BigFloat from unsupported types raises for BigFloat from unsupported types + deserializes union with Float64 (fast path) deserializes union with Float64 (fast path) + does for tuple with file-private type does for tuple with file-private type + Enum + flag enum flag enum + normal enum normal enum + does for empty named tuple does for empty named tuple + does for BigFloat from int does for BigFloat from int + does Path.from_json does Path.from_json + does UInt32.from_json does UInt32.from_json + does Hash(String, String)#from_json does Hash(String, String)#from_json + does Array(Float32)#from_json does Array(Float32)#from_json + does Hash(String, Int32)#from_json does Hash(String, Int32)#from_json + deserializes union with UInt8 (fast path) deserializes union with UInt8 (fast path) + raises if Int32.from_json overflows raises if Int32.from_json overflows + deserializes union with Int128 (fast path) deserializes union with Int128 (fast path) + raises an error Iterator(String)#from_json with invalid JSON raises an error Iterator(String)#from_json with invalid JSON + does Int64.from_json does Int64.from_json + does Array(Bool)#from_json does Array(Bool)#from_json + does for UUID (hyphenated) does for UUID (hyphenated) + deserializes union deserializes union + does for BigFloat from string does for BigFloat from string + does for named tuple with nilable fields and null (#8089) does for named tuple with nilable fields and null (#8089) + raises if UInt128.from_json overflows raises if UInt128.from_json overflows + does Hash(BigDecimal, String)#from_json does Hash(BigDecimal, String)#from_json + deserializes union with bool (fast path) deserializes union with bool (fast path) + deserializes Time deserializes Time + does for BigInt does for BigInt + raises for BigInt from unsupported types raises for BigInt from unsupported types + deserializes union with Int8 (fast path) deserializes union with Int8 (fast path) + does String.from_json does String.from_json + deserializes union with UInt16 (fast path) deserializes union with UInt16 (fast path) + deserializes union with Int32 (fast path) deserializes union with Int32 (fast path) + raises if Int8.from_json overflows raises if Int8.from_json overflows + does Hash(Float64, String)#from_json does Hash(Float64, String)#from_json + deserializes union with Float32 (fast path) deserializes union with Float32 (fast path) + does for UUID (hex) does for UUID (hex) + raises if UInt32.from_json overflows raises if UInt32.from_json overflows + does Hash(Float32, String)#from_json does Hash(Float32, String)#from_json + does UInt64.from_json does UInt64.from_json + does Hash(BigFloat, String)#from_json does Hash(BigFloat, String)#from_json + does for named tuple with file-private type does for named tuple with file-private type + does UInt8.from_json does UInt8.from_json + raises an error Iterator(String)#from_json with invalid types raises an error Iterator(String)#from_json with invalid types + does for Array(Int32) from IO does for Array(Int32) from IO + raises for BigDecimal from unsupported types raises for BigDecimal from unsupported types + raises if UInt8.from_json overflows raises if UInt8.from_json overflows + does Int16.from_json does Int16.from_json + errors on underscores inside ints errors on underscores inside ints + does for named tuple with nilable fields (#8089) does for named tuple with nilable fields (#8089) + does Hash(BigInt, String)#from_json does Hash(BigInt, String)#from_json + raises if UInt64.from_json overflows raises if UInt64.from_json overflows + does for empty tuple does for empty tuple + raises an error Hash(String, Int32)#from_json with null value raises an error Hash(String, Int32)#from_json with null value + does for named tuple does for named tuple + does Deque(String)#from_json does Deque(String)#from_json + does Array(Int64)#from_json does Array(Int64)#from_json + does Array(Int32)#from_json does Array(Int32)#from_json + does for named tuple with spaces in key and quote char (#10918) does for named tuple with spaces in key and quote char (#10918) + does for Array(Int32) with block does for Array(Int32) with block + does Iterator(String)#from_json does Iterator(String)#from_json + deserializes unions of the same kind and remains stable deserializes unions of the same kind and remains stable + deserializes union with UInt128 (fast path) deserializes union with UInt128 (fast path) + does Int128.from_json does Int128.from_json + raises if Int128.from_json overflows raises if Int128.from_json overflows + deserializes union with UInt32 (fast path) deserializes union with UInt32 (fast path) + does for named tuple with spaces in key (#10918) does for named tuple with spaces in key (#10918) + deserializes union of Int32 and Float64 (#7333) deserializes union of Int32 and Float64 (#7333) + raises if Int64.from_json overflows raises if Int64.from_json overflows + raises if UInt16.from_json overflows raises if UInt16.from_json overflows + does for UUID (urn) does for UUID (urn) + does for BigDecimal from string does for BigDecimal from string + does Int8.from_json does Int8.from_json + does Hash(Int32, String)#from_json does Hash(Int32, String)#from_json + does for BigDecimal from float does for BigDecimal from float + does Array(Nil)#from_json does Array(Nil)#from_json + raises if Int16.from_json overflows raises if Int16.from_json overflows + does Int32.from_json does Int32.from_json + does for BigFloat does for BigFloat + to_pretty_json + does for empty Array does for empty Array + does for Array with indent does for Array with indent + does for Float64 does for Float64 + Time + omit sub-second precision omit sub-second precision + #to_json #to_json + does for empty Hash does for empty Hash + does for Int32 does for Int32 + does for Hash does for Hash + does for String does for String + does for Bool does for Bool + does for nested Array does for nested Array + does for nested Hash with indent does for nested Hash with indent + does for Nil does for Nil + does for Array does for Array + does for nested Hash does for nested Hash +Spec::ExampleGroup + #randomize + with a seed with a seed + by default by default + #report + should include parent's description should include parent's description + #all_tags + should include ancestor tags should include ancestor tags Box - boxing a nilable reference returns the same pointer boxing a nilable reference returns the same pointer + boxing nil in a reference-like union returns a null pointer (#11839) boxing nil in a reference-like union returns a null pointer (#11839) + boxing a nilable value returns the same value boxing a nilable value returns the same value boxing nil in a value-like union doesn't crash (#11839) boxing nil in a value-like union doesn't crash (#11839) + boxing a nilable reference returns the same pointer boxing a nilable reference returns the same pointer + boxes with explicit type boxes with explicit type boxes and unboxes boxes and unboxes boxing a reference returns the same pointer boxing a reference returns the same pointer - boxing nil in a reference-like union returns a null pointer (#11839) boxing nil in a reference-like union returns a null pointer (#11839) boxing nil returns a null pointer boxing nil returns a null pointer - boxes with explicit type boxes with explicit type - boxing a nilable value returns the same value boxing a nilable value returns the same value -OAuth2::Client - get_access_token_using_* - using Request Body to pass credentials - #make_token_request #make_token_request - #get_access_token_using_refresh_token #get_access_token_using_refresh_token - #get_access_token_using_client_credentials #get_access_token_using_client_credentials - #get_access_token_using_authorization_code #get_access_token_using_authorization_code - #get_access_token_using_resource_owner_credentials #get_access_token_using_resource_owner_credentials - using HTTP Basic authentication to pass credentials - #get_access_token_using_refresh_token #get_access_token_using_refresh_token - #make_token_request #make_token_request - #get_access_token_using_authorization_code #get_access_token_using_authorization_code - #get_access_token_using_resource_owner_credentials #get_access_token_using_resource_owner_credentials - configures HTTP::Client configures HTTP::Client - #get_access_token_using_client_credentials #get_access_token_using_client_credentials - authorization uri - gets with default endpoint gets with default endpoint - gets with custom endpoint gets with custom endpoint - gets with block gets with block - gets with absolute uri gets with absolute uri - gets with state gets with state -Complex - conj conj - abs abs - inv inv - * - number * complex number * complex - complex * number complex * number - complex * complex complex * complex - abs2 abs2 - polar polar - test zero? test zero? - sign - real zero real zero - infinity infinity - imaginary zero imaginary zero - finite, non-zero finite, non-zero - complex zero complex zero - not-a-number not-a-number - + - number + complex number + complex - complex + complex complex + complex - + complex + complex - complex + number complex + number - i i - as numbers - division between UInt32 / Complex returns Complex division between UInt32 / Complex returns Complex - division between Int64 / Complex returns Complex division between Int64 / Complex returns Complex - converts from UInt8 to Complex converts from UInt8 to Complex - division between Complex / UInt128 returns Complex division between Complex / UInt128 returns Complex - division between Int128 / Complex returns Complex division between Int128 / Complex returns Complex - converts from Complex to UInt128 converts from Complex to UInt128 - division between Complex / UInt16 returns Complex division between Complex / UInt16 returns Complex - converts from Int8 to Complex converts from Int8 to Complex - division between Complex / Int8 returns Complex division between Complex / Int8 returns Complex - converts from UInt8 to Complex converts from UInt8 to Complex - division between UInt8 / Complex returns Complex division between UInt8 / Complex returns Complex - division between Int16 / Complex returns Complex division between Int16 / Complex returns Complex - division between Complex / UInt32 returns Complex division between Complex / UInt32 returns Complex - converts from Complex to Int16 converts from Complex to Int16 - converts from UInt16 to Complex converts from UInt16 to Complex - converts from Complex to UInt32 converts from Complex to UInt32 - converts from Int128 to Complex converts from Int128 to Complex - converts from Complex to Float64 converts from Complex to Float64 - converts from UInt64 to Complex converts from UInt64 to Complex - division between Float32 / Complex returns Complex division between Float32 / Complex returns Complex - converts from Complex to Float32 converts from Complex to Float32 - converts from Float64 to Complex converts from Float64 to Complex - converts from Complex to Int64 converts from Complex to Int64 - division between UInt64 / Complex returns Complex division between UInt64 / Complex returns Complex - converts from Complex to Int128 converts from Complex to Int128 - converts from Complex to Int64 converts from Complex to Int64 - converts from Complex to Float64 converts from Complex to Float64 - division between Complex / Int64 returns Complex division between Complex / Int64 returns Complex - division between Complex / UInt8 returns Complex division between Complex / UInt8 returns Complex - converts from Float64 to Complex converts from Float64 to Complex - converts from Complex to UInt8 converts from Complex to UInt8 - division between Complex / Float64 returns Complex division between Complex / Float64 returns Complex - converts from Int32 to Complex converts from Int32 to Complex - division between Complex / Complex returns Complex division between Complex / Complex returns Complex - converts from Complex to Int8 converts from Complex to Int8 - converts from Complex to Int128 converts from Complex to Int128 - converts from Complex to UInt16 converts from Complex to UInt16 - converts from Complex to UInt64 converts from Complex to UInt64 - converts from Complex to Int8 converts from Complex to Int8 - division between Complex / Int128 returns Complex division between Complex / Int128 returns Complex - converts from Int64 to Complex converts from Int64 to Complex - converts from Complex to UInt32 converts from Complex to UInt32 - division between Int8 / Complex returns Complex division between Int8 / Complex returns Complex - division between Float64 / Complex returns Complex division between Float64 / Complex returns Complex - converts from Complex to Int16 converts from Complex to Int16 - division between Int32 / Complex returns Complex division between Int32 / Complex returns Complex - converts from Float32 to Complex converts from Float32 to Complex - converts from Complex to Complex converts from Complex to Complex - division between Complex / Int32 returns Complex division between Complex / Int32 returns Complex - converts from UInt32 to Complex converts from UInt32 to Complex - converts from Complex to Int32 converts from Complex to Int32 - converts from UInt128 to Complex converts from UInt128 to Complex - converts from Complex to UInt64 converts from Complex to UInt64 - converts from Complex to Int32 converts from Complex to Int32 - converts from Complex to UInt128 converts from Complex to UInt128 - converts from Int64 to Complex converts from Int64 to Complex - converts from Int16 to Complex converts from Int16 to Complex - converts from Int8 to Complex converts from Int8 to Complex - converts from Complex to UInt8 converts from Complex to UInt8 - converts from UInt16 to Complex converts from UInt16 to Complex - converts from Complex to Complex converts from Complex to Complex - division between Complex / Int16 returns Complex division between Complex / Int16 returns Complex - converts from UInt128 to Complex converts from UInt128 to Complex - division between UInt16 / Complex returns Complex division between UInt16 / Complex returns Complex - converts from UInt64 to Complex converts from UInt64 to Complex - division between UInt128 / Complex returns Complex division between UInt128 / Complex returns Complex - converts from Complex to Float32 converts from Complex to Float32 - converts from Complex to UInt16 converts from Complex to UInt16 - division between Complex / Float32 returns Complex division between Complex / Float32 returns Complex - converts from Int32 to Complex converts from Int32 to Complex - converts from Int128 to Complex converts from Int128 to Complex - converts from Float32 to Complex converts from Float32 to Complex - converts from Int16 to Complex converts from Int16 to Complex - division between Complex / UInt64 returns Complex division between Complex / UInt64 returns Complex - converts from UInt32 to Complex converts from UInt32 to Complex - to_s to_s - hashes real without imag like real only hashes real without imag like real only - phase phase - / - number / complex number / complex - complex / number complex / number - complex / complex complex / complex - Math - log10 log10 - sqrt sqrt - log log - exp exp - log2 log2 - test additive_identity test additive_identity - == - complex == number complex == number - number == complex number == complex - complex == complex complex == complex - rounds rounds - - - complex - complex complex - complex - - complex - complex - number - complex number - complex - complex - number complex - number - test zero test zero +File + .tempfile + accepts single suffix argument accepts single suffix argument + with block + accepts dir argument accepts dir argument + closes file closes file + accepts single suffix argument accepts single suffix argument + accepts prefix and suffix arguments accepts prefix and suffix arguments + accepts prefix and suffix arguments accepts prefix and suffix arguments + creates and writes creates and writes + fails in nonwriteable folder fails in nonwriteable folder + accepts dir argument accepts dir argument + rejects null byte rejects null byte + .tempname + accepts single suffix argument accepts single suffix argument + accepts dir argument accepts dir argument + creates a path without creating the file creates a path without creating the file + accepts prefix with separator accepts prefix with separator + accepts prefix and suffix arguments accepts prefix and suffix arguments +WaitGroup + waits until concurrent executions are finished waits until concurrent executions are finished + increments the counter from executing fibers increments the counter from executing fibers + #add + can't increment after reaching negative counter can't increment after reaching negative counter + resumes waiters when reaching negative counter resumes waiters when reaching negative counter + can't decrement to a negative counter can't decrement to a negative counter + takes a block to WaitGroup.wait takes a block to WaitGroup.wait + #done + can't decrement to a negative counter can't decrement to a negative counter + resumes waiters when reaching negative counter resumes waiters when reaching negative counter + stress add/done/wait stress add/done/wait + #wait + immediately raises when counter is negative immediately raises when counter is negative + raises when counter is positive after wake up raises when counter is positive after wake up + immediately returns when counter is zero immediately returns when counter is zero +__modti3 + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests + passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests +YAML::Any + .new .new + clones clones + exposes $~ when doing Regex#=== exposes $~ when doing Regex#=== + #size + of array of array + of hash of hash + can compare with === can compare with === + #dig? + returns nil for non-Hash/Array intermediary values returns nil for non-Hash/Array intermediary values + returns nil if not found returns nil if not found + gets the value at given path given splat gets the value at given path given splat + #[]? + hash + fetches Float64 fetches Float64 + fetches Slice(UInt8) fetches Slice(UInt8) + fetches Int64 fetches Int64 + fetches Array(YAML::Any) fetches Array(YAML::Any) + fetches Set(YAML::Any) fetches Set(YAML::Any) + fetches Nil fetches Nil + fetches Hash(YAML::Any, YAML::Any) fetches Hash(YAML::Any, YAML::Any) + fetches Time fetches Time + fetches Bool fetches Bool + fetches String fetches String + of array of array + of hash with integer keys of hash with integer keys + of hash of hash + is enumerable is enumerable + returns array of any when doing parse all returns array of any when doing parse all + #[] + of array of array + hash + fetches Hash(YAML::Any, YAML::Any) fetches Hash(YAML::Any, YAML::Any) + fetches Bool fetches Bool + fetches Time fetches Time + fetches Nil fetches Nil + fetches Array(YAML::Any) fetches Array(YAML::Any) + fetches Slice(UInt8) fetches Slice(UInt8) + fetches Set(YAML::Any) fetches Set(YAML::Any) + fetches String fetches String + fetches Float64 fetches Float64 + fetches Int64 fetches Int64 + #to_json #to_json + traverses big structure traverses big structure + dups dups + compares to other objects compares to other objects + dig + raises if not found raises if not found + gets the value at given path given splat gets the value at given path given splat + casts + gets anchor gets anchor + gets float64 gets float64 + doesn't get quoted numbers doesn't get quoted numbers + gets int32 gets int32 + gets bytes gets bytes + gets hash gets hash + gets int64 gets int64 + gets string gets string + gets yes/no unquoted booleans gets yes/no unquoted booleans + gets nil gets nil + gets float32 from JSON integer (#8618) gets float32 from JSON integer (#8618) + gets float64 from JSON integer (#8618) gets float64 from JSON integer (#8618) + gets time gets time + gets array gets array + gets bool gets bool + gets float32 gets float32 +String::Builder + raises EOFError raises EOFError + raises if invokes to_s twice raises if invokes to_s twice + builds builds + #chomp! + returns self returns self + goes back goes back + allocates for > 1 GB allocates for > 1 GB + goes back all goes back all +HTTP::Client + will retry once on connection error will retry once on connection error + cannot reconnect when initialized with IO cannot reconnect when initialized with IO + doesn't read the body if request was HEAD doesn't read the body if request was HEAD + tests write_timeout tests write_timeout + #set_defaults + sets default Host header sets default Host header + will not retry when closed (block) (#12464) will not retry when closed (block) (#12464) + will not retry when closed (non-block) (#12464) will not retry when closed (non-block) (#12464) + works with IO works with IO + tests empty Content-Type tests empty Content-Type + tests read_timeout tests read_timeout + can be subclassed can be subclassed + raises if URI is missing scheme raises if URI is missing scheme + from String + raises when not a host raises when not a host + will retry a broken socket will retry a broken socket + sends a 'connection: close' header on one-shot request with block sends a 'connection: close' header on one-shot request with block + raises if URI is missing host raises if URI is missing host + logging + emit logs with block emit logs with block + emit logs emit logs + tests connect_timeout tests connect_timeout + sends a 'connection: close' header on one-shot request sends a 'connection: close' header on one-shot request + from a host + yields to a block yields to a block + will not retry if IO::Error in request handling will not retry if IO::Error in request handling + from URI + raises error if URI is missing host raises error if URI is missing host + keeps context keeps context + allows for specified ports allows for specified ports + has sane defaults has sane defaults + doesn't take context for HTTP doesn't take context for HTTP + yields to a block yields to a block + raises error if not http schema raises error if not http schema + detects HTTPS detects HTTPS + can specify host and port when initialized with IO can specify host and port when initialized with IO + ensures closing the response when breaking out of block ensures closing the response when breaking out of block + sends the host header ipv6 with brackets sends the host header ipv6 with brackets + retry does not affect implicit compression (#11354) retry does not affect implicit compression (#11354) +Log::Builder + creates a log with nil backend creates a log with nil backend + can turn off parent and allow child source can turn off parent and allow child source + creates a log for broadcast backend creates a log for broadcast backend + can reconfigures existing logs can reconfigures existing logs + creates a log with single backend creates a log with single backend + uses last level for a source x backend (single-backend) uses last level for a source x backend (single-backend) + creates a log with broadcast backend creates a log with broadcast backend + removes all logs backends on .clear removes all logs backends on .clear + should allow collection of unreferenced logs should allow collection of unreferenced logs + creates a log for same broadcast backend added multiple times creates a log for same broadcast backend added multiple times + should allow recreation of deallocated logs should allow recreation of deallocated logs + returns log without backend if pattern does not match returns log without backend if pattern does not match + returns log with backend if pattern matches returns log with backend if pattern matches + uses last level for a source x backend uses last level for a source x backend + returns same instance returns same instance + .matches + on third level on third level + on second level on second level + on top-level on top-level + avoids prefix collision avoids prefix collision + on first level on first level + does not alter user-provided broadcast backend does not alter user-provided broadcast backend +UNIXSocket + sends and receives messages sends and receives messages + tests read and write timeouts tests read and write timeouts + raises when path is too long raises when path is too long + tests socket options tests socket options + creates a pair of sockets creates a pair of sockets + sync flag after accept sync flag after accept +Backtrace + prints exception backtrace to stderr prints exception backtrace to stderr + print exception with non-existing PWD print exception with non-existing PWD + prints file line:column prints file line:column + prints crash backtrace to stderr prints crash backtrace to stderr + doesn't relativize paths outside of current dir (#10169) doesn't relativize paths outside of current dir (#10169) +OpenSSL::SSL::Context + insecure for server insecure for server + returns options returns options + sets the verify mode sets the verify mode + fails to set private key fails to set private key + new for server new for server + sets certificate chain sets certificate chain + ciphers + sets cipher_suites sets cipher_suites + sets old ciphers sets old ciphers + sets modern ciphers sets modern ciphers + sets ciphers sets ciphers + sets intermediate ciphers sets intermediate ciphers + uses intermediate default ciphers uses intermediate default ciphers + removes options removes options + returns modes returns modes + sets private key sets private key + adds options adds options + calls #finalize on insecure client context calls #finalize on insecure client context + calls #finalize on insecure server context calls #finalize on insecure server context + new for client new for client + adds temporary ecdh curve (P-256) adds temporary ecdh curve (P-256) + changes security level changes security level + LibSSL::VerifyMode + .parse none (#7455) .parse none (#7455) + removes modes removes modes + fails to set certificate chain fails to set certificate chain + .from_hash + builds builds + errors errors + alpn_protocol= alpn_protocol= + adds modes adds modes + insecure for client insecure for client +IO::Delimited + #write + raises raises + #read + with partial read + handles partial reads handles partial reads + without peeking + doesn't clobber active_delimiter_buffer doesn't clobber active_delimiter_buffer + handles nearly a delimiter at the end handles nearly a delimiter at the end + doesn't clobber the buffer on closely-offset partial matches doesn't clobber the buffer on closely-offset partial matches + doesn't read past the limit doesn't read past the limit + handles the delimiter at the start handles the delimiter at the start + doesn't read past the limit (char-by-char) doesn't read past the limit (char-by-char) + handles the delimiter at the end handles the delimiter at the end + with peeking + handles the delimiter at the end handles the delimiter at the end + handles the delimiter at the start handles the delimiter at the start + handles the case of peek matching first byte, not having enough room, but later matching handles the case of peek matching first byte, not having enough room, but later matching + handles the case of peek matching first byte, not having enough room, but rest not matching handles the case of peek matching first byte, not having enough room, but rest not matching + doesn't read past the limit, single byte doesn't read past the limit, single byte + returns empty when there's no data returns empty when there's no data + peeks, everything matches but we can't know what will happen after that peeks, everything matches but we can't know what will happen after that + handles the case of the active delimited buffer including the delimiter handles the case of the active delimited buffer including the delimiter + handles nearly a delimiter at the end handles nearly a delimiter at the end + handles the case of peek matching first byte, not having enough room, but later not matching handles the case of peek matching first byte, not having enough room, but later not matching + handles the case of peek matching first byte, not having enough room, but rest not immediately matching (with a potential match afterwards) handles the case of peek matching first byte, not having enough room, but rest not immediately matching (with a potential match afterwards) + doesn't read past the limit (char-by-char) doesn't read past the limit (char-by-char) + can peek if first byte found but doesn't fully match, and the byte isn't there in the peek buffer can peek if first byte found but doesn't fully match, and the byte isn't there in the peek buffer + doesn't clobber the buffer on closely-offset partial matches doesn't clobber the buffer on closely-offset partial matches + doesn't read past the limit doesn't read past the limit + handles the case of peek matching first byte, not having enough room, but later not matching (limted slice) handles the case of peek matching first byte, not having enough room, but later not matching (limted slice) + doesn't clobber active_delimiter_buffer doesn't clobber active_delimiter_buffer + can peek if first byte found but doesn't fully match, and there's that first byte again in the peek buffer can peek if first byte found but doesn't fully match, and there's that first byte again in the peek buffer + handles the case of peek matching first byte, not having enough room, later only partially matching handles the case of peek matching first byte, not having enough room, later only partially matching + #gets with peeking when can't peek + gets gets + peeks peeks + #close + stops reading stops reading + closes the underlying stream if sync_close is true closes the underlying stream if sync_close is true +Number + #format + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + does not perform double rounding when decimal places are given does not perform double rounding when decimal places are given + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + extracts integer part correctly (#12997) extracts integer part correctly (#12997) + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + #humanize + assert assert + assert assert + assert assert + assert assert + assert assert + using custom prefixes + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert +Enumerable + index_by + creates a hash indexed by the value returned by the block creates a hash indexed by the value returned by the block + overrides values if a value is returned twice overrides values if a value is returned twice + first + calls block if empty calls block if empty + assert assert + raises if enumerable empty raises if enumerable empty + gets first gets first + in_groups_of + raises argument error if size is less than 0 raises argument error if size is less than 0 + assert assert + reuses with existing array reuses with existing array + assert assert + assert assert + assert assert + reuses with true reuses with true + takes a block takes a block + assert assert + to_h + with block with block + for array for array + for tuples for tuples + find! + finds finds + raises if not found raises if not found + sum + assert assert + slices slices + strings strings + assert assert + array of arrays array of arrays + assert assert + assert assert + uses additive_identity from type uses additive_identity from type + assert assert + assert assert + float float + max_by? + returns nil if empty returns nil if empty + first? + returns nil if enumerable empty returns nil if enumerable empty + gets first? gets first? + zip + works for Iterators as receiver works for Iterators as receiver + minmax_by + assert assert + product + assert assert + assert assert + uses zero from type uses zero from type + assert assert + assert assert + assert assert + assert assert + #present? + assert assert + assert assert + partition + assert assert + with mono type on mono type with mono type on mono type + with missing type on union type with missing type on union type + assert assert + with mono type on union type with mono type on union type + with union type on union type with union type on union type + max_of + raises if not comparable raises if not comparable + assert assert + #join + (&) (&) + (io, separator, &) (io, separator, &) + (separator, io) (deprecated) (separator, io) (deprecated) + (io) (io) + (separator, io, &) (deprecated) (separator, io, &) (deprecated) + (separator, &) (separator, &) + (separator) (separator) + (io, &) (io, &) + (io, separator) (io, separator) + () () + all? with pattern + returns true returns true + returns false returns false + map_with_index + yields the element and the index yields the element and the index + yields the element and the index of an iterator yields the element and the index of an iterator + count with block + returns the number of the times the item is present returns the number of the times the item is present + chunk + does not return elements for which the block returns Enumerable::Chunk::Drop does not return elements for which the block returns Enumerable::Chunk::Drop + rewind rewind + returns elements for which the block returns Enumerable::Chunk::Alone in separate Arrays returns elements for which the block returns Enumerable::Chunk::Alone in separate Arrays + nil allowed as value nil allowed as value + alone all alone all + work with class work with class + drop all drop all + nil 2 case nil 2 case + works with block works with block + returns elements of the Enumerable in an Array of Tuple, {v, ary}, where 'ary' contains the consecutive elements for which the block returned the value 'v' returns elements of the Enumerable in an Array of Tuple, {v, ary}, where 'ary' contains the consecutive elements for which the block returned the value 'v' + reuses true reuses true + works works + #to_set + without block + creates a Set from the unique elements of the collection creates a Set from the unique elements of the collection + with block + creates a Set from running the block against the collection's elements creates a Set from running the block against the collection's elements + first + assert assert + raises if count is negative raises if count is negative + assert assert + min + raises if empty raises if empty + raises if n is negative raises if n is negative + assert assert + assert assert + raises if not comparable raises if not comparable + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + raises if not comparable in min(n) raises if not comparable in min(n) + assert assert + does not modify the array does not modify the array + #empty? + assert assert + assert assert + max? + returns nil if empty returns nil if empty + max_of? + returns nil if empty returns nil if empty + none? + assert assert + assert assert + to_a + without a block of an interface type without a block of an interface type + without a block without a block + with a block with a block + index with a block + returns nil if no object could be found returns nil if no object could be found + returns the index of the first element where the block returns true returns the index of the first element where the block returns true + to_a + converts to an Array converts to an Array + reduce + does not raise if empty if there is a memo argument does not raise if empty if there is a memo argument + assert assert + assert assert + raises if empty raises if empty + assert assert + allows block return type to be different from element type allows block return type to be different from element type + assert assert + zip? + works for Iterators as receiver works for Iterators as receiver + any? without block + returns true if at least one element is truthy returns true if at least one element is truthy + returns false if all elements are falsey returns false if all elements are falsey + size without block + returns the number of elements in the Enumerable returns the number of elements in the Enumerable + #accumulate + prefix sums + assert assert + assert assert + assert assert + prefix sums, with init + assert assert + preserves initial type preserves initial type + assert assert + assert assert + generic cumulative fold + assert assert + assert assert + generic cumulative fold, with init + preserves initial type preserves initial type + assert assert + assert assert + max_by + assert assert + index! with a block + raises if not found raises if not found + returns the index of the first element where the block returns true returns the index of the first element where the block returns true + min? + returns nil if empty returns nil if empty + sample + multiple-element + samples k elements out of n samples k elements out of n + samples 0 elements samples 0 elements + samples k elements out of n, where k > n samples k elements out of n, where k > n + raises on k < 0 raises on k < 0 + samples k elements out of n, with random samples k elements out of n, with random + samples 1 element samples 1 element + single-element + raises on empty self raises on empty self + samples without random samples without random + samples with random samples with random + each_with_index + gets each_with_index iterator gets each_with_index iterator + yields the element and the index yields the element and the index + accepts an optional offset parameter accepts an optional offset parameter + index with an object + returns nil if the object was not found returns nil if the object was not found + returns the index of that object if found returns the index of that object if found + compact map + assert assert + each_with_object + yields the element and the given object yields the element and the given object + gets each_with_object iterator gets each_with_object iterator + includes? + is false if the object is not part of the collection is false if the object is not part of the collection + is true if the object exists in the collection is true if the object exists in the collection + skip + returns an empty array when skipping more elements than array size returns an empty array when skipping more elements than array size + returns an array without the skipped elements returns an array without the skipped elements + raises if count is negative raises if count is negative + min_of? + returns nil if empty returns nil if empty + map + applies the function to each element and returns a new array applies the function to each element and returns a new array + leaves the original unmodified leaves the original unmodified + minmax_of + assert assert + raises if not comparable raises if not comparable + index! with an object + raises if not found raises if not found + returns the index of that object if found returns the index of that object if found + min_by + assert assert + all? with block + returns false returns false + returns true returns true + minmax + assert assert + raises if empty raises if empty + min_by? + returns nil if empty returns nil if empty + minmax? + raises if not comparable raises if not comparable + returns two nils if empty returns two nils if empty + group_by + groups can group by size (like the doc example) groups can group by size (like the doc example) + assert assert + all? without block + returns false returns false + returns true returns true + none? with pattern + assert assert + assert assert + select + with type with type + selects the values for which the block returns true selects the values for which the block returns true + with pattern with pattern + in slices of + assert assert + assert assert + raises argument error if size is less than 0 raises argument error if size is less than 0 + assert assert + assert assert + each_slice + reuses with existing array reuses with existing array + returns each_slice iterator returns each_slice iterator + returns full slices returns full slices + returns partial slices returns partial slices + reuses with true reuses with true + none? without block + assert assert + assert assert + any? with block + returns true if at least one element fulfills the condition returns true if at least one element fulfills the condition + returns false if all elements does not fulfill the condition returns false if all elements does not fulfill the condition + reduce? + assert assert + returns nil if empty returns nil if empty + allows block return type to be different from element type allows block return type to be different from element type + cycle + calls forever if we don't break calls forever if we don't break + calls the block n times given the optional argument calls the block n times given the optional argument + #each_cons_pair + returns running pairs returns running pairs + minmax_of? + returns two nils if empty returns two nils if empty + any? with pattern + returns false returns false + returns true returns true + reject + with type with type + with type, for tuples with type, for tuples + rejects with pattern rejects with pattern + rejects the values for which the block returns true rejects the values for which the block returns true + tally_by + returns a hash with counts according to the value returned by the block returns a hash with counts according to the value returned by the block + with hash + returns a hash with counts according to the value returned by the block returns a hash with counts according to the value returned by the block + min_of + assert assert + raises if not comparable raises if not comparable + flat_map + does example 4 does example 4 + does example 1 does example 1 + does example 2 does example 2 + does example 3 does example 3 + accepts mixed element types accepts mixed element types + flattens iterators flattens iterators + find + doesn't find with default value doesn't find with default value + doesn't find doesn't find + finds finds + each_step + "accepts an offset larger then the enumerable size" yielding "accepts an offset larger then the enumerable size" yielding + "yields every 2nd element" yielding "yields every 2nd element" yielding + "accepts an optional offset parameter" iterator "accepts an optional offset parameter" iterator + "accepts an offset larger then the step size" yielding "accepts an offset larger then the step size" yielding + doesn't accept a negative offset doesn't accept a negative offset + "accepts a step larger then the enumerable size" iterator "accepts a step larger then the enumerable size" iterator + doesn't accept a step of 0 doesn't accept a step of 0 + "accepts an offset larger then the enumerable size" iterator "accepts an offset larger then the enumerable size" iterator + "accepts a step larger then the enumerable size" yielding "accepts a step larger then the enumerable size" yielding + "accepts an offset larger then the step size" iterator "accepts an offset larger then the step size" iterator + "accepts an offset of 0" yielding "accepts an offset of 0" yielding + "accepts an offset of 0" iterator "accepts an offset of 0" iterator + doesn't accept a negative step doesn't accept a negative step + "yields every 2nd element" iterator "yields every 2nd element" iterator + "accepts an optional offset parameter" yielding "accepts an optional offset parameter" yielding + max + raises if n is negative raises if n is negative + assert assert + does not modify the array does not modify the array + assert assert + assert assert + assert assert + raises if not comparable raises if not comparable + assert assert + assert assert + assert assert + assert assert + assert assert + raises if empty raises if empty + raises if not comparable in max(n) raises if not comparable in max(n) + chunks + nil 2 case nil 2 case + returns elements for which the block returns Enumerable::Chunk::Alone in separate Arrays returns elements for which the block returns Enumerable::Chunk::Alone in separate Arrays + works works + drop all drop all + work with class work with class + nil allowed as value nil allowed as value + work with pure enumerable work with pure enumerable + alone all alone all + does not return elements for which the block returns Enumerable::Chunk::Drop does not return elements for which the block returns Enumerable::Chunk::Drop + minmax_by? + returns two nils if empty returns two nils if empty + tally + returns a hash with counts according to the value returns a hash with counts according to the value + with hash + tallies an interface type tallies an interface type + updates existing hash with counts according to the value updates existing hash with counts according to the value + returns a hash with Int64 counts according to the value returns a hash with Int64 counts according to the value + returns a hash with counts according to the value returns a hash with counts according to the value + ignores the default value ignores the default value + one? + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + skip_while + skips elements while the condition holds true skips elements while the condition holds true + returns the full Array if the first check is false returns the full Array if the first check is false + does not yield to the block anymore once it returned false does not yield to the block anymore once it returned false + returns an empty array if the condition is always true returns an empty array if the condition is always true + take_while + returns the full Array if the condition is always true returns the full Array if the condition is always true + returns an empty Array if the block is false for the first element returns an empty Array if the block is false for the first element + keeps elements while the block returns true keeps elements while the block returns true + does not call the block again once it returned false does not call the block again once it returned false + #each_cons + yield + returns running pairs returns running pairs + yields running pairs with reuse = deque yields running pairs with reuse = deque + yields running pairs with reuse = true yields running pairs with reuse = true + yields running pairs with reuse = array yields running pairs with reuse = array + returns running triples returns running triples + iterator + iterates iterates + iterates with reuse = true iterates with reuse = true + iterates with reuse = array iterates with reuse = array + iterates with reuse = deque iterates with reuse = deque +Struct + does dup does dup + does == does == + does hash for struct wrapper (#1940) does hash for struct wrapper (#1940) + should retrieve multiple descendants from hashed data structure should retrieve multiple descendants from hashed data structure + clones with def_clone clones with def_clone + does hash does hash + does to_s does to_s +File + iterates with each_byte iterates with each_byte + fsync + syncs OS file buffer to disk syncs OS file buffer to disk + closed stream + raises if writing on a closed stream raises if writing on a closed stream + size + raises an error when the file does not exist raises an error when the file does not exist + assert assert + raises an error when a component of the path is a file raises an error when a component of the path is a file + assert assert + .copy + copies a file copies a file + overwrites existing destination and permissions overwrites existing destination and permissions + copies permissions copies permissions + link + creates a hard link creates a hard link + rewinds rewinds + encoding + reads with encoding reads with encoding + writes with encoding writes with encoding + does each line with encoding does each line with encoding + reads lines with encoding reads lines with encoding + opens with encoding opens with encoding + raises if invoking seek with a closed file raises if invoking seek with a closed file + reads at offset reads at offset + opens with perm (File::Permissions) opens with perm (File::Permissions) + File::Info + gets for a character device gets for a character device + .readable? + gives false when the file has no read permissions gives false when the file has no read permissions + gives false when the file has no permissions gives false when the file has no permissions + gives false when the file doesn't exist gives false when the file doesn't exist + follows symlinks follows symlinks + gives true gives true + gives false when the symbolic link destination doesn't exist gives false when the symbolic link destination doesn't exist + gives false when a component of the path is a file gives false when a component of the path is a file + tests unequal for file and directory tests unequal for file and directory + gets mtime for new file gets mtime for new file + gets for non-existent file and raises gets for non-existent file and raises + tests equal for the same file tests equal for the same file + .executable? + gives true gives true + gives false when the file doesn't exist gives false when the file doesn't exist + gives false when a component of the path is a file gives false when a component of the path is a file + gives false gives false + follows symlinks follows symlinks + gets for a symlink gets for a symlink + gets for this file gets for this file + gets for pipe gets for pipe + .writable? + gives true gives true + gives false when the symbolic link destination doesn't exist gives false when the symbolic link destination doesn't exist + gives false when a component of the path is a file gives false when a component of the path is a file + gives false when the file doesn't exist gives false when the file doesn't exist + follows symlinks follows symlinks + gives false when the file has no write permissions gives false when the file has no write permissions + tests unequal for different files tests unequal for different files + gets for this directory gets for this directory + tests equal for the same directory tests equal for the same directory + gets for open file gets for open file + raises when reading at offset outside of bounds raises when reading at offset outside of bounds + raises when writing to a file with no permission raises when writing to a file with no permission + raises when reading a file with no permission raises when reading a file with no permission + .match? + * don't match path separator * don't match path separator + special chars special chars + ** matches path separator ** matches path separator + alternates alternates + matches basics matches basics + matches unicode characters matches unicode characters + classes classes + escape escape + classes escapes classes escapes + matches multiple expansions matches multiple expansions + truncate + truncates truncates + truncates completely when no size is passed truncates completely when no size is passed + requires a file opened for writing requires a file opened for writing + .expand_path + converts a pathname to an absolute pathname converts a pathname to an absolute pathname + gets basename gets basename + .readlink + reads link reads link + utime + raises if file not found raises if file not found + sets times with instance method sets times with instance method + sets times with class method sets times with class method + reads lines from file with chomp = false reads lines from file with chomp = false + raises if invoking tell with a closed file raises if invoking tell with a closed file + opens with perm (int) opens with perm (int) + raises on null byte + errors on symlink? errors on symlink? + errors on basename errors on basename + errors on directory? errors on directory? + errors on exists? errors on exists? + errors on symlink, second arg errors on symlink, second arg + errors on executable? errors on executable? + errors on rename (second arg) errors on rename (second arg) + errors on symlink, first arg errors on symlink, first arg + errors on file? errors on file? + errors on link, second arg errors on link, second arg + errors on expand_path, first arg errors on expand_path, first arg + errors on extname errors on extname + errors on new errors on new + errors on rename (first arg) errors on rename (first arg) + errors on join errors on join + errors on readable? errors on readable? + errors on link, first arg errors on link, first arg + errors on expand_path, second arg errors on expand_path, second arg + errors on writable? errors on writable? + errors on size errors on size + errors on info? errors on info? + errors on basename 2, first arg errors on basename 2, first arg + errors on basename 2, second arg errors on basename 2, second arg + errors on dirname errors on dirname + errors on delete errors on delete + errors on info errors on info + returns the current write position with tell returns the current write position with tell + gets dirname gets dirname + close + should not raise when closing twice should not raise when closing twice + is not closed when opening is not closed when opening + does to_s when closed does to_s when closed + is closed when closed is closed when closed + rename + renames a File instance renames a File instance + replaces a file replaces a file + raises if old file doesn't exist raises if old file doesn't exist + renames a file renames a file + returns the actual position with tell after append returns the actual position with tell after append + locks file opened in append mode (#14702) locks file opened in append mode (#14702) + exists? + gives false gives false + gives true gives true + follows symlinks follows symlinks + gives false when a component of the path is a file gives false when a component of the path is a file + clears the read buffer after a seek clears the read buffer after a seek + reads entire file from proc virtual filesystem reads entire file from proc virtual filesystem + truncates file opened in append mode (#14702) truncates file opened in append mode (#14702) + #realpath + raises if file doesn't exist raises if file doesn't exist + expands paths for normal files expands paths for normal files + expands paths of symlinks expands paths of symlinks + expands multiple layers of symlinks expands multiple layers of symlinks + empty? + gives false when file is not empty gives false when file is not empty + gives true when file is empty gives true when file is empty + raises an error when a component of the path is a file raises an error when a component of the path is a file + raises an error when the file does not exist raises an error when the file does not exist + can navigate with pos can navigate with pos + blocking + reads non-blocking file reads non-blocking file + opens regular file as blocking opens regular file as blocking + opens regular file as non-blocking opens regular file as non-blocking + writes and reads large non-blocking file writes and reads large non-blocking file + opens fifo file as non-blocking opens fifo file as non-blocking + opens character device opens character device + symlink + works if destination contains forward slashes (#14520) works if destination contains forward slashes (#14520) + creates a symbolic link creates a symbolic link + reads entire file reads entire file + chmod + can take File::Permissions can take File::Permissions + changes file permissions with instance method changes file permissions with instance method + raises when destination doesn't exist raises when destination doesn't exist + changes dir permissions changes dir permissions + changes file permissions with class method changes file permissions with class method + follows symlinks follows symlinks + #delete + deletes deletes + reads lines from file reads lines from file + supports the `b` mode flag supports the `b` mode flag + file? + gives false when a component of the path is a file gives false when a component of the path is a file + gives false when the file doesn't exist gives false when the file doesn't exist + gives false with dir gives false with dir + gives true gives true + flock + blocking: false + #flock_exclusive soft blocking fiber #flock_exclusive soft blocking fiber + #flock_shared soft blocking fiber #flock_shared soft blocking fiber + #flock_shared #flock_shared + blocking: true + #flock_shared #flock_shared + #flock_shared soft blocking fiber #flock_shared soft blocking fiber + #flock_exclusive soft blocking fiber #flock_exclusive soft blocking fiber + #flock_exclusive #flock_exclusive + write + raises if trying to write to a file not opened for writing raises if trying to write to a file not opened for writing + can write to a file can write to a file + writes bytes writes bytes + can create a new file in append mode can create a new file in append mode + writes io writes io + can append to an existing file can append to an existing file + does not overwrite existing content in append mode does not overwrite existing content in append mode + .same_content? + compares two different files compares two different files + compares two equal files compares two equal files + symlink? + gives false when the symlink doesn't exist gives false when the symlink doesn't exist + gives false when a component of the path is a file gives false when a component of the path is a file + gives false gives false + reads lines from file with each reads lines from file with each + gets path gets path + returns the current read position with tell returns the current read position with tell + .delete + deletes a read-only file deletes a read-only file + deletes a file deletes a file + deletes an open file deletes an open file + raises when file doesn't exist raises when file doesn't exist + deletes? a file deletes? a file + deletes a symlink directory deletes a symlink directory + same? + compares following symlinks only if requested compares following symlinks only if requested + does to_s and inspect does to_s and inspect + constructs a path from parts constructs a path from parts + raises if opening a non-existent file raises if opening a non-existent file + File::Permissions + does to_s does to_s + iterates with each_char iterates with each_char + .touch + touches existing + directory directory + file file + raises if path contains non-existent directory raises if path contains non-existent directory + creates file if it doesn't exist creates file if it doesn't exist + sets file times to given time sets file times to given time + sets file times to current time if no time argument given sets file times to current time if no time argument given + raises if file cannot be accessed raises if file cannot be accessed + gets extname gets extname + seeks from the current position seeks from the current position + reads lines from file with each, chomp = false reads lines from file with each, chomp = false + chown chown + directory? + gives false gives false + gives true gives true + gives false when the directory doesn't exist gives false when the directory doesn't exist + gives false when a component of the path is a file gives false when a component of the path is a file + gets basename removing suffix gets basename removing suffix +Float + does infinite? does infinite? + #next_float + does for f64 does for f64 + does for f32 does for f32 + #prev_float + does for f32 does for f32 + does for f64 does for f64 + ** + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + hash + does for Float64 does for Float64 + does for Float32 does for Float32 + round + assert assert + assert assert + assert assert + remainder + preserves type preserves type + assert assert + assert assert + raises when mods by zero raises when mods by zero + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + floor division // + applies floor applies floor + preserves type of lhs preserves type of lhs clones clones - inspect inspect - test multiplicative_identity test multiplicative_identity - cis cis -URI::Params + #inspect + does inspect for f64 with IO does inspect for f64 with IO + does inspect for f64 does inspect for f64 + does inspect for f32 does inspect for f32 + does inspect for f32 does inspect for f32 + does nan? does nan? + does finite? does finite? + constants have right binary value constants have right binary value + does unary - does unary - + fdiv + assert assert + assert assert + assert assert + assert assert + assert assert + converts infinity converts infinity + ceil + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + #abs #abs + #to_s + does to_s for f32 does to_s for f32 + does to_s for f64 does to_s for f64 + divmod + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + #integer? + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + % + uses modulo behavior, not remainder behavior uses modulo behavior, not remainder behavior + returns nil in <=> for NaN values (Float32) returns nil in <=> for NaN values (Float32) + modulo + assert assert + assert assert + assert assert + assert assert + raises when mods by zero raises when mods by zero + assert assert + assert assert + assert assert + assert assert + returns nil in <=> for NaN values (Float64) returns nil in <=> for NaN values (Float64) .new + fallback overload fallback overload + String overload String overload + floor assert assert - #dup - gives a whole new set of params gives a whole new set of params - #fetch_all(name) - fetches list of all values for provided param name fetches list of all values for provided param name - #set_all(name, values) - sets values for provided param name sets values for provided param name - #add(name, value) - appends new value for provided param name appends new value for provided param name - .build - builds form from {"foo" => [""], "bar" => [""]} builds form from {"foo" => [""], "bar" => [""]} - builds form from {"foo" => [""]} builds form from {"foo" => [""]} - builds form from {"foo" => ["hello+world"]} builds form from {"foo" => ["hello+world"]} - builds with IO builds with IO - builds form from {"foo" => ["hello world"]} builds form from {"foo" => ["hello world"]} - builds form from {"bar" => [""], "foo" => [""]} builds form from {"bar" => [""], "foo" => [""]} - builds form from {"foo" => ["bar"]} builds form from {"foo" => ["bar"]} - builds form from {"foo" => ["bar", "baz"]} builds form from {"foo" => ["bar", "baz"]} - turns spaces to %20 if wanted turns spaces to %20 if wanted - builds form from {"foo" => ["bar"], "baz" => ["qux"]} builds form from {"foo" => ["bar"], "baz" => ["qux"]} - .parse - parses foo=bar=qux parses foo=bar=qux - parses foo=bar&foo=baz parses foo=bar&foo=baz - parses foo=bar parses foo=bar - parses foo=bar;baz=qux parses foo=bar;baz=qux - parses bar&foo parses bar&foo - parses foo=&bar parses foo=&bar - parses foo=bar&baz=qux parses foo=bar&baz=qux - parses && parses && - parses foo=hello+world parses foo=hello+world - parses foo=hello%2Bworld parses foo=hello%2Bworld - parses parses - parses foo parses foo - parses foo= parses foo= - parses parses - #fetch(name, &block) - return default value when there is no such param return default value when there is no such param - returns first value for provided param name returns first value for provided param name - #[](name) - returns first value for provided param name returns first value for provided param name - raises KeyError when there is no such param raises KeyError when there is no such param - #empty? - test empty? test empty? - #clone - gives a whole new set of params gives a whole new set of params - #fetch(name, default) - returns first value for provided param name returns first value for provided param name - return default value when there is no such param return default value when there is no such param - #merge! - does not modify the other params - with replace: true with replace: true - with replace: false with replace: false - modifies the receiver modifies the receiver - #delete - deletes first value for provided param name and returns it deletes first value for provided param name and returns it - #merge - does not modify the receiver does not modify the receiver - appends values with the same key with replace: false appends values with the same key with replace: false - replaces all values with the same key by default replaces all values with the same key by default - #[]=(name, value) - sets value for provided param name (array) sets value for provided param name (array) - sets value for provided param name sets value for provided param name - adds new name => value pair if there is no such param adds new name => value pair if there is no such param - .encode - builds from hash with IO builds from hash with IO - builds from hash builds from hash - builds from named tuple with IO builds from named tuple with IO - builds from named tuple builds from named tuple + assert assert +ARGV + accepts UTF-8 command-line arguments accepts UTF-8 command-line arguments +Int + #rotate_right + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + does % does % + "#times for UInt32 (#5019)" yielding "#times for UInt32 (#5019)" yielding + #to_unsigned! + does for Int16 does for Int16 + does for Int128 does for Int128 + does for UInt128 does for UInt128 + does for UInt64 does for UInt64 + does for Int32 does for Int32 + does for Int64 does for Int64 + does for UInt16 does for UInt16 + does for UInt32 does for UInt32 + does for UInt8 does for UInt8 + does for Int8 does for Int8 + #popcount + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + #to_unsigned + does for Int8 does for Int8 + does for UInt128 does for UInt128 + does for Int128 does for Int128 + does for Int32 does for Int32 + does for UInt64 does for UInt64 + does for Int64 does for Int64 + does for Int16 does for Int16 + does for UInt8 does for UInt8 + does for UInt32 does for UInt32 + does for UInt16 does for UInt16 + arithmetic division / + divides negative numbers divides negative numbers + divides Int::MIN by -1 divides Int::MIN by -1 + divides by zero divides by zero + upto iterator ups and downs upto iterator ups and downs + #to_signed + does for UInt128 does for UInt128 + does for Int64 does for Int64 + does for UInt32 does for UInt32 + does for UInt64 does for UInt64 + does for Int8 does for Int8 + does for Int128 does for Int128 + does for UInt8 does for UInt8 + does for UInt16 does for UInt16 + does for Int16 does for Int16 + does for Int32 does for Int32 + #unsafe_chr #unsafe_chr + lcm + assert assert + assert assert + assert assert + assert assert + assert assert + doesn't silently overflow doesn't silently overflow + gcd + assert assert + doesn't silently overflow doesn't silently overflow + assert assert + raises on too big result to fit in result type raises on too big result to fit in result type + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + does downto does downto + tdivs tdivs + downto iterator ups and downs downto iterator ups and downs + abs + does for unsigned does for unsigned + does for signed does for signed + floor division // + preserves type of lhs preserves type of lhs + divides negative numbers divides negative numbers + pred + assert assert + assert assert + assert assert + #bits + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + raises when invalid indexes are provided raises when invalid indexes are provided + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + #chr #chr + raises when divides Int::MIN by -1 raises when divides Int::MIN by -1 + fdiv + assert assert + assert assert + assert assert + assert assert + assert assert + #to_signed! + does for Int64 does for Int64 + does for Int8 does for Int8 + does for UInt32 does for UInt32 + does for UInt64 does for UInt64 + does for Int16 does for Int16 + does for Int128 does for Int128 + does for UInt16 does for UInt16 + does for Int32 does for Int32 + does for UInt128 does for UInt128 + does for UInt8 does for UInt8 + gets upto iterator max gets upto iterator max + ** + with positive Int32 with positive Int32 + should work with large integers should work with large integers + raises with negative exponent raises with negative exponent + with positive UInt8 with positive UInt8 + with float + assert assert + assert assert + assert assert #to_s - serializes params to http form serializes params to http form - turns spaces to %20 if space_to_plus is false turns spaces to %20 if space_to_plus is false - turns spaces to + by default turns spaces to + by default - #has_key?(name) - returns true if param with provided name exists returns true if param with provided name exists - return false if param with provided name does not exist return false if param with provided name does not exist - #each - calls provided proc for each name, value pair, including multiple values per one param name calls provided proc for each name, value pair, including multiple values per one param name - #[]?(name) - return nil when there is no such param return nil when there is no such param - returns first value for provided param name returns first value for provided param name - #inspect #inspect - #== - compares other compares other - compares other types compares other types - #delete_all - deletes all values for provided param name and returns them deletes all values for provided param name and returns them -Backtrace - prints exception backtrace to stderr prints exception backtrace to stderr - prints crash backtrace to stderr prints crash backtrace to stderr - prints file line:column prints file line:column - print exception with non-existing PWD print exception with non-existing PWD - doesn't relativize paths outside of current dir (#10169) doesn't relativize paths outside of current dir (#10169) -Digest::MD5 - #hexdigest can update within a loop from explicit expr (#9483) #hexdigest can update within a loop from explicit expr (#9483) - calculates hash from UInt8 slices calculates hash from UInt8 slices - can take a block can take a block - #hexdigest can update within a loop by indirect expr (#9483) #hexdigest can update within a loop by indirect expr (#9483) - .dup - leads to not sharing state leads to not sharing state - leads to deterministic updates leads to deterministic updates - preserves value preserves value - preserves type preserves type - can't call final twice can't call final twice - calculates hash from string calculates hash from string - resets resets - calculates hash of #to_slice calculates hash of #to_slice - calculates hash from unicode string calculates hash from unicode string - calculates base64'd hash from string calculates base64'd hash from string - context are independent context are independent - return the digest size return the digest size - digest with file content digest with file content - #hexfinal #hexfinal - calculates digest from string calculates digest from string -Subtle - compares constant time and slices strings compares constant time and slices strings - compares constant time bytes on equality compares constant time bytes on equality - compares constant time bytes bug compares constant time bytes bug - compares constant times compares constant times -IO::MultiWriter - #close - stops reading stops reading - closes the underlying stream if sync_close is true closes the underlying stream if sync_close is true - #flush - writes to IO and File writes to IO and File - #write - writes to multiple IOs writes to multiple IOs - #read - raises raises + precision parameter + converts 0 to "0" * 200 converts 0 to "0" * 200 + converts -1 to "-#{"0" * 199}1" converts -1 to "-#{"0" * 199}1" + converts 1 to "1" converts 1 to "1" + converts 1 to "01" converts 1 to "01" + converts 123 to "123" converts 123 to "123" + converts 0 to "00000" converts 0 to "00000" + converts 9223372036854775807_i64 to "#{"0" * 137}#{"1" * 63}" converts 9223372036854775807_i64 to "#{"0" * 137}#{"1" * 63}" + converts 1 to "1" converts 1 to "1" + converts 1 to "00001" converts 1 to "00001" + converts 9223372036854775807_i64 to "#{"1" * 63}" converts 9223372036854775807_i64 to "#{"1" * 63}" + converts 123 to "123" converts 123 to "123" + converts 2 to "#{"0" * 199}2" converts 2 to "#{"0" * 199}2" + converts -9223372036854775808_i64 to "-#{"0" * 136}1#{"0" * 63}" converts -9223372036854775808_i64 to "-#{"0" * 136}1#{"0" * 63}" + converts 0 to "0" converts 0 to "0" + converts 1 to "#{"0" * 199}1" converts 1 to "#{"0" * 199}1" + converts -9223372036854775808_i64 to "-01#{"0" * 63}" converts -9223372036854775808_i64 to "-01#{"0" * 63}" + converts -1 to "-1" converts -1 to "-1" + converts 123 to "#{"0" * 197}123" converts 123 to "#{"0" * 197}123" + raises on negative precision raises on negative precision + converts -1 to "-00001" converts -1 to "-00001" + converts -9223372036854775808_i64 to "-1#{"0" * 63}" converts -9223372036854775808_i64 to "-1#{"0" * 63}" + converts 0 to "" converts 0 to "" + converts 2 to "2" converts 2 to "2" + converts 2 to "02" converts 2 to "02" + converts 9223372036854775807_i64 to "#{"1" * 63}" converts 9223372036854775807_i64 to "#{"1" * 63}" + converts 9223372036854775807_i64 to "0#{"1" * 63}" converts 9223372036854775807_i64 to "0#{"1" * 63}" + converts 2 to "2" converts 2 to "2" + converts 123 to "123" converts 123 to "123" + converts 0 to "00" converts 0 to "00" + converts -1 to "-01" converts -1 to "-01" + converts -9223372036854775808_i64 to "-1#{"0" * 63}" converts -9223372036854775808_i64 to "-1#{"0" * 63}" + converts 123 to "00123" converts 123 to "00123" + converts -1 to "-1" converts -1 to "-1" + converts 2 to "00002" converts 2 to "00002" + converts 1 to "1" converts 1 to "1" + converts 0 to "0" converts 0 to "0" + extrema for various int sizes + converts -32768_i16 to "-32768" converts -32768_i16 to "-32768" + converts 65535_u16 to "65535" converts 65535_u16 to "65535" + converts Int128::MIN to "-170141183460469231731687303715884105728" converts Int128::MIN to "-170141183460469231731687303715884105728" + converts 9223372036854775807_i64 to "9223372036854775807" converts 9223372036854775807_i64 to "9223372036854775807" + converts 18446744073709551615_u64 to "18446744073709551615" converts 18446744073709551615_u64 to "18446744073709551615" + converts 255_u8 to "255" converts 255_u8 to "255" + converts Int128::MAX to "170141183460469231731687303715884105727" converts Int128::MAX to "170141183460469231731687303715884105727" + converts 127_i8 to "127" converts 127_i8 to "127" + converts -9223372036854775808_i64 to "-9223372036854775808" converts -9223372036854775808_i64 to "-9223372036854775808" + converts 32767_i16 to "32767" converts 32767_i16 to "32767" + converts UInt128::MAX to "340282366920938463463374607431768211455" converts UInt128::MAX to "340282366920938463463374607431768211455" + converts -128_i8 to "-128" converts -128_i8 to "-128" + converts -2147483648 to "-2147483648" converts -2147483648 to "-2147483648" + converts 2147483647 to "2147483647" converts 2147483647 to "2147483647" + converts 4294967295_u32 to "4294967295" converts 4294967295_u32 to "4294967295" + base and upcase parameters + converts 61 to "Z" converts 61 to "Z" + converts -12 to "-1100" converts -12 to "-1100" + converts -1234 to "-ya" converts -1234 to "-ya" + converts -1234 to "-4d2" converts -1234 to "-4d2" + converts 0 to "0" converts 0 to "0" + converts 1 to "1" converts 1 to "1" + converts -1234 to "-YA" converts -1234 to "-YA" + raises on base 1 raises on base 1 + converts 1234 to "4d2" converts 1234 to "4d2" + converts 0 to "0" converts 0 to "0" + converts 0 to "0" converts 0 to "0" + converts 36 to "A" converts 36 to "A" + raises on base 62 with upcase raises on base 62 with upcase + converts 12 to "1100" converts 12 to "1100" + converts 3843 to "ZZ" converts 3843 to "ZZ" + converts 10 to "a" converts 10 to "a" + converts 1234 to "YA" converts 1234 to "YA" + converts Int128::MIN to "-1#{"0" * 127}" converts Int128::MIN to "-1#{"0" * 127}" + converts -1234 to "-4D2" converts -1234 to "-4D2" + converts 1 to "1" converts 1 to "1" + converts 35 to "z" converts 35 to "z" + converts 97 to "1z" converts 97 to "1z" + converts 1 to "1" converts 1 to "1" + converts 62 to "10" converts 62 to "10" + raises on base 37 raises on base 37 + converts 1234 to "ya" converts 1234 to "ya" + converts -123456 to "-11110001001000000" converts -123456 to "-11110001001000000" + converts 1234 to "4D2" converts 1234 to "4D2" + divisible_by? + assert assert + assert assert + returns 0 when doing IntN::MIN % -1 (#8306) returns 0 when doing IntN::MIN % -1 (#8306) + #integer? + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + step + steps through limit steps through limit + ~ + assert assert + assert assert + .new + fallback overload fallback overload + String overload String overload + #byte_swap + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + does upto does upto + #neg_signed + does not overflow on Int32::MIN.abs_unsigned does not overflow on Int32::MIN.abs_unsigned + does for Int64 does for Int64 + does for UInt128 does for UInt128 + does for UInt32 does for UInt32 + does for Int128 does for Int128 + does for UInt8 does for UInt8 + does for Int32 does for Int32 + does for Int16 does for Int16 + does for UInt64 does for UInt64 + does for UInt16 does for UInt16 + does for Int8 does for Int8 + does not overflow on Int128::MIN.abs_unsigned does not overflow on Int128::MIN.abs_unsigned + does not overflow on Int16::MIN.abs_unsigned does not overflow on Int16::MIN.abs_unsigned + does not overflow on Int64::MIN.abs_unsigned does not overflow on Int64::MIN.abs_unsigned + does not overflow on Int8::MIN.abs_unsigned does not overflow on Int8::MIN.abs_unsigned + raises when mods by zero raises when mods by zero + gets downto iterator unsigned gets downto iterator unsigned + holds true that x == q*y + r holds true that x == q*y + r + &** + works with large integers works with large integers + wraps with larger integers wraps with larger integers + with UInt8 with UInt8 + raises with negative exponent raises with negative exponent + with positive Int32 with positive Int32 + "#times" yielding "#times" yielding + #inspect + doesn't append the type using IO doesn't append the type using IO + doesn't append the type doesn't append the type + gets upto iterator gets upto iterator + does downto min does downto min + #bit_reverse + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + divmod + assert assert + gets to iterator gets to iterator + #===(:Char) + assert assert + assert assert + assert assert + assert assert + odd? + assert assert + assert assert + does downto min unsigned does downto min unsigned + compares signed vs. unsigned integers compares signed vs. unsigned integers + "#times" iterator "#times" iterator + bit + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + #trailing_zeros_count + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + % doesn't overflow (#7979) % doesn't overflow (#7979) + #rotate_left + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + compares equality and inequality of signed vs. unsigned integers compares equality and inequality of signed vs. unsigned integers + #abs_unsigned + does for UInt8 does for UInt8 + does for Int8 does for Int8 + does for Int128 does for Int128 + does not overflow on Int128::MIN does not overflow on Int128::MIN + does for Int64 does for Int64 + does for UInt32 does for UInt32 + does for Int16 does for Int16 + does for UInt128 does for UInt128 + does for Int32 does for Int32 + does not overflow on Int8::MIN does not overflow on Int8::MIN + does for UInt64 does for UInt64 + does not overflow on Int64::MIN does not overflow on Int64::MIN + does for UInt16 does for UInt16 + does not overflow on Int16::MIN does not overflow on Int16::MIN + does not overflow on Int32::MIN does not overflow on Int32::MIN + << + assert assert + assert assert + assert assert + assert assert + gets downto iterator gets downto iterator + succ + assert assert + assert assert + assert assert + returns 0 when doing IntN::MIN.remainder(-1) (#8306) returns 0 when doing IntN::MIN.remainder(-1) (#8306) + even? + assert assert + assert assert + "#times for UInt32 (#5019)" iterator "#times for UInt32 (#5019)" iterator + does upto max does upto max + #digits + works for non-Int32 works for non-Int32 + works for positive numbers or zero works for positive numbers or zero + works with a base works with a base + raises for invalid base raises for invalid base + raises for negative numbers raises for negative numbers + works for maximums works for maximums + raises when divides by zero raises when divides by zero + #leading_zeros_count + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + >> + assert assert + assert assert + assert assert + assert assert + clones clones + #bit_length + for primitive integers for primitive integers + for BigInt for BigInt + does remainder does remainder + to + does downwards does downwards + does upwards does upwards + does when same does when same +Compress::Zlib::Writer + can be closed without sync can be closed without sync + can be closed with sync (2) can be closed with sync (2) + can be flushed can be flushed + can be closed with sync (1) can be closed with sync (1) + should be able to write should be able to write +Process.find_executable + fails to find '/tmp/cr-spec-abc463dd/find_executable/base/inbase/' fails to find '/tmp/cr-spec-abc463dd/find_executable/base/inbase/' + fails to find 'inbase/' fails to find 'inbase/' + fails to find 'inbase' fails to find 'inbase' + fails to find './inpath' fails to find './inpath' + fails to find 'not_exe' fails to find 'not_exe' + finds '../base/inbase' as 'inbase' finds '../base/inbase' as 'inbase' + fails to find '.' fails to find '.' + fails to find './not_exe' fails to find './not_exe' + finds '/tmp/cr-spec-abc463dd/find_executable/base/inbase' as 'inbase' finds '/tmp/cr-spec-abc463dd/find_executable/base/inbase' as 'inbase' + fails to find 'sub/insub/' fails to find 'sub/insub/' + fails to find './sub' fails to find './sub' + finds './inbase' as 'inbase' finds './inbase' as 'inbase' + fails to find '' fails to find '' + fails to find 'sub' fails to find 'sub' + finds 'inpath' as '../path/inpath' finds 'inpath' as '../path/inpath' + fails to find '/tmp/cr-spec-abc463dd/find_executable/base/sub' fails to find '/tmp/cr-spec-abc463dd/find_executable/base/sub' + finds 'sub/insub' as 'sub/insub' finds 'sub/insub' as 'sub/insub' + fails to find 'sub/not_exe' fails to find 'sub/not_exe' +Process + .parse_arguments_windows + assert assert + assert assert + assert assert + assert assert + raises an error if double quote is unclosed raises an error if double quote is unclosed + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + .quote_posix + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + join + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + .parse_arguments_posix + assert assert + raises an error when double quote is unclosed raises an error when double quote is unclosed + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + raises an error if single quote is unclosed raises an error if single quote is unclosed + .executable_path + searches executable searches executable + .quote_windows + assert assert + assert assert + join + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + .parse_arguments + uses the native platform rules uses the native platform rules +BigInt + adds adds + #bit #bit + can use Number::[] can use Number::[] + #divisible_by? + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + exponentiates exponentiates + raises if creating from infinity raises if creating from infinity + raises if factorial of negative raises if factorial of negative + creates from unsigned ints creates from unsigned ints + does gcd and lcm does gcd and lcm + #to_u128! + converts to UInt128 converts to UInt128 + converts modulo (2 ** 128) converts modulo (2 ** 128) + negates negates + #to_i8 + converts to Int8 converts to Int8 + raises OverflowError raises OverflowError + #integer? + assert assert + assert assert + #trailing_zeros_count #trailing_zeros_count + #to_u32! + converts modulo (2 ** 32) converts modulo (2 ** 32) + converts to UInt32 converts to UInt32 + #to_i! + converts to Int32 converts to Int32 + multiplies multiplies + tdivs tdivs + #to_i + converts to Int32 converts to Int32 + does modulo with negative numbers does modulo with negative numbers + #to_u64 + raises OverflowError raises OverflowError + converts to UInt64 converts to UInt64 + #to_u8! + converts to UInt8 converts to UInt8 + converts modulo (2 ** 8) converts modulo (2 ** 8) + #to_u128 + converts to UInt128 converts to UInt128 + raises OverflowError raises OverflowError + subs subs + #to_u16! + converts modulo (2 ** 16) converts modulo (2 ** 16) + converts to UInt16 converts to UInt16 + #to_u! + converts to UInt32 converts to UInt32 + #to_i16 + converts to Int16 converts to Int16 + raises OverflowError raises OverflowError + does bitwise not does bitwise not + has unsafe_shr (#8691) has unsafe_shr (#8691) + does remainder with negative numbers does remainder with negative numbers + does String#to_big_i does String#to_big_i + compares against float compares against float + does to_big_f does to_big_f + creates from signed ints creates from signed ints + #to_i8! + converts modulo (2 ** 8) converts modulo (2 ** 8) + converts to Int8 converts to Int8 + divides divides + #to_i32 + raises OverflowError raises OverflowError + converts to Int32 converts to Int32 + creates from string creates from string + compares compares + #digits + raises for invalid base raises for invalid base + works for positive numbers or zero works for positive numbers or zero + raises for negative numbers raises for negative numbers + works with a base works with a base + raises if creating from NaN raises if creating from NaN + #to_s + precision parameter + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + base and upcase parameters + assert assert + raises on base 1 raises on base 1 + assert assert + assert assert + assert assert + raises on base 37 raises on base 37 + assert assert + assert assert + assert assert + assert assert + raises on base 62 with upcase raises on base 62 with upcase + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + raises if mods by zero raises if mods by zero + #to_u16 + raises OverflowError raises OverflowError + converts to UInt16 converts to UInt16 + does bitwise and does bitwise and + gets factorial value gets factorial value + clones clones + #to_u8 + raises OverflowError raises OverflowError + converts to UInt8 converts to UInt8 + #humanize_bytes + assert assert + assert assert + divides with negative numbers divides with negative numbers + raises if factorial of 2^64 raises if factorial of 2^64 + raises if divides by zero raises if divides by zero + creates with a value of zero creates with a value of zero + raises if creates from string but invalid raises if creates from string but invalid + #to_i64 + converts to Int64 converts to Int64 + raises OverflowError raises OverflowError + #to_i16! + converts modulo (2 ** 16) converts modulo (2 ** 16) + converts to Int16 converts to Int16 + creates from float creates from float + #hash #hash + #to_u + converts to UInt32 converts to UInt32 + #to_i64! + converts to Int64 converts to Int64 + converts modulo (2 ** 64) converts modulo (2 ** 64) + #to_u64! + converts to UInt64 converts to UInt64 + converts modulo (2 ** 64) converts modulo (2 ** 64) + raises if divides by zero raises if divides by zero + does bitwise left shift does bitwise left shift + #to_i128! + converts modulo (2 ** 128) converts modulo (2 ** 128) + converts to Int128 converts to Int128 + does modulo does modulo + #to_i32! + converts modulo (2 ** 32) converts modulo (2 ** 32) + converts to Int32 converts to Int32 + divides with negative numbers divides with negative numbers + #inspect + assert assert + #to_i128 + raises OverflowError raises OverflowError + converts to Int128 converts to Int128 + divides divides + does bitwise or does bitwise or + gets absolute value gets absolute value + does bitwise xor does bitwise xor + does popcount does popcount + #to_u32 + converts to UInt32 converts to UInt32 + raises OverflowError raises OverflowError + does bitwise right shift does bitwise right shift + divides and calculates the modulo divides and calculates the modulo Spec::Methods - .assert_iterates_iterator - more than expected elements more than expected elements + .assert_iterates_yielding tuple tuple - basic basic - ensures type equality ensures type equality less than expected elements less than expected elements - infinite infinite - .assert_iterates_yielding ensures type equality ensures type equality - more than expected elements more than expected elements infinite infinite + more than expected elements more than expected elements + basic basic + .assert_iterates_iterator less than expected elements less than expected elements + ensures type equality ensures type equality basic basic + more than expected elements more than expected elements + infinite infinite tuple tuple +YAML::Schema::FailSafe + raises on parse all ":" raises on parse all ":" + raises on parse all "\n this: \"raises\"\n an: \"yaml\"\n parse: \"exception\"\n " raises on parse all "\n this: \"raises\"\n an: \"yaml\"\n parse: \"exception\"\n " + raises on parse "\n this: \"gives\"\n an: \"error\"\n " raises on parse "\n this: \"gives\"\n an: \"error\"\n " + parses "\n context:\n replace_me: \"Yes please!\"\n " parses "\n context:\n replace_me: \"Yes please!\"\n " + parses "123" parses "123" + parses all "\n context:\n replace_me: \"Yes please!\"\n " parses all "\n context:\n replace_me: \"Yes please!\"\n " + raises on parse ":" raises on parse ":" + parses "321" parses "321" + parses "\n first:\n document:\n\n second:\n document:\n " parses "\n first:\n document:\n\n second:\n document:\n " + parses all "\n foo:\n bar: 123\n\n bar:\n foo: 321\n " parses all "\n foo:\n bar: 123\n\n bar:\n foo: 321\n " +Log::ShortFormat + appends the exception appends the exception + shows the context data shows the context data + formats an entry formats an entry + shows context and entry data shows context and entry data + hides the source if empty hides the source if empty +Atomic(T) + #max with signed enum #max with signed enum + #max with pointer type #max with pointer type + #min with signed #min with signed + #xor #xor + #compare_and_set + with integer with integer + with pointer with pointer + with reference union with reference union + with bool with bool + explicit ordering explicit ordering + with nilable reference with nilable reference + with enum with enum + with flags enum with flags enum + with reference type with reference type + #min with signed enum #min with signed enum + #adds #adds + #max with unsigned #max with unsigned + #and #and + #min with unsigned #min with unsigned + #sub #sub + #swap + with integer with integer + with reference union with reference union + explicit ordering explicit ordering + with reference type with reference type + with bool with bool + with nilable reference with nilable reference + with pointer type with pointer type + #nand #nand + #min with pointer type #min with pointer type + atomic bool + sizeof sizeof + gets and sets gets and sets + #or #or + #set + with integer with integer + with pointer type with pointer type + explicit ordering explicit ordering + with bool with bool + with nil (#4062) with nil (#4062) + #max with signed #max with signed + #lazy_set #lazy_set +OpenSSL::SSL::Socket + closes connection to server that doesn't properly terminate SSL session closes connection to server that doesn't properly terminate SSL session + returns the peer certificate returns the peer certificate + accepts clients that only write then close the connection accepts clients that only write then close the connection + interprets graceful EOF of underlying socket as SSL termination interprets graceful EOF of underlying socket as SSL termination + returns selected alpn protocol returns selected alpn protocol + returns the TLS version returns the TLS version + returns the cipher that is currently in use returns the cipher that is currently in use __floattidf passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests @@ -33677,132 +32671,1170 @@ passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests passes compiler-rt builtins unit tests -Websocket integration tests - streams single messages made up of multiple parts that eventually become more than the buffer frame size streams single messages made up of multiple parts that eventually become more than the buffer frame size - sends single text messages sends single text messages - streams single messages more than the buffer frame size streams single messages more than the buffer frame size - streams less than the buffer frame size streams less than the buffer frame size -String::Builder - builds builds - raises EOFError raises EOFError - raises if invokes to_s twice raises if invokes to_s twice - #chomp! - returns self returns self - allocates for > 1 GB allocates for > 1 GB - goes back goes back - goes back all goes back all +record + can copy_with record with parent type can copy_with record with parent type + uses the default values on the ivars uses the default values on the ivars + can clone record with parent type can clone record with parent type + defines record with type declaration and initialization defines record with type declaration and initialization + defines record with type declarations defines record with type declarations + defines record with assignments defines record with assignments +IO::ByteFormat + big endian + decode + from slice + reads float64 reads float64 + reads float32 reads float32 + reads int16 reads int16 + reads int8 reads int8 + from io + reads float32 reads float32 + reads unt16 reads unt16 + reads int8 reads int8 + reads int16 reads int16 + reads int32 reads int32 + reads float64 reads float64 + reads int64 reads int64 + encode + writes float64 writes float64 + writes int16 writes int16 + writes int8 writes int8 + writes int64 writes int64 + writes float32 writes float32 + writes int32 writes int32 + little endian + encode + to slice + writes int16 to larger slice writes int16 to larger slice + writes int8 writes int8 + writes int16 writes int16 + to io + writes float32 writes float32 + writes int32 writes int32 + writes float64 writes float64 + writes int8 writes int8 + writes int16 writes int16 + writes uint16 writes uint16 + writes int64 writes int64 + decode + from io + reads int16 reads int16 + reads float32 reads float32 + reads int64 reads int64 + reads float64 reads float64 + reads int8 reads int8 + reads int32 reads int32 + reads unt16 reads unt16 + from slice + reads int16 reads int16 + reads float32 reads float32 + reads int16 from larger slice reads int16 from larger slice + reads int8 reads int8 + reads float64 reads float64 +Random::Secure + returns a random integer in range (#8219) returns a random integer in range (#8219) + fully fills a large buffer fully fills a large buffer + returns random number from a secure system source returns random number from a secure system source +HTTP::Request + doesn't raise on request with multiple Content_length headers doesn't raise on request with multiple Content_length headers + serialize GET (with cookie) serialize GET (with cookie) + serialize POST (with bytes body) serialize POST (with bytes body) + #path + returns parsed path returns parsed path + falls back to / falls back to / + .from_io + handles malformed request handles malformed request + parses empty string (EOF), returns nil (no peek) parses empty string (EOF), returns nil (no peek) + parses POST (with body) parses POST (with body) + handles unsupported HTTP version handles unsupported HTTP version + headers are case insensitive headers are case insensitive + parses GET parses GET + stores normalized case for common header name (capitalized) (#8060) stores normalized case for common header name (capitalized) (#8060) + parses GET with query params parses GET with query params + parses GET with spaces in request line parses GET with spaces in request line + parses empty header parses empty header + stores normalized case for common header name (mixed) (#8060) stores normalized case for common header name (mixed) (#8060) + parses empty string (EOF), returns nil parses empty string (EOF), returns nil + long headers + fails for too-long headers with custom size fails for too-long headers with custom size + fails for too-long headers fails for too-long headers + handles long headers with custom size handles long headers with custom size + handles long headers handles long headers + stores normalized case for common header name (lowercase) (#8060) stores normalized case for common header name (lowercase) (#8060) + long single header + fails for too-long header fails for too-long header + handles long header handles long header + parses GET without \r parses GET without \r + parses GET with cookie parses GET with cookie + parses GET (just \n instead of \r\n) parses GET (just \n instead of \r\n) + long request lines + fails for too-long URI with custom size fails for too-long URI with custom size + handles long URI handles long URI + handles long URI with custom size handles long URI with custom size + fails for too-long URI fails for too-long URI + #if_match + reads single value reads single value + reads multiple values reads multiple values + reads * reads * + keep-alive + is false in HTTP/1.1 if `Connection: close` header is present is false in HTTP/1.1 if `Connection: close` header is present + is true by default in HTTP/1.1 is true by default in HTTP/1.1 + is true in HTTP/1.0 if `Connection: keep-alive` header is present is true in HTTP/1.0 if `Connection: keep-alive` header is present + is false by default in HTTP/1.0 is false by default in HTTP/1.0 + raises if serializing POST body with incorrect content-length (less then real) raises if serializing POST body with incorrect content-length (less then real) + #path= + updates serialized form updates serialized form + updates @resource updates @resource + sets path sets path + serialize GET (with cookies, from headers) serialize GET (with cookies, from headers) + #host_with_port + gets request host with port from the headers gets request host with port from the headers + #hostname + #hostname #hostname + gets request hostname from the headers gets request hostname from the headers + #if_none_match + reads single value reads single value + reads multiple values reads multiple values + reads * reads * + #form_params + returns ignors invalid content-type returns ignors invalid content-type + returns can safely be called on get requests returns can safely be called on get requests + returns parsed HTTP::Params returns parsed HTTP::Params + serialize POST (with body) serialize POST (with body) + #query_params + affects #query when modified affects #query when modified + updates serialized form when modified updates serialized form when modified + happily parses when query is not a canonical url-encoded string happily parses when query is not a canonical url-encoded string + updates @resource when modified updates @resource when modified + is affected when #query is modified is affected when #query is modified + returns parsed URI::Params returns parsed URI::Params + serialize POST (with io body, with content-length header) serialize POST (with io body, with content-length header) + serialize GET (with query params) serialize GET (with query params) + #query= + updates @resource updates @resource + sets query sets query + updates serialized form updates serialized form + #query + returns request's query returns request's query + raises if request has multiple and differing content-length headers raises if request has multiple and differing content-length headers + raises if serializing POST body with incorrect content-length (more then real) raises if serializing POST body with incorrect content-length (more then real) + serialize GET serialize GET + serialize POST (with io body, without content-length header) serialize POST (with io body, without content-length header) +Compress::Zlib::Reader + can be closed without sync can be closed without sync + should not freeze when reading empty slice should not freeze when reading empty slice + should not read from empty stream should not read from empty stream + can be closed with sync (2) can be closed with sync (2) + can be closed with sync (1) can be closed with sync (1) + rewinds rewinds + should be able to read should be able to read + should raise buffer error on error (#6575) should raise buffer error on error (#6575) +.__lshrti3 .__lshrti3 +Socket + .ip? .ip? + == == +StringScanner + #string + assert assert + #scan + returns nil if it can't match from the offset returns nil if it can't match from the offset + returns the string matched and advances the offset returns the string matched and advances the offset + #skip + advances the offset but does not returns the string matched advances the offset but does not returns the string matched + #check_until + returns the string matched and advances the offset returns the string matched and advances the offset + returns nil if it can't match from the offset returns nil if it can't match from the offset + #eos + it is true when the offset is at the end it is true when the offset is at the end + #peek + shows the next len characters without advancing the offset shows the next len characters without advancing the offset + #offset + returns the current position returns the current position + #rest + returns the remainder of the string from the offset returns the remainder of the string from the offset + #reset + resets the scan offset to the beginning and clears the last match resets the scan offset to the beginning and clears the last match + #offset= + sets the current position sets the current position + raises on negative positions raises on negative positions + #scan_until + returns nil if it can't match from the offset returns nil if it can't match from the offset + returns the string matched and advances the offset returns the string matched and advances the offset + #skip_until + advances the offset but does not returns the string matched advances the offset but does not returns the string matched + #[]? + allows access to subgroups of the last match allows access to subgroups of the last match + raises when there is no subgroup raises when there is no subgroup + returns nil when there is no last match returns nil when there is no last match + #inspect + works with small strings works with small strings + has information on the scanner has information on the scanner + #check + returns the string matched but does not advances the offset returns the string matched but does not advances the offset + returns nil if it can't match from the offset returns nil if it can't match from the offset + #terminate + moves the scan offset to the end of the string and clears the last match moves the scan offset to the end of the string and clears the last match + #[] + allows access to subgroups of the last match allows access to subgroups of the last match + raises when there is no subgroup raises when there is no subgroup + raises when there is no last match raises when there is no last match unbuffered - can be closed after sending can be closed after sending - wakes up sender fiber when channel is closed wakes up sender fiber when channel is closed - can receive? when closed can receive? when closed - wakes up receiver fibers when channel is closed wakes up receiver fibers when channel is closed - can send successfully without raise can send successfully without raise - can send and receive nil can send and receive nil can be closed can be closed + can receive? when closed can receive? when closed + blocks if there is no receiver blocks if there is no receiver + pings pings deliver many senders deliver many senders + wakes up sender fiber when channel is closed wakes up sender fiber when channel is closed + can be closed after sending can be closed after sending + works with select works with select can receive? when not empty can receive? when not empty can be closed from different fiber can be closed from different fiber - blocks if there is no receiver blocks if there is no receiver + can send and receive nil can send and receive nil + wakes up receiver fibers when channel is closed wakes up receiver fibers when channel is closed cannot send if closed cannot send if closed - pings pings - works with select works with select -OpenSSL::SSL::Socket - OpenSSL::SSL::Socket::Server - doesn't accept client when specified doesn't accept client when specified - auto accept client by default auto accept client by default -Double - ** + can send successfully without raise can send successfully without raise +OpenSSL::X509::Certificate + extension extension + #signature_algorithm #signature_algorithm + subject subject + #digest #digest +LLVM::ABI::AVR + abi_info + struct args within 18 bytes struct args within 18 bytes + struct args over 18 bytes struct args over 18 bytes + returns struct within 8 bytes returns struct within 8 bytes + multiple arguments multiple arguments + int64 int64 + double double + int32 int32 + int1 int1 + float float + int16 int16 + multiple arguments above registers multiple arguments above registers + int8 int8 + returns struct over 8 bytes returns struct over 8 bytes + size + for struct for struct + for packed struct for packed struct + for pointer for pointer + for integer for integer + for float for float + for array for array + for double for double + align + for double for double + for packed struct for packed struct + for struct for struct + for integer for integer + for array for array + for float for float + for pointer for pointer +Socket::IPAddress + .parse_v4_fields? assert assert assert assert assert assert -Time::Span - can substract big amount using milliseconds can substract big amount using milliseconds - test negate and abs test negate and abs - max days max days - should sum should sum - negative timespan negative timespan - #positive? #positive? - max milliseconds max milliseconds - #step - "basic" iterator "basic" iterator - "basic" yielding "basic" yielding - test int extension methods test int extension methods - test hash code test hash code - min seconds min seconds - initializes initializes - initializes with big seconds value initializes with big seconds value - test totals test totals - min days min days - initializes with type restrictions initializes with type restrictions - test float extension methods test float extension methods - arithmetic - #/(self) #/(self) - #sign #sign - #+ #+ - #/(Number) #/(Number) - #- #- - #* #* - test to_s test to_s - converts units converts units - #zero? #zero? - max seconds max seconds - #negative? #negative? - min milliseconds min milliseconds - test equals test equals - test compare test compare - can substract big amount using microseconds can substract big amount using microseconds - test properties test properties - days overflows days overflows -String UTF16 - .from_utf16 - in the range U+10000..U+10FFFF in the range U+10000..U+10FFFF - in the range U+0000..U+D7FF in the range U+0000..U+D7FF - handles null bytes handles null bytes - in the range U+E000 to U+FFFF in the range U+E000 to U+FFFF - in the range U+D800..U+DFFF in the range U+D800..U+DFFF - with pointer reads multiple strings with pointer reads multiple strings - to_utf16 - in the range U+10000..U+10FFFF in the range U+10000..U+10FFFF - in the range U+E000 to U+FFFF in the range U+E000 to U+FFFF - in the range U+0000..U+D7FF in the range U+0000..U+D7FF - in the range U+0000..U+FF in the range U+0000..U+FF - in the range U+D800..U+DFFF in the range U+D800..U+DFFF -Crypto::Bcrypt::Password - create - generates salt generates salt - uses cost uses cost - generates digest generates digest - new - parses version parses version - parses salt parses salt - parses cost parses cost - raises on unsupported version (#11584) raises on unsupported version (#11584) - parses digest parses digest - validates the hash string has the required amount of parts validates the hash string has the required amount of parts - verify - verifies password version 2y is correct verifies password version 2y is correct - verifies password version 2a is correct (#11584) verifies password version 2a is correct (#11584) - verifies password version 2b is correct (#11584) verifies password version 2b is correct (#11584) - verifies password version 2 is correct (#11584) verifies password version 2 is correct (#11584) - verifies password is incorrect verifies password is incorrect - verifies password is correct verifies password is correct + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + #== #== + .v4_mapped_v6 + constructs an IPv4-mapped IPv6 address constructs an IPv4-mapped IPv6 address + raises on out of bound port number raises on out of bound port number + constructs from StaticArray constructs from StaticArray + raises on out of bound field raises on out of bound field + .v6 + constructs from StaticArray constructs from StaticArray + raises on out of bound port number raises on out of bound port number + raises on out of bound field raises on out of bound field + constructs an IPv6 address constructs an IPv6 address + .valid_v6? .valid_v6? + #private? #private? + errors on out of range port numbers errors on out of range port numbers + .parse + parses IPv6 parses IPv6 + ignores path and params ignores path and params + fails with missing host fails with missing host + fails host name fails host name + fails with missing port fails with missing port + parses IPv4 parses IPv4 + transforms an IPv6 address into a C struct and back transforms an IPv6 address into a C struct and back + .valid? .valid? + .parse_v6_fields? + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + #loopback? #loopback? + transforms an IPv4 address into a C struct and back transforms an IPv4 address into a C struct and back + #unspecified? #unspecified? + #to_s #to_s + .valid_port? .valid_port? + #link_local? #link_local? + .v4 + raises on out of bound field raises on out of bound field + constructs an IPv4 address constructs an IPv4 address + constructs from StaticArray constructs from StaticArray + raises on out of bound port number raises on out of bound port number + .valid_v4? .valid_v4? + #address #address + won't resolve domains won't resolve domains +Float64 + #to_hexfloat + hexits + assert assert + assert assert + exponents + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + trimming + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + corner cases + assert assert + assert assert + assert assert + assert assert + assert assert + special cases + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + .parse_hexfloat + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + special cases + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + values close to zero + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + values close to MIN_POSITIVE and MAX + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + invalid hexfloats + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + round-to-nearest, ties-to-even + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert +IO::Sized + peeks peeks + gets gets + #close + closes the underlying stream if sync_close is true closes the underlying stream if sync_close is true + stops reading stops reading + gets with chomp = false gets with chomp = false + skips skips + read_byte read_byte + #read + allows extending the size allows extending the size + doesn't read past the limit when reading char-by-char doesn't read past the limit when reading char-by-char + doesn't read past the limit when reading the correct size doesn't read past the limit when reading the correct size + raises on negative numbers raises on negative numbers + reads partially when supplied with a larger slice reads partially when supplied with a larger slice + doesn't peek when remaining = 0 (#4261) doesn't peek when remaining = 0 (#4261) + #write + raises raises +Regex::MatchData + #to_s #to_s + #byte_end + with unmatched capture with unmatched capture + char index char index + #to_a + converts into an array converts into an array + converts into an array having nil converts into an array having nil + #pre_match + returns the part of the string before the match returns the part of the string before the match + works with unicode works with unicode + returns an empty string when there's nothing before returns an empty string when there's nothing before + #to_h + converts into a hash converts into a hash + converts into a hash with duplicated names converts into a hash with duplicated names + converts into a hash having nil converts into a hash having nil + #string #string + #size #size + #== #== + #begin + with unmatched capture with unmatched capture + out of range out of range + with capture with capture + no captures no captures + char index char index + #end + out of range out of range + char index char index + no captures no captures + with capture with capture + with unmatched capture with unmatched capture + #[] + String + captures duplicated named group captures duplicated named group + raises exception on optional empty group raises exception on optional empty group + raises exception when named group doesn't exist raises exception when named group doesn't exist + captures empty group captures empty group + capture named group capture named group + named groups with same prefix named groups with same prefix + Range + can use range can use range + can use start and count can use start and count + Int + captures empty group captures empty group + raises exception on optional empty group raises exception on optional empty group + raises if outside match range with [] raises if outside match range with [] + raises if special variable accessed on invalid capture group raises if special variable accessed on invalid capture group + can use negative index can use negative index + #named_captures + gets more than 127 named captures gets more than 127 named captures + gets a hash of named captures with optional gets a hash of named captures with optional + gets a hash of named captures gets a hash of named captures + gets a hash of named captures with duplicated name gets a hash of named captures with duplicated name + #inspect #inspect + #byte_begin + char index char index + with unmatched capture with unmatched capture + #pretty_print #pretty_print + #captures + gets an array of unnamed captures gets an array of unnamed captures + gets an array of unnamed captures with optional gets an array of unnamed captures with optional + doesn't get named captures when there are more than 255 doesn't get named captures when there are more than 255 + #post_match + works with unicode works with unicode + returns the part of the string after the match returns the part of the string after the match + returns an empty string when there's nothing after returns an empty string when there's nothing after + #regex #regex + #hash #hash + #[]? + Range + can use start and count can use start and count + can use range can use range + Int + can use negative index can use negative index + returns nil if outside match range with [] returns nil if outside match range with [] + capture optional empty group capture optional empty group + capture empty group capture empty group + String + capture empty group capture empty group + capture named group capture named group + capture optional empty group capture optional empty group + returns nil exception when named group doesn't exist returns nil exception when named group doesn't exist + captures duplicated named group captures duplicated named group +CSV + strips strips + gets row values with string gets row values with string + gets row values with regex gets row values with regex + can do new with block can do new with block + works without headers works without headers + rewind + IO based + without headers without headers + with headers with headers + string based + without headers without headers + with headers with headers + raises if trying to access before first row raises if trying to access before first row + returns a Tuple(String, String) for current row with indices returns a Tuple(String, String) for current row with indices + gets row values with integer gets row values with integer + works without headers works without headers + can do each can do each + returns a Tuple(String, String) for current row with headers returns a Tuple(String, String) for current row with headers + gets current row gets current row + gets headers gets headers + returns a Tuple(String, String) for this row with headers returns a Tuple(String, String) for this row with headers + returns a Tuple(String, String) for this row with indices returns a Tuple(String, String) for this row with indices +raise + shouldn't overwrite the callstack on re-raise shouldn't overwrite the callstack on re-raise + should set exception's callstack should set exception's callstack +Comparable(T) + clamp + number + clamps integers clamps integers + fails with an exclusive range fails with an exclusive range + clamps floats clamps floats + String + clamps strings clamps strings + can compare against Int (#2461) can compare against Int (#2461) + checks for nil checks for nil +Socket::Address + .parse + fails with unknown scheme fails with unknown scheme + accepts URI accepts URI + parses UNIX parses UNIX + parses UDP parses UDP + parses TCP parses TCP +URI::Punycode + encodes Hello-Another-Way-それぞれ to Hello-Another-Way--fc4qua97gba encodes Hello-Another-Way-それぞれ to Hello-Another-Way--fc4qua97gba + decodes Hello-Another-Way--fc4qua05auwb3674vfr0b to Hello-Another-Way-それぞれの場所 decodes Hello-Another-Way--fc4qua05auwb3674vfr0b to Hello-Another-Way-それぞれの場所 + decodes de-jg4avhby1noc0d to パフィーdeルンバ decodes de-jg4avhby1noc0d to パフィーdeルンバ + translate to ascii only host name translate to ascii only host name + encodes MajiでKoiする5秒前 to MajiKoi5-783gue6qz075azm5e encodes MajiでKoiする5秒前 to MajiKoi5-783gue6qz075azm5e + encodes ひとつ屋根の下2 to 2-u9tlzr9756bt3uc0v encodes ひとつ屋根の下2 to 2-u9tlzr9756bt3uc0v + decodes MajiKoi5-783gue6qz075azm5e to MajiでKoiする5秒前 decodes MajiKoi5-783gue6qz075azm5e to MajiでKoiする5秒前 + decodes -with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n to 安室奈美恵-with-SUPER-MONKEYS decodes -with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n to 安室奈美恵-with-SUPER-MONKEYS + decodes d9juau41awczczp to そのスピードで decodes d9juau41awczczp to そのスピードで + decodes 3B-ww4c5e180e575a65lsy2b to 3年B組金八先生 decodes 3B-ww4c5e180e575a65lsy2b to 3年B組金八先生 + encodes 3年B組金八先生 to 3B-ww4c5e180e575a65lsy2b encodes 3年B組金八先生 to 3B-ww4c5e180e575a65lsy2b + decodes Hello-Another-Way--fc4qua97gba to Hello-Another-Way-それぞれ decodes Hello-Another-Way--fc4qua97gba to Hello-Another-Way-それぞれ + encodes 安室奈美恵-with-SUPER-MONKEYS to -with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n encodes 安室奈美恵-with-SUPER-MONKEYS to -with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n + encodes Hello-Another-Way-それぞれの場所 to Hello-Another-Way--fc4qua05auwb3674vfr0b encodes Hello-Another-Way-それぞれの場所 to Hello-Another-Way--fc4qua05auwb3674vfr0b + encodes そのスピードで to d9juau41awczczp encodes そのスピードで to d9juau41awczczp + encodes パフィーdeルンバ to de-jg4avhby1noc0d encodes パフィーdeルンバ to de-jg4avhby1noc0d + decodes 2-u9tlzr9756bt3uc0v to ひとつ屋根の下2 decodes 2-u9tlzr9756bt3uc0v to ひとつ屋根の下2 +Thread + allows passing an argumentless fun to execute allows passing an argumentless fun to execute + names the thread names the thread + yields the processor yields the processor + returns current thread object returns current thread object + raises inside thread and gets it on join raises inside thread and gets it on join +BigRational + #denominator #denominator + #to_big_r #to_big_r + #% #% + #to_f #to_f + #to_f! #to_f! + #* #* + is a number is a number + clones clones + #floor #floor + #ceil #ceil + #// #// + #to_f64! #to_f64! + #format #format + #to_s #to_s + #round + rounding modes + to_negative to_negative + default (=ties_even) default (=ties_even) + to_zero to_zero + ties_away ties_away + to_positive to_positive + ties_even ties_even + #+ #+ + Float64#to_big_r Float64#to_big_r + #to_f32! #to_f32! + #tdiv #tdiv + BigDecimal#to_big_r BigDecimal#to_big_r + .new + initializes from BigFloat with high precision initializes from BigFloat with high precision + raises if creating from infinity raises if creating from infinity + raises if creating from NaN raises if creating from NaN + initialize initialize + #remainder #remainder + #- #- + #<< #<< + #to_f32 #to_f32 + #>> #>> + Int#to_big_r Int#to_big_r + #- (negation) #- (negation) + #abs #abs + Float32#to_big_r Float32#to_big_r + #inspect + assert assert + #<=> + Float and Comparable Float and Comparable + Int and Comparable Int and Comparable + compares against NaNs compares against NaNs + BigFloat and Comparable BigFloat and Comparable + BigInt and Comparable BigInt and Comparable + BigRational and Comparable BigRational and Comparable + #/ #/ + #numerator #numerator + #to_f64 #to_f64 + #** + exponentiates with negative powers exponentiates with negative powers + exponentiates with positive powers exponentiates with positive powers + cannot raise 0 to a negative power cannot raise 0 to a negative power + #integer? + assert assert + assert assert + assert assert + assert assert + assert assert + assert assert + #inv #inv + #trunc #trunc + #to_big_f #to_big_f +XML + parses HTML from IO parses HTML from IO + parses HTML parses HTML + raises error when parsing empty string (#2752) raises error when parsing empty string (#2752) + gets name of HTML document node (#4040) gets name of HTML document node (#4040) + parses html5 (#1404) parses html5 (#1404) +Crystal::SyntaxHighlighter::HTML + #highlight! + "foo = bar(\"baz\#{PI + 1}\") # comment" "foo = bar(\"baz\#{PI + 1}\") # comment" + "\"foo" "\"foo" + "%i[foo" "%i[foo" + "foo, bar = <<-FOO, <<-BAR\n foo\n FOO" "foo, bar = <<-FOO, <<-BAR\n foo\n FOO" + "foo, bar = <<-FOO, <<-BAR\n foo" "foo, bar = <<-FOO, <<-BAR\n foo" + "%w[foo" "%w[foo" + .highlight + "foo, bar = <<-FOO, <<-BAR\n foo\n FOO\n bar\n BAR" "foo, bar = <<-FOO, <<-BAR\n foo\n FOO\n bar\n BAR" + "require" "require" + "def []" "def []" + "if" "if" + "1 - 2" "1 - 2" + "%w(foo bar\n baz)" "%w(foo bar\n baz)" + "extend" "extend" + "1 |= 2" "1 |= 2" + "def >>" "def >>" + "1 > 2" "1 > 2" + "\"foo\#{[1, bar, \"str\"]}baz\"" "\"foo\#{[1, bar, \"str\"]}baz\"" + "def <=" "def <=" + "asm" "asm" + "# foo" "# foo" + "with" "with" + "1 %= 2" "1 %= 2" + "1 **= 2" "1 **= 2" + "def +" "def +" + "$~" "$~" + "rescue" "rescue" + "\"<>\"" "\"<>\"" + "# foo\n# bar\n" "# foo\n# bar\n" + "struct" "struct" + "pointerof" "pointerof" + "1 &** 2" "1 &** 2" + "yield" "yield" + "enum" "enum" + ":\"foo\"" ":\"foo\"" + "`foo`" "`foo`" + "# <\">" "# <\">" + "1 ! 2" "1 ! 2" + "def []=" "def []=" + "def <<" "def <<" + "private" "private" + "abstract" "abstract" + "offsetof" "offsetof" + "next" "next" + "%w<foo bar baz>" "%w<foo bar baz>" + "1 += 2" "1 += 2" + "1 /2" "1 /2" + "def &" "def &" + "select" "select" + "1/ 2" "1/ 2" + "1 || 2" "1 || 2" + "false" "false" + "ensure" "ensure" + "fun" "fun" + "1 //= 2" "1 //= 2" + "1 | 2" "1 | 2" + "then" "then" + "def **" "def **" + "super" "super" + "\"nest1\#{foo + \"nest2\#{1 + 1}bar\"}baz\"" "\"nest1\#{foo + \"nest2\#{1 + 1}bar\"}baz\"" + "1 <=> 2" "1 <=> 2" + "Foo" "Foo" + "a /b/" "a /b/" + "%<foo>" "%<foo>" + "self" "self" + "macro" "macro" + "for" "for" + "1 -= 2" "1 -= 2" + "1 ** 2" "1 ** 2" + "break" "break" + "42" "42" + "$2?" "$2?" + "1 >= 2" "1 >= 2" + "def !=" "def !=" + "%Q(foo)" "%Q(foo)" + "typeof" "typeof" + "def -" "def -" + "%r(foo)xim" "%r(foo)xim" + "'a'" "'a'" + "# bar\n" "# bar\n" + "sizeof" "sizeof" + "1 < 2" "1 < 2" + "foo" "foo" + "1 && 2" "1 && 2" + "alias" "alias" + "def //" "def //" + "is_a?" "is_a?" + "lib" "lib" + "/foo/xim" "/foo/xim" + "%w(foo bar baz)" "%w(foo bar baz)" + "1 >> 2" "1 >> 2" + "1 = 2" "1 = 2" + "def >" "def >" + "def |" "def |" + "1 ^ 2" "1 ^ 2" + "1 != 2" "1 != 2" + "1 /= 2" "1 /= 2" + "module" "module" + "nil?" "nil?" + "1 []? 2" "1 []? 2" + "1 =~ 2" "1 =~ 2" + "1 &+ 2" "1 &+ 2" + "1 / 2" "1 / 2" + "1 &* 2" "1 &* 2" + "do" "do" + "$?" "$?" + "nil" "nil" + "1 &- 2" "1 &- 2" + "union" "union" + "self" "self" + "out" "out" + "1 &&= 2" "1 &&= 2" + "elsif" "elsif" + "while" "while" + "1 !~ 2" "1 !~ 2" + "%x(foo)" "%x(foo)" + "def =~" "def =~" + "until" "until" + "true" "true" + "def >=" "def >=" + "1 <<= 2" "1 <<= 2" + "1 <= 2" "1 <= 2" + "alignof" "alignof" + "a/ b" "a/ b" + "def foo" "def foo" + "include" "include" + "'<'" "'<'" + "\"foo\#{bar}baz\"" "\"foo\#{bar}baz\"" + "of" "of" + "$1" "$1" + "1/2" "1/2" + "a / b" "a / b" + "%i(foo bar baz)" "%i(foo bar baz)" + "end" "end" + "1 % 2" "1 % 2" + "uninitialized" "uninitialized" + "1 ||= 2" "1 ||= 2" + "foo = bar(\"baz\#{PI + 1}\") # comment" "foo = bar(\"baz\#{PI + 1}\") # comment" + "1 * 2" "1 * 2" + "instance_sizeof" "instance_sizeof" + "1 &-= 2" "1 &-= 2" + "def" "def" + "1 &+= 2" "1 &+= 2" + "1 &= 2" "1 &= 2" + "when" "when" + "def ^" "def ^" + "def ==" "def ==" + "1 &*= 2" "1 &*= 2" + "1 === 2" "1 === 2" + "1 << 2" "1 << 2" + "def <" "def <" + "verbatim" "verbatim" + "1 [] 2" "1 [] 2" + "\"foo\"" "\"foo\"" + "type" "type" + "1 ^= 2" "1 ^= 2" + "1 & 2" "1 & 2" + "123_i64" "123_i64" + "annotation" "annotation" + "1 *= 2" "1 *= 2" + "else" "else" + "protected" "protected" + "unless" "unless" + "instance_alignof" "instance_alignof" + "def %" "def %" + "begin" "begin" + "Foo::Bar" "Foo::Bar" + "as" "as" + "a/b" "a/b" + "as?" "as?" + "%q(foo)" "%q(foo)" + "Set{1, 2, 3}" "Set{1, 2, 3}" + "return" "return" + "def *" "def *" + "def !~" "def !~" + "def <=>" "def <=>" + "1 == 2" "1 == 2" + "case" "case" + "def ~" "def ~" + "1 []= 2" "1 []= 2" + "def []?" "def []?" + "1 + 2" "1 + 2" + "class" "class" + "foo\nbar" "foo\nbar" + "%(foo)" "%(foo)" + "in" "in" + "1 ~ 2" "1 ~ 2" + ":foo" ":foo" + "foo bar" "foo bar" + "1 // 2" "1 // 2" + "1 >>= 2" "1 >>= 2" + "3.14" "3.14" + "def /" "def /" +OAuth::AccessToken + creates from response body creates from response body +WinError + #message #message + .value .value + .wsa_value .wsa_value +Random::PCG32 + can be initialized without explicit seed can be initialized without explicit seed + can jump ahead can jump ahead + can jump back can jump back + generates random numbers as generated official implementation generates random numbers as generated official implementation +concurrent + spawn + uses spawn macro uses spawn macro + spawns named with macro spawns named with macro + spawns named spawns named + schedules intermitting sleeps schedules intermitting sleeps + accepts method call with receiver accepts method call with receiver +YAML + parser + parses recursive sequence parses recursive sequence + assert assert + parses alias to scalar parses alias to scalar + assert assert + assert assert + parses recursive mapping parses recursive mapping + assert assert + assert assert + merging with << key + parses from IO parses from IO + raises if merging with missing alias raises if merging with missing alias + doesn't merge explicit string key << doesn't merge explicit string key << + merges other mapping with alias merges other mapping with alias + has correct line/number info (#2585) has correct line/number info (#2585) + merges other mapping merges other mapping + has correct line/number info (2) has correct line/number info (2) + merges other mapping with array of alias merges other mapping with array of alias + has correct message (#4006) has correct message (#4006) + doesn't merge empty mapping doesn't merge empty mapping + doesn't merge arrays doesn't merge arrays + assert assert + dump + writes YAML to a stream writes YAML to a stream + returns YAML as a string returns YAML as a string +OpenSSL::PKCS5 + computes pbkdf2_hmac MD5 computes pbkdf2_hmac MD5 + computes pbkdf2_hmac SHA256 computes pbkdf2_hmac SHA256 + computes pbkdf2_hmac SHA1 computes pbkdf2_hmac SHA1 + computes pbkdf2_hmac SHA384 computes pbkdf2_hmac SHA384 + computes pbkdf2_hmac SHA256 computes pbkdf2_hmac SHA256 + computes pbkdf2_hmac SHA384 computes pbkdf2_hmac SHA384 + computes pbkdf2_hmac SHA512 computes pbkdf2_hmac SHA512 + computes pbkdf2_hmac SHA224 computes pbkdf2_hmac SHA224 + computes pbkdf2_hmac SHA512 computes pbkdf2_hmac SHA512 + computes pbkdf2_hmac SHA256 computes pbkdf2_hmac SHA256 + computes pbkdf2_hmac SHA224 computes pbkdf2_hmac SHA224 + computes pbkdf2_hmac SHA384 computes pbkdf2_hmac SHA384 + computes pbkdf2_hmac SHA1 computes pbkdf2_hmac SHA1 + computes pbkdf2_hmac MD5 computes pbkdf2_hmac MD5 + computes pbkdf2_hmac_sha1 computes pbkdf2_hmac_sha1 + computes pbkdf2_hmac SHA256 computes pbkdf2_hmac SHA256 + computes pbkdf2_hmac MD5 computes pbkdf2_hmac MD5 + computes pbkdf2_hmac SHA224 computes pbkdf2_hmac SHA224 + computes pbkdf2_hmac SHA512 computes pbkdf2_hmac SHA512 + computes pbkdf2_hmac MD5 computes pbkdf2_hmac MD5 + computes pbkdf2_hmac SHA384 computes pbkdf2_hmac SHA384 + computes pbkdf2_hmac SHA1 computes pbkdf2_hmac SHA1 + computes pbkdf2_hmac SHA1 computes pbkdf2_hmac SHA1 + computes pbkdf2_hmac SHA512 computes pbkdf2_hmac SHA512 + computes pbkdf2_hmac SHA224 computes pbkdf2_hmac SHA224 Pending: - Math Functions for computing quotient and remainder - String #reverse converts invalid code units to replacement char - TCPServer settings - Regex #matches_at_byte_index? negative - Regex #match_at_byte_index negative - Regex #match with pos negative - Spec matchers pending block is not compiled pending has block with valid syntax, but invalid semantics Number #round edge cases URI .parse unescaped @ in user/password should not confuse host - Path #expand converts a pathname to an absolute pathname, using a complete path assert - OpenSSL::X509::Certificate #digest - OpenSSL::SSL::Context ciphers uses intermediate default ciphers - UDPSocket using IPv4 joins and transmits to multicast groups - UDPSocket using IPv6 joins and transmits to multicast groups + TCPServer settings + Spec matchers pending block is not compiled pending has block with valid syntax, but invalid semantics UDPSocket #connect with a IPv6 address + UDPSocket using IPv6 joins and transmits to multicast groups + UDPSocket using IPv4 joins and transmits to multicast groups + Math Functions for computing quotient and remainder + String #reverse converts invalid code units to replacement char + Path #expand converts a pathname to an absolute pathname, using a complete path assert String#each_grapheme GB9c String#each_grapheme GB9c String#each_grapheme GB9c @@ -33810,751 +33842,756 @@ String#each_grapheme GB9c String#each_grapheme GB9c String#each_grapheme GB9c + Regex #match with pos negative + Regex #matches_at_byte_index? negative + Regex #match_at_byte_index negative + OpenSSL::SSL::Context ciphers uses intermediate default ciphers + OpenSSL::X509::Certificate #digest -Finished in 2:40 minutes +Finished in 8:52 minutes 17720 examples, 0 failures, 0 errors, 22 pending -Randomized with seed: 89008 +Randomized with seed: 26192 make[2]: Leaving directory '/build/reproducible-path/crystal-1.14.0+dfsg' -make release=1 verbose=1 progress=1 threads=42 CRYSTAL_CONFIG_PATH="lib:/usr/lib/crystal/lib" CRYSTAL_CACHE_DIR="/tmp/crystal" interpreter=1 primitives_spec +make release=1 verbose=1 progress=1 threads=20 CRYSTAL_CONFIG_PATH="lib:/usr/lib/crystal/lib" CRYSTAL_CACHE_DIR="/tmp/crystal" interpreter=1 primitives_spec make[2]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg' -./bin/crystal build -D strict_multi_assign -D preview_overload_order --release --progress --threads 42 --link-flags="-Wl,-z,relro" --exclude-warnings spec/std --exclude-warnings spec/compiler --exclude-warnings spec/primitives -o .build/primitives_spec spec/primitives_spec.cr +./bin/crystal build -D strict_multi_assign -D preview_overload_order --release --progress --threads 20 --link-flags="-Wl,-z,relro" --exclude-warnings spec/std --exclude-warnings spec/compiler --exclude-warnings spec/primitives -o .build/primitives_spec spec/primitives_spec.cr Using compiled compiler at .build/crystal [1/13] Parse [1/13] Parse [2/13] Semantic (top level) [2/13] Semantic (top level) [3/13] Semantic (new) [3/13] Semantic (new) [4/13] Semantic (type declarations) [4/13] Semantic (type declarations) [5/13] Semantic (abstract def check) [5/13] Semantic (abstract def check) [6/13] Semantic (restrictions augmenter) [6/13] Semantic (restrictions augmenter) [7/13] Semantic (ivars initializers) [7/13] Semantic (ivars initializers) [8/13] Semantic (cvars initializers) [8/13] Semantic (cvars initializers) [9/13] Semantic (main) [9/13] Semantic (main) [10/13] Semantic (cleanup) [10/13] Semantic (cleanup) [11/13] Semantic (recursive struct check) [11/13] Semantic (recursive struct check) [12/13] Codegen (crystal) [12/13] Codegen (crystal) [13/13] Codegen (bc+obj) [13/13] [0/1] Codegen (bc+obj) [13/13] [1/1] Codegen (bc+obj) [13/13] [1/1] Codegen (bc+obj) [14/13] Codegen (linking) [14/13] Codegen (linking) .build/primitives_spec -v --order=random -Randomized with seed: 13354 +Randomized with seed: 92833 +Primitives: Slice + .literal + creates multiple literals creates multiple literals + creates a read-only Slice(Float64) creates a read-only Slice(Float64) + creates multiple literals creates multiple literals + creates a read-only Slice(Int128) creates a read-only Slice(Int128) + creates multiple literals creates multiple literals + creates multiple literals creates multiple literals + creates a read-only Slice(UInt32) creates a read-only Slice(UInt32) + creates a read-only Slice(UInt64) creates a read-only Slice(UInt64) + creates multiple literals creates multiple literals + creates multiple literals creates multiple literals + creates multiple literals creates multiple literals + creates multiple literals creates multiple literals + creates a read-only Slice(UInt16) creates a read-only Slice(UInt16) + creates multiple literals creates multiple literals + creates a read-only Slice(Int64) creates a read-only Slice(Int64) + creates a read-only Slice(UInt128) creates a read-only Slice(UInt128) + creates a read-only Slice(Int16) creates a read-only Slice(Int16) + creates a read-only Slice(UInt8) creates a read-only Slice(UInt8) + creates a read-only Slice(Int8) creates a read-only Slice(Int8) + creates a read-only Slice(Int32) creates a read-only Slice(Int32) + creates multiple literals creates multiple literals + creates multiple literals creates multiple literals + creates a read-only Slice(Float32) creates a read-only Slice(Float32) + creates multiple literals creates multiple literals +Primitives: pointer + .malloc + is non-atomic for ReferenceStorage(T) if T is non-atomic (#14692) is non-atomic for ReferenceStorage(T) if T is non-atomic (#14692) +Crystal::Command + exec external commands exec external commands Primitives: Int + #unsafe_chr + doesn't raise on overflow doesn't raise on overflow + #to_f + raises on overflow for UInt128#to_f32 raises on overflow for UInt128#to_f32 + #to_i + raises on overflow for Int32#to_i128 raises on overflow for Int32#to_i128 + raises on overflow for UInt16#to_i raises on overflow for UInt16#to_i + raises on overflow for Int64#to_u32 raises on overflow for Int64#to_u32 + raises on overflow for Int8#to_i32 raises on overflow for Int8#to_i32 + raises on overflow for Int64#to_i16 raises on overflow for Int64#to_i16 + raises on overflow for UInt128#to_u8 raises on overflow for UInt128#to_u8 + raises on overflow for UInt32#to_u128 raises on overflow for UInt32#to_u128 + raises on overflow for Int16#to_u16 raises on overflow for Int16#to_u16 + raises on overflow for UInt64#to_i32 raises on overflow for UInt64#to_i32 + raises on overflow for UInt8#to_u64 raises on overflow for UInt8#to_u64 + raises on overflow for UInt64#to_i raises on overflow for UInt64#to_i + raises on overflow for Int128#to_i64 raises on overflow for Int128#to_i64 + raises on overflow for UInt8#to_u raises on overflow for UInt8#to_u + raises on overflow for UInt32#to_u16 raises on overflow for UInt32#to_u16 + raises on overflow for UInt8#to_u128 raises on overflow for UInt8#to_u128 + raises on overflow for Int32#to_u32 raises on overflow for Int32#to_u32 + raises on overflow for Int16#to_i raises on overflow for Int16#to_i + raises on overflow for UInt32#to_i16 raises on overflow for UInt32#to_i16 + raises on overflow for Int16#to_i8 raises on overflow for Int16#to_i8 + raises on overflow for UInt128#to_u raises on overflow for UInt128#to_u + raises on overflow for UInt128#to_i32 raises on overflow for UInt128#to_i32 + raises on overflow for Int16#to_u128 raises on overflow for Int16#to_u128 + raises on overflow for UInt8#to_u16 raises on overflow for UInt8#to_u16 + raises on overflow for UInt128#to_u16 raises on overflow for UInt128#to_u16 + raises on overflow for Int128#to_u32 raises on overflow for Int128#to_u32 + raises on overflow for Int128#to_u raises on overflow for Int128#to_u + raises on overflow for UInt64#to_u raises on overflow for UInt64#to_u + raises on overflow for Int32#to_i8 raises on overflow for Int32#to_i8 + raises on overflow for UInt32#to_u64 raises on overflow for UInt32#to_u64 + raises on overflow for Int32#to_i64 raises on overflow for Int32#to_i64 + raises on overflow for UInt32#to_i128 raises on overflow for UInt32#to_i128 + raises on overflow for Int8#to_u raises on overflow for Int8#to_u + raises on overflow for UInt32#to_i raises on overflow for UInt32#to_i + raises on overflow for UInt64#to_u8 raises on overflow for UInt64#to_u8 + raises on overflow for UInt16#to_i64 raises on overflow for UInt16#to_i64 + raises on overflow for Int64#to_u16 raises on overflow for Int64#to_u16 + raises on overflow for Int128#to_u128 raises on overflow for Int128#to_u128 + raises on overflow for Int8#to_u8 raises on overflow for Int8#to_u8 + raises on overflow for Int32#to_u raises on overflow for Int32#to_u + raises on overflow for Int16#to_u32 raises on overflow for Int16#to_u32 + raises on overflow for Int8#to_u32 raises on overflow for Int8#to_u32 + raises on overflow for UInt128#to_i8 raises on overflow for UInt128#to_i8 + raises on overflow for UInt16#to_u64 raises on overflow for UInt16#to_u64 + raises on overflow for UInt32#to_i32 raises on overflow for UInt32#to_i32 + raises on overflow for Int8#to_u16 raises on overflow for Int8#to_u16 + raises on overflow for UInt64#to_u128 raises on overflow for UInt64#to_u128 + raises on overflow for UInt8#to_u32 raises on overflow for UInt8#to_u32 + raises on overflow for Int32#to_u128 raises on overflow for Int32#to_u128 + raises on overflow for Int8#to_i128 raises on overflow for Int8#to_i128 + raises on overflow for UInt16#to_i128 raises on overflow for UInt16#to_i128 + raises on overflow for Int8#to_u64 raises on overflow for Int8#to_u64 + raises on overflow for UInt128#to_i raises on overflow for UInt128#to_i + raises on overflow for UInt64#to_i64 raises on overflow for UInt64#to_i64 + raises on overflow for UInt128#to_i64 raises on overflow for UInt128#to_i64 + raises on overflow for Int64#to_i32 raises on overflow for Int64#to_i32 + raises on overflow for UInt16#to_i8 raises on overflow for UInt16#to_i8 + raises on overflow for UInt8#to_i raises on overflow for UInt8#to_i + raises on overflow for Int64#to_i8 raises on overflow for Int64#to_i8 + raises on overflow for UInt32#to_i64 raises on overflow for UInt32#to_i64 + raises on overflow for UInt16#to_u8 raises on overflow for UInt16#to_u8 + raises on overflow for Int64#to_u128 raises on overflow for Int64#to_u128 + raises on overflow for UInt64#to_u32 raises on overflow for UInt64#to_u32 + raises on overflow for UInt8#to_i32 raises on overflow for UInt8#to_i32 + raises on overflow for UInt16#to_u32 raises on overflow for UInt16#to_u32 + raises on overflow for Int16#to_u raises on overflow for Int16#to_u + raises on overflow for UInt32#to_i8 raises on overflow for UInt32#to_i8 + raises on overflow for Int16#to_u64 raises on overflow for Int16#to_u64 + raises on overflow for Int8#to_u128 raises on overflow for Int8#to_u128 + raises on overflow for Int64#to_i raises on overflow for Int64#to_i + raises on overflow for Int32#to_i16 raises on overflow for Int32#to_i16 + raises on overflow for Int32#to_u8 raises on overflow for Int32#to_u8 + raises on overflow for UInt128#to_u32 raises on overflow for UInt128#to_u32 + raises on overflow for UInt16#to_u raises on overflow for UInt16#to_u + raises on overflow for Int64#to_u raises on overflow for Int64#to_u + raises on overflow for UInt128#to_i128 raises on overflow for UInt128#to_i128 + raises on overflow for Int16#to_u8 raises on overflow for Int16#to_u8 + raises on overflow for Int64#to_u64 raises on overflow for Int64#to_u64 + raises on overflow for UInt64#to_i8 raises on overflow for UInt64#to_i8 + raises on overflow for UInt64#to_u16 raises on overflow for UInt64#to_u16 + raises on overflow for UInt64#to_i16 raises on overflow for UInt64#to_i16 + raises on overflow for UInt128#to_i16 raises on overflow for UInt128#to_i16 + raises on overflow for UInt8#to_i8 raises on overflow for UInt8#to_i8 + raises on overflow for Int8#to_i16 raises on overflow for Int8#to_i16 + raises on overflow for Int64#to_u8 raises on overflow for Int64#to_u8 + raises on overflow for Int16#to_i64 raises on overflow for Int16#to_i64 + raises on overflow for UInt16#to_u128 raises on overflow for UInt16#to_u128 + raises on overflow for Int32#to_u64 raises on overflow for Int32#to_u64 + raises on overflow for UInt128#to_u64 raises on overflow for UInt128#to_u64 + raises on overflow for Int128#to_i8 raises on overflow for Int128#to_i8 + raises on overflow for Int128#to_i raises on overflow for Int128#to_i + raises on overflow for Int64#to_i128 raises on overflow for Int64#to_i128 + raises on overflow for UInt32#to_u8 raises on overflow for UInt32#to_u8 + raises on overflow for Int32#to_u16 raises on overflow for Int32#to_u16 + raises on overflow for UInt16#to_i32 raises on overflow for UInt16#to_i32 + raises on overflow for Int16#to_i128 raises on overflow for Int16#to_i128 + raises on overflow for UInt8#to_i128 raises on overflow for UInt8#to_i128 + raises on overflow for Int16#to_i32 raises on overflow for Int16#to_i32 + raises on overflow for Int128#to_u64 raises on overflow for Int128#to_u64 + raises on overflow for UInt64#to_i128 raises on overflow for UInt64#to_i128 + raises on overflow for Int128#to_u16 raises on overflow for Int128#to_u16 + raises on overflow for Int8#to_i raises on overflow for Int8#to_i + raises on overflow for Int8#to_i64 raises on overflow for Int8#to_i64 + raises on overflow for Int128#to_i32 raises on overflow for Int128#to_i32 + raises on overflow for Int128#to_u8 raises on overflow for Int128#to_u8 + raises on overflow for UInt8#to_i16 raises on overflow for UInt8#to_i16 + raises on overflow for UInt8#to_i64 raises on overflow for UInt8#to_i64 + raises on overflow for Int128#to_i16 raises on overflow for Int128#to_i16 + raises on overflow for UInt16#to_i16 raises on overflow for UInt16#to_i16 + #to_f! + doesn't raise on overflow for UInt128#to_f32 doesn't raise on overflow for UInt128#to_f32 + #to_i! + preserves negative sign preserves negative sign + works from greater values to smaller types works from greater values to smaller types + works from negative values to unsigned types works from negative values to unsigned types + #- + overflow test UInt16 - Int128 overflow test UInt16 - Int128 + overflow test Int32 - UInt64 overflow test Int32 - UInt64 + overflow test UInt32 - UInt128 overflow test UInt32 - UInt128 + overflow test Int16 - Int64 overflow test Int16 - Int64 + overflow test UInt8 - UInt32 overflow test UInt8 - UInt32 + overflow test Int16 - UInt32 overflow test Int16 - UInt32 + overflow test Int16 - Int128 overflow test Int16 - Int128 + overflow test Int8 - Int64 overflow test Int8 - Int64 + overflow test Int16 - Int16 overflow test Int16 - Int16 + overflow test UInt8 - UInt128 overflow test UInt8 - UInt128 + overflow test Int128 - Int32 overflow test Int128 - Int32 + overflow test UInt32 - Int64 overflow test UInt32 - Int64 + overflow test UInt128 - Int8 overflow test UInt128 - Int8 + overflow test UInt32 - UInt32 overflow test UInt32 - UInt32 + overflow test UInt64 - Int128 overflow test UInt64 - Int128 + overflow test UInt128 - Int32 overflow test UInt128 - Int32 + overflow test Int64 - UInt128 overflow test Int64 - UInt128 + overflow test UInt64 - Int64 overflow test UInt64 - Int64 + overflow test UInt32 - Int32 overflow test UInt32 - Int32 + overflow test UInt8 - Int64 overflow test UInt8 - Int64 + overflow test UInt32 - UInt16 overflow test UInt32 - UInt16 + overflow test UInt16 - UInt16 overflow test UInt16 - UInt16 + overflow test Int16 - UInt16 overflow test Int16 - UInt16 + overflow test Int32 - Int128 overflow test Int32 - Int128 + overflow test UInt16 - UInt64 overflow test UInt16 - UInt64 + overflow test Int32 - UInt8 overflow test Int32 - UInt8 + overflow test UInt8 - UInt64 overflow test UInt8 - UInt64 + overflow test UInt128 - UInt8 overflow test UInt128 - UInt8 + overflow test Int8 - Int128 overflow test Int8 - Int128 + overflow test Int128 - UInt8 overflow test Int128 - UInt8 + overflow test Int64 - Int8 overflow test Int64 - Int8 + overflow test Int32 - UInt32 overflow test Int32 - UInt32 + overflow test Int32 - Int8 overflow test Int32 - Int8 + overflow test UInt64 - UInt128 overflow test UInt64 - UInt128 + overflow test Int64 - Int64 overflow test Int64 - Int64 + overflow test Int8 - Int32 overflow test Int8 - Int32 + overflow test UInt64 - UInt8 overflow test UInt64 - UInt8 + overflow test UInt32 - Int16 overflow test UInt32 - Int16 + overflow test Int32 - Int32 overflow test Int32 - Int32 + overflow test Int16 - UInt8 overflow test Int16 - UInt8 + overflow test Int64 - Int16 overflow test Int64 - Int16 + overflow test Int128 - UInt16 overflow test Int128 - UInt16 + overflow test UInt128 - Int128 overflow test UInt128 - Int128 + overflow test Int32 - UInt128 overflow test Int32 - UInt128 + overflow test UInt64 - UInt16 overflow test UInt64 - UInt16 + overflow test UInt16 - Int64 overflow test UInt16 - Int64 + overflow test UInt64 - UInt32 overflow test UInt64 - UInt32 + overflow test UInt128 - Int64 overflow test UInt128 - Int64 + overflow test Int8 - Int16 overflow test Int8 - Int16 + overflow test UInt8 - UInt16 overflow test UInt8 - UInt16 + overflow test UInt64 - Int8 overflow test UInt64 - Int8 + overflow test Int8 - UInt64 overflow test Int8 - UInt64 + overflow test UInt32 - UInt8 overflow test UInt32 - UInt8 + overflow test UInt128 - Int16 overflow test UInt128 - Int16 + overflow test Int8 - Int8 overflow test Int8 - Int8 + overflow test Int8 - UInt16 overflow test Int8 - UInt16 + overflow test UInt16 - Int32 overflow test UInt16 - Int32 + overflow test Int16 - Int32 overflow test Int16 - Int32 + overflow test Int64 - UInt64 overflow test Int64 - UInt64 + overflow test Int64 - Int128 overflow test Int64 - Int128 + overflow test Int64 - UInt8 overflow test Int64 - UInt8 + overflow test Int64 - UInt16 overflow test Int64 - UInt16 + overflow test Int128 - UInt64 overflow test Int128 - UInt64 + overflow test Int32 - Int16 overflow test Int32 - Int16 + overflow test Int128 - Int64 overflow test Int128 - Int64 + overflow test UInt64 - Int16 overflow test UInt64 - Int16 + overflow test UInt32 - Int8 overflow test UInt32 - Int8 + overflow test Int64 - Int32 overflow test Int64 - Int32 + overflow test UInt8 - Int16 overflow test UInt8 - Int16 + overflow test Int8 - UInt8 overflow test Int8 - UInt8 + overflow test UInt8 - Int8 overflow test UInt8 - Int8 + overflow test Int16 - Int8 overflow test Int16 - Int8 + overflow test Int128 - UInt128 overflow test Int128 - UInt128 + overflow test Int128 - Int8 overflow test Int128 - Int8 + overflow test UInt128 - UInt16 overflow test UInt128 - UInt16 + overflow test UInt32 - UInt64 overflow test UInt32 - UInt64 + overflow test Int16 - UInt128 overflow test Int16 - UInt128 + overflow test UInt8 - Int32 overflow test UInt8 - Int32 + overflow test Int64 - UInt32 overflow test Int64 - UInt32 + overflow test Int32 - UInt16 overflow test Int32 - UInt16 + overflow test UInt32 - Int128 overflow test UInt32 - Int128 + overflow test Int32 - Int64 overflow test Int32 - Int64 + overflow test UInt16 - UInt32 overflow test UInt16 - UInt32 + overflow test UInt128 - UInt32 overflow test UInt128 - UInt32 + overflow test UInt16 - Int8 overflow test UInt16 - Int8 + overflow test UInt128 - UInt128 overflow test UInt128 - UInt128 + overflow test Int128 - Int16 overflow test Int128 - Int16 + overflow test UInt8 - Int128 overflow test UInt8 - Int128 + overflow test Int16 - UInt64 overflow test Int16 - UInt64 + overflow test UInt128 - UInt64 overflow test UInt128 - UInt64 + overflow test UInt16 - UInt8 overflow test UInt16 - UInt8 + overflow test UInt16 - UInt128 overflow test UInt16 - UInt128 + overflow test UInt8 - UInt8 overflow test UInt8 - UInt8 + overflow test Int128 - UInt32 overflow test Int128 - UInt32 + overflow test Int8 - UInt32 overflow test Int8 - UInt32 + overflow test Int128 - Int128 overflow test Int128 - Int128 + overflow test UInt64 - Int32 overflow test UInt64 - Int32 + overflow test UInt16 - Int16 overflow test UInt16 - Int16 + overflow test UInt64 - UInt64 overflow test UInt64 - UInt64 + overflow test Int8 - UInt128 overflow test Int8 - UInt128 #&* - wraps around for Int64 wraps around for Int64 - wraps around for Int32 wraps around for Int32 - wraps around for UInt16 wraps around for UInt16 - wraps around for UInt128 wraps around for UInt128 wraps around for UInt8 wraps around for UInt8 wraps around for UInt64 wraps around for UInt64 wraps around for Int128 wraps around for Int128 - wraps around for Int16 wraps around for Int16 + wraps around for UInt128 wraps around for UInt128 wraps around for UInt32 wraps around for UInt32 + wraps around for UInt16 wraps around for UInt16 wraps around for Int8 wraps around for Int8 + wraps around for Int16 wraps around for Int16 + wraps around for Int32 wraps around for Int32 + wraps around for Int64 wraps around for Int64 #&- - wraps around for Int8 wraps around for Int8 wraps around for Int16 wraps around for Int16 - wraps around for UInt16 wraps around for UInt16 + wraps around for Int8 wraps around for Int8 wraps around for UInt8 wraps around for UInt8 wraps around for UInt64 wraps around for UInt64 - wraps around for UInt32 wraps around for UInt32 + wraps around for UInt16 wraps around for UInt16 wraps around for Int32 wraps around for Int32 wraps around for UInt128 wraps around for UInt128 + wraps around for UInt32 wraps around for UInt32 wraps around for Int64 wraps around for Int64 wraps around for Int128 wraps around for Int128 #&+ - wraps around for Int16 wraps around for Int16 - wraps around for UInt16 wraps around for UInt16 - wraps around for Int8 wraps around for Int8 + wraps around for UInt128 wraps around for UInt128 wraps around for UInt8 wraps around for UInt8 + wraps around for UInt16 wraps around for UInt16 + wraps around for Int16 wraps around for Int16 + wraps around for Int64 wraps around for Int64 wraps around for UInt32 wraps around for UInt32 + wraps around for UInt64 wraps around for UInt64 wraps around for Int32 wraps around for Int32 wraps around for Int128 wraps around for Int128 - wraps around for UInt128 wraps around for UInt128 - wraps around for Int64 wraps around for Int64 - wraps around for UInt64 wraps around for UInt64 - #to_i - raises on overflow for Int128#to_i16 raises on overflow for Int128#to_i16 - raises on overflow for UInt64#to_u32 raises on overflow for UInt64#to_u32 - raises on overflow for UInt16#to_i64 raises on overflow for UInt16#to_i64 - raises on overflow for UInt32#to_u64 raises on overflow for UInt32#to_u64 - raises on overflow for UInt64#to_i32 raises on overflow for UInt64#to_i32 - raises on overflow for Int64#to_u32 raises on overflow for Int64#to_u32 - raises on overflow for UInt8#to_u32 raises on overflow for UInt8#to_u32 - raises on overflow for UInt128#to_i raises on overflow for UInt128#to_i - raises on overflow for Int128#to_u raises on overflow for Int128#to_u - raises on overflow for UInt64#to_i8 raises on overflow for UInt64#to_i8 - raises on overflow for UInt8#to_u128 raises on overflow for UInt8#to_u128 - raises on overflow for UInt128#to_i64 raises on overflow for UInt128#to_i64 - raises on overflow for Int64#to_u16 raises on overflow for Int64#to_u16 - raises on overflow for UInt8#to_u64 raises on overflow for UInt8#to_u64 - raises on overflow for Int16#to_i8 raises on overflow for Int16#to_i8 - raises on overflow for Int16#to_i32 raises on overflow for Int16#to_i32 - raises on overflow for UInt128#to_i16 raises on overflow for UInt128#to_i16 - raises on overflow for UInt32#to_u8 raises on overflow for UInt32#to_u8 - raises on overflow for Int128#to_i8 raises on overflow for Int128#to_i8 - raises on overflow for Int16#to_u raises on overflow for Int16#to_u - raises on overflow for UInt32#to_i16 raises on overflow for UInt32#to_i16 - raises on overflow for UInt8#to_i raises on overflow for UInt8#to_i - raises on overflow for Int32#to_u64 raises on overflow for Int32#to_u64 - raises on overflow for Int16#to_i64 raises on overflow for Int16#to_i64 - raises on overflow for Int8#to_u128 raises on overflow for Int8#to_u128 - raises on overflow for UInt8#to_i32 raises on overflow for UInt8#to_i32 - raises on overflow for UInt8#to_u16 raises on overflow for UInt8#to_u16 - raises on overflow for UInt32#to_i32 raises on overflow for UInt32#to_i32 - raises on overflow for Int128#to_i32 raises on overflow for Int128#to_i32 - raises on overflow for UInt128#to_u raises on overflow for UInt128#to_u - raises on overflow for UInt64#to_i64 raises on overflow for UInt64#to_i64 - raises on overflow for Int32#to_u16 raises on overflow for Int32#to_u16 - raises on overflow for Int8#to_u32 raises on overflow for Int8#to_u32 - raises on overflow for UInt32#to_i128 raises on overflow for UInt32#to_i128 - raises on overflow for Int32#to_i8 raises on overflow for Int32#to_i8 - raises on overflow for Int64#to_u64 raises on overflow for Int64#to_u64 - raises on overflow for UInt16#to_i raises on overflow for UInt16#to_i - raises on overflow for Int64#to_i32 raises on overflow for Int64#to_i32 - raises on overflow for Int64#to_u8 raises on overflow for Int64#to_u8 - raises on overflow for Int16#to_i128 raises on overflow for Int16#to_i128 - raises on overflow for Int16#to_u16 raises on overflow for Int16#to_u16 - raises on overflow for UInt64#to_u128 raises on overflow for UInt64#to_u128 - raises on overflow for Int8#to_u raises on overflow for Int8#to_u - raises on overflow for Int8#to_u16 raises on overflow for Int8#to_u16 - raises on overflow for Int128#to_u64 raises on overflow for Int128#to_u64 - raises on overflow for UInt32#to_i64 raises on overflow for UInt32#to_i64 - raises on overflow for UInt64#to_i16 raises on overflow for UInt64#to_i16 - raises on overflow for Int8#to_i raises on overflow for Int8#to_i - raises on overflow for Int32#to_i16 raises on overflow for Int32#to_i16 - raises on overflow for Int128#to_u32 raises on overflow for Int128#to_u32 - raises on overflow for UInt128#to_u16 raises on overflow for UInt128#to_u16 - raises on overflow for Int32#to_i128 raises on overflow for Int32#to_i128 - raises on overflow for Int128#to_i raises on overflow for Int128#to_i - raises on overflow for UInt32#to_u128 raises on overflow for UInt32#to_u128 - raises on overflow for Int16#to_u128 raises on overflow for Int16#to_u128 - raises on overflow for UInt64#to_u raises on overflow for UInt64#to_u - raises on overflow for Int32#to_u128 raises on overflow for Int32#to_u128 - raises on overflow for UInt8#to_i16 raises on overflow for UInt8#to_i16 - raises on overflow for Int8#to_u8 raises on overflow for Int8#to_u8 - raises on overflow for Int64#to_u raises on overflow for Int64#to_u - raises on overflow for UInt8#to_i128 raises on overflow for UInt8#to_i128 - raises on overflow for Int16#to_u64 raises on overflow for Int16#to_u64 - raises on overflow for UInt16#to_u32 raises on overflow for UInt16#to_u32 - raises on overflow for Int64#to_i16 raises on overflow for Int64#to_i16 - raises on overflow for Int8#to_i16 raises on overflow for Int8#to_i16 - raises on overflow for UInt32#to_u16 raises on overflow for UInt32#to_u16 - raises on overflow for Int128#to_u128 raises on overflow for Int128#to_u128 - raises on overflow for UInt128#to_i128 raises on overflow for UInt128#to_i128 - raises on overflow for UInt128#to_i32 raises on overflow for UInt128#to_i32 - raises on overflow for UInt64#to_u8 raises on overflow for UInt64#to_u8 - raises on overflow for Int16#to_i raises on overflow for Int16#to_i - raises on overflow for Int8#to_i32 raises on overflow for Int8#to_i32 - raises on overflow for UInt128#to_u64 raises on overflow for UInt128#to_u64 - raises on overflow for UInt8#to_i64 raises on overflow for UInt8#to_i64 - raises on overflow for UInt64#to_i raises on overflow for UInt64#to_i - raises on overflow for UInt64#to_u16 raises on overflow for UInt64#to_u16 - raises on overflow for UInt16#to_u64 raises on overflow for UInt16#to_u64 - raises on overflow for UInt16#to_i128 raises on overflow for UInt16#to_i128 - raises on overflow for UInt16#to_i16 raises on overflow for UInt16#to_i16 - raises on overflow for UInt16#to_i8 raises on overflow for UInt16#to_i8 - raises on overflow for UInt128#to_u32 raises on overflow for UInt128#to_u32 - raises on overflow for Int16#to_u8 raises on overflow for Int16#to_u8 - raises on overflow for Int32#to_u32 raises on overflow for Int32#to_u32 - raises on overflow for UInt16#to_u raises on overflow for UInt16#to_u - raises on overflow for UInt16#to_u8 raises on overflow for UInt16#to_u8 - raises on overflow for UInt128#to_u8 raises on overflow for UInt128#to_u8 - raises on overflow for Int128#to_u8 raises on overflow for Int128#to_u8 - raises on overflow for Int16#to_u32 raises on overflow for Int16#to_u32 - raises on overflow for Int8#to_i128 raises on overflow for Int8#to_i128 - raises on overflow for Int32#to_u raises on overflow for Int32#to_u - raises on overflow for Int64#to_i8 raises on overflow for Int64#to_i8 - raises on overflow for Int8#to_i64 raises on overflow for Int8#to_i64 - raises on overflow for Int32#to_u8 raises on overflow for Int32#to_u8 - raises on overflow for Int32#to_i64 raises on overflow for Int32#to_i64 - raises on overflow for Int64#to_i raises on overflow for Int64#to_i - raises on overflow for UInt32#to_i raises on overflow for UInt32#to_i - raises on overflow for UInt128#to_i8 raises on overflow for UInt128#to_i8 - raises on overflow for UInt16#to_i32 raises on overflow for UInt16#to_i32 - raises on overflow for UInt8#to_u raises on overflow for UInt8#to_u - raises on overflow for Int128#to_i64 raises on overflow for Int128#to_i64 - raises on overflow for Int64#to_u128 raises on overflow for Int64#to_u128 - raises on overflow for Int64#to_i128 raises on overflow for Int64#to_i128 - raises on overflow for Int128#to_u16 raises on overflow for Int128#to_u16 - raises on overflow for UInt8#to_i8 raises on overflow for UInt8#to_i8 - raises on overflow for Int8#to_u64 raises on overflow for Int8#to_u64 - raises on overflow for UInt16#to_u128 raises on overflow for UInt16#to_u128 - raises on overflow for UInt32#to_i8 raises on overflow for UInt32#to_i8 - raises on overflow for UInt64#to_i128 raises on overflow for UInt64#to_i128 + wraps around for Int8 wraps around for Int8 #* - overflow test UInt16 * Int32 overflow test UInt16 * Int32 - overflow test UInt32 * Int8 overflow test UInt32 * Int8 - overflow test UInt8 * UInt8 overflow test UInt8 * UInt8 + overflow test Int8 * UInt32 overflow test Int8 * UInt32 + overflow test UInt8 * Int32 overflow test UInt8 * Int32 + overflow test Int64 * Int64 overflow test Int64 * Int64 + overflow test UInt32 * UInt64 overflow test UInt32 * UInt64 + overflow test Int16 * UInt32 overflow test Int16 * UInt32 + overflow test Int8 * Int8 overflow test Int8 * Int8 + overflow test UInt128 * UInt32 overflow test UInt128 * UInt32 + overflow test UInt32 * Int128 overflow test UInt32 * Int128 + overflow test Int8 * UInt128 overflow test Int8 * UInt128 + overflow test UInt32 * UInt128 overflow test UInt32 * UInt128 + overflow test Int32 * UInt64 overflow test Int32 * UInt64 + overflow test Int128 * UInt128 overflow test Int128 * UInt128 + overflow test Int16 * UInt16 overflow test Int16 * UInt16 + overflow test Int16 * Int128 overflow test Int16 * Int128 + overflow test UInt8 * UInt128 overflow test UInt8 * UInt128 + overflow test Int128 * UInt16 overflow test Int128 * UInt16 + overflow test UInt16 * UInt64 overflow test UInt16 * UInt64 + overflow test Int64 * UInt64 overflow test Int64 * UInt64 + overflow test Int16 * UInt8 overflow test Int16 * UInt8 + overflow test Int16 * Int16 overflow test Int16 * Int16 + overflow test UInt64 * Int32 overflow test UInt64 * Int32 + overflow test Int32 * UInt8 overflow test Int32 * UInt8 overflow test Int8 * Int64 overflow test Int8 * Int64 - overflow test UInt128 * Int64 overflow test UInt128 * Int64 + overflow test UInt128 * Int128 overflow test UInt128 * Int128 + overflow test UInt64 * UInt8 overflow test UInt64 * UInt8 + overflow test Int32 * UInt16 overflow test Int32 * UInt16 + overflow test UInt128 * UInt128 overflow test UInt128 * UInt128 overflow test Int16 * UInt128 overflow test Int16 * UInt128 - overflow test Int64 * Int16 overflow test Int64 * Int16 - overflow test Int128 * Int8 overflow test Int128 * Int8 - overflow test Int64 * Int64 overflow test Int64 * Int64 overflow test UInt128 * Int32 overflow test UInt128 * Int32 + overflow test Int8 * UInt16 overflow test Int8 * UInt16 + overflow test UInt128 * UInt8 overflow test UInt128 * UInt8 + overflow test UInt8 * Int64 overflow test UInt8 * Int64 overflow test Int128 * Int16 overflow test Int128 * Int16 - overflow test UInt8 * UInt32 overflow test UInt8 * UInt32 + overflow test Int8 * UInt64 overflow test Int8 * UInt64 + overflow test UInt16 * Int16 overflow test UInt16 * Int16 overflow test Int128 * UInt32 overflow test Int128 * UInt32 - overflow test Int8 * Int8 overflow test Int8 * Int8 - overflow test UInt32 * Int64 overflow test UInt32 * Int64 - overflow test Int8 * UInt16 overflow test Int8 * UInt16 - overflow test UInt8 * Int128 overflow test UInt8 * Int128 - overflow test UInt32 * UInt64 overflow test UInt32 * UInt64 + overflow test Int16 * UInt64 overflow test Int16 * UInt64 + overflow test Int64 * UInt8 overflow test Int64 * UInt8 + overflow test Int64 * Int128 overflow test Int64 * Int128 + overflow test UInt8 * Int16 overflow test UInt8 * Int16 + overflow test Int32 * Int128 overflow test Int32 * Int128 + overflow test Int32 * UInt32 overflow test Int32 * UInt32 + overflow test UInt16 * UInt128 overflow test UInt16 * UInt128 + overflow test UInt32 * Int16 overflow test UInt32 * Int16 overflow test Int32 * Int16 overflow test Int32 * Int16 + overflow test Int128 * Int8 overflow test Int128 * Int8 overflow test UInt8 * UInt16 overflow test UInt8 * UInt16 - overflow test UInt8 * Int8 overflow test UInt8 * Int8 - overflow test UInt64 * Int32 overflow test UInt64 * Int32 - overflow test UInt64 * Int128 overflow test UInt64 * Int128 + overflow test Int64 * Int32 overflow test Int64 * Int32 + overflow test UInt64 * Int64 overflow test UInt64 * Int64 + overflow test UInt16 * Int8 overflow test UInt16 * Int8 + overflow test Int64 * UInt16 overflow test Int64 * UInt16 + overflow test UInt8 * UInt64 overflow test UInt8 * UInt64 + overflow test Int64 * Int16 overflow test Int64 * Int16 + overflow test Int128 * UInt64 overflow test Int128 * UInt64 + overflow test Int128 * Int32 overflow test Int128 * Int32 + overflow test UInt128 * UInt16 overflow test UInt128 * UInt16 + overflow test UInt32 * UInt16 overflow test UInt32 * UInt16 + overflow test UInt16 * UInt16 overflow test UInt16 * UInt16 + overflow test Int16 * Int8 overflow test Int16 * Int8 + overflow test UInt64 * UInt16 overflow test UInt64 * UInt16 overflow test UInt64 * Int8 overflow test UInt64 * Int8 + overflow test Int32 * Int64 overflow test Int32 * Int64 + overflow test UInt32 * UInt8 overflow test UInt32 * UInt8 + overflow test UInt128 * Int16 overflow test UInt128 * Int16 + overflow test Int16 * Int32 overflow test Int16 * Int32 + overflow test UInt128 * Int64 overflow test UInt128 * Int64 + overflow test UInt32 * Int32 overflow test UInt32 * Int32 overflow test UInt16 * UInt32 overflow test UInt16 * UInt32 - overflow test UInt64 * UInt64 overflow test UInt64 * UInt64 - overflow test UInt16 * Int8 overflow test UInt16 * Int8 - overflow test Int32 * Int128 overflow test Int32 * Int128 - overflow test Int64 * UInt64 overflow test Int64 * UInt64 - overflow test Int128 * UInt16 overflow test Int128 * UInt16 - overflow test Int64 * UInt128 overflow test Int64 * UInt128 + overflow test Int8 * Int16 overflow test Int8 * Int16 + overflow test Int8 * UInt8 overflow test Int8 * UInt8 overflow test Int8 * Int32 overflow test Int8 * Int32 - overflow test Int16 * UInt64 overflow test Int16 * UInt64 - overflow test Int16 * UInt32 overflow test Int16 * UInt32 - overflow test UInt32 * UInt128 overflow test UInt32 * UInt128 - overflow test UInt16 * UInt8 overflow test UInt16 * UInt8 - overflow test UInt128 * Int8 overflow test UInt128 * Int8 - overflow test UInt8 * Int16 overflow test UInt8 * Int16 + overflow test UInt8 * UInt32 overflow test UInt8 * UInt32 overflow test Int8 * Int128 overflow test Int8 * Int128 - overflow test UInt8 * UInt64 overflow test UInt8 * UInt64 - overflow test UInt8 * Int64 overflow test UInt8 * Int64 - overflow test UInt64 * UInt8 overflow test UInt64 * UInt8 - overflow test UInt64 * UInt128 overflow test UInt64 * UInt128 overflow test Int32 * Int8 overflow test Int32 * Int8 - overflow test Int16 * UInt16 overflow test Int16 * UInt16 - overflow test UInt64 * Int64 overflow test UInt64 * Int64 - overflow test Int64 * Int32 overflow test Int64 * Int32 + overflow test UInt16 * Int128 overflow test UInt16 * Int128 + overflow test Int64 * UInt128 overflow test Int64 * UInt128 + overflow test Int64 * Int8 overflow test Int64 * Int8 + overflow test Int128 * UInt8 overflow test Int128 * UInt8 + overflow test UInt64 * UInt32 overflow test UInt64 * UInt32 + overflow test UInt8 * UInt8 overflow test UInt8 * UInt8 overflow test Int32 * Int32 overflow test Int32 * Int32 - overflow test Int128 * Int32 overflow test Int128 * Int32 - overflow test Int128 * Int128 overflow test Int128 * Int128 - overflow test Int32 * Int64 overflow test Int32 * Int64 - overflow test UInt8 * UInt128 overflow test UInt8 * UInt128 + overflow test UInt64 * UInt64 overflow test UInt64 * UInt64 + overflow test Int64 * UInt32 overflow test Int64 * UInt32 + overflow test UInt64 * Int128 overflow test UInt64 * Int128 overflow test UInt128 * UInt64 overflow test UInt128 * UInt64 - overflow test UInt8 * Int32 overflow test UInt8 * Int32 - overflow test Int8 * UInt128 overflow test Int8 * UInt128 - overflow test Int64 * Int128 overflow test Int64 * Int128 + overflow test Int16 * Int64 overflow test Int16 * Int64 + overflow test UInt16 * Int32 overflow test UInt16 * Int32 + overflow test UInt128 * Int8 overflow test UInt128 * Int8 + overflow test UInt32 * UInt32 overflow test UInt32 * UInt32 + overflow test UInt16 * UInt8 overflow test UInt16 * UInt8 + overflow test UInt32 * Int8 overflow test UInt32 * Int8 + overflow test Int128 * Int128 overflow test Int128 * Int128 overflow test Int128 * Int64 overflow test Int128 * Int64 - overflow test UInt64 * UInt32 overflow test UInt64 * UInt32 - overflow test Int128 * UInt128 overflow test Int128 * UInt128 - overflow test UInt64 * UInt16 overflow test UInt64 * UInt16 - overflow test Int32 * UInt32 overflow test Int32 * UInt32 - overflow test UInt16 * UInt128 overflow test UInt16 * UInt128 - overflow test Int128 * UInt64 overflow test Int128 * UInt64 - overflow test UInt128 * UInt8 overflow test UInt128 * UInt8 - overflow test UInt16 * Int128 overflow test UInt16 * Int128 - overflow test Int64 * UInt16 overflow test Int64 * UInt16 - overflow test UInt16 * UInt64 overflow test UInt16 * UInt64 - overflow test UInt32 * Int32 overflow test UInt32 * Int32 - overflow test UInt128 * UInt16 overflow test UInt128 * UInt16 - overflow test UInt16 * Int64 overflow test UInt16 * Int64 + overflow test UInt8 * Int128 overflow test UInt8 * Int128 overflow test Int32 * UInt128 overflow test Int32 * UInt128 - overflow test Int16 * Int32 overflow test Int16 * Int32 - overflow test UInt32 * Int128 overflow test UInt32 * Int128 - overflow test Int8 * Int16 overflow test Int8 * Int16 - overflow test Int8 * UInt32 overflow test Int8 * UInt32 - overflow test UInt128 * UInt128 overflow test UInt128 * UInt128 - overflow test Int64 * UInt32 overflow test Int64 * UInt32 - overflow test UInt32 * UInt32 overflow test UInt32 * UInt32 - overflow test UInt128 * UInt32 overflow test UInt128 * UInt32 - overflow test Int8 * UInt64 overflow test Int8 * UInt64 - overflow test UInt32 * UInt8 overflow test UInt32 * UInt8 - overflow test Int16 * Int128 overflow test Int16 * Int128 - overflow test UInt16 * UInt16 overflow test UInt16 * UInt16 - overflow test Int32 * UInt64 overflow test Int32 * UInt64 - overflow test Int128 * UInt8 overflow test Int128 * UInt8 - overflow test Int16 * Int8 overflow test Int16 * Int8 - overflow test UInt128 * Int16 overflow test UInt128 * Int16 - overflow test UInt32 * Int16 overflow test UInt32 * Int16 - overflow test UInt16 * Int16 overflow test UInt16 * Int16 - overflow test UInt32 * UInt16 overflow test UInt32 * UInt16 - overflow test Int16 * UInt8 overflow test Int16 * UInt8 - overflow test Int16 * Int16 overflow test Int16 * Int16 - overflow test Int32 * UInt8 overflow test Int32 * UInt8 - overflow test Int16 * Int64 overflow test Int16 * Int64 - overflow test UInt128 * Int128 overflow test UInt128 * Int128 - overflow test Int64 * UInt8 overflow test Int64 * UInt8 - overflow test Int64 * Int8 overflow test Int64 * Int8 - overflow test Int32 * UInt16 overflow test Int32 * UInt16 - overflow test Int8 * UInt8 overflow test Int8 * UInt8 + overflow test UInt32 * Int64 overflow test UInt32 * Int64 + overflow test UInt8 * Int8 overflow test UInt8 * Int8 + overflow test UInt16 * Int64 overflow test UInt16 * Int64 overflow test UInt64 * Int16 overflow test UInt64 * Int16 - #to_i! - works from greater values to smaller types works from greater values to smaller types - preserves negative sign preserves negative sign - works from negative values to unsigned types works from negative values to unsigned types - #unsafe_chr - doesn't raise on overflow doesn't raise on overflow - #to_f! - doesn't raise on overflow for UInt128#to_f32 doesn't raise on overflow for UInt128#to_f32 + overflow test UInt64 * UInt128 overflow test UInt64 * UInt128 #+ - overflow test UInt64 + Int32 overflow test UInt64 + Int32 - overflow test Int64 + UInt64 overflow test Int64 + UInt64 - overflow test Int128 + Int8 overflow test Int128 + Int8 - overflow test Int8 + Int8 overflow test Int8 + Int8 - overflow test UInt16 + Int128 overflow test UInt16 + Int128 - overflow test UInt32 + UInt8 overflow test UInt32 + UInt8 - overflow test UInt32 + Int16 overflow test UInt32 + Int16 - overflow test UInt8 + Int8 overflow test UInt8 + Int8 - overflow test UInt128 + UInt128 overflow test UInt128 + UInt128 - overflow test UInt128 + Int32 overflow test UInt128 + Int32 - overflow test Int32 + UInt16 overflow test Int32 + UInt16 - overflow test UInt8 + Int128 overflow test UInt8 + Int128 - overflow test UInt16 + UInt8 overflow test UInt16 + UInt8 - overflow test Int8 + Int128 overflow test Int8 + Int128 - overflow test UInt16 + Int8 overflow test UInt16 + Int8 - overflow test Int32 + UInt128 overflow test Int32 + UInt128 - overflow test UInt64 + Int64 overflow test UInt64 + Int64 - overflow test UInt64 + UInt16 overflow test UInt64 + UInt16 - overflow test UInt32 + Int8 overflow test UInt32 + Int8 - overflow test Int8 + UInt64 overflow test Int8 + UInt64 - overflow test Int128 + Int128 overflow test Int128 + Int128 - overflow test UInt64 + UInt128 overflow test UInt64 + UInt128 - overflow test Int16 + Int128 overflow test Int16 + Int128 - overflow test Int32 + UInt64 overflow test Int32 + UInt64 overflow test Int128 + UInt16 overflow test Int128 + UInt16 - overflow test Int64 + UInt8 overflow test Int64 + UInt8 - overflow test Int64 + UInt128 overflow test Int64 + UInt128 - overflow test Int128 + UInt32 overflow test Int128 + UInt32 - overflow test Int8 + Int16 overflow test Int8 + Int16 - overflow test Int8 + UInt8 overflow test Int8 + UInt8 - overflow test Int8 + UInt128 overflow test Int8 + UInt128 - overflow test Int64 + Int8 overflow test Int64 + Int8 - overflow test UInt128 + Int16 overflow test UInt128 + Int16 - overflow test UInt8 + UInt128 overflow test UInt8 + UInt128 - overflow test UInt128 + UInt16 overflow test UInt128 + UInt16 - overflow test UInt64 + Int128 overflow test UInt64 + Int128 - overflow test Int16 + UInt128 overflow test Int16 + UInt128 - overflow test Int16 + Int64 overflow test Int16 + Int64 - overflow test UInt8 + UInt8 overflow test UInt8 + UInt8 - overflow test Int16 + Int32 overflow test Int16 + Int32 - overflow test Int128 + UInt128 overflow test Int128 + UInt128 - overflow test Int128 + Int16 overflow test Int128 + Int16 - overflow test Int128 + Int64 overflow test Int128 + Int64 - overflow test UInt16 + Int64 overflow test UInt16 + Int64 - overflow test UInt8 + Int16 overflow test UInt8 + Int16 - overflow test UInt32 + UInt32 overflow test UInt32 + UInt32 - overflow test Int32 + UInt8 overflow test Int32 + UInt8 - overflow test UInt32 + UInt64 overflow test UInt32 + UInt64 - overflow test UInt128 + UInt8 overflow test UInt128 + UInt8 + overflow test UInt128 + Int64 overflow test UInt128 + Int64 + overflow test UInt64 + UInt8 overflow test UInt64 + UInt8 + overflow test Int16 + UInt8 overflow test Int16 + UInt8 overflow test UInt64 + Int16 overflow test UInt64 + Int16 - overflow test Int64 + Int64 overflow test Int64 + Int64 - overflow test UInt16 + UInt32 overflow test UInt16 + UInt32 - overflow test UInt8 + Int32 overflow test UInt8 + Int32 - overflow test Int16 + UInt64 overflow test Int16 + UInt64 - overflow test Int64 + Int32 overflow test Int64 + Int32 - overflow test Int16 + UInt32 overflow test Int16 + UInt32 + overflow test Int128 + UInt8 overflow test Int128 + UInt8 + overflow test Int32 + Int128 overflow test Int32 + Int128 + overflow test UInt32 + UInt16 overflow test UInt32 + UInt16 + overflow test UInt64 + UInt16 overflow test UInt64 + UInt16 overflow test Int16 + Int16 overflow test Int16 + Int16 - overflow test Int64 + UInt16 overflow test Int64 + UInt16 + overflow test Int64 + Int64 overflow test Int64 + Int64 overflow test Int64 + UInt32 overflow test Int64 + UInt32 - overflow test UInt128 + Int64 overflow test UInt128 + Int64 - overflow test UInt32 + Int64 overflow test UInt32 + Int64 + overflow test Int128 + Int128 overflow test Int128 + Int128 + overflow test Int16 + UInt128 overflow test Int16 + UInt128 + overflow test UInt128 + UInt128 overflow test UInt128 + UInt128 overflow test Int32 + Int8 overflow test Int32 + Int8 - overflow test Int32 + Int64 overflow test Int32 + Int64 - overflow test UInt32 + UInt16 overflow test UInt32 + UInt16 - overflow test Int64 + Int128 overflow test Int64 + Int128 + overflow test Int8 + Int64 overflow test Int8 + Int64 + overflow test Int32 + Int32 overflow test Int32 + Int32 + overflow test Int16 + UInt64 overflow test Int16 + UInt64 + overflow test UInt32 + Int32 overflow test UInt32 + Int32 overflow test UInt128 + Int8 overflow test UInt128 + Int8 - overflow test UInt16 + Int16 overflow test UInt16 + Int16 - overflow test UInt32 + UInt128 overflow test UInt32 + UInt128 - overflow test UInt16 + UInt16 overflow test UInt16 + UInt16 - overflow test Int128 + Int32 overflow test Int128 + Int32 - overflow test UInt8 + UInt16 overflow test UInt8 + UInt16 - overflow test UInt16 + Int32 overflow test UInt16 + Int32 overflow test UInt8 + UInt32 overflow test UInt8 + UInt32 - overflow test Int16 + Int8 overflow test Int16 + Int8 - overflow test Int64 + Int16 overflow test Int64 + Int16 - overflow test Int8 + UInt16 overflow test Int8 + UInt16 - overflow test UInt16 + UInt64 overflow test UInt16 + UInt64 overflow test UInt64 + Int8 overflow test UInt64 + Int8 - overflow test UInt64 + UInt8 overflow test UInt64 + UInt8 - overflow test UInt128 + UInt32 overflow test UInt128 + UInt32 - overflow test Int16 + UInt8 overflow test Int16 + UInt8 - overflow test Int8 + UInt32 overflow test Int8 + UInt32 - overflow test Int128 + UInt64 overflow test Int128 + UInt64 - overflow test UInt64 + UInt64 overflow test UInt64 + UInt64 + overflow test Int128 + UInt128 overflow test Int128 + UInt128 + overflow test Int64 + UInt16 overflow test Int64 + UInt16 + overflow test Int32 + UInt32 overflow test Int32 + UInt32 + overflow test UInt128 + Int16 overflow test UInt128 + Int16 + overflow test UInt32 + UInt8 overflow test UInt32 + UInt8 + overflow test UInt8 + Int32 overflow test UInt8 + Int32 + overflow test Int16 + Int64 overflow test Int16 + Int64 overflow test Int32 + Int16 overflow test Int32 + Int16 + overflow test UInt64 + UInt64 overflow test UInt64 + UInt64 + overflow test UInt32 + Int128 overflow test UInt32 + Int128 + overflow test UInt8 + Int64 overflow test UInt8 + Int64 + overflow test Int8 + UInt64 overflow test Int8 + UInt64 + overflow test Int16 + Int8 overflow test Int16 + Int8 + overflow test Int8 + UInt32 overflow test Int8 + UInt32 + overflow test UInt32 + Int64 overflow test UInt32 + Int64 + overflow test Int16 + Int128 overflow test Int16 + Int128 + overflow test UInt64 + Int64 overflow test UInt64 + Int64 overflow test UInt128 + UInt64 overflow test UInt128 + UInt64 - overflow test UInt32 + Int32 overflow test UInt32 + Int32 - overflow test UInt128 + Int128 overflow test UInt128 + Int128 - overflow test Int128 + UInt8 overflow test Int128 + UInt8 + overflow test UInt16 + UInt32 overflow test UInt16 + UInt32 + overflow test Int128 + Int64 overflow test Int128 + Int64 + overflow test Int128 + UInt32 overflow test Int128 + UInt32 + overflow test UInt16 + Int16 overflow test UInt16 + Int16 + overflow test Int8 + Int32 overflow test Int8 + Int32 + overflow test UInt32 + Int8 overflow test UInt32 + Int8 + overflow test UInt128 + UInt8 overflow test UInt128 + UInt8 + overflow test Int64 + UInt64 overflow test Int64 + UInt64 + overflow test UInt16 + Int128 overflow test UInt16 + Int128 + overflow test Int128 + Int8 overflow test Int128 + Int8 + overflow test UInt16 + Int32 overflow test UInt16 + Int32 + overflow test Int64 + Int8 overflow test Int64 + Int8 + overflow test UInt32 + Int16 overflow test UInt32 + Int16 + overflow test UInt16 + UInt8 overflow test UInt16 + UInt8 + overflow test UInt8 + UInt128 overflow test UInt8 + UInt128 + overflow test Int32 + UInt16 overflow test Int32 + UInt16 + overflow test UInt16 + Int8 overflow test UInt16 + Int8 + overflow test Int8 + UInt16 overflow test Int8 + UInt16 + overflow test UInt8 + UInt16 overflow test UInt8 + UInt16 + overflow test UInt8 + Int128 overflow test UInt8 + Int128 + overflow test Int8 + Int128 overflow test Int8 + Int128 + overflow test Int8 + UInt8 overflow test Int8 + UInt8 + overflow test UInt32 + UInt128 overflow test UInt32 + UInt128 + overflow test Int64 + Int128 overflow test Int64 + Int128 overflow test UInt64 + UInt32 overflow test UInt64 + UInt32 - overflow test UInt32 + Int128 overflow test UInt32 + Int128 + overflow test Int32 + UInt8 overflow test Int32 + UInt8 + overflow test Int32 + UInt64 overflow test Int32 + UInt64 + overflow test Int16 + UInt32 overflow test Int16 + UInt32 + overflow test UInt8 + Int16 overflow test UInt8 + Int16 + overflow test UInt32 + UInt32 overflow test UInt32 + UInt32 + overflow test Int64 + Int16 overflow test Int64 + Int16 + overflow test Int128 + Int16 overflow test Int128 + Int16 + overflow test UInt128 + UInt16 overflow test UInt128 + UInt16 + overflow test Int64 + Int32 overflow test Int64 + Int32 + overflow test UInt64 + UInt128 overflow test UInt64 + UInt128 + overflow test Int32 + UInt128 overflow test Int32 + UInt128 + overflow test UInt16 + UInt16 overflow test UInt16 + UInt16 + overflow test UInt64 + Int128 overflow test UInt64 + Int128 overflow test UInt16 + UInt128 overflow test UInt16 + UInt128 - overflow test UInt8 + Int64 overflow test UInt8 + Int64 + overflow test UInt64 + Int32 overflow test UInt64 + Int32 + overflow test Int128 + UInt64 overflow test Int128 + UInt64 + overflow test Int16 + Int32 overflow test Int16 + Int32 + overflow test UInt16 + UInt64 overflow test UInt16 + UInt64 + overflow test Int8 + Int16 overflow test Int8 + Int16 overflow test Int16 + UInt16 overflow test Int16 + UInt16 - overflow test Int8 + Int32 overflow test Int8 + Int32 - overflow test Int32 + Int128 overflow test Int32 + Int128 - overflow test Int32 + Int32 overflow test Int32 + Int32 overflow test UInt8 + UInt64 overflow test UInt8 + UInt64 - overflow test Int32 + UInt32 overflow test Int32 + UInt32 - overflow test Int8 + Int64 overflow test Int8 + Int64 - #to_f - raises on overflow for UInt128#to_f32 raises on overflow for UInt128#to_f32 - #- - overflow test Int32 - UInt32 overflow test Int32 - UInt32 - overflow test Int64 - Int64 overflow test Int64 - Int64 - overflow test Int32 - Int128 overflow test Int32 - Int128 - overflow test UInt8 - Int16 overflow test UInt8 - Int16 - overflow test Int8 - UInt16 overflow test Int8 - UInt16 - overflow test Int16 - Int64 overflow test Int16 - Int64 - overflow test UInt128 - UInt128 overflow test UInt128 - UInt128 - overflow test UInt8 - UInt64 overflow test UInt8 - UInt64 - overflow test UInt16 - UInt16 overflow test UInt16 - UInt16 - overflow test Int8 - Int32 overflow test Int8 - Int32 - overflow test UInt8 - Int128 overflow test UInt8 - Int128 - overflow test Int128 - Int8 overflow test Int128 - Int8 - overflow test UInt128 - Int8 overflow test UInt128 - Int8 - overflow test Int128 - UInt64 overflow test Int128 - UInt64 - overflow test UInt8 - UInt8 overflow test UInt8 - UInt8 - overflow test UInt128 - Int16 overflow test UInt128 - Int16 - overflow test Int32 - UInt128 overflow test Int32 - UInt128 - overflow test UInt16 - UInt8 overflow test UInt16 - UInt8 - overflow test Int128 - UInt16 overflow test Int128 - UInt16 - overflow test UInt16 - Int8 overflow test UInt16 - Int8 - overflow test UInt32 - Int16 overflow test UInt32 - Int16 - overflow test Int64 - UInt64 overflow test Int64 - UInt64 - overflow test Int8 - UInt64 overflow test Int8 - UInt64 - overflow test Int8 - Int64 overflow test Int8 - Int64 - overflow test UInt16 - Int16 overflow test UInt16 - Int16 - overflow test Int8 - UInt32 overflow test Int8 - UInt32 - overflow test Int8 - UInt128 overflow test Int8 - UInt128 - overflow test Int32 - Int32 overflow test Int32 - Int32 - overflow test UInt8 - Int32 overflow test UInt8 - Int32 - overflow test UInt16 - UInt32 overflow test UInt16 - UInt32 - overflow test UInt64 - UInt32 overflow test UInt64 - UInt32 - overflow test UInt16 - Int64 overflow test UInt16 - Int64 - overflow test UInt32 - UInt16 overflow test UInt32 - UInt16 - overflow test UInt64 - Int8 overflow test UInt64 - Int8 - overflow test UInt32 - UInt64 overflow test UInt32 - UInt64 - overflow test UInt16 - Int128 overflow test UInt16 - Int128 - overflow test Int8 - Int8 overflow test Int8 - Int8 - overflow test Int64 - Int128 overflow test Int64 - Int128 - overflow test Int32 - Int64 overflow test Int32 - Int64 - overflow test UInt32 - Int128 overflow test UInt32 - Int128 - overflow test UInt16 - UInt128 overflow test UInt16 - UInt128 - overflow test Int16 - Int32 overflow test Int16 - Int32 - overflow test Int64 - Int8 overflow test Int64 - Int8 - overflow test UInt32 - UInt32 overflow test UInt32 - UInt32 - overflow test UInt16 - UInt64 overflow test UInt16 - UInt64 - overflow test UInt128 - UInt8 overflow test UInt128 - UInt8 - overflow test Int16 - UInt32 overflow test Int16 - UInt32 - overflow test Int64 - Int32 overflow test Int64 - Int32 - overflow test UInt32 - UInt8 overflow test UInt32 - UInt8 - overflow test Int16 - UInt64 overflow test Int16 - UInt64 - overflow test Int16 - UInt8 overflow test Int16 - UInt8 - overflow test UInt8 - Int8 overflow test UInt8 - Int8 - overflow test Int32 - Int8 overflow test Int32 - Int8 - overflow test UInt64 - UInt64 overflow test UInt64 - UInt64 - overflow test UInt32 - UInt128 overflow test UInt32 - UInt128 - overflow test Int8 - UInt8 overflow test Int8 - UInt8 - overflow test Int16 - UInt128 overflow test Int16 - UInt128 - overflow test UInt32 - Int64 overflow test UInt32 - Int64 - overflow test Int128 - UInt128 overflow test Int128 - UInt128 - overflow test Int32 - UInt8 overflow test Int32 - UInt8 - overflow test UInt64 - Int128 overflow test UInt64 - Int128 - overflow test Int32 - UInt64 overflow test Int32 - UInt64 - overflow test Int128 - UInt32 overflow test Int128 - UInt32 - overflow test UInt32 - Int32 overflow test UInt32 - Int32 - overflow test Int8 - Int128 overflow test Int8 - Int128 - overflow test Int128 - UInt8 overflow test Int128 - UInt8 - overflow test Int64 - UInt32 overflow test Int64 - UInt32 - overflow test UInt128 - Int64 overflow test UInt128 - Int64 - overflow test UInt8 - UInt128 overflow test UInt8 - UInt128 - overflow test Int64 - Int16 overflow test Int64 - Int16 - overflow test Int128 - Int128 overflow test Int128 - Int128 - overflow test UInt128 - UInt16 overflow test UInt128 - UInt16 - overflow test Int16 - Int8 overflow test Int16 - Int8 - overflow test UInt128 - Int32 overflow test UInt128 - Int32 - overflow test Int32 - Int16 overflow test Int32 - Int16 - overflow test UInt32 - Int8 overflow test UInt32 - Int8 - overflow test UInt64 - Int32 overflow test UInt64 - Int32 - overflow test UInt8 - Int64 overflow test UInt8 - Int64 - overflow test Int16 - Int16 overflow test Int16 - Int16 - overflow test UInt8 - UInt32 overflow test UInt8 - UInt32 - overflow test Int32 - UInt16 overflow test Int32 - UInt16 - overflow test Int64 - UInt8 overflow test Int64 - UInt8 - overflow test UInt64 - UInt128 overflow test UInt64 - UInt128 - overflow test Int64 - UInt128 overflow test Int64 - UInt128 - overflow test Int16 - UInt16 overflow test Int16 - UInt16 - overflow test UInt64 - Int64 overflow test UInt64 - Int64 - overflow test UInt64 - UInt8 overflow test UInt64 - UInt8 - overflow test UInt128 - Int128 overflow test UInt128 - Int128 - overflow test Int128 - Int64 overflow test Int128 - Int64 - overflow test Int8 - Int16 overflow test Int8 - Int16 - overflow test UInt16 - Int32 overflow test UInt16 - Int32 - overflow test UInt8 - UInt16 overflow test UInt8 - UInt16 - overflow test Int16 - Int128 overflow test Int16 - Int128 - overflow test UInt128 - UInt64 overflow test UInt128 - UInt64 - overflow test UInt64 - UInt16 overflow test UInt64 - UInt16 - overflow test UInt128 - UInt32 overflow test UInt128 - UInt32 - overflow test Int64 - UInt16 overflow test Int64 - UInt16 - overflow test Int128 - Int32 overflow test Int128 - Int32 - overflow test Int128 - Int16 overflow test Int128 - Int16 - overflow test UInt64 - Int16 overflow test UInt64 - Int16 -Primitives: pointer - .malloc - is non-atomic for ReferenceStorage(T) if T is non-atomic (#14692) is non-atomic for ReferenceStorage(T) if T is non-atomic (#14692) -Primitives: reference - .unsafe_construct - constructs an object in-place constructs an object in-place - .pre_initialize - works when address is on the stack works when address is on the stack - works with virtual type works with virtual type - raises on abstract virtual type raises on abstract virtual type - zeroes the instance data zeroes the instance data - sets type ID sets type ID - doesn't fail on complex ivar initializer if value is discarded (#14325) doesn't fail on complex ivar initializer if value is discarded (#14325) - runs inline instance initializers runs inline instance initializers - .allocate - doesn't fail on complex ivar initializer if value is discarded (#14325) doesn't fail on complex ivar initializer if value is discarded (#14325) + overflow test UInt16 + Int64 overflow test UInt16 + Int64 + overflow test Int128 + Int32 overflow test Int128 + Int32 + overflow test Int8 + Int8 overflow test Int8 + Int8 + overflow test Int8 + UInt128 overflow test Int8 + UInt128 + overflow test UInt128 + UInt32 overflow test UInt128 + UInt32 + overflow test UInt32 + UInt64 overflow test UInt32 + UInt64 + overflow test UInt128 + Int32 overflow test UInt128 + Int32 + overflow test Int64 + UInt128 overflow test Int64 + UInt128 + overflow test Int32 + Int64 overflow test Int32 + Int64 + overflow test UInt8 + Int8 overflow test UInt8 + Int8 + overflow test UInt8 + UInt8 overflow test UInt8 + UInt8 + overflow test Int64 + UInt8 overflow test Int64 + UInt8 + overflow test UInt128 + Int128 overflow test UInt128 + Int128 Primitives: Float - #to_f - doesn't raise for NaN doesn't raise for NaN - doesn't raise for infinity doesn't raise for infinity - raises on overflow for Float64#to_f32 raises on overflow for Float64#to_f32 - #!= - returns true for Float64::NAN != Float64.zero returns true for Float64::NAN != Float64.zero - returns true for Float32::NAN != Float64.zero returns true for Float32::NAN != Float64.zero - returns true for Float32::NAN != Int64.zero returns true for Float32::NAN != Int64.zero - returns true for Float64::NAN != Int128.zero returns true for Float64::NAN != Int128.zero - returns true for Float64::NAN != UInt8.zero returns true for Float64::NAN != UInt8.zero - returns true for Float64::NAN != UInt32.zero returns true for Float64::NAN != UInt32.zero - returns true for Float32::NAN != UInt16.zero returns true for Float32::NAN != UInt16.zero - returns true for Float64::NAN != UInt128.zero returns true for Float64::NAN != UInt128.zero - returns true for Float64::NAN != Float32::NAN returns true for Float64::NAN != Float32::NAN - returns true for Float64::NAN != Float32.zero returns true for Float64::NAN != Float32.zero - returns true for Float32::NAN != UInt64.zero returns true for Float32::NAN != UInt64.zero - returns true for Float64::NAN != UInt64.zero returns true for Float64::NAN != UInt64.zero - returns true for Float64::NAN != UInt16.zero returns true for Float64::NAN != UInt16.zero - returns true for Float32::NAN != Int8.zero returns true for Float32::NAN != Int8.zero - returns true for Float32::NAN != Int16.zero returns true for Float32::NAN != Int16.zero - returns true for Float32::NAN != Float32::NAN returns true for Float32::NAN != Float32::NAN - returns true for Float64::NAN != Int64.zero returns true for Float64::NAN != Int64.zero - returns true for Float32::NAN != UInt32.zero returns true for Float32::NAN != UInt32.zero - returns true for Float32::NAN != UInt8.zero returns true for Float32::NAN != UInt8.zero - returns true for Float64::NAN != Int8.zero returns true for Float64::NAN != Int8.zero - returns true for Float32::NAN != Float32.zero returns true for Float32::NAN != Float32.zero - returns true for Float32::NAN != UInt128.zero returns true for Float32::NAN != UInt128.zero - returns true for Float64::NAN != Int32.zero returns true for Float64::NAN != Int32.zero - returns true for Float64::NAN != Int16.zero returns true for Float64::NAN != Int16.zero - returns true for Float32::NAN != Int32.zero returns true for Float32::NAN != Int32.zero - returns true for Float32::NAN != Float64::NAN returns true for Float32::NAN != Float64::NAN - returns true for Float64::NAN != Float64::NAN returns true for Float64::NAN != Float64::NAN - returns true for Float32::NAN != Int128.zero returns true for Float32::NAN != Int128.zero - #== - returns false for Float64::NAN == Float32.zero returns false for Float64::NAN == Float32.zero - returns false for Float32::NAN == Int128.zero returns false for Float32::NAN == Int128.zero - returns false for Float32::NAN == Float32::NAN returns false for Float32::NAN == Float32::NAN - returns false for Float32::NAN == Float64::NAN returns false for Float32::NAN == Float64::NAN - returns false for Float32::NAN == UInt32.zero returns false for Float32::NAN == UInt32.zero - returns false for Float32::NAN == UInt64.zero returns false for Float32::NAN == UInt64.zero - returns false for Float32::NAN == UInt16.zero returns false for Float32::NAN == UInt16.zero - returns false for Float32::NAN == Float32.zero returns false for Float32::NAN == Float32.zero - returns false for Float64::NAN == Int16.zero returns false for Float64::NAN == Int16.zero - returns false for Float32::NAN == Int64.zero returns false for Float32::NAN == Int64.zero - returns false for Float64::NAN == Float64.zero returns false for Float64::NAN == Float64.zero - returns false for Float32::NAN == Int8.zero returns false for Float32::NAN == Int8.zero - returns false for Float64::NAN == UInt32.zero returns false for Float64::NAN == UInt32.zero - returns false for Float64::NAN == Float32::NAN returns false for Float64::NAN == Float32::NAN - returns false for Float32::NAN == Float64.zero returns false for Float32::NAN == Float64.zero - returns false for Float64::NAN == Float64::NAN returns false for Float64::NAN == Float64::NAN - returns false for Float64::NAN == UInt64.zero returns false for Float64::NAN == UInt64.zero - returns false for Float32::NAN == UInt128.zero returns false for Float32::NAN == UInt128.zero - returns false for Float32::NAN == UInt8.zero returns false for Float32::NAN == UInt8.zero - returns false for Float64::NAN == UInt16.zero returns false for Float64::NAN == UInt16.zero - returns false for Float32::NAN == Int16.zero returns false for Float32::NAN == Int16.zero - returns false for Float64::NAN == Int32.zero returns false for Float64::NAN == Int32.zero - returns false for Float64::NAN == UInt128.zero returns false for Float64::NAN == UInt128.zero - returns false for Float64::NAN == UInt8.zero returns false for Float64::NAN == UInt8.zero - returns false for Float64::NAN == Int8.zero returns false for Float64::NAN == Int8.zero - returns false for Float64::NAN == Int128.zero returns false for Float64::NAN == Int128.zero - returns false for Float64::NAN == Int64.zero returns false for Float64::NAN == Int64.zero - returns false for Float32::NAN == Int32.zero returns false for Float32::NAN == Int32.zero #> - returns false for Float64::NAN > UInt64.zero returns false for Float64::NAN > UInt64.zero - returns false for Float64::NAN > UInt128.zero returns false for Float64::NAN > UInt128.zero - returns false for Float64::NAN > Int16.zero returns false for Float64::NAN > Int16.zero + returns false for Float64::NAN > Float64::NAN returns false for Float64::NAN > Float64::NAN + returns false for Float32::NAN > UInt16.zero returns false for Float32::NAN > UInt16.zero returns false for Float32::NAN > Int8.zero returns false for Float32::NAN > Int8.zero + returns false for Float64::NAN > Int32.zero returns false for Float64::NAN > Int32.zero returns false for Float32::NAN > Int32.zero returns false for Float32::NAN > Int32.zero - returns false for Float32::NAN > Int64.zero returns false for Float32::NAN > Int64.zero - returns false for Float32::NAN > Int128.zero returns false for Float32::NAN > Int128.zero - returns false for Float32::NAN > Int16.zero returns false for Float32::NAN > Int16.zero - returns false for Float32::NAN > UInt128.zero returns false for Float32::NAN > UInt128.zero + returns false for Float32::NAN > Float64.zero returns false for Float32::NAN > Float64.zero + returns false for Float64::NAN > Int8.zero returns false for Float64::NAN > Int8.zero returns false for Float64::NAN > Int64.zero returns false for Float64::NAN > Int64.zero - returns false for Float64::NAN > Float64.zero returns false for Float64::NAN > Float64.zero + returns false for Float32::NAN > UInt128.zero returns false for Float32::NAN > UInt128.zero returns false for Float32::NAN > Float32.zero returns false for Float32::NAN > Float32.zero - returns false for Float64::NAN > Float32.zero returns false for Float64::NAN > Float32.zero - returns false for Float32::NAN > Float32::NAN returns false for Float32::NAN > Float32::NAN - returns false for Float32::NAN > UInt32.zero returns false for Float32::NAN > UInt32.zero - returns false for Float64::NAN > Float64::NAN returns false for Float64::NAN > Float64::NAN - returns false for Float64::NAN > Int32.zero returns false for Float64::NAN > Int32.zero - returns false for Float32::NAN > UInt16.zero returns false for Float32::NAN > UInt16.zero - returns false for Float32::NAN > UInt64.zero returns false for Float32::NAN > UInt64.zero + returns false for Float64::NAN > Int16.zero returns false for Float64::NAN > Int16.zero returns false for Float64::NAN > UInt32.zero returns false for Float64::NAN > UInt32.zero - returns false for Float64::NAN > Int8.zero returns false for Float64::NAN > Int8.zero - returns false for Float32::NAN > Float64::NAN returns false for Float32::NAN > Float64::NAN - returns false for Float64::NAN > UInt16.zero returns false for Float64::NAN > UInt16.zero + returns false for Float64::NAN > UInt128.zero returns false for Float64::NAN > UInt128.zero returns false for Float32::NAN > UInt8.zero returns false for Float32::NAN > UInt8.zero + returns false for Float32::NAN > Int16.zero returns false for Float32::NAN > Int16.zero + returns false for Float32::NAN > Float32::NAN returns false for Float32::NAN > Float32::NAN + returns false for Float64::NAN > UInt64.zero returns false for Float64::NAN > UInt64.zero + returns false for Float64::NAN > Float32.zero returns false for Float64::NAN > Float32.zero + returns false for Float32::NAN > Float64::NAN returns false for Float32::NAN > Float64::NAN + returns false for Float32::NAN > Int64.zero returns false for Float32::NAN > Int64.zero + returns false for Float64::NAN > Float64.zero returns false for Float64::NAN > Float64.zero + returns false for Float32::NAN > UInt64.zero returns false for Float32::NAN > UInt64.zero returns false for Float64::NAN > UInt8.zero returns false for Float64::NAN > UInt8.zero + returns false for Float64::NAN > UInt16.zero returns false for Float64::NAN > UInt16.zero returns false for Float64::NAN > Int128.zero returns false for Float64::NAN > Int128.zero - returns false for Float32::NAN > Float64.zero returns false for Float32::NAN > Float64.zero returns false for Float64::NAN > Float32::NAN returns false for Float64::NAN > Float32::NAN + returns false for Float32::NAN > Int128.zero returns false for Float32::NAN > Int128.zero + returns false for Float32::NAN > UInt32.zero returns false for Float32::NAN > UInt32.zero + #!= + returns true for Float32::NAN != Int128.zero returns true for Float32::NAN != Int128.zero + returns true for Float32::NAN != Float32::NAN returns true for Float32::NAN != Float32::NAN + returns true for Float64::NAN != Int128.zero returns true for Float64::NAN != Int128.zero + returns true for Float64::NAN != Float64::NAN returns true for Float64::NAN != Float64::NAN + returns true for Float64::NAN != Int16.zero returns true for Float64::NAN != Int16.zero + returns true for Float64::NAN != Int64.zero returns true for Float64::NAN != Int64.zero + returns true for Float32::NAN != Int64.zero returns true for Float32::NAN != Int64.zero + returns true for Float32::NAN != UInt128.zero returns true for Float32::NAN != UInt128.zero + returns true for Float64::NAN != Float32::NAN returns true for Float64::NAN != Float32::NAN + returns true for Float64::NAN != Float64.zero returns true for Float64::NAN != Float64.zero + returns true for Float64::NAN != UInt8.zero returns true for Float64::NAN != UInt8.zero + returns true for Float32::NAN != Int32.zero returns true for Float32::NAN != Int32.zero + returns true for Float64::NAN != UInt64.zero returns true for Float64::NAN != UInt64.zero + returns true for Float64::NAN != UInt16.zero returns true for Float64::NAN != UInt16.zero + returns true for Float64::NAN != Float32.zero returns true for Float64::NAN != Float32.zero + returns true for Float32::NAN != Int16.zero returns true for Float32::NAN != Int16.zero + returns true for Float32::NAN != UInt16.zero returns true for Float32::NAN != UInt16.zero + returns true for Float64::NAN != Int32.zero returns true for Float64::NAN != Int32.zero + returns true for Float32::NAN != Float64::NAN returns true for Float32::NAN != Float64::NAN + returns true for Float64::NAN != UInt32.zero returns true for Float64::NAN != UInt32.zero + returns true for Float64::NAN != UInt128.zero returns true for Float64::NAN != UInt128.zero + returns true for Float32::NAN != UInt8.zero returns true for Float32::NAN != UInt8.zero + returns true for Float32::NAN != Float64.zero returns true for Float32::NAN != Float64.zero + returns true for Float64::NAN != Int8.zero returns true for Float64::NAN != Int8.zero + returns true for Float32::NAN != Int8.zero returns true for Float32::NAN != Int8.zero + returns true for Float32::NAN != UInt32.zero returns true for Float32::NAN != UInt32.zero + returns true for Float32::NAN != UInt64.zero returns true for Float32::NAN != UInt64.zero + returns true for Float32::NAN != Float32.zero returns true for Float32::NAN != Float32.zero + #<= + returns false for Float32::NAN <= UInt64.zero returns false for Float32::NAN <= UInt64.zero + returns false for Float64::NAN <= UInt128.zero returns false for Float64::NAN <= UInt128.zero + returns false for Float32::NAN <= UInt16.zero returns false for Float32::NAN <= UInt16.zero + returns false for Float32::NAN <= Float32.zero returns false for Float32::NAN <= Float32.zero + returns false for Float64::NAN <= Int64.zero returns false for Float64::NAN <= Int64.zero + returns false for Float32::NAN <= Float32::NAN returns false for Float32::NAN <= Float32::NAN + returns false for Float32::NAN <= Int8.zero returns false for Float32::NAN <= Int8.zero + returns false for Float32::NAN <= UInt8.zero returns false for Float32::NAN <= UInt8.zero + returns false for Float64::NAN <= Int16.zero returns false for Float64::NAN <= Int16.zero + returns false for Float64::NAN <= Int128.zero returns false for Float64::NAN <= Int128.zero + returns false for Float64::NAN <= Int32.zero returns false for Float64::NAN <= Int32.zero + returns false for Float64::NAN <= Float32.zero returns false for Float64::NAN <= Float32.zero + returns false for Float64::NAN <= UInt16.zero returns false for Float64::NAN <= UInt16.zero + returns false for Float64::NAN <= Float64.zero returns false for Float64::NAN <= Float64.zero + returns false for Float32::NAN <= Int32.zero returns false for Float32::NAN <= Int32.zero + returns false for Float32::NAN <= Int128.zero returns false for Float32::NAN <= Int128.zero + returns false for Float32::NAN <= Int64.zero returns false for Float32::NAN <= Int64.zero + returns false for Float64::NAN <= UInt8.zero returns false for Float64::NAN <= UInt8.zero + returns false for Float64::NAN <= UInt64.zero returns false for Float64::NAN <= UInt64.zero + returns false for Float64::NAN <= Int8.zero returns false for Float64::NAN <= Int8.zero + returns false for Float64::NAN <= Float64::NAN returns false for Float64::NAN <= Float64::NAN + returns false for Float32::NAN <= Int16.zero returns false for Float32::NAN <= Int16.zero + returns false for Float32::NAN <= UInt32.zero returns false for Float32::NAN <= UInt32.zero + returns false for Float32::NAN <= UInt128.zero returns false for Float32::NAN <= UInt128.zero + returns false for Float64::NAN <= Float32::NAN returns false for Float64::NAN <= Float32::NAN + returns false for Float64::NAN <= UInt32.zero returns false for Float64::NAN <= UInt32.zero + returns false for Float32::NAN <= Float64.zero returns false for Float32::NAN <= Float64.zero + returns false for Float32::NAN <= Float64::NAN returns false for Float32::NAN <= Float64::NAN + #< + returns false for Float64::NAN < Int128.zero returns false for Float64::NAN < Int128.zero + returns false for Float64::NAN < Float32.zero returns false for Float64::NAN < Float32.zero + returns false for Float32::NAN < Int32.zero returns false for Float32::NAN < Int32.zero + returns false for Float32::NAN < Int8.zero returns false for Float32::NAN < Int8.zero + returns false for Float32::NAN < UInt64.zero returns false for Float32::NAN < UInt64.zero + returns false for Float32::NAN < UInt128.zero returns false for Float32::NAN < UInt128.zero + returns false for Float64::NAN < Int8.zero returns false for Float64::NAN < Int8.zero + returns false for Float32::NAN < Float64.zero returns false for Float32::NAN < Float64.zero + returns false for Float32::NAN < UInt8.zero returns false for Float32::NAN < UInt8.zero + returns false for Float32::NAN < Float32::NAN returns false for Float32::NAN < Float32::NAN + returns false for Float64::NAN < UInt128.zero returns false for Float64::NAN < UInt128.zero + returns false for Float64::NAN < UInt8.zero returns false for Float64::NAN < UInt8.zero + returns false for Float32::NAN < Int128.zero returns false for Float32::NAN < Int128.zero + returns false for Float32::NAN < Float64::NAN returns false for Float32::NAN < Float64::NAN + returns false for Float64::NAN < UInt32.zero returns false for Float64::NAN < UInt32.zero + returns false for Float64::NAN < UInt16.zero returns false for Float64::NAN < UInt16.zero + returns false for Float64::NAN < Float64.zero returns false for Float64::NAN < Float64.zero + returns false for Float64::NAN < Int32.zero returns false for Float64::NAN < Int32.zero + returns false for Float64::NAN < UInt64.zero returns false for Float64::NAN < UInt64.zero + returns false for Float32::NAN < Int64.zero returns false for Float32::NAN < Int64.zero + returns false for Float32::NAN < Int16.zero returns false for Float32::NAN < Int16.zero + returns false for Float32::NAN < UInt16.zero returns false for Float32::NAN < UInt16.zero + returns false for Float32::NAN < UInt32.zero returns false for Float32::NAN < UInt32.zero + returns false for Float64::NAN < Int16.zero returns false for Float64::NAN < Int16.zero + returns false for Float64::NAN < Float32::NAN returns false for Float64::NAN < Float32::NAN + returns false for Float64::NAN < Int64.zero returns false for Float64::NAN < Int64.zero + returns false for Float32::NAN < Float32.zero returns false for Float32::NAN < Float32.zero + returns false for Float64::NAN < Float64::NAN returns false for Float64::NAN < Float64::NAN #to_i raises overflow if not a number (#10421) raises overflow if not a number (#10421) - raises on overflow for Float64#to_i32 raises on overflow for Float64#to_i32 + raises on overflow for Float64#to_i16 raises on overflow for Float64#to_i16 + raises on overflow for Float64#to_i raises on overflow for Float64#to_i + raises on overflow for Float32#to_i64 raises on overflow for Float32#to_i64 raises overflow if not a number (#10421) raises overflow if not a number (#10421) raises overflow if not a number (#10421) raises overflow if not a number (#10421) raises overflow if not a number (#10421) raises overflow if not a number (#10421) raises overflow if not a number (#10421) raises overflow if not a number (#10421) - raises on overflow for Float64#to_i16 raises on overflow for Float64#to_i16 - raises on overflow for Float32#to_u32 raises on overflow for Float32#to_u32 - raises on overflow for Float32#to_i32 raises on overflow for Float32#to_i32 - raises overflow if equal to Int::MAX (#11105) raises overflow if equal to Int::MAX (#11105) raises overflow if not a number (#10421) raises overflow if not a number (#10421) + raises on overflow for Float32#to_i8 raises on overflow for Float32#to_i8 + raises on overflow for Float64#to_i64 raises on overflow for Float64#to_i64 raises overflow if not a number (#10421) raises overflow if not a number (#10421) - raises on overflow for Float64#to_u32 raises on overflow for Float64#to_u32 raises overflow if not a number (#10421) raises overflow if not a number (#10421) raises overflow if not a number (#10421) raises overflow if not a number (#10421) - raises on overflow for Float32#to_u128 raises on overflow for Float32#to_u128 - raises on overflow for Float64#to_u16 raises on overflow for Float64#to_u16 - raises on overflow for Float32#to_i128 raises on overflow for Float32#to_i128 + raises on overflow for Float64#to_i8 raises on overflow for Float64#to_i8 raises overflow if not a number (#10421) raises overflow if not a number (#10421) - raises on overflow for Float64#to_i128 raises on overflow for Float64#to_i128 - raises on overflow for Float64#to_u128 raises on overflow for Float64#to_u128 raises overflow if not a number (#10421) raises overflow if not a number (#10421) - raises on overflow for Float64#to_i raises on overflow for Float64#to_i - raises on overflow for Float64#to_i8 raises on overflow for Float64#to_i8 + raises on overflow for Float32#to_u8 raises on overflow for Float32#to_u8 + raises overflow if equal to Int::MAX (#11105) raises overflow if equal to Int::MAX (#11105) + raises on overflow for Float32#to_i128 raises on overflow for Float32#to_i128 raises overflow if not a number (#10421) raises overflow if not a number (#10421) + raises on overflow for Float64#to_u32 raises on overflow for Float64#to_u32 + raises on overflow for Float32#to_i16 raises on overflow for Float32#to_i16 + raises on overflow for Float64#to_u16 raises on overflow for Float64#to_u16 raises overflow if not a number (#10421) raises overflow if not a number (#10421) raises overflow if not a number (#10421) raises overflow if not a number (#10421) + raises on overflow for Float32#to_i raises on overflow for Float32#to_i + raises on overflow for Float32#to_u64 raises on overflow for Float32#to_u64 + raises on overflow for Float64#to_u8 raises on overflow for Float64#to_u8 + raises on overflow for Float32#to_u32 raises on overflow for Float32#to_u32 raises overflow if not a number (#10421) raises overflow if not a number (#10421) - raises on overflow for Float32#to_u8 raises on overflow for Float32#to_u8 + raises on overflow for Float64#to_u64 raises on overflow for Float64#to_u64 + raises overflow if not a number (#10421) raises overflow if not a number (#10421) + raises on overflow for Float64#to_i32 raises on overflow for Float64#to_i32 raises overflow if not a number (#10421) raises overflow if not a number (#10421) raises overflow if not a number (#10421) raises overflow if not a number (#10421) raises overflow if not a number (#10421) raises overflow if not a number (#10421) - raises on overflow for Float64#to_u raises on overflow for Float64#to_u raises on overflow for Float32#to_u raises on overflow for Float32#to_u - raises on overflow for Float32#to_i16 raises on overflow for Float32#to_i16 + raises on overflow for Float64#to_i128 raises on overflow for Float64#to_i128 + raises on overflow for Float32#to_u128 raises on overflow for Float32#to_u128 raises overflow if not a number (#10421) raises overflow if not a number (#10421) + doesn't raise overflow if lower than Int::MAX (#11105) doesn't raise overflow if lower than Int::MAX (#11105) raises on overflow for Float32#to_u16 raises on overflow for Float32#to_u16 - raises on overflow for Float32#to_i64 raises on overflow for Float32#to_i64 - raises overflow if not a number (#10421) raises overflow if not a number (#10421) - raises on overflow for Float32#to_u64 raises on overflow for Float32#to_u64 - raises on overflow for Float64#to_u64 raises on overflow for Float64#to_u64 - raises on overflow for Float32#to_i raises on overflow for Float32#to_i - raises on overflow for Float64#to_u8 raises on overflow for Float64#to_u8 - raises on overflow for Float32#to_i8 raises on overflow for Float32#to_i8 raises overflow if not a number (#10421) raises overflow if not a number (#10421) - raises on overflow for Float64#to_i64 raises on overflow for Float64#to_i64 raises overflow if not a number (#10421) raises overflow if not a number (#10421) + raises on overflow for Float64#to_u raises on overflow for Float64#to_u + raises on overflow for Float32#to_i32 raises on overflow for Float32#to_i32 raises overflow if not a number (#10421) raises overflow if not a number (#10421) raises overflow if not a number (#10421) raises overflow if not a number (#10421) - doesn't raise overflow if lower than Int::MAX (#11105) doesn't raise overflow if lower than Int::MAX (#11105) - #< - returns false for Float32::NAN < Int8.zero returns false for Float32::NAN < Int8.zero - returns false for Float32::NAN < Int32.zero returns false for Float32::NAN < Int32.zero - returns false for Float32::NAN < UInt128.zero returns false for Float32::NAN < UInt128.zero - returns false for Float32::NAN < Int64.zero returns false for Float32::NAN < Int64.zero - returns false for Float32::NAN < Float32::NAN returns false for Float32::NAN < Float32::NAN - returns false for Float32::NAN < Float64::NAN returns false for Float32::NAN < Float64::NAN - returns false for Float64::NAN < Int8.zero returns false for Float64::NAN < Int8.zero - returns false for Float64::NAN < UInt16.zero returns false for Float64::NAN < UInt16.zero - returns false for Float64::NAN < Float64.zero returns false for Float64::NAN < Float64.zero - returns false for Float32::NAN < Float32.zero returns false for Float32::NAN < Float32.zero - returns false for Float32::NAN < UInt8.zero returns false for Float32::NAN < UInt8.zero - returns false for Float64::NAN < Int16.zero returns false for Float64::NAN < Int16.zero - returns false for Float64::NAN < UInt32.zero returns false for Float64::NAN < UInt32.zero - returns false for Float64::NAN < UInt64.zero returns false for Float64::NAN < UInt64.zero - returns false for Float64::NAN < Int32.zero returns false for Float64::NAN < Int32.zero - returns false for Float64::NAN < Float64::NAN returns false for Float64::NAN < Float64::NAN - returns false for Float64::NAN < Float32.zero returns false for Float64::NAN < Float32.zero - returns false for Float32::NAN < UInt16.zero returns false for Float32::NAN < UInt16.zero - returns false for Float64::NAN < UInt128.zero returns false for Float64::NAN < UInt128.zero - returns false for Float64::NAN < UInt8.zero returns false for Float64::NAN < UInt8.zero - returns false for Float32::NAN < Int128.zero returns false for Float32::NAN < Int128.zero - returns false for Float32::NAN < Int16.zero returns false for Float32::NAN < Int16.zero - returns false for Float32::NAN < UInt64.zero returns false for Float32::NAN < UInt64.zero - returns false for Float32::NAN < UInt32.zero returns false for Float32::NAN < UInt32.zero - returns false for Float64::NAN < Float32::NAN returns false for Float64::NAN < Float32::NAN - returns false for Float64::NAN < Int128.zero returns false for Float64::NAN < Int128.zero - returns false for Float64::NAN < Int64.zero returns false for Float64::NAN < Int64.zero - returns false for Float32::NAN < Float64.zero returns false for Float32::NAN < Float64.zero + raises on overflow for Float64#to_u128 raises on overflow for Float64#to_u128 #>= - returns false for Float64::NAN >= Int8.zero returns false for Float64::NAN >= Int8.zero - returns false for Float32::NAN >= UInt16.zero returns false for Float32::NAN >= UInt16.zero - returns false for Float32::NAN >= Int32.zero returns false for Float32::NAN >= Int32.zero - returns false for Float64::NAN >= UInt8.zero returns false for Float64::NAN >= UInt8.zero - returns false for Float32::NAN >= UInt32.zero returns false for Float32::NAN >= UInt32.zero - returns false for Float64::NAN >= Int16.zero returns false for Float64::NAN >= Int16.zero - returns false for Float64::NAN >= Int64.zero returns false for Float64::NAN >= Int64.zero + returns false for Float64::NAN >= Int32.zero returns false for Float64::NAN >= Int32.zero + returns false for Float64::NAN >= UInt64.zero returns false for Float64::NAN >= UInt64.zero + returns false for Float32::NAN >= Int16.zero returns false for Float32::NAN >= Int16.zero returns false for Float64::NAN >= Float32::NAN returns false for Float64::NAN >= Float32::NAN returns false for Float64::NAN >= UInt32.zero returns false for Float64::NAN >= UInt32.zero - returns false for Float64::NAN >= Float64.zero returns false for Float64::NAN >= Float64.zero - returns false for Float32::NAN >= Float32.zero returns false for Float32::NAN >= Float32.zero - returns false for Float64::NAN >= Float32.zero returns false for Float64::NAN >= Float32.zero - returns false for Float32::NAN >= Float64.zero returns false for Float32::NAN >= Float64.zero + returns false for Float64::NAN >= UInt16.zero returns false for Float64::NAN >= UInt16.zero returns false for Float32::NAN >= UInt64.zero returns false for Float32::NAN >= UInt64.zero - returns false for Float32::NAN >= Int16.zero returns false for Float32::NAN >= Int16.zero + returns false for Float64::NAN >= Int64.zero returns false for Float64::NAN >= Int64.zero returns false for Float32::NAN >= Float64::NAN returns false for Float32::NAN >= Float64::NAN returns false for Float32::NAN >= UInt128.zero returns false for Float32::NAN >= UInt128.zero + returns false for Float32::NAN >= Int32.zero returns false for Float32::NAN >= Int32.zero + returns false for Float32::NAN >= Float32.zero returns false for Float32::NAN >= Float32.zero + returns false for Float32::NAN >= Int8.zero returns false for Float32::NAN >= Int8.zero + returns false for Float64::NAN >= Int16.zero returns false for Float64::NAN >= Int16.zero + returns false for Float64::NAN >= Int8.zero returns false for Float64::NAN >= Int8.zero + returns false for Float32::NAN >= Float64.zero returns false for Float32::NAN >= Float64.zero + returns false for Float64::NAN >= Float32.zero returns false for Float64::NAN >= Float32.zero + returns false for Float32::NAN >= Float32::NAN returns false for Float32::NAN >= Float32::NAN + returns false for Float64::NAN >= UInt8.zero returns false for Float64::NAN >= UInt8.zero returns false for Float32::NAN >= Int64.zero returns false for Float32::NAN >= Int64.zero - returns false for Float64::NAN >= Float64::NAN returns false for Float64::NAN >= Float64::NAN returns false for Float32::NAN >= UInt8.zero returns false for Float32::NAN >= UInt8.zero + returns false for Float64::NAN >= Float64::NAN returns false for Float64::NAN >= Float64::NAN + returns false for Float64::NAN >= Float64.zero returns false for Float64::NAN >= Float64.zero returns false for Float32::NAN >= Int128.zero returns false for Float32::NAN >= Int128.zero - returns false for Float32::NAN >= Float32::NAN returns false for Float32::NAN >= Float32::NAN - returns false for Float64::NAN >= Int128.zero returns false for Float64::NAN >= Int128.zero - returns false for Float64::NAN >= Int32.zero returns false for Float64::NAN >= Int32.zero - returns false for Float64::NAN >= UInt16.zero returns false for Float64::NAN >= UInt16.zero returns false for Float64::NAN >= UInt128.zero returns false for Float64::NAN >= UInt128.zero - returns false for Float32::NAN >= Int8.zero returns false for Float32::NAN >= Int8.zero - returns false for Float64::NAN >= UInt64.zero returns false for Float64::NAN >= UInt64.zero - #<= - returns false for Float32::NAN <= Int64.zero returns false for Float32::NAN <= Int64.zero - returns false for Float64::NAN <= Float64::NAN returns false for Float64::NAN <= Float64::NAN - returns false for Float32::NAN <= Float64::NAN returns false for Float32::NAN <= Float64::NAN - returns false for Float64::NAN <= Int8.zero returns false for Float64::NAN <= Int8.zero - returns false for Float64::NAN <= UInt128.zero returns false for Float64::NAN <= UInt128.zero - returns false for Float32::NAN <= Int16.zero returns false for Float32::NAN <= Int16.zero - returns false for Float64::NAN <= Int64.zero returns false for Float64::NAN <= Int64.zero - returns false for Float64::NAN <= Int128.zero returns false for Float64::NAN <= Int128.zero - returns false for Float64::NAN <= UInt64.zero returns false for Float64::NAN <= UInt64.zero - returns false for Float64::NAN <= UInt8.zero returns false for Float64::NAN <= UInt8.zero - returns false for Float64::NAN <= UInt16.zero returns false for Float64::NAN <= UInt16.zero - returns false for Float64::NAN <= Float32.zero returns false for Float64::NAN <= Float32.zero - returns false for Float32::NAN <= UInt64.zero returns false for Float32::NAN <= UInt64.zero - returns false for Float64::NAN <= UInt32.zero returns false for Float64::NAN <= UInt32.zero - returns false for Float32::NAN <= UInt8.zero returns false for Float32::NAN <= UInt8.zero - returns false for Float32::NAN <= UInt128.zero returns false for Float32::NAN <= UInt128.zero - returns false for Float64::NAN <= Int16.zero returns false for Float64::NAN <= Int16.zero - returns false for Float64::NAN <= Float64.zero returns false for Float64::NAN <= Float64.zero - returns false for Float32::NAN <= Int8.zero returns false for Float32::NAN <= Int8.zero - returns false for Float64::NAN <= Int32.zero returns false for Float64::NAN <= Int32.zero - returns false for Float32::NAN <= Float64.zero returns false for Float32::NAN <= Float64.zero - returns false for Float32::NAN <= Int128.zero returns false for Float32::NAN <= Int128.zero - returns false for Float32::NAN <= Int32.zero returns false for Float32::NAN <= Int32.zero - returns false for Float32::NAN <= Float32::NAN returns false for Float32::NAN <= Float32::NAN - returns false for Float32::NAN <= Float32.zero returns false for Float32::NAN <= Float32.zero - returns false for Float32::NAN <= UInt32.zero returns false for Float32::NAN <= UInt32.zero - returns false for Float64::NAN <= Float32::NAN returns false for Float64::NAN <= Float32::NAN - returns false for Float32::NAN <= UInt16.zero returns false for Float32::NAN <= UInt16.zero -Crystal::Command - exec external commands exec external commands -Primitives: Slice - .literal - creates multiple literals creates multiple literals - creates a read-only Slice(UInt128) creates a read-only Slice(UInt128) - creates a read-only Slice(UInt64) creates a read-only Slice(UInt64) - creates multiple literals creates multiple literals - creates multiple literals creates multiple literals - creates a read-only Slice(Int32) creates a read-only Slice(Int32) - creates multiple literals creates multiple literals - creates a read-only Slice(UInt16) creates a read-only Slice(UInt16) - creates a read-only Slice(Int8) creates a read-only Slice(Int8) - creates a read-only Slice(Float64) creates a read-only Slice(Float64) - creates multiple literals creates multiple literals - creates multiple literals creates multiple literals - creates a read-only Slice(UInt32) creates a read-only Slice(UInt32) - creates a read-only Slice(Int64) creates a read-only Slice(Int64) - creates multiple literals creates multiple literals - creates multiple literals creates multiple literals - creates multiple literals creates multiple literals - creates multiple literals creates multiple literals - creates a read-only Slice(Int16) creates a read-only Slice(Int16) - creates multiple literals creates multiple literals - creates a read-only Slice(Int128) creates a read-only Slice(Int128) - creates a read-only Slice(UInt8) creates a read-only Slice(UInt8) - creates multiple literals creates multiple literals - creates a read-only Slice(Float32) creates a read-only Slice(Float32) + returns false for Float64::NAN >= Int128.zero returns false for Float64::NAN >= Int128.zero + returns false for Float32::NAN >= UInt32.zero returns false for Float32::NAN >= UInt32.zero + returns false for Float32::NAN >= UInt16.zero returns false for Float32::NAN >= UInt16.zero + #to_f + doesn't raise for infinity doesn't raise for infinity + raises on overflow for Float64#to_f32 raises on overflow for Float64#to_f32 + doesn't raise for NaN doesn't raise for NaN + #== + returns false for Float32::NAN == Float32.zero returns false for Float32::NAN == Float32.zero + returns false for Float32::NAN == Int32.zero returns false for Float32::NAN == Int32.zero + returns false for Float32::NAN == Int16.zero returns false for Float32::NAN == Int16.zero + returns false for Float32::NAN == Int64.zero returns false for Float32::NAN == Int64.zero + returns false for Float64::NAN == Int32.zero returns false for Float64::NAN == Int32.zero + returns false for Float64::NAN == Int8.zero returns false for Float64::NAN == Int8.zero + returns false for Float64::NAN == Float32::NAN returns false for Float64::NAN == Float32::NAN + returns false for Float32::NAN == Float64::NAN returns false for Float32::NAN == Float64::NAN + returns false for Float64::NAN == UInt16.zero returns false for Float64::NAN == UInt16.zero + returns false for Float64::NAN == Float64::NAN returns false for Float64::NAN == Float64::NAN + returns false for Float64::NAN == Int128.zero returns false for Float64::NAN == Int128.zero + returns false for Float32::NAN == UInt16.zero returns false for Float32::NAN == UInt16.zero + returns false for Float64::NAN == UInt8.zero returns false for Float64::NAN == UInt8.zero + returns false for Float32::NAN == Int8.zero returns false for Float32::NAN == Int8.zero + returns false for Float64::NAN == Float64.zero returns false for Float64::NAN == Float64.zero + returns false for Float64::NAN == Int16.zero returns false for Float64::NAN == Int16.zero + returns false for Float32::NAN == UInt64.zero returns false for Float32::NAN == UInt64.zero + returns false for Float64::NAN == UInt64.zero returns false for Float64::NAN == UInt64.zero + returns false for Float64::NAN == UInt32.zero returns false for Float64::NAN == UInt32.zero + returns false for Float32::NAN == UInt8.zero returns false for Float32::NAN == UInt8.zero + returns false for Float64::NAN == Float32.zero returns false for Float64::NAN == Float32.zero + returns false for Float32::NAN == UInt32.zero returns false for Float32::NAN == UInt32.zero + returns false for Float32::NAN == Int128.zero returns false for Float32::NAN == Int128.zero + returns false for Float64::NAN == UInt128.zero returns false for Float64::NAN == UInt128.zero + returns false for Float32::NAN == UInt128.zero returns false for Float32::NAN == UInt128.zero + returns false for Float32::NAN == Float64.zero returns false for Float32::NAN == Float64.zero + returns false for Float64::NAN == Int64.zero returns false for Float64::NAN == Int64.zero + returns false for Float32::NAN == Float32::NAN returns false for Float32::NAN == Float32::NAN +Primitives: reference + .pre_initialize + doesn't fail on complex ivar initializer if value is discarded (#14325) doesn't fail on complex ivar initializer if value is discarded (#14325) + works when address is on the stack works when address is on the stack + sets type ID sets type ID + runs inline instance initializers runs inline instance initializers + raises on abstract virtual type raises on abstract virtual type + zeroes the instance data zeroes the instance data + works with virtual type works with virtual type + .allocate + doesn't fail on complex ivar initializer if value is discarded (#14325) doesn't fail on complex ivar initializer if value is discarded (#14325) + .unsafe_construct + constructs an object in-place constructs an object in-place -Finished in 2.41 seconds +Finished in 8.93 seconds 700 examples, 0 failures, 0 errors, 0 pending -Randomized with seed: 13354 +Randomized with seed: 92833 make[2]: Leaving directory '/build/reproducible-path/crystal-1.14.0+dfsg' make[1]: Leaving directory '/build/reproducible-path/crystal-1.14.0+dfsg' create-stamp debian/debhelper-build-stamp @@ -34562,7 +34599,7 @@ debian/rules override_dh_auto_install make[1]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg' dh_auto_install -- PREFIX=/usr - make -j42 install DESTDIR=/build/reproducible-path/crystal-1.14.0\+dfsg/debian/tmp AM_UPDATE_INFO_DIR=no "INSTALL=install --strip-program=true" PREFIX=/usr + make -j20 install DESTDIR=/build/reproducible-path/crystal-1.14.0\+dfsg/debian/tmp AM_UPDATE_INFO_DIR=no "INSTALL=install --strip-program=true" PREFIX=/usr make[2]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg' gzip -c -9 man/crystal.1 > man/crystal.1.gz install --strip-program=true -d -m 0755 "/build/reproducible-path/crystal-1.14.0+dfsg/debian/tmp/usr/bin/" @@ -37209,8 +37246,8 @@ dh_md5sums dh_builddeb dpkg-deb: building package 'crystal' in '../crystal_1.14.0+dfsg-1_amd64.deb'. -dpkg-deb: building package 'crystal-dbgsym' in '../crystal-dbgsym_1.14.0+dfsg-1_amd64.deb'. dpkg-deb: building package 'crystal-doc' in '../crystal-doc_1.14.0+dfsg-1_all.deb'. +dpkg-deb: building package 'crystal-dbgsym' in '../crystal-dbgsym_1.14.0+dfsg-1_amd64.deb'. dpkg-deb: building package 'crystal-samples' in '../crystal-samples_1.14.0+dfsg-1_all.deb'. dpkg-genbuildinfo --build=binary -O../crystal_1.14.0+dfsg-1_amd64.buildinfo dpkg-genchanges --build=binary -O../crystal_1.14.0+dfsg-1_amd64.changes @@ -37219,12 +37256,14 @@ dpkg-buildpackage: info: binary-only upload (no source included) dpkg-genchanges: info: including full source code in upload I: copying local configuration +I: user script /srv/workspace/pbuilder/2461830/tmp/hooks/B01_cleanup starting +I: user script /srv/workspace/pbuilder/2461830/tmp/hooks/B01_cleanup finished I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env -I: removing directory /srv/workspace/pbuilder/3553977 and its subdirectories -I: Current time: Sat Mar 21 01:51:19 -12 2026 -I: pbuilder-time-stamp: 1774101079 +I: removing directory /srv/workspace/pbuilder/2461830 and its subdirectories +I: Current time: Mon Feb 17 01:09:07 +14 2025 +I: pbuilder-time-stamp: 1739704147