I: pbuilder: network access will be disabled during build I: Current time: Wed Apr 15 07:59:04 -12 2026 I: pbuilder-time-stamp: 1776283144 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/unstable-reproducible-base.tgz] I: copying local configuration W: --override-config is not set; not updating apt.conf Read the manpage for details. I: mounting /proc filesystem I: mounting /sys filesystem I: creating /{dev,run}/shm I: mounting /dev/pts filesystem I: redirecting /dev/ptmx to /dev/pts/ptmx I: policy-rc.d already exists I: Copying source file I: copying [crystal_1.14.0+dfsg-1.dsc] I: copying [./crystal_1.14.0+dfsg.orig.tar.xz] I: copying [./crystal_1.14.0+dfsg-1.debian.tar.xz] I: Extracting source dpkg-source: warning: cannot verify inline signature for ./crystal_1.14.0+dfsg-1.dsc: unsupported subcommand dpkg-source: info: extracting crystal in crystal-1.14.0+dfsg dpkg-source: info: unpacking crystal_1.14.0+dfsg.orig.tar.xz dpkg-source: info: unpacking crystal_1.14.0+dfsg-1.debian.tar.xz dpkg-source: info: using patch list from debian/patches/series dpkg-source: info: applying disable-udp-multicast-specs.diff dpkg-source: info: applying remove-check-in-random-failing-test.diff 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/673674/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' IFS=' ' INVOCATION_ID='93282c5a6d534a6582115b61fa215bfb' 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='673674' PS1='# ' PS2='> ' 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.ZtByPLAt/pbuilderrc_LtcQ --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.ZtByPLAt/b1 --logfile b1/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+12' USER='root' _='/usr/bin/systemd-run' http_proxy='http://213.165.73.152:3128' I: uname -a Linux ionos15-amd64 6.12.12+bpo-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.12-1~bpo12+1 (2025-02-23) x86_64 GNU/Linux I: ls -l /bin lrwxrwxrwx 1 root root 7 Mar 4 2025 /bin -> usr/bin I: user script /srv/workspace/pbuilder/673674/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy Version: 0.invalid.0 Architecture: amd64 Maintainer: Debian Pbuilder Team Description: Dummy package to satisfy dependencies with aptitude - created by pbuilder This package was created automatically by pbuilder to satisfy the build-dependencies of the package being currently built. Depends: debhelper-compat (= 13), git, libbsd-dev, libedit-dev, libevent-dev, libgc-dev (>= 1:7.6.0), libgmp-dev, libpcre2-dev, libssl-dev, libtool, libxml2-dev, libyaml-dev, libz-dev, lld-19, llvm-19-dev, pkgconf, crystal (>= 1.6.0) dpkg-deb: building package 'pbuilder-satisfydepends-dummy' in '/tmp/satisfydepends-aptitude/pbuilder-satisfydepends-dummy.deb'. Selecting previously unselected package pbuilder-satisfydepends-dummy. (Reading database ... 19783 files and directories currently installed.) Preparing to unpack .../pbuilder-satisfydepends-dummy.deb ... Unpacking pbuilder-satisfydepends-dummy (0.invalid.0) ... dpkg: pbuilder-satisfydepends-dummy: dependency problems, but configuring anyway as you requested: pbuilder-satisfydepends-dummy depends on debhelper-compat (= 13); however: Package debhelper-compat is not installed. pbuilder-satisfydepends-dummy depends on git; however: Package git is not installed. pbuilder-satisfydepends-dummy depends on libbsd-dev; however: Package libbsd-dev is not installed. pbuilder-satisfydepends-dummy depends on libedit-dev; however: Package libedit-dev is not installed. pbuilder-satisfydepends-dummy depends on libevent-dev; however: Package libevent-dev is not installed. pbuilder-satisfydepends-dummy depends on libgc-dev (>= 1:7.6.0); however: Package libgc-dev is not installed. pbuilder-satisfydepends-dummy depends on libgmp-dev; however: Package libgmp-dev is not installed. pbuilder-satisfydepends-dummy depends on libpcre2-dev; however: Package libpcre2-dev is not installed. pbuilder-satisfydepends-dummy depends on libssl-dev; however: Package libssl-dev is not installed. pbuilder-satisfydepends-dummy depends on libtool; however: Package libtool is not installed. pbuilder-satisfydepends-dummy depends on libxml2-dev; however: Package libxml2-dev is not installed. pbuilder-satisfydepends-dummy depends on libyaml-dev; however: Package libyaml-dev is not installed. pbuilder-satisfydepends-dummy depends on libz-dev; however: Package libz-dev is not installed. pbuilder-satisfydepends-dummy depends on lld-19; however: Package lld-19 is not installed. pbuilder-satisfydepends-dummy depends on llvm-19-dev; however: Package llvm-19-dev is not installed. pbuilder-satisfydepends-dummy depends on pkgconf; however: Package pkgconf is not installed. pbuilder-satisfydepends-dummy depends on crystal (>= 1.6.0); however: Package crystal is not installed. Setting up pbuilder-satisfydepends-dummy (0.invalid.0) ... Reading package lists... Building dependency tree... Reading state information... Initializing package states... Writing extended state information... Building tag database... pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) The following NEW packages will be installed: autoconf{a} automake{a} autopoint{a} autotools-dev{a} bsdextrautils{a} crystal{a} debhelper{a} dh-autoreconf{a} dh-strip-nondeterminism{a} dwz{a} file{a} gettext{a} gettext-base{a} git{a} git-man{a} groff-base{a} icu-devtools{a} intltool-debian{a} libarchive-zip-perl{a} libbrotli1{a} libbsd-dev{a} libclang-cpp19{a} libcom-err2{a} libcurl3t64-gnutls{a} libcurl4t64{a} libdebhelper-perl{a} libedit-dev{a} libedit2{a} libelf1t64{a} liberror-perl{a} libevent-2.1-7t64{a} libevent-core-2.1-7t64{a} libevent-dev{a} libevent-extra-2.1-7t64{a} libevent-openssl-2.1-7t64{a} libevent-pthreads-2.1-7t64{a} libexpat1{a} libffi-dev{a} libffi8{a} libfile-stripnondeterminism-perl{a} libgc-dev{a} libgc1{a} libgmp-dev{a} libgmpxx4ldbl{a} libgnutls30t64{a} libgssapi-krb5-2{a} libicu-dev{a} libicu72{a} libidn2-0{a} libjs-codemirror{a} libjs-jquery{a} libk5crypto3{a} libkeyutils1{a} libkrb5-3{a} libkrb5support0{a} libldap2{a} libllvm19{a} libmagic-mgc{a} libmagic1t64{a} libmd-dev{a} libncurses-dev{a} libncurses6{a} libnghttp2-14{a} libnghttp3-9{a} libngtcp2-16{a} libngtcp2-crypto-gnutls8{a} libp11-kit0{a} libpcre2-16-0{a} libpcre2-32-0{a} libpcre2-dev{a} libpcre2-posix3{a} libpfm4{a} libpipeline1{a} libpkgconf3{a} libpsl5t64{a} libpython3-stdlib{a} libpython3.13-minimal{a} libpython3.13-stdlib{a} libreadline8t64{a} librtmp1{a} libsasl2-2{a} libsasl2-modules-db{a} libssh2-1t64{a} libssl-dev{a} libtasn1-6{a} libtool{a} libuchardet0{a} libunistring5{a} libxml2{a} libxml2-dev{a} libyaml-0-2{a} libyaml-dev{a} libz3-4{a} libz3-dev{a} lld-19{a} llvm-19{a} llvm-19-dev{a} llvm-19-linker-tools{a} llvm-19-runtime{a} llvm-19-tools{a} m4{a} man-db{a} media-types{a} netbase{a} pkgconf{a} pkgconf-bin{a} po-debconf{a} python3{a} python3-minimal{a} python3-pygments{a} python3-yaml{a} python3.13{a} python3.13-minimal{a} readline-common{a} sensible-utils{a} tzdata{a} zlib1g-dev{a} The following packages are RECOMMENDED but will NOT be installed: binfmt-support ca-certificates curl javascript-common krb5-locales less libarchive-cpio-perl libgpm2 libldap-common libltdl-dev libmail-sendmail-perl libsasl2-modules lynx openssh-client publicsuffix systemd wget 0 packages upgraded, 117 newly installed, 0 to remove and 0 not upgraded. Need to get 181 MB of archives. After unpacking 968 MB will be used. Writing extended state information... Get: 1 http://deb.debian.org/debian unstable/main amd64 libpython3.13-minimal amd64 3.13.2-1 [859 kB] Get: 2 http://deb.debian.org/debian unstable/main amd64 libexpat1 amd64 2.6.4-1 [106 kB] Get: 3 http://deb.debian.org/debian unstable/main amd64 python3.13-minimal amd64 3.13.2-1 [2205 kB] Get: 4 http://deb.debian.org/debian unstable/main amd64 python3-minimal amd64 3.13.2-2 [27.1 kB] Get: 5 http://deb.debian.org/debian unstable/main amd64 media-types all 13.0.0 [29.3 kB] Get: 6 http://deb.debian.org/debian unstable/main amd64 netbase all 6.4 [12.8 kB] Get: 7 http://deb.debian.org/debian unstable/main amd64 tzdata all 2025a-2 [259 kB] Get: 8 http://deb.debian.org/debian unstable/main amd64 libffi8 amd64 3.4.7-1 [23.9 kB] Get: 9 http://deb.debian.org/debian unstable/main amd64 readline-common all 8.2-6 [69.4 kB] Get: 10 http://deb.debian.org/debian unstable/main amd64 libreadline8t64 amd64 8.2-6 [169 kB] Get: 11 http://deb.debian.org/debian unstable/main amd64 libpython3.13-stdlib amd64 3.13.2-1 [1979 kB] Get: 12 http://deb.debian.org/debian unstable/main amd64 python3.13 amd64 3.13.2-1 [745 kB] Get: 13 http://deb.debian.org/debian unstable/main amd64 libpython3-stdlib amd64 3.13.2-2 [10.1 kB] Get: 14 http://deb.debian.org/debian unstable/main amd64 python3 amd64 3.13.2-2 [28.1 kB] Get: 15 http://deb.debian.org/debian unstable/main amd64 sensible-utils all 0.0.24 [24.8 kB] Get: 16 http://deb.debian.org/debian unstable/main amd64 libmagic-mgc amd64 1:5.45-3+b1 [314 kB] Get: 17 http://deb.debian.org/debian unstable/main amd64 libmagic1t64 amd64 1:5.45-3+b1 [108 kB] Get: 18 http://deb.debian.org/debian unstable/main amd64 file amd64 1:5.45-3+b1 [43.3 kB] Get: 19 http://deb.debian.org/debian unstable/main amd64 gettext-base amd64 0.23.1-1 [243 kB] Get: 20 http://deb.debian.org/debian unstable/main amd64 libuchardet0 amd64 0.0.8-1+b2 [68.9 kB] Get: 21 http://deb.debian.org/debian unstable/main amd64 groff-base amd64 1.23.0-7 [1185 kB] Get: 22 http://deb.debian.org/debian unstable/main amd64 bsdextrautils amd64 2.40.4-5 [92.4 kB] Get: 23 http://deb.debian.org/debian unstable/main amd64 libpipeline1 amd64 1.5.8-1 [42.0 kB] Get: 24 http://deb.debian.org/debian unstable/main amd64 man-db amd64 2.13.0-1 [1420 kB] Get: 25 http://deb.debian.org/debian unstable/main amd64 m4 amd64 1.4.19-7 [294 kB] Get: 26 http://deb.debian.org/debian unstable/main amd64 autoconf all 2.72-3 [493 kB] Get: 27 http://deb.debian.org/debian unstable/main amd64 autotools-dev all 20220109.1 [51.6 kB] Get: 28 http://deb.debian.org/debian unstable/main amd64 automake all 1:1.17-3 [862 kB] Get: 29 http://deb.debian.org/debian unstable/main amd64 autopoint all 0.23.1-1 [770 kB] Get: 30 http://deb.debian.org/debian unstable/main amd64 libevent-2.1-7t64 amd64 2.1.12-stable-10+b1 [182 kB] Get: 31 http://deb.debian.org/debian unstable/main amd64 libgc1 amd64 1:8.2.8-1 [247 kB] Get: 32 http://deb.debian.org/debian unstable/main amd64 libedit2 amd64 3.1-20250104-1 [93.8 kB] Get: 33 http://deb.debian.org/debian unstable/main amd64 libicu72 amd64 72.1-6 [9421 kB] Get: 34 http://deb.debian.org/debian unstable/main amd64 libxml2 amd64 2.12.7+dfsg+really2.9.14-0.2+b2 [699 kB] Get: 35 http://deb.debian.org/debian unstable/main amd64 libz3-4 amd64 4.13.3-1 [8560 kB] Get: 36 http://deb.debian.org/debian unstable/main amd64 libllvm19 amd64 1:19.1.7-1+b1 [26.0 MB] Get: 37 http://deb.debian.org/debian unstable/main amd64 libgc-dev amd64 1:8.2.8-1 [416 kB] Get: 38 http://deb.debian.org/debian unstable/main amd64 libpkgconf3 amd64 1.8.1-4 [36.4 kB] Get: 39 http://deb.debian.org/debian unstable/main amd64 pkgconf-bin amd64 1.8.1-4 [30.2 kB] Get: 40 http://deb.debian.org/debian unstable/main amd64 pkgconf amd64 1.8.1-4 [26.2 kB] Get: 41 http://deb.debian.org/debian unstable/main amd64 libpcre2-16-0 amd64 10.45-1 [281 kB] Get: 42 http://deb.debian.org/debian unstable/main amd64 libpcre2-32-0 amd64 10.45-1 [268 kB] Get: 43 http://deb.debian.org/debian unstable/main amd64 libpcre2-posix3 amd64 10.45-1 [63.5 kB] Get: 44 http://deb.debian.org/debian unstable/main amd64 libpcre2-dev amd64 10.45-1 [853 kB] Get: 45 http://deb.debian.org/debian unstable/main amd64 libevent-core-2.1-7t64 amd64 2.1.12-stable-10+b1 [132 kB] Get: 46 http://deb.debian.org/debian unstable/main amd64 libevent-extra-2.1-7t64 amd64 2.1.12-stable-10+b1 [108 kB] Get: 47 http://deb.debian.org/debian unstable/main amd64 libevent-pthreads-2.1-7t64 amd64 2.1.12-stable-10+b1 [54.3 kB] Get: 48 http://deb.debian.org/debian unstable/main amd64 libevent-openssl-2.1-7t64 amd64 2.1.12-stable-10+b1 [61.1 kB] Get: 49 http://deb.debian.org/debian unstable/main amd64 libevent-dev amd64 2.1.12-stable-10+b1 [305 kB] Get: 50 http://deb.debian.org/debian unstable/main amd64 libjs-codemirror all 5.65.0+~cs5.83.9-3 [774 kB] Get: 51 http://deb.debian.org/debian unstable/main amd64 libjs-jquery all 3.6.1+dfsg+~3.5.14-1 [326 kB] Get: 52 http://deb.debian.org/debian unstable/main amd64 crystal amd64 1.14.0+dfsg-1 [4375 kB] Get: 53 http://deb.debian.org/debian unstable/main amd64 libdebhelper-perl all 13.24.1 [90.9 kB] Get: 54 http://deb.debian.org/debian unstable/main amd64 libtool all 2.5.4-4 [539 kB] Get: 55 http://deb.debian.org/debian unstable/main amd64 dh-autoreconf all 20 [17.1 kB] Get: 56 http://deb.debian.org/debian unstable/main amd64 libarchive-zip-perl all 1.68-1 [104 kB] Get: 57 http://deb.debian.org/debian unstable/main amd64 libfile-stripnondeterminism-perl all 1.14.1-2 [19.7 kB] Get: 58 http://deb.debian.org/debian unstable/main amd64 dh-strip-nondeterminism all 1.14.1-2 [8620 B] Get: 59 http://deb.debian.org/debian unstable/main amd64 libelf1t64 amd64 0.192-4 [189 kB] Get: 60 http://deb.debian.org/debian unstable/main amd64 dwz amd64 0.15-1+b1 [110 kB] Get: 61 http://deb.debian.org/debian unstable/main amd64 libunistring5 amd64 1.3-1 [476 kB] Get: 62 http://deb.debian.org/debian unstable/main amd64 gettext amd64 0.23.1-1 [1680 kB] Get: 63 http://deb.debian.org/debian unstable/main amd64 intltool-debian all 0.35.0+20060710.6 [22.9 kB] Get: 64 http://deb.debian.org/debian unstable/main amd64 po-debconf all 1.0.21+nmu1 [248 kB] Get: 65 http://deb.debian.org/debian unstable/main amd64 debhelper all 13.24.1 [920 kB] Get: 66 http://deb.debian.org/debian unstable/main amd64 libbrotli1 amd64 1.1.0-2+b7 [307 kB] Get: 67 http://deb.debian.org/debian unstable/main amd64 libidn2-0 amd64 2.3.8-1 [109 kB] Get: 68 http://deb.debian.org/debian unstable/main amd64 libp11-kit0 amd64 0.25.5-3 [425 kB] Get: 69 http://deb.debian.org/debian unstable/main amd64 libtasn1-6 amd64 4.20.0-2 [49.9 kB] Get: 70 http://deb.debian.org/debian unstable/main amd64 libgnutls30t64 amd64 3.8.9-2 [1464 kB] Get: 71 http://deb.debian.org/debian unstable/main amd64 libkrb5support0 amd64 1.21.3-5 [33.0 kB] Get: 72 http://deb.debian.org/debian unstable/main amd64 libcom-err2 amd64 1.47.2-1 [24.0 kB] Get: 73 http://deb.debian.org/debian unstable/main amd64 libk5crypto3 amd64 1.21.3-5 [81.5 kB] Get: 74 http://deb.debian.org/debian unstable/main amd64 libkeyutils1 amd64 1.6.3-4 [9092 B] Get: 75 http://deb.debian.org/debian unstable/main amd64 libkrb5-3 amd64 1.21.3-5 [326 kB] Get: 76 http://deb.debian.org/debian unstable/main amd64 libgssapi-krb5-2 amd64 1.21.3-5 [138 kB] Get: 77 http://deb.debian.org/debian unstable/main amd64 libsasl2-modules-db amd64 2.1.28+dfsg1-9 [19.8 kB] Get: 78 http://deb.debian.org/debian unstable/main amd64 libsasl2-2 amd64 2.1.28+dfsg1-9 [57.5 kB] Get: 79 http://deb.debian.org/debian unstable/main amd64 libldap2 amd64 2.6.9+dfsg-2 [194 kB] Get: 80 http://deb.debian.org/debian unstable/main amd64 libnghttp2-14 amd64 1.64.0-1 [75.5 kB] Get: 81 http://deb.debian.org/debian unstable/main amd64 libnghttp3-9 amd64 1.8.0-1 [67.7 kB] Get: 82 http://deb.debian.org/debian unstable/main amd64 libngtcp2-16 amd64 1.11.0-1 [131 kB] Get: 83 http://deb.debian.org/debian unstable/main amd64 libngtcp2-crypto-gnutls8 amd64 1.11.0-1 [29.3 kB] Get: 84 http://deb.debian.org/debian unstable/main amd64 libpsl5t64 amd64 0.21.2-1.1+b1 [57.2 kB] Get: 85 http://deb.debian.org/debian unstable/main amd64 librtmp1 amd64 2.4+20151223.gitfa8646d.1-2+b5 [58.8 kB] Get: 86 http://deb.debian.org/debian unstable/main amd64 libssh2-1t64 amd64 1.11.1-1 [245 kB] Get: 87 http://deb.debian.org/debian unstable/main amd64 libcurl3t64-gnutls amd64 8.12.1-3 [365 kB] Get: 88 http://deb.debian.org/debian unstable/main amd64 liberror-perl all 0.17030-1 [26.9 kB] Get: 89 http://deb.debian.org/debian unstable/main amd64 git-man all 1:2.47.2-0.1 [2205 kB] Get: 90 http://deb.debian.org/debian unstable/main amd64 git amd64 1:2.47.2-0.1 [8788 kB] Get: 91 http://deb.debian.org/debian unstable/main amd64 icu-devtools amd64 72.1-6 [210 kB] Get: 92 http://deb.debian.org/debian unstable/main amd64 libmd-dev amd64 1.1.0-2+b1 [55.3 kB] Get: 93 http://deb.debian.org/debian unstable/main amd64 libbsd-dev amd64 0.12.2-2 [258 kB] Get: 94 http://deb.debian.org/debian unstable/main amd64 libclang-cpp19 amd64 1:19.1.7-1+b1 [13.2 MB] Get: 95 http://deb.debian.org/debian unstable/main amd64 libcurl4t64 amd64 8.12.1-3 [369 kB] Get: 96 http://deb.debian.org/debian unstable/main amd64 libncurses6 amd64 6.5+20250216-2 [105 kB] Get: 97 http://deb.debian.org/debian unstable/main amd64 libncurses-dev amd64 6.5+20250216-2 [353 kB] Get: 98 http://deb.debian.org/debian unstable/main amd64 libedit-dev amd64 3.1-20250104-1 [115 kB] Get: 99 http://deb.debian.org/debian unstable/main amd64 libffi-dev amd64 3.4.7-1 [60.8 kB] Get: 100 http://deb.debian.org/debian unstable/main amd64 libgmpxx4ldbl amd64 2:6.3.0+dfsg-3 [329 kB] Get: 101 http://deb.debian.org/debian unstable/main amd64 libgmp-dev amd64 2:6.3.0+dfsg-3 [642 kB] Get: 102 http://deb.debian.org/debian unstable/main amd64 libicu-dev amd64 72.1-6 [10.4 MB] Get: 103 http://deb.debian.org/debian unstable/main amd64 libpfm4 amd64 4.13.0+git83-g91970fe-1 [368 kB] Get: 104 http://deb.debian.org/debian unstable/main amd64 libssl-dev amd64 3.4.1-1 [2787 kB] Get: 105 http://deb.debian.org/debian unstable/main amd64 libxml2-dev amd64 2.12.7+dfsg+really2.9.14-0.2+b2 [794 kB] Get: 106 http://deb.debian.org/debian unstable/main amd64 libyaml-0-2 amd64 0.2.5-2 [52.5 kB] Get: 107 http://deb.debian.org/debian unstable/main amd64 libyaml-dev amd64 0.2.5-2 [63.4 kB] Get: 108 http://deb.debian.org/debian unstable/main amd64 libz3-dev amd64 4.13.3-1 [107 kB] Get: 109 http://deb.debian.org/debian unstable/main amd64 lld-19 amd64 1:19.1.7-1+b1 [1375 kB] Get: 110 http://deb.debian.org/debian unstable/main amd64 llvm-19-runtime amd64 1:19.1.7-1+b1 [551 kB] Get: 111 http://deb.debian.org/debian unstable/main amd64 llvm-19-linker-tools amd64 1:19.1.7-1+b1 [1261 kB] Get: 112 http://deb.debian.org/debian unstable/main amd64 llvm-19 amd64 1:19.1.7-1+b1 [16.4 MB] Get: 113 http://deb.debian.org/debian unstable/main amd64 python3-pygments all 2.18.0+dfsg-2 [836 kB] Get: 114 http://deb.debian.org/debian unstable/main amd64 python3-yaml amd64 6.0.2-1+b2 [136 kB] 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 3s (61.2 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 ... 19783 files and directories currently installed.) Preparing to unpack .../libpython3.13-minimal_3.13.2-1_amd64.deb ... Unpacking libpython3.13-minimal:amd64 (3.13.2-1) ... Selecting previously unselected package libexpat1:amd64. Preparing to unpack .../libexpat1_2.6.4-1_amd64.deb ... Unpacking libexpat1:amd64 (2.6.4-1) ... Selecting previously unselected package python3.13-minimal. Preparing to unpack .../python3.13-minimal_3.13.2-1_amd64.deb ... Unpacking python3.13-minimal (3.13.2-1) ... Setting up libpython3.13-minimal:amd64 (3.13.2-1) ... Setting up libexpat1:amd64 (2.6.4-1) ... Setting up python3.13-minimal (3.13.2-1) ... Selecting previously unselected package python3-minimal. (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 ... 20117 files and directories currently installed.) Preparing to unpack .../0-python3-minimal_3.13.2-2_amd64.deb ... Unpacking python3-minimal (3.13.2-2) ... Selecting previously unselected package media-types. Preparing to unpack .../1-media-types_13.0.0_all.deb ... Unpacking media-types (13.0.0) ... Selecting previously unselected package netbase. Preparing to unpack .../2-netbase_6.4_all.deb ... Unpacking netbase (6.4) ... Selecting previously unselected package tzdata. Preparing to unpack .../3-tzdata_2025a-2_all.deb ... Unpacking tzdata (2025a-2) ... Selecting previously unselected package libffi8:amd64. Preparing to unpack .../4-libffi8_3.4.7-1_amd64.deb ... Unpacking libffi8:amd64 (3.4.7-1) ... Selecting previously unselected package readline-common. Preparing to unpack .../5-readline-common_8.2-6_all.deb ... Unpacking readline-common (8.2-6) ... Selecting previously unselected package libreadline8t64:amd64. Preparing to unpack .../6-libreadline8t64_8.2-6_amd64.deb ... Adding 'diversion of /lib/x86_64-linux-gnu/libhistory.so.8 to /lib/x86_64-linux-gnu/libhistory.so.8.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/x86_64-linux-gnu/libhistory.so.8.2 to /lib/x86_64-linux-gnu/libhistory.so.8.2.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/x86_64-linux-gnu/libreadline.so.8 to /lib/x86_64-linux-gnu/libreadline.so.8.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/x86_64-linux-gnu/libreadline.so.8.2 to /lib/x86_64-linux-gnu/libreadline.so.8.2.usr-is-merged by libreadline8t64' Unpacking libreadline8t64:amd64 (8.2-6) ... Selecting previously unselected package libpython3.13-stdlib:amd64. Preparing to unpack .../7-libpython3.13-stdlib_3.13.2-1_amd64.deb ... Unpacking libpython3.13-stdlib:amd64 (3.13.2-1) ... Selecting previously unselected package python3.13. Preparing to unpack .../8-python3.13_3.13.2-1_amd64.deb ... Unpacking python3.13 (3.13.2-1) ... Selecting previously unselected package libpython3-stdlib:amd64. Preparing to unpack .../9-libpython3-stdlib_3.13.2-2_amd64.deb ... Unpacking libpython3-stdlib:amd64 (3.13.2-2) ... Setting up python3-minimal (3.13.2-2) ... Selecting previously unselected package python3. (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 ... 21127 files and directories currently installed.) Preparing to unpack .../000-python3_3.13.2-2_amd64.deb ... Unpacking python3 (3.13.2-2) ... Selecting previously unselected package sensible-utils. Preparing to unpack .../001-sensible-utils_0.0.24_all.deb ... Unpacking sensible-utils (0.0.24) ... Selecting previously unselected package libmagic-mgc. Preparing to unpack .../002-libmagic-mgc_1%3a5.45-3+b1_amd64.deb ... Unpacking libmagic-mgc (1:5.45-3+b1) ... Selecting previously unselected package libmagic1t64:amd64. Preparing to unpack .../003-libmagic1t64_1%3a5.45-3+b1_amd64.deb ... Unpacking libmagic1t64:amd64 (1:5.45-3+b1) ... Selecting previously unselected package file. Preparing to unpack .../004-file_1%3a5.45-3+b1_amd64.deb ... Unpacking file (1:5.45-3+b1) ... Selecting previously unselected package gettext-base. Preparing to unpack .../005-gettext-base_0.23.1-1_amd64.deb ... Unpacking gettext-base (0.23.1-1) ... Selecting previously unselected package libuchardet0:amd64. Preparing to unpack .../006-libuchardet0_0.0.8-1+b2_amd64.deb ... Unpacking libuchardet0:amd64 (0.0.8-1+b2) ... Selecting previously unselected package groff-base. Preparing to unpack .../007-groff-base_1.23.0-7_amd64.deb ... Unpacking groff-base (1.23.0-7) ... Selecting previously unselected package bsdextrautils. Preparing to unpack .../008-bsdextrautils_2.40.4-5_amd64.deb ... Unpacking bsdextrautils (2.40.4-5) ... Selecting previously unselected package libpipeline1:amd64. Preparing to unpack .../009-libpipeline1_1.5.8-1_amd64.deb ... Unpacking libpipeline1:amd64 (1.5.8-1) ... Selecting previously unselected package man-db. Preparing to unpack .../010-man-db_2.13.0-1_amd64.deb ... Unpacking man-db (2.13.0-1) ... Selecting previously unselected package m4. Preparing to unpack .../011-m4_1.4.19-7_amd64.deb ... Unpacking m4 (1.4.19-7) ... Selecting previously unselected package autoconf. Preparing to unpack .../012-autoconf_2.72-3_all.deb ... Unpacking autoconf (2.72-3) ... Selecting previously unselected package autotools-dev. Preparing to unpack .../013-autotools-dev_20220109.1_all.deb ... Unpacking autotools-dev (20220109.1) ... Selecting previously unselected package automake. Preparing to unpack .../014-automake_1%3a1.17-3_all.deb ... Unpacking automake (1:1.17-3) ... Selecting previously unselected package autopoint. Preparing to unpack .../015-autopoint_0.23.1-1_all.deb ... Unpacking autopoint (0.23.1-1) ... Selecting previously unselected package libevent-2.1-7t64:amd64. Preparing to unpack .../016-libevent-2.1-7t64_2.1.12-stable-10+b1_amd64.deb ... Unpacking libevent-2.1-7t64:amd64 (2.1.12-stable-10+b1) ... Selecting previously unselected package libgc1:amd64. Preparing to unpack .../017-libgc1_1%3a8.2.8-1_amd64.deb ... Unpacking libgc1:amd64 (1:8.2.8-1) ... Selecting previously unselected package libedit2:amd64. Preparing to unpack .../018-libedit2_3.1-20250104-1_amd64.deb ... Unpacking libedit2:amd64 (3.1-20250104-1) ... Selecting previously unselected package libicu72:amd64. Preparing to unpack .../019-libicu72_72.1-6_amd64.deb ... Unpacking libicu72:amd64 (72.1-6) ... Selecting previously unselected package libxml2:amd64. Preparing to unpack .../020-libxml2_2.12.7+dfsg+really2.9.14-0.2+b2_amd64.deb ... Unpacking libxml2:amd64 (2.12.7+dfsg+really2.9.14-0.2+b2) ... Selecting previously unselected package libz3-4:amd64. Preparing to unpack .../021-libz3-4_4.13.3-1_amd64.deb ... Unpacking libz3-4:amd64 (4.13.3-1) ... Selecting previously unselected package libllvm19:amd64. Preparing to unpack .../022-libllvm19_1%3a19.1.7-1+b1_amd64.deb ... Unpacking libllvm19:amd64 (1:19.1.7-1+b1) ... Selecting previously unselected package libgc-dev:amd64. Preparing to unpack .../023-libgc-dev_1%3a8.2.8-1_amd64.deb ... Unpacking libgc-dev:amd64 (1:8.2.8-1) ... Selecting previously unselected package libpkgconf3:amd64. Preparing to unpack .../024-libpkgconf3_1.8.1-4_amd64.deb ... Unpacking libpkgconf3:amd64 (1.8.1-4) ... Selecting previously unselected package pkgconf-bin. Preparing to unpack .../025-pkgconf-bin_1.8.1-4_amd64.deb ... Unpacking pkgconf-bin (1.8.1-4) ... Selecting previously unselected package pkgconf:amd64. Preparing to unpack .../026-pkgconf_1.8.1-4_amd64.deb ... Unpacking pkgconf:amd64 (1.8.1-4) ... Selecting previously unselected package libpcre2-16-0:amd64. Preparing to unpack .../027-libpcre2-16-0_10.45-1_amd64.deb ... Unpacking libpcre2-16-0:amd64 (10.45-1) ... Selecting previously unselected package libpcre2-32-0:amd64. Preparing to unpack .../028-libpcre2-32-0_10.45-1_amd64.deb ... Unpacking libpcre2-32-0:amd64 (10.45-1) ... Selecting previously unselected package libpcre2-posix3:amd64. Preparing to unpack .../029-libpcre2-posix3_10.45-1_amd64.deb ... Unpacking libpcre2-posix3:amd64 (10.45-1) ... Selecting previously unselected package libpcre2-dev:amd64. Preparing to unpack .../030-libpcre2-dev_10.45-1_amd64.deb ... Unpacking libpcre2-dev:amd64 (10.45-1) ... Selecting previously unselected package libevent-core-2.1-7t64:amd64. Preparing to unpack .../031-libevent-core-2.1-7t64_2.1.12-stable-10+b1_amd64.deb ... Unpacking libevent-core-2.1-7t64:amd64 (2.1.12-stable-10+b1) ... Selecting previously unselected package libevent-extra-2.1-7t64:amd64. Preparing to unpack .../032-libevent-extra-2.1-7t64_2.1.12-stable-10+b1_amd64.deb ... Unpacking libevent-extra-2.1-7t64:amd64 (2.1.12-stable-10+b1) ... Selecting previously unselected package libevent-pthreads-2.1-7t64:amd64. Preparing to unpack .../033-libevent-pthreads-2.1-7t64_2.1.12-stable-10+b1_amd64.deb ... Unpacking libevent-pthreads-2.1-7t64:amd64 (2.1.12-stable-10+b1) ... Selecting previously unselected package libevent-openssl-2.1-7t64:amd64. Preparing to unpack .../034-libevent-openssl-2.1-7t64_2.1.12-stable-10+b1_amd64.deb ... Unpacking libevent-openssl-2.1-7t64:amd64 (2.1.12-stable-10+b1) ... Selecting previously unselected package libevent-dev. Preparing to unpack .../035-libevent-dev_2.1.12-stable-10+b1_amd64.deb ... Unpacking libevent-dev (2.1.12-stable-10+b1) ... Selecting previously unselected package libjs-codemirror. Preparing to unpack .../036-libjs-codemirror_5.65.0+~cs5.83.9-3_all.deb ... Unpacking libjs-codemirror (5.65.0+~cs5.83.9-3) ... Selecting previously unselected package libjs-jquery. Preparing to unpack .../037-libjs-jquery_3.6.1+dfsg+~3.5.14-1_all.deb ... Unpacking libjs-jquery (3.6.1+dfsg+~3.5.14-1) ... Selecting previously unselected package crystal. Preparing to unpack .../038-crystal_1.14.0+dfsg-1_amd64.deb ... Unpacking crystal (1.14.0+dfsg-1) ... Selecting previously unselected package libdebhelper-perl. Preparing to unpack .../039-libdebhelper-perl_13.24.1_all.deb ... Unpacking libdebhelper-perl (13.24.1) ... Selecting previously unselected package libtool. Preparing to unpack .../040-libtool_2.5.4-4_all.deb ... Unpacking libtool (2.5.4-4) ... Selecting previously unselected package dh-autoreconf. Preparing to unpack .../041-dh-autoreconf_20_all.deb ... Unpacking dh-autoreconf (20) ... Selecting previously unselected package libarchive-zip-perl. Preparing to unpack .../042-libarchive-zip-perl_1.68-1_all.deb ... Unpacking libarchive-zip-perl (1.68-1) ... Selecting previously unselected package libfile-stripnondeterminism-perl. Preparing to unpack .../043-libfile-stripnondeterminism-perl_1.14.1-2_all.deb ... Unpacking libfile-stripnondeterminism-perl (1.14.1-2) ... Selecting previously unselected package dh-strip-nondeterminism. Preparing to unpack .../044-dh-strip-nondeterminism_1.14.1-2_all.deb ... Unpacking dh-strip-nondeterminism (1.14.1-2) ... Selecting previously unselected package libelf1t64:amd64. Preparing to unpack .../045-libelf1t64_0.192-4_amd64.deb ... Unpacking libelf1t64:amd64 (0.192-4) ... Selecting previously unselected package dwz. Preparing to unpack .../046-dwz_0.15-1+b1_amd64.deb ... Unpacking dwz (0.15-1+b1) ... Selecting previously unselected package libunistring5:amd64. Preparing to unpack .../047-libunistring5_1.3-1_amd64.deb ... Unpacking libunistring5:amd64 (1.3-1) ... Selecting previously unselected package gettext. Preparing to unpack .../048-gettext_0.23.1-1_amd64.deb ... Unpacking gettext (0.23.1-1) ... Selecting previously unselected package intltool-debian. Preparing to unpack .../049-intltool-debian_0.35.0+20060710.6_all.deb ... Unpacking intltool-debian (0.35.0+20060710.6) ... Selecting previously unselected package po-debconf. Preparing to unpack .../050-po-debconf_1.0.21+nmu1_all.deb ... Unpacking po-debconf (1.0.21+nmu1) ... Selecting previously unselected package debhelper. Preparing to unpack .../051-debhelper_13.24.1_all.deb ... Unpacking debhelper (13.24.1) ... Selecting previously unselected package libbrotli1:amd64. Preparing to unpack .../052-libbrotli1_1.1.0-2+b7_amd64.deb ... Unpacking libbrotli1:amd64 (1.1.0-2+b7) ... Selecting previously unselected package libidn2-0:amd64. Preparing to unpack .../053-libidn2-0_2.3.8-1_amd64.deb ... Unpacking libidn2-0:amd64 (2.3.8-1) ... Selecting previously unselected package libp11-kit0:amd64. Preparing to unpack .../054-libp11-kit0_0.25.5-3_amd64.deb ... Unpacking libp11-kit0:amd64 (0.25.5-3) ... Selecting previously unselected package libtasn1-6:amd64. Preparing to unpack .../055-libtasn1-6_4.20.0-2_amd64.deb ... Unpacking libtasn1-6:amd64 (4.20.0-2) ... Selecting previously unselected package libgnutls30t64:amd64. Preparing to unpack .../056-libgnutls30t64_3.8.9-2_amd64.deb ... Unpacking libgnutls30t64:amd64 (3.8.9-2) ... Selecting previously unselected package libkrb5support0:amd64. Preparing to unpack .../057-libkrb5support0_1.21.3-5_amd64.deb ... Unpacking libkrb5support0:amd64 (1.21.3-5) ... Selecting previously unselected package libcom-err2:amd64. Preparing to unpack .../058-libcom-err2_1.47.2-1_amd64.deb ... Unpacking libcom-err2:amd64 (1.47.2-1) ... Selecting previously unselected package libk5crypto3:amd64. Preparing to unpack .../059-libk5crypto3_1.21.3-5_amd64.deb ... Unpacking libk5crypto3:amd64 (1.21.3-5) ... Selecting previously unselected package libkeyutils1:amd64. Preparing to unpack .../060-libkeyutils1_1.6.3-4_amd64.deb ... Unpacking libkeyutils1:amd64 (1.6.3-4) ... Selecting previously unselected package libkrb5-3:amd64. Preparing to unpack .../061-libkrb5-3_1.21.3-5_amd64.deb ... Unpacking libkrb5-3:amd64 (1.21.3-5) ... Selecting previously unselected package libgssapi-krb5-2:amd64. Preparing to unpack .../062-libgssapi-krb5-2_1.21.3-5_amd64.deb ... Unpacking libgssapi-krb5-2:amd64 (1.21.3-5) ... Selecting previously unselected package libsasl2-modules-db:amd64. Preparing to unpack .../063-libsasl2-modules-db_2.1.28+dfsg1-9_amd64.deb ... Unpacking libsasl2-modules-db:amd64 (2.1.28+dfsg1-9) ... Selecting previously unselected package libsasl2-2:amd64. Preparing to unpack .../064-libsasl2-2_2.1.28+dfsg1-9_amd64.deb ... Unpacking libsasl2-2:amd64 (2.1.28+dfsg1-9) ... Selecting previously unselected package libldap2:amd64. Preparing to unpack .../065-libldap2_2.6.9+dfsg-2_amd64.deb ... Unpacking libldap2:amd64 (2.6.9+dfsg-2) ... Selecting previously unselected package libnghttp2-14:amd64. Preparing to unpack .../066-libnghttp2-14_1.64.0-1_amd64.deb ... Unpacking libnghttp2-14:amd64 (1.64.0-1) ... Selecting previously unselected package libnghttp3-9:amd64. Preparing to unpack .../067-libnghttp3-9_1.8.0-1_amd64.deb ... Unpacking libnghttp3-9:amd64 (1.8.0-1) ... Selecting previously unselected package libngtcp2-16:amd64. Preparing to unpack .../068-libngtcp2-16_1.11.0-1_amd64.deb ... Unpacking libngtcp2-16:amd64 (1.11.0-1) ... Selecting previously unselected package libngtcp2-crypto-gnutls8:amd64. Preparing to unpack .../069-libngtcp2-crypto-gnutls8_1.11.0-1_amd64.deb ... Unpacking libngtcp2-crypto-gnutls8:amd64 (1.11.0-1) ... Selecting previously unselected package libpsl5t64:amd64. Preparing to unpack .../070-libpsl5t64_0.21.2-1.1+b1_amd64.deb ... Unpacking libpsl5t64:amd64 (0.21.2-1.1+b1) ... Selecting previously unselected package librtmp1:amd64. Preparing to unpack .../071-librtmp1_2.4+20151223.gitfa8646d.1-2+b5_amd64.deb ... Unpacking librtmp1:amd64 (2.4+20151223.gitfa8646d.1-2+b5) ... Selecting previously unselected package libssh2-1t64:amd64. Preparing to unpack .../072-libssh2-1t64_1.11.1-1_amd64.deb ... Unpacking libssh2-1t64:amd64 (1.11.1-1) ... Selecting previously unselected package libcurl3t64-gnutls:amd64. Preparing to unpack .../073-libcurl3t64-gnutls_8.12.1-3_amd64.deb ... Unpacking libcurl3t64-gnutls:amd64 (8.12.1-3) ... Selecting previously unselected package liberror-perl. Preparing to unpack .../074-liberror-perl_0.17030-1_all.deb ... Unpacking liberror-perl (0.17030-1) ... Selecting previously unselected package git-man. Preparing to unpack .../075-git-man_1%3a2.47.2-0.1_all.deb ... Unpacking git-man (1:2.47.2-0.1) ... Selecting previously unselected package git. Preparing to unpack .../076-git_1%3a2.47.2-0.1_amd64.deb ... Unpacking git (1:2.47.2-0.1) ... Selecting previously unselected package icu-devtools. Preparing to unpack .../077-icu-devtools_72.1-6_amd64.deb ... Unpacking icu-devtools (72.1-6) ... Selecting previously unselected package libmd-dev:amd64. Preparing to unpack .../078-libmd-dev_1.1.0-2+b1_amd64.deb ... Unpacking libmd-dev:amd64 (1.1.0-2+b1) ... Selecting previously unselected package libbsd-dev:amd64. Preparing to unpack .../079-libbsd-dev_0.12.2-2_amd64.deb ... Unpacking libbsd-dev:amd64 (0.12.2-2) ... Selecting previously unselected package libclang-cpp19. Preparing to unpack .../080-libclang-cpp19_1%3a19.1.7-1+b1_amd64.deb ... Unpacking libclang-cpp19 (1:19.1.7-1+b1) ... Selecting previously unselected package libcurl4t64:amd64. Preparing to unpack .../081-libcurl4t64_8.12.1-3_amd64.deb ... Unpacking libcurl4t64:amd64 (8.12.1-3) ... Selecting previously unselected package libncurses6:amd64. Preparing to unpack .../082-libncurses6_6.5+20250216-2_amd64.deb ... Unpacking libncurses6:amd64 (6.5+20250216-2) ... Selecting previously unselected package libncurses-dev:amd64. Preparing to unpack .../083-libncurses-dev_6.5+20250216-2_amd64.deb ... Unpacking libncurses-dev:amd64 (6.5+20250216-2) ... Selecting previously unselected package libedit-dev:amd64. Preparing to unpack .../084-libedit-dev_3.1-20250104-1_amd64.deb ... Unpacking libedit-dev:amd64 (3.1-20250104-1) ... Selecting previously unselected package libffi-dev:amd64. Preparing to unpack .../085-libffi-dev_3.4.7-1_amd64.deb ... Unpacking libffi-dev:amd64 (3.4.7-1) ... Selecting previously unselected package libgmpxx4ldbl:amd64. Preparing to unpack .../086-libgmpxx4ldbl_2%3a6.3.0+dfsg-3_amd64.deb ... Unpacking libgmpxx4ldbl:amd64 (2:6.3.0+dfsg-3) ... Selecting previously unselected package libgmp-dev:amd64. Preparing to unpack .../087-libgmp-dev_2%3a6.3.0+dfsg-3_amd64.deb ... Unpacking libgmp-dev:amd64 (2:6.3.0+dfsg-3) ... Selecting previously unselected package libicu-dev:amd64. Preparing to unpack .../088-libicu-dev_72.1-6_amd64.deb ... Unpacking libicu-dev:amd64 (72.1-6) ... Selecting previously unselected package libpfm4:amd64. Preparing to unpack .../089-libpfm4_4.13.0+git83-g91970fe-1_amd64.deb ... Unpacking libpfm4:amd64 (4.13.0+git83-g91970fe-1) ... Selecting previously unselected package libssl-dev:amd64. Preparing to unpack .../090-libssl-dev_3.4.1-1_amd64.deb ... Unpacking libssl-dev:amd64 (3.4.1-1) ... Selecting previously unselected package libxml2-dev:amd64. Preparing to unpack .../091-libxml2-dev_2.12.7+dfsg+really2.9.14-0.2+b2_amd64.deb ... Unpacking libxml2-dev:amd64 (2.12.7+dfsg+really2.9.14-0.2+b2) ... Selecting previously unselected package libyaml-0-2:amd64. Preparing to unpack .../092-libyaml-0-2_0.2.5-2_amd64.deb ... Unpacking libyaml-0-2:amd64 (0.2.5-2) ... Selecting previously unselected package libyaml-dev:amd64. Preparing to unpack .../093-libyaml-dev_0.2.5-2_amd64.deb ... Unpacking libyaml-dev:amd64 (0.2.5-2) ... Selecting previously unselected package libz3-dev:amd64. Preparing to unpack .../094-libz3-dev_4.13.3-1_amd64.deb ... Unpacking libz3-dev:amd64 (4.13.3-1) ... Selecting previously unselected package lld-19. Preparing to unpack .../095-lld-19_1%3a19.1.7-1+b1_amd64.deb ... Unpacking lld-19 (1:19.1.7-1+b1) ... Selecting previously unselected package llvm-19-runtime. Preparing to unpack .../096-llvm-19-runtime_1%3a19.1.7-1+b1_amd64.deb ... Unpacking llvm-19-runtime (1:19.1.7-1+b1) ... Selecting previously unselected package llvm-19-linker-tools. Preparing to unpack .../097-llvm-19-linker-tools_1%3a19.1.7-1+b1_amd64.deb ... Unpacking llvm-19-linker-tools (1:19.1.7-1+b1) ... Selecting previously unselected package llvm-19. Preparing to unpack .../098-llvm-19_1%3a19.1.7-1+b1_amd64.deb ... Unpacking llvm-19 (1:19.1.7-1+b1) ... Selecting previously unselected package python3-pygments. Preparing to unpack .../099-python3-pygments_2.18.0+dfsg-2_all.deb ... Unpacking python3-pygments (2.18.0+dfsg-2) ... Selecting previously unselected package python3-yaml. Preparing to unpack .../100-python3-yaml_6.0.2-1+b2_amd64.deb ... Unpacking python3-yaml (6.0.2-1+b2) ... Selecting previously unselected package llvm-19-tools. Preparing to unpack .../101-llvm-19-tools_1%3a19.1.7-1+b1_amd64.deb ... Unpacking llvm-19-tools (1:19.1.7-1+b1) ... Selecting previously unselected package llvm-19-dev. Preparing to unpack .../102-llvm-19-dev_1%3a19.1.7-1+b1_amd64.deb ... Unpacking llvm-19-dev (1:19.1.7-1+b1) ... Selecting previously unselected package zlib1g-dev:amd64. Preparing to unpack .../103-zlib1g-dev_1%3a1.3.dfsg+really1.3.1-1+b1_amd64.deb ... Unpacking zlib1g-dev:amd64 (1:1.3.dfsg+really1.3.1-1+b1) ... Setting up media-types (13.0.0) ... Setting up libpipeline1:amd64 (1.5.8-1) ... Setting up libkeyutils1:amd64 (1.6.3-4) ... Setting up libicu72:amd64 (72.1-6) ... Setting up bsdextrautils (2.40.4-5) ... Setting up libmagic-mgc (1:5.45-3+b1) ... Setting up libarchive-zip-perl (1.68-1) ... Setting up libyaml-0-2:amd64 (0.2.5-2) ... Setting up libdebhelper-perl (13.24.1) ... Setting up libbrotli1:amd64 (1.1.0-2+b7) ... Setting up libedit2:amd64 (3.1-20250104-1) ... Setting up libmagic1t64:amd64 (1:5.45-3+b1) ... Setting up libnghttp2-14:amd64 (1.64.0-1) ... Setting up gettext-base (0.23.1-1) ... Setting up m4 (1.4.19-7) ... Setting up libevent-2.1-7t64:amd64 (2.1.12-stable-10+b1) ... Setting up libcom-err2:amd64 (1.47.2-1) ... Setting up file (1:5.45-3+b1) ... Setting up libpcre2-16-0:amd64 (10.45-1) ... Setting up libelf1t64:amd64 (0.192-4) ... Setting up libkrb5support0:amd64 (1.21.3-5) ... Setting up libsasl2-modules-db:amd64 (2.1.28+dfsg1-9) ... Setting up tzdata (2025a-2) ... Current default time zone: 'Etc/UTC' Local time is now: Wed Apr 15 19:59:52 UTC 2026. Universal Time is now: Wed Apr 15 19:59:52 UTC 2026. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up liberror-perl (0.17030-1) ... Setting up autotools-dev (20220109.1) ... Setting up libz3-4:amd64 (4.13.3-1) ... Setting up libpcre2-32-0:amd64 (10.45-1) ... Setting up libpkgconf3:amd64 (1.8.1-4) ... Setting up libgmpxx4ldbl:amd64 (2:6.3.0+dfsg-3) ... Setting up libpfm4:amd64 (4.13.0+git83-g91970fe-1) ... Setting up libncurses6:amd64 (6.5+20250216-2) ... Setting up libunistring5:amd64 (1.3-1) ... Setting up libjs-codemirror (5.65.0+~cs5.83.9-3) ... Setting up libssl-dev:amd64 (3.4.1-1) ... Setting up autopoint (0.23.1-1) ... Setting up icu-devtools (72.1-6) ... Setting up pkgconf-bin (1.8.1-4) ... Setting up libk5crypto3:amd64 (1.21.3-5) ... Setting up libgc1:amd64 (1:8.2.8-1) ... Setting up libsasl2-2:amd64 (2.1.28+dfsg1-9) ... Setting up autoconf (2.72-3) ... Setting up libnghttp3-9:amd64 (1.8.0-1) ... Setting up zlib1g-dev:amd64 (1:1.3.dfsg+really1.3.1-1+b1) ... Setting up libffi8:amd64 (3.4.7-1) ... Setting up libpcre2-posix3:amd64 (10.45-1) ... Setting up dwz (0.15-1+b1) ... Setting up sensible-utils (0.0.24) ... Setting up libuchardet0:amd64 (0.0.8-1+b2) ... Setting up libmd-dev:amd64 (1.1.0-2+b1) ... Setting up libtasn1-6:amd64 (4.20.0-2) ... Setting up git-man (1:2.47.2-0.1) ... Setting up netbase (6.4) ... Setting up libngtcp2-16:amd64 (1.11.0-1) ... Setting up libkrb5-3:amd64 (1.21.3-5) ... Setting up libevent-core-2.1-7t64:amd64 (2.1.12-stable-10+b1) ... Setting up libssh2-1t64:amd64 (1.11.1-1) ... Setting up libjs-jquery (3.6.1+dfsg+~3.5.14-1) ... Setting up libgc-dev:amd64 (1:8.2.8-1) ... Setting up readline-common (8.2-6) ... Setting up libicu-dev:amd64 (72.1-6) ... Setting up libxml2:amd64 (2.12.7+dfsg+really2.9.14-0.2+b2) ... Setting up libbsd-dev:amd64 (0.12.2-2) ... Setting up libldap2:amd64 (2.6.9+dfsg-2) ... Setting up automake (1:1.17-3) ... update-alternatives: using /usr/bin/automake-1.17 to provide /usr/bin/automake (automake) in auto mode Setting up libfile-stripnondeterminism-perl (1.14.1-2) ... Setting up libllvm19:amd64 (1:19.1.7-1+b1) ... Setting up libz3-dev:amd64 (4.13.3-1) ... Setting up libncurses-dev:amd64 (6.5+20250216-2) ... Setting up gettext (0.23.1-1) ... Setting up libgmp-dev:amd64 (2:6.3.0+dfsg-3) ... Setting up libpcre2-dev:amd64 (10.45-1) ... Setting up libyaml-dev:amd64 (0.2.5-2) ... Setting up libtool (2.5.4-4) ... Setting up libevent-pthreads-2.1-7t64:amd64 (2.1.12-stable-10+b1) ... Setting up libevent-openssl-2.1-7t64:amd64 (2.1.12-stable-10+b1) ... Setting up libidn2-0:amd64 (2.3.8-1) ... Setting up libffi-dev:amd64 (3.4.7-1) ... Setting up pkgconf:amd64 (1.8.1-4) ... Setting up intltool-debian (0.35.0+20060710.6) ... Setting up dh-autoreconf (20) ... Setting up libxml2-dev:amd64 (2.12.7+dfsg+really2.9.14-0.2+b2) ... Setting up libp11-kit0:amd64 (0.25.5-3) ... Setting up libedit-dev:amd64 (3.1-20250104-1) ... Setting up libgssapi-krb5-2:amd64 (1.21.3-5) ... Setting up libevent-extra-2.1-7t64:amd64 (2.1.12-stable-10+b1) ... Setting up libreadline8t64:amd64 (8.2-6) ... Setting up dh-strip-nondeterminism (1.14.1-2) ... Setting up groff-base (1.23.0-7) ... Setting up llvm-19-linker-tools (1:19.1.7-1+b1) ... Setting up llvm-19-runtime (1:19.1.7-1+b1) ... Setting up lld-19 (1:19.1.7-1+b1) ... Setting up libpython3.13-stdlib:amd64 (3.13.2-1) ... Setting up libpython3-stdlib:amd64 (3.13.2-2) ... Setting up libclang-cpp19 (1:19.1.7-1+b1) ... Setting up libgnutls30t64:amd64 (3.8.9-2) ... Setting up python3.13 (3.13.2-1) ... Setting up po-debconf (1.0.21+nmu1) ... Setting up libpsl5t64:amd64 (0.21.2-1.1+b1) ... Setting up python3 (3.13.2-2) ... Setting up man-db (2.13.0-1) ... Not building database; man-db/auto-update is not 'true'. Setting up python3-pygments (2.18.0+dfsg-2) ... Setting up librtmp1:amd64 (2.4+20151223.gitfa8646d.1-2+b5) ... Setting up libevent-dev (2.1.12-stable-10+b1) ... Setting up libngtcp2-crypto-gnutls8:amd64 (1.11.0-1) ... Setting up crystal (1.14.0+dfsg-1) ... Setting up libcurl4t64:amd64 (8.12.1-3) ... Setting up libcurl3t64-gnutls:amd64 (8.12.1-3) ... Setting up python3-yaml (6.0.2-1+b2) ... Setting up debhelper (13.24.1) ... Setting up git (1:2.47.2-0.1) ... Setting up llvm-19 (1:19.1.7-1+b1) ... Setting up llvm-19-tools (1:19.1.7-1+b1) ... Setting up llvm-19-dev (1:19.1.7-1+b1) ... Processing triggers for libc-bin (2.41-4) ... Reading package lists... Building dependency tree... Reading state information... Reading extended state information... Initializing package states... Writing extended state information... 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 dpkg-buildpackage: info: source package crystal dpkg-buildpackage: info: source version 1.14.0+dfsg-1 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by David Suárez dpkg-source --before-build . dpkg-buildpackage: info: host architecture amd64 debian/rules clean dh clean dh_auto_clean make -j42 clean make[1]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg' rm -rf .build rm -rf ./docs rm -rf src/llvm/ext/llvm_ext.o rm -rf man/*.gz make[1]: Leaving directory '/build/reproducible-path/crystal-1.14.0+dfsg' debian/rules override_dh_clean make[1]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg' dh_clean rm -f man/*.gz make[1]: Leaving directory '/build/reproducible-path/crystal-1.14.0+dfsg' debian/rules binary dh binary dh_update_autotools_config dh_autoreconf 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 make[2]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg' Using /usr/bin/llvm-config-19 [version=19.1.7] 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 [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[2]: Entering directory '/build/reproducible-path/crystal-1.14.0+dfsg' Using /usr/bin/llvm-config-19 [version=19.1.7] 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 Using compiled compiler at .build/crystal In lib/markd/src/markd/renderers/html_renderer.cr:238:7 238 | {% if Crystal::VERSION < "1.2.0" %} ^ Warning: expanding macro There was a problem expanding macro 'macro_140673634810272' Called macro defined in lib/markd/src/markd/renderers/html_renderer.cr:238:7 238 | {% if Crystal::VERSION < "1.2.0" %} Which expanded to: 1 | > 2 | title = URI.encode(node.first_child.text) 3 | @output_io << %() 4 | Warning: Deprecated URI.encode. Use `.encode_path` instead. 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: 22682 Crystal::Repl::Interpreter enum does enum new does enum new does enum value does enum value Semantic: extern struct can use extern struct in lib can use extern struct in lib can include module can include module can be passed to C fun can be passed to C fun declares extern union with no constructor declares extern union with no constructor declares with constructor declares with constructor errors if using non-primitive for field type errors if using non-primitive for field type errors if using non-primitive for field type via module errors if using non-primitive for field type via module can new with named args can new with named args overrides getter overrides getter errors if using non-primitive type in constructor errors if using non-primitive type in constructor declares extern struct with no constructor declares extern struct with no constructor Semantic: not doesn't restrict and doesn't restrict and filters types inside if filters types inside if filters types with !is_a? filters types with !is_a? types not as NoReturn if exp is NoReturn types not as NoReturn if exp is NoReturn types not types not doesn't restrict and in while (#4243) doesn't restrict and in while (#4243) filters types inside if/else filters types inside if/else Crystal::Repl::Interpreter pointers discards pointer get discards pointer get pointerof class var pointerof class var interprets pointer realloc wrapper interprets pointer realloc wrapper discards pointerof discards pointerof interprets pointer set and get (int) interprets pointer set and get (int) discards pointer set discards pointer set pointerof instance var pointerof instance var interprets pointer add interprets pointer add discards pointer diff discards pointer diff discards pointer new discards pointer new interprets pointer set and get (union type, setter value) interprets pointer set and get (union type, setter value) pointerof read `StaticArray#@buffer` (2) pointerof read `StaticArray#@buffer` (2) interprets nilable pointer truthiness interprets nilable pointer truthiness interprets pointer diff interprets pointer diff discards pointer malloc discards pointer malloc pointerof read instance var pointerof read instance var interprets pointer realloc interprets pointer realloc interprets pointer new and pointer address interprets pointer new and pointer address pointerof read `StaticArray#@buffer` (1) pointerof read `StaticArray#@buffer` (1) interprets pointerof and mutates memory (there are more variables) interprets pointerof and mutates memory (there are more variables) discards pointer add discards pointer add interprets pointer diff, negative interprets pointer diff, negative interprets pointerof, mutates pointer, read var interprets pointerof, mutates pointer, read var discards pointer realloc discards pointer realloc interprets pointer set and get (bool) interprets pointer set and get (bool) interprets pointerof, mutates var, read pointer interprets pointerof, mutates var, read pointer interprets pointer set and get (union type) interprets pointer set and get (union type) interprets pointer set and get (clear stack) interprets pointer set and get (clear stack) Code gen: method_missing does method_missing macro with virtual type (2) does method_missing macro with virtual type (2) does method_missing macro with args (with call) does method_missing macro with args (with call) does method_missing macro with included module does method_missing macro with included module does method_missing macro with block but not using it does method_missing macro with block but not using it does method_missing macro without args (with call) does method_missing macro without args (with call) does method_missing with assignment (2) (bug) does method_missing with assignment (2) (bug) 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 virtual type (1) does method_missing macro with virtual type (1) does method_missing macro with args does method_missing macro with args does method_missing macro with virtual type (7) does method_missing macro with virtual type (7) works with named arguments (#3654) works with named arguments (#3654) does method_missing macro with virtual type (6) does method_missing macro with virtual type (6) does method_missing macro with virtual type (3) does method_missing macro with virtual type (3) does method_missing macro without args does method_missing macro without args does method_missing macro with top level method involved does method_missing macro with top level method involved finds method_missing with 'with ... yield' finds method_missing with 'with ... yield' does method_missing macro with block does method_missing macro with block does method_missing macro with virtual type (8) does method_missing macro with virtual type (8) does method_missing macro with virtual type (4) does method_missing macro with virtual type (4) does method_missing generating method does method_missing generating method forwards forwards does method_missing macro with virtual type (5) does method_missing macro with virtual type (5) does method_missing macro with module involved does method_missing macro with module involved does method_missing with assignment (bug) does method_missing with assignment (bug) Semantic: class var declares class variable declares class variable says undefined class variable says undefined class variable declares class variable (2) declares class variable (2) types class var as nil if not assigned at the top level types class var as nil if not assigned at the top level allows self.class as type var in class body (#537) allows self.class as type var in class body (#537) 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 infers type from T.new infers type from T.new 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 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) can access constant from generic metaclass (#3719) can access constant from generic metaclass (#3719) can find class var in subclass can find class var in subclass 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 if class variable not nilable without initializer errors if class variable not nilable without initializer declares uninitialized (#2935) declares uninitialized (#2935) types class var inside proc literal inside class types class var inside proc literal inside class doesn't error on recursive dependency if var is nilable (#2943) doesn't error on recursive dependency if var is nilable (#2943) redefines class variable type redefines class variable type errors on undefined constant (1) errors on undefined constant (1) errors when typing a class variable inside a method errors when typing a class variable inside a method 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) errors on undefined constant (2) errors on undefined constant (2) declares class var in generic module declares class var in generic 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 errors if using class variable at the top level errors if using class variable at the top level can find class var through included module can find class var through included module errors if redefining class var type in included module errors if redefining class var type in included module errors if using local variable in initializer errors if using local variable in initializer types class var types class var declares class var in generic class declares class var in generic class errors when using Class (#2605) errors when using Class (#2605) errors if redefining class var type in subclass errors if redefining class var type in subclass infers type from number literal infers type from number literal Crystal::Repl::Interpreter autocast autocasts int in multidispatch autocasts int in multidispatch 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 ivar initializer (#12216) autocasts symbol to enum in ivar initializer (#12216) autocasts number literal to float autocasts number literal to float autocasts number literal to integer autocasts number literal to integer autocasts symbol to enum autocasts symbol to enum autocasts symbol to enum in multidispatch (#11782) autocasts symbol to enum in multidispatch (#11782) autocasts integer var to float (#12560) autocasts integer var to float (#12560) Crystal::Repl::Interpreter command expansion expands ldflags expands ldflags variadic calls promotes int promotes int promotes float promotes float promotes enum promotes enum Semantic: generic class recomputes on new subclass recomputes on new subclass creates pointer of generic type and uses it creates pointer of generic type and uses it doesn't crash when matching restriction against number literal (#3157) doesn't crash when matching restriction against number literal (#3157) correctly checks argument count when target type has a splat (#9855) correctly checks argument count when target type has a splat (#9855) inherits instance var type annotation from generic to concrete with T inherits instance var type annotation from generic to concrete with T splats generic type var splats generic type var 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) shows error due to generic instantiation (#7083) shows error due to generic instantiation (#7083) inherits instance var type annotation from generic to generic to concrete inherits instance var type annotation from generic to generic to concrete allows T::Type with T a generic type allows T::Type with T a generic type creates pointer of generic type and uses it (2) creates pointer of generic type and uses it (2) inherits non-generic to generic (2) inherits non-generic to generic (2) 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) finds generic type argument from method with default value finds generic type argument from method with default value errors if using Value in a generic type errors if using Value in a generic type errors if using Tuple in a generic type errors if using Tuple in a generic type can use type var that resolves to number in restriction using Int128 can use type var that resolves to number in restriction using Int128 nests generics with the same type var (#3297) nests generics with the same type var (#3297) instantiates generic variadic class, accesses T from instance method, more args instantiates generic variadic class, accesses T from instance method, more args errors if inheriting from generic and incorrect number of type vars errors if inheriting from generic and incorrect number of type vars inherits twice inherits twice can use type var that resolves to number in restriction (#6502) can use type var that resolves to number in restriction (#6502) 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 errors if using Pointer in a generic type errors if using Pointer in a generic type doesn't consider unbound generic instantiations as concrete (#7200) doesn't consider unbound generic instantiations as concrete (#7200) types macro def with generic instance types macro def with generic instance errors if using Class in a generic type errors if using Class in a generic type instantiates generic class with default argument in initialize (#394) instantiates generic class with default argument in initialize (#394) virtual metaclass type implements super virtual metaclass type (#3007) virtual metaclass type implements super virtual metaclass type (#3007) restricts generic type argument through alias in a non-strict way restricts generic type argument through alias in a non-strict way 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 Number in recursive alias errors if using Number in recursive alias 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) subclasses twice with same generic class (#3423) subclasses twice with same generic class (#3423) 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 a generic type errors if using Number in a generic type can use virtual type for generic class can use virtual type for generic class inherits instance var type annotation from generic to concrete inherits instance var type annotation from generic to concrete errors on too nested generic instance errors on too nested generic instance inherits from generic with instantiation with instance var inherits from generic with instantiation with instance var errors if using Object in a generic type errors if using Object in a generic type never types Path as virtual outside generic type parameter (#3989) never types Path as virtual outside generic type parameter (#3989) instantiates generic variadic class, accesses T from instance method, more args (2) instantiates generic variadic class, accesses T from instance method, more args (2) inherits class methods from generic class inherits class methods from generic class inherits from generic with forwarding (2) inherits from generic with forwarding (2) initializes instance variable of generic type using type var (#961) initializes instance variable of generic type using type var (#961) unifies generic metaclass types unifies generic metaclass types instantiates generic variadic class, accesses T from instance method through superclass instantiates generic variadic class, accesses T from instance method through superclass errors if splatting a non-tuple (#9853) errors if splatting a non-tuple (#9853) 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) 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 replaces type parameters for virtual types (#3235) replaces type parameters for virtual types (#3235) errors if using Reference in a generic type errors if using Reference in a generic type errors if using Number | String in a generic type errors if using Number | String in a generic type errors on too nested generic instance, with union type errors on too nested generic instance, with union type allows initializing instance variable (#665) allows initializing instance variable (#665) 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 restricts non-generic to generic restricts non-generic to generic errors if using Proc in a generic type errors if using Proc in a generic type restricts generic to generic with free var restricts generic to generic with free var gives helpful error message when generic type var is missing (#1526) gives helpful error message when generic type var is missing (#1526) errors if using Struct in a generic type errors if using Struct in a generic type errors if using Enum in a generic type errors if using Enum in a generic type inherits from generic with instantiation inherits from generic with instantiation doesn't crash when matching restriction against number literal (2) (#3157) doesn't crash when matching restriction against number literal (2) (#3157) disallow using a non-instantiated generic type as a generic type argument disallow using a non-instantiated generic type as a generic type argument errors if passing integer literal to Proc as generic argument (#1120) errors if passing integer literal to Proc as generic argument (#1120) never types Generic as virtual outside generic type parameter (#3989) never types Generic as virtual outside generic type parameter (#3989) 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 Int in a generic type errors if using Int in a generic type instantiates generic variadic class, accesses T from class method instantiates generic variadic class, accesses T from class method allows initializing instance variable in inherited generic type allows initializing instance variable in inherited generic type restricts non-generic to generic with free var restricts non-generic to generic with free var errors if using Number in alias errors if using Number in alias inherits from generic with forwarding (1) inherits from generic with forwarding (1) can define instance var forward declared (#962) can define instance var forward declared (#962) inherits non-generic to generic (1) inherits non-generic to generic (1) restricts virtual generic instance type against generic (#3351) restricts virtual generic instance type against generic (#3351) calls super on generic type when superclass has no initialize (#933) calls super on generic type when superclass has no initialize (#933) instantiates generic variadic class, accesses T from instance method instantiates generic variadic class, accesses T from instance method doesn't duplicate overload on generic class with class method (#2385) doesn't duplicate overload on generic class with class method (#2385) defines empty initialize on inherited generic class defines empty initialize on inherited generic class replaces type parameters in virtual metaclasses (#10691) replaces type parameters in virtual metaclasses (#10691) errors on too nested tuple instance errors on too nested tuple instance disallow using a non-instantiated module type as a generic type argument disallow using a non-instantiated module type as a generic type argument 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 Float in a generic type errors if using Float in a generic type instantiates generic variadic class, accesses T from class method through superclass instantiates generic variadic class, accesses T from class method through superclass resolves T through metaclass inheritance (#7914) resolves T through metaclass inheritance (#7914) errors if passing integer literal to Tuple as generic argument (#1120) errors if passing integer literal to Tuple as generic argument (#1120) Code gen: module codegens module with virtual type codegens module with virtual type codegens pointer of module with method with two including types codegens pointer of module with method with two including types codegens pointer of module and pass value to method codegens pointer of module and pass value to method expands modules to its including types (2) (#1916) expands modules to its including types (2) (#1916) expands modules to its including types (#1916) expands modules to its including types (#1916) codegens cast to module with class and struct to nilable module codegens cast to module with class and struct to nilable module codegens dispatch of union with module (#3647) codegens dispatch of union with module (#3647) 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 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 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 codegens pointer of module with method with two including types with one struct codegens proc of a module that was never included codegens proc of a module that was never included 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 proc with module type declares proc with module type 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) can use generic module as instance variable type (2) can use generic module as instance variable type (2) codegens cast to module that includes bool codegens cast to module that includes bool codegens pointer of module with method codegens pointer of module with method can instantiate generic module can instantiate generic module 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 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 and includes generic module, in macros T is a tuple literal declares and includes generic module, in macros T is a tuple literal Crystal::Macro call methods executes named args executes named args executes global? executes global? executes named args name executes named args name executes name executes name executes block arg executes block arg executes named args value executes named args value executes block executes block executes receiver executes receiver executes block arg (nop) executes block arg (nop) executes args executes args string methods executes empty executes empty executes tr executes tr executes to_i(base) executes to_i(base) executes camelcase executes camelcase executes string chomp executes string chomp executes split with char argument executes split with char argument executes string includes? char (false) executes string includes? char (false) executes underscore executes underscore executes to_utf16 executes to_utf16 executes lines executes lines executes string ends_with? char (false) executes string ends_with? char (false) executes split without arguments executes split without arguments executes string > macroid executes string > macroid executes titleize executes titleize executes string starts_with? char (false) executes string starts_with? char (false) executes string != string executes string != string executes size executes size executes string includes? string (false) executes string includes? string (false) executes string ends_with? string (false) executes string ends_with? string (false) executes chars executes chars executes downcase executes downcase executes gsub executes gsub executes camelcase with lower executes camelcase with lower executes string ends_with? string (true) executes string ends_with? string (true) executes string > string executes string > string executes string includes? string (true) executes string includes? string (true) executes string + char executes string + char executes capitalize executes capitalize executes string starts_with? string (true) executes string starts_with? string (true) executes string includes? char (true) executes string includes? char (true) executes camelcase with invalid lower arg type executes camelcase with invalid lower arg type executes string < string executes string < string executes string starts_with? char (true) executes string starts_with? char (true) executes [] with computed range executes [] with computed range executes to_i executes to_i executes [] with inclusive range executes [] with inclusive range executes string ends_with? char (true) executes string ends_with? char (true) executes count executes count executes [] with exclusive range executes [] with exclusive range executes string + string executes string + string executes [] with incomplete range executes [] with incomplete range executes strip executes strip executes split with argument executes split with argument executes string =~ (false) executes string =~ (false) executes string == string executes string == string executes string < macroid executes string < macroid executes string =~ (true) executes string =~ (true) executes string starts_with? string (false) executes string starts_with? string (false) executes upcase executes upcase Crystal::ArrayLiteral executes of executes of executes sort with strings executes sort with strings executes [] with computed range executes [] with computed range executes includes? executes includes? executes []= executes []= executes sort with numbers executes sort with numbers executes first executes first executes select executes select executes reduce with initial value executes reduce with initial value executes [] with two numbers executes [] with two numbers executes join executes join calls block exactly once for each element in #sort_by calls block exactly once for each element in #sort_by executes map with constants executes map with constants executes index 0 executes index 0 executes reject executes reject executes find (finds) executes find (finds) executes sort with ids executes sort with ids #each #each executes last executes last executes sort with ids and strings executes sort with ids and strings executes all? (false) executes all? (false) executes empty? executes empty? executes index out of bounds executes index out of bounds executes join with strings executes join with strings executes splat with symbols and strings executes splat with symbols and strings #+ with ArrayLiteral argument concatenates the literals into an ArrayLiteral concatenates the literals into an ArrayLiteral with TupleLiteral argument concatenates the literals into an ArrayLiteral concatenates the literals into an ArrayLiteral executes type executes type #- 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 type (nop) executes type (nop) executes sort_by executes sort_by executes map executes map executes any? (false) executes any? (false) executes [] with range executes [] with range executes all? (true) executes all? (true) creates an array literal with a var creates an array literal with a var executes find (doesn't find) executes find (doesn't find) executes map with arg executes map with arg #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 splat executes splat #each_with_index without the index argument builds the correct array builds the correct array without either argument builds the correct array builds the correct array without the element argument builds the correct array builds the correct array with both arguments builds the correct array builds the correct array executes unshift executes unshift executes splat with splat executes splat with splat executes push executes push executes identify executes identify executes uniq executes uniq executes [] with incomplete range executes [] with incomplete range executes is_a? executes is_a? executes size executes size executes reduce with no initial value executes reduce with no initial value executes any? (true) executes any? (true) executes of (nop) executes of (nop) executes index 1 executes index 1 assign methods executes target executes target executes value executes value Crystal::ModuleDef executes type_vars executes type_vars executes name executes name executes body executes body executes splat_index executes splat_index executes kind executes kind macro if methods executes cond executes cond executes then executes then executes else executes else env has key has key doesn't have key doesn't have key control expression methods executes exp (nop) executes exp (nop) executes exp executes exp Crystal::MacroVar executes expressions executes expressions executes name executes name flag? has flag has flag doesn't have flag doesn't have flag Crystal::ExternalVar executes name executes name executes type executes type executes real_name executes real_name arg methods executes default_value executes default_value executes restriction executes restriction executes internal_name executes internal_name executes name executes name Crystal::AsmOperand executes exp executes exp executes constraint executes constraint type declaration methods executes value executes value executes var when instance var executes var when instance var executes type executes type executes var executes var macro id methods forwards methods to string forwards methods to string compares with symbol compares with symbol compares with string compares with string Crystal::Select executes whens executes whens executes else executes else expressions methods executes expressions executes expressions proc literal methods executes args executes args executes body executes body executes return_type executes return_type block methods executes args executes args executes body executes body executes splat_index executes splat_index Crystal::TypeDef executes name executes name executes type executes type multi_assign methods executes values executes values executes targets executes targets Crystal::Primitive executes name executes name Crystal::ClassDef executes kind executes kind executes struct? executes struct? executes abstract? executes abstract? executes name executes name executes type_vars executes type_vars executes superclass executes superclass executes body executes body executes splat_index executes splat_index cast methods executes obj executes obj executes to executes to or methods executes left executes left executes right executes right Crystal::RangeLiteral executes to_a executes to_a executes end executes end #each #each executes begin executes begin executes map executes map executes excludes_end? executes excludes_end? macro for methods executes vars executes vars executes body executes body executes exp executes exp Crystal::Asm executes text executes text executes outputs executes outputs executes alignstack? executes alignstack? executes clobbers executes clobbers executes volatile? executes volatile? executes can_throw? executes can_throw? executes intel? executes intel? executes inputs executes inputs Crystal::TypeNode #union? false false true true executes private? false false true true #name simple type returns the name of the type returns the name of the type generic_args with an invalid type argument should raise the proper exception should raise the proper exception 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 generic type includes the generic_args of the type by default includes the generic_args of the type by default includes the generic_args of the instantiated type by default includes the generic_args of the instantiated type by default namespaced type should return the FQN of the type should return the FQN of the type generic instance 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 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 executes class methods executes class methods executes > executes > executes type_vars executes type_vars executes size of tuple executes size of tuple executes class vars executes class vars public? true true false false #class? Crystal::GenericClassType class class struct struct Crystal::NonGenericClassType class class struct struct Crystal::NonGenericModuleType Crystal::NonGenericModuleType Crystal::GenericModuleType Crystal::GenericModuleType executes size of tuple metaclass executes size of tuple metaclass #id does not include trailing + for virtual type does not include trailing + for virtual type #struct? Crystal::NonGenericModuleType Crystal::NonGenericModuleType Crystal::NonGenericClassType struct struct class class Crystal::GenericModuleType Crystal::GenericModuleType Crystal::GenericClassType class class struct struct #nilable? true true false false executes methods executes methods #abstract? Crystal::GenericModuleType Crystal::GenericModuleType Crystal::NonGenericModuleType Crystal::NonGenericModuleType Crystal::GenericClassType class non-abstract non-abstract abstract abstract struct abstract abstract non-abstract non-abstract Crystal::NonGenericClassType class abstract abstract non-abstract non-abstract struct non-abstract non-abstract abstract abstract #warning emits a warning at a specific node emits a warning at a specific node executes != executes != executes superclass executes superclass executes resolve? executes resolve? executes union_types (non-union) executes union_types (non-union) #has_inner_pointers? works on primitive values works on primitive values works on references works on references works on ReferenceStorage works on ReferenceStorage works on structs works on structs executes class executes class #module? Crystal::NonGenericModuleType Crystal::NonGenericModuleType Crystal::GenericClassType class class struct struct Crystal::GenericModuleType Crystal::GenericModuleType Crystal::NonGenericClassType class class struct struct executes instance_vars executes instance_vars executes class_vars on symbol type executes class_vars on symbol type executes instance_vars on symbol type executes instance_vars on symbol type executes < executes < == and != devirtualize generic type arguments (#10730) == and != devirtualize generic type arguments (#10730) executes <= executes <= visibility private private public public executes >= executes >= executes instance_vars on metaclass executes instance_vars on metaclass executes class_vars on metaclass executes class_vars on metaclass executes instance executes instance executes ancestors (with generic) executes ancestors (with generic) executes ancestors executes ancestors #includers returns an array of types `self` is directly included in returns an array of types `self` is directly included in executes == executes == executes class vars (with inheritance) executes class vars (with inheritance) executes union_types (union) executes union_types (union) executes resolve executes resolve compares versions compares versions Crystal::CStructOrUnionDef executes name executes name executes body executes body executes union? executes union? executes kind executes kind Crystal::TupleLiteral executes [] with range executes [] with range executes [] with 0 executes [] with 0 executes [] with incomplete range executes [] with incomplete range executes push executes push executes splat with symbols and strings executes splat with symbols and strings #each_with_index without either 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 the element argument builds the correct array builds the correct array executes any? (true) executes any? (true) executes unshift executes unshift #- 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 find (doesn't find) executes find (doesn't find) creates a tuple literal with a var creates a tuple literal with a var #each #each executes [] out of bounds executes [] out of bounds executes all? (false) executes all? (false) executes is_a? executes is_a? executes any? (false) executes any? (false) executes map with constants executes map with constants executes map executes map executes reject executes reject executes sort with ids and strings executes sort with ids and strings executes first executes first executes sort with strings executes sort with strings executes [] with 1 executes [] with 1 executes map with arg executes map with arg executes [] with computed range executes [] with computed range executes join executes join #map_with_index with both arguments returns the resulting tuple returns the resulting tuple without either argument returns the resulting tuple returns the resulting tuple without the index argument returns the resulting tuple returns the resulting tuple without the element argument returns the resulting tuple returns the resulting tuple executes find (finds) executes find (finds) executes splat with splat executes splat with splat executes includes? executes includes? executes empty? executes empty? executes splat with arg executes splat with arg executes splat executes splat executes all? (true) executes all? (true) executes uniq executes uniq executes select executes select executes last executes last executes sort with ids executes sort with ids executes size executes size #+ 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 join with strings executes join with strings executes sort with numbers executes sort with numbers Crystal::External executes is_a? executes is_a? printing puts puts p p p! p! print print pp pp pp! pp! generic methods executes named_args executes named_args executes resolve executes resolve executes name executes name executes type_vars executes type_vars executes resolve? executes resolve? executes types executes types metaclass methods executes instance executes instance executes resolve executes resolve executes resolve? executes resolve? responds_to methods executes name executes name executes receiver executes receiver annotation methods executes [] with SymbolLiteral executes [] with SymbolLiteral executes [] with StringLiteral executes [] with StringLiteral executes [] with NumberLiteral executes [] with NumberLiteral executes [] with other ASTNode, but raises an error executes [] with other ASTNode, but raises an error executes [] with MacroId executes [] with MacroId executes name executes name char methods executes ord executes ord proc pointer methods executes obj when absent executes obj when absent executes global? executes global? executes name executes name executes args when not empty executes args when not empty executes args when empty executes args when empty executes obj when present executes obj when present instancevar methods executes name executes name nilable cast methods executes obj executes obj executes to executes to Crystal::Extend executes name executes name yield methods executes scope executes scope executes scope (nop) executes scope (nop) executes expressions executes expressions require methods executes path executes path path methods executes names executes names executes resolve executes resolve executes global? executes global? executes types executes types executes global executes global executes resolve? executes resolve? classvar methods executes name executes name Crystal::TypeOf executes args executes args global methods executes name executes name executes assign without output executes assign without output #warning emits a top level warning emits a top level warning metavar methods executes name executes name executes nothing executes nothing executes id executes id executes is_a? executes is_a? Crystal::EnumDef executes base_type executes base_type executes body executes body executes name executes name executes kind executes kind visibility modifier methods executes visibility executes visibility executes exp executes exp instancevar methods executes name executes name Crystal::MacroExpression executes output? executes output? executes exp executes exp while methods executes cond executes cond executes body executes body is_a methods executes receiver executes receiver executes arg executes arg exception handler methods executes rescues executes rescues executes else executes else executes ensure executes ensure executes else (nop) executes else (nop) executes body executes body executes rescue types executes rescue types executes ensure (nop) executes ensure (nop) executes rescue body executes rescue body executes rescue name executes rescue name regex methods executes options executes options executes source executes source offsetof methods executes type executes type executes offset executes offset Crystal::MacroLiteral executes value executes value Crystal::NamedTupleLiteral executes to_a executes to_a executes [] executes [] executes values executes values executes keys executes keys executes [] not found executes [] not found executes []= executes []= executes size executes size executes is_a? executes is_a? executes empty? executes empty? executes map executes map executes [] with invalid key type executes [] with invalid key type executes double splat executes double splat 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 #each without the key 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 without either argument builds the correct array builds the correct array executes double splat with arg executes double splat with arg splat methods executes exp executes exp Crystal::AnnotationDef executes body executes body executes name executes name executes kind executes kind uninitialized var methods executes type executes type executes var executes var Crystal::FunDef executes body executes body executes real_name executes real_name executes name executes name executes return_type executes return_type executes args executes args executes has_body? executes has_body? executes variadic? executes variadic? number methods executes & executes & executes ** executes ** executes kind executes kind executes - executes - executes <= (false) executes <= (false) executes <= (true) executes <= (true) executes << executes << executes <=> (returns nil) executes <=> (returns nil) executes > (false) executes > (false) executes + and preserves type executes + and preserves type executes + executes + executes >= (true) executes >= (true) executes + with float executes + with float executes math operations using U/Int128 executes math operations using U/Int128 executes > (true) executes > (true) executes // executes // executes unary ~ executes unary ~ executes | executes | executes unary - executes unary - executes * executes * executes >= (false) executes >= (false) #to_number #to_number executes <=> executes <=> executes ^ executes ^ preserves integer size (#10713) preserves integer size (#10713) executes unary + executes unary + executes % executes % executes < (true) executes < (true) executes >> executes >> executes < (false) executes < (false) Crystal::HashLiteral executes has_key? executes has_key? executes keys executes keys executes of_key (nop) executes of_key (nop) executes double splat executes double splat executes size executes size executes double splat executes double splat executes []= executes []= executes of_key executes of_key executes to_a executes to_a executes empty? executes empty? executes type (nop) executes type (nop) executes of_value executes of_value creates a hash literal with a var creates a hash literal with a var executes [] not found executes [] not found executes values executes values executes type executes type #each without the value argument builds the correct array builds the correct array without either argument builds the correct array builds the correct array without the key argument builds the correct array builds the correct array with both arguments builds the correct array builds the correct array executes is_a? executes is_a? executes of_value (nop) executes of_value (nop) executes [] executes [] executes map executes map executes double splat with arg executes double splat with arg Crystal::Alias executes type executes type executes name executes name def methods executes name executes name executes free_vars executes free_vars executes splat_index executes splat_index executes block_arg executes block_arg executes accepts_block? executes accepts_block? executes return_type executes return_type executes double_splat executes double_splat executes receiver executes receiver executes args executes args executes body executes body executes visibility executes visibility executes abstract? executes abstract? and methods executes left executes left executes right executes right if methods executes else executes else executes then executes then executes cond executes cond executes else (nop) executes else (nop) node methods 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 numbers (false) executes != on numbers (false) #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) symbolize expands macro with symbolize call on id expands macro with symbolize call on id expands macro with symbolize call on symbol expands macro with symbolize call on symbol expands macro with symbolize call on string expands macro with symbolize call on string executes == on numbers (true) executes == on numbers (true) location line_number line_number column number column number filename filename end column number end column number end line_number end line_number #doc_comment 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) 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 executes == on symbols (true) (#240) executes == on symbols (true) (#240) #is_a? union argument union argument union argument, mergeable union argument, mergeable union argument, contains NoReturn union argument, contains NoReturn union argument, unimplemented types union argument, unimplemented types union argument, duplicate type union argument, duplicate type union argument, undefined types union argument, undefined types executes != on numbers (true) executes != on numbers (true) stringify expands macro with stringify call on string expands macro with stringify call on string 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 number expands macro with stringify call on number executes == on symbols (false) (#240) executes == on symbols (false) (#240) id expands macro with id call on symbol expands macro with id call on symbol expands macro with id call on string expands macro with id call on string expands macro with id call on global path expands macro with id call on global path 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 expands macro with id call on char expands macro with id call on char expands macro with id call on call expands macro with id call on call executes == on numbers (false) executes == on numbers (false) #nil? NilLiteral NilLiteral NumberLiteral NumberLiteral Nop Nop readinstancevar methods executes name executes name executes obj executes obj Crystal::Include executes name executes name executes assign executes assign proc notation methods gets multiple inputs gets multiple inputs 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 union methods executes resolve? executes resolve? executes resolve executes resolve executes types executes types unary expression methods executes is_a? executes is_a? executes exp executes exp macro methods executes splat_index executes splat_index executes double_splat executes double_splat executes name executes name executes body executes body executes visibility executes visibility executes args executes args executes block_arg executes block_arg #parse_type exposes syntax warnings exposes syntax warnings raises on extra unparsed tokens after the type raises on extra unparsed tokens after the type union - Union union - Union generic generic metaclass metaclass raises on empty string raises on empty string path path raises on extra unparsed tokens before the type raises on extra unparsed tokens before the type union - in generic union - in generic union - | union - | raises on non StringLiteral arguments raises on non StringLiteral arguments proc proc Crystal::LibDef executes kind executes kind executes body executes body executes name executes name symbol methods executes symbol != symbol executes symbol != symbol executes symbol == symbol executes symbol == symbol forwards methods to string forwards methods to string case methods when executes else executes else executes when body executes when body executes exhaustive? executes exhaustive? executes whens executes whens executes when conds executes when conds executes when exhaustive? executes when exhaustive? executes cond executes cond in executes exhaustive? executes exhaustive? executes whens executes whens executes when exhaustive? executes when exhaustive? Crystal::Playground::Session assert assert Crystal::FFI::CallInterface .variadic zero varargs zero varargs validates args size validates args size basic basic .new make struct make struct simple call simple call array array all primitive arg types all primitive arg types with args with args sum struct sum struct Semantic: struct errors if defining finalize for struct (#3840) errors if defining finalize for struct (#3840) passes subtype check with generic module type on virtual type (3) passes subtype check with generic module type on virtual type (3) 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 (2) (#10302) passes subtype check with generic module type on virtual type (2) (#10302) 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 module can't reopen as module doesn't make virtual for Int doesn't make virtual for Int doesn't make virtual for Float doesn't make virtual for Float types generic struct declaration types generic struct declaration can't reopen as class can't reopen as class unifies type to virtual type unifies type to virtual type can cast to base abstract struct can cast to base abstract struct 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 doesn't make virtual for Value doesn't make virtual for Value allows struct to participate in virtual allows struct to participate in virtual can't be nilable can't be nilable types struct declaration types struct declaration Semantic: pointer allows using pointer with subclass allows using pointer with subclass errors with non-matching generic value with value= (#10211) errors with non-matching generic value with value= (#10211) types pointer of constant types pointer of constant type pointer casting of object type type pointer casting of object type pointer of value error pointer of value error type pointer casting type pointer casting types int pointer types int pointer types Pointer.malloc types Pointer.malloc 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) types realloc types realloc pointer of class raises error pointer of class raises error 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 detects recursive pointerof expansion (2) (#1654) detects recursive pointerof expansion (2) (#1654) takes pointerof lib external var takes pointerof lib external var can assign nil to void pointer can assign nil to void pointer errors if doing Pointer.allocate errors if doing Pointer.allocate doesn't crash if pointerof expansion type has generic splat parameter (#11808) doesn't crash if pointerof expansion type has generic splat parameter (#11808) detects recursive pointerof expansion (4) detects recursive pointerof expansion (4) create pointer by address create pointer by address 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 pointer diff types pointer diff detects recursive pointerof expansion (#551) (#553) detects recursive pointerof expansion (#551) (#553) pointer malloc creates new type pointer malloc creates new type can pass any pointer to something expecting void* in lib call can pass any pointer to something expecting void* in lib call 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) types pointer value on typedef types pointer value on typedef can assign pointerof virtual type (#8216) can assign pointerof virtual type (#8216) types pointer add types pointer add says undefined variable (#7556) says undefined variable (#7556) Normalize: or normalizes or with ! on var.is_a?(...) normalizes or with ! on var.is_a?(...) normalizes or without variable normalizes or without variable normalizes or with assignment on the left normalizes or with assignment on the left 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 with is_a? on var normalizes or with is_a? on var Code gen: asm passes correct string length to LLVM passes correct string length to LLVM codegens with intel dialect codegens with intel dialect codegens with two outputs codegens with two outputs codegens with two inputs codegens with two inputs codegens with one input codegens with one input codegens without inputs codegens without inputs Compiler 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 treats all arguments post-filename as program arguments treats all arguments post-filename as program arguments has a valid version has a valid version Code gen: named args calls new with named arg calls new with named arg 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 calls with named arg as object method calls with named arg as object method sends one regular argument as named argument sends one regular argument as named argument 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 (2) uses bare splat in new (2) sends two regular arguments as named arguments sends two regular arguments as named arguments calls twice with different types calls twice with different types calls with named arg and other args calls with named arg and other args overloads based on required named args, with restrictions overloads based on required named args, with restrictions overloads based on required named args overloads based on required named args uses named args in dispatch uses named args in dispatch MacroExpander expands macro with nil expands macro with nil does regular if does regular if expands macro with tuple expands macro with tuple expands macro with symbol substitution expands macro with symbol substitution expands macro with char expands macro with char expands macro with hash expands macro with hash outputs invisible location pragmas outputs invisible location pragmas expands macro with string interpolation expands macro with string interpolation does not expand when macro expression is {% ... %} does not expand when macro expression is {% ... %} does regular unless does regular unless expands macro with string substitution expands macro with string substitution expands macro with array expands macro with array expands macro with argument-less call substitution expands macro with argument-less call substitution expands simple macro expands simple macro expands macro with and (2) expands macro with and (2) for 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 expands macro with for over hash literal expands macro with for over hash literal with index expands macro with for over hash literal with index expands macro with for over range literal expands macro with for over range 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 array literal expands macro with for over array literal expands macro with for over array literal with index expands macro with for over array literal with index expands macro with for over embedded array literal expands macro with for over embedded array literal expands macro with for over tuple literal expands macro with for over tuple literal expands macro with range expands macro with range if expands macro with if with not expands macro with if with not expands macro with if with nop expands macro with if with nop expands macro with if when falsey expands macro with if when falsey 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 var substitution expands macro with var substitution expands macro with or (2) expands macro with or (2) can't use `yield` outside a macro can't use `yield` outside a macro expands macro with symbol expands macro with symbol expands macro with string expands macro with string expands macro with and (1) expands macro with and (1) expands macro with boolean expands macro with boolean expands macro with integer expands macro with integer expands macro with or (1) expands macro with or (1) Semantic: tuples errors if using two splat indices on restriction errors if using two splat indices on restriction doesn't crash on tuple in not executed block (#6718) doesn't crash on tuple in not executed block (#6718) types T as a tuple of metaclasses types T as a tuple of metaclasses #[](NumberLiteral) 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 gives error when indexing out of range gives error when indexing out of range types, metaclass index types, metaclass index types, out of bound, nilable types, out of bound, nilable types, inbound index types, inbound index merges two tuple types of same size merges two tuple types of same size errors if non-tuple is splatted inside tuple errors if non-tuple is splatted inside tuple doesn't error if Tuple has no args doesn't error if Tuple has no args errors on named tuple too big errors on named tuple too big types tuple of one element and then two elements types tuple of one element and then two elements matches tuple with splat (#2932) matches tuple with splat (#2932) types tuple with splats inside types tuple with splats inside types tuple of three elements types tuple of three elements matches tuple with splat (2) (#2932) matches tuple with splat (2) (#2932) doesn't trigger recursive splat expansion error (#7164) doesn't trigger recursive splat expansion error (#7164) errors on recursive splat expansion (2) (#361) errors on recursive splat expansion (2) (#361) allows tuple covariance allows tuple covariance errors on tuple too big (#3816) errors on tuple too big (#3816) errors on recursive splat expansion (#218) errors on recursive splat expansion (#218) can call [] on T can call [] on T types tuple of one element types tuple of one element errors if non-tuple is splatted inside tuple (2) errors if non-tuple is splatted inside tuple (2) #[](Path) works for tuple indexer works for tuple indexer works for named tuple indexer works for named tuple indexer #[](RangeLiteral) gives error when begin index is out of range gives error when begin index is out of range types, out of bound begin, nilable types, out of bound begin, nilable types, inbound begin types, inbound begin types, inbound begin, nilable types, inbound begin, nilable types, begin-less, end-less types, begin-less, end-less types, metaclass index types, metaclass index types, inbound begin, end-less types, inbound begin, end-less types, exclusive range types, exclusive range types, begin-less types, begin-less accepts tuple covariance in array accepts tuple covariance in array errors on recursive splat expansion (1) (#361) errors on recursive splat expansion (1) (#361) doesn't unify tuple metaclasses (#5384) doesn't unify tuple metaclasses (#5384) can iterate T can iterate T gives error when using named args on Tuple gives error when using named args on Tuple can name a tuple type can name a tuple type accept tuple in type restriction accept tuple in type restriction Semantic: hooks errors if wrong extended params length errors if wrong extended params length includes error message in included hook (#889) includes error message in included hook (#889) does included macro for generic module does included macro for generic module does inherited macro for generic class does inherited macro for generic class errors if wrong inherited params size errors if wrong inherited params size types initializer in inherited types initializer in inherited does included macro does included macro does inherited macro through generic instance type (#9693) does inherited macro through generic instance type (#9693) does not invoke 'method_added' hook recursively does not invoke 'method_added' hook recursively does inherited macro does inherited macro errors if wrong included params size errors if wrong included params size errors if wrong extended params size errors if wrong extended params size errors if wrong finished params length errors if wrong finished params length does added method macro does added method macro types macro finished hook bug regarding initialize (#3964) types macro finished hook bug regarding initialize (#3964) does extended macro does extended macro Normalize: regex literal StringLiteral expands to const expands to const simple simple options i i x x imx imx empty empty im im StringInterpolation simple simple Restrictions doesn't error if using NamedTuple with no args doesn't error if using NamedTuple with no args should not let GenericChild(Base) pass as a GenericBase(Child) (#1294) should not let GenericChild(Base) pass as a GenericBase(Child) (#1294) matches alias against alias in block type matches alias against alias in block type works with union against unions of generics works with union against unions of generics restricts aliased typedef type (#9474) restricts aliased typedef type (#9474) errors if using typeof inside generic type errors if using typeof inside generic type matches virtual type against alias matches virtual type against alias doesn't error if using Tuple with no args doesn't error if using Tuple with no args sets number as unbound generic type var (#13110) sets number as unbound generic type var (#13110) errors if using Tuple with named args errors if using Tuple with named args works with generic class metaclass vs. generic class metaclass works with generic class metaclass vs. generic class metaclass self always matches instance type in restriction self always matches instance type in restriction passes #278 passes #278 self always matches instance type in return type self always matches instance type in return type errors if using free var without forall errors if using free var without forall errors if using typeof errors if using typeof restrict restricts module with another module restricts module with another module restricts generic module instance with another module restricts generic module instance with another module restricts module through generic include (#4287) restricts module through generic include (#4287) 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 virtual generic class against uninstantiated generic subclass (2) restricts virtual generic class against uninstantiated generic subclass (2) restricts virtual type with included module 2 restricts virtual type with included module 2 restricts generic module instance with class restricts generic module instance with class restricts type with another type restricts type with another type 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 type with superclass restricts type with superclass restricts virtual type with included module 1 restricts virtual type with included module 1 restricts generic module instance with another generic module instance restricts generic module instance with another generic module instance restricts type with same type restricts type with same type restricts virtual generic class against uninstantiated generic subclass (1) restricts virtual generic class against uninstantiated generic subclass (1) sets number as free variable (#2699) sets number as free variable (#2699) 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) restricts virtual metaclass type against metaclass (#3438) restricts virtual metaclass type against metaclass (#3438) works with generic compared to fixed (primitive) type works with generic compared to fixed (primitive) type matches number in bound free variable (#13605) matches number in bound free variable (#13605) works with static array that uses underscore works with static array that uses underscore 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 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 can't find type on lookup errors if can't find type on lookup allows passing recursive type to free var (#1076) allows passing recursive type to free var (#1076) restriction_of? 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 Generic vs Path keeps untyped Generic before untyped Path keeps untyped Generic before untyped Path inserts untyped Generic before untyped Path inserts 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 inserts typed Generic before untyped Path inserts typed Generic before untyped Path 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) 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) GenericClassType vs GenericClassInstanceType works with classes in different namespaces works with classes in different namespaces doesn't mix different generic classes doesn't mix different generic classes inserts GenericClassInstanceType before GenericClassType inserts GenericClassInstanceType before GenericClassType keeps GenericClassInstanceType before GenericClassType keeps GenericClassInstanceType before GenericClassType 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 free variables 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 with same name inserts 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 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 Metaclass vs Path 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) inserts metaclass before Class inserts metaclass before Class inserts metaclass before Value inserts metaclass before Value 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) keeps metaclass before Object keeps metaclass before Object keeps metaclass before Value keeps metaclass before Value inserts metaclass before Object inserts metaclass before Object keeps metaclass before Class keeps metaclass before Class 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 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 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 NamedTuple with positional args errors if using NamedTuple with positional args errors if using typeof in block restriction errors if using typeof in block restriction 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 works with static array (#637) works with static array (#637) errors if using typeof in block restriction errors if using typeof in block restriction 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 matches free variable for type variable matches free variable for type variable works with generic class metaclass vs. generic instance class metaclass works with generic class metaclass vs. generic instance class metaclass makes metaclass subclass pass parent metaclass restriction (#2079) makes metaclass subclass pass parent metaclass restriction (#2079) restricts class union type to overloads with classes (2) restricts class union type to overloads with classes (2) Normalize: string interpolation replaces string constant replaces string constant normalizes string interpolation with multiple lines normalizes string interpolation with multiple lines replaces through multiple levels replaces through multiple levels normalizes string interpolation normalizes string interpolation normalizes heredoc normalizes heredoc replaces string constant that results from macro expansion replaces string constant that results from macro expansion Crystal::JSONHierarchyPrinter works works Codegen: extern struct codegens extern proc call twice (#4982) codegens extern proc call twice (#4982) 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 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 with no constructor, assigns var declares extern struct with no constructor, assigns var 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 declares extern union with no constructor declares extern union with no constructor 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 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 doesn't crash with proc with extern struct that's a closure doesn't crash with proc with extern struct that's a closure 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 large extern struct by value codegens proc that takes and returns large extern struct by value 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 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 declares extern struct, sets and gets instance var declares extern struct, sets and gets instance 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) declares extern struct with no constructor declares extern struct with no constructor invokes proc with extern struct invokes proc with extern struct Call errors says no parameter named says no parameter named 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 argument already specified says argument already specified says missing named arguments says missing named arguments says type mismatch for positional argument with three options says type mismatch for positional argument with three options replaces free variables in positional argument replaces free variables in positional argument says wrong number of arguments (to few arguments) says wrong number of arguments (to few arguments) says expected to be invoked with a block says expected to be invoked with a block 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 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 errors on argument if more types are given than expected errors on argument if more types are given than expected 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 says type mismatch for positional argument says no parameters named says no parameters named 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 replaces generic type var in positional argument replaces generic type var in positional argument says type mismatch for positional argument with two options says type mismatch for positional argument with two options method signatures in error traces includes named arguments includes named arguments expands positional and single splat argument, empty tuple expands positional and single splat argument, empty tuple expands positional and single splat argument expands positional and single splat argument expands double splat argument, empty named tuple expands double splat argument, empty named tuple includes named argument includes named argument expands positional and double splat argument, empty named tuple expands positional and double splat argument, empty named tuple expands double splat argument, more elements expands double splat argument, more elements expands positional and double splat argument, more elements expands positional and double splat argument, more elements uses `T.method` instead of `T.class#method` uses `T.method` instead of `T.class#method` expands positional and double splat argument expands positional and double splat argument expands single splat argument expands single splat argument expands single splat argument, empty tuple expands single splat argument, empty tuple expands double splat argument expands double splat argument includes positional and named argument includes positional and named argument uses `T.method` instead of `T:module#method` uses `T.method` instead of `T:module#method` expands positional and single splat argument, more elements expands positional and single splat argument, more elements expands single splat argument, more elements expands single splat argument, more elements says type mismatch for symbol against enum, named argument case says type mismatch for symbol against enum, named argument case replaces free variables in named argument replaces free variables in named argument 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 named argument says type mismatch for named argument says not expected to be invoked with a block says not expected to be invoked with a block says missing named argument says missing named argument replaces generic type var in named argument replaces generic type var in named argument Semantic: double splat 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 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) errors missing argument with double splat errors missing argument with double splat matches double splat on method with named args and regular args matches double splat on method with named args and regular args matches double splat on method (empty) matches double splat on method (empty) 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 uses double splat restriction matches named args producing an empty double splat (#2678) matches named args producing an empty double splat (#2678) 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) 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 overloads based on double splat restriction overloads based on double splat restriction uses double splat restriction with concrete type uses double splat restriction with concrete type uses double splat in new uses double splat in new uses restriction on double splat, means all types must be that type uses restriction on double splat, means all types must be that type uses double splat restriction, matches empty uses double splat restriction, matches empty Code gen: virtual type dispatch call with virtual type argument dispatch call with virtual type argument 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 virtual call with explicit self codegens virtual call with explicit self casts virtual type to base virtual type casts virtual type to base virtual type codegens allocate for virtual type with custom new codegens allocate for virtual type with custom new casts metaclass union type to virtual metaclass type (#6298) casts metaclass union type to virtual metaclass type (#6298) lookup instance variables in parent types lookup instance variables in parent types can belong to union can belong to union 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 doesn't lookup in Value+ when virtual type is Object+ doesn't lookup in Value+ when virtual type is Object+ returns type with virtual type def type returns type with virtual type def type casts virtual type to union casts virtual type to union codegens new twice for virtual codegens new twice for virtual 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 calls class method 2 calls class method 2 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 3 calls class method 3 dispatches on virtual metaclass (2) dispatches on virtual metaclass (2) codegens non-virtual call that calls virtual call to another virtual call codegens non-virtual call that calls virtual call to another virtual call codegens virtual method of abstract metaclass codegens virtual method of abstract metaclass call base method call base method dispatch call with nilable virtual arg dispatch call with nilable virtual arg 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 call base overwritten method call base overwritten method dispatches on virtual metaclass (3) dispatches on virtual metaclass (3) casts union to virtual casts union to virtual calls class method 1 calls class method 1 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) 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 codegens new for simple type, then for virtual codegens new for simple type, then for virtual codegens virtual call with explicit self and nilable type codegens virtual call with explicit self and nilable type call overwritten method call overwritten method Crystal::Repl::Interpreter alignof interprets alignof typeof interprets alignof typeof instance_alignof interprets instance_alignof typeof interprets instance_alignof typeof instance_sizeof interprets instance_sizeof typeof interprets instance_sizeof typeof sizeof interprets sizeof typeof interprets sizeof typeof Crystal::Repl::Interpreter constants interprets self inside constant inside class interprets self inside constant inside class interprets constant literal interprets constant literal hoists constants hoists constants interprets complex constant interprets complex constant returns nil in the assignment returns nil in the assignment magic constants does line number does line number Normalize: until normalizes until normalizes until Code gen: def with default value doesn't mix types of instance vars with initialize and new doesn't mix types of instance vars with initialize and new 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 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 Lexer string array lexes string array with new line lexes string array with new line lexes string array with new line gives correct column for next token lexes string array with new line gives correct column for next token using < as delimiter 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 using [ as delimiter lexes simple string array lexes simple string array lexes simple string array lexes simple string array 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) Code gen: var codegens bug with instance vars and ssa codegens bug with instance vars and ssa codegens var with type declaration codegens var with type declaration codegens var codegens var 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 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 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 var, while, if, break and ssa codegens bug with var, while, if, break and ssa assigns to underscore assigns to underscore codegens ivar assignment when not-nil type filter applies codegens ivar assignment when not-nil type filter applies Semantic: 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 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 .validate_name digits digits length length underscores underscores uppercase uppercase empty empty dashes dashes invalid character invalid character Semantic: NoReturn 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 computes NoReturn in a lazy way inside if then (#314) (2) computes NoReturn in a lazy way inside if then (#314) (2) 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) 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) types call to LibC.exit as NoReturn types call to LibC.exit as NoReturn types raise as NoReturn types raise as NoReturn 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) (5) computes NoReturn in a lazy way inside if else (#314) (5) 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 union of NoReturns types union of NoReturns types exception handler as NoReturn if ensure is NoReturn types exception handler as NoReturn if ensure is NoReturn types as NoReturn even if Nil return type is forced (#3096) types as NoReturn even if Nil return type is forced (#3096) assumes if condition's type filters when else is no return assumes if condition's type filters when else is no return 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 Semantic: new errors if using self call in default argument (2) errors if using self call in default argument (2) errors if using self call in default argument (3) errors if using self call in default argument (3) inherits initialize and new methods if doesn't define new (#3238) inherits initialize and new methods if doesn't define new (#3238) evaluates initialize default value at the instance scope (2) (#731) evaluates initialize default value at the instance scope (2) (#731) evaluates initialize default value at the instance scope (5) (#731) evaluates initialize default value at the instance scope (5) (#731) evaluates initialize default value at the instance scope (6) (#731) evaluates initialize default value at the instance scope (6) (#731) evaluates initialize default value at the instance scope (1) (#731) evaluates initialize default value at the instance scope (1) (#731) 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 (3) (#731) evaluates initialize default value at the instance scope (3) (#731) evaluates initialize default value at the instance scope (4) (#731) evaluates initialize default value at the instance scope (4) (#731) 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) doesn't incorrectly redefines new for generic class doesn't incorrectly redefines new for generic class Semantic: did you mean suggests a better alternative to logical operators (#2715) suggests a better alternative to logical operators (#2715) 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 nested class says did you mean for nested class says did you mean for global method with parenthesis says did you mean for global method with parenthesis suggests for class variable suggests for class variable 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 with overload suggest that there might be a typo for an initialize method with overload 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 finds most similar in type says did you mean finds most similar in type says did you mean for global method without parenthesis says did you mean for global method without parenthesis 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 variable says did you mean for variable 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 inside macro (#466) doesn't suggest when declaring var inside macro (#466) says did you mean for named argument says did you mean for named argument 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 instance var says did you mean for instance var says did you mean in instance var declaration says did you mean in instance var declaration doesn't suggest for operator doesn't suggest for operator says did you mean for class says did you mean for class says did you mean for instance var in subclass says did you mean for instance var in subclass .parse_args DIR = . DIR = . DIR (relative to home) DIR (relative to home) DIR DIR DIR with path DIR with path NAME DIR NAME DIR DIR (absolute) DIR (absolute) Crystal::Repl::Interpreter unions put and remove from union in local var put and remove from union in local var puts union inside union puts union inside union converts from NilableType to NonGenericClassType converts from NilableType to NonGenericClassType put and remove from union, together with is_a? (truthy case) put and remove from union, together with is_a? (truthy case) returns large union type (#15041) returns large union type (#15041) 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? put and remove from union in instance var put and remove from union in instance var returns union type returns union type Visibility modifiers allows setting visibility modifier to macro allows setting visibility modifier to macro allows invoking private setter with self allows invoking private setter with self errors if invoking protected method from non-subclass errors if invoking protected method from non-subclass handles virtual types (#8561) handles virtual types (#8561) 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 virtual type allows invoking protected method from virtual type allows invoking protected method from namespaced type to namespace allows invoking protected method from namespaced type to namespace 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 allows invoking protected method from the same class allows invoking protected method from the same class allows setting visibility modifier to macro that generates many methods (1) allows setting visibility modifier to macro that generates many methods (1) allows calling protected method from nested generic class (2) allows calling protected method from nested generic class (2) allows invoking protected method from subclass allows invoking protected method from subclass allows invoking protected method between types in the same namespace allows invoking protected method between types in the same namespace errors if invoking protected method from top-level errors if invoking protected method from top-level 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 defines protected initialize (#7501) defines protected initialize (#7501) allows invoking protected method from subclass (2) allows invoking protected method from subclass (2) 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 private method from the same class allows invoking private method from the same class 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 setting visibility modifier to macro that generates many methods (2) allows setting visibility modifier to macro that generates many methods (2) errors if applying visibility modifier to non-def or non-call errors if applying visibility modifier to non-def or non-call Semantic: special vars infers after block infers after block types $~ when not defined as no return types $~ when not defined as no return infers in block infers in block errors if assigning $? at top level errors if assigning $? at top level infers in block with nested block infers in block with nested block types $~ when not defined as no return (2) types $~ when not defined as no return (2) infers $? infers $? infers when assigning inside block infers when assigning inside block types $? when not defined as no return (2) types $? when not defined as no return (2) infers $~ infers $~ 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 Crystal::Doc::Type ASTNode has no superclass ASTNode has no superclass #class_methods sorts operators first sorts operators first finds construct when searching class method (#8095) finds construct when searching class method (#8095) doesn't show types for alias type doesn't show types for alias type ASTNode has no ancestors ASTNode has no ancestors #macros sorts operators first sorts operators first #node_to_html shows relative path shows relative path shows tuples shows tuples shows generic path with necessary colons shows generic path with necessary colons shows relative generic shows relative generic shows generic path with unnecessary colons shows generic path with unnecessary colons shows named tuples shows named tuples #instance_methods sorts operators first sorts operators first Crystal::Doc::Generator .anchor_link generates the correct anchor link generates the correct anchor link Crystal::Playground::Agent should send json messages and return inspected value should send json messages and return inspected value Lexer: location overrides location with pragma overrides location with pragma stores column numbers stores column numbers Location.parse raises ArgumentError if line number is invalid raises ArgumentError if line number is invalid parses location from string parses location from string raises ArgumentError if missing colon raises ArgumentError if missing colon raises ArgumentError if column number is invalid raises ArgumentError if column number is invalid raises ArgumentError if missing part raises ArgumentError if missing part assigns correct loc location to node assigns correct loc location to node stores line numbers stores line numbers locations in same files are comparable based on line locations in same files are comparable based on line pushes and pops its location pushes and pops its location locations with virtual files should be comparable locations with virtual files should be comparable locations in different files have no order locations in different files have no order uses two consecutive loc pragma uses two consecutive loc pragma parses var/call right after loc (#491) parses var/call right after loc (#491) Semantic: class uses self as type var uses self as type var types class and subclass as one type types class and subclass as one type preserves order of instance vars (#3050) preserves order of instance vars (#3050) says no overload matches for class new says no overload matches for class new reports can't instantiate abstract class on new reports can't instantiate abstract class on new reports unknown class when extending reports unknown class when extending reports undefined instance method reports undefined instance method errors if inheriting Gen(self) and there's no self (#2890) errors if inheriting Gen(self) and there's no self (#2890) finds in global scope if includes module finds in global scope if includes module reports can't instantiate abstract class on allocate reports can't instantiate abstract class on allocate doesn't mark instance variable as nilable if calling another initialize doesn't mark instance variable as nilable if calling another initialize types virtual method of generic class types virtual method of generic class reports wrong number of arguments for initialize reports wrong number of arguments for initialize types instance variable on getter types instance variable on getter 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 if reading ivar from non-ivar container errors if reading ivar from non-ivar container says that instance vars are not allowed in metaclass says that instance vars are not allowed in metaclass doesn't crash with top-level initialize (#2601) doesn't crash with top-level initialize (#2601) reports undefined method when method inside a class reports undefined method when method inside a class doesn't mix classes on definition (#2352) doesn't mix classes on definition (#2352) types self inside method call without obj types self inside method call without obj errors if inherits from module errors if inherits from module reads an object instance var from a union type reads an object instance var from a union type type def does not reopen type from parent namespace (#11181) type def does not reopen type from parent namespace (#11181) uses self as type var uses self as type var can't reopen as struct can't reopen as struct inherits self twice (#5495) inherits self twice (#5495) errors when wrong arguments for new errors when wrong arguments for new errors if reopening generic class with different splat index (2) errors if reopening generic class with different splat index (2) types instance variable types 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 allows instantiating generic class with number allows instantiating generic class with number types class and subclass as one type types class and subclass as one type doesn't error on new on abstract virtual type class doesn't error on new on abstract virtual type class errors when creating Value errors when creating Value reports uninitialized constant reports uninitialized constant types class and subclass as one type types class and subclass as one type types recursive type types recursive type doesn't lookup new in supermetaclass doesn't lookup new in supermetaclass 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 generic of generic type types generic of generic type can use short name for top-level type can use short name for top-level type inherits self (#2890) inherits self (#2890) reads a virtual type instance var reads a virtual type instance var can invoke method on abstract type without subclasses nor instances can invoke method on abstract type without subclasses nor instances does automatic type inference of new for generic types 2 does automatic type inference of new for generic types 2 inherits Gen(self) (#2890) inherits Gen(self) (#2890) doesn't use initialize from base class with virtual type doesn't use initialize from base class with virtual type 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 errors if reopening generic class with different splat index says wrong number of arguments for abstract class new says wrong number of arguments for abstract class new 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) errors if declares class inside if errors if declares class inside if correctly types #680 correctly types #680 types Const#allocate types Const#allocate 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 instance variable types instance variable uses number type var in class method uses number type var in class method errors if reopening generic class with different type vars (2) errors if reopening generic class with different type vars (2) reads an object instance var reads an object instance var allows declaring a variable in an initialize and using it allows declaring a variable in an initialize and using it errors if using read-instance-var with non-typed variable errors if using read-instance-var with non-typed variable says wrong number of arguments for abstract class new (2) says wrong number of arguments for abstract class new (2) can mark initialize as private can mark initialize as private errors if reading non-existent ivar errors if reading non-existent ivar errors if using underscore in generic class errors if using underscore in generic class types as no return if calling method on abstract generic class (#6996) types as no return if calling method on abstract generic class (#6996) errors if reopening non-generic class as generic errors if reopening non-generic class as generic types Const#new types Const#new reports superclass mismatch reports superclass mismatch does automatic inference of new for generic types does automatic inference of new for generic types hoists instance variable initializer hoists instance variable initializer doesn't use initialize from base class doesn't use initialize from base class types class inside class types class inside class does automatic type inference of new for nested generic type does automatic type inference of new for nested generic type allows using self in class scope allows using self in class scope errors if inherits from metaclass errors if inherits from metaclass can invoke method on abstract generic type without subclasses nor instances can invoke method on abstract generic type without subclasses nor instances can't reopen as module can't reopen as module 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 Const#new#method types Const#new#method 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) can't use implicit initialize if defined in parent can't use implicit initialize if defined in parent infers generic type after instance was created with explicit type infers generic type after instance was created with explicit type types type var union types type var union correctly types #680 (2) correctly types #680 (2) 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) can invoke method on abstract generic type with subclasses but no instances can invoke method on abstract generic type with subclasses but no instances errors if creating instance before typing instance variable errors if creating instance before typing instance variable errors when creating Number errors when creating Number context includes assignments includes assignments can get context in file private method can get context in file private method can get context in contained class' class method can get context in contained class' class method includes args includes args can get context of empty def can get context of empty def includes last call includes last call consider different instances of def consider different instances of def 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 does includes args, instance vars, local variables and expressions on instance methods does includes args, instance vars, local variables and expressions on instance methods includes block args includes block args can handle union types can handle union types can display json output can display json output does not includes temp variables does not includes temp variables use type filters from is_a? use type filters from is_a? can get context inside a module can get context inside a module can get context in file private module can get context in file private module can display text output can display text output does includes self on classes does includes self on classes can get context inside initialize can get context inside initialize can get context of yielded block can get context of yielded block 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 includes top level vars includes top level vars can't get context from uncalled method can't get context from uncalled method does includes regex special variables does includes regex special variables can get context in generic class can get context in generic class Crystal::Formatter formats "foo.responds_to? :bar\n1" formats "foo.responds_to? :bar\n1" formats "@a" formats "@a" formats "foo.[1]" formats "foo.[1]" formats "def foo ( ) \n1\nend" formats "def foo ( ) \n1\nend" formats "def foo : (A, B) ->\n nil\nend" formats "def foo : (A, B) ->\n nil\nend" formats "foo\n \nbar" formats "foo\n \nbar" formats "if / /\nend" formats "if / /\nend" formats "1 \\\n+ 2" formats "1 \\\n+ 2" formats "$1" formats "$1" formats "sizeof( Int32 )" formats "sizeof( Int32 )" formats "1 ... 2" formats "1 ... 2" formats "->foo!" formats "->foo!" formats "foo(1 &- 2)" formats "foo(1 &- 2)" formats "lib Foo\nstruct Foo\nx , y : Int32\nend\nend" formats "lib Foo\nstruct Foo\nx , y : Int32\nend\nend" formats "@x[ 1 ] ||= 2" formats "@x[ 1 ] ||= 2" formats "def foo : A(B)\n nil\nend" formats "def foo : A(B)\n nil\nend" formats "{ {1, 2, 3} }" formats "{ {1, 2, 3} }" formats "foo : (String -> String?) | (String)" formats "foo : (String -> String?) | (String)" formats "macro foo\n {% if 1 %}\\ 2 {% else %}\\ 3 {% end %}\\\nend" formats "macro foo\n {% if 1 %}\\ 2 {% else %}\\ 3 {% end %}\\\nend" formats "def self . foo\nend" formats "def self . foo\nend" formats "def foo\n@x = uninitialized Int32\nend" formats "def foo\n@x = uninitialized Int32\nend" formats "foo 1 , &bar" formats "foo 1 , &bar" formats "lib Foo\nstruct Foo\nend\nend" formats "lib Foo\nstruct Foo\nend\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 "def foo(x @y)\nend" formats "def foo(x @y)\nend" formats "\"\\a\\c\#{foo}\\b\\d\"" formats "\"\\a\\c\#{foo}\\b\\d\"" formats " {% if 1 %} {% if 2 %} 2 {% end %} {% end %}" formats " {% if 1 %} {% if 2 %} 2 {% end %} {% end %}" formats "if 1\n node.is_a?(T)\nend" formats "if 1\n node.is_a?(T)\nend" formats "{% if 1 %}\n 2\n{% end %}\ndef foo\nend" formats "{% if 1 %}\n 2\n{% end %}\ndef foo\nend" formats "-> : Int32 {}" formats "-> : Int32 {}" formats "1*2" formats "1*2" 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 "module Foo ( U, *T ); 1; end" formats "module Foo ( U, *T ); 1; end" formats "foo.%(bar)" formats "foo.%(bar)" formats "{ } of A => B" formats "{ } of A => B" formats "def a\n {\n 1, # x\n # y\n }\nend" formats "def a\n {\n 1, # x\n # y\n }\nend" formats "\"foo\" \\\n \"bar\"" formats "\"foo\" \\\n \"bar\"" formats "next { 1 , 2 }" formats "next { 1 , 2 }" formats "->@foo.foo!" formats "->@foo.foo!" formats "Foo::Bar(T, U?)?" formats "Foo::Bar(T, U?)?" formats " <<-HTML\n foo\n HTML" formats " <<-HTML\n foo\n HTML" formats "if a\nelse\n2\nend" formats "if a\nelse\n2\nend" formats "foo(\n # foo\n1,\n\n # bar\n2, \n)" formats "foo(\n # foo\n1,\n\n # bar\n2, \n)" formats "foo(1 + \n2)" formats "foo(1 + \n2)" formats "asm(\"a\" : \"b\"(c)\n)" formats "asm(\"a\" : \"b\"(c)\n)" formats "foo(1 &+ \n2)" formats "foo(1 &+ \n2)" formats "x = <<-FOO\n hello\n FOO\n\ndef bar\nend" formats "x = <<-FOO\n hello\n FOO\n\ndef bar\nend" formats "@x : A(B | C)?" formats "@x : A(B | C)?" formats "foo ( )" formats "foo ( )" formats "module Foo;end" formats "module Foo;end" formats "yield 1 , 2" formats "yield 1 , 2" formats "1\n..\n2" formats "1\n..\n2" 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 "foo (1; 2)" formats "foo (1; 2)" formats "1.== do\nend" formats "1.== do\nend" formats "foo(\n 1, 2)" formats "foo(\n 1, 2)" formats "Foo( )" formats "Foo( )" 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 "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 "p = Foo[1, 2, 3,\n 4, 5, 6,\n ]" formats "p = Foo[1, 2, 3,\n 4, 5, 6,\n ]" formats "foo &.bar.is_a?(Baz)" formats "foo &.bar.is_a?(Baz)" formats "{1, 2, 3}" formats "{1, 2, 3}" formats "{x => self // 1}" formats "{x => self // 1}" 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 "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[&.bar]" formats "foo[&.bar]" formats "def foo ( x ,\n y ) \n end" formats "def foo ( x ,\n y ) \n end" formats "page= <<-HTML\n foo\nHTML" formats "page= <<-HTML\n foo\nHTML" formats "foo(a: 1 // 2)" formats "foo(a: 1 // 2)" formats "def foo ( x , y ,\n) \n end" formats "def foo ( x , y ,\n) \n end" formats "asm(\"nop\" :::: \"volatile\" )" formats "asm(\"nop\" :::: \"volatile\" )" 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 "def foo ( x ) \n end" formats "def foo ( x ) \n end" formats "foo { |x, *y| }" formats "foo { |x, *y| }" formats "unless a\n2\nelse\n3\nend" formats "unless a\n2\nelse\n3\nend" formats "begin\n begin\n a\n # b\n end\nend" formats "begin\n begin\n a\n # b\n end\nend" formats "def foo( x , & block : Int32 ->)\nend" formats "def foo( x , & block : Int32 ->)\nend" formats "foo &.@bar" formats "foo &.@bar" formats " .. 2" formats " .. 2" formats "foo[1, &.bar]?" formats "foo[1, &.bar]?" formats "a = 1\n;\nb = 2" formats "a = 1\n;\nb = 2" formats "@[Foo()]" formats "@[Foo()]" formats "def foo\n@x : Int32\nend" formats "def foo\n@x : Int32\nend" formats "asm(\"a\" :: : : \"volatile\")" formats "asm(\"a\" :: : : \"volatile\")" formats "return 1 , 2" formats "return 1 , 2" formats "def foo(x, *, z)\nend" formats "def foo(x, *, z)\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 "foo \\\nbar" formats "foo \\\nbar" formats "::Foo:: Bar" formats "::Foo:: Bar" formats "a = 1 if 1 == 2 ||\n 3 == 4\n" formats "a = 1 if 1 == 2 ||\n 3 == 4\n" 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 "def foo ( x : self ) \n end" formats "def foo ( x : self ) \n end" formats "%[hello]" formats "%[hello]" formats "[\n a(), # b\n]" formats "[\n a(), # b\n]" formats "foo = 1\n->foo.foo!" formats "foo = 1\n->foo.foo!" formats "foo(baz1 do\nend)" formats "foo(baz1 do\nend)" formats "def foo ( bar @@select) \n end" formats "def foo ( bar @@select) \n end" formats "a[b] ||= c" formats "a[b] ||= c" formats "\" \" * 2" formats "\" \" * 2" formats "begin\n 1\n # Comment\n\n\nend" formats "begin\n 1\n # Comment\n\n\nend" formats "::foo(1, 2)" formats "::foo(1, 2)" formats "[\n # foo\n] of String" formats "[\n # foo\n] of String" formats "1.>= do\nend" formats "1.>= do\nend" formats "foo self // 1" formats "foo self // 1" formats "1.<= { 3 }" formats "1.<= { 3 }" formats "x : (A -> B)?" formats "x : (A -> B)?" formats "def foo(x) : Int32 # bar\n # baz\nend" formats "def foo(x) : Int32 # bar\n # baz\nend" formats "foo . bar( x , y )" formats "foo . bar( x , y )" formats "foo do | x , y | \n x \n end" formats "foo do | x , y | \n x \n end" formats "<<-HEREDOC\n \#{foo}\n H\#{bar}\n HEREDOC" formats "<<-HEREDOC\n \#{foo}\n H\#{bar}\n HEREDOC" formats "def foo( x , & block : Int32->Float64)\nend" formats "def foo( x , & block : Int32->Float64)\nend" formats "[1,\n2,\n3\n]" formats "[1,\n2,\n3\n]" formats "a = \"\n\"\n1 # 1\n12 # 2\n" formats "a = \"\n\"\n1 # 1\n12 # 2\n" formats "foo[1, &.bar] ||= 1" formats "foo[1, &.bar] ||= 1" formats "1 && 2" formats "1 && 2" formats "lib Foo\nalias Foo = Bar -> \n$a : Int32\nend" formats "lib Foo\nalias Foo = Bar -> \n$a : Int32\nend" formats "%w{one( two( three)}" formats "%w{one( two( three)}" formats "{ %() }" formats "{ %() }" formats "begin\n query = <<-HEREDOC\n foo\n HEREDOC\nend" formats "begin\n query = <<-HEREDOC\n foo\n HEREDOC\nend" formats "while / /\nend" formats "while / /\nend" formats "a = 1;;; b = 2" formats "a = 1;;; b = 2" formats "if 1\n1\n\n# foo\nend" formats "if 1\n1\n\n# foo\nend" formats "next 1 , 2" formats "next 1 , 2" formats "foo(1 ||\n # foo\n 2)" formats "foo(1 ||\n # foo\n 2)" formats "def foo(a, &@b)\nend" formats "def foo(a, &@b)\nend" 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 "def foo(@[AnnOne] @[AnnTwo] & ); end" formats "def foo(@[AnnOne] @[AnnTwo] & ); end" 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 "yield 1 , \n2" formats "yield 1 , \n2" formats "def foo\n2 # foo\nend" formats "def foo\n2 # foo\nend" formats "break 1, {2, 3}" formats "break 1, {2, 3}" formats "foo = 1\n->foo.[]=(Int32)" formats "foo = 1\n->foo.[]=(Int32)" formats "case 1 \n when 2 ;\n 3 \n end" formats "case 1 \n when 2 ;\n 3 \n end" formats "Set { 1 , 2 }" formats "Set { 1 , 2 }" formats "[1, 2,\n 3, 4]\n" formats "[1, 2,\n 3, 4]\n" formats "->foo" formats "->foo" 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 "a = / /" formats "a = / /" formats "if a\n2\nelse\n3\nend" formats "if a\n2\nelse\n3\nend" formats ":foo" formats ":foo" formats "foo do # hello\nend" formats "foo do # hello\nend" formats "begin\n array[\n 0, # Zero\n ]\nend" formats "begin\n array[\n 0, # Zero\n ]\nend" formats "a = 1\ndef bar\nend" formats "a = 1\ndef bar\nend" formats "Foo( A , 1 )" formats "Foo( A , 1 )" formats "module Foo\n1\n\n# foo\nend" formats "module Foo\n1\n\n# foo\nend" formats "foo x: 1" formats "foo x: 1" formats "lib Foo::Bar\nend" formats "lib Foo::Bar\nend" formats "x: Int32" formats "x: Int32" formats "1 + \n2" formats "1 + \n2" 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 "Foo( x: Int32 )" formats "Foo( x: Int32 )" formats "a &.b.as(C)" formats "a &.b.as(C)" formats "case 1\nwhen 1 then\n2\nwhen 3\n4\nend" formats "case 1\nwhen 1 then\n2\nwhen 3\n4\nend" formats "<<-HTML\n foo\n \#{\"foo\"}\n HTML" formats "<<-HTML\n foo\n \#{\"foo\"}\n HTML" formats "begin\n 1 + \\\n 2\n 3\nend" formats "begin\n 1 + \\\n 2\n 3\nend" formats "[\n a(),\n]" formats "[\n a(),\n]" formats "alignof( Int32 )" formats "alignof( Int32 )" formats "foo(\n1,\n 2 \n)" formats "foo(\n1,\n 2 \n)" formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1), \"c\"(2) )" formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1), \"c\"(2) )" formats "yield 1" formats "yield 1" formats "foo = 1\n->foo.bar(Int32)" formats "foo = 1\n->foo.bar(Int32)" formats "{ {foo: 2} }" formats "{ {foo: 2} }" formats "1\n.." formats "1\n.." formats "lib Foo\n $foo = hello : Int32 \nend" formats "lib Foo\n $foo = hello : Int32 \nend" 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 "-> : Int32 {}" formats "-> : Int32 {}" formats "1 || 2" formats "1 || 2" formats "if 1\n [\n 1,\n ].none?\nend" formats "if 1\n [\n 1,\n ].none?\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 "foo 1,\na: 1,\nb: 2,\nc: 3" formats "foo 1,\na: 1,\nb: 2,\nc: 3" formats "module Foo\n# nothing\nend" formats "module Foo\n# nothing\nend" formats "foo &.[]?" formats "foo &.[]?" formats "lib Foo\nfun foo(x : Int32, ... ) : Int32\nend" formats "lib Foo\nfun foo(x : Int32, ... ) : Int32\nend" formats "x : Int32**" formats "x : Int32**" formats "foo[bar.baz]\n .qux" formats "foo[bar.baz]\n .qux" formats "{ %w() }" formats "{ %w() }" 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 "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 "a = 1\na ||= begin\n 1\nend" formats "a = 1\na ||= begin\n 1\nend" formats "1.!= { 3 }" formats "1.!= { 3 }" formats "->@@foo.foo=" formats "->@@foo.foo=" formats "{ A: 1 }\n" formats "{ A: 1 }\n" formats "def foo\nend\n\ndef bar\nend\n\n# foo" formats "def foo\nend\n\ndef bar\nend\n\n# foo" formats "->do\nend" formats "->do\nend" formats "abstract def foo \n 1" formats "abstract def foo \n 1" formats "/foo \#{ bar }/" formats "/foo \#{ bar }/" formats "macro foo\n 1 + 2 \n end" formats "macro foo\n 1 + 2 \n end" formats "1.=== { 3 }" formats "1.=== { 3 }" formats "foo = [1, [2,\n 3],\n 4]" formats "foo = [1, [2,\n 3],\n 4]" formats "foo(bar(\n 1,\n 2,\n))" formats "foo(bar(\n 1,\n 2,\n))" formats "1 + \\\n2 + \\\n3" formats "1 + \\\n2 + \\\n3" formats "foo.[1, 2] = 3" formats "foo.[1, 2] = 3" formats "def foo\n1\nrescue\n2\nend" formats "def foo\n1\nrescue\n2\nend" formats "/\#{1}/imx" formats "/\#{1}/imx" formats "foo( 1 , 2 )" formats "foo( 1 , 2 )" formats "def foo(x, *, y, **z)\nend" formats "def foo(x, *, y, **z)\nend" formats "[] of Foo" formats "[] of Foo" formats "begin\n1\nrescue ex : Int32 | Float64 \n3\nend" formats "begin\n1\nrescue ex : Int32 | Float64 \n3\nend" formats "<<-FOO\nbarfoo\nFOO" formats "<<-FOO\nbarfoo\nFOO" formats "1 unless 2" formats "1 unless 2" formats "foo &.bar.as?(T)" formats "foo &.bar.as?(T)" formats "foo a , b , x: 1" formats "foo a , b , x: 1" formats "def foo(\"bar baz\" qux)\nend" formats "def foo(\"bar baz\" qux)\nend" formats "1.==() { 3 }" formats "1.==() { 3 }" formats "foo(1, ) do\nend" formats "foo(1, ) do\nend" formats "foo 1, # comment\n # bar\n do\n end" formats "foo 1, # comment\n # bar\n do\n end" formats "if 1 # foo\nend" formats "if 1 # foo\nend" formats "foo . bar" formats "foo . bar" formats "foo.as(T).bar" formats "foo.as(T).bar" formats "foo : (F(A)) | D" formats "foo : (F(A)) | D" formats "def foo(x) forall T # bar\n # baz\nend" formats "def foo(x) forall T # bar\n # baz\nend" formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1),\n\"c\"(2) )" formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1),\n\"c\"(2) )" formats "[\n a() # b\n]" formats "[\n a() # b\n]" formats "foo = 1\n->foo.foo" formats "foo = 1\n->foo.foo" 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 "1 + \\\n2\n3" formats "1 + \\\n2\n3" formats "alias X = ((Y, Z) ->)" formats "alias X = ((Y, Z) ->)" formats "->(x : Int32) { }" formats "->(x : Int32) { }" formats "if 1\ncase 1\nwhen 2\n3\nend\nend" formats "if 1\ncase 1\nwhen 2\n3\nend\nend" formats "if a\n2\nelse\nend" formats "if a\n2\nelse\nend" formats "asm(\n\"nop\" : \"a\"(0), \"b\"(1) )" formats "asm(\n\"nop\" : \"a\"(0), \"b\"(1) )" formats "begin\n1\nrescue ex\n3\nend" formats "begin\n1\nrescue ex\n3\nend" formats "select # some comment\nwhen bar\n break\nend" formats "select # some comment\nwhen bar\n break\nend" formats "class Foo\nend\nclass Bar\nend" formats "class Foo\nend\nclass Bar\nend" formats "foo : Pointer(Foo)*" formats "foo : Pointer(Foo)*" formats "Tuple()" formats "Tuple()" formats "def foo ( x : Int32 = 1 ) \n end" formats "def foo ( x : Int32 = 1 ) \n end" formats "foo.\nbar" formats "foo.\nbar" formats "foo &.bar.nil?" formats "foo &.bar.nil?" 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 "$1?" formats "$1?" formats "break *1 ,2" formats "break *1 ,2" formats "foo[x: 1, &.bar] ||= 1" formats "foo[x: 1, &.bar] ||= 1" formats "Foo::Bar?" formats "Foo::Bar?" 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 "macro foo(x, *, z)\nend" formats "macro foo(x, *, z)\nend" formats "macro foo()\nend" formats "macro foo()\nend" formats "case 1\nend" formats "case 1\nend" formats "->( x )\n:\nInt32 { }" formats "->( x )\n:\nInt32 { }" formats "break( 1 , 2 )" formats "break( 1 , 2 )" 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 "{ {1 => 2} }" formats "{ {1 => 2} }" formats "foo bar # comment\n\n# doc\ndef baz; end" formats "foo bar # comment\n\n# doc\ndef baz; end" formats "yield( 1 , 2 )" formats "yield( 1 , 2 )" formats "def foo( & \n )\nend" formats "def foo( & \n )\nend" formats "true" formats "true" formats "def %(x)\n 1\nend" formats "def %(x)\n 1\nend" formats "->Foo.foo?" formats "->Foo.foo?" formats "self.as(Int32)" formats "self.as(Int32)" formats "def func # comment\n (1 + 2) / 3\nend" formats "def func # comment\n (1 + 2) / 3\nend" formats "asm(\"a\" :: \"d\"(e)\n)" formats "asm(\"a\" :: \"d\"(e)\n)" formats "macro foo\n {{1 + 2}}\nend" formats "macro foo\n {{1 + 2}}\nend" formats "[\n1,\n\n2]" formats "[\n1,\n\n2]" formats "\"\#{\"\#{foo}\"}\"" formats "\"\#{\"\#{foo}\"}\"" 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 "\"foo\#{\"bar\"} Baz \#{\"qux\"} \"" formats "\"foo\#{\"bar\"} Baz \#{\"qux\"} \"" formats "alias A = (B(C, (C | D)) | E)" formats "alias A = (B(C, (C | D)) | E)" formats "::Tuple(T)" formats "::Tuple(T)" formats "x : {A, B}" formats "x : {A, B}" formats ":>>" formats ":>>" formats "macro foo\n {{ 1 + 2 }}\\\n 1\n end" formats "macro foo\n {{ 1 + 2 }}\\\n 1\n end" formats "1..\n2" formats "1..\n2" formats "if 1\nbegin\n2\nensure\n3\nend\nend" formats "if 1\nbegin\n2\nensure\n3\nend\nend" formats "def foo(a,\n *b)\nend" formats "def foo(a,\n *b)\nend" formats "private def foo\nend\nprivate def bar\nend" formats "private def foo\nend\nprivate def bar\nend" formats "[\n 1, 2, # foo\n 3, 4,\n]" formats "[\n 1, 2, # foo\n 3, 4,\n]" formats "case nil\nelse nil; nil # comment\nend" formats "case nil\nelse nil; nil # comment\nend" formats "while 1 &&\n2 &&\n3\n4\nend" formats "while 1 &&\n2 &&\n3\n4\nend" formats "'\\n'" formats "'\\n'" formats "foo \\\n 1,\n 2" formats "foo \\\n 1,\n 2" formats "return 1" formats "return 1" formats "typeof( 1, 2, 3 )" formats "typeof( 1, 2, 3 )" formats "false" formats "false" formats "macro foo\nend" formats "macro foo\nend" formats "[/ /, / /]" formats "[/ /, / /]" 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 "if 0\n1 &&\n2 &&\n3\nend" formats "if 0\n1 &&\n2 &&\n3\nend" 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 "\"foo \#{ 1 } \#{ __DIR__ }\"" formats "\"foo \#{ 1 } \#{ __DIR__ }\"" 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 "->@@foo.foo" formats "->@@foo.foo" formats "-> : Int32 | String { 1 }" formats "-> : Int32 | String { 1 }" formats "1 ? 2 : 3" formats "1 ? 2 : 3" formats ":&*" formats ":&*" formats "x : Int32 = 1" formats "x : Int32 = 1" formats "def foo(a : T) forall T\n #\n\n\nend" formats "def foo(a : T) forall T\n #\n\n\nend" formats "yield" formats "yield" formats "def foo(x : X) forall X , Y; end" formats "def foo(x : X) forall X , Y; end" formats "foo &.bar" formats "foo &.bar" formats "#######" formats "#######" formats "macro foo\n {{ 1 + 2 }}\nend" formats "macro foo\n {{ 1 + 2 }}\nend" formats "if 1\n {% if 2 %} {% end %}\nend" formats "if 1\n {% if 2 %} {% end %}\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 &.b.as C" formats "a &.b.as C" formats "foo : (A -> B)\nbar : C" formats "foo : (A -> B)\nbar : C" formats "def foo(**z, &block)\nend" formats "def foo(**z, &block)\nend" formats " macro foo\n end\n\n :+" formats " macro foo\n end\n\n :+" formats "foo a: 1\nb" formats "foo a: 1\nb" 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 &.as(T).bar" formats "foo &.as(T).bar" formats "foo &.is_a?(T).bar" formats "foo &.is_a?(T).bar" formats "private FOO = 2\nprivate A = 1" formats "private FOO = 2\nprivate A = 1" formats ":&" formats ":&" formats "foo.bar(&.% baz)" formats "foo.bar(&.% baz)" formats "::NamedTuple()" formats "::NamedTuple()" formats "def foo(a : T) forall T\n #\n\nend" formats "def foo(a : T) forall T\n #\n\nend" formats "macro foo(\n a,\n **b,\n)\nend" formats "macro foo(\n a,\n **b,\n)\nend" formats "1234 # foo\n1 # bar" formats "1234 # foo\n1 # bar" formats "foo(\n a: 1,\n b: 2,\n )\n" formats "foo(\n a: 1,\n b: 2,\n )\n" formats "alias A = (B) -> C" formats "alias A = (B) -> C" formats "foo[&.bar] = 1" formats "foo[&.bar] = 1" formats "a = \nif 1\n2\nend" formats "a = \nif 1\n2\nend" formats "foo &.responds_to?(:foo).bar" formats "foo &.responds_to?(:foo).bar" formats "macro foo\n %foo{x,y}\nend" formats "macro foo\n %foo{x,y}\nend" formats "alias Foo = Bar" formats "alias Foo = Bar" formats "a&+1" formats "a&+1" formats "[] of (((Array(T))))" formats "[] of (((Array(T))))" formats "def foo\n# hello\n1\nend" formats "def foo\n# hello\n1\nend" formats "foo(\n 1, 2,\n&block)" formats "foo(\n 1, 2,\n&block)" formats "asm(\"nop\" : \"a\"(0) : \"b\"(1) )" formats "asm(\"nop\" : \"a\"(0) : \"b\"(1) )" formats "foo &.bar do\n 1 + 2\nend" formats "foo &.bar do\n 1 + 2\nend" formats "{1 => 2, 3 => 4}\n{5234234 => 234098234, 7 => 8}" formats "{1 => 2, 3 => 4}\n{5234234 => 234098234, 7 => 8}" formats " ((1) + 2)" formats " ((1) + 2)" 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 "def foo(\n foo,\n @[MyAnn] &block\n); end" formats "def foo(\n foo,\n @[MyAnn] &block\n); end" formats "return *1" formats "return *1" 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 "1\n2 \n # foo" formats "1\n2 \n # foo" formats "break *1" formats "break *1" formats "return { {1, 2}, {3, 4} }, 5" formats "return { {1, 2}, {3, 4} }, 5" formats "foo.[] = 1" formats "foo.[] = 1" 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 "def foo ( &@block) \n end" formats "def foo ( &@block) \n end" formats "foo(1, &.bar)" formats "foo(1, &.bar)" formats "1\n# hello\n\n\n" formats "1\n# hello\n\n\n" formats "{} of A => B\n{} of Foo => Bar" formats "{} of A => B\n{} of Foo => Bar" formats "foo(&.@bar)" formats "foo(&.@bar)" formats ":/" formats ":/" formats "begin\n a\nend.b { }\nc" formats "begin\n a\nend.b { }\nc" formats "foo . bar = 1" formats "foo . bar = 1" formats "def foo : A | B(C)\n nil\nend" formats "def foo : A | B(C)\n nil\nend" formats "yield(1 , \n2)" formats "yield(1 , \n2)" 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 "case 1\nelse\n 2\nend" formats "case 1\nelse\n 2\nend" formats "def foo\n <<-FOO\n foo \#{1}\n FOO\nend" formats "def foo\n <<-FOO\n foo \#{1}\n FOO\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 "return( *1 , *2 )" formats "return( *1 , *2 )" formats "x : { {A, B}, {C, D} }" formats "x : { {A, B}, {C, D} }" formats "def foo(@[MyAnn] &); end" formats "def foo(@[MyAnn] &); end" formats "1.<=() { 3 }" formats "1.<=() { 3 }" formats "case 1\nwhen 2\n#comment\nend" formats "case 1\nwhen 2\n#comment\nend" formats "asm(\"a\" :::: \"volatile\"\n)" formats "asm(\"a\" :::: \"volatile\"\n)" formats "[1, 2, 3, ]" formats "[1, 2, 3, ]" 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\nend\nif 3\nend" formats "if 1\n2\nend\nif 3\nend" formats "def foo ( x , y ) \n end" formats "def foo ( x , y ) \n end" formats "foo 1, a: 1,\nb: 2,\nc: 3" formats "foo 1, a: 1,\nb: 2,\nc: 3" formats "[] of (Array(T))" formats "[] of (Array(T))" formats "(())" formats "(())" 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 "1 rescue 2" formats "1 rescue 2" formats "asm(\"nop\"\n: \"a\"(0) )" formats "asm(\"nop\"\n: \"a\"(0) )" formats "foo[a, b: 2]" formats "foo[a, b: 2]" formats "# foo\na = 1 # bar" formats "# foo\na = 1 # bar" 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 "{\n query => <<-HEREDOC,\n foo\n HEREDOC\n}" formats "{\n query => <<-HEREDOC,\n foo\n HEREDOC\n}" formats "foo(1, 2,)" formats "foo(1, 2,)" formats "def foo(**z)\nend" formats "def foo(**z)\nend" formats "macro flags\n {% if 1 %}\\\n {% end %}\\\nend" formats "macro flags\n {% if 1 %}\\\n {% end %}\\\nend" formats "lib Foo\nfun foo() : Int32\nend" formats "lib Foo\nfun foo() : Int32\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 "foo(\n 1,\n) do\n 2\nend" formats "foo(\n 1,\n) do\n 2\nend" formats "foo : (self)?" formats "foo : (self)?" formats "`foo`" formats "`foo`" formats "lib Foo\n fun foo = bar(Int32) : Int32\nend" formats "lib Foo\n fun foo = bar(Int32) : Int32\nend" formats "-> : Array(Int32) {}" formats "-> : Array(Int32) {}" formats "foo(1,\n &.bar)" formats "foo(1,\n &.bar)" 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 "FOO = 2\nA = 1" formats "FOO = 2\nA = 1" formats "def foo : Int32\n 1\nend" formats "def foo : Int32\n 1\nend" formats "foo \"bar\": 1, \"baz qux\": 2" formats "foo \"bar\": 1, \"baz qux\": 2" formats "foo ()" formats "foo ()" formats "->foo=" formats "->foo=" formats "case\nend" formats "case\nend" formats "Foo( Bar( ) )" formats "Foo( Bar( ) )" formats "next( *1 , *2 )" formats "next( *1 , *2 )" formats "foo(//, //)" formats "foo(//, //)" formats "x : Int32 |\nString" formats "x : Int32 |\nString" formats "$~.bar" formats "$~.bar" formats "%{hello}" formats "%{hello}" formats "a = foo(bar(\n 1,\n 2,\n))" formats "a = foo(bar(\n 1,\n 2,\n))" formats "1 # foo\n1234 # bar" formats "1 # foo\n1234 # bar" formats "unless a\nunless b\nelse\n4\nend\nend" formats "unless a\nunless b\nelse\n4\nend\nend" formats "a.b &.[c]?\n1" formats "a.b &.[c]?\n1" formats "foo(\n 1, # hola\n2, # chau\n )" formats "foo(\n 1, # hola\n2, # chau\n )" formats "foo(out x)" formats "foo(out x)" formats "{ foo: 1 }" formats "{ foo: 1 }" 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 "%i(one two three)" formats "%i(one two three)" formats "{% if true %}\n <<-FOO\n hello \n FOO\n{% end %}" formats "{% if true %}\n <<-FOO\n hello \n FOO\n{% end %}" formats "$?.bar" formats "$?.bar" formats "1.as Int32" formats "1.as Int32" formats "1\n\n2" formats "1\n\n2" formats "@[Foo( 1, 2, foo: 3 )]" formats "@[Foo( 1, 2, foo: 3 )]" formats "macro foo\n %foo{x.id+2}\nend" formats "macro foo\n %foo{x.id+2}\nend" formats "if 1;\n2;\nelse;\n3;\nend" formats "if 1;\n2;\nelse;\n3;\nend" formats "a.!" formats "a.!" formats "begin\n 0[1] rescue 2 end" formats "begin\n 0[1] rescue 2 end" formats "foo(\n 1,\n # 2,\n 3,\n)" formats "foo(\n 1,\n # 2,\n 3,\n)" formats "0x1234_u32" formats "0x1234_u32" formats "def foo(\n **a\n)\n 1\nend" formats "def foo(\n **a\n)\n 1\nend" formats "if 1\n2 && 3\nend" formats "if 1\n2 && 3\nend" formats "->@foo.foo=" formats "->@foo.foo=" 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 "case 1 \n when 2 ; 3 \n end" formats "case 1 \n when 2 ; 3 \n end" formats "if 1\nif 2\n3 # foo\nend\nend" formats "if 1\nif 2\n3 # foo\nend\nend" formats "x[ y ] += 1" formats "x[ y ] += 1" formats "->( x : Int32 , y ) { x }" formats "->( x : Int32 , y ) { x }" formats "struct Foo\n # bar\n # baz\n1\nend" formats "struct Foo\n # bar\n # baz\n1\nend" formats "&+ 1" formats "&+ 1" formats "foo[&.bar]?" formats "foo[&.bar]?" formats "1+2*3" formats "1+2*3" formats "as Foo" formats "as Foo" formats "[foo <<-X\nbar\nX\n]" formats "[foo <<-X\nbar\nX\n]" formats "lib Foo\nunion Foo\nend\nend" formats "lib Foo\nunion Foo\nend\nend" formats "x : Int32" formats "x : Int32" formats "1#foo" formats "1#foo" formats "if 1\n2\nelsif\n3\n4\nend" formats "if 1\n2\nelsif\n3\n4\nend" formats "return { {1, 2}, {3, 4} }" formats "return { {1, 2}, {3, 4} }" formats "foo a , **b" formats "foo a , **b" formats "if 1;\n2; end" formats "if 1;\n2; end" formats "- 1" formats "- 1" formats "foo.% bar" formats "foo.% bar" formats "foo(->do\n 1 + 2\nend)" formats "foo(->do\n 1 + 2\nend)" formats "alias A = ((B(C | D) | E) | F)" formats "alias A = ((B(C | D) | E) | F)" 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 "if 1\n foo(\n bar,\n # comment\n )\nend" formats "if 1\n foo(\n bar,\n # comment\n )\nend" formats "yield (1).foo" formats "yield (1).foo" 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 "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 "long_variable_name = [1, 2, 3,\n 4, 5, 6]" formats "long_variable_name = [1, 2, 3,\n 4, 5, 6]" formats "a(&.b.c.as C)" formats "a(&.b.c.as C)" formats "foo &.[]?( 1, 2 )" formats "foo &.[]?( 1, 2 )" formats "{ {1, 2, 3} => 4 }" formats "{ {1, 2, 3} => 4 }" formats "case 1 \n when 2 , 3 \n 4 \n end" formats "case 1 \n when 2 , 3 \n 4 \n end" formats "def foo : self | Nil\n nil\nend" formats "def foo : self | Nil\n nil\nend" formats "&- 1" formats "&- 1" formats "foo . is_a? Bar" formats "foo . is_a? Bar" formats "return *1 ,2" formats "return *1 ,2" formats "class Foo ( T )\nend" formats "class Foo ( T )\nend" formats "args.any? &.name.baz" formats "args.any? &.name.baz" formats "@x ||= 1" formats "@x ||= 1" formats "case 0\nwhen 0 then 1; 2\n# Comments\nend" formats "case 0\nwhen 0 then 1; 2\n# Comments\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 "a = 1 + # foo\n2" formats "a = 1 + # foo\n2" formats "module Foo # foo\nend" formats "module Foo # foo\nend" formats "macro flags\n {% if 1 %}{{1}}a{{2}}{% end %}\\\nend" formats "macro flags\n {% if 1 %}{{1}}a{{2}}{% end %}\\\nend" formats "a = foo(bar([\n 1,\n]))" formats "a = foo(bar([\n 1,\n]))" formats "enum Foo : Int32\nA = 1\ndef foo\n1\nend\nend" formats "enum Foo : Int32\nA = 1\ndef foo\n1\nend\nend" formats "foo(1, 2,\n)" formats "foo(1, 2,\n)" formats "-> : Int32* {}" formats "-> : Int32* {}" formats "asm(\"a\" : \"b\"(c) : \"d\"(e) :: \"volatile\")" formats "asm(\"a\" : \"b\"(c) : \"d\"(e) :: \"volatile\")" formats "1 &&\n2 &&\n3" formats "1 &&\n2 &&\n3" formats "~ 1" formats "~ 1" formats "[c.x]\n .foo" formats "[c.x]\n .foo" formats "foo[x: 1, &.bar] = 1" formats "foo[x: 1, &.bar] = 1" formats "enum Foo\nend" formats "enum Foo\nend" formats "[] of Int32\n1" formats "[] of Int32\n1" formats "x : Int32*" formats "x : Int32*" formats "foo {;1}" formats "foo {;1}" formats "foo.bar\n.baz" formats "foo.bar\n.baz" 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 "bar = foo([\n 1,\n 2,\n 3,\n])" formats "bar = foo([\n 1,\n 2,\n 3,\n])" formats "-> :: foo!" formats "-> :: foo!" formats "asm(\"nop\" : : )" formats "asm(\"nop\" : : )" formats "foo.bar += 2" formats "foo.bar += 2" formats "foo.bar(&.%(baz))" formats "foo.bar(&.%(baz))" formats "asm(\"nop\" : \"a\"(0) : \"b\"(1), \"c\"(2) )" formats "asm(\"nop\" : \"a\"(0) : \"b\"(1), \"c\"(2) )" 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 "__FILE__" formats "__FILE__" formats "def x(@y = ->(z) {})\nend" formats "def x(@y = ->(z) {})\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 "macro foo\n \\{\nend" formats "macro foo\n \\{\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\n.bar\n.baz" formats "foo\n.bar\n.baz" formats "1 # foo\n2 # bar" formats "1 # foo\n2 # bar" formats "def foo(x : A(B), y)\nend" formats "def foo(x : A(B), y)\nend" formats "<<-HTML\n hello \n HTML" formats "<<-HTML\n hello \n HTML" formats "# Hello\n#\n# ```cr\n# 1\n# ```\n# Bye" formats "# Hello\n#\n# ```cr\n# 1\n# ```\n# Bye" formats "def foo ( @@x) \n end" formats "def foo ( @@x) \n end" 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 "class Foo # foo\nend" formats "class Foo # foo\nend" formats "foo(<<-X,\na\nX\n 1)" formats "foo(<<-X,\na\nX\n 1)" formats " {% for x in y %} 2 {% end %}" formats " {% for x in y %} 2 {% 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 "foo.bar = \n1" formats "foo.bar = \n1" formats "return {1, 2}, {3, 4}" formats "return {1, 2}, {3, 4}" formats "->@foo.foo" formats "->@foo.foo" gives proper line number in syntax error inside macro gives proper line number in syntax error inside macro formats "asm(\"a\" ::: \"f\"\n)" formats "asm(\"a\" ::: \"f\"\n)" formats "foo(\"bar\": 1, \"baz qux\": 2)" formats "foo(\"bar\": 1, \"baz qux\": 2)" formats "\"hel\nlo\"" formats "\"hel\nlo\"" 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 "foo . responds_to? :bar" formats "foo . responds_to? :bar" formats "-> { 1 }" formats "-> { 1 }" formats "-> : {Int32, String} {}" formats "-> : {Int32, String} {}" formats "def foo(@[MyAnn] & : String -> Nil); end" formats "def foo(@[MyAnn] & : String -> Nil); end" formats "foo bar, \\\nbaz" formats "foo bar, \\\nbaz" 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 "macro foo( x = 1, y = 2, &block)\nend" formats "macro foo( x = 1, y = 2, &block)\nend" formats "::NamedTuple(T)" formats "::NamedTuple(T)" formats "asm(\n# foo\n\"nop\"\n# bar\n)" formats "asm(\n# foo\n\"nop\"\n# bar\n)" formats " {%\na = 1 %}" formats " {%\na = 1 %}" formats "foo &.bar.responds_to?(:baz)" formats "foo &.bar.responds_to?(:baz)" formats "foo &.bar( 1 , 2 )" formats "foo &.bar( 1 , 2 )" formats "foo : self? | A" formats "foo : self? | A" formats "fun foo(x : Int32) : Int32\n 1\nend" formats "fun foo(x : Int32) : Int32\n 1\nend" formats "NamedTuple()" formats "NamedTuple()" formats "foo(\"b\#{1}\" \\\n\"baz\")" formats "foo(\"b\#{1}\" \\\n\"baz\")" formats "a(&.b.c.as(C))" formats "a(&.b.c.as(C))" formats "macro foo\n{% verbatim do %}1 + 2{% end %}\nend" formats "macro foo\n{% verbatim do %}1 + 2{% end %}\nend" formats "-> do\nend" formats "-> do\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 "nil" formats "nil" formats "x.is_a? T\n3\n" formats "x.is_a? T\n3\n" formats "->{ x }" formats "->{ x }" formats "macro foo(\n a,\n *b,\n)\nend" formats "macro foo(\n a,\n *b,\n)\nend" formats "0_u64" formats "0_u64" formats "-> :: Foo . foo=" formats "-> :: Foo . foo=" formats "lib Foo\n fun bar = Bar\nend" formats "lib Foo\n fun bar = Bar\nend" formats "require \"foo\"\n\n@x : Int32\n\nclass Bar\nend" formats "require \"foo\"\n\n@x : Int32\n\nclass Bar\nend" formats "foo . responds_to?( :bar )" formats "foo . responds_to?( :bar )" formats "def foo(*y, **z)\nend" formats "def foo(*y, **z)\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 "next {1, 2}, 3" formats "next {1, 2}, 3" formats "ary.size = (1).to_i" formats "ary.size = (1).to_i" formats "private getter foo" formats "private getter foo" formats "\"foo \#{ __DIR__ }\"" formats "\"foo \#{ __DIR__ }\"" formats "{ 1 => 2 , 3 => 4 }" formats "{ 1 => 2 , 3 => 4 }" formats "<<-HTML\n \#{__FILE__}\n HTML" formats "<<-HTML\n \#{__FILE__}\n HTML" formats "\"\#{\"foo\"}\"" formats "\"\#{\"foo\"}\"" 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 "a = 1\ncase\nwhen 2\nelse\n a /= 3\nend" formats "a = 1\ncase\nwhen 2\nelse\n a /= 3\nend" formats "Foo" formats "Foo" formats "1 \\\nif 2" formats "1 \\\nif 2" formats "$? = 1" formats "$? = 1" formats "@[ Foo(foo: 1) ]\ndef foo\nend" formats "@[ Foo(foo: 1) ]\ndef foo\nend" formats "@[ Foo ]\ndef foo\nend" formats "@[ Foo ]\ndef foo\nend" formats " {%\na = 1\n %}" formats " {%\na = 1\n %}" 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 "def foo( & block )\nend" formats "def foo( & block )\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 "a = if 1\n2\nelse\n3\nend" formats "a = if 1\n2\nelse\n3\nend" formats "def foo ( x = 1 ) \n end" formats "def foo ( x = 1 ) \n end" formats "def foo(@[AnnOne] @[AnnTwo] v); end" formats "def foo(@[AnnOne] @[AnnTwo] v); end" formats "foo : (A) | D" formats "foo : (A) | D" formats "if 1\n {% for x in y %} {% end %}\nend" formats "if 1\n {% for x in y %} {% end %}\nend" formats "module Foo; 1; end" formats "module Foo; 1; end" 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 "while 1 # foo\n # bar\n 2\nend" formats "while 1 # foo\n # bar\n 2\nend" formats "macro foo\n %foo\nend" formats "macro foo\n %foo\nend" formats "->{}" formats "->{}" 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 "macro foo( x , y )\nend" formats "macro foo( x , y )\nend" formats "[\n1, # a\n2, # b\n 3 # c\n]" formats "[\n1, # a\n2, # b\n 3 # c\n]" formats "def foo(\nx, #foo\nz #bar\n)\nend" formats "def foo(\nx, #foo\nz #bar\n)\nend" formats "Foo( * T, { * A ,*\n B } )" formats "Foo( * T, { * A ,*\n B } )" formats " 1" formats " 1" formats "-> :: Foo . foo?" formats "-> :: Foo . foo?" formats "alias A = ( A | B )" formats "alias A = ( A | B )" 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 "unless a\n2\n3\nend" formats "unless a\n2\n3\nend" formats "<<-HTML\n \#{\"foo\"}\n HTML" formats "<<-HTML\n \#{\"foo\"}\n HTML" formats "()" formats "()" formats "1 # foo\n/ 1 /" formats "1 # foo\n/ 1 /" formats "def foo\n 1\n #\n\n\nrescue\nend" formats "def foo\n 1\n #\n\n\nrescue\nend" 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 "begin\n # Comment\n\n\nend" formats "begin\n # Comment\n\n\nend" formats "begin\n begin\n\n end\nend" formats "begin\n begin\n\n end\nend" formats "begin\n1\nrescue ex : Int32 \n3\nend" formats "begin\n1\nrescue ex : Int32 \n3\nend" formats "<<-HTML\n \#{1}x\n y\n HTML" formats "<<-HTML\n \#{1}x\n y\n HTML" 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 if 1\n 2\n end\n%}" formats "{%\n if 1\n 2\n end\n%}" formats "1.==(2) { 3 }" formats "1.==(2) { 3 }" formats "loop do\n 1\nrescue\n 2\nend" formats "loop do\n 1\nrescue\n 2\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 # bar\n # baz\nend" formats "def foo # bar\n # baz\nend" formats "1 * 2" formats "1 * 2" formats "alias A = (B)" formats "alias A = (B)" formats "break 1 , 2" formats "break 1 , 2" formats "if 1\n[ 1 , 2 , 3 ]\nend" formats "if 1\n[ 1 , 2 , 3 ]\nend" formats "macro [](x)\nend" formats "macro [](x)\nend" formats "foo &.[]( 1, 2 )" formats "foo &.[]( 1, 2 )" formats "a = case 1\nwhen 2\n3\nelse\n4\nend" formats "a = case 1\nwhen 2\n3\nelse\n4\nend" formats "foo([\n 1, 2,\n 3, 4,\n])" formats "foo([\n 1, 2,\n 3, 4,\n])" formats "1 # foo\n1234 # bar\n\n10 # bar" formats "1 # foo\n1234 # bar\n\n10 # bar" formats " {% begin %} 2 {% end %}" formats " {% begin %} 2 {% end %}" formats "x : {\"foo bar\": Int32}" formats "x : {\"foo bar\": Int32}" formats "1.>= { 3 }" formats "1.>= { 3 }" formats "def foo(a, **b : Int32)\nend" formats "def foo(a, **b : Int32)\nend" formats "yield( 1 )" formats "yield( 1 )" formats "a&-1" formats "a&-1" formats "begin\n1\nrescue ex\n3\nelse\n4\nend" formats "begin\n1\nrescue ex\n3\nelse\n4\nend" formats "foo x: 1, y: 2" formats "foo x: 1, y: 2" formats "lib Foo\n fun foo = bar(Int32) : Int32\nend" formats "lib Foo\n fun foo = bar(Int32) : Int32\nend" formats "def foo( x , & block : ->)\nend" formats "def foo( x , & block : ->)\nend" formats "break( *1 , *2 )" formats "break( *1 , *2 )" formats "asm(\"a\" : :: : \"volatile\")" formats "asm(\"a\" : :: : \"volatile\")" formats " Array( {x: Int32, y: String } )" formats " Array( {x: Int32, y: String } )" formats " ( 1; 2; 3 ) " formats " ( 1; 2; 3 ) " formats "lib Foo\nfun foo\nend" formats "lib Foo\nfun foo\nend" formats "foo : A(B)\nbar : C" formats "foo : A(B)\nbar : C" formats "next { {1, 2}, {3, 4} }, 5" formats "next { {1, 2}, {3, 4} }, 5" formats "lib Bar\n enum Foo\n A\n end\nend" formats "lib Bar\n enum Foo\n A\n end\nend" formats "foo { | a, ( b , c, ), | a + b + c }" formats "foo { | a, ( b , c, ), | a + b + c }" formats "asm(\"a\" : \"b\"(1), \"c\"(2) : \"d\"(3) : : \"volatile\")" formats "asm(\"a\" : \"b\"(1), \"c\"(2) : \"d\"(3) : : \"volatile\")" 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\n .foo1(bar\n .bar1\n .bar2)" formats "foo\n .foo1(bar\n .bar1\n .bar2)" formats "Union(Int32, String)?" formats "Union(Int32, String)?" formats "asm(\"nop\" : \"a\"(0) )" formats "asm(\"nop\" : \"a\"(0) )" formats "def foo ( x , y , ) \n end" formats "def foo ( x , y , ) \n end" formats "foo[1, &.bar]" formats "foo[1, &.bar]" formats "case\nend" formats "case\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 "case 1 \n when 2 ,\n 3 \n 4 \n end" formats "case 1 \n when 2 ,\n 3 \n 4 \n end" formats "x : Int32[ 8 ]" formats "x : Int32[ 8 ]" formats "foo.bar.baz\n.qux" formats "foo.bar.baz\n.qux" formats "lib Foo\nend" formats "lib Foo\nend" formats "enum Baz\nA = 1\nFOO = 2\n\nEX = 3\nend" formats "enum Baz\nA = 1\nFOO = 2\n\nEX = 3\nend" formats "b &.[c].d" formats "b &.[c].d" formats "return( 1 , 2 )" formats "return( 1 , 2 )" formats "foo { | a, ( b , (c, d) ) | a + b + c }" formats "foo { | a, ( b , (c, d) ) | a + b + c }" formats "[ * [ * [ 1 ] ], * \n[ 2] ]" formats "[ * [ * [ 1 ] ], * \n[ 2] ]" formats "foo &.bar.as(T)" formats "foo &.bar.as(T)" formats "1.[]= do\nend" formats "1.[]= do\nend" formats "b &.[c]?.d" formats "b &.[c]?.d" formats "def foo(x : (A | B)) \n end" formats "def foo(x : (A | B)) \n end" formats "1 ?\n 2 : \n 3" formats "1 ?\n 2 : \n 3" formats "1 \\\nensure 2" formats "1 \\\nensure 2" 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" Unicode bi-directional control characters formats "%r(\u202A)" formats "%r(\u202A)" formats "{\"\u202B\": 1}" formats "{\"\u202B\": 1}" formats "\"\u2067\"" formats "\"\u2067\"" formats "%i(\u202B)" formats "%i(\u202B)" formats "def foo(\"\u202C\" x)\nend" formats "def foo(\"\u202C\" x)\nend" formats "def foo(\"\u202E\" x)\nend" formats "def foo(\"\u202E\" x)\nend" formats "def foo(\"\u2068\" x)\nend" formats "def foo(\"\u2068\" x)\nend" formats "\"\u202A\#{1}\"" formats "\"\u202A\#{1}\"" formats "\"\\c\u2069\#{1}\"" formats "\"\\c\u2069\#{1}\"" formats "\"\\c\u2067\#{1}\"" formats "\"\\c\u2067\#{1}\"" formats "foo(\"\u202A\": 1)" formats "foo(\"\u202A\": 1)" formats "\"\u202B\"" formats "\"\u202B\"" formats "%Q(\u202A)" formats "%Q(\u202A)" formats "<<-'EOS'\n\u202A\nEOS" formats "<<-'EOS'\n\u202A\nEOS" formats "%r(\u202B\#{1})" formats "%r(\u202B\#{1})" formats "/\u202A/" formats "/\u202A/" formats "%w(\u202B)" formats "%w(\u202B)" formats "foo(\"\u2069\": 1)" formats "foo(\"\u2069\": 1)" formats "NamedTuple(\"\u202B\": Int32)" formats "NamedTuple(\"\u202B\": Int32)" formats "<<-EOS\n\u2066\nEOS" formats "<<-EOS\n\u2066\nEOS" formats "<<-'EOS'\n\u202B\nEOS" formats "<<-'EOS'\n\u202B\nEOS" formats "%q(\u202A)" formats "%q(\u202A)" formats "\"\u2066\"" formats "\"\u2066\"" formats "<<-EOS\n\u202B\nEOS" formats "<<-EOS\n\u202B\nEOS" formats "\"\u202D\#{1}\"" formats "\"\u202D\#{1}\"" formats "\"\\c\u2068\"" formats "\"\\c\u2068\"" formats "\"\u2069\#{1}\"" formats "\"\u2069\#{1}\"" formats "%r(\u2069\#{1})" formats "%r(\u2069\#{1})" formats "%(\u2069)" formats "%(\u2069)" formats "\"\u202C\"" formats "\"\u202C\"" formats "foo(\"\u2067\": 1)" formats "foo(\"\u2067\": 1)" formats "\"\u202B\#{1}\"" formats "\"\u202B\#{1}\"" formats "{\"\u2069\": 1}" formats "{\"\u2069\": 1}" formats "NamedTuple(\"\u2068\": Int32)" formats "NamedTuple(\"\u2068\": Int32)" formats "%q(\u2069)" formats "%q(\u2069)" formats "<<-EOS\n\u202D\nEOS" formats "<<-EOS\n\u202D\nEOS" formats "foo(\"\u202C\": 1)" formats "foo(\"\u202C\": 1)" formats "NamedTuple(\"\u2066\": Int32)" formats "NamedTuple(\"\u2066\": Int32)" formats "%Q(\u2066\#{1})" formats "%Q(\u2066\#{1})" formats "%(\u202A)" formats "%(\u202A)" formats "/\u2067/" formats "/\u2067/" formats "NamedTuple(\"\u202E\": Int32)" formats "NamedTuple(\"\u202E\": Int32)" formats "%w(\u2067)" formats "%w(\u2067)" formats "%r(\u202C\#{1})" formats "%r(\u202C\#{1})" formats "\"\\c\u202A\#{1}\"" formats "\"\\c\u202A\#{1}\"" formats "def foo(\"\u2069\" x)\nend" formats "def foo(\"\u2069\" x)\nend" formats "%r(\u2067)" formats "%r(\u2067)" formats "%q(\u2066)" formats "%q(\u2066)" formats "<<-EOS\n\u2068\#{1}\nEOS" formats "<<-EOS\n\u2068\#{1}\nEOS" formats "%Q(\u202B\#{1})" formats "%Q(\u202B\#{1})" formats "\"\\c\u202D\#{1}\"" formats "\"\\c\u202D\#{1}\"" formats "foo(\"\u2066\": 1)" formats "foo(\"\u2066\": 1)" formats "%Q(\u202C)" formats "%Q(\u202C)" formats "%Q(\u2067)" formats "%Q(\u2067)" formats "<<-'EOS'\n\u202C\nEOS" formats "<<-'EOS'\n\u202C\nEOS" formats "%(\u2066)" formats "%(\u2066)" formats "<<-EOS\n\u202D\#{1}\nEOS" formats "<<-EOS\n\u202D\#{1}\nEOS" formats "{\"\u202E\": 1}" formats "{\"\u202E\": 1}" formats "foo(\"\u2068\": 1)" formats "foo(\"\u2068\": 1)" formats "def foo(\"\u202B\" x)\nend" formats "def foo(\"\u202B\" x)\nend" formats "\"\\c\u202E\"" formats "\"\\c\u202E\"" formats "%r(\u2068)" formats "%r(\u2068)" formats "%r(\u2067\#{1})" formats "%r(\u2067\#{1})" formats "/\u202B/" formats "/\u202B/" formats "/\u2066\#{1}/" formats "/\u2066\#{1}/" formats "\"\u202D\"" formats "\"\u202D\"" formats "%i(\u202A)" formats "%i(\u202A)" formats "\"\\c\u2066\"" formats "\"\\c\u2066\"" formats "/\u2068\#{1}/" formats "/\u2068\#{1}/" formats "<<-'EOS'\n\u2068\nEOS" formats "<<-'EOS'\n\u2068\nEOS" formats "<<-'EOS'\n\u2066\nEOS" formats "<<-'EOS'\n\u2066\nEOS" formats "%Q(\u202E)" formats "%Q(\u202E)" formats "foo(\"\u202E\": 1)" formats "foo(\"\u202E\": 1)" formats "%r(\u2069)" formats "%r(\u2069)" formats "%i(\u2069)" formats "%i(\u2069)" formats "\"\u2066\#{1}\"" formats "\"\u2066\#{1}\"" formats "{\"\u2068\": 1}" formats "{\"\u2068\": 1}" formats "%Q(\u202B)" formats "%Q(\u202B)" formats "%r(\u202E)" formats "%r(\u202E)" formats "{\"\u2066\": 1}" formats "{\"\u2066\": 1}" formats "<<-'EOS'\n\u2069\nEOS" formats "<<-'EOS'\n\u2069\nEOS" formats "\"\u202E\#{1}\"" formats "\"\u202E\#{1}\"" formats "/\u202B\#{1}/" formats "/\u202B\#{1}/" formats "%r(\u202C)" formats "%r(\u202C)" formats "<<-EOS\n\u2069\nEOS" formats "<<-EOS\n\u2069\nEOS" formats "%Q(\u2068\#{1})" formats "%Q(\u2068\#{1})" formats "\"\u2067\#{1}\"" formats "\"\u2067\#{1}\"" formats "{\"\u202D\": 1}" formats "{\"\u202D\": 1}" formats "\"\\c\u2069\"" formats "\"\\c\u2069\"" formats "NamedTuple(\"\u202D\": Int32)" formats "NamedTuple(\"\u202D\": Int32)" formats "<<-EOS\n\u202C\nEOS" formats "<<-EOS\n\u202C\nEOS" formats "\"\u2068\"" formats "\"\u2068\"" formats "\"\\c\u202B\#{1}\"" formats "\"\\c\u202B\#{1}\"" formats "%Q(\u2067\#{1})" formats "%Q(\u2067\#{1})" formats "%r(\u202B)" formats "%r(\u202B)" formats "<<-EOS\n\u2069\#{1}\nEOS" formats "<<-EOS\n\u2069\#{1}\nEOS" formats "%(\u202D)" formats "%(\u202D)" formats "%Q(\u202D\#{1})" formats "%Q(\u202D\#{1})" formats "<<-EOS\n\u202B\#{1}\nEOS" formats "<<-EOS\n\u202B\#{1}\nEOS" formats "/\u202A\#{1}/" formats "/\u202A\#{1}/" formats "{\"\u2067\": 1}" formats "{\"\u2067\": 1}" formats "%r(\u202A\#{1})" formats "%r(\u202A\#{1})" formats "\"\\c\u2066\#{1}\"" formats "\"\\c\u2066\#{1}\"" formats "NamedTuple(\"\u202C\": Int32)" formats "NamedTuple(\"\u202C\": Int32)" formats "%q(\u202D)" formats "%q(\u202D)" formats "{\"\u202A\": 1}" formats "{\"\u202A\": 1}" formats "<<-'EOS'\n\u202E\nEOS" formats "<<-'EOS'\n\u202E\nEOS" formats "\"\u2069\"" formats "\"\u2069\"" formats "%i(\u202E)" formats "%i(\u202E)" formats "%r(\u202D\#{1})" formats "%r(\u202D\#{1})" formats "%w(\u202D)" formats "%w(\u202D)" formats "foo(\"\u202B\": 1)" formats "foo(\"\u202B\": 1)" formats "%i(\u2067)" formats "%i(\u2067)" formats "%w(\u202A)" formats "%w(\u202A)" formats "%Q(\u2069)" formats "%Q(\u2069)" formats "NamedTuple(\"\u2069\": Int32)" formats "NamedTuple(\"\u2069\": Int32)" formats "\"\\c\u202C\#{1}\"" formats "\"\\c\u202C\#{1}\"" formats "\"\\c\u202B\"" formats "\"\\c\u202B\"" formats "<<-'EOS'\n\u202D\nEOS" formats "<<-'EOS'\n\u202D\nEOS" formats "%Q(\u202E\#{1})" formats "%Q(\u202E\#{1})" formats "<<-EOS\n\u2066\#{1}\nEOS" formats "<<-EOS\n\u2066\#{1}\nEOS" formats "\"\u2068\#{1}\"" formats "\"\u2068\#{1}\"" formats "%(\u202E)" formats "%(\u202E)" formats "def foo(\"\u202D\" x)\nend" formats "def foo(\"\u202D\" x)\nend" formats "%Q(\u2069\#{1})" formats "%Q(\u2069\#{1})" formats "/\u2066/" formats "/\u2066/" formats "%(\u2068)" formats "%(\u2068)" formats "%q(\u2068)" formats "%q(\u2068)" formats "/\u2067\#{1}/" formats "/\u2067\#{1}/" formats "\"\\c\u2068\#{1}\"" formats "\"\\c\u2068\#{1}\"" formats "<<-EOS\n\u202A\#{1}\nEOS" formats "<<-EOS\n\u202A\#{1}\nEOS" formats "%r(\u2066)" formats "%r(\u2066)" formats "%Q(\u202D)" formats "%Q(\u202D)" formats "def foo(\"\u2066\" x)\nend" formats "def foo(\"\u2066\" x)\nend" formats "\"\u202E\"" formats "\"\u202E\"" formats "%(\u202B)" formats "%(\u202B)" formats "<<-EOS\n\u202E\#{1}\nEOS" formats "<<-EOS\n\u202E\#{1}\nEOS" formats "%q(\u2067)" formats "%q(\u2067)" formats "/\u202D\#{1}/" formats "/\u202D\#{1}/" formats "/\u202C\#{1}/" formats "/\u202C\#{1}/" formats "def foo(\"\u2067\" x)\nend" formats "def foo(\"\u2067\" x)\nend" formats "<<-EOS\n\u2067\#{1}\nEOS" formats "<<-EOS\n\u2067\#{1}\nEOS" formats "foo(\"\u202D\": 1)" formats "foo(\"\u202D\": 1)" formats "%Q(\u202C\#{1})" formats "%Q(\u202C\#{1})" formats "NamedTuple(\"\u2067\": Int32)" formats "NamedTuple(\"\u2067\": Int32)" formats "%r(\u202D)" formats "%r(\u202D)" formats "%q(\u202B)" formats "%q(\u202B)" formats "/\u202C/" formats "/\u202C/" formats "def foo(\"\u202A\" x)\nend" formats "def foo(\"\u202A\" x)\nend" formats "<<-EOS\n\u202A\nEOS" formats "<<-EOS\n\u202A\nEOS" formats "%q(\u202C)" formats "%q(\u202C)" formats "{\"\u202C\": 1}" formats "{\"\u202C\": 1}" formats "%w(\u2066)" formats "%w(\u2066)" formats "<<-EOS\n\u2068\nEOS" formats "<<-EOS\n\u2068\nEOS" formats "%i(\u2068)" formats "%i(\u2068)" formats "/\u2069/" formats "/\u2069/" formats "%w(\u202C)" formats "%w(\u202C)" formats "\"\u202C\#{1}\"" formats "\"\u202C\#{1}\"" formats "%r(\u202E\#{1})" formats "%r(\u202E\#{1})" formats "/\u202D/" formats "/\u202D/" formats "%r(\u2068\#{1})" formats "%r(\u2068\#{1})" formats "\"\\c\u202C\"" formats "\"\\c\u202C\"" formats "\"\\c\u202A\"" formats "\"\\c\u202A\"" formats "<<-EOS\n\u2067\nEOS" formats "<<-EOS\n\u2067\nEOS" formats "%Q(\u2066)" formats "%Q(\u2066)" formats "\"\\c\u202D\"" formats "\"\\c\u202D\"" formats "<<-EOS\n\u202E\nEOS" formats "<<-EOS\n\u202E\nEOS" formats "%q(\u202E)" formats "%q(\u202E)" formats "NamedTuple(\"\u202A\": Int32)" formats "NamedTuple(\"\u202A\": Int32)" formats "%Q(\u2068)" formats "%Q(\u2068)" formats "/\u2069\#{1}/" formats "/\u2069\#{1}/" formats "<<-'EOS'\n\u2067\nEOS" formats "<<-'EOS'\n\u2067\nEOS" formats "%w(\u202E)" formats "%w(\u202E)" formats "/\u202E\#{1}/" formats "/\u202E\#{1}/" formats "\"\u202A\"" formats "\"\u202A\"" formats "%(\u202C)" formats "%(\u202C)" formats "%(\u2067)" formats "%(\u2067)" formats "%Q(\u202A\#{1})" formats "%Q(\u202A\#{1})" formats "%w(\u2068)" formats "%w(\u2068)" formats "%i(\u202D)" formats "%i(\u202D)" formats "%r(\u2066\#{1})" formats "%r(\u2066\#{1})" formats "<<-EOS\n\u202C\#{1}\nEOS" formats "<<-EOS\n\u202C\#{1}\nEOS" formats "%w(\u2069)" formats "%w(\u2069)" formats "\"\\c\u202E\#{1}\"" formats "\"\\c\u202E\#{1}\"" formats "\"\\c\u2067\"" formats "\"\\c\u2067\"" formats "%i(\u202C)" formats "%i(\u202C)" formats "%i(\u2066)" formats "%i(\u2066)" formats "/\u202E/" formats "/\u202E/" formats "/\u2068/" formats "/\u2068/" formats "while 1 # foo\nend" formats "while 1 # foo\nend" formats "class Foo\n1\n\n# foo\nend" formats "class Foo\n1\n\n# foo\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 "case nil\nelse nil; nil\n# comment\nend" formats "case nil\nelse nil; nil\n# comment\nend" formats " <<-HTML\n \#{1}\n HTML" formats " <<-HTML\n \#{1}\n HTML" formats "begin 0[1] rescue 2 end" formats "begin 0[1] rescue 2 end" formats "case 1\nend" formats "case 1\nend" formats "foo.@bar" formats "foo.@bar" formats "-> :: foo?" formats "-> :: foo?" formats "foo = 1\n->foo.[](Int32)" formats "foo = 1\n->foo.[](Int32)" formats "alias X = (A, B) ->\nbar : C" formats "alias X = (A, B) ->\nbar : C" formats "class Foo \n\n 1 \n\nend" formats "class Foo \n\n 1 \n\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 "lib LibFoo\n {% begin %}\n fun foo : Int32\n {% end %}\nend" formats "lib LibFoo\n {% begin %}\n fun foo : Int32\n {% end %}\nend" formats "case 1 \n when 2 \n 3 \n end" formats "case 1 \n when 2 \n 3 \n end" formats "foo \\\n foo: 1,\n bar: 2" formats "foo \\\n foo: 1,\n bar: 2" 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 "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 "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\n / /\nend" formats "begin\n / /\nend" formats "-> : Int32 { }" formats "-> : Int32 { }" formats "# ```text\n# 1 + 2\n# ```" formats "# ```text\n# 1 + 2\n# ```" formats "foo(&.bar)" formats "foo(&.bar)" formats "1 if 2\n# foo\n3" formats "1 if 2\n# foo\n3" formats "foo 1 , 2" formats "foo 1 , 2" formats "bla.select(&.all?{ |x| x } )" formats "bla.select(&.all?{ |x| x } )" 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)\n yield\nend" formats "def foo(x\n)\n yield\nend" formats "def foo(\nx)\n yield\nend" formats "def foo(\nx)\n yield\nend" formats "def foo(\nx,\ny)\n yield\nend" formats "def foo(\nx,\ny)\n yield\nend" formats "def foo(x,\n)\n yield\nend" formats "def foo(x,\n)\n yield\nend" formats "def foo(x ,)\n yield\nend" formats "def foo(x ,)\n yield\nend" formats "def foo(x,\n y)\n yield\nend" formats "def foo(x,\n y)\n yield\nend" formats "def foo()\n yield\nend" formats "def foo()\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 # bar\n yield\nend" formats "def foo # bar\n yield\nend" formats "def foo(a, **b)\n yield\nend" formats "def foo(a, **b)\n yield\nend" formats "def foo(x)\n yield\nend" formats "def foo(x)\n yield\nend" formats "def foo(x,\ny,)\n yield\nend" formats "def foo(x,\ny,)\n yield\nend" formats "def foo\n yield\nend" formats "def foo\n yield\nend" formats "a-1" formats "a-1" formats "if 1\nelse\n2\nend\n3" formats "if 1\nelse\n2\nend\n3" formats "a &.a.!" formats "a &.a.!" formats "def foo(x, **z)\nend" formats "def foo(x, **z)\nend" formats "foo { | a, ( b , c ) | a + b + c }" formats "foo { | a, ( b , c ) | a + b + c }" formats "<<-FOO\nbarfoobar\nFOO" formats "<<-FOO\nbarfoobar\nFOO" formats "->\n:\nInt32\n{\n}" formats "->\n:\nInt32\n{\n}" formats "foo(\n 1,\n 2\n) do\n 1\nend" formats "foo(\n 1,\n 2\n) do\n 1\nend" formats "[\n1,\n2,\n3]" formats "[\n1,\n2,\n3]" formats "a = if 1\n2\n3\nend" formats "a = if 1\n2\n3\nend" formats "return 1 , *2" formats "return 1 , *2" formats "while 1;\n2; end" formats "while 1;\n2; end" formats "[ # foo\n 1,\n]" formats "[ # foo\n 1,\n]" formats "def foo(**a,)\n 1\nend" formats "def foo(**a,)\n 1\nend" formats "foo do;\n1; end" formats "foo do;\n1; end" formats "class Foo\ndef foo\n1\nensure\n2\nend\nend" formats "class Foo\ndef foo\n1\nensure\n2\nend\nend" formats "class Foo\n# nothing\nend" formats "class Foo\n# nothing\nend" formats "foo {;;1}" formats "foo {;;1}" formats "/foo/" formats "/foo/" formats "foo do\n # bar\nend" formats "foo do\n # bar\nend" formats "foo( )" formats "foo( )" formats "yield *1" formats "yield *1" formats "1 # foo" formats "1 # foo" 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(a, # comment\n *b)\nend" formats "def foo(a, # comment\n *b)\nend" formats "{/ / => / /, / / => / /}" formats "{/ / => / /, / / => / /}" formats "lib Foo\nstruct Foo\nx : Int32\nend\nend" formats "lib Foo\nstruct Foo\nx : Int32\nend\nend" formats "next *1 , *2" formats "next *1 , *2" formats "a &.!" formats "a &.!" formats "require \"foo\"" formats "require \"foo\"" formats "case 1 # foo\nwhen 2\nend" formats "case 1 # foo\nwhen 2\nend" formats "x : (A -> B)" formats "x : (A -> B)" formats "enum Foo\n A; B; C\nend\n" formats "enum Foo\n A; B; C\nend\n" formats "def foo\n {{@type}}\nend" formats "def foo\n {{@type}}\nend" formats "asm(\"a\" : : :: \"volatile\")" formats "asm(\"a\" : : :: \"volatile\")" formats "next( 1 , 2 )" formats "next( 1 , 2 )" formats "NamedTuple(\n a: Int32,\n)" formats "NamedTuple(\n a: Int32,\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 "->{1}" formats "->{1}" formats "def foo ( x : Int32 ) \n end" formats "def foo ( x : Int32 ) \n end" 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 "<<-HTML\n \#{\"fo\#{\"o\"}\"}\n HTML" formats "<<-HTML\n \#{\"fo\#{\"o\"}\"}\n HTML" formats "foo &.[]=(1, 2)" formats "foo &.[]=(1, 2)" formats "foo &.[](1, 2)" formats "foo &.[](1, 2)" 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 "NamedTuple(a: Int32,)" formats "NamedTuple(a: Int32,)" formats "foo = 1\n->foo.foo=" formats "foo = 1\n->foo.foo=" formats "macro foo=(x)\nend" formats "macro foo=(x)\nend" formats "macro foo\n {% 1 + 2 %}\nend" formats "macro foo\n {% 1 + 2 %}\nend" formats ":&+" formats ":&+" formats "foo(->{\n 1 + 2\n})" formats "foo(->{\n 1 + 2\n})" 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 "String?" formats "String?" formats "select\n# when foo\nwhen bar\n break\nend" formats "select\n# when foo\nwhen bar\n break\nend" formats "foo . bar()" formats "foo . bar()" formats "::StaticArray(T)" formats "::StaticArray(T)" formats "alias Foo::Bar= Baz" formats "alias Foo::Bar= Baz" formats "def foo(\n foo,\n @[MyAnn]\n &block\n); end" formats "def foo(\n foo,\n @[MyAnn]\n &block\n); end" formats "next 1 , *2" formats "next 1 , *2" formats "yield( *1 , *2 )" formats "yield( *1 , *2 )" formats "(\n a = 1\n a\n)" formats "(\n a = 1\n a\n)" formats "def foo(\n @[MyAnn] bar\n); end" formats "def foo(\n @[MyAnn] bar\n); end" formats "\n# hello\n\n\n1" formats "\n# hello\n\n\n1" formats "a = # foo\n bar(1)" formats "a = # foo\n bar(1)" formats "%x(foo \#{ bar })" formats "%x(foo \#{ bar })" formats "1.[]= { 3 }" formats "1.[]= { 3 }" formats "begin\n1\n2\n3\nend" formats "begin\n1\n2\n3\nend" formats "def foo ( @@select) \n end" formats "def foo ( @@select) \n end" formats "def foo(\n @[MyAnn]\n bar\n); end" formats "def foo(\n @[MyAnn]\n bar\n); end" formats "def foo ( @x, @y) \n end" formats "def foo ( @x, @y) \n end" formats "if a\n2; 3\nelse\n3\nend" formats "if a\n2; 3\nelse\n3\nend" formats "foo(bar(baz3 do\nend))" formats "foo(bar(baz3 do\nend))" formats "foo &.nil?" formats "foo &.nil?" formats "def foo: Int32\nend" formats "def foo: Int32\nend" formats "foo({\nbar: 1,\n})" formats "foo({\nbar: 1,\n})" formats "{ 1 => 2 ,\n\n 3 => 4 }" formats "{ 1 => 2 ,\n\n 3 => 4 }" formats "-> :: foo=" formats "-> :: foo=" formats "enum Foo\nA = 1\nend" formats "enum Foo\nA = 1\nend" formats "macro foo(x)\n {% if 1 %} 2 {% end %}\nend" formats "macro foo(x)\n {% if 1 %} 2 {% end %}\nend" formats "1 // 2" formats "1 // 2" formats "foo{|x|\n x}" formats "foo{|x|\n x}" formats "lib Foo\n fun foo = \"bar\"(Int32) : Int32\nend" formats "lib Foo\n fun foo = \"bar\"(Int32) : Int32\nend" 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 &.as(T)" formats "foo &.as(T)" formats "if 1 &&\n2 &&\n3\n4\nend" formats "if 1 &&\n2 &&\n3\n4\nend" formats "def +(x)\nend" formats "def +(x)\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 "return( 1 )" formats "return( 1 )" formats "1.===(2) { 3 }" formats "1.===(2) { 3 }" formats "<<-FOO\nfoo\nFOO" formats "<<-FOO\nfoo\nFOO" formats "asm(\"nop\" ::: \"eax\" , \"ebx\" )" formats "asm(\"nop\" ::: \"eax\" , \"ebx\" )" formats "foo.bar += \n1" formats "foo.bar += \n1" formats "def foo\n1\nend" formats "def foo\n1\nend" formats "asm(\"nop\" ::: \"eax\" )" formats "asm(\"nop\" ::: \"eax\" )" formats "String???" formats "String???" formats "{ 1 => 2 ,\n 3 => 4 }" formats "{ 1 => 2 ,\n 3 => 4 }" formats "\n # hello\n\n1" formats "\n # hello\n\n1" formats "$0" formats "$0" 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.as Int32*" formats "foo.as Int32*" formats "{ {{FOO}}, nil}" formats "{ {{FOO}}, nil}" formats "a = [\n1,\n2]" formats "a = [\n1,\n2]" 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 "foo = 1\n->foo.foo?" formats "foo = 1\n->foo.foo?" formats "macro foo # bar\n baz\nend" formats "macro foo # bar\n baz\nend" formats "foo { | ( a, *b , c ) | a }" formats "foo { | ( a, *b , c ) | a }" formats "macro foo\n {% unless 1 %} 2 {% end %}\nend" formats "macro foo\n {% unless 1 %} 2 {% end %}\nend" formats "def foo( @[MyAnn] v ); end" formats "def foo( @[MyAnn] v ); end" formats "# ```\n# macro foo\n# 1\n# end\n# ```\n" formats "# ```\n# macro foo\n# 1\n# end\n# ```\n" formats "def foo(a : T) forall T \n #\nend" formats "def foo(a : T) forall T \n #\nend" formats "1.as? Int32" formats "1.as? Int32" 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 "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 "{\n 1 => 2, 3 => 4,\n 567 => 8910,\n}" formats "{\n 1 => 2, 3 => 4,\n 567 => 8910,\n}" 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 "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 "asm(\"nop\" :::: \"volatile\" , \"alignstack\" , \"intel\" )" formats "asm(\"nop\" :::: \"volatile\" , \"alignstack\" , \"intel\" )" formats "if 1\n[\n a() # b\n]\nend" formats "if 1\n[\n a() # b\n]\nend" formats "foo.bar(1) # comment\n .baz" formats "foo.bar(1) # comment\n .baz" 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 "class Foo\n@x : Int32\nend" formats "class Foo\n@x : Int32\nend" formats "foo &.nil?()" formats "foo &.nil?()" 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 "\"\" + <<-END\n bar\n END" formats "\"\" + <<-END\n bar\n END" formats "foo.foo1(\n bar\n .bar1\n .bar2)" formats "foo.foo1(\n bar\n .bar1\n .bar2)" formats "while true\n1\n\n# foo\nend" formats "while true\n1\n\n# foo\nend" formats "def foo ( @x) \n end" formats "def foo ( @x) \n end" formats ":\"foo\"" formats ":\"foo\"" formats "" formats "" formats "Foo(\"bar\": Int32, \"baz qux\": Float64)" formats "Foo(\"bar\": Int32, \"baz qux\": Float64)" formats "->do\nx\nend" formats "->do\nx\nend" formats "a &.!.!" formats "a &.!.!" formats "{ {% begin %}1{% end %}, nil }" formats "{ {% begin %}1{% end %}, nil }" formats "%(hello)" formats "%(hello)" formats "0u64" formats "0u64" formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar\n); end" formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar\n); end" 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 "foo &.[a] = 1" formats "foo &.[a] = 1" formats "foo &.responds_to?(:foo)" formats "foo &.responds_to?(:foo)" formats "->(){}" formats "->(){}" formats "foo : ( A | B )" formats "foo : ( A | B )" formats "def foo(\n @[MyAnn]\n bar\n); end" formats "def foo(\n @[MyAnn]\n bar\n); end" formats "$1.bar" formats "$1.bar" formats ":&**" formats ":&**" formats "1 ensure 2" formats "1 ensure 2" formats "foo[x: 1, &.bar]" formats "foo[x: 1, &.bar]" formats "0i64" formats "0i64" formats "class Foo\n NamedTuple(\n a: Int32,\n )\nend" formats "class Foo\n NamedTuple(\n a: Int32,\n )\nend" formats "struct Foo \n\n 1 \n\nend" formats "struct Foo \n\n 1 \n\nend" formats " <<-EOF\n 1\n 2\n EOF" formats " <<-EOF\n 1\n 2\n EOF" formats "def foo(\n **a\n # comment\n)\n 1\nend" formats "def foo(\n **a\n # comment\n)\n 1\nend" formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\#{foo}\\v\\f\\e\"" formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\#{foo}\\v\\f\\e\"" formats "1 if nil?\na.b + c" formats "1 if nil?\na.b + c" formats "next { {1, 2}, {3, 4} }" formats "next { {1, 2}, {3, 4} }" formats "\"\#{foo = 1\n}\"" formats "\"\#{foo = 1\n}\"" formats "foo.as?(T).bar" formats "foo.as?(T).bar" formats "@x[ 1 ] += 2" formats "@x[ 1 ] += 2" formats "1\nyield\n2" formats "1\nyield\n2" formats "lib Foo\nstruct Foo\nx , y , z : Int32\nend\nend" formats "lib Foo\nstruct Foo\nx , y , z : Int32\nend\nend" formats "# Hello\n#\n# ```crystal\n# 1\n# ```\n# Bye" formats "# Hello\n#\n# ```crystal\n# 1\n# ```\n# Bye" formats "[\n# foo\n] of String" formats "[\n# foo\n] of String" formats "1\n..2" formats "1\n..2" formats "def run\n\nrescue\n 2\n 3\nend" formats "def run\n\nrescue\n 2\n 3\nend" formats "def foo=(x)\nend" formats "def foo=(x)\nend" formats "bar do\n foo <<-X\n bar\n X\nend" formats "bar do\n foo <<-X\n bar\n X\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 "foo : Foo * * * * *" formats "foo : Foo * * * * *" 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 "lib Foo\n fun foo =\n bar(Int32) : Int32\nend" formats "lib Foo\n fun foo =\n bar(Int32) : Int32\nend" formats " <<-EOF\n 1\nEOF" formats " <<-EOF\n 1\nEOF" formats "include Foo" formats "include Foo" formats "foo do | x | \n x \n end" formats "foo do | x | \n x \n end" formats "10 / a" formats "10 / a" formats "foo((1..3))" formats "foo((1..3))" formats "def foo(a, **b, # comment\n &block)\nend" formats "def foo(a, **b, # comment\n &block)\nend" formats "yield *1 , *2" formats "yield *1 , *2" 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 "lib Foo\n fun foo =\n bar : Void\nend" formats "lib Foo\n fun foo =\n bar : Void\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 "lib Bar\n enum Foo\n end\nend" formats "lib Bar\n enum Foo\n end\nend" formats "->Foo.foo=" formats "->Foo.foo=" formats "{%\n unless true\n 1\n end\n%}" formats "{%\n unless true\n 1\n end\n%}" formats "def foo(@x)\n\nrescue\nend" formats "def foo(@x)\n\nrescue\nend" formats "macro foo\n def bar \n end \n end" formats "macro foo\n def bar \n end \n end" formats "%r(foo \#{ bar })" formats "%r(foo \#{ bar })" formats "x : (A -> )" formats "x : (A -> )" formats "@[Foo(\n 1,\n)]" formats "@[Foo(\n 1,\n)]" formats "return {1, 2}, 3" formats "return {1, 2}, 3" 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\n # Comment\n\n\nend" formats "def foo\n # Comment\n\n\nend" formats "foo[ 1, 2 ]?" formats "foo[ 1, 2 ]?" formats "@[Foo::Bar]" formats "@[Foo::Bar]" formats "if 1\n# nothing\nend" formats "if 1\n# nothing\nend" formats "x.try &.[] 123" formats "x.try &.[] 123" formats "def foo(@[MyAnn] &block); end" formats "def foo(@[MyAnn] &block); end" formats "-> :: Foo . foo!" formats "-> :: Foo . foo!" formats "1\n2\n# foo" formats "1\n2\n# foo" formats "struct Foo(T)\n# bar\n1\nend" formats "struct Foo(T)\n# bar\n1\nend" formats "asm(\"nop\" :: \"r\"(0))" formats "asm(\"nop\" :: \"r\"(0))" adds trailing comma to def multi-line normal, splat, and double splat parameters formats "def foo(a, **kwargs)\nend" formats "def foo(a, **kwargs)\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 b c\n)\nend" formats "def foo(\n a,\n b c\n)\nend" formats "def foo(\n a, b\n)\nend" formats "def foo(\n a, b\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 : Int32,\n b : Int32 = 1\n)\nend" formats "def foo(\n a : Int32,\n b : Int32 = 1\n)\nend" formats "def foo(a, b)\nend" formats "def foo(a, b)\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, # Foo\n b # Bar\n)\nend" formats "def foo(\n a, # Foo\n b # Bar\n)\nend" formats "def foo(a, *args, &block)\nend" formats "def foo(a, *args, &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(\n a,\n **b\n)\nend" formats "def foo(\n a,\n **b\n)\nend" formats "def foo(a, **kwargs, &block)\nend" formats "def foo(a, **kwargs, &block)\nend" formats "macro foo(\n a,\n b\n)\nend" formats "macro foo(\n a,\n b\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 "fun foo(\n a : Int32,\n b : Int32\n)\nend" formats "fun foo(\n a : Int32,\n b : Int32\n)\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 "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(a)\nend" formats "def foo(a)\nend" formats "def foo(\n a,\n &block\n)\nend" formats "def foo(\n a,\n &block\n)\nend" formats "break( 1 )" formats "break( 1 )" formats "lib Foo\nfun foo : Int32\nend" formats "lib Foo\nfun foo : Int32\nend" formats "1 == / /" formats "1 == / /" formats "1&+2&*3" formats "1&+2&*3" 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'" formats "'a'" formats "1 #foo \n2 #bar" formats "1 #foo \n2 #bar" formats "return 1, {2, 3}" formats "return 1, {2, 3}" formats "#!shebang\n1 + 2" formats "#!shebang\n1 + 2" formats "enum Foo; A = 1; end" formats "enum Foo; A = 1; end" formats "a &.b.c.as C" formats "a &.b.c.as C" formats "lib Foo\nfun foo( ... ) : Int32\nend" formats "lib Foo\nfun foo( ... ) : Int32\nend" formats "foo &.bar.nil?()" formats "foo &.bar.nil?()" formats "def foo\n 1\n #\nrescue\nend" formats "def foo\n 1\n #\nrescue\nend" 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 "def foo\n 1\n # Comment\n\n\nend" formats "def foo\n 1\n # Comment\n\n\nend" formats "$0.bar" formats "$0.bar" formats "foo ((1) ? 2 : 3)" formats "foo ((1) ? 2 : 3)" formats "-> :: foo" formats "-> :: foo" formats " <<-HTML\n foo\nHTML" formats " <<-HTML\n foo\nHTML" formats "macro foo\n {% if 1 %} 2 {% end %}\nend" formats "macro foo\n {% if 1 %} 2 {% end %}\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 "a || b" formats "a || b" formats "next 1" formats "next 1" formats "->@@foo.foo?" formats "->@@foo.foo?" formats "x\n# foo\n\n# bar" formats "x\n# foo\n\n# bar" formats "(a).b { }\nc" formats "(a).b { }\nc" formats "foo.bar # comment\n .baz" formats "foo.bar # comment\n .baz" formats "@x[ 1 ] &&= 2" formats "@x[ 1 ] &&= 2" formats "def foo(\n a,\n b,\n)\nend" formats "def foo(\n a,\n b,\n)\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 "foo &.[]?(1, 2)" formats "foo &.[]?(1, 2)" formats "with foo yield bar" formats "with foo yield bar" 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 : Int32 \n end" formats "def foo : Int32 \n end" formats "foo (1), 2" formats "foo (1), 2" formats "<<-FOO\nfoo\nfoo\nFOO" formats "<<-FOO\nfoo\nfoo\nFOO" formats "foo &bar" formats "foo &bar" formats "if a\nif b\nelse\n4\nend\nend" formats "if a\nif b\nelse\n4\nend\nend" 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 "class X\n annotation FooAnnotation \n end \n end" formats "class X\n annotation FooAnnotation \n end \n end" formats "break { {1, 2}, {3, 4} }" formats "break { {1, 2}, {3, 4} }" formats ":*" formats ":*" formats "1.== { 3 }" formats "1.== { 3 }" formats "class Actor\n macro inherited\n\nend\nend\n" formats "class Actor\n macro inherited\n\nend\nend\n" formats "1.<=(2) { 3 }" formats "1.<=(2) { 3 }" formats "macro foo\n {% for x in y %}\\ 2 {% end %}\\\nend" formats "macro foo\n {% for x in y %}\\ 2 {% end %}\\\nend" formats "a = begin\n1\n2\nend" formats "a = begin\n1\n2\nend" formats "asm(\"a\" : : : : \"volatile\")" formats "asm(\"a\" : : : : \"volatile\")" formats "a = foo(bar(baz3 do\nend))" formats "a = foo(bar(baz3 do\nend))" formats "macro foo\n 1 + 2\nend" formats "macro foo\n 1 + 2\nend" formats "\"\\a\\c\\b\\d\"" formats "\"\\a\\c\\b\\d\"" formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n : \"f\")" formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n : \"f\")" formats "A = 1\nFOO = 2\n\nEX = 3" formats "A = 1\nFOO = 2\n\nEX = 3" formats "asm(\"nop\" ::: \"eax\" , \"ebx\" : \"volatile\" , \"alignstack\" )" formats "asm(\"nop\" ::: \"eax\" , \"ebx\" : \"volatile\" , \"alignstack\" )" formats "alias Foo=\nBar" formats "alias Foo=\nBar" formats "1 .. 2" formats "1 .. 2" formats "macro foo\n {{x}} <<-FOO\n hello \n FOO\nend" formats "macro foo\n {{x}} <<-FOO\n hello \n FOO\nend" formats "enum Foo;end" formats "enum Foo;end" formats "x : A | B" formats "x : A | B" formats "->Foo.foo!" formats "->Foo.foo!" formats "def foo\n\n1\n\nend" formats "def foo\n\n1\n\nend" formats "macro []=(x, y)\nend" formats "macro []=(x, y)\nend" formats "foo { | a, ( _ , c ) | a + c }" formats "foo { | a, ( _ , c ) | a + c }" formats "return 1\n# end" formats "return 1\n# end" formats "! 1" formats "! 1" formats "select \n when foo \n 2 \n end" formats "select \n when foo \n 2 \n end" formats "foo.bar. as Int32" formats "foo.bar. as Int32" formats "asm(\"nop\")" formats "asm(\"nop\")" formats "foo : (Array(String)?) | String" formats "foo : (Array(String)?) | String" formats "x = <<-EOF\n 1\nEOF" formats "x = <<-EOF\n 1\nEOF" formats "'\\u{0123}'" formats "'\\u{0123}'" formats "# foo\ndef foo\nend\n# bar\ndef bar\nend" formats "# foo\ndef foo\nend\n# bar\ndef bar\nend" formats " * a = 1 " formats " * a = 1 " formats "1 + 2" formats "1 + 2" formats "\"foo \#{bar}\" \\\n \"baz\"" formats "\"foo \#{bar}\" \\\n \"baz\"" formats "coco.lala\nfoo\n .bar" formats "coco.lala\nfoo\n .bar" 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 "1 ||\n # foo\n 2" formats "1 ||\n # foo\n 2" formats "macro foo\n {{\n1 + 2 }}\nend" formats "macro foo\n {{\n1 + 2 }}\nend" formats "1.[]=() { 3 }" formats "1.[]=() { 3 }" formats "class Foo; 1; end" formats "class Foo; 1; end" formats "as? Foo" formats "as? Foo" formats "is_a? Foo" formats "is_a? Foo" formats "1 + \\\n2" formats "1 + \\\n2" formats "def foo\na = bar do\n1\nend\nend" formats "def foo\na = bar do\n1\nend\nend" formats "begin\n ()\nend" formats "begin\n ()\nend" formats " {{ 1 + 2 }}" formats " {{ 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 = \\\n # foo\n nil" formats "a = \\\n # foo\n nil" formats "a = foo(baz1 do\nend)" formats "a = foo(baz1 do\nend)" formats "a[1] , b[2] = 1 , 2" formats "a[1] , b[2] = 1 , 2" formats "macro foo\n {{ 1 + 2 }}\\\nend" formats "macro foo\n {{ 1 + 2 }}\\\nend" formats "{\n a: 1,\n foo: bar,\n}" formats "{\n a: 1,\n foo: bar,\n}" formats "[1, 2, 3] of Foo" formats "[1, 2, 3] of Foo" formats "foo.bar / 2\n" formats "foo.bar / 2\n" formats "1_234" formats "1_234" formats "Union(Foo::Bar?, Baz?, Qux(T, U?))" formats "Union(Foo::Bar?, Baz?, Qux(T, U?))" formats "foo 1, a: 1,\nb: 2,\nc: 3,\n&block" formats "foo 1, a: 1,\nb: 2,\nc: 3,\n&block" formats "1 \\\nrescue 2" formats "1 \\\nrescue 2" formats "\"hello\"" formats "\"hello\"" formats "foo[1, &.bar] = 1" formats "foo[1, &.bar] = 1" formats "1.=== do\nend" formats "1.=== do\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 "foo a , *b" formats "foo a , *b" formats "foo.bar do\n baz\n .b\nend" formats "foo.bar do\n baz\n .b\nend" formats "def foo(x, **z, &block)\nend" formats "def foo(x, **z, &block)\nend" formats "foo{}" formats "foo{}" formats ":^" formats ":^" 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 "Foo:: Bar" formats "Foo:: Bar" formats "foo 1, do\n2\nend" formats "foo 1, do\n2\nend" formats "[\n # foo\n 1,\n\n # bar\n 2,\n]" formats "[\n # foo\n 1,\n\n # bar\n 2,\n]" formats "break *1 , *2" formats "break *1 , *2" formats "asm(\"nop\" :: )" formats "asm(\"nop\" :: )" formats "begin\n1\nrescue\n3\nensure\n2\nend" formats "begin\n1\nrescue\n3\nensure\n2\nend" formats "lib Foo\n fun foo(Int32) : Int32\nend" formats "lib Foo\n fun foo(Int32) : Int32\nend" formats "abstract class Foo\nend" formats "abstract class Foo\nend" formats "\"\#{ # foo\n foo = 1\n}\"" formats "\"\#{ # foo\n foo = 1\n}\"" formats "if 1\n {{1 + 2}}\nend" formats "if 1\n {{1 + 2}}\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 "`foo \#{ bar }`" formats "`foo \#{ bar }`" 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,\n2,\n)" formats "foo(1,\n2,\n)" formats "def foo(@[AnnOne] @[AnnTwo] &block : Int32 -> ); end" formats "def foo(@[AnnOne] @[AnnTwo] &block : Int32 -> ); end" formats "->( x , y ) { x }" formats "->( x , y ) { x }" formats ":-" formats ":-" formats "{% begin %}\n \"\n foo\"\n{% end %}" formats "{% begin %}\n \"\n foo\"\n{% end %}" formats "1 +\n # foo\n 2" formats "1 +\n # foo\n 2" formats "def foo\nend\n\n\n\ndef bar\nend" formats "def foo\nend\n\n\n\ndef bar\nend" formats "foo(\n 1,\n # 2,\n # 3,\n)" formats "foo(\n 1,\n # 2,\n # 3,\n)" formats "SomeLib.UppercasedFunCall" formats "SomeLib.UppercasedFunCall" formats "<<-FOO\nFOO" formats "<<-FOO\nFOO" formats "a , b = 1 , 2" formats "a , b = 1 , 2" 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 "foo 1" formats "foo 1" formats "class Foo\ndef foo (\nx ,\n y ) \n end\nend" formats "class Foo\ndef foo (\nx ,\n y ) \n end\nend" formats "foo { |x| (x).a }" formats "foo { |x| (x).a }" formats "break" formats "break" formats "foo (1)" formats "foo (1)" formats "next" formats "next" formats "@[Foo( 1, 2 )]" formats "@[Foo( 1, 2 )]" formats "break {1, 2}, 3" formats "break {1, 2}, 3" formats "return" formats "return" formats "10 ** a" formats "10 ** a" formats "break 1 , *2" formats "break 1 , *2" formats "SomeLib.UppercasedFunCall 1, 2" formats "SomeLib.UppercasedFunCall 1, 2" formats "a = %w(\n one two\n three four\n)" formats "a = %w(\n one two\n three four\n)" formats "1.!=(2) { 3 }" formats "1.!=(2) { 3 }" 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 "def foo\n1\nensure\n2\nend" formats "def foo\n1\nensure\n2\nend" formats "next 1, {2, 3}" formats "next 1, {2, 3}" formats "foo(\n 1,\n &.foo\n)" formats "foo(\n 1,\n &.foo\n)" formats "$~ = 1" formats "$~ = 1" formats "-> : Int32? {}" formats "-> : Int32? {}" formats "<<-FOO\nfoo\n1\nFOO" formats "<<-FOO\nfoo\n1\nFOO" formats "foo(\n <<-HERE,\n hello\n HERE\n 1,\n)" formats "foo(\n <<-HERE,\n hello\n HERE\n 1,\n)" formats "->Foo.foo" formats "->Foo.foo" formats "1 if 2\n# foo" formats "1 if 2\n# foo" formats "$?" formats "$?" formats "if a\n b &c\nend" formats "if a\n b &c\nend" formats "->@foo.foo?" formats "->@foo.foo?" adds `&` to yielding methods that don't have a block parameter (#8764) formats "macro f\n yield\n {{ yield }}\nend" formats "macro f\n yield\n {{ yield }}\nend" formats "def foo(\nx,\n)\n yield\nend" formats "def foo(\nx,\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(x ,)\n yield\nend" formats "def foo(x ,)\n yield\nend" formats "def foo(x,\ny)\n yield\nend" formats "def foo(x,\ny)\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(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(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 "def foo(\nx)\n yield\nend" formats "def foo(\nx)\n yield\nend" formats "def foo(\nx,\ny)\n yield\nend" formats "def foo(\nx,\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 "(size - 1).downto(0) do |i|\n yield @buffer[i]\nend" formats "(size - 1).downto(0) do |i|\n yield @buffer[i]\nend" formats "10/a" formats "10/a" formats "->{\nx\n}" formats "->{\nx\n}" formats "あ.い, う.え.お = 1, 2" formats "あ.い, う.え.お = 1, 2" formats " {{\n1 + 2 }}" formats " {{\n1 + 2 }}" formats " {{\n1 + 2\n }}" formats " {{\n1 + 2\n }}" formats "case\nelse\n 1\nend" formats "case\nelse\n 1\nend" formats "asm(\"a\" ::: \"a\"\n : \"volatile\",\n \"intel\")" formats "asm(\"a\" ::: \"a\"\n : \"volatile\",\n \"intel\")" formats "foo.[] =1" formats "foo.[] =1" formats "break { {1, 2}, {3, 4} }, 5" formats "break { {1, 2}, {3, 4} }, 5" formats "a &.b.c.as(C)" formats "a &.b.c.as(C)" formats "-> : {Int32} { String }" formats "-> : {Int32} { String }" formats "1.!=() { 3 }" formats "1.!=() { 3 }" formats "{1 => foo <<-X\nbar\nX\n}" formats "{1 => foo <<-X\nbar\nX\n}" 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 "responds_to? :foo" formats "responds_to? :foo" formats "+ a + d" formats "+ a + d" formats "{1 => 2,\n 3 => 4, # lala\n}\n" formats "{1 => 2,\n 3 => 4, # lala\n}\n" formats "foo : self?" formats "foo : self?" formats "foo()" formats "foo()" formats "x = 1\nx += 1" formats "x = 1\nx += 1" formats " _ , *_ ,\na.foo ,a.bar = 1 , 2,3" formats " _ , *_ ,\na.foo ,a.bar = 1 , 2,3" formats "def foo(\n @[MyAnn] bar\n); end" formats "def foo(\n @[MyAnn] bar\n); end" formats "a.b &.[c]\n1" formats "a.b &.[c]\n1" 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 "def foo(a,\n &block)\nend" formats "def foo(a,\n &block)\nend" formats "<<-FOO\nfoobar\nFOO" formats "<<-FOO\nfoobar\nFOO" formats "run(\"a\", 1)" formats "run(\"a\", 1)" formats "1 &+ 2" formats "1 &+ 2" formats "@[Foo(\n foo: 1,\n)]\ndef foo\nend" formats "@[Foo(\n foo: 1,\n)]\ndef foo\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 "::Pointer(T)" formats "::Pointer(T)" formats "a = case 1\nwhen 2\n3\nend" formats "a = case 1\nwhen 2\n3\nend" formats "def foo()\n1\nend" formats "def foo()\n1\nend" formats "@[::Foo::Bar]" formats "@[::Foo::Bar]" formats "{ # foo\n 1 => 2,\n}" formats "{ # foo\n 1 => 2,\n}" formats "x 1, \\\n 2" formats "x 1, \\\n 2" formats "lib Foo\n $foo : Int32 \nend" formats "lib Foo\n $foo : Int32 \nend" formats "foo.bar\n .baz(\n 1\n )" formats "foo.bar\n .baz(\n 1\n )" formats "def foo(x : ( A | B )) : ( A | B )\nend" formats "def foo(x : ( A | B )) : ( A | B )\nend" formats "a &.b[c]?" formats "a &.b[c]?" 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 " <<-EOF\n 1\n EOF" formats " <<-EOF\n 1\n EOF" formats "1 +\n # foo\n 2" formats "1 +\n # foo\n 2" formats "foo.bar(&.baz)" formats "foo.bar(&.baz)" formats "/foo/imx" formats "/foo/imx" formats "def foo\nend;def bar\nend" formats "def foo\nend;def bar\nend" formats "unless a\n2\n3\nelse\n4\n5\nend" formats "unless a\n2\n3\nelse\n4\n5\nend" formats "until 1\n2\nend" formats "until 1\n2\nend" formats "NamedTuple(\n a: Int32,)" formats "NamedTuple(\n a: Int32,)" formats "foo.as ( Int32* )" formats "foo.as ( Int32* )" formats "->: Int32 do\nx\nend" formats "->: Int32 do\nx\nend" formats "macro foo\n {% if 1 %} 2 {% else %} 3 {% end %}\nend" formats "macro foo\n {% if 1 %} 2 {% else %} 3 {% end %}\nend" formats "foo(1, 2, {\n foo: 1,\n bar: 2,\n})" formats "foo(1, 2, {\n foo: 1,\n bar: 2,\n})" formats "foo(a: //)" formats "foo(a: //)" formats "case 1 \n when 2 then \n 3 \n end" formats "case 1 \n when 2 then \n 3 \n end" formats " <<-HTML\n hello \n world \n HTML" formats " <<-HTML\n hello \n world \n HTML" formats "begin\n1\nrescue Int32 \n3\nend" formats "begin\n1\nrescue Int32 \n3\nend" formats "\n# hello\n1" formats "\n# hello\n1" formats "def foo ( bar @select) \n end" formats "def foo ( bar @select) \n end" formats "a=1" formats "a=1" 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 "case 1 \n when .foo? \n 3 \n end" formats "case 1 \n when .foo? \n 3 \n end" formats "class Foo\n macro foo\n 1\n end\nend" formats "class Foo\n macro foo\n 1\n end\nend" formats "bar = foo(->{\n 1 + 2\n})" formats "bar = foo(->{\n 1 + 2\n})" formats "1\n\n\n2" formats "1\n\n\n2" formats "foo(\n 1, 2, &block)" formats "foo(\n 1, 2, &block)" formats "asm(\"nop\" : \"a\"(0), \"b\"(1) )" formats "asm(\"nop\" : \"a\"(0), \"b\"(1) )" formats "unless a\n2; 3\nelse\n3\nend" formats "unless a\n2; 3\nelse\n3\nend" formats "def foo(x = __FILE__ )\nend" formats "def foo(x = __FILE__ )\nend" formats "foo : StaticArray(Foo, 12)[34]" formats "foo : StaticArray(Foo, 12)[34]" formats ":<<" formats ":<<" formats "break 1" formats "break 1" formats "+ 1" formats "+ 1" 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 "def foo( & )\nend" formats "def foo( & )\nend" formats "break { 1 , 2 }" formats "break { 1 , 2 }" formats "-> :: Foo . foo" formats "-> :: Foo . foo" formats "macro foo\n <<-FOO\n hello \n FOO\nend" formats "macro foo\n <<-FOO\n hello \n FOO\nend" formats " [ 1, \n 2 , \n 3 ] " formats " [ 1, \n 2 , \n 3 ] " formats "class Foo;end" formats "class Foo;end" formats "def foo(\n **a # comment\n)\n 1\nend" formats "def foo(\n **a # comment\n)\n 1\nend" 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" assert assert formats "(1 .. )" formats "(1 .. )" formats "enum Baz\nA = 1\nFOO\n\nEX = 3\nend" formats "enum Baz\nA = 1\nFOO\n\nEX = 3\nend" formats "def foo(x) # bar\n # baz\nend" formats "def foo(x) # bar\n # baz\nend" formats ":+" formats ":+" formats "->@@foo.foo!" formats "->@@foo.foo!" formats "begin\n 1 \\\n + 2\n 3\nend" formats "begin\n 1 \\\n + 2\n 3\nend" formats "1 && # foo\n 2 &&\n 3" formats "1 && # foo\n 2 &&\n 3" formats "%w(one two three)" formats "%w(one two three)" formats "macro foo()\n {% if 1 %} 2 {% end %}\nend" formats "macro foo()\n {% if 1 %} 2 {% end %}\nend" formats "def foo(x y)\nend" formats "def foo(x y)\nend" formats "foo[ 1 , 2 ] =3" formats "foo[ 1 , 2 ] =3" formats "def foo( x , & : Int32 )\nend" formats "def foo( x , & : Int32 )\nend" formats "begin\n1 ? 2 : 3\nend" formats "begin\n1 ? 2 : 3\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 "あ.い = 1" formats "あ.い = 1" formats "foo{|x| x}" formats "foo{|x| x}" formats "A = 10\nFOO = 123\nBARBAZ = 1234\n" formats "A = 10\nFOO = 123\nBARBAZ = 1234\n" formats "-> : Int32[1] {}" formats "-> : Int32[1] {}" formats "lib Foo\n fun foo =\n \"bar\"(Int32) : Int32\nend" formats "lib Foo\n fun foo =\n \"bar\"(Int32) : Int32\nend" formats "alias Foo= Bar" formats "alias Foo= Bar" formats "{\n foo: 1,\n b: 2,\n barbaz: 3,\n}" formats "{\n foo: 1,\n b: 2,\n barbaz: 3,\n}" formats "alias Foo::Bar = Baz" formats "alias Foo::Bar = Baz" formats "def foo(a,\n **b)\nend" formats "def foo(a,\n **b)\nend" formats "enum Foo : Int32\nA = 1\nend" formats "enum Foo : Int32\nA = 1\nend" formats "lib Foo\n fun Foo = Bar\nend" formats "lib Foo\n fun Foo = 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\n2\nelsif\n3\n4\nelse\n6\nend" formats "if 1\n2\nelsif\n3\n4\nelse\n6\nend" formats "1 # foo\n/ 1 /" formats "1 # foo\n/ 1 /" formats "def /(x)\n 1\nend" formats "def /(x)\n 1\nend" formats "abstract def foo\nabstract def bar" formats "abstract def foo\nabstract def bar" formats "module M\n @[MyAnn(\n 1\n\n )]\nend" formats "module M\n @[MyAnn(\n 1\n\n )]\nend" formats "bar = foo(->{\n 1 + 2\n})" formats "bar = foo(->{\n 1 + 2\n})" 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 "::Tuple()" formats "::Tuple()" formats "{% if true %}\n # x\n{% end %}" formats "{% if true %}\n # x\n{% end %}" 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 "x : {A, B, }" formats "x : {A, B, }" formats "case 1\nwhen a; 2\nelse; ; b\nend" formats "case 1\nwhen a; 2\nelse; ; b\nend" formats "foo : (String -> Array(String)?) | (String -> Array(String)) | Nil" formats "foo : (String -> Array(String)?) | (String -> Array(String)) | Nil" formats "{{ foo <<-X\nbar\nX\n}}" formats "{{ foo <<-X\nbar\nX\n}}" formats "<<-HTML\n \#{\"foo\"}\n \#{\"bar\"}\n HTML" formats "<<-HTML\n \#{\"foo\"}\n \#{\"bar\"}\n HTML" formats "def foo( x , & block )\nend" formats "def foo( x , & block )\nend" formats "10**a" formats "10**a" formats "if a\nif b\n3\nelse\n4\nend\nend" formats "if a\nif b\n3\nelse\n4\nend\nend" formats "case / /\nwhen / /, /x/\n / /\nend" formats "case / /\nwhen / /, /x/\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 "Hash{\n foo => <<-EOF\n foo\n EOF\n}" formats "Hash{\n foo => <<-EOF\n foo\n EOF\n}" formats "$~" formats "$~" formats "a = while 1\n2\nend" formats "a = while 1\n2\nend" formats "foo\n .bar\n .baz(\n 1\n )" formats "foo\n .bar\n .baz(\n 1\n )" formats "[\n] of \n Foo " formats "[\n] of \n Foo " formats "class Foo\n def foo\n # nothing\n end\nend" formats "class Foo\n def foo\n # nothing\n end\nend" formats "module Moo ( T )\nend" formats "module Moo ( T )\nend" formats "def foo(\n &block\n)\nend" formats "def foo(\n &block\n)\nend" formats "if 1\n foo(\n bar\n # comment\n )\nend" formats "if 1\n foo(\n bar\n # comment\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 "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 "call(foo <<-X\nbar\nX\n)" formats "call(foo <<-X\nbar\nX\n)" formats "def foo(x)\n self // x\nend" formats "def foo(x)\n self // x\nend" 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 "while 1\n2 # foo\nend" formats "while 1\n2 # foo\nend" formats "foo[&.bar] ||= 1" formats "foo[&.bar] ||= 1" formats "def foo ( x ) : Int32 \n end" formats "def foo ( x ) : Int32 \n end" formats "foo(self // 1)" formats "foo(self // 1)" formats "def foo(\n a,\n b\n)\nend" formats "def foo(\n a,\n b\n)\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\" \\\n\"baz\")" formats "foo(\"bar\" \\\n\"baz\")" formats "break {1, 2}, {3, 4}" formats "break {1, 2}, {3, 4}" formats "\"\#{\n foo = 1\n}\"" formats "\"\#{\n foo = 1\n}\"" formats "alias A = ({A, (B)})" formats "alias A = ({A, (B)})" formats "foo &.bar" formats "foo &.bar" formats "->() do x end" formats "->() do x end" formats "{% foo <<-X\nbar\nX\n%}" formats "{% foo <<-X\nbar\nX\n%}" 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(1, / /)" formats "foo(1, / /)" formats "foo(a: //, b: //)" formats "foo(a: //, b: //)" formats "<<-HTML\n \#{1}x\n y\n z\n HTML" formats "<<-HTML\n \#{1}x\n y\n z\n HTML" formats "%w(\n one two\n three four\n)" formats "%w(\n one two\n three four\n)" formats "1 > 2" formats "1 > 2" formats "Set{ # foo\n 1,\n}" formats "Set{ # foo\n 1,\n}" formats "1.[]=(2) { 3 }" formats "1.[]=(2) { 3 }" formats "foo.[ 1 , 2 ] =3" formats "foo.[ 1 , 2 ] =3" formats "foo.bar &.baz( 1 , 2 )" formats "foo.bar &.baz( 1 , 2 )" formats "begin\n1\nensure\n2\nend" formats "begin\n1\nensure\n2\nend" formats "def foo\n 1 #\nrescue\nend" formats "def foo\n 1 #\nrescue\nend" formats "def foo\nend\ndef bar\nend" formats "def foo\nend\ndef bar\nend" formats "x = a do\n 1 ||\n 2\nend" formats "x = a do\n 1 ||\n 2\nend" formats "unless a\nunless b\n3\nelse\n4\nend\nend" formats "unless a\nunless b\n3\nelse\n4\nend\nend" formats "foo(\n1,\n\n 2 \n)" formats "foo(\n1,\n\n 2 \n)" formats "a = b = 1\na, b =\n b, a" formats "a = b = 1\na, b =\n b, a" formats "10 // a" formats "10 // a" formats "__DIR__" formats "__DIR__" formats "return *1 , *2" formats "return *1 , *2" formats "nil?" formats "nil?" formats "[\n 1, # foo\n 3,\n]" formats "[\n 1, # foo\n 3,\n]" formats "macro foo\n {%1 + 2%}\\\nend" formats "macro foo\n {%1 + 2%}\\\nend" formats "def `(x)\n 1\nend" formats "def `(x)\n 1\nend" formats "10//a" formats "10//a" formats "#### ###" formats "#### ###" formats "def foo ( @select) \n end" formats "def foo ( @select) \n end" formats "join io, &.inspect" formats "join io, &.inspect" formats "if a\n2\n3\nelse\n4\n5\nend" formats "if a\n2\n3\nelse\n4\n5\nend" formats "FOO = 2 + 3\nA = 1 - 10" formats "FOO = 2 + 3\nA = 1 - 10" formats "__LINE__" formats "__LINE__" formats "class Foo\nx = 1\nend" formats "class Foo\nx = 1\nend" formats "if 1\nelse\n2 # foo\nend" formats "if 1\nelse\n2 # foo\nend" formats "foo.as? ( Int32* )" formats "foo.as? ( Int32* )" formats " [ 1 , 2 , 3 ] " formats " [ 1 , 2 , 3 ] " formats "next( 1 )" formats "next( 1 )" formats "foo do \n x \n end" formats "foo do \n x \n end" formats "foo do # a\n # b\n bar\nend" formats "foo do # a\n # b\n bar\nend" formats "-> : {x: Int32, y: String} {}" formats "-> : {x: Int32, y: String} {}" formats "if 1\n2\n3\n# foo\nend" formats "if 1\n2\n3\n# foo\nend" formats "\"1\#{\"4\#{\"\#{\"2\"}\"}3\"}3\#{__DIR__}4\#{5}6\"" formats "\"1\#{\"4\#{\"\#{\"2\"}\"}3\"}3\#{__DIR__}4\#{5}6\"" formats "foo bar:baz, qux:other" formats "foo bar:baz, qux:other" formats "foo.as? Int32*" formats "foo.as? Int32*" formats "case 1\nwhen 2 # a\n # b\nend" formats "case 1\nwhen 2 # a\n # b\nend" formats "x : (A | B)" formats "x : (A | B)" formats "foo &.[]=( 1, 2 )" formats "foo &.[]=( 1, 2 )" formats "_ = 1" formats "_ = 1" formats "@x &&= 1" formats "@x &&= 1" formats "1 if 2" formats "1 if 2" formats "a = \\\n # foo\n bar(1)" formats "a = \\\n # foo\n bar(1)" formats "-> { }" formats "-> { }" formats "\"1\#{\"\#{\"2\"}\"}3\#{\"4\"}5\"" formats "\"1\#{\"\#{\"2\"}\"}3\#{\"4\"}5\"" formats "pointerof( @a )" formats "pointerof( @a )" formats "1.<= do\nend" formats "1.<= do\nend" formats "alias Foo::Bar=Baz" formats "alias Foo::Bar=Baz" formats "foo x, self // 1" formats "foo x, self // 1" formats "if a\n2\nend" formats "if a\n2\nend" formats "@foo : Int32 # comment\n\ndef foo\nend" formats "@foo : Int32 # comment\n\ndef foo\nend" formats "1 ;\n 2" formats "1 ;\n 2" formats "->(x : Int32) {}" formats "->(x : Int32) {}" formats "def foo( x , & block : Int32 )\nend" formats "def foo( x , & block : Int32 )\nend" formats "yield *1 ,2" formats "yield *1 ,2" formats "def foo ( x : Foo.class ) \n end" formats "def foo ( x : Foo.class ) \n end" formats "1/2" formats "1/2" formats "foo(\n# x\n1,\n\n# y\nz: 2\n)" formats "foo(\n# x\n1,\n\n# y\nz: 2\n)" formats "foo (1).bar" formats "foo (1).bar" formats "case 1 \n in Int32 \n 3 \n end" formats "case 1 \n in Int32 \n 3 \n end" formats "def foo(\n a,\n &block\n)\nend" formats "def foo(\n a,\n &block\n)\nend" formats "module Moo \n\n 1 \n\nend" formats "module Moo \n\n 1 \n\nend" formats "1\n.as?(Int32)" formats "1\n.as?(Int32)" formats ":&-" formats ":&-" formats "a, b = \nif 1\n2\nend" formats "a, b = \nif 1\n2\nend" formats "<<-HTML\n \#{1}x\n HTML" formats "<<-HTML\n \#{1}x\n HTML" formats "->( ){ x }" formats "->( ){ x }" formats "1\n.as(Int32)" formats "1\n.as(Int32)" formats "{ {% for x in 1..2 %}3{% end %}, nil }" formats "{ {% for x in 1..2 %}3{% end %}, nil }" formats "foo = {1, {2,\n 3},\n 4}" formats "foo = {1, {2,\n 3},\n 4}" 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 "{% verbatim do %}\n <<-FOO\n hello \n FOO\n{% end %}" formats "{% verbatim do %}\n <<-FOO\n hello \n FOO\n{% end %}" formats "begin\nend\n\n# a\n" formats "begin\nend\n\n# a\n" formats " {% if 1 %} 2 {% end %}" formats " {% if 1 %} 2 {% end %}" formats "def foo \n end" formats "def foo \n end" formats "{ \"foo\": 1 }" formats "{ \"foo\": 1 }" formats "yield 1 , *2" formats "yield 1 , *2" formats "1.!= do\nend" formats "1.!= do\nend" formats "lib Foo\nfun foo(x : Int32,\ny : Float64) : Int32\nend" formats "lib Foo\nfun foo(x : Int32,\ny : Float64) : Int32\nend" formats "next {1, 2}, {3, 4}" formats "next {1, 2}, {3, 4}" formats "class Actor\n macro inherited\nend\nend\n" formats "class Actor\n macro inherited\nend\nend\n" formats "case 1\nwhen 2\n\n#comment\nend" formats "case 1\nwhen 2\n\n#comment\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 "def foo(x @@y)\nend" formats "def foo(x @@y)\nend" formats "def foo(@[MyAnn] v); end" formats "def foo(@[MyAnn] v); end" formats "if 1\n2\nelsif\n3\n4\nelsif 5\n6\nend" formats "if 1\n2\nelsif\n3\n4\nelsif 5\n6\nend" formats "1 ; 2" formats "1 ; 2" formats "yield 1\n2" formats "yield 1\n2" formats "%" formats "%" formats "foo.[ 1 , 2 ]" formats "foo.[ 1 , 2 ]" formats "Hash{\n foo => <<-EOF,\n foo\n EOF\n}" formats "Hash{\n foo => <<-EOF,\n foo\n EOF\n}" formats "...\n2" formats "...\n2" formats "1 #=> 2" formats "1 #=> 2" formats "[1, 2, 3]" formats "[1, 2, 3]" formats "(1)" formats "(1)" formats "\n\n1" formats "\n\n1" formats "if a\n # hello\n 2\nend" formats "if a\n # hello\n 2\nend" formats "def foo(x : self ?) \n end" formats "def foo(x : self ?) \n end" formats "@[Foo]\ndef foo\nend" formats "@[Foo]\ndef foo\nend" formats "if 1\n ->{ 1 }\nend" formats "if 1\n ->{ 1 }\nend" formats "[1,\n2,\n3]" formats "[1,\n2,\n3]" formats "foo &.[]" formats "foo &.[]" formats "a = foo &.bar do\n 1 + 2\nend" formats "a = foo &.bar do\n 1 + 2\nend" formats "def foo(\n @[MyAnn]\n bar\n); end" formats "def foo(\n @[MyAnn]\n bar\n); end" formats "foo\n .bar(\n 1\n )" formats "foo\n .bar(\n 1\n )" formats "if 1;\n2;\nelsif 3;\n4;\nend" formats "if 1;\n2;\nelsif 3;\n4;\nend" formats "enum Foo\nA \nend" formats "enum Foo\nA \nend" formats "\"foo \#{ 1 + 2 }\"" formats "\"foo \#{ 1 + 2 }\"" formats "foo" formats "foo" formats "select \n when foo ; 2 \n end" formats "select \n when foo ; 2 \n end" formats "case / /\nwhen /x/, / /\n / /\nend" formats "case / /\nwhen /x/, / /\n / /\nend" formats "if 1\nelse\n# nothing\nend" formats "if 1\nelse\n# nothing\nend" formats "instance_sizeof( Int32 )" formats "instance_sizeof( Int32 )" formats "bar = foo(->do\n 1 + 2\nend)" formats "bar = foo(->do\n 1 + 2\nend)" formats "foo[x: 1, &.bar]?" formats "foo[x: 1, &.bar]?" formats "def foo : (A | B(C))\n nil\nend" formats "def foo : (A | B(C))\n nil\nend" formats "@[Foo(\n foo: 1\n)]\ndef foo\nend" formats "@[Foo(\n foo: 1\n)]\ndef foo\nend" formats "{ * 1 * 2,\n*\n3, 4 }" formats "{ * 1 * 2,\n*\n3, 4 }" formats "{ {1}.foo, 2 }" formats "{ {1}.foo, 2 }" formats "page= <<-HTML\n \#{1}foo\nHTML" formats "page= <<-HTML\n \#{1}foo\nHTML" formats "macro foo\n {% for x in y %} 2 {% end %}\nend" formats "macro foo\n {% for x in y %} 2 {% end %}\nend" formats "->foo?" formats "->foo?" formats "1 && (\n 2 || 3\n)" formats "1 && (\n 2 || 3\n)" formats "\"hel\\nlo\"" formats "\"hel\\nlo\"" formats "{% verbatim do %}{{1}} + {{2}}{% end %}" formats "{% verbatim do %}{{1}} + {{2}}{% end %}" formats "class Foo < \n Bar \n\n 1 \n\nend" formats "class Foo < \n Bar \n\n 1 \n\nend" formats "foo[] =1" formats "foo[] =1" 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 "class Foo\n@x : Int32\nend" formats "class Foo\n@x : Int32\nend" formats "@@a" formats "@@a" formats "def foo(x : (self)?)\nend" formats "def foo(x : (self)?)\nend" formats "lib Foo\nfun foo () : Int32\nend" formats "lib Foo\nfun foo () : Int32\nend" formats "select \n when foo then 2 \n end" formats "select \n when foo then 2 \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 "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 "def //(x)\n 1\nend" formats "def //(x)\n 1\nend" formats "while 1\n# nothing\nend" formats "while 1\n# nothing\nend" formats "{% if true %}\n # x\n # y\n{% end %}" formats "{% if true %}\n # x\n # y\n{% end %}" formats "def foo\n1\n2\n# foo\nend" formats "def foo\n1\n2\n# foo\nend" formats "begin\n array[\n 0 # Zero\n ]\nend" formats "begin\n array[\n 0 # Zero\n ]\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 "foo &.as?(T)" formats "foo &.as?(T)" formats "getter foo : Int32 # comment\n\ndef foo\nend" formats "getter foo : Int32 # comment\n\ndef foo\nend" formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n : \"f\",\n \"g\")" formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n : \"f\",\n \"g\")" 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(1, # foo\n &.bar)" formats "foo(1, # foo\n &.bar)" formats "{ # foo\n 1,\n}" formats "{ # foo\n 1,\n}" formats "unless a\n2\nelse\nend" formats "unless a\n2\nelse\nend" formats "if a\n2\n3\nend" formats "if a\n2\n3\nend" formats "1.>=(2) { 3 }" formats "1.>=(2) { 3 }" formats "foo(bar([\n 1,\n]))" formats "foo(bar([\n 1,\n]))" formats "1.>=() { 3 }" formats "1.>=() { 3 }" formats "begin\n #hola\n 1\nend\n" formats "begin\n #hola\n 1\nend\n" formats "def foo(&block: Int32)\nend" formats "def foo(&block: Int32)\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 "[\n 1, 2, # foo\n 3,\n]" formats "[\n 1, 2, # foo\n 3,\n]" formats "a = if 1\n2\nelsif 3\n4\nend" formats "a = if 1\n2\nelsif 3\n4\nend" formats "def foo(&: Int32)\nend" formats "def foo(&: Int32)\nend" formats "if 1\n ((1) + 2)\nend" formats "if 1\n ((1) + 2)\nend" formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\\v\\f\\e\"" formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\\v\\f\\e\"" formats "unless a\nelse\n2\nend" formats "unless a\nelse\n2\nend" formats "extend Foo" formats "extend Foo" formats "next *1" formats "next *1" formats "class X; annotation FooAnnotation ; end ; end" formats "class X; annotation FooAnnotation ; end ; end" formats "case 1\nelse # foo\n # bar\nend" formats "case 1\nelse # foo\n # bar\nend" formats "foo 1, # comment\n do\n end" formats "foo 1, # comment\n do\n end" formats "foo(\n 1,\n) {\n 2\n}" formats "foo(\n 1,\n) {\n 2\n}" formats "getter foo # comment\n\ndef foo\nend" formats "getter foo # comment\n\ndef foo\nend" formats "foo.bar=(2)\n1" formats "foo.bar=(2)\n1" formats "foo = 1\n->foo.bar=(Int32)" formats "foo = 1\n->foo.bar=(Int32)" formats "X(typeof(begin\n e.is_a?(Y)\nend))" formats "X(typeof(begin\n e.is_a?(Y)\nend))" formats "foo(1, ) { }" formats "foo(1, ) { }" formats "x = uninitialized Int32" formats "x = uninitialized Int32" 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 "class Foo ( *T, U )\nend" formats "class Foo ( *T, U )\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 "alias Foo::Bar =Baz" formats "alias Foo::Bar =Baz" 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 "next *1 ,2" formats "next *1 ,2" formats "alias Foo =Bar" formats "alias Foo =Bar" formats "if 1 # foo\n2\nend" formats "if 1 # foo\n2\nend" formats "inner &.color=(@color)\n1" formats "inner &.color=(@color)\n1" formats "1 + # foo\n2" formats "1 + # foo\n2" 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 "<<-HTML\n hello \n world \n HTML" formats "<<-HTML\n hello \n world \n HTML" formats "foo : Foo*****" formats "foo : Foo*****" formats "Foo:: Bar" formats "Foo:: Bar" formats "1.===() { 3 }" formats "1.===() { 3 }" formats "x.try &.[]= 123, 456" formats "x.try &.[]= 123, 456" formats "foo[]" formats "foo[]" formats "foo.[]" formats "foo.[]" formats ":\"foo bar\"" formats ":\"foo bar\"" formats "foo(\n 1,\n a: 1,\n b: 2,\n)" formats "foo(\n 1,\n a: 1,\n b: 2,\n)" 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 "[\n <<-EOF,\n foo\n EOF\n]" formats "[\n <<-EOF,\n foo\n EOF\n]" formats "def foo\n 1 #\nrescue\nend" formats "def foo\n 1 #\nrescue\nend" formats "{\n <<-KEY => 1,\n key\n KEY\n}" formats "{\n <<-KEY => 1,\n key\n KEY\n}" formats "foo({% verbatim do %}{{1}} + {{2}}{% end %})" formats "foo({% verbatim do %}{{1}} + {{2}}{% end %})" formats "def foo(@[AnnOne] @[AnnTwo] v); end" formats "def foo(@[AnnOne] @[AnnTwo] v); end" formats "foo(A |\nB |\nC)" formats "foo(A |\nB |\nC)" formats "{\n1 => 2 ,\n 3 => 4 }" formats "{\n1 => 2 ,\n 3 => 4 }" formats "foo 1,\n2" formats "foo 1,\n2" formats "lib Foo\nstruct Foo\nx : Int32\ny : Float64\nend\nend" formats "lib Foo\nstruct Foo\nx : Int32\ny : Float64\nend\nend" formats "a+1" formats "a+1" formats "\n# hello\n\n1" formats "\n# hello\n\n1" formats "case 1 \n when 2 then 3 \n end" formats "case 1 \n when 2 then 3 \n end" 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 "case\n# hello\nwhen 1\n 2\nend" formats "case\n# hello\nwhen 1\n 2\nend" formats "unless a\n2\nend" formats "unless a\n2\nend" formats "1 &&\n2" formats "1 &&\n2" formats "\"\#{\n foo = 1}\"" formats "\"\#{\n foo = 1}\"" formats "alias Foo=Bar" formats "alias Foo=Bar" formats "begin\n 1\nend\n\n1\n" formats "begin\n 1\nend\n\n1\n" formats "foo.bar. as? Int32" formats "foo.bar. as? Int32" formats "1 / 2" formats "1 / 2" formats "Foo( x: Int32 , y: Float64 )" formats "Foo( x: Int32 , y: Float64 )" formats "{\n \"foo\": 1,\n \"babraz\": 2,\n}" formats "{\n \"foo\": 1,\n \"babraz\": 2,\n}" formats "->{}" formats "->{}" 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 "offsetof( String, @length )" formats "offsetof( String, @length )" formats "begin; 1; end" formats "begin; 1; end" formats "while 1\n2\nend" formats "while 1\n2\nend" formats "foo([\n 1,\n 2,\n 3,\n])" formats "foo([\n 1,\n 2,\n 3,\n])" formats "instance_alignof( Int32 )" formats "instance_alignof( Int32 )" formats "\"foo\" \\\n \"bar\" \\\n \"baz\"" formats "\"foo\" \\\n \"bar\" \\\n \"baz\"" formats "lib Foo\nfun foo(x : Int32, y : Float64) : Int32\nend" formats "lib Foo\nfun foo(x : Int32, y : Float64) : Int32\nend" formats "def foo( x , * y )\nend" formats "def foo( x , * y )\nend" formats "asm(\n\"nop\"\n)" formats "asm(\n\"nop\"\n)" formats "1" formats "1" formats " <<-HTML\n \#{1} \#{2}\n HTML" formats " <<-HTML\n \#{1} \#{2}\n HTML" formats "foo[ 1 , 2 ]" formats "foo[ 1 , 2 ]" formats ":|" formats ":|" formats "case 1\nwhen a; 2\nelse; b\nend" formats "case 1\nwhen a; 2\nelse; b\nend" formats "{ \"foo\" => 1 }" formats "{ \"foo\" => 1 }" formats "def foo (\nx ,\n y ) \n end" formats "def foo (\nx ,\n y ) \n end" formats "lib Foo\n fun Bar\nend" formats "lib Foo\n fun Bar\nend" formats "foo &.is_a?(T)" formats "foo &.is_a?(T)" formats "->{\n # first comment\n puts \"hi\"\n # second comment\n}" formats "->{\n # first comment\n puts \"hi\"\n # second comment\n}" formats "lib Foo\ntype Foo = Bar\nend" formats "lib Foo\ntype Foo = Bar\nend" formats "x : A?" formats "x : A?" formats "yield(\n1 , \n2)" formats "yield(\n1 , \n2)" formats "foo &.as?(T).bar" formats "foo &.as?(T).bar" formats "def foo(**b, # comment\n &block)\nend" formats "def foo(**b, # comment\n &block)\nend" formats "->{}" formats "->{}" formats "@[Foo]" formats "@[Foo]" formats "foo = 1\n->foo.bar(Int32*)" formats "foo = 1\n->foo.bar(Int32*)" formats "<<-HTML\n \#{\"foo\"}\#{1}\n HTML" formats "<<-HTML\n \#{\"foo\"}\#{1}\n HTML" formats "foo(/ /)" formats "foo(/ /)" formats "if 1\n2 # foo\nend" formats "if 1\n2 # foo\nend" formats "{ 1 => 2 }" formats "{ 1 => 2 }" formats "foo &.==(2)" formats "foo &.==(2)" formats "return { 1 , 2 }" formats "return { 1 , 2 }" formats "def foo(**z : Foo)\nend" formats "def foo(**z : Foo)\nend" formats "unless a\n # hello\n 2\nend" formats "unless a\n # hello\n 2\nend" formats "{% if z %}\n class Foo\n end\n{% end %}" formats "{% if z %}\n class Foo\n end\n{% end %}" formats "foo &.>=(2)" formats "foo &.>=(2)" formats "%i{one( two( three)}" formats "%i{one( two( three)}" Code gen: C ABI x86_64 passes struct between 64 and 128 bits as { i64, i64 } passes struct between 64 and 128 bits as { i64, i64 } passes struct less than 64 bits as { i64 } passes struct less than 64 bits as { i64 } 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 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) passes struct less than 64 bits as { i64 } in varargs passes struct less than 64 bits as { i64 } in varargs 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 } Code gen: named tuple assigns named tuple to compatible named tuple assigns named tuple to compatible named tuple doesn't crash when overload doesn't match doesn't crash when overload doesn't match codegens union of tuple of float with tuple of tuple of float codegens union of tuple of float with tuple of tuple of float upcasts named tuple inside union to union with compatible named tuple upcasts named tuple inside union to union with compatible named tuple codegens tuple nilable index (2) codegens tuple nilable index (2) merges two named tuple types with same keys but different types (1) merges two named tuple types with same keys but different types (1) allows named tuple covariance allows named tuple covariance 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 inside compatible named tuple upcasts named tuple inside compatible named tuple doesn't error if NamedTuple includes a non-generic module (#10380) doesn't error if NamedTuple includes a non-generic module (#10380) provides T as a named tuple literal provides T as a named tuple literal upcasts named tuple union to compatible named tuple upcasts named tuple union to compatible named tuple gets keys at compile time (2) gets keys at compile time (2) codegens tuple index codegens tuple index assigns named tuple inside union to union with compatible named tuple assigns named tuple inside union to union with compatible named tuple assigns named tuple union to compatible named tuple assigns named tuple union to compatible named tuple 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) passes named tuple to def passes named tuple to def accesses T and creates instance from it accesses T and creates instance from it assigns two same-size named tuple types to a same var (#3132) assigns two same-size named tuple types to a same var (#3132) downcasts union inside tuple to value (#3907) downcasts union inside tuple to value (#3907) codegens tuple index another order codegens tuple index another order codegens tuple nilable index (1) codegens tuple nilable index (1) codegens tuple nilable index (3) codegens tuple nilable index (3) gets keys at compile time (1) gets keys at compile time (1) Semantic: previous_def 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 types previous def when inside fun 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 types previous def errors if there's no previous def errors if there's no previous def types previous def in generic class types previous def in generic class types previous def when inside fun and forwards args types previous def when inside fun and forwards args types previous def with explicit arguments types previous def with explicit arguments 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 forwarded arguments, different internal names (#8895) types previous def with forwarded arguments, different internal names (#8895) types previous def with forwarded arguments, def has parameters types previous def with forwarded arguments, def has parameters 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 restrictions types previous def with restrictions Code gen: lib allows invoking out with underscore allows invoking out with underscore codegens lib var set and get codegens lib var set and get uses static array in lib extern (#5688) uses static array in lib extern (#5688) call to void function call to void function can use enum as fun return can use enum as fun return 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 passes nil to varargs (#1570) passes nil to varargs (#1570) refers to lib type (#960) refers to lib type (#960) doesn't crash with nil and varargs (#4414) doesn't crash with nil and varargs (#4414) 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) 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 (bug) allows passing type to LibC if it has a converter with to_unsafe (bug) 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 passes int as another float type in literal passes int as another float type in literal casts C fun to Crystal proc when accessing instance var (#2515) casts C fun to Crystal proc when accessing instance var (#2515) 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 can use enum as fun argument can use enum as fun argument Code gen: debug stores and restores debug location after jumping to main (2) stores and restores debug location after jumping to main (2) has debug info in closure inside if (#5593) has debug info in closure inside if (#5593) codegens abstract struct (#3578) codegens abstract struct (#3578) doesn't emit incorrect debug info for closured self doesn't emit incorrect debug info for closured self codegens correct debug info for untyped expression (#4007 and #4008) codegens correct debug info for untyped expression (#4007 and #4008) doesn't fail on constant read calls (#11416) doesn't fail on constant read calls (#11416) stores and restores debug location after jumping to main (#6920) stores and restores debug location after jumping to main (#6920) 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 has correct debug location after constant initialization in call with block (#4719) has correct debug location after constant initialization in call with block (#4719) 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) codegens lib union (#7335) codegens lib union (#7335) codegens extern union (#7335) codegens extern union (#7335) 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) Crystal::Repl::Interpreter blocks interprets yield return value interprets yield return value interprets simplest block interprets simplest block interprets with ... yield with struct interprets with ... yield with struct 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) interprets yield with splat, block with splat (#12227) interprets yield with splat, block with splat (#12227) interprets break inside block (union, through normal flow) interprets break inside block (union, through normal flow) yields different values to form a union yields different values to form a union interprets next inside block (union, through next) interprets next inside block (union, through next) interprets yield with splat, less block arguments interprets yield with splat, less block arguments interprets yield inside another block interprets yield inside another block interprets yield inside def with arguments interprets yield inside def with arguments interprets yield with splat (2) interprets yield with splat (2) interprets with ... yield with extra arguments (#12296) interprets with ... yield with extra arguments (#12296) interprets yield with splat (1) interprets yield with splat (1) interprets yield expressions interprets yield expressions clears block local variables when calling block (2) clears block local variables when calling block (2) interprets next inside block interprets next inside block discards yield expression discards yield expression interprets break inside block interprets break inside block returns from block returns from block interprets block with multiple yields interprets block with multiple yields casts yield expression to block var type (not block arg type) casts yield expression to block var type (not block arg type) 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 considers block arg without type as having NoReturn type (#12270) considers block arg without type as having NoReturn type (#12270) interprets break inside block (union, through break) interprets break inside block (union, through break) captures non-closure block captures non-closure block interprets yield expression interprets yield expression interprets with ... yield interprets with ... yield interprets next inside block (union, through normal exit) interprets next inside block (union, through normal exit) interprets block with args that conflict with a local var interprets block with args that conflict with a local var interprets block with splat interprets block with splat considers block arg without type as having NoReturn type (2) (#12270) considers block arg without type as having NoReturn type (2) (#12270) interprets break inside block (union, through return) interprets break inside block (union, through return) Normalize: range literal normalizes exclusive normalizes exclusive normalizes not exclusive normalizes not exclusive Normalize: op assign normalizes exp.value ||= normalizes exp.value ||= normalizes var &+= normalizes var &+= normalizes var.value += normalizes var.value += normalizes var -= normalizes var -= normalizes var &*= normalizes var &*= normalizes exp[0] += normalizes exp[0] += normalizes exp.value &&= normalizes exp.value &&= normalizes var *= normalizes var *= normalizes @var.value += normalizes @var.value += normalizes @var[0] += normalizes @var[0] += normalizes exp[value] ||= normalizes exp[value] ||= normalizes exp[value] += normalizes exp[value] += normalizes var &-= normalizes var &-= normalizes var ||= normalizes var ||= normalizes var &&= normalizes var &&= normalizes exp.value += normalizes exp.value += normalizes var += normalizes var += normalizes @@var[0] += normalizes @@var[0] += normalizes var[0] += normalizes var[0] += normalizes @@var.value += normalizes @@var.value += normalizes exp[value] &&= normalizes exp[value] &&= 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 return from function with union type return from function with union type flattens splats inside multiple return values flattens splats inside multiple return values codegens assign with if with two returns codegens assign with if with two returns codegens return codegens return codegens return followed by another expression codegens return followed by another expression return from function with nilable type return from function with nilable type codegens bug with return if true codegens bug with return if true return from function with nilable type 2 return from function with nilable type 2 codegens return inside if codegens return inside if return union return union returns in var assignment (#3364) returns in var assignment (#3364) returns empty from function returns empty from function forms a tuple from multiple return values forms a tuple from multiple return values Normalize: def expands a def on request with default arguments (external names) expands a def on request with default arguments (external names) uses bare * uses bare * expands with named argument expands with named argument 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 gives correct body location with block instance var arg, without body block instance var arg, without body block instance var arg, with body block instance var arg, with body default arg with restriction, without body default arg with restriction, without body default arg, with body default arg, with body default arg, without body default arg, without body splat arg, with body splat arg, with body splat arg, without body splat arg, without body default arg with restriction, with body default arg with restriction, with body 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 on request with default arguments that yields expands a def on request with default arguments that yields 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 external names (2) expands a def with external names (2) expands with splat with one arg before expands with splat with one arg before expands with two named argument expands with two 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 with magic constant with named arg with yield expands with magic constant with named arg with yield expands with magic constant specifying one when not all are magic expands with magic constant specifying one when not all are magic 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 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 (2) expands with one named arg that is the only one (2) expands a def with splat and double splat expands a def with splat and double splat 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 with splat and default argument expands with splat and default argument expands a def with external names (1) expands a def with external names (1) expands with magic constant expands with magic constant expands with named argument and yield expands with named argument and yield expands a def on request with default arguments expands a def on request with default arguments 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 two named argument and one not expands with two named argument and one not 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 (2) expands a def on request with default arguments (2) expands with more named arg which come in the correct order expands with more named arg which come in the correct order expands with magic constant with named arg expands with magic constant with named arg expands default value after splat index expands default value after splat index expands arg with default value after splat expands arg with default value after splat expands a def with double splat and two named args expands a def with double splat and two named args expands def with reserved external name (#6559) expands def with reserved external name (#6559) expands with splat expands with splat expands with splat and zero expands with splat and zero Crystal::Config .host_target .host_target .linux_runtime_libc .linux_runtime_libc Code gen: uninitialized 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 value (#3641) codegens value (#3641) codegens declare instance var codegens declare instance var codegens declare var and read it codegens declare var and read it codegens declare instance var with static array type codegens declare instance var with static array type works with uninitialized NoReturn (#3314) works with uninitialized NoReturn (#3314) codegens declare var and changes it codegens declare var and changes it Crystal::Repl::Interpreter casts 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) 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) casts from mixed union type to nilable proc type (#12283) casts from mixed union type to nilable proc type (#12283) upcasts between named tuple types, respects alignment (#14036) upcasts between named tuple types, respects alignment (#14036) 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 a type that can't match (#12346) does as? with a type that can't match (#12346) 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 upcasts in nilable cast (#12532) upcasts in nilable cast (#12532) puts virtual metaclass into union (#12162) puts virtual metaclass into union (#12162) raises when as fails raises when as fails 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 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) casts from mixed union type to another mixed union type for caller casts from mixed union type to another mixed union type for caller discards cast discards cast upcasts to module type upcasts to module type upcasts GenericClassInstanceMetaclassType to VirtualMetaclassType upcasts GenericClassInstanceMetaclassType to VirtualMetaclassType upcasts between named tuple types, same order upcasts between named tuple types, same order upcasts between named tuple types, different order upcasts between named tuple types, different order does as? with no resulting type (#12327) does as? with no resulting type (#12327) 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 nilable type to mixed union type (2) casts from nilable type to mixed union type (2) casts nilable from mixed union type to primitive type (nil case) casts nilable from mixed union type to primitive type (nil case) casts nil to Void* casts nil to Void* casts from reference to nilable reference casts from reference to nilable reference upcasts between tuple types, respects alignment (#14036) upcasts between tuple types, respects alignment (#14036) 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) casts from mixed union type to primitive type casts from mixed union type to primitive type casts from reference to pointer and back casts from reference to pointer and back upcasts between tuple types upcasts between tuple types Crystal::TextHierarchyPrinter shows correct size for Bool member shows correct size for Bool member 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 works works shows correct size for members with bound types shows correct size for members with bound types Code gen: 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) codegens method of class union including Int (#1476) codegens method of class union including Int (#1476) codegens new which calls initialize codegens new which calls initialize 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) codegens initialize with instance var codegens initialize with instance var calls method on Class class calls method on Class class reads a virtual type instance var reads a virtual type instance var codegens recursive type codegens recursive type codegens singleton (#718) codegens singleton (#718) allows initializing var with constant allows initializing var with constant codegens assignment of generic metaclasses (2) (#10394) codegens assignment of generic metaclasses (2) (#10394) codegens class with recursive tuple to class (#4520) codegens class with recursive tuple to class (#4520) codegens method from another method without obj and accesses instance vars codegens method from another method without obj and accesses instance vars 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) runs instance variable initializer at the class level, for generic type runs instance variable initializer at the class level, for generic type codegens assignment of generic metaclasses (3) (#10394) codegens assignment of generic metaclasses (3) (#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) resolves type declaration when accessing instance var (#348) resolves type declaration when accessing instance var (#348) 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 gets class of virtual type gets class of virtual 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 reads a union type instance var (mixed union, second type) reads a union type instance var (mixed union, second type) codegens virtual generic class instance metaclass (#3819) codegens virtual generic class instance metaclass (#3819) runs instance variable initializer at the class level runs instance variable initializer at the class level doesn't crash on #1216 with pointerof doesn't crash on #1216 with pointerof invokes class method inside instance method (#1119) invokes class method inside instance method (#1119) codegens method call of instance var codegens method call of instance var transfers initializer from generic module to generic class transfers initializer from generic module to generic class doesn't skip false initializers (#3272) doesn't skip false initializers (#3272) transfers initializer from module to generic class transfers initializer from module to generic class codegens class method codegens class method codegens virtual class method codegens virtual class method codegens virtual metaclass union bug (#2597) codegens virtual metaclass union bug (#2597) reads a union type instance var (reference union, second type) reads a union type instance var (reference union, second type) doesn't skip zero initializers (#3272) doesn't skip zero initializers (#3272) reads other instance var reads other instance var 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 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) transfers initializer from generic module to non-generic class transfers initializer from generic module to non-generic class codegens call to same instance codegens call to same instance calls class method without self (2) calls class method without self (2) doesn't crash on #1216 doesn't crash on #1216 assigns type to reference union type assigns type to reference union type notifies superclass recursively on inheritance (#576) notifies superclass recursively on inheritance (#576) codegens assignment of generic metaclasses (1) (#10394) codegens assignment of generic metaclasses (1) (#10394) doesn't crash on #1216 (reduced) doesn't crash on #1216 (reduced) doesn't crash if not using undefined instance variable in superclass doesn't crash if not using undefined instance variable in superclass reads a union type instance var (reference union, first type) reads a union type instance var (reference union, first type) changes instance variable in method (ssa bug) changes instance variable in method (ssa bug) 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 makes .class always be a virtual type even if no subclasses makes .class always be a virtual type even if no subclasses builds generic class bug builds generic class bug codegens assignment of generic metaclasses, base is non-generic (1) (#10394) codegens assignment of generic metaclasses, base is non-generic (1) (#10394) runs with nil instance var when inheriting runs with nil instance var when inheriting codegens assignment of generic metaclasses, base is non-generic (2) (#10394) codegens assignment of generic metaclasses, base is non-generic (2) (#10394) 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) uses number type var uses number type var can assign virtual metaclass to virtual metaclass (#3007) can assign virtual metaclass to virtual metaclass (#3007) codegens bug #168 codegens bug #168 runs with nilable instance var runs with nilable instance var codegens assignment of generic metaclasses (4) (#10394) codegens assignment of generic metaclasses (4) (#10394) calls class method without self calls class method without self codegens instance var codegens instance var allows using self in class scope allows using self in class scope never considers read instance var as closure (#12181) never considers read instance var as closure (#12181) 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 virtual call that calls another method codegens virtual call that calls another method doesn't crash on abstract class never instantiated (#2840) doesn't crash on abstract class never instantiated (#2840) allows fixing an instance variable's type allows fixing an instance variable's type Normalize: and normalizes and without variable normalizes and without variable normalizes and with is_a? on exp normalizes and with is_a? on exp 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 with is_a? on var normalizes and with is_a? on var normalizes and with assignment normalizes and with assignment normalizes and with ! on var.is_a?(...) normalizes and with ! on var.is_a?(...) Codegen: 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 define a constant define a constant inlines const with math inlines const with math supports storing function returning nil supports storing function returning nil 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 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 (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 nearest constant first finds nearest constant first inlines simple const inlines simple const 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) 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 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 is declared later because of virtual dispatch codegens constant that is declared later because of virtual dispatch define a constant in lib define a constant in lib inlines enum value inlines enum value inlines char const inlines char const 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) 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 initializes simple const via another const initializes simple const via another const initializes simple const initializes simple const allows constants with same name allows constants with same name inlines bool const inlines bool const initializes ARGC_UNSAFE initializes ARGC_UNSAFE 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 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 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 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 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 support nested constant support nested constant 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 constants with expression constants with expression supports closured vars inside initializers (#10474) supports closured vars inside initializers (#10474) finds global constant finds global constant 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 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) support constant inside a def support constant inside a def declaring var declaring var declaring var declaring var declaring var declaring var declaring var declaring var declaring var declaring var Crystal::Repl::Interpreter multidispatch does dispatch on one argument inside module with implicit self does dispatch on one argument inside module with implicit self does multidispatch on virtual metaclass type (1) does multidispatch on virtual metaclass type (1) does dispatch on one argument inside module with explicit receiver does dispatch on one argument inside module with explicit receiver initialize multidispatch initialize multidispatch does dispatch on receiver type does dispatch on receiver type 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) passes self as pointer when doing multidispatch (2) passes self as pointer when doing multidispatch (2) does multidispatch on virtual metaclass type (2) does multidispatch on virtual metaclass type (2) does dispatch on one argument does dispatch on one argument 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 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 does dispatch on receiver type and argument type does dispatch on receiver type and argument type 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 and argument type, multiple times does dispatch on receiver type and argument type, multiple times does multidispatch with mandatory named arguments does multidispatch with mandatory named arguments passes self as pointer when doing multidispatch passes self as pointer when doing multidispatch 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) codegens inherited generic class instance var codegens inherited generic class instance var doesn't use virtual + in type arguments for NamedTuple (#2839) doesn't use virtual + in type arguments for NamedTuple (#2839) declares instance var with virtual T (#1675) declares instance var with virtual T (#1675) 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) codegens virtual generic metaclass macro method call codegens virtual generic metaclass macro method call allows initializing instance variable (#665) allows initializing instance variable (#665) doesn't use virtual + in type arguments for Tuple (#2839) doesn't use virtual + in type arguments for Tuple (#2839) 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) doesn't consider abstract types for including types (#7200) doesn't consider abstract types for including types (#7200) inherited instance var initialize from generic to concrete (#2128) inherited instance var initialize from generic to concrete (#2128) inherited instance var initialize from generic to generic to concrete (#2128) inherited instance var initialize from generic to generic to concrete (#2128) doesn't consider abstract generic instantiation when restricting type (#5190) doesn't consider abstract generic instantiation when restricting type (#5190) codegens static array size after instantiating codegens static array size after instantiating 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 runs generic instance var initializers in superclass's metaclass context (#4753) runs generic instance var initializers in superclass's metaclass context (#4753) allows initializing instance variable in inherited generic type allows initializing instance variable in inherited generic type doesn't crash on generic type restriction with no subtypes (#7583) doesn't crash on generic type restriction with no subtypes (#7583) invokes super in generic class (#2354) invokes super in generic class (#2354) 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 use virtual + in type arguments (#2839) doesn't use virtual + in type arguments (#2839) 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) implementations find class inside method find class inside method find class implementation find class implementation find method calls inside rescue find method calls inside rescue find implementation inside contained file private class' class method find implementation inside contained file private class' class method find method calls inside if find method calls inside if can display json output can display json output find method calls inside while find method calls inside while can display text output can display text output find implementation in generic class find implementation in generic class find const implementation find const implementation find implementors of classes that are only used find implementors of classes that are only used find implementation in class methods find implementation in class methods find full trace for macro expansions find full trace for macro expansions find module implementation find module implementation find implementation in generic class methods find implementation in generic class methods find struct implementation find struct implementation find enum value implementation find enum value implementation find open class implementation find open class implementation find top level method calls find top level method calls find method calls inside while cond find method calls inside while cond find implementation from macro expansions find implementation from macro expansions find implementation inside a module class find implementation inside a module class find implementation inside contained class' class method find implementation inside contained class' class method find implementation inside contained file private method find implementation inside contained file private method find enum implementation find enum implementation find implementors of different classes find implementors of different classes find alias implementation find alias implementation find class defined by macro find class defined by macro find method calls inside trailing if find method calls inside trailing if 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 (2) creates custom generic hash via alias (2) creates custom non-generic hash in module creates custom non-generic hash in module creates custom generic hash creates custom generic hash 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 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) 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 with type vars creates custom generic hash with type vars 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 produces valid yaml file produces valid yaml file 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 prints error if a file is already present prints error if a file is already present errors if files will be overwritten by a generated file errors if files will be overwritten by a generated file Semantic: external/internal can call positionally can call positionally can call with external name and use with internal can call with external name and use with 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 positionally can call positionally can call with external name and use with internal can call with external name and use with internal overloads based on external name (#2610) overloads based on external name (#2610) can call with external name and use with internal, after splat can call with external name and use with internal, after splat Crystal::Repl::Interpreter named tuple discards named tuple (#12383) discards named tuple (#12383) interprets named tuple metaclass indexer interprets named tuple metaclass indexer interprets named tuple literal and access by known index interprets named tuple literal and access by known index Semantic: module calls super on included generic module calls super on included generic module includes generic module with type includes generic module with type can instantiate generic module can instantiate generic module can't reopen as class can't reopen as class 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 when trying to instantiate with allocate gives error when trying to instantiate with allocate includes generic module with self (check argument type, error) includes generic module with self (check argument type, error) includes generic module with self (check return subclass type, error) includes generic module with self (check return subclass type, error) declares module automatically if not previously declared when declaring a module declares module automatically if not previously declared when declaring a module includes module in a module includes module in a module errors when extending self and self defines instance vars (3) (#9568) errors when extending self and self defines instance vars (3) (#9568) works with int including enumerable works with int including enumerable errors when extending generic module that defines instance vars (2) errors when extending generic module that defines instance vars (2) 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) errors if reopening generic module with different splat index (2) errors if reopening generic module with different splat index (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 type vars (2) errors if reopening generic module with different type vars (2) includes but not a module includes but not a module errors if declares module inside if errors if declares module inside if includes generic module with self (check argument superclass type, success) includes generic module with self (check argument superclass type, success) uses :Module name for modules in errors uses :Module name for modules in errors 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 errors when extending module that defines instance vars (2) (#4065) errors when extending module that defines instance vars (2) (#4065) gives error when trying to instantiate with new gives error when trying to instantiate with new instantiates generic variadic module, accesses T from class method instantiates generic variadic module, accesses T from class method includes generic module with self (check argument type, success) includes generic module with self (check argument type, success) instantiates generic variadic module, accesses T from instance method, more args instantiates generic variadic module, accesses T from instance method, more args errors if including generic module and not specifying type vars errors if including generic module and not specifying type vars uses type declaration inside module uses type declaration inside module includes generic module with self (check return type, success) includes generic module with self (check return type, success) includes generic module with self (check return type, error) includes generic module with self (check return type, error) includes module in a class includes module in a class calls super on included generic module and finds type var (2) calls super on included generic module and finds type var (2) includes module but can't access metaclass methods includes module but can't access metaclass methods can't reopen as struct can't reopen as struct types pointer of module with method types pointer of module with method initializes variable in module, recursive initializes variable in module, recursive types proc of module with generic class types proc of module with generic class extends a module extends a module finds types close to included module finds types close to included module gives error when including instantiation of self, generic module gives error when including instantiation of self, generic module errors if reopening non-generic module as generic errors if reopening non-generic module as generic allows overloading with included generic module allows overloading with included generic module errors when extending self and self defines instance vars (2) (#9568) errors when extending self and self defines instance vars (2) (#9568) errors when recursively extending module that defines instance vars (2) errors when recursively extending module that defines instance vars (2) inherits instance var type annotation from generic to concrete with T inherits instance var type annotation from generic to concrete with T gives error when including self, generic module gives error when including self, generic module errors when recursively extending module that defines instance vars errors when recursively extending module that defines instance vars includes module but not generic includes module but not generic 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 includes generic module and errors in call includes generic module and errors in call types union of module and class that includes it types union of module and class that includes it includes generic module with self (check argument superclass type, success) includes generic module with self (check argument superclass type, success) inherits instance var type annotation from generic to concrete inherits instance var type annotation from generic to concrete gives error with cyclic include between non-generic and generic module gives error with cyclic include between non-generic and generic module can use generic module as instance variable type (2) can use generic module as instance variable type (2) includes generic module explicitly and errors includes generic module explicitly and errors uses type declaration inside module and gives error uses type declaration inside module and gives error finds inner class from inherited one (#476) finds inner class from inherited one (#476) doesn't look up initialize past module that defines initialize (#7007) doesn't look up initialize past module that defines initialize (#7007) includes module with Union(T*) includes module with Union(T*) gives error with cyclic include gives error with cyclic include types pointer of module types pointer of module reports can't use instance variables inside module reports can't use instance variables inside module errors if reopening generic module with different type vars errors if reopening generic module with different type vars 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 can restrict module with module (#3029) can restrict module with module (#3029) can use generic module as instance variable type can use generic module as instance variable type finds in module when included finds in module when included type def does not reopen type from parent namespace (#11181) type def does not reopen type from parent namespace (#11181) uses type declaration inside module, recursive, and gives error uses type declaration inside module, recursive, and gives error calls super on included generic module and finds type var calls super on included generic module and finds type var instantiates generic variadic module, accesses T from class method through generic extend instantiates generic variadic module, accesses T from class method through generic extend declares module automatically if not previously declared when declaring a class declares module automatically if not previously declared when declaring a class extends generic module from generic class and calls class method (#7167) extends generic module from generic class and calls class method (#7167) gives error with cyclic include, generic module gives error with cyclic include, generic module works with range and map works with range and map gives error with cyclic include between non-generic and generic module (2) gives error with cyclic include between non-generic and generic module (2) doesn't lookup type in ancestor when matches in current type (#2982) doesn't lookup type in ancestor when matches in current type (#2982) can't pass module class to virtual metaclass (#6113) can't pass module class to virtual metaclass (#6113) includes generic module with self (check return subclass type, success) includes generic module with self (check return subclass type, success) errors if reopening generic module with different splat index errors if reopening generic module with different splat index gives helpful error message when generic type var is missing gives helpful error message when generic type var is missing types pointer of module with generic type types pointer of module with generic type types pointer of module with method with two including types types pointer of module with method with two including types types proc of module after type changes types proc of module after type changes gives error when including self gives error when including self instantiates generic variadic module, accesses T from instance method instantiates generic variadic module, accesses T from instance method finds class method in block finds class method in block extends generic module from generic module and calls class method (#7167) extends generic module from generic module and calls class method (#7167) extends module from generic class and calls class method (#7167) extends module from generic class and calls class method (#7167) includes generic module with another generic type includes generic module with another generic type 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) includes module but wrong number of arguments includes module but wrong number of arguments errors when extending generic module that defines instance vars errors when extending generic module that defines instance vars errors when extending module that defines instance vars (#4065) errors when extending module that defines instance vars (#4065) errors if reopening generic module with different splat index (3) errors if reopening generic module with different splat index (3) inherits instance var type annotation from generic to generic to concrete inherits instance var type annotation from generic to generic to concrete includes generic module explicitly includes generic module explicitly includes generic module with self includes generic module with self extends self extends self initializes variable in module initializes variable in module includes generic module with self, and inherits it includes generic module with self, and inherits it types pointer of module with generic type types pointer of module with generic type Semantic: yield with scope infer type of block body with yield scope infer type of block body with yield scope invokes nested calls invokes nested calls passes #229 passes #229 finds macro finds macro errors if using instance variable at top level errors if using instance variable at top level 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 infer type of block body uses instance variable of enclosing scope uses instance variable of enclosing scope uses method of enclosing scope uses method of enclosing scope infer type of empty block body infer type of empty block body mentions with yield scope and current scope in error mentions with yield scope and current scope in error Code gen: tuple assigns two same-size tuple types to a same var (#3132) assigns two same-size tuple types to a same var (#3132) codegens tuple [0..1]? codegens tuple [0..1]? codegens tuple [3..2]? codegens tuple [3..2]? codegens tuple metaclass [2]? codegens tuple metaclass [2]? upcasts tuple union to compatible tuple upcasts tuple union to compatible tuple 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 [1] codegens tuple [1] codegens tuple metaclass [1..0] codegens tuple metaclass [1..0] codegens splats inside tuples codegens splats inside tuples codegens tuple metaclass [0..0] codegens tuple metaclass [0..0] codegens tuple [0..0]? codegens tuple [0..0]? codegens tuple metaclass [1] codegens tuple metaclass [1] codegens tuple [1..0] codegens tuple [1..0] upcasts tuple inside union to union with compatible tuple upcasts tuple inside union to union with compatible tuple 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 [1] (2) codegens tuple [1] (2) provides T as a tuple literal provides T as a tuple literal codegens tuple [2]? codegens tuple [2]? codegens tuple [1]? codegens tuple [1]? passes empty tuple and empty named tuple to a method (#2852) passes empty tuple and empty named tuple to a method (#2852) codegens tuple [1..1]? codegens tuple [1..1]? codegens tuple [0..2]? codegens tuple [0..2]? codegens tuple [-3..2]? codegens tuple [-3..2]? assigns tuple inside union to union with compatible tuple assigns tuple inside union to union with compatible tuple gets size at compile time gets size at compile time merges two tuple types of same size (2) merges two tuple types of same size (2) 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 merges two tuple types of same size (1) merges two tuple types of same size (1) codegens tuple [0]? codegens tuple [0]? upcasts tuple inside compatible tuple upcasts tuple inside compatible tuple allows malloc pointer of tuple allows malloc pointer of tuple codegens tuple metaclass [0..1] codegens tuple metaclass [0..1] assigns tuple union to compatible tuple assigns tuple union to compatible tuple assigns tuple to compatible tuple assigns tuple to compatible tuple downcasts union inside tuple to value (#3907) downcasts union inside tuple to value (#3907) codegens tuple [0] codegens tuple [0] codegens tuple [1..1] codegens tuple [1..1] codegens tuple [0..0] codegens tuple [0..0] codegens tuple [2..2] codegens tuple [2..2] accesses T and creates instance from it accesses T and creates instance from it allows tuple covariance allows tuple covariance codegens tuple metaclass [0] codegens tuple metaclass [0] codegens tuple class codegens tuple class codegens tuple metaclass [3..2]? codegens tuple metaclass [3..2]? codegens tuple [0..1] codegens tuple [0..1] codegens tuple [0..2] codegens tuple [0..2] codegens tuple [1..0]? codegens tuple [1..0]? passed tuple to def passed tuple to def downcasts union to mixed tuple type downcasts union to mixed tuple type Semantic: def errors if trying to declare method on generic class instance errors if trying to declare method on generic class instance types simple recursion 2 types simple recursion 2 reports no block given reports no block given shows free variables if no overload matches shows free variables if no overload matches types empty body def types empty body def says compile-time type on error says compile-time type on error says can only defined def on types and self says can only defined def on types and self types simple recursion types simple recursion doesn't find type in namespace through free var doesn't find type in namespace through free var types a call with a double types a call with a double types call with union argument types call with union argument defines class method with self defines class method with self clones regex literal value (#2384) clones regex literal value (#2384) allows recursion allows recursion uses free variable with metaclass and default value uses free variable with metaclass and default value 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) types a call with an argument types a call with an argument errors if declares def inside if errors if declares def inside if errors if return type doesn't match errors if return type doesn't match do not use body for the def type do not use body for the def type errors when calling two functions with nil type errors when calling two functions with nil type lookups methods in super modules lookups methods in super modules reports no overload matches 2 reports no overload matches 2 reports no overload matches reports no overload matches types call with global scope types call with global scope types getchar with Char types getchar with Char errors when default value is incompatible with type restriction errors when default value is incompatible with type restriction types a call with an int types a call with an int defines class method defines class method assigns def owner assigns def owner uses free variable uses free variable types putchar with Char types putchar with Char allows recursion with arg allows recursion with arg can't use self in toplevel method can't use self in toplevel method types a call with an argument uses a new scope types a call with an argument uses a new scope errors when default value is incompatible with non-type restriction errors when default value is incompatible with non-type restriction reports block given reports block given fixes bug #165 fixes bug #165 uses free variable as block return type uses free variable as block return type gives correct error for methods in Class (2) gives correct error for methods in Class (2) errors if return type doesn't match on instance method errors if return type doesn't match on instance method types mutual infinite recursion types mutual infinite recursion points error at name (#6937) points error at name (#6937) uses free variable and doesn't conflict with top-level type uses free variable and doesn't conflict with top-level type reports undefined method reports undefined method calls with default argument calls with default argument types a call with an argument types a call with an argument uses free variable with metaclass uses free variable with metaclass gives correct error for methods in Class gives correct error for methods in Class types a call with a float types a call with a float types mutual recursion types mutual recursion is ok if returns Int32? with explicit return is ok if returns Int32? with explicit return errors if return type doesn't match on class method errors if return type doesn't match on class method accesses free var of default argument (#1101) accesses free var of default argument (#1101) 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) Code gen: splat splats on call splats on call splats with default value (2) splats with default value (2) evaluates splat argument just once (#2677) evaluates splat argument just once (#2677) does #2407 does #2407 splats without args splats without args splats splats splats with default value (3) splats with default value (3) splats in initialize splats in initialize splats with another arg splats with another arg splats with default value splats with default value Crystal::CrystalPath doesn't finds "./crystal_path_spec" doesn't finds "./crystal_path_spec" finds "crystal_path_spec" finds "crystal_path_spec" finds "./test_folder/*" finds "./test_folder/*" finds "../**" finds "../**" .expand_paths .expand_paths finds "test_files/yet_another" finds "test_files/yet_another" includes 'lib' by default includes 'lib' by default #each_file_expansion ./foo/bar ./foo/bar foo.cr foo.cr foo/bar/baz foo/bar/baz foo/bar foo/bar foo.cr/bar foo.cr/bar ./foo ./foo foo.cr/bar.cr foo.cr/bar.cr ./foo/bar/baz ./foo/bar/baz foo foo ./foo.cr ./foo.cr overrides path with environment variable overrides path with environment variable finds "foo.cr" finds "foo.cr" finds "test_files/another" finds "test_files/another" finds "../test_folder" finds "../test_folder" doesn't finds "test_files/missing_file.cr" doesn't finds "test_files/missing_file.cr" doesn't finds "test_folder/*" doesn't finds "test_folder/*" doesn't finds "file_two.cr" doesn't finds "file_two.cr" doesn't finds "test_folder/file_three.cr" doesn't finds "test_folder/file_three.cr" finds "./test_folder/file_three.cr" finds "./test_folder/file_three.cr" finds "test_files/file_one" finds "test_files/file_one" finds "test_files/file_four" finds "test_files/file_four" finds "test_files/file_one" finds "test_files/file_one" finds "other_test_files" finds "other_test_files" doesn't finds "../../src/file_three" doesn't finds "../../src/file_three" finds "test_files/file_one.cr" finds "test_files/file_one.cr" finds "test_files/file_three" finds "test_files/file_three" finds "test_files" finds "test_files" doesn't finds "./crystal_path_spec.cr" doesn't finds "./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 "build/reproducible-path/crystal-1.14.0+dfsg/spec/compiler/crystal_path/crystal_path_spec.cr" finds "./file_two.cr" finds "./file_two.cr" doesn't finds "../crystal_path/test_files/file_one" doesn't finds "../crystal_path/test_files/file_one" finds "test_files/*" finds "test_files/*" finds "test_files/**" finds "test_files/**" Code gen: magic constants does __END_LINE__ with block does __END_LINE__ with block does __FILE__ in macro does __FILE__ in macro does __FILE__ does __FILE__ does __DIR__ does __DIR__ does __LINE__ with dispatch does __LINE__ with dispatch does __LINE__ does __LINE__ does __END_LINE__ in macro without block does __END_LINE__ in macro without block 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 __END_LINE__ without block does __END_LINE__ without block does __END_LINE__ in macro with block does __END_LINE__ in macro with block does __LINE__ when specifying one normal default arg does __LINE__ when specifying one normal default arg does __LINE__ when specifying one middle argument does __LINE__ when specifying one middle argument does __LINE__ in macro does __LINE__ in macro Crystal::Doc::MarkdDocRenderer renders links 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 "[foo](http://example.com/foo)" renders "[foo](http://example.com/foo)" renders "[`Foo`](http://example.com/foo)" renders "[`Foo`](http://example.com/foo)" 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```" expand_code_links finds multiple kinds of things finds multiple kinds of things finds operator method with unspecified args finds operator method with unspecified args finds method with args finds method with args finds method with unspecified args finds method with unspecified args finds nested type finds nested type doesn't find parents' methods doesn't find parents' methods doesn't find substrings for methods doesn't find substrings for methods finds types from base finds types from base matches methods on single-character class names matches methods on single-character class names doesn't find method with wrong number of args doesn't find method with wrong number of args finds sibling methods finds sibling methods finds sibling methods finds sibling methods finds absolute type finds absolute type doesn't find wrong kind of sibling methods doesn't find wrong kind of sibling methods finds method with zero args finds method with zero args finds method with question mark finds method with question mark finds method of an absolute type finds method of an absolute type finds sibling methods with self receiver finds sibling methods with self receiver doesn't match with different separator doesn't match with different separator finds multiple methods with brackets finds multiple methods with brackets doesn't find parents' methods doesn't find parents' methods finds types from nested finds types from nested doesn't find wrong kind of methods doesn't find wrong kind of methods finds operator method finds operator method doesn't find type not at word boundary doesn't find type not at word boundary finds methods of a type finds methods of a type finds method with args even with empty brackets finds method with args even with empty brackets doesn't spuriously match range literals doesn't spuriously match range literals doesn't find sibling methods with fake receiver doesn't find sibling methods with fake receiver doesn't find wrong absolute type doesn't find wrong absolute type doesn't find sibling methods of wrong type doesn't find sibling methods of wrong type does not break when referencing lib type (#9928) does not break when referencing lib type (#9928) finds method with exclamation mark finds method with exclamation mark finds constant finds constant doesn't find method with wrong number of args doesn't find method with wrong number of args renders code spans renders "`