Fri Jun 7 03:18:45 UTC 2024 I: starting to build crystal/unstable/amd64 on jenkins on '2024-06-07 03:18' Fri Jun 7 03:18:45 UTC 2024 I: The jenkins build log is/was available at https://jenkins.debian.net/userContent/reproducible/debian/build_service/amd64_5/9607/console.log Fri Jun 7 03:18:45 UTC 2024 I: Downloading source for unstable/crystal=1.12.1+dfsg-1 --2024-06-07 03:18:45-- http://deb.debian.org/debian/pool/main/c/crystal/crystal_1.12.1%2bdfsg-1.dsc Connecting to 46.16.76.132:3128... connected. Proxy request sent, awaiting response... 200 OK Length: 2192 (2.1K) [text/prs.lines.tag] Saving to: ‘crystal_1.12.1+dfsg-1.dsc’ 0K .. 100% 333M=0s 2024-06-07 03:18:45 (333 MB/s) - ‘crystal_1.12.1+dfsg-1.dsc’ saved [2192/2192] Fri Jun 7 03:18:45 UTC 2024 I: crystal_1.12.1+dfsg-1.dsc -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Format: 3.0 (quilt) Source: crystal Binary: crystal, crystal-doc, crystal-samples Architecture: amd64 all Version: 1.12.1+dfsg-1 Maintainer: David Suárez Homepage: https://crystal-lang.org/ Standards-Version: 4.6.2 Vcs-Browser: https://salsa.debian.org/deiv/crystal Vcs-Git: https://salsa.debian.org/deiv/crystal.git Build-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-17, llvm-17-dev, pkgconf, crystal (>= 1.6.0) Package-List: crystal deb devel optional arch=amd64 crystal-doc deb doc optional arch=all crystal-samples deb devel optional arch=all Checksums-Sha1: c8d6678ed184046218b04bb78e70681bc289e395 2444368 crystal_1.12.1+dfsg.orig.tar.xz 3e10f3b3887eee8444b169428b2af30e35a857b9 66756 crystal_1.12.1+dfsg-1.debian.tar.xz Checksums-Sha256: e1489b416a097e7b0fdb0d83f03094323a800297a587d63910921414f744eec4 2444368 crystal_1.12.1+dfsg.orig.tar.xz 60e4b9054ff69d898e52887dda23771b59188c7009fbd6deae202b1a1639f9fa 66756 crystal_1.12.1+dfsg-1.debian.tar.xz Files: d2939cb44c0fd74ffa7b72181e3ac52b 2444368 crystal_1.12.1+dfsg.orig.tar.xz ae45b72207c0997ef2703d71d20aca65 66756 crystal_1.12.1+dfsg-1.debian.tar.xz -----BEGIN PGP SIGNATURE----- iQJEBAEBCAAuFiEExFAZYDOyRoLv5EydfLboPYYFQjoFAmZHq+EQHGRlaXZAZGVi aWFuLm9yZwAKCRB8tug9hgVCOuLpD/0UEmIffnvm5sJ5X05WUBgb1Lkw2ZieWZhD ZGt5dpuJDT0JRgztH/2b/XhDGk3sMfOq/3wG+X6bGYgOje9WJrejLt1AN7MwFnRy KLZXpIjGImObP8M+/CnthE42BJVA8A+HJTLGyN2T57LfKiE4h1dcnhWi6iwZIyLa 6VB6a8f42oWU6dGRgVJwkSmfsgFxjoayoILPZP1fslKKUHxBOef0wM/TMyK5vfNL hF2oYZELkXtdwUVn6sPG7GK1PZP1qOXIWZZysHS9V2uCmq9wzMGNLfEmcPQX811t oRyoWD/f2YJqNgfh2hddSg9sfegp9P9NKpE75ABVIyfMy+IIjmbrEt78Cbq5ZlJE ocSeFhUH5Qe4H88wZB6FT3SzTXTaNGt+qwebkIMf5gFELAvSkJ4iBvFfrB6H2heu Ul2PCRCPLv0b3FES9tYU9weoWKgYgkQJE4ex2AJhwIsw0+GBCnP/ZvEhUvBWJuXu JseTQSzfFnQalmpJLg3fLJg1qMAGt70OUu/mola6b64E5avu0OJ923dhFqykVzq4 8+IxVbtpUlga32lXMuIQBo8tz3pPAUDpIMJYfPdCElXYxDeim6ohY/mCiZE/3LJj F1lnznHKVGIK+HOD4YC2WU30vJbscXzGqYwpJTnzYu80FssEoJ8jwMEMH0Z0j5Vp /iyDpj54Ew== =exbf -----END PGP SIGNATURE----- Fri Jun 7 03:18:45 UTC 2024 I: Checking whether the package is not for us Fri Jun 7 03:18:45 UTC 2024 I: Starting 1st build on remote node ionos11-amd64.debian.net. Fri Jun 7 03:18:45 UTC 2024 I: Preparing to do remote build '1' on ionos11-amd64.debian.net. Fri Jun 7 07:48:06 UTC 2024 I: Deleting $TMPDIR on ionos11-amd64.debian.net. I: pbuilder: network access will be disabled during build I: Current time: Thu Jun 6 15:18:48 -12 2024 I: pbuilder-time-stamp: 1717730328 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.12.1+dfsg-1.dsc] I: copying [./crystal_1.12.1+dfsg.orig.tar.xz] I: copying [./crystal_1.12.1+dfsg-1.debian.tar.xz] I: Extracting source gpgv: Signature made Fri May 17 19:11:29 2024 gpgv: using RSA key C450196033B24682EFE44C9D7CB6E83D8605423A gpgv: issuer "deiv@debian.org" gpgv: Can't check signature: No public key dpkg-source: warning: cannot verify inline signature for ./crystal_1.12.1+dfsg-1.dsc: no acceptable signature found dpkg-source: info: extracting crystal in crystal-1.12.1+dfsg dpkg-source: info: unpacking crystal_1.12.1+dfsg.orig.tar.xz dpkg-source: info: unpacking crystal_1.12.1+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/2757763/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=20 ' DISTRIBUTION='unstable' HOME='/root' HOST_ARCH='amd64' IFS=' ' INVOCATION_ID='0c31639818c34875a6e895a49b5d8fcb' 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='2757763' 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.yRbExdZI/pbuilderrc_UvYD --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.yRbExdZI/b1 --logfile b1/build.log crystal_1.12.1+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://46.16.76.132:3128' I: uname -a Linux ionos11-amd64 6.1.0-21-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64 GNU/Linux I: ls -l /bin lrwxrwxrwx 1 root root 7 Jun 5 07:42 /bin -> usr/bin I: user script /srv/workspace/pbuilder/2757763/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-17, llvm-17-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 ... 19716 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-17; however: Package lld-17 is not installed. pbuilder-satisfydepends-dummy depends on llvm-17-dev; however: Package llvm-17-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} libbsd0{a} libclang-cpp17t64{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} libfile-stripnondeterminism-perl{a} libgc-dev{a} libgc1{a} libgmp-dev{a} libgmpxx4ldbl{a} libgssapi-krb5-2{a} libicu-dev{a} libicu72{a} libjs-codemirror{a} libjs-jquery{a} libk5crypto3{a} libkeyutils1{a} libkrb5-3{a} libkrb5support0{a} libldap-2.5-0{a} libllvm17t64{a} liblzma-dev{a} libmagic-mgc{a} libmagic1t64{a} libmd-dev{a} libncurses-dev{a} libncurses6{a} libnghttp2-14{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.11-minimal{a} libpython3.11-stdlib{a} libreadline8t64{a} librtmp1{a} libsasl2-2{a} libsasl2-modules-db{a} libssh2-1t64{a} libssl-dev{a} libtool{a} libuchardet0{a} libxml2{a} libxml2-dev{a} libyaml-0-2{a} libyaml-dev{a} libz3-4{a} libz3-dev{a} lld-17{a} llvm-17{a} llvm-17-dev{a} llvm-17-linker-tools{a} llvm-17-runtime{a} llvm-17-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-pkg-resources{a} python3-pygments{a} python3-yaml{a} python3.11{a} python3.11-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, 111 newly installed, 0 to remove and 0 not upgraded. Need to get 172 MB of archives. After unpacking 950 MB will be used. Writing extended state information... Get: 1 http://deb.debian.org/debian unstable/main amd64 libpython3.11-minimal amd64 3.11.9-1 [817 kB] Get: 2 http://deb.debian.org/debian unstable/main amd64 libexpat1 amd64 2.6.2-1 [103 kB] Get: 3 http://deb.debian.org/debian unstable/main amd64 python3.11-minimal amd64 3.11.9-1 [1879 kB] Get: 4 http://deb.debian.org/debian unstable/main amd64 python3-minimal amd64 3.11.8-1 [26.3 kB] Get: 5 http://deb.debian.org/debian unstable/main amd64 media-types all 10.1.0 [26.9 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 2024a-4 [255 kB] Get: 8 http://deb.debian.org/debian unstable/main amd64 readline-common all 8.2-4 [69.3 kB] Get: 9 http://deb.debian.org/debian unstable/main amd64 libreadline8t64 amd64 8.2-4 [167 kB] Get: 10 http://deb.debian.org/debian unstable/main amd64 libpython3.11-stdlib amd64 3.11.9-1 [1792 kB] Get: 11 http://deb.debian.org/debian unstable/main amd64 python3.11 amd64 3.11.9-1 [602 kB] Get: 12 http://deb.debian.org/debian unstable/main amd64 libpython3-stdlib amd64 3.11.8-1 [9332 B] Get: 13 http://deb.debian.org/debian unstable/main amd64 python3 amd64 3.11.8-1 [27.4 kB] Get: 14 http://deb.debian.org/debian unstable/main amd64 sensible-utils all 0.0.22 [22.4 kB] Get: 15 http://deb.debian.org/debian unstable/main amd64 libmagic-mgc amd64 1:5.45-3 [314 kB] Get: 16 http://deb.debian.org/debian unstable/main amd64 libmagic1t64 amd64 1:5.45-3 [105 kB] Get: 17 http://deb.debian.org/debian unstable/main amd64 file amd64 1:5.45-3 [42.9 kB] Get: 18 http://deb.debian.org/debian unstable/main amd64 gettext-base amd64 0.21-14+b1 [161 kB] Get: 19 http://deb.debian.org/debian unstable/main amd64 libuchardet0 amd64 0.0.8-1+b1 [68.8 kB] Get: 20 http://deb.debian.org/debian unstable/main amd64 groff-base amd64 1.23.0-4 [1180 kB] Get: 21 http://deb.debian.org/debian unstable/main amd64 bsdextrautils amd64 2.40.1-8.1 [96.2 kB] Get: 22 http://deb.debian.org/debian unstable/main amd64 libpipeline1 amd64 1.5.7-2 [38.0 kB] Get: 23 http://deb.debian.org/debian unstable/main amd64 man-db amd64 2.12.1-2 [1411 kB] Get: 24 http://deb.debian.org/debian unstable/main amd64 m4 amd64 1.4.19-4 [287 kB] Get: 25 http://deb.debian.org/debian unstable/main amd64 autoconf all 2.71-3 [332 kB] Get: 26 http://deb.debian.org/debian unstable/main amd64 autotools-dev all 20220109.1 [51.6 kB] Get: 27 http://deb.debian.org/debian unstable/main amd64 automake all 1:1.16.5-1.3 [823 kB] Get: 28 http://deb.debian.org/debian unstable/main amd64 autopoint all 0.21-14 [496 kB] Get: 29 http://deb.debian.org/debian unstable/main amd64 libevent-2.1-7t64 amd64 2.1.12-stable-10 [181 kB] Get: 30 http://deb.debian.org/debian unstable/main amd64 libgc1 amd64 1:8.2.6-1 [244 kB] Get: 31 http://deb.debian.org/debian unstable/main amd64 libbsd0 amd64 0.12.2-1 [131 kB] Get: 32 http://deb.debian.org/debian unstable/main amd64 libedit2 amd64 3.1-20240517-1 [93.3 kB] Get: 33 http://deb.debian.org/debian unstable/main amd64 libicu72 amd64 72.1-4+b1 [9395 kB] Get: 34 http://deb.debian.org/debian unstable/main amd64 libxml2 amd64 2.12.7+dfsg-3 [670 kB] Get: 35 http://deb.debian.org/debian unstable/main amd64 libz3-4 amd64 4.8.12-3.1+b2 [7346 kB] Get: 36 http://deb.debian.org/debian unstable/main amd64 libllvm17t64 amd64 1:17.0.6-12 [23.7 MB] Get: 37 http://deb.debian.org/debian unstable/main amd64 libgc-dev amd64 1:8.2.6-1 [410 kB] Get: 38 http://deb.debian.org/debian unstable/main amd64 libpkgconf3 amd64 1.8.1-1+b2 [36.4 kB] Get: 39 http://deb.debian.org/debian unstable/main amd64 pkgconf-bin amd64 1.8.1-1+b2 [29.7 kB] Get: 40 http://deb.debian.org/debian unstable/main amd64 pkgconf amd64 1.8.1-1+b2 [26.2 kB] Get: 41 http://deb.debian.org/debian unstable/main amd64 libpcre2-16-0 amd64 10.42-4+b1 [246 kB] Get: 42 http://deb.debian.org/debian unstable/main amd64 libpcre2-32-0 amd64 10.42-4+b1 [234 kB] Get: 43 http://deb.debian.org/debian unstable/main amd64 libpcre2-posix3 amd64 10.42-4+b1 [55.8 kB] Get: 44 http://deb.debian.org/debian unstable/main amd64 libpcre2-dev amd64 10.42-4+b1 [755 kB] Get: 45 http://deb.debian.org/debian unstable/main amd64 libevent-core-2.1-7t64 amd64 2.1.12-stable-10 [131 kB] Get: 46 http://deb.debian.org/debian unstable/main amd64 libevent-extra-2.1-7t64 amd64 2.1.12-stable-10 [107 kB] Get: 47 http://deb.debian.org/debian unstable/main amd64 libevent-pthreads-2.1-7t64 amd64 2.1.12-stable-10 [53.9 kB] Get: 48 http://deb.debian.org/debian unstable/main amd64 libevent-openssl-2.1-7t64 amd64 2.1.12-stable-10 [60.8 kB] Get: 49 http://deb.debian.org/debian unstable/main amd64 libevent-dev amd64 2.1.12-stable-10 [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.12.1+dfsg-1 [4314 kB] Get: 53 http://deb.debian.org/debian unstable/main amd64 libdebhelper-perl all 13.15.3 [88.0 kB] Get: 54 http://deb.debian.org/debian unstable/main amd64 libtool all 2.4.7-7 [517 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.0-1 [19.5 kB] Get: 58 http://deb.debian.org/debian unstable/main amd64 dh-strip-nondeterminism all 1.14.0-1 [8448 B] Get: 59 http://deb.debian.org/debian unstable/main amd64 libelf1t64 amd64 0.191-1+b1 [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 gettext amd64 0.21-14+b1 [1301 kB] Get: 62 http://deb.debian.org/debian unstable/main amd64 intltool-debian all 0.35.0+20060710.6 [22.9 kB] Get: 63 http://deb.debian.org/debian unstable/main amd64 po-debconf all 1.0.21+nmu1 [248 kB] Get: 64 http://deb.debian.org/debian unstable/main amd64 debhelper all 13.15.3 [901 kB] Get: 65 http://deb.debian.org/debian unstable/main amd64 libbrotli1 amd64 1.1.0-2+b3 [305 kB] Get: 66 http://deb.debian.org/debian unstable/main amd64 libkrb5support0 amd64 1.20.1-6+b1 [33.3 kB] Get: 67 http://deb.debian.org/debian unstable/main amd64 libcom-err2 amd64 1.47.1-1 [22.9 kB] Get: 68 http://deb.debian.org/debian unstable/main amd64 libk5crypto3 amd64 1.20.1-6+b1 [79.8 kB] Get: 69 http://deb.debian.org/debian unstable/main amd64 libkeyutils1 amd64 1.6.3-3 [8952 B] Get: 70 http://deb.debian.org/debian unstable/main amd64 libkrb5-3 amd64 1.20.1-6+b1 [333 kB] Get: 71 http://deb.debian.org/debian unstable/main amd64 libgssapi-krb5-2 amd64 1.20.1-6+b1 [135 kB] Get: 72 http://deb.debian.org/debian unstable/main amd64 libsasl2-modules-db amd64 2.1.28+dfsg1-6 [19.5 kB] Get: 73 http://deb.debian.org/debian unstable/main amd64 libsasl2-2 amd64 2.1.28+dfsg1-6 [56.9 kB] Get: 74 http://deb.debian.org/debian unstable/main amd64 libldap-2.5-0 amd64 2.5.17+dfsg-1 [186 kB] Get: 75 http://deb.debian.org/debian unstable/main amd64 libnghttp2-14 amd64 1.61.0-1+b1 [75.6 kB] Get: 76 http://deb.debian.org/debian unstable/main amd64 libpsl5t64 amd64 0.21.2-1.1 [56.8 kB] Get: 77 http://deb.debian.org/debian unstable/main amd64 librtmp1 amd64 2.4+20151223.gitfa8646d.1-2+b4 [58.5 kB] Get: 78 http://deb.debian.org/debian unstable/main amd64 libssh2-1t64 amd64 1.11.0-5 [215 kB] Get: 79 http://deb.debian.org/debian unstable/main amd64 libcurl3t64-gnutls amd64 8.8.0-1 [434 kB] Get: 80 http://deb.debian.org/debian unstable/main amd64 liberror-perl all 0.17029-2 [29.0 kB] Get: 81 http://deb.debian.org/debian unstable/main amd64 git-man all 1:2.45.1-1 [2157 kB] Get: 82 http://deb.debian.org/debian unstable/main amd64 git amd64 1:2.45.1-1 [8649 kB] Get: 83 http://deb.debian.org/debian unstable/main amd64 icu-devtools amd64 72.1-4+b1 [208 kB] Get: 84 http://deb.debian.org/debian unstable/main amd64 libmd-dev amd64 1.1.0-2 [54.9 kB] Get: 85 http://deb.debian.org/debian unstable/main amd64 libbsd-dev amd64 0.12.2-1 [258 kB] Get: 86 http://deb.debian.org/debian unstable/main amd64 libclang-cpp17t64 amd64 1:17.0.6-12 [11.8 MB] Get: 87 http://deb.debian.org/debian unstable/main amd64 libcurl4t64 amd64 8.8.0-1 [441 kB] Get: 88 http://deb.debian.org/debian unstable/main amd64 libncurses6 amd64 6.5-2 [104 kB] Get: 89 http://deb.debian.org/debian unstable/main amd64 libncurses-dev amd64 6.5-2 [349 kB] Get: 90 http://deb.debian.org/debian unstable/main amd64 libedit-dev amd64 3.1-20240517-1 [114 kB] Get: 91 http://deb.debian.org/debian unstable/main amd64 libffi-dev amd64 3.4.6-1 [60.6 kB] Get: 92 http://deb.debian.org/debian unstable/main amd64 libgmpxx4ldbl amd64 2:6.3.0+dfsg-2+b1 [329 kB] Get: 93 http://deb.debian.org/debian unstable/main amd64 libgmp-dev amd64 2:6.3.0+dfsg-2+b1 [640 kB] Get: 94 http://deb.debian.org/debian unstable/main amd64 libicu-dev amd64 72.1-4+b1 [10.4 MB] Get: 95 http://deb.debian.org/debian unstable/main amd64 liblzma-dev amd64 5.6.1+really5.4.5-1 [293 kB] Get: 96 http://deb.debian.org/debian unstable/main amd64 libpfm4 amd64 4.13.0+git32-g0d4ed0e-1 [341 kB] Get: 97 http://deb.debian.org/debian unstable/main amd64 libssl-dev amd64 3.2.2-1 [2701 kB] Get: 98 http://deb.debian.org/debian unstable/main amd64 zlib1g-dev amd64 1:1.3.dfsg+really1.3.1-1 [919 kB] Get: 99 http://deb.debian.org/debian unstable/main amd64 libxml2-dev amd64 2.12.7+dfsg-3 [145 kB] Get: 100 http://deb.debian.org/debian unstable/main amd64 libyaml-0-2 amd64 0.2.5-1+b1 [52.6 kB] Get: 101 http://deb.debian.org/debian unstable/main amd64 libyaml-dev amd64 0.2.5-1+b1 [63.2 kB] Get: 102 http://deb.debian.org/debian unstable/main amd64 libz3-dev amd64 4.8.12-3.1+b2 [90.9 kB] Get: 103 http://deb.debian.org/debian unstable/main amd64 lld-17 amd64 1:17.0.6-12 [1248 kB] Get: 104 http://deb.debian.org/debian unstable/main amd64 llvm-17-runtime amd64 1:17.0.6-12 [525 kB] Get: 105 http://deb.debian.org/debian unstable/main amd64 llvm-17-linker-tools amd64 1:17.0.6-12 [1250 kB] Get: 106 http://deb.debian.org/debian unstable/main amd64 llvm-17 amd64 1:17.0.6-12 [21.6 MB] Get: 107 http://deb.debian.org/debian unstable/main amd64 python3-pkg-resources all 68.1.2-2 [241 kB] Get: 108 http://deb.debian.org/debian unstable/main amd64 python3-pygments all 2.17.2+dfsg-1 [818 kB] Get: 109 http://deb.debian.org/debian unstable/main amd64 python3-yaml amd64 6.0.1-2 [177 kB] Get: 110 http://deb.debian.org/debian unstable/main amd64 llvm-17-tools amd64 1:17.0.6-12 [489 kB] Get: 111 http://deb.debian.org/debian unstable/main amd64 llvm-17-dev amd64 1:17.0.6-12 [38.8 MB] Fetched 172 MB in 6s (28.8 MB/s) debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package libpython3.11-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 ... 19716 files and directories currently installed.) Preparing to unpack .../libpython3.11-minimal_3.11.9-1_amd64.deb ... Unpacking libpython3.11-minimal:amd64 (3.11.9-1) ... Selecting previously unselected package libexpat1:amd64. Preparing to unpack .../libexpat1_2.6.2-1_amd64.deb ... Unpacking libexpat1:amd64 (2.6.2-1) ... Selecting previously unselected package python3.11-minimal. Preparing to unpack .../python3.11-minimal_3.11.9-1_amd64.deb ... Unpacking python3.11-minimal (3.11.9-1) ... Setting up libpython3.11-minimal:amd64 (3.11.9-1) ... Setting up libexpat1:amd64 (2.6.2-1) ... Setting up python3.11-minimal (3.11.9-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 ... 20032 files and directories currently installed.) Preparing to unpack .../0-python3-minimal_3.11.8-1_amd64.deb ... Unpacking python3-minimal (3.11.8-1) ... Selecting previously unselected package media-types. Preparing to unpack .../1-media-types_10.1.0_all.deb ... Unpacking media-types (10.1.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_2024a-4_all.deb ... Unpacking tzdata (2024a-4) ... Selecting previously unselected package readline-common. Preparing to unpack .../4-readline-common_8.2-4_all.deb ... Unpacking readline-common (8.2-4) ... Selecting previously unselected package libreadline8t64:amd64. Preparing to unpack .../5-libreadline8t64_8.2-4_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-4) ... Selecting previously unselected package libpython3.11-stdlib:amd64. Preparing to unpack .../6-libpython3.11-stdlib_3.11.9-1_amd64.deb ... Unpacking libpython3.11-stdlib:amd64 (3.11.9-1) ... Selecting previously unselected package python3.11. Preparing to unpack .../7-python3.11_3.11.9-1_amd64.deb ... Unpacking python3.11 (3.11.9-1) ... Selecting previously unselected package libpython3-stdlib:amd64. Preparing to unpack .../8-libpython3-stdlib_3.11.8-1_amd64.deb ... Unpacking libpython3-stdlib:amd64 (3.11.8-1) ... Setting up python3-minimal (3.11.8-1) ... 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 ... 21024 files and directories currently installed.) Preparing to unpack .../00-python3_3.11.8-1_amd64.deb ... Unpacking python3 (3.11.8-1) ... Selecting previously unselected package sensible-utils. Preparing to unpack .../01-sensible-utils_0.0.22_all.deb ... Unpacking sensible-utils (0.0.22) ... Selecting previously unselected package libmagic-mgc. Preparing to unpack .../02-libmagic-mgc_1%3a5.45-3_amd64.deb ... Unpacking libmagic-mgc (1:5.45-3) ... Selecting previously unselected package libmagic1t64:amd64. Preparing to unpack .../03-libmagic1t64_1%3a5.45-3_amd64.deb ... Unpacking libmagic1t64:amd64 (1:5.45-3) ... Selecting previously unselected package file. Preparing to unpack .../04-file_1%3a5.45-3_amd64.deb ... Unpacking file (1:5.45-3) ... Selecting previously unselected package gettext-base. Preparing to unpack .../05-gettext-base_0.21-14+b1_amd64.deb ... Unpacking gettext-base (0.21-14+b1) ... Selecting previously unselected package libuchardet0:amd64. Preparing to unpack .../06-libuchardet0_0.0.8-1+b1_amd64.deb ... Unpacking libuchardet0:amd64 (0.0.8-1+b1) ... Selecting previously unselected package groff-base. Preparing to unpack .../07-groff-base_1.23.0-4_amd64.deb ... Unpacking groff-base (1.23.0-4) ... Selecting previously unselected package bsdextrautils. Preparing to unpack .../08-bsdextrautils_2.40.1-8.1_amd64.deb ... Unpacking bsdextrautils (2.40.1-8.1) ... Selecting previously unselected package libpipeline1:amd64. Preparing to unpack .../09-libpipeline1_1.5.7-2_amd64.deb ... Unpacking libpipeline1:amd64 (1.5.7-2) ... Selecting previously unselected package man-db. Preparing to unpack .../10-man-db_2.12.1-2_amd64.deb ... Unpacking man-db (2.12.1-2) ... Selecting previously unselected package m4. Preparing to unpack .../11-m4_1.4.19-4_amd64.deb ... Unpacking m4 (1.4.19-4) ... Selecting previously unselected package autoconf. Preparing to unpack .../12-autoconf_2.71-3_all.deb ... Unpacking autoconf (2.71-3) ... Selecting previously unselected package autotools-dev. Preparing to unpack .../13-autotools-dev_20220109.1_all.deb ... Unpacking autotools-dev (20220109.1) ... Selecting previously unselected package automake. Preparing to unpack .../14-automake_1%3a1.16.5-1.3_all.deb ... Unpacking automake (1:1.16.5-1.3) ... Selecting previously unselected package autopoint. Preparing to unpack .../15-autopoint_0.21-14_all.deb ... Unpacking autopoint (0.21-14) ... Selecting previously unselected package libevent-2.1-7t64:amd64. Preparing to unpack .../16-libevent-2.1-7t64_2.1.12-stable-10_amd64.deb ... Unpacking libevent-2.1-7t64:amd64 (2.1.12-stable-10) ... Selecting previously unselected package libgc1:amd64. Preparing to unpack .../17-libgc1_1%3a8.2.6-1_amd64.deb ... Unpacking libgc1:amd64 (1:8.2.6-1) ... Selecting previously unselected package libbsd0:amd64. Preparing to unpack .../18-libbsd0_0.12.2-1_amd64.deb ... Unpacking libbsd0:amd64 (0.12.2-1) ... Selecting previously unselected package libedit2:amd64. Preparing to unpack .../19-libedit2_3.1-20240517-1_amd64.deb ... Unpacking libedit2:amd64 (3.1-20240517-1) ... Selecting previously unselected package libicu72:amd64. Preparing to unpack .../20-libicu72_72.1-4+b1_amd64.deb ... Unpacking libicu72:amd64 (72.1-4+b1) ... Selecting previously unselected package libxml2:amd64. Preparing to unpack .../21-libxml2_2.12.7+dfsg-3_amd64.deb ... Unpacking libxml2:amd64 (2.12.7+dfsg-3) ... Selecting previously unselected package libz3-4:amd64. Preparing to unpack .../22-libz3-4_4.8.12-3.1+b2_amd64.deb ... Unpacking libz3-4:amd64 (4.8.12-3.1+b2) ... Selecting previously unselected package libllvm17t64:amd64. Preparing to unpack .../23-libllvm17t64_1%3a17.0.6-12_amd64.deb ... Unpacking libllvm17t64:amd64 (1:17.0.6-12) ... Selecting previously unselected package libgc-dev:amd64. Preparing to unpack .../24-libgc-dev_1%3a8.2.6-1_amd64.deb ... Unpacking libgc-dev:amd64 (1:8.2.6-1) ... Selecting previously unselected package libpkgconf3:amd64. Preparing to unpack .../25-libpkgconf3_1.8.1-1+b2_amd64.deb ... Unpacking libpkgconf3:amd64 (1.8.1-1+b2) ... Selecting previously unselected package pkgconf-bin. Preparing to unpack .../26-pkgconf-bin_1.8.1-1+b2_amd64.deb ... Unpacking pkgconf-bin (1.8.1-1+b2) ... Selecting previously unselected package pkgconf:amd64. Preparing to unpack .../27-pkgconf_1.8.1-1+b2_amd64.deb ... Unpacking pkgconf:amd64 (1.8.1-1+b2) ... Selecting previously unselected package libpcre2-16-0:amd64. Preparing to unpack .../28-libpcre2-16-0_10.42-4+b1_amd64.deb ... Unpacking libpcre2-16-0:amd64 (10.42-4+b1) ... Selecting previously unselected package libpcre2-32-0:amd64. Preparing to unpack .../29-libpcre2-32-0_10.42-4+b1_amd64.deb ... Unpacking libpcre2-32-0:amd64 (10.42-4+b1) ... Selecting previously unselected package libpcre2-posix3:amd64. Preparing to unpack .../30-libpcre2-posix3_10.42-4+b1_amd64.deb ... Unpacking libpcre2-posix3:amd64 (10.42-4+b1) ... Selecting previously unselected package libpcre2-dev:amd64. Preparing to unpack .../31-libpcre2-dev_10.42-4+b1_amd64.deb ... Unpacking libpcre2-dev:amd64 (10.42-4+b1) ... Selecting previously unselected package libevent-core-2.1-7t64:amd64. Preparing to unpack .../32-libevent-core-2.1-7t64_2.1.12-stable-10_amd64.deb ... Unpacking libevent-core-2.1-7t64:amd64 (2.1.12-stable-10) ... Selecting previously unselected package libevent-extra-2.1-7t64:amd64. Preparing to unpack .../33-libevent-extra-2.1-7t64_2.1.12-stable-10_amd64.deb ... Unpacking libevent-extra-2.1-7t64:amd64 (2.1.12-stable-10) ... Selecting previously unselected package libevent-pthreads-2.1-7t64:amd64. Preparing to unpack .../34-libevent-pthreads-2.1-7t64_2.1.12-stable-10_amd64.deb ... Unpacking libevent-pthreads-2.1-7t64:amd64 (2.1.12-stable-10) ... Selecting previously unselected package libevent-openssl-2.1-7t64:amd64. Preparing to unpack .../35-libevent-openssl-2.1-7t64_2.1.12-stable-10_amd64.deb ... Unpacking libevent-openssl-2.1-7t64:amd64 (2.1.12-stable-10) ... Selecting previously unselected package libevent-dev. Preparing to unpack .../36-libevent-dev_2.1.12-stable-10_amd64.deb ... Unpacking libevent-dev (2.1.12-stable-10) ... Selecting previously unselected package libjs-codemirror. Preparing to unpack .../37-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 .../38-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 .../39-crystal_1.12.1+dfsg-1_amd64.deb ... Unpacking crystal (1.12.1+dfsg-1) ... Selecting previously unselected package libdebhelper-perl. Preparing to unpack .../40-libdebhelper-perl_13.15.3_all.deb ... Unpacking libdebhelper-perl (13.15.3) ... Selecting previously unselected package libtool. Preparing to unpack .../41-libtool_2.4.7-7_all.deb ... Unpacking libtool (2.4.7-7) ... Selecting previously unselected package dh-autoreconf. Preparing to unpack .../42-dh-autoreconf_20_all.deb ... Unpacking dh-autoreconf (20) ... Selecting previously unselected package libarchive-zip-perl. Preparing to unpack .../43-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 .../44-libfile-stripnondeterminism-perl_1.14.0-1_all.deb ... Unpacking libfile-stripnondeterminism-perl (1.14.0-1) ... Selecting previously unselected package dh-strip-nondeterminism. Preparing to unpack .../45-dh-strip-nondeterminism_1.14.0-1_all.deb ... Unpacking dh-strip-nondeterminism (1.14.0-1) ... Selecting previously unselected package libelf1t64:amd64. Preparing to unpack .../46-libelf1t64_0.191-1+b1_amd64.deb ... Unpacking libelf1t64:amd64 (0.191-1+b1) ... Selecting previously unselected package dwz. Preparing to unpack .../47-dwz_0.15-1+b1_amd64.deb ... Unpacking dwz (0.15-1+b1) ... Selecting previously unselected package gettext. Preparing to unpack .../48-gettext_0.21-14+b1_amd64.deb ... Unpacking gettext (0.21-14+b1) ... Selecting previously unselected package intltool-debian. Preparing to unpack .../49-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 .../50-po-debconf_1.0.21+nmu1_all.deb ... Unpacking po-debconf (1.0.21+nmu1) ... Selecting previously unselected package debhelper. Preparing to unpack .../51-debhelper_13.15.3_all.deb ... Unpacking debhelper (13.15.3) ... Selecting previously unselected package libbrotli1:amd64. Preparing to unpack .../52-libbrotli1_1.1.0-2+b3_amd64.deb ... Unpacking libbrotli1:amd64 (1.1.0-2+b3) ... Selecting previously unselected package libkrb5support0:amd64. Preparing to unpack .../53-libkrb5support0_1.20.1-6+b1_amd64.deb ... Unpacking libkrb5support0:amd64 (1.20.1-6+b1) ... Selecting previously unselected package libcom-err2:amd64. Preparing to unpack .../54-libcom-err2_1.47.1-1_amd64.deb ... Unpacking libcom-err2:amd64 (1.47.1-1) ... Selecting previously unselected package libk5crypto3:amd64. Preparing to unpack .../55-libk5crypto3_1.20.1-6+b1_amd64.deb ... Unpacking libk5crypto3:amd64 (1.20.1-6+b1) ... Selecting previously unselected package libkeyutils1:amd64. Preparing to unpack .../56-libkeyutils1_1.6.3-3_amd64.deb ... Unpacking libkeyutils1:amd64 (1.6.3-3) ... Selecting previously unselected package libkrb5-3:amd64. Preparing to unpack .../57-libkrb5-3_1.20.1-6+b1_amd64.deb ... Unpacking libkrb5-3:amd64 (1.20.1-6+b1) ... Selecting previously unselected package libgssapi-krb5-2:amd64. Preparing to unpack .../58-libgssapi-krb5-2_1.20.1-6+b1_amd64.deb ... Unpacking libgssapi-krb5-2:amd64 (1.20.1-6+b1) ... Selecting previously unselected package libsasl2-modules-db:amd64. Preparing to unpack .../59-libsasl2-modules-db_2.1.28+dfsg1-6_amd64.deb ... Unpacking libsasl2-modules-db:amd64 (2.1.28+dfsg1-6) ... Selecting previously unselected package libsasl2-2:amd64. Preparing to unpack .../60-libsasl2-2_2.1.28+dfsg1-6_amd64.deb ... Unpacking libsasl2-2:amd64 (2.1.28+dfsg1-6) ... Selecting previously unselected package libldap-2.5-0:amd64. Preparing to unpack .../61-libldap-2.5-0_2.5.17+dfsg-1_amd64.deb ... Unpacking libldap-2.5-0:amd64 (2.5.17+dfsg-1) ... Selecting previously unselected package libnghttp2-14:amd64. Preparing to unpack .../62-libnghttp2-14_1.61.0-1+b1_amd64.deb ... Unpacking libnghttp2-14:amd64 (1.61.0-1+b1) ... Selecting previously unselected package libpsl5t64:amd64. Preparing to unpack .../63-libpsl5t64_0.21.2-1.1_amd64.deb ... Unpacking libpsl5t64:amd64 (0.21.2-1.1) ... Selecting previously unselected package librtmp1:amd64. Preparing to unpack .../64-librtmp1_2.4+20151223.gitfa8646d.1-2+b4_amd64.deb ... Unpacking librtmp1:amd64 (2.4+20151223.gitfa8646d.1-2+b4) ... Selecting previously unselected package libssh2-1t64:amd64. Preparing to unpack .../65-libssh2-1t64_1.11.0-5_amd64.deb ... Unpacking libssh2-1t64:amd64 (1.11.0-5) ... Selecting previously unselected package libcurl3t64-gnutls:amd64. Preparing to unpack .../66-libcurl3t64-gnutls_8.8.0-1_amd64.deb ... Unpacking libcurl3t64-gnutls:amd64 (8.8.0-1) ... Selecting previously unselected package liberror-perl. Preparing to unpack .../67-liberror-perl_0.17029-2_all.deb ... Unpacking liberror-perl (0.17029-2) ... Selecting previously unselected package git-man. Preparing to unpack .../68-git-man_1%3a2.45.1-1_all.deb ... Unpacking git-man (1:2.45.1-1) ... Selecting previously unselected package git. Preparing to unpack .../69-git_1%3a2.45.1-1_amd64.deb ... Unpacking git (1:2.45.1-1) ... Selecting previously unselected package icu-devtools. Preparing to unpack .../70-icu-devtools_72.1-4+b1_amd64.deb ... Unpacking icu-devtools (72.1-4+b1) ... Selecting previously unselected package libmd-dev:amd64. Preparing to unpack .../71-libmd-dev_1.1.0-2_amd64.deb ... Unpacking libmd-dev:amd64 (1.1.0-2) ... Selecting previously unselected package libbsd-dev:amd64. Preparing to unpack .../72-libbsd-dev_0.12.2-1_amd64.deb ... Unpacking libbsd-dev:amd64 (0.12.2-1) ... Selecting previously unselected package libclang-cpp17t64. Preparing to unpack .../73-libclang-cpp17t64_1%3a17.0.6-12_amd64.deb ... Unpacking libclang-cpp17t64 (1:17.0.6-12) ... Selecting previously unselected package libcurl4t64:amd64. Preparing to unpack .../74-libcurl4t64_8.8.0-1_amd64.deb ... Unpacking libcurl4t64:amd64 (8.8.0-1) ... Selecting previously unselected package libncurses6:amd64. Preparing to unpack .../75-libncurses6_6.5-2_amd64.deb ... Unpacking libncurses6:amd64 (6.5-2) ... Selecting previously unselected package libncurses-dev:amd64. Preparing to unpack .../76-libncurses-dev_6.5-2_amd64.deb ... Unpacking libncurses-dev:amd64 (6.5-2) ... Selecting previously unselected package libedit-dev:amd64. Preparing to unpack .../77-libedit-dev_3.1-20240517-1_amd64.deb ... Unpacking libedit-dev:amd64 (3.1-20240517-1) ... Selecting previously unselected package libffi-dev:amd64. Preparing to unpack .../78-libffi-dev_3.4.6-1_amd64.deb ... Unpacking libffi-dev:amd64 (3.4.6-1) ... Selecting previously unselected package libgmpxx4ldbl:amd64. Preparing to unpack .../79-libgmpxx4ldbl_2%3a6.3.0+dfsg-2+b1_amd64.deb ... Unpacking libgmpxx4ldbl:amd64 (2:6.3.0+dfsg-2+b1) ... Selecting previously unselected package libgmp-dev:amd64. Preparing to unpack .../80-libgmp-dev_2%3a6.3.0+dfsg-2+b1_amd64.deb ... Unpacking libgmp-dev:amd64 (2:6.3.0+dfsg-2+b1) ... Selecting previously unselected package libicu-dev:amd64. Preparing to unpack .../81-libicu-dev_72.1-4+b1_amd64.deb ... Unpacking libicu-dev:amd64 (72.1-4+b1) ... Selecting previously unselected package liblzma-dev:amd64. Preparing to unpack .../82-liblzma-dev_5.6.1+really5.4.5-1_amd64.deb ... Unpacking liblzma-dev:amd64 (5.6.1+really5.4.5-1) ... Selecting previously unselected package libpfm4:amd64. Preparing to unpack .../83-libpfm4_4.13.0+git32-g0d4ed0e-1_amd64.deb ... Unpacking libpfm4:amd64 (4.13.0+git32-g0d4ed0e-1) ... Selecting previously unselected package libssl-dev:amd64. Preparing to unpack .../84-libssl-dev_3.2.2-1_amd64.deb ... Unpacking libssl-dev:amd64 (3.2.2-1) ... Selecting previously unselected package zlib1g-dev:amd64. Preparing to unpack .../85-zlib1g-dev_1%3a1.3.dfsg+really1.3.1-1_amd64.deb ... Unpacking zlib1g-dev:amd64 (1:1.3.dfsg+really1.3.1-1) ... Selecting previously unselected package libxml2-dev:amd64. Preparing to unpack .../86-libxml2-dev_2.12.7+dfsg-3_amd64.deb ... Unpacking libxml2-dev:amd64 (2.12.7+dfsg-3) ... Selecting previously unselected package libyaml-0-2:amd64. Preparing to unpack .../87-libyaml-0-2_0.2.5-1+b1_amd64.deb ... Unpacking libyaml-0-2:amd64 (0.2.5-1+b1) ... Selecting previously unselected package libyaml-dev:amd64. Preparing to unpack .../88-libyaml-dev_0.2.5-1+b1_amd64.deb ... Unpacking libyaml-dev:amd64 (0.2.5-1+b1) ... Selecting previously unselected package libz3-dev:amd64. Preparing to unpack .../89-libz3-dev_4.8.12-3.1+b2_amd64.deb ... Unpacking libz3-dev:amd64 (4.8.12-3.1+b2) ... Selecting previously unselected package lld-17. Preparing to unpack .../90-lld-17_1%3a17.0.6-12_amd64.deb ... Unpacking lld-17 (1:17.0.6-12) ... Selecting previously unselected package llvm-17-runtime. Preparing to unpack .../91-llvm-17-runtime_1%3a17.0.6-12_amd64.deb ... Unpacking llvm-17-runtime (1:17.0.6-12) ... Selecting previously unselected package llvm-17-linker-tools. Preparing to unpack .../92-llvm-17-linker-tools_1%3a17.0.6-12_amd64.deb ... Unpacking llvm-17-linker-tools (1:17.0.6-12) ... Selecting previously unselected package llvm-17. Preparing to unpack .../93-llvm-17_1%3a17.0.6-12_amd64.deb ... Unpacking llvm-17 (1:17.0.6-12) ... Selecting previously unselected package python3-pkg-resources. Preparing to unpack .../94-python3-pkg-resources_68.1.2-2_all.deb ... Unpacking python3-pkg-resources (68.1.2-2) ... Selecting previously unselected package python3-pygments. Preparing to unpack .../95-python3-pygments_2.17.2+dfsg-1_all.deb ... Unpacking python3-pygments (2.17.2+dfsg-1) ... Selecting previously unselected package python3-yaml. Preparing to unpack .../96-python3-yaml_6.0.1-2_amd64.deb ... Unpacking python3-yaml (6.0.1-2) ... Selecting previously unselected package llvm-17-tools. Preparing to unpack .../97-llvm-17-tools_1%3a17.0.6-12_amd64.deb ... Unpacking llvm-17-tools (1:17.0.6-12) ... Selecting previously unselected package llvm-17-dev. Preparing to unpack .../98-llvm-17-dev_1%3a17.0.6-12_amd64.deb ... Unpacking llvm-17-dev (1:17.0.6-12) ... Setting up media-types (10.1.0) ... Setting up libpipeline1:amd64 (1.5.7-2) ... Setting up libkeyutils1:amd64 (1.6.3-3) ... Setting up libicu72:amd64 (72.1-4+b1) ... Setting up bsdextrautils (2.40.1-8.1) ... Setting up libmagic-mgc (1:5.45-3) ... Setting up libarchive-zip-perl (1.68-1) ... Setting up libyaml-0-2:amd64 (0.2.5-1+b1) ... Setting up libdebhelper-perl (13.15.3) ... Setting up libbrotli1:amd64 (1.1.0-2+b3) ... Setting up libmagic1t64:amd64 (1:5.45-3) ... Setting up libpsl5t64:amd64 (0.21.2-1.1) ... Setting up libnghttp2-14:amd64 (1.61.0-1+b1) ... Setting up gettext-base (0.21-14+b1) ... Setting up m4 (1.4.19-4) ... Setting up libevent-2.1-7t64:amd64 (2.1.12-stable-10) ... Setting up libcom-err2:amd64 (1.47.1-1) ... Setting up file (1:5.45-3) ... Setting up libffi-dev:amd64 (3.4.6-1) ... Setting up libpcre2-16-0:amd64 (10.42-4+b1) ... Setting up libelf1t64:amd64 (0.191-1+b1) ... Setting up libkrb5support0:amd64 (1.20.1-6+b1) ... Setting up libsasl2-modules-db:amd64 (2.1.28+dfsg1-6) ... Setting up tzdata (2024a-4) ... Current default time zone: 'Etc/UTC' Local time is now: Fri Jun 7 03:21:27 UTC 2024. Universal Time is now: Fri Jun 7 03:21:27 UTC 2024. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up liberror-perl (0.17029-2) ... Setting up autotools-dev (20220109.1) ... Setting up libz3-4:amd64 (4.8.12-3.1+b2) ... Setting up libpcre2-32-0:amd64 (10.42-4+b1) ... Setting up libpkgconf3:amd64 (1.8.1-1+b2) ... Setting up libgmpxx4ldbl:amd64 (2:6.3.0+dfsg-2+b1) ... Setting up libpfm4:amd64 (4.13.0+git32-g0d4ed0e-1) ... Setting up librtmp1:amd64 (2.4+20151223.gitfa8646d.1-2+b4) ... Setting up libncurses6:amd64 (6.5-2) ... Setting up libjs-codemirror (5.65.0+~cs5.83.9-3) ... Setting up libssl-dev:amd64 (3.2.2-1) ... Setting up autopoint (0.21-14) ... Setting up icu-devtools (72.1-4+b1) ... Setting up pkgconf-bin (1.8.1-1+b2) ... Setting up libk5crypto3:amd64 (1.20.1-6+b1) ... Setting up libgc1:amd64 (1:8.2.6-1) ... Setting up libsasl2-2:amd64 (2.1.28+dfsg1-6) ... Setting up autoconf (2.71-3) ... Setting up liblzma-dev:amd64 (5.6.1+really5.4.5-1) ... Setting up zlib1g-dev:amd64 (1:1.3.dfsg+really1.3.1-1) ... Setting up libpcre2-posix3:amd64 (10.42-4+b1) ... Setting up dwz (0.15-1+b1) ... Setting up sensible-utils (0.0.22) ... Setting up libuchardet0:amd64 (0.0.8-1+b1) ... Setting up libmd-dev:amd64 (1.1.0-2) ... Setting up git-man (1:2.45.1-1) ... Setting up netbase (6.4) ... Setting up libkrb5-3:amd64 (1.20.1-6+b1) ... Setting up libevent-core-2.1-7t64:amd64 (2.1.12-stable-10) ... Setting up libssh2-1t64:amd64 (1.11.0-5) ... Setting up libjs-jquery (3.6.1+dfsg+~3.5.14-1) ... Setting up libgc-dev:amd64 (1:8.2.6-1) ... Setting up libbsd0:amd64 (0.12.2-1) ... Setting up readline-common (8.2-4) ... Setting up libicu-dev:amd64 (72.1-4+b1) ... Setting up libxml2:amd64 (2.12.7+dfsg-3) ... Setting up libbsd-dev:amd64 (0.12.2-1) ... Setting up automake (1:1.16.5-1.3) ... update-alternatives: using /usr/bin/automake-1.16 to provide /usr/bin/automake (automake) in auto mode Setting up libfile-stripnondeterminism-perl (1.14.0-1) ... Setting up libz3-dev:amd64 (4.8.12-3.1+b2) ... Setting up libncurses-dev:amd64 (6.5-2) ... Setting up gettext (0.21-14+b1) ... Setting up libgmp-dev:amd64 (2:6.3.0+dfsg-2+b1) ... Setting up libpcre2-dev:amd64 (10.42-4+b1) ... Setting up libyaml-dev:amd64 (0.2.5-1+b1) ... Setting up libtool (2.4.7-7) ... Setting up libevent-pthreads-2.1-7t64:amd64 (2.1.12-stable-10) ... Setting up libedit2:amd64 (3.1-20240517-1) ... Setting up libevent-openssl-2.1-7t64:amd64 (2.1.12-stable-10) ... Setting up libldap-2.5-0:amd64 (2.5.17+dfsg-1) ... Setting up pkgconf:amd64 (1.8.1-1+b2) ... Setting up intltool-debian (0.35.0+20060710.6) ... Setting up dh-autoreconf (20) ... Setting up libxml2-dev:amd64 (2.12.7+dfsg-3) ... Setting up libllvm17t64:amd64 (1:17.0.6-12) ... Setting up libedit-dev:amd64 (3.1-20240517-1) ... Setting up libgssapi-krb5-2:amd64 (1.20.1-6+b1) ... Setting up libevent-extra-2.1-7t64:amd64 (2.1.12-stable-10) ... Setting up libreadline8t64:amd64 (8.2-4) ... Setting up dh-strip-nondeterminism (1.14.0-1) ... Setting up groff-base (1.23.0-4) ... Setting up lld-17 (1:17.0.6-12) ... Setting up llvm-17-runtime (1:17.0.6-12) ... Setting up llvm-17-linker-tools (1:17.0.6-12) ... Setting up libcurl4t64:amd64 (8.8.0-1) ... Setting up po-debconf (1.0.21+nmu1) ... Setting up libpython3.11-stdlib:amd64 (3.11.9-1) ... Setting up libcurl3t64-gnutls:amd64 (8.8.0-1) ... Setting up man-db (2.12.1-2) ... Not building database; man-db/auto-update is not 'true'. Setting up libclang-cpp17t64 (1:17.0.6-12) ... Setting up libevent-dev (2.1.12-stable-10) ... Setting up git (1:2.45.1-1) ... Setting up llvm-17 (1:17.0.6-12) ... Setting up libpython3-stdlib:amd64 (3.11.8-1) ... Setting up python3.11 (3.11.9-1) ... Setting up crystal (1.12.1+dfsg-1) ... Setting up debhelper (13.15.3) ... Setting up python3 (3.11.8-1) ... Setting up python3-pkg-resources (68.1.2-2) ... Setting up python3-yaml (6.0.1-2) ... Setting up python3-pygments (2.17.2+dfsg-1) ... Setting up llvm-17-tools (1:17.0.6-12) ... Setting up llvm-17-dev (1:17.0.6-12) ... Processing triggers for libc-bin (2.38-12.1) ... 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.12.1+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.12.1+dfsg-1_source.changes dpkg-buildpackage: info: source package crystal dpkg-buildpackage: info: source version 1.12.1+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 -j20 clean make[1]: Entering directory '/build/reproducible-path/crystal-1.12.1+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.12.1+dfsg' debian/rules override_dh_clean make[1]: Entering directory '/build/reproducible-path/crystal-1.12.1+dfsg' dh_clean rm -f man/*.gz make[1]: Leaving directory '/build/reproducible-path/crystal-1.12.1+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.12.1+dfsg' dh_auto_build -- release=1 verbose=1 progress=1 threads=20 CRYSTAL_CONFIG_PATH="lib:/usr/lib/crystal/lib" CRYSTAL_CACHE_DIR="/tmp/crystal" interpreter=1 make -j20 "INSTALL=install --strip-program=true" release=1 verbose=1 progress=1 threads=20 CRYSTAL_CONFIG_PATH=lib:/usr/lib/crystal/lib CRYSTAL_CACHE_DIR=/tmp/crystal interpreter=1 make[2]: Entering directory '/build/reproducible-path/crystal-1.12.1+dfsg' Using /usr/bin/llvm-config-17 [version=17.0.6] g++ -c -g -O2 -ffile-prefix-map=/build/reproducible-path/crystal-1.12.1+dfsg=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -o src/llvm/ext/llvm_ext.o src/llvm/ext/llvm_ext.cc -I/usr/lib/llvm-17/include -std=c++17 -fno-exceptions -funwind-tables -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS CRYSTAL_CONFIG_BUILD_COMMIT="" CRYSTAL_CONFIG_PATH=lib:/usr/lib/crystal/lib SOURCE_DATE_EPOCH="1715970619" CRYSTAL_CONFIG_LIBRARY_PATH='$ORIGIN/../lib/crystal' ./bin/crystal build -D strict_multi_assign -D preview_overload_order --release --progress --threads 20 --link-flags="-Wl,-z,relro" -o .build/crystal src/compiler/crystal.cr -D without_openssl -D without_zlib -D use_pcre2 [1/13] Parse [1/13] Parse [2/13] Semantic (top level) [2/13] Semantic (top level) [3/13] Semantic (new) [3/13] Semantic (new) [4/13] Semantic (type declarations) [4/13] Semantic (type declarations) [5/13] Semantic (abstract def check) [5/13] Semantic (abstract def check) [6/13] Semantic (restrictions augmenter) [6/13] Semantic (restrictions augmenter) [7/13] Semantic (ivars initializers) [7/13] Semantic (ivars initializers) [8/13] Semantic (cvars initializers) [8/13] Semantic (cvars initializers) [9/13] Semantic (main) [9/13] Semantic (main) [10/13] Semantic (cleanup) [10/13] Semantic (cleanup) [11/13] Semantic (recursive struct check) [11/13] Semantic (recursive struct check) [12/13] Codegen (crystal) [12/13] Codegen (crystal) [13/13] Codegen (bc+obj) [13/13] [0/1] Codegen (bc+obj) [13/13] [0/1] Codegen (bc+obj) [14/13] Codegen (linking) [14/13] Codegen (linking) make[2]: Leaving directory '/build/reproducible-path/crystal-1.12.1+dfsg' make[1]: Leaving directory '/build/reproducible-path/crystal-1.12.1+dfsg' debian/rules override_dh_auto_test make[1]: Entering directory '/build/reproducible-path/crystal-1.12.1+dfsg' make release=1 verbose=1 progress=1 threads=20 CRYSTAL_CONFIG_PATH="lib:/usr/lib/crystal/lib" CRYSTAL_CACHE_DIR="/tmp/crystal" interpreter=1 compiler_spec make[2]: Entering directory '/build/reproducible-path/crystal-1.12.1+dfsg' Using /usr/bin/llvm-config-17 [version=17.0.6] CRYSTAL_CONFIG_BUILD_COMMIT="" CRYSTAL_CONFIG_PATH=lib:/usr/lib/crystal/lib SOURCE_DATE_EPOCH="1715970619" ./bin/crystal build -D strict_multi_assign -D preview_overload_order --release --progress --threads 20 --link-flags="-Wl,-z,relro" --exclude-warnings spec/std --exclude-warnings spec/compiler --exclude-warnings spec/primitives -o .build/compiler_spec spec/compiler_spec.cr --release Using compiled compiler at .build/crystal In lib/markd/src/markd/renderers/html_renderer.cr:238:7 238 | {% if Crystal::VERSION < "1.2.0" %} ^ Warning: expanding macro There was a problem expanding macro 'macro_140513035778688' 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] [0/1] Codegen (bc+obj) [14/13] Codegen (linking) [14/13] Codegen (linking) .build/compiler_spec -v --order=random Randomized with seed: 6729 Parser warnings warns on suffix-less UInt64 literals > Int64::MAX warns on suffix-less UInt64 literals > Int64::MAX warns on missing space before colon in block param type restriction in block param type restriction in return type restriction in return type restriction in anonymous block param type restriction in anonymous block param type restriction in type declaration in type declaration Crystal::Repl::Interpreter downcasts virtual type to its only type (#12351) downcasts virtual type to its only type (#12351) classes discards allocate discards allocate does allocate, set instance var and get instance var does allocate, set instance var and get instance var calls explicit struct self method calls explicit struct self method interprets read instance var interprets read instance var does object_id does object_id calls implicit class self method calls implicit class self method does constructor does constructor calls implicit struct self method calls implicit struct self method inlines instance var access from virtual type with a single type (#39520) inlines instance var access from virtual type with a single type (#39520) Lexer string says syntax error on "\"\\uDFFF\"" says syntax error on "\"\\uDFFF\"" says syntax error on "\"\\uFEDZ\"" says syntax error on "\"\\uFEDZ\"" lexes double numeral lexes double numeral lexes simple string with %| lexes simple string with %| lexes string with slash lexes string with slash lexes string with unicode codepoint in curly lexes string with unicode codepoint in curly lexes slash with no-escape char lexes slash with no-escape char lexes string with slash quote lexes string with slash quote lexes string with backslash lexes string with backslash lexes string with numeral lexes string with numeral raises on unexpected EOF while lexing heredoc raises on unexpected EOF while lexing heredoc lexes string with only newline lexes string with only newline raises when identifier doesn't start with a letter or number raises when identifier doesn't start with a letter or number lexes string with unicode codepoint in curly multiple times lexes string with unicode codepoint in curly multiple times lexes heredoc lexes heredoc lexes regex string lexes regex string lexes regex string with escaped slash with /.../ lexes regex string with escaped slash with /.../ lexes string with unicode codepoint lexes string with unicode codepoint lexes backtick string lexes backtick string says syntax error on "\"\\uD800\"" says syntax error on "\"\\uD800\"" assigns correct location after heredoc (#346) assigns correct location after heredoc (#346) lexes regex string with escaped space with %r(...) lexes regex string with escaped space with %r(...) lexes string with interpolation lexes string with interpolation lexes simple string with nested %{ lexes simple string with nested %{ lexes string with slash t lexes string with slash t lexes regex string with special chars with /.../ lexes regex string with special chars with /.../ lexes regex string with special chars with %r(...) lexes regex string with special chars with %r(...) lexes regex string with escaped space with /.../ lexes regex string with escaped space with /.../ lexes simple string with nested %[ lexes simple string with nested %[ lexes regex string with escaped slash with %r(...) lexes regex string with escaped slash with %r(...) says syntax error on "\"\\u{}\"" says syntax error on "\"\\u{}\"" lexes heredoc with empty line lexes heredoc with empty line lexes string with literal newline lexes string with literal newline lexes simple string lexes simple string lexes interpolations in heredocs lexes interpolations in heredocs lexes simple string with nested %( lexes simple string with nested %( lexes string with interpolation with double numeral lexes string with interpolation with double numeral lexes heredoc with \r\n lexes heredoc with \r\n lexes simple string with %( lexes simple string with %( lexes heredoc with spaces before close tag lexes heredoc with spaces before close tag says syntax error on "\"\\u{D800}\"" says syntax error on "\"\\u{D800}\"" lexes simple string with nested %< lexes simple string with nested %< says syntax error on "\"\\u{110000}\"" says syntax error on "\"\\u{110000}\"" lexes string with newline lexes string with newline raises on unterminated heredoc raises on unterminated heredoc says syntax error on "\"\\u{DFFF}\"" says syntax error on "\"\\u{DFFF}\"" Semantic: restrictions augmenter augments Nil augments Nil doesn't augment if assigned inside while doesn't augment if assigned inside while augments recursive alias type (#12134) augments recursive alias type (#12134) augments Tuple(Int32, Char) augments Tuple(Int32, Char) augments Array(Int32).class augments Array(Int32).class doesn't augment if assigned inside block doesn't augment if assigned inside block augments relative private type in same namespace augments relative private type in same namespace augments type splat augments type splat augments for class var augments for class var augments Pointer(Void) augments Pointer(Void) augments generic uninstantiated type augments generic uninstantiated type augments Proc(Int32, Char) augments Proc(Int32, Char) augments Int32.class augments Int32.class augments Int32 augments Int32 augments virtual type augments virtual type augments typedef augments typedef augments Enumerable(Int32).class augments Enumerable(Int32).class augments Char augments Char augments relative private type augments relative private type augments Char | Int32 | String augments Char | Int32 | String doesn't crash on macro that yields and defines class (#12142) doesn't crash on macro that yields and defines class (#12142) augments NoReturn augments NoReturn augments StaticArray(Int32, 8) augments StaticArray(Int32, 8) augments NamedTuple(a: Int32, b: Char) augments NamedTuple(a: Int32, b: Char) augments virtual metaclass type augments virtual metaclass type augments for Union(*T) (#12435) augments for Union(*T) (#12435) doesn't augment if assigned inside if doesn't augment if assigned inside if augments relative public type augments relative public type augments String augments String doesn't augment if the no_restrictions_augmenter flag is present doesn't augment if the no_restrictions_augmenter flag is present augments Symbol augments Symbol augments Char | Int32 | String augments Char | Int32 | String augments Float32 augments Float32 augments Bool augments Bool augments Array(String) augments Array(String) augments Proc(Int32, Nil) augments Proc(Int32, Nil) Normalize: case normalizes case with var in cond normalizes case with var in cond normalizes case with assignment normalizes case with assignment normalizes case with implicit ! normalizes case with implicit ! normalizes case with generic to is_a? normalizes case with generic to is_a? normalizes case without cond, when but else normalizes case without cond, when but else normalizes case with assignment wrapped by paren normalizes case with assignment wrapped by paren normalizes case with implicit as? (#3040) normalizes case with implicit as? (#3040) normalizes case without cond, when and else normalizes case without cond, when and else normalizes case with multiple expressions and comma normalizes case with multiple expressions and comma normalizes case with multiple expressions and non-tuple normalizes case with multiple expressions and non-tuple normalizes case with implicit call normalizes case with implicit call normalizes case without when and else normalizes case without when and else normalizes case with call normalizes case with call normalizes case with implicit is_a? (#3040) normalizes case with implicit is_a? (#3040) normalizes case with multiple expressions with all underscores normalizes case with multiple expressions with all underscores normalizes case with Generic.class to is_a? normalizes case with Generic.class to is_a? normalizes case with many expressions in when normalizes case with many expressions in when normalizes case with implicit as (#3040) normalizes case with implicit as (#3040) normalizes case without when but else normalizes case without when but else normalizes case with Path.class to is_a? normalizes case with Path.class to is_a? normalizes case without value normalizes case without value normalizes case with implicit responds_to? (#3040) normalizes case with implicit responds_to? (#3040) normalizes case with multiple expressions normalizes case with multiple expressions normalizes case with multiple expressions and types normalizes case with multiple expressions and types normalizes case with multiple expressions and implicit obj normalizes case with multiple expressions and implicit obj normalizes case with multiple expressions with underscore normalizes case with multiple expressions with underscore normalizes case without value with many expressions in when normalizes case without value with many expressions in when normalizes case with Path to is_a? normalizes case with Path to is_a? normalizes case with Path.class to is_a? (in) normalizes case with Path.class to is_a? (in) normalizes case with multiple expressions with all underscores twice normalizes case with multiple expressions with all underscores twice normalizes case with nil to is_a? normalizes case with nil to is_a? Crystal::Repl::Interpreter symbol symbol equality symbol equality Symbol#to_i Symbol#to_i Symbol#to_s Symbol#to_s Code gen: return doesn't crash when method returns nil and can be inlined doesn't crash when method returns nil and can be inlined codegens return codegens return codegens bug with return if true codegens bug with return if true return from function with union type return from function with union type return union return union codegens return followed by another expression codegens return followed by another expression returns empty from function returns empty from function return from function with nilable type return from function with nilable type returns in var assignment (#3364) returns in var assignment (#3364) codegens assign with if with two returns codegens assign with if with two returns return from function with nilable type 2 return from function with nilable type 2 flattens splats inside multiple return values flattens splats inside multiple return values forms a tuple from multiple return values forms a tuple from multiple return values codegens return inside if codegens return inside if types to_s of does for type contained in generic module does for type contained in generic module nilable value type nilable value type non-instantiated array non-instantiated array nilable type with more than two elements, Nil at the end nilable type with more than two elements, Nil at the end nilable reference type nilable reference type union types should have parens as return type as return type as arg type as arg type should not have extra parens in tuples in tuples in pointers in pointers in arrays in arrays union of simple types union of simple types named tuple named tuple array of simple types array of simple types does for type contained in generic class does for type contained in generic class Crystal::Doc::Type #macros sorts operators first sorts operators first doesn't show types for alias type doesn't show types for alias type ASTNode has no superclass ASTNode has no superclass #class_methods sorts operators first sorts operators first #instance_methods sorts operators first sorts operators first ASTNode has no ancestors ASTNode has no ancestors #node_to_html shows tuples shows tuples shows relative generic shows relative generic shows generic path with necessary colons shows generic path with necessary colons shows generic path with unnecessary colons shows generic path with unnecessary colons shows named tuples shows named tuples shows relative path shows relative path finds construct when searching class method (#8095) finds construct when searching class method (#8095) expand doesn't expand macro expression with cursor out of end doesn't expand macro expression with cursor out of end expands macro expression {% ... %} expands macro expression {% ... %} expands complex macro expands complex macro expands macro expression inside def of nested module expands macro expression inside def of nested module expands macro of module with cursor at module name expands macro of module with cursor at module name expands macro expression inside def of private module expands macro expression inside def of private module expands macro expression inside C struct expands macro expression inside C struct expands macro of module inside module expands macro of module inside module expands macro control {% if %} with cursor inside it expands macro control {% if %} with cursor inside it expands macro expression inside private struct expands macro expression inside private struct expands macro expression {{ ... }} with cursor inside it expands macro expression {{ ... }} with cursor inside it expands simple macro with cursor at end of it expands simple macro with cursor at end of it expands macro of module with cursor at dot expands macro of module with cursor at dot expands macro control {% if %} with indent expands macro control {% if %} with indent expands macro of module expands macro of module expands macros with 2 level expands macros with 2 level expands macro expression inside def of private module expands macro expression inside def of private module expands macros with 3 level expands macros with 3 level expands macro expression inside C union of private lib expands macro expression inside C union of private lib doesn't expand macro expression doesn't expand macro expression expands macro with doc expands macro with doc expands macro expression {% ... %} with cursor at end of it expands macro expression {% ... %} with cursor at end of it expands macro expression inside lib expands macro expression inside lib expands simple macro with cursor inside it expands simple macro with cursor inside it expands macro expression inside def of nested private module expands macro expression inside def of nested private module expands macro expression inside def of private struct expands macro expression inside def of private struct expands macro expression {{ ... }} expands macro expression {{ ... }} expands macro expression inside def of private enum expands macro expression inside def of private enum expands macro expression inside def expands macro expression inside def expands macro control {% for %} expands macro control {% for %} doesn't expand normal call doesn't expand normal call expands macro expression inside fun expands macro expression inside fun doesn't expand macro expression doesn't expand macro expression expands macro control {% for %} with indent expands macro control {% for %} with indent expands macro control {% if %} with cursor at end of it expands macro control {% if %} with cursor at end of it expands macro expression inside def of private class expands macro expression inside def of private class expands macro expression inside C struct of private lib expands macro expression inside C struct of private lib expands macro expression inside def of module expands macro expression inside def of module expands macro expression {{ ... }} with cursor end of it expands macro expression {{ ... }} with cursor end of it expands simple macro expands simple macro expands macro control {% for %} with cursor at end of it expands macro control {% for %} with cursor at end of it expands macro expression inside private lib expands macro expression inside private lib expands macro expression inside enum expands macro expression inside enum expands macro expression inside C union expands macro expression inside C union expands macro expression inside struct expands macro expression inside struct expands macro expression inside private def expands macro expression inside private def expands macro expression inside private class expands macro expression inside private class expands macro expression inside private module expands macro expression inside private module expands macro expression inside private enum expands macro expression inside private enum expands macro expression inside module expands macro expression inside module expands macro control {% for %} with cursor inside it expands macro control {% for %} with cursor inside it expands macro control {% if %} expands macro control {% if %} expands macro expression inside class expands macro expression inside class Code gen: ssa codegens a redefined var inside method codegens a redefined var inside method codegens declaration of var inside then when false codegens declaration of var inside then when false codegens a var that is re-assigned in a block codegens a var that is re-assigned in a block codegens a var that is re-assigned in a block (2) codegens a var that is re-assigned in a block (2) codegens a redefined var inside method with argument codegens a redefined var inside method with argument codegens ssa bug with if/else on var codegens ssa bug with if/else on var codegens ssa bug (2) codegens ssa bug (2) codegens a var that is declared in a block (1) codegens a var that is declared in a block (1) codegens a redefined var codegens a redefined var codegens declaration of var inside then when true codegens declaration of var inside then when true codegens a var that is declared in a block (2) codegens a var that is declared in a block (2) codegens a var that is re-assigned in a block (1) codegens a var that is re-assigned in a block (1) codegens ssa bug (1) codegens ssa bug (1) codegen: previous_def correctly passes named arguments correctly passes named arguments codegens previous def codegens previous def codegens previous def when inside fun and forwards args codegens previous def when inside fun and forwards args codegens previous def when inside fun with self codegens previous def when inside fun with self Crystal::Repl::Interpreter responds_to? does responds_to? does responds_to? doesn't crash if def body ends up with no type (#12219) doesn't crash if def body ends up with no type (#12219) Code gen: type declaration codegens initialize instance var of superclass codegens initialize instance var of superclass codegens initialize instance var with var declaration codegens initialize instance var with var declaration declares and initializes declares and initializes codegens initialize instance var codegens initialize instance var declares and initializes var declares and initializes var Crystal::TextHierarchyPrinter works works shows correct total size of generic class if known shows correct total size of generic class if known shows correct size for Bool member shows correct size for Bool member shows correct size for members with bound types shows correct size for members with bound types shows correct size for Proc inside extern struct shows correct size for Proc inside extern struct Normalize: multi assign normalizes m to n, with splat on left-hand side, splat is non-empty normalizes m to n, with splat on left-hand side, splat is non-empty normalizes 1 to n, with splat on left-hand side normalizes 1 to n, with splat on left-hand side normalizes n to n with call normalizes n to n with call normalizes n to splat on left-hand side normalizes n to splat on left-hand side normalizes 1 to n, with splat on left-hand side, splat after other targets normalizes 1 to n, with splat on left-hand side, splat after other targets normalizes 1 to n, with *_ on left-hand side (2) normalizes 1 to n, with *_ on left-hand side (2) normalizes 1 to n, with splat on left-hand side, splat before other targets normalizes 1 to n, with splat on left-hand side, splat before other targets without strict_multi_assign normalizes 1 to n with call normalizes 1 to n with call normalizes 1 to n with [] normalizes 1 to n with [] normalizes 1 to n normalizes 1 to n strict_multi_assign normalizes 1 to n normalizes 1 to n normalizes 1 to n with [] normalizes 1 to n with [] normalizes 1 to n with call normalizes 1 to n with call normalizes 1 to splat on left-hand side normalizes 1 to splat on left-hand side normalizes n to n normalizes n to n normalizes m to n, with *_ on left-hand side (3) normalizes m to n, with *_ on left-hand side (3) normalizes m to n, with splat on left-hand side, splat is empty normalizes m to n, with splat on left-hand side, splat is empty normalizes 1 to n, with *_ on left-hand side (3) normalizes 1 to n, with *_ on left-hand side (3) normalizes n to *_ on left-hand side normalizes n to *_ on left-hand side normalizes 1 to n, with *_ on left-hand side (1) normalizes 1 to n, with *_ on left-hand side (1) normalizes m to n, with *_ on left-hand side (1) normalizes m to n, with *_ on left-hand side (1) normalizes 1 to *_ on left-hand side normalizes 1 to *_ on left-hand side normalizes n to n with [] normalizes n to n with [] normalizes m to n, with *_ on left-hand side (2) normalizes m to n, with *_ on left-hand side (2) Crystal::Repl can parse and evaluate snippets can parse and evaluate snippets Semantic: var reports variable always nil reports variable always nil declares local variable and assigns it with if declares local variable and assigns it with if errors if declaring var that is already declared errors if declaring var that is already declared declares local variable and then assigns it declares local variable and then assigns it declares local variable and assigns wrong type declares local variable and assigns wrong type types a variable types a variable errors if variable already exists errors if variable already exists types an assign with type declaration types an assign with type declaration types an assign types an assign declares local variable with value declares local variable with value errors if declaring generic type without type vars (with local var) errors if declaring generic type without type vars (with local var) reports undefined local variable or method reports undefined local variable or method parse local variable as method call even if local variable is declared in call arguments parse local variable as method call even if local variable is declared in call arguments declares local variable and immediately reads it declares local variable and immediately reads it lets type on else side of if with a Bool | Nil union lets type on else side of if with a Bool | Nil union reports there's no self reports there's no self errors if reads from underscore errors if reads from underscore declares local variable but doesn't assign it in all branches declares local variable but doesn't assign it in all branches Semantic: not types not as NoReturn if exp is NoReturn types not as NoReturn if exp is NoReturn filters types inside if/else filters types inside if/else types not types not doesn't restrict and in while (#4243) doesn't restrict and in while (#4243) filters types with !is_a? filters types with !is_a? filters types inside if filters types inside if doesn't restrict and doesn't restrict and semantic: case checks exhaustiveness of enum via question method checks exhaustiveness of enum via question method checks exhaustiveness for tuple literal with bool and underscore at second position checks exhaustiveness for tuple literal with bool and underscore at second position checks exhaustiveness of enum via const checks exhaustiveness of enum via const checks exhaustiveness, covers in base type covers (generic type) checks exhaustiveness, covers in base type covers (generic type) checks exhaustiveness for tuple literal of 3 elements, all bool checks exhaustiveness for tuple literal of 3 elements, all bool checks exhaustiveness of bool type (missing true) checks exhaustiveness of bool type (missing true) checks exhaustiveness for tuple literal with bool and underscore at first position, with partial match checks exhaustiveness for tuple literal with bool and underscore at first position, with partial match can prove case is exhaustive for @[Flags] enum when matching type can prove case is exhaustive for @[Flags] enum when matching type checks exhaustiveness for tuple literal of 3 elements, and warns checks exhaustiveness for tuple literal of 3 elements, and warns checks exhaustiveness of bool type with other types checks exhaustiveness of bool type with other types checks exhaustiveness for tuple literal, with call checks exhaustiveness for tuple literal, with call checks exhaustiveness for tuple literal with bool and underscore at second position checks exhaustiveness for tuple literal with bool and underscore at second position checks exhaustiveness of nil type with nil literal checks exhaustiveness of nil type with nil literal checks exhaustiveness for tuple literal with types and underscore at second position checks exhaustiveness for tuple literal with types and underscore at second position checks exhaustiveness of enum through method (all cases covered) checks exhaustiveness of enum through method (all cases covered) checks exhaustiveness for tuple literal with bool and underscore at first position checks exhaustiveness for tuple literal with bool and underscore at first position checks exhaustiveness of bool type (missing false) checks exhaustiveness of bool type (missing false) doesn't check exhaustiveness when using 'when' doesn't check exhaustiveness when using 'when' checks exhaustiveness of single type checks exhaustiveness of single type checks exhaustiveness for tuple literal, and passes checks exhaustiveness for tuple literal, and passes checks exhaustiveness for tuple literal of 2 elements, first is enum checks exhaustiveness for tuple literal of 2 elements, first is enum covers all types covers all types checks exhaustiveness of enum combined with another type checks exhaustiveness of enum combined with another type errors if casing against a constant errors if casing against a constant checks exhaustiveness of single type (T.class) checks exhaustiveness of single type (T.class) checks exhaustiveness for tuple literal with bool and underscore at second position, with partial match checks exhaustiveness for tuple literal with bool and underscore at second position, with partial match can't prove case is exhaustive for @[Flags] enum, tuple case can't prove case is exhaustive for @[Flags] enum, tuple case checks exhaustiveness of enum (all cases covered) checks exhaustiveness of enum (all cases covered) checks exhaustiveness of nilable type with nil literal checks exhaustiveness of nilable type with nil literal checks exhaustiveness of union type with virtual type checks exhaustiveness of union type with virtual type checks exhaustiveness for tuple literal with types and underscore at first position checks exhaustiveness for tuple literal with types and underscore at first position checks exhaustiveness of single type (generic) checks exhaustiveness of single type (generic) checks exhaustiveness, covers in base type covers checks exhaustiveness, covers in base type covers checks exhaustiveness for tuple literal of 2 elements, and warns checks exhaustiveness for tuple literal of 2 elements, and warns checks exhaustiveness for tuple literal of 3 elements, all enums checks exhaustiveness for tuple literal of 3 elements, all enums can't prove case is exhaustive for @[Flags] enum can't prove case is exhaustive for @[Flags] enum checks exhaustiveness of single type (Foo(T).class) checks exhaustiveness of single type (Foo(T).class) checks exhaustiveness for tuple literal with bool and underscore at first position checks exhaustiveness for tuple literal with bool and underscore at first position checks exhaustiveness for tuple literal with bool and underscore at first position, partial match checks exhaustiveness for tuple literal with bool and underscore at first position, partial match checks exhaustiveness for tuple literal of 2 elements, first is bool checks exhaustiveness for tuple literal of 2 elements, first is bool checks exhaustiveness for tuple literal with bool and underscore at second position, partial match checks exhaustiveness for tuple literal with bool and underscore at second position, partial match checks exhaustiveness of union with bool checks exhaustiveness of union with bool Codegen: is_a? codegens is_a? with nilable gives false because other type 2 codegens is_a? with nilable gives false because other type 2 restricts simple type with union restricts simple type with union codegens is_a? casts union to nilable in method codegens is_a? casts union to nilable in method codegens is_a? casts union to nilable codegens is_a? casts union to nilable doesn't work with inherited generic class against an instantiation (2) doesn't work with inherited generic class against an instantiation (2) codegens is_a? with union gives false codegens is_a? with union gives false evaluates method on filtered union type evaluates method on filtered union type restricts virtual metaclass against virtual metaclass type restricts virtual metaclass against virtual metaclass type codegens is_a? true for simple type codegens is_a? true for simple type transforms else if condition is always falsey transforms else if condition is always falsey transforms then if condition is always truthy transforms then if condition is always truthy codegens is_a? from nilable reference union type to type codegens is_a? from nilable reference union type to type works with inherited generic class against an instantiation (3) works with inherited generic class against an instantiation (3) does is_a? with more strict virtual type does is_a? with more strict virtual type does is_a? with union type as Union(X, Y), don't resolve to virtual type (#10244) does is_a? with union type as Union(X, Y), don't resolve to virtual type (#10244) codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used codegens when is_a? is always false but properties are used codegens is_a? with virtual and module codegens is_a? with virtual and module evaluate method on filtered type evaluate method on filtered type evaluates method on filtered union type 3 evaluates method on filtered union type 3 evaluates method on filtered union type 3 evaluates method on filtered union type 3 evaluates method on filtered union type 3 evaluates method on filtered union type 3 evaluates method on filtered union type 3 evaluates method on filtered union type 3 evaluates method on filtered union type 3 evaluates method on filtered union type 3 doesn't skip assignment when used in combination with .is_a? (false case) (#1121) doesn't skip assignment when used in combination with .is_a? (false case) (#1121) says true for Class.is_a?(Class.class) (#4374) says true for Class.is_a?(Class.class) (#4374) doesn't consider generic type to be a generic type of a recursive alias (#3524) doesn't consider generic type to be a generic type of a recursive alias (#3524) doesn't type merge (1) (#548) doesn't type merge (1) (#548) codegens is_a? on right side of and codegens is_a? on right side of and doesn't type merge (2) (#548) doesn't type merge (2) (#548) says false for value.is_a?(Class) says false for value.is_a?(Class) codegens is_a? with virtual and nil codegens is_a? with virtual and nil says false for GenericChild(Base).is_a?(GenericBase(Child)) (#1294) says false for GenericChild(Base).is_a?(GenericBase(Child)) (#1294) restricts union with union restricts union with union evaluate method on filtered type nilable type not-nil evaluate method on filtered type nilable type not-nil doesn't skip assignment when used in combination with .is_a? (true case, then) (#1121) doesn't skip assignment when used in combination with .is_a? (true case, then) (#1121) virtual metaclass type is not virtual instance type (#12628) virtual metaclass type is not virtual instance type (#12628) works with inherited generic class against an instantiation works with inherited generic class against an instantiation does is_a? with generic class metaclass does is_a? with generic class metaclass does is_a? with && and true condition does is_a? with && and true condition codegens is_a? with nilable gives false because no type codegens is_a? with nilable gives false because no type codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false codegens is_a? with a Const does comparison and gives false evaluate method on filtered type nilable type nil evaluate method on filtered type nilable type nil codegens is_a? with virtual codegens is_a? with virtual codegens untyped var (#4009) codegens untyped var (#4009) visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364) visits 1.to_s twice, may trigger enclosing_call (#4364) does is_a?(generic type) for nested generic inheritance (1) (#9660) does is_a?(generic type) for nested generic inheritance (1) (#9660) does is_a?(generic type) for nested generic inheritance, through upcast (2) does is_a?(generic type) for nested generic inheritance, through upcast (2) codegens is_a? with union gives true codegens is_a? with union gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with a Const does comparison and gives true codegens is_a? with union gives true codegens is_a? with union gives true says true for Class.is_a?(Class.class.class) (#4374) says true for Class.is_a?(Class.class.class) (#4374) codegens is_a? from virtual type to module codegens is_a? from virtual type to module does is_a? for virtual generic instance type against generic does is_a? for virtual generic instance type against generic gives false if generic type doesn't match exactly gives false if generic type doesn't match exactly does is_a? with union type, don't resolve to virtual type (#10244) does is_a? with union type, don't resolve to virtual type (#10244) doesn't error if result is discarded (#14113) doesn't error if result is discarded (#14113) codegens is_a? with nilable gives false because no type codegens is_a? with nilable gives false because no type passes is_a? with generic module type on virtual type (#10302) passes is_a? with generic module type on virtual type (#10302) doesn't skip assignment when used in combination with .is_a? and && (#1121) doesn't skip assignment when used in combination with .is_a? and && (#1121) does is_a?/responds_to? twice (#1451) does is_a?/responds_to? twice (#1451) does is_a?(generic type) for nested generic inheritance (2) does is_a?(generic type) for nested generic inheritance (2) codegens is_a? with nilable gives false because other type 1 codegens is_a? with nilable gives false because other type 1 codegens is_a? false for simple type codegens is_a? false for simple type evaluates method on filtered union type 2 evaluates method on filtered union type 2 codegens is_a? with union gives false codegens is_a? with union gives false restricts type in else but lazily restricts type in else but lazily does is_a? for union of module and type does is_a? for union of module and type restricts metaclass against virtual metaclass type restricts metaclass against virtual metaclass type resets truthy state after visiting nodes (bug) resets truthy state after visiting nodes (bug) restricts union metaclass to metaclass (#12295) restricts union metaclass to metaclass (#12295) doesn't skip assignment when used in combination with .is_a? (true case, else) (#1121) doesn't skip assignment when used in combination with .is_a? (true case, else) (#1121) codegens is_a? from nilable reference union type to nil codegens is_a? from nilable reference union type to nil does is_a?(generic type) for nested generic inheritance, through upcast (1) does is_a?(generic type) for nested generic inheritance, through upcast (1) does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) does is_a? for generic type against generic class instance type (#12304) codegens is_a? with nilable gives true codegens is_a? with nilable gives true Semantic: while rebinds condition variable after while body (#6158) rebinds condition variable after while body (#6158) types while with assignment and call types while with assignment and call finds all while cond assign targets in expressions (#10350) finds all while cond assign targets in expressions (#10350) doesn't fail on Expressions condition (2) doesn't fail on Expressions condition (2) types while with assignment types while with assignment marks variable as nil if breaking before assigning to it in an endless loop (2) marks variable as nil if breaking before assigning to it in an endless loop (2) types while types while reports next cannot be used outside a while reports next cannot be used outside a while doesn't fail on new variables inside typeof condition doesn't fail on new variables inside typeof condition finds all while cond assign targets in expressions (6) finds all while cond assign targets in expressions (6) types while with break without value types while with break without value uses type at end of endless while if variable is reassigned, but not before first break (2) uses type at end of endless while if variable is reassigned, but not before first break (2) types while ((true)) as NoReturn types while ((true)) as NoReturn marks variable as nil if breaking before assigning to it in an endless loop marks variable as nil if breaking before assigning to it in an endless loop types endless while with break with value types endless while with break with value types endless while with multiple breaks with value types endless while with multiple breaks with value finds all while cond assign targets in expressions (4) finds all while cond assign targets in expressions (4) types while true as NoReturn types while true as NoReturn restricts type after `while` with `not` and `and` (#4242) restricts type after `while` with `not` and `and` (#4242) types while with break with value types while with break with value finds all while cond assign targets in expressions (3) finds all while cond assign targets in expressions (3) types variable as nilable if raise before assign types variable as nilable if raise before assign doesn't fail on Expressions condition (1) doesn't fail on Expressions condition (1) types while with multiple breaks with value types while with multiple breaks with value types while (true) as NoReturn types while (true) as NoReturn uses type at end of endless while if variable is reassigned, but not before first break uses type at end of endless while if variable is reassigned, but not before first break uses var type inside while if endless loop (2) uses var type inside while if endless loop (2) doesn't use type at end of endless while if variable is reassigned (3) doesn't use type at end of endless while if variable is reassigned (3) finds all while cond assign targets in expressions (2) finds all while cond assign targets in expressions (2) finds while cond assign target in Not (#10345) finds while cond assign target in Not (#10345) uses var type inside while if endless loop uses var type inside while if endless loop doesn't use type at end of endless while if variable is reassigned doesn't use type at end of endless while if variable is reassigned doesn't fail on nested conditionals inside typeof condition doesn't fail on nested conditionals inside typeof condition types endless while with break without value types endless while with break without value restricts type after while with not (#4242) restricts type after while with not (#4242) doesn't use type at end of endless while if variable is reassigned (2) doesn't use type at end of endless while if variable is reassigned (2) doesn't modify var's type before while doesn't modify var's type before while restricts type after while (#4242) restricts type after while (#4242) finds all while cond assign targets in expressions (5) finds all while cond assign targets in expressions (5) types while with && (#1425) types while with && (#1425) doesn't type var as nilable after break inside rescue doesn't type var as nilable after break inside rescue doesn't restrict type after while if there's a break (#4242) doesn't restrict type after while if there's a break (#4242) reports break cannot be used outside a while reports break cannot be used outside a while types while with assignment and && types while with assignment and && Semantic: const types a nested constant using Path types a nested constant using Path doesn't errors if constant depends on another one defined later through method, but constant is simple (1 + ZED) doesn't errors if constant depends on another one defined later through method, but constant is simple (1 + ZED) doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED - 1) doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED - 1) errors if using constant as generic type (#3240) errors if using constant as generic type (#3240) errors if using const in var declaration errors if using const in var declaration errors on dynamic constant assignment inside block errors on dynamic constant assignment inside block can use constant defined later (#2906) can use constant defined later (#2906) doesn't errors if constant depends on another one defined later through method, but constant is simple ('a') doesn't errors if constant depends on another one defined later through method, but constant is simple ('a') doesn't errors if constant depends on another one defined later through method, but constant is simple (~ 2) doesn't errors if constant depends on another one defined later through method, but constant is simple (~ 2) errors on dynamic constant assignment inside if errors on dynamic constant assignment inside if finds nearest constant first finds nearest constant first errors if using const in restriction errors if using const in restriction errors if using const in proc notation parameter type errors if using const in proc notation parameter type finds current type only for first path item (2) finds current type only for first path item (2) errors if constant has NoReturn type (#6139) errors if constant has NoReturn type (#6139) creates container module if not exist when using Path creates container module if not exist when using Path finds current type before parents (#4086) finds current type before parents (#4086) doesn't count parent types as current type doesn't count parent types as current type keeps type of container when using Path keeps type of container when using Path doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED * 2) doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED * 2) doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED &* 2) doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED &* 2) finds constant in module that includes module (#205) finds constant in module that includes module (#205) doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED &- 1) doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED &- 1) doesn't errors if constant depends on another one defined later through method, but constant is simple (- 2) doesn't errors if constant depends on another one defined later through method, but constant is simple (- 2) finds current type first finds current type first doesn't crash with const used in initialize (bug) doesn't crash with const used in initialize (bug) errors if using return inside constant value (#5391) errors if using return inside constant value (#5391) doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED // 2) doesn't errors if constant depends on another one defined later through method, but constant is simple (ZED // 2) types a nested type with same name types a nested type with same name finds constant in class that extends class (#205) finds constant in class that extends class (#205) doesn't errors if constant depends on another one defined later through method, but constant is simple (nil) doesn't errors if constant depends on another one defined later through method, but constant is simple (nil) doesn't errors if constant depends on another one defined later through method, but constant is simple (+ 1) doesn't errors if constant depends on another one defined later through method, but constant is simple (+ 1) errors if can't infer constant type (#3240, #3948) errors if can't infer constant type (#3240, #3948) types a nested constant types a nested constant errors if using const in proc notation return type errors if using const in proc notation return type doesn't errors if constant depends on another one defined later through method, but constant is simple (true) doesn't errors if constant depends on another one defined later through method, but constant is simple (true) types a constant inside a def types a constant inside a def errors if using const in uninitialized errors if using const in uninitialized doesn't errors if constant depends on another one defined later through method, but constant is simple (1) doesn't errors if constant depends on another one defined later through method, but constant is simple (1) doesn't errors if constant depends on another one defined later through method, but constant is simple ("foo") doesn't errors if constant depends on another one defined later through method, but constant is simple ("foo") types a global constant reference in method types a global constant reference in method errors if using const in type declaration errors if using const in type declaration types a global constant reference in static method types a global constant reference in static method doesn't errors if constant depends on another one defined later through method, but constant is simple (1 + 2) doesn't errors if constant depends on another one defined later through method, but constant is simple (1 + 2) doesn't share variables with global scope doesn't share variables with global scope doesn't error if using c enum doesn't error if using c enum types a constant using Path types a constant using Path finds const from restriction finds const from restriction types a constant types a constant finds current type only for first path item (1) finds current type only for first path item (1) types a constant reference types a constant reference doesn't errors if constant depends on another one defined later through method, but constant is simple (1 &+ ZED) doesn't errors if constant depends on another one defined later through method, but constant is simple (1 &+ ZED) Code gen: virtual type assign instance variable in virtual type assign instance variable in virtual type dispatch call with nilable virtual arg dispatch call with nilable virtual arg 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) 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 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 codegens allocate for virtual type with custom new codegens allocate for virtual type with custom new calls class method 2 calls class method 2 doesn't lookup in Value+ when virtual type is Object+ doesn't lookup in Value+ when virtual type is Object+ codegens virtual call with explicit self codegens virtual call with explicit self calls class method 1 calls class method 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 call base method call base method call base overwritten method call base overwritten method codegens virtual call with explicit self and nilable type codegens virtual call with explicit self and nilable type returns type with virtual type def type returns type with virtual type def type calls class method 3 calls class method 3 can belong to union can belong to union initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated initializes ivars to nil even if object never instantiated dispatch call with virtual type argument dispatch call with virtual type argument dispatches on virtual metaclass (1) dispatches on virtual metaclass (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 codegens new twice for virtual codegens new twice for virtual codegens virtual method of abstract metaclass codegens virtual method of abstract metaclass 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 dispatches on virtual metaclass (2) dispatches on virtual metaclass (2) casts union to virtual casts union to virtual codegens non-virtual call that calls virtual call to another virtual call codegens non-virtual call that calls virtual call to another virtual call lookup instance variables in parent types lookup instance variables in parent types casts virtual type to union casts virtual type to union casts metaclass union type to virtual metaclass type (#6298) casts metaclass union type to virtual metaclass type (#6298) codegens new for simple type, then for virtual codegens new for simple type, then for virtual call overwritten method call overwritten method dispatches on virtual metaclass (3) dispatches on virtual metaclass (3) casts virtual type to base virtual type casts virtual type to base virtual type Crystal::Repl::Interpreter blocks interprets with ... yield with struct interprets with ... yield with struct caches method with captured block (#12276) caches method with captured block (#12276) interprets next inside block (union, through normal exit) interprets next inside block (union, through normal exit) interprets with ... yield with extra arguments (#12296) interprets with ... yield with extra arguments (#12296) interprets break inside block (union, through break) interprets break inside block (union, through break) interprets break inside block interprets break inside block captures non-closure block captures non-closure block yields different values to form a union yields different values to form a union clears block local variables when calling block clears block local variables when calling block returns from block returns from block interprets yield with splat (1) interprets yield with splat (1) interprets with ... yield interprets with ... yield interprets next inside block (union, through next) interprets next inside block (union, through next) interprets yield with splat, block with splat interprets yield with splat, block with splat casts yield expression to block var type (not block arg type) casts yield expression to block var type (not block arg type) interprets yield expression interprets yield expression considers block arg without type as having NoReturn type (#12270) considers block arg without type as having NoReturn type (#12270) interprets yield return value interprets yield return value counts with ... yield scope in block args bytesize (#12316) counts with ... yield scope in block args bytesize (#12316) interprets block with args that conflict with a local var interprets block with args that conflict with a local var interprets block with args that conflict with a local var interprets block with args that conflict with a local var interprets break inside block (union, through return) interprets break inside block (union, through return) interprets block with splat interprets block with splat interprets simplest block interprets simplest block discards yield expression discards yield expression interprets yield expressions interprets yield expressions considers block arg without type as having NoReturn type (2) (#12270) considers block arg without type as having NoReturn type (2) (#12270) interprets block with multiple yields interprets block with multiple yields interprets break inside block (union, through normal flow) interprets break inside block (union, through normal flow) interprets next inside block interprets next inside block interprets yield with splat, block with splat (#12227) interprets yield with splat, block with splat (#12227) interprets yield with splat, less block arguments interprets yield with splat, less block arguments clears block local variables when calling block (2) clears block local variables when calling block (2) interprets yield inside def with arguments interprets yield inside def with arguments interprets yield inside another block interprets yield inside another block interprets yield with splat (2) interprets yield with splat (2) context includes last call includes last call can get context inside a module can get context inside a module does not includes temp variables does not includes temp variables can get context in contained class' class method can get context in contained class' class method does includes self on classes does includes self on classes can't get context from uncalled method can't get context from uncalled method includes assignments includes assignments does includes regex special variables does includes regex special variables can get context inside initialize can get context inside initialize can display text output can display text output can get context of yielded block can get context of yielded block can handle union types can handle union types use type filters from is_a? use type filters from is_a? can display json output can display json output can get context in file private module can get context in file private module consider different instances of def consider different instances of def includes top level vars includes top level vars includes block args includes block args use type filters from if var use type filters from if var includes args includes args can get context of empty def can get context of empty def can get context in generic class can get context in generic class can get context of empty yielded block can get context of empty yielded block can get context in file private method can get context in file private method 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 can get context inside class methods can get context inside class methods Code gen: hooks does added method macro does added method macro does finished does finished does extended macro does extended macro does included macro does included macro fixes empty types in hooks (#3946) fixes empty types in hooks (#3946) does inherited macro before class body does inherited macro before class body does inherited macro before class body does inherited macro before class body does inherited macro before class body does inherited macro before class body does inherited macro before class body does inherited macro before class body does inherited macro before class body does inherited macro before class body does inherited macro does inherited macro does inherited macro recursively does inherited macro recursively Crystal::Playground::Agent should send json messages and return inspected value should send json messages and return inspected value Semantic: super types super with named arguments, def has bare splat parameter (#8895) types super with named arguments, def has bare splat parameter (#8895) types super without arguments and instance variable types super without arguments and instance variable finds super initialize if not explicitly defined in superclass, 2 (#273) finds super initialize if not explicitly defined in superclass, 2 (#273) types super with forwarded arguments, different internal names (#8895) types super with forwarded arguments, different internal names (#8895) types super when container method is defined in parent class types super when container method is defined in parent class calls super in module method (3) (#556) calls super in module method (3) (#556) calls super in module method (1) (#556) calls super in module method (1) (#556) types super when inside fun types super when inside fun types super with forwarded arguments, parent has parameters types super with forwarded arguments, parent has parameters errors on super outside method (#4481) errors on super outside method (#4481) errors if invoking super and match isn't found in direct superclass in initialize (even though it's find in one superclass) errors if invoking super and match isn't found in direct superclass in initialize (even though it's find in one superclass) types super with named arguments, def has bare splat parameter (2) (#8895) types super with named arguments, def has bare splat parameter (2) (#8895) calls super in generic module method calls super in generic module method types super without arguments types super without arguments calls super in module method (2) (#556) calls super in module method (2) (#556) errors if calling super on module method and not found errors if calling super on module method and not found errors no superclass method in top-level def errors no superclass method in top-level def invokes super inside macro (#6636) invokes super inside macro (#6636) types super with forwarded arguments, def has double splat parameter (#8895) types super with forwarded arguments, def has double splat parameter (#8895) doesn't error if invoking super and match isn't found in direct superclass (even though it's find in one superclass) doesn't error if invoking super and match isn't found in direct superclass (even though it's find in one superclass) types super when inside fun and forwards args types super when inside fun and forwards args errors no superclass method in top-level errors no superclass method in top-level errors no superclass method errors no superclass method finds super initialize if not explicitly defined in superclass, 1 (#273) finds super initialize if not explicitly defined in superclass, 1 (#273) types super with forwarded arguments, def has bare splat parameter (#8895) types super with forwarded arguments, def has bare splat parameter (#8895) says correct error message when no overload matches in super call (#272) says correct error message when no overload matches in super call (#272) gives correct error when calling super and target is abstract method (#2675) gives correct error when calling super and target is abstract method (#2675) types super when container method is defined in parent class two levels up types super when container method is defined in parent class two levels up errors on super where only target would be a top level method (#5201) errors on super where only target would be a top level method (#5201) Semantic: private doesn't define private lib with global type name doesn't define private lib with global type name doesn't find private class in another file doesn't find private class in another file doesn't define incorrect type in top-level namespace (#13511) doesn't define incorrect type in top-level namespace (#13511) doesn't find private enum from outside namespace doesn't find private enum from outside namespace finds private macro in same file, invoking from another macro (#1265) finds private macro in same file, invoking from another macro (#1265) doesn't define incorrect type in top-level namespace (#13511) doesn't define incorrect type in top-level namespace (#13511) doesn't find private lib from outside namespace doesn't find private lib from outside namespace doesn't find private class defined through macro (#8715) doesn't find private class defined through macro (#8715) doesn't find private def defined in macro in another file (#7681) doesn't find private def defined in macro in another file (#7681) doesn't find private alias from outside namespace, long name (#8831) doesn't find private alias from outside namespace, long name (#8831) doesn't define private alias with global type name doesn't define private alias with global type name doesn't define private class with global type name doesn't define private class with global type name finds private def in same file that invokes another def finds private def in same file that invokes another def doesn't define private module with global type name doesn't define private module with global type name doesn't find private constant from outside namespace doesn't find private constant from outside namespace doesn't find private macro defined through macro (#8715) doesn't find private macro defined through macro (#8715) types private def correctly types private def correctly doesn't find private def in another file doesn't find private def in another file doesn't find private module from outside namespace, long name (#8831) doesn't find private module from outside namespace, long name (#8831) find module private macro inside a module, which is inherited by the module find module private macro inside a module, which is inherited by the module doesn't define incorrect type in top-level namespace (#13511) doesn't define incorrect type in top-level namespace (#13511) doesn't find private constant from outside namespace, long name (#8831) doesn't find private constant from outside namespace, long name (#8831) doesn't find private class from outside namespace, long name (#8831) doesn't find private class from outside namespace, long name (#8831) finds private class in macro expansion finds private class in macro expansion doesn't find private module from outside namespace doesn't find private module from outside namespace finds private type in same file finds private type in same file doesn't define incorrect type in top-level namespace (#13511) doesn't define incorrect type in top-level namespace (#13511) finds private type from inside namespace in subclass finds private type from inside namespace in subclass doesn't find private thing defined through recursive macro (#8715) doesn't find private thing defined through recursive macro (#8715) finds private macro in same file finds private macro in same file finds private def in same file finds private def in same file doesn't inherit visibility from class node in macro hook (#8794) doesn't inherit visibility from class node in macro hook (#8794) finds private type from inside namespace finds private type from inside namespace doesn't find private module defined through macro (#8715) doesn't find private module defined through macro (#8715) doesn't define private enum with global type name doesn't define private enum with global type name doesn't find private constant in another file (#7850) doesn't find private constant in another file (#7850) doesn't define incorrect type in top-level namespace (#13511) doesn't define incorrect type in top-level namespace (#13511) finds private def when invoking from inside macro (#2082) finds private def when invoking from inside macro (#2082) can use instance var initializer in private type can use instance var initializer in private type doesn't define private constant with global type name doesn't define private constant with global type name can use class var initializer in private type can use class var initializer in private type doesn't find module private macro outside the module doesn't find module private macro outside the module can use types in private type can use types in private type doesn't find private enum from outside namespace, long name (#8831) doesn't find private enum from outside namespace, long name (#8831) doesn't find private alias from outside namespace doesn't find private alias from outside namespace doesn't find private macro in another file doesn't find private macro in another file doesn't find private class from outside namespace doesn't find private class from outside namespace doesn't define incorrect type in top-level namespace (#13511) doesn't define incorrect type in top-level namespace (#13511) find module private macro inside the module find module private macro inside the module doesn't find private alias in another file doesn't find private alias in another file gives private constant error in macro gives private constant error in macro doesn't find private lib from outside namespace, long name (#8831) doesn't find private lib from outside namespace, long name (#8831) Code gen: cast casts from pointer to pointer casts from pointer to pointer casts from pointer to pointer casts from pointer to pointer casts from pointer to pointer casts from pointer to pointer casts from pointer to pointer casts from pointer to pointer casts from pointer to pointer casts from pointer to pointer casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) casts from nilable type to virtual type (#3512) casts between union types, where union has a tuple type (#3377) casts between union types, where union has a tuple type (#3377) casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError casts from virtual to single type raises TypeCastError casts with block var that changes type (#3341) casts with block var that changes type (#3341) can cast from Void* to virtual type (#3014) can cast from Void* to virtual type (#3014) allows casting nilable type to Void* (3) allows casting nilable type to Void* (3) casts from union to single type casts from union to single type casts from union to single type casts from union to single type casts from union to single type casts from union to single type casts from union to single type casts from union to single type casts from union to single type casts from union to single type casts to bigger union casts to bigger union allows casting object to pointer and back allows casting object to pointer and back cast virtual metaclass type to nilable virtual instance type (#12628) cast virtual metaclass type to nilable virtual instance type (#12628) upcasts type to virtual (#3304) upcasts type to virtual (#3304) downcasts from union to union with different alignment downcasts from union to union with different alignment downcasts from union to union with different alignment downcasts from union to union with different alignment downcasts from union to union with different alignment downcasts from union to union with different alignment downcasts from union to union with different alignment downcasts from union to union with different alignment downcasts from union to union with different alignment downcasts from union to union with different alignment casts to module casts to module casts to module casts to module casts to module casts to module casts to module casts to module casts to module casts to module allows casting nil to Void* allows casting nil to Void* casts from int to int casts from int to int casts from int to int casts from int to int casts from int to int casts from int to int casts from int to int casts from int to int casts from int to int casts from int to int upcasts from union to union with different alignment upcasts from union to union with different alignment upcasts from union to union with different alignment upcasts from union to union with different alignment upcasts from union to union with different alignment upcasts from union to union with different alignment upcasts from union to union with different alignment upcasts from union to union with different alignment upcasts from union to union with different alignment upcasts from union to union with different alignment casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError casts from union to single type raises TypeCastError doesn't corrupt stack when downcasting union to union with different alignment (#14285) doesn't corrupt stack when downcasting union to union with different alignment (#14285) casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError casts from nilable to nil raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError casts from union to another union raises TypeCastError upcasts from non-generic to generic upcasts from non-generic to generic sidecasts from union to union with different alignment sidecasts from union to union with different alignment sidecasts from union to union with different alignment sidecasts from union to union with different alignment sidecasts from union to union with different alignment sidecasts from union to union with different alignment sidecasts from union to union with different alignment sidecasts from union to union with different alignment sidecasts from union to union with different alignment sidecasts from union to union with different alignment upcasts type to virtual (2) (#3304) upcasts type to virtual (2) (#3304) casts to base class making it virtual casts to base class making it virtual allows casting nilable type to Void* (1) allows casting nilable type to Void* (1) codegens class method when type id is available but not a virtual type (#3490) codegens class method when type id is available but not a virtual type (#3490) casts from virtual to single type casts from virtual to single type casts from virtual to single type casts from virtual to single type casts from virtual to single type casts from virtual to single type casts from virtual to single type casts from virtual to single type casts from virtual to single type casts from virtual to single type casts from nilable to nil casts from nilable to nil casts from nilable to nil casts from nilable to nil casts from nilable to nil casts from nilable to nil casts from nilable to nil casts from nilable to nil casts from nilable to nil casts from nilable to nil can cast to metaclass (#11121) can cast to metaclass (#11121) allows casting nilable type to Void* (2) allows casting nilable type to Void* (2) casts from union to another union casts from union to another union casts from union to another union casts from union to another union casts from union to another union casts from union to another union casts from union to another union casts from union to another union casts from union to another union casts from union to another union casts (bug) casts (bug) casts (bug) casts (bug) casts (bug) casts (bug) casts (bug) casts (bug) casts (bug) casts (bug) Crystal::Repl::Interpreter integration does some Hash methods does some Hash methods does Float64#to_s (complex) does Float64#to_s (complex) does String#includes? does String#includes? does YAML::Serializable does YAML::Serializable does XML does XML does Float64#to_s (simple) does Float64#to_s (simple) does caller does caller does Range#to_a, Array#to_s does Range#to_a, Array#to_s does Int32#to_s does Int32#to_s does YAML does YAML does JSON does JSON does CSV does CSV does IO.pipe (checks that StaticArray is passed correctly to C calls) does IO.pipe (checks that StaticArray is passed correctly to C calls) does JSON::Serializable does JSON::Serializable Normalize: expressions normalizes an expression normalizes an expression normalizes expressions with begin/end normalizes expressions with begin/end normalizes an empty expression with begin/end normalizes an empty expression with begin/end Code gen: new evaluates initialize default value at the instance scope (2) (#731) evaluates initialize default value at the instance scope (2) (#731) codegens instance method with allocate codegens instance method with allocate codegens instance method with new and instance var codegens instance method with new and instance var overloads new and initialize, 3 (#2489) overloads new and initialize, 3 (#2489) inherits initialize inherits initialize overloads new and initialize, 1 (#2489) overloads new and initialize, 1 (#2489) evaluates initialize default value at the instance scope (1) (#731) evaluates initialize default value at the instance scope (1) (#731) codegens instance method with new codegens instance method with new finds new in superclass if no initialize is defined (1) finds new in superclass if no initialize is defined (1) inherits initialize for generic type inherits initialize for generic type finds new in superclass if no initialize is defined (2) finds new in superclass if no initialize is defined (2) finds super in deep hierarchy finds super in deep hierarchy evaluates initialize default value at the instance scope (3) (#731) evaluates initialize default value at the instance scope (3) (#731) defines new for module defines new for module overloads new and initialize, 2 (#2489) overloads new and initialize, 2 (#2489) evaluates initialize default value at the instance scope (4) (#731) evaluates initialize default value at the instance scope (4) (#731) can create Tuple with Tuple.new can create Tuple with Tuple.new can create Tuple with Tuple.new can create Tuple with Tuple.new can create Tuple with Tuple.new can create Tuple with Tuple.new can create Tuple with Tuple.new can create Tuple with Tuple.new can create Tuple with Tuple.new can create Tuple with Tuple.new finds new in superclass for Enum finds new in superclass for Enum can create Reference can create Reference .parse_args DIR with path DIR with path DIR = . DIR = . NAME DIR NAME DIR DIR (relative to home) DIR (relative to home) DIR (absolute) DIR (absolute) DIR DIR Semantic: metaclass types Class class types Class class can't reopen as module can't reopen as module types generic metaclass superclass types generic metaclass superclass types metaclass superclass types metaclass superclass types generic class metaclass types generic class metaclass types generic module metaclass types generic module metaclass types Reference metaclass types Reference metaclass types generic instance metaclass superclass types generic instance metaclass superclass subtyping relations between metaclasses generic classes (2) generic classes (2) generic classes (1) generic classes (1) non-generic classes non-generic classes virtual metaclass type with virtual type (#12628) virtual metaclass type with virtual type (#12628) generic modules (3) generic modules (3) generic modules (2) generic modules (2) generic classes (3) generic classes (3) non-generic modules non-generic modules generic modules (1) generic modules (1) types Object class types Object class types Object and Class metaclasses types Object and Class metaclasses can't reopen as struct can't reopen as struct Semantic: tuples types tuple with splats inside types tuple with splats inside accepts tuple covariance in array accepts tuple covariance in array can call [] on T can call [] on T merges two tuple types of same size merges two tuple types of same size doesn't crash on tuple in not executed block (#6718) doesn't crash on tuple in not executed block (#6718) can iterate T can iterate T #[](NumberLiteral) gives error when indexing out of range gives error when indexing out of range types, inbound index types, inbound index types, inbound index, nilable types, inbound index, nilable gives error when indexing out of range on empty tuple gives error when indexing out of range on empty tuple types, metaclass index types, metaclass index types, out of bound, nilable types, out of bound, nilable errors on named tuple too big errors on named tuple too big errors on recursive splat expansion (1) (#361) errors on recursive splat expansion (1) (#361) allows tuple covariance allows tuple covariance types tuple of one element types tuple of one element gives error when using named args on Tuple gives error when using named args on Tuple doesn't error if Tuple has no args doesn't error if Tuple has no args errors on recursive splat expansion (2) (#361) errors on recursive splat expansion (2) (#361) doesn't unify tuple metaclasses (#5384) doesn't unify tuple metaclasses (#5384) errors if non-tuple is splatted inside tuple (2) errors if non-tuple is splatted inside tuple (2) can name a tuple type can name a tuple type errors if using two splat indices on restriction errors if using two splat indices on restriction doesn't trigger recursive splat expansion error (#7164) doesn't trigger recursive splat expansion error (#7164) matches tuple with splat (#2932) matches tuple with splat (#2932) matches tuple with splat (2) (#2932) matches tuple with splat (2) (#2932) types tuple of one element and then two elements types tuple of one element and then two elements errors on tuple too big (#3816) errors on tuple too big (#3816) types T as a tuple of metaclasses types T as a tuple of metaclasses types tuple of three elements types tuple of three elements accept tuple in type restriction accept tuple in type restriction #[](RangeLiteral) types, begin-less, end-less types, begin-less, end-less types, begin-less types, begin-less types, inbound begin, end-less types, inbound begin, end-less types, out of bound begin, nilable types, out of bound begin, nilable types, inbound begin types, inbound begin gives error when begin index is out of range gives error when begin index is out of range types, exclusive range types, exclusive range types, inbound begin, nilable types, inbound begin, nilable types, metaclass index types, metaclass index #[](Path) works for tuple indexer works for tuple indexer works for named tuple indexer works for named tuple indexer errors on recursive splat expansion (#218) errors on recursive splat expansion (#218) errors if non-tuple is splatted inside tuple errors if non-tuple is splatted inside tuple Visibility modifiers allows invoking protected method from virtual type allows invoking protected method from virtual type errors if invoking protected method from top-level errors if invoking protected method from top-level allows invoking private method from the same class allows invoking private method from the same class allows invoking protected method from subclass (2) allows invoking protected method from subclass (2) allows invoking protected method from namespaced type to namespace allows invoking protected method from namespaced type to namespace allows setting visibility modifier to macro allows setting visibility modifier to macro allows invoking protected method between types in the same namespace when inheriting allows invoking protected method between types in the same namespace when inheriting handles virtual types (#8561) handles virtual types (#8561) 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 allows invoking private setter with self allows invoking private setter with self allows setting visibility modifier to macro that generates many methods (1) allows setting visibility modifier to macro that generates many methods (1) gives correct error on unknown call (#2838) gives correct error on unknown call (#2838) allows setting visibility modifier to macro that generates many methods (2) allows setting visibility modifier to macro that generates many methods (2) errors if invoking protected method from non-subclass errors if invoking protected method from non-subclass errors if applying visibility modifier to non-def or non-call errors if applying visibility modifier to non-def or non-call defines protected initialize (#7501) defines protected initialize (#7501) allows calling protected method from nested generic class (2) allows calling protected method from nested generic class (2) allows calling protected method from nested generic class (1) allows calling protected method from nested generic class (1) disallows invoking private method disallows invoking private method 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 invoking protected from instance to class allows invoking protected from instance to class allows invoking protected method from namespace to namespaced type allows invoking protected method from namespace to namespaced type automatically makes initialize be protected automatically makes initialize be protected Crystal::Repl::Interpreter types discards generic discards generic discards .class discards .class discards Path discards Path interprets class for virtual_type type interprets class for virtual_type type interprets path to type interprets path to type discards crystal_type_id discards crystal_type_id interprets crystal_type_id for non-nil interprets crystal_type_id for non-nil interprets class for virtual_type type (struct) interprets class for virtual_type type (struct) interprets class_crystal_instance_type_id interprets class_crystal_instance_type_id discards typeof discards typeof does class method on virtual metaclass casted to generic metaclass (#12302) does class method on virtual metaclass casted to generic metaclass (#12302) interprets class for module type (#12203) interprets class for module type (#12203) interprets crystal_type_id for nil interprets crystal_type_id for nil interprets crystal_type_id for virtual metaclass type (#12228) interprets crystal_type_id for virtual metaclass type (#12228) interprets class for non-union type interprets class for non-union type discards class for virtual_type type discards class for virtual_type type discards class for non-union type discards class for non-union type Semantic: class correctly types #680 correctly types #680 errors if inheriting Gen(self) and there's no self (#2890) errors if inheriting Gen(self) and there's no self (#2890) uses self as type var uses self as type var errors if reopening non-generic class as generic errors if reopening non-generic class as generic doesn't use initialize from base class doesn't use initialize from base class errors when creating Value errors when creating Value says no overload matches for class new says no overload matches for class new types as no return if calling method on generic class with subclasses (#6996) types as no return if calling method on generic class with subclasses (#6996) errors if 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 reports undefined method when method inside a class reports undefined method when method inside a class errors if using underscore in generic class errors if using underscore in generic class types instance variable types instance variable 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) says wrong number of arguments for abstract class new (2) says wrong number of arguments for abstract class new (2) reports unknown class when extending reports unknown class when extending correctly types #680 (2) correctly types #680 (2) inherits self (#2890) inherits self (#2890) can mark initialize as private can mark initialize as private can invoke method on abstract type without subclasses nor instances can invoke method on abstract type without subclasses nor instances types recursive type types recursive type errors when wrong arguments for new errors when wrong arguments for new errors if inherits from module errors if inherits from module reports uninitialized constant reports uninitialized constant errors if reopening generic class with different type vars (2) errors if reopening generic class with different type vars (2) doesn't lookup new in supermetaclass doesn't lookup new in supermetaclass errors if assigning superclass to declared instance var errors if assigning superclass to declared instance var errors if inherits from metaclass errors if inherits from metaclass types class inside class types class inside class errors if reading non-existent ivar errors if reading non-existent ivar errors if reading ivar from non-ivar container errors if reading ivar from non-ivar container can't use implicit initialize if defined in parent can't use implicit initialize if defined in parent types Const#new types Const#new types instance variable on getter types instance variable on getter 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) doesn't mark instance variable as nilable if calling another initialize doesn't mark instance variable as nilable if calling another initialize does automatic type inference of new for nested generic type does automatic type inference of new for nested generic type types virtual method of generic class types virtual method of generic class types class and subclass as one type types class and subclass as one type errors if reopening generic class with different splat index (2) errors if reopening generic class with different splat index (2) can invoke method on abstract generic type with subclasses but no instances can invoke method on abstract generic type with subclasses but no instances can invoke method on abstract generic type without subclasses nor instances can invoke method on abstract generic type without subclasses nor instances errors when creating Number errors when creating Number types Const#new#method types Const#new#method errors if reopening generic class with different splat index (3) errors if reopening generic class with different splat index (3) doesn't crash with top-level initialize (#2601) doesn't crash with top-level initialize (#2601) reports can't instantiate abstract class on new reports can't instantiate abstract class on new 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) inherits Gen(self) (#2890) inherits Gen(self) (#2890) reports can't instantiate abstract class on allocate reports can't instantiate abstract class on allocate infers generic type after instance was created with explicit type infers generic type after instance was created with explicit type doesn't lookup type in parents' namespaces, and lookups and in program doesn't lookup type in parents' namespaces, and lookups and in program types self inside method call without obj types self inside method call without obj errors if creating instance before typing instance variable errors if creating instance before typing instance variable allows declaring a variable in an initialize and using it allows declaring a variable in an initialize and using it hoists instance variable initializer hoists instance variable initializer reports superclass mismatch reports superclass mismatch 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 type vars errors if reopening generic class with different type vars allows using self in class scope allows using self in class scope errors if using read-instance-var with non-typed variable errors if using read-instance-var with non-typed variable inherits self twice (#5495) inherits self twice (#5495) reads an object instance var reads an object instance var errors if declares class inside if errors if declares class inside if reads a virtual type instance var reads a virtual type instance var allows instantiating generic class with number allows instantiating generic class with number allows defining classes inside modules or classes with :: allows defining classes inside modules or classes with :: reads an object instance var from a union type reads an object instance var from a union type types Const#allocate types Const#allocate finds in global scope if includes module finds in global scope if includes module types instance variable types instance variable uses self as type var uses self as type var does automatic type inference of new for generic types 2 does automatic type inference of new for generic types 2 doesn't error on new on abstract virtual type class doesn't error on new on abstract virtual type class types class and subclass as one type types class and subclass as one type can use short name for top-level type can use short name for top-level type preserves order of instance vars (#3050) preserves order of instance vars (#3050) 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 class and subclass as one type types class and subclass as one type reports undefined instance method reports undefined instance method uses number type var in class method uses number type var in class method doesn't mix classes on definition (#2352) doesn't mix classes on definition (#2352) types as no return if calling method on abstract generic class (#6996) types as no return if calling method on abstract generic class (#6996) does automatic inference of new for generic types does automatic inference of new for generic types types generic of generic type types generic of generic type says that instance vars are not allowed in metaclass says that instance vars are not allowed in metaclass types type var union types type var union reports wrong number of arguments for initialize reports wrong number of arguments for initialize can't reopen as struct can't reopen as struct doesn't use initialize from base class with virtual type doesn't use initialize from base class with virtual type Crystal::Repl::Interpreter closures does closure inside proc, capture proc argument does closure inside proc, capture proc argument gets ivar of self closured struct (#12341) gets ivar of self closured struct (#12341) does closure inside class variable initializer does closure inside class variable initializer does closure without args that captures and modifies two local variables does closure without args that captures and modifies two local variables does closure inside def does closure inside def does closure without args that captures and modifies one local variable does closure without args that captures and modifies one local variable sets ivar of self closured struct (#12341) sets ivar of self closured struct (#12341) does closure inside block does closure inside block closures self in proc literal (implicit self) closures self in proc literal (implicit self) closures def arguments closures def arguments does closure with pointerof local var does closure with pointerof local var closures struct and calls method on it closures struct and calls method on it closures block args after 8 bytes (the closure var) closures block args after 8 bytes (the closure var) does nested closure inside methods and blocks does nested closure inside methods and blocks passes closured struct instance var as self passes closured struct instance var as self does closure inside block, capture block arg does closure inside block, capture block arg closures closured block arg closures closured block arg does closure inside const does closure inside const does next inside captured block (#12226) does next inside captured block (#12226) reads self closured struct (#12341) reads self closured struct (#12341) does nested closure inside proc does nested closure inside proc does nested closure inside captured blocks does nested closure inside captured blocks does closure and accesses it inside block does closure and accesses it inside block closures self in proc literal closures self in proc literal closures self and modifies instance var closures self and modifies instance var does closure inside proc does closure inside proc does closure with two args that captures and modifies two local variables does closure with two args that captures and modifies two local variables doesn't mix local vars with closured vars doesn't mix local vars with closured vars Crystal::Playground::AgentInstrumentorTransformer instrument binary expressions instrument binary expressions instrument assignments in the rhs instrument assignments in the rhs instrument typeof instrument typeof instrument blocks and but non multi yields instrument blocks and but non multi yields instrument nested class defs instrument nested class defs instrument returns inside def instrument returns inside def instrument nested blocks unless in same line instrument nested blocks unless in same line instrument unary expressions instrument unary expressions do not instrument class initializing arguments do not instrument class initializing arguments instrument print with args instrument print with args instrument ivar with obj instrument ivar with obj instrument single statement var def instrument single statement var def instrument puts with args instrument puts with args do not instrument macro calls in class do not instrument macro calls in class instrument multi assignments in the rhs instrument multi assignments in the rhs instrument chained comparisons (#4663) instrument chained comparisons (#4663) instrument if statement instrument if statement do not instrument constants assignments do not instrument constants assignments instrument class defs instrument class defs do not instrument top level macro calls do not instrument top level macro calls instrument is_a? expressions instrument is_a? expressions instrument while statement instrument while statement instrument literals instrument literals do not instrument class/module declared macro do not instrument class/module declared macro instrument single variables expressions instrument single variables expressions instrument multi statement def instrument multi statement def instrument unless statement instrument unless statement allow visibility modifiers allow visibility modifiers instrument string interpolations instrument string interpolations instrument inside modules instrument inside modules instrument single statement def instrument single statement def instrument exceptions instrument exceptions do not instrument records class do not instrument records class instrument case statement instrument case statement instrument blocks and single yields instrument blocks and single yields instrument not expressions instrument not expressions instrument instance variable and class variables reads and writes instrument instance variable and class variables reads and writes instrument literals with expression names instrument literals with expression names ASTNode#to_s does to_s of "def foo(@[Foo] x : T = 1)\nend" does to_s of "def foo(@[Foo] x : T = 1)\nend" does to_s of "def foo(x : X, @[Foo] y : Y) forall X, Y\nend" does to_s of "def foo(x : X, @[Foo] y : Y) forall X, Y\nend" does to_s of "yield(1)" does to_s of "yield(1)" does to_s of "1 && (a = 2)" does to_s of "1 && (a = 2)" does to_s of "lib Foo::Bar\nend" does to_s of "lib Foo::Bar\nend" does to_s of "1.responds_to?(:to_s)" does to_s of "1.responds_to?(:to_s)" does to_s of "!(1 < 2)" does to_s of "!(1 < 2)" does to_s of "/\\//" does to_s of "/\\//" does to_s of "begin\n( 1)\nrescue\nend" does to_s of "begin\n( 1)\nrescue\nend" does to_s of "{{ foo }}" does to_s of "{{ foo }}" does to_s of "def foo(x y)\nend" does to_s of "def foo(x y)\nend" does to_s of "foo.%" does to_s of "foo.%" does to_s of "macro foo(x, *y)\nend" does to_s of "macro foo(x, *y)\nend" does to_s of "foo &.bar" does to_s of "foo &.bar" does to_s of "1_f64" does to_s of "1_f64" does to_s of "a.as?(Int32)" does to_s of "a.as?(Int32)" does to_s of "class Foo\n private def bar\n end\nend" does to_s of "class Foo\n private def bar\n end\nend" does to_s of "def foo(x, **args)\nend" does to_s of "def foo(x, **args)\nend" does to_s of "fun foo\nend" does to_s of "fun foo\nend" does to_s of "asm(\"nop\" :: \"a\"(1) :: \"volatile\")" does to_s of "asm(\"nop\" :: \"a\"(1) :: \"volatile\")" does to_s of "@foo.bar" does to_s of "@foo.bar" does to_s of "case 1; in .foo?; 2; end" does to_s of "case 1; in .foo?; 2; end" does to_s of "return true ? 1 : 2" does to_s of "return true ? 1 : 2" does to_s of "foo(bar)" does to_s of "foo(bar)" does to_s of "def foo(x, **args, &block : (_ -> _))\nend" does to_s of "def foo(x, **args, &block : (_ -> _))\nend" does to_s of "`\\n\\0`" does to_s of "`\\n\\0`" does to_s of "asm(\"nop\" ::: \"e\" : \"volatile\")" does to_s of "asm(\"nop\" ::: \"e\" : \"volatile\")" does to_s of "..3" does to_s of "..3" does to_s of "{% for foo in bar %}\n {{ if true\n foo\n bar\nend }}\n{% end %}" does to_s of "{% for foo in bar %}\n {{ if true\n foo\n bar\nend }}\n{% end %}" does to_s of "alias Foo::Bar = Void" does to_s of "alias Foo::Bar = Void" does to_s of "%x(whoami)" does to_s of "%x(whoami)" does to_s of "macro foo(@[Foo] &)\nend" does to_s of "macro foo(@[Foo] &)\nend" does to_s of "def foo(& : (->))\nend" does to_s of "def foo(& : (->))\nend" does to_s of "/ /" does to_s of "/ /" does to_s of "def foo(**x)\n yield\nend" does to_s of "def foo(**x)\n yield\nend" does to_s of "foo do\n begin\n bar\n end\nend" does to_s of "foo do\n begin\n bar\n end\nend" does to_s of "def foo(x)\n yield\nend" does to_s of "def foo(x)\n yield\nend" does to_s of "foo x: 1, y: 2, &.bar" does to_s of "foo x: 1, y: 2, &.bar" does to_s of "def foo(@[Foo] **args)\nend" does to_s of "def foo(@[Foo] **args)\nend" does to_s of "asm(\"bl trap\" :::: \"unwind\")" does to_s of "asm(\"bl trap\" :::: \"unwind\")" does to_s of "macro foo(**args)\nend" does to_s of "macro foo(**args)\nend" does to_s of "macro foo\n {% for foo in bar %}\n {{ foo }}\n {% end %}\nend" does to_s of "macro foo\n {% for foo in bar %}\n {{ foo }}\n {% end %}\nend" does to_s of "foo(a.as(Int32))" does to_s of "foo(a.as(Int32))" does to_s of "1 <= 2 <= 3" does to_s of "1 <= 2 <= 3" does to_s of "lib Foo\nend" does to_s of "lib Foo\nend" does to_s of "\"\#{(1 + 2)}\"" does to_s of "\"\#{(1 + 2)}\"" does to_s of "{ {1 => 2} }" does to_s of "{ {1 => 2} }" does to_s of "1.[]=" does to_s of "1.[]=" does to_s of "lib LibC\n fun getch = \"get.char\"\nend" does to_s of "lib LibC\n fun getch = \"get.char\"\nend" does to_s of "!a" does to_s of "!a" does to_s of "macro foo(&)\nend" does to_s of "macro foo(&)\nend" does to_s of "{ {1, 2, 3} }" does to_s of "{ {1, 2, 3} }" does to_s of "foo &.bar(1, 2, 3)" does to_s of "foo &.bar(1, 2, 3)" does to_s of "foo._bar" does to_s of "foo._bar" does to_s of "macro foo(*, var)\nend" does to_s of "macro foo(*, var)\nend" does to_s of "1.&*" does to_s of "1.&*" does to_s of "def foo(\"bar baz\" qux)\nend" does to_s of "def foo(\"bar baz\" qux)\nend" does to_s of "def foo(x, @[Foo] **args)\nend" does to_s of "def foo(x, @[Foo] **args)\nend" does to_s of "lib Foo\n struct Foo\n a : Void\n b : Void\n end\nend" does to_s of "lib Foo\n struct Foo\n a : Void\n b : Void\n end\nend" does to_s of "1.+(&block)" does to_s of "1.+(&block)" does to_s of "if true\n( 1)\nend" does to_s of "if true\n( 1)\nend" does to_s of "1.+(a: 2)" does to_s of "1.+(a: 2)" does to_s of "{% foo %}" does to_s of "{% foo %}" does to_s of "foo()" does to_s of "foo()" does to_s of "1.responds_to?(:\"&&\")" does to_s of "1.responds_to?(:\"&&\")" does to_s of "macro foo\n %bar = 1\nend" does to_s of "macro foo\n %bar = 1\nend" does to_s of "foo[x, y, a: 1, b: 2] = z" does to_s of "foo[x, y, a: 1, b: 2] = z" does to_s of "def foo(**args : T)\nend" does to_s of "def foo(**args : T)\nend" does to_s of "lib Foo\n union Foo\n a : Int\n b : Int32\n end\nend" does to_s of "lib Foo\n union Foo\n a : Int\n b : Int32\n end\nend" does to_s of "def foo(x : T = 1)\nend" does to_s of "def foo(x : T = 1)\nend" does to_s of "def foo(*args : _)\nend" does to_s of "def foo(*args : _)\nend" does to_s of "case 1; when .!; 2; when .< 0; 3; end" does to_s of "case 1; when .!; 2; when .< 0; 3; end" does to_s of "macro foo\n %bar{1, x} = 1\nend" does to_s of "macro foo\n %bar{1, x} = 1\nend" does to_s of "asm(\"nop\" ::::)" does to_s of "asm(\"nop\" ::::)" does to_s of "macro foo(x, **args)\nend" does to_s of "macro foo(x, **args)\nend" does to_s of "1.~(2)" does to_s of "1.~(2)" does to_s of "foo : A | (B -> C)" does to_s of "foo : A | (B -> C)" does to_s of "def foo(**args)\nend" does to_s of "def foo(**args)\nend" does to_s of "1.&**" does to_s of "1.&**" does to_s of "(a = 2) && 1" does to_s of "(a = 2) && 1" does to_s of "/hello world/" does to_s of "/hello world/" does to_s of "def foo\n yield\nend" does to_s of "def foo\n yield\nend" does to_s of "def foo(x, **args, &block)\nend" does to_s of "def foo(x, **args, &block)\nend" does to_s of "macro foo\n %bar = 1; end" does to_s of "macro foo\n %bar = 1; end" does to_s of "foo { |(x, (y, z))| x }" does to_s of "foo { |(x, (y, z))| x }" does to_s of "_foo.bar" does to_s of "_foo.bar" does to_s of "-> : Int32 do\nend" does to_s of "-> : Int32 do\nend" does to_s of "%r{\#{1}\\/\\0}" does to_s of "%r{\#{1}\\/\\0}" does to_s of "1.as(Int32)" does to_s of "1.as(Int32)" does to_s of "macro foo(@[Foo] **args)\nend" does to_s of "macro foo(@[Foo] **args)\nend" does to_s of "{\"foo bar\": 1}" does to_s of "{\"foo bar\": 1}" does to_s of "1 <= (2 <= 3)" does to_s of "1 <= (2 <= 3)" does to_s of "->::Foo::Bar.foo" does to_s of "->::Foo::Bar.foo" does to_s of "def foo(@[Foo] x y)\nend" does to_s of "def foo(@[Foo] x y)\nend" does to_s of "macro foo\n\\{%@type %}\nend" does to_s of "macro foo\n\\{%@type %}\nend" does to_s of "`\#{1}\\n\\0`" does to_s of "`\#{1}\\n\\0`" does to_s of "([] of T).foo" does to_s of "([] of T).foo" does to_s of "offsetof(Foo, @bar)" does to_s of "offsetof(Foo, @bar)" does to_s of "foo.*" does to_s of "foo.*" does to_s of "case 1; when .foo?; 2; end" does to_s of "case 1; when .foo?; 2; end" does to_s of "1.//(2, a: 3)" does to_s of "1.//(2, a: 3)" does to_s of "foo.nil?" does to_s of "foo.nil?" does to_s of "macro foo\n\\{{ @type }}\nend" does to_s of "macro foo\n\\{{ @type }}\nend" does to_s of "%r{\\/\\0}" does to_s of "%r{\\/\\0}" does to_s of "1.//(2, &block)" does to_s of "1.//(2, &block)" does to_s of "macro foo(*, __var var)\nend" does to_s of "macro foo(*, __var var)\nend" does to_s of "1.+ do\nend" does to_s of "1.+ do\nend" does to_s of "foo { |(x, y)| x }" does to_s of "foo { |(x, y)| x }" does to_s of "foo(1, (2 + 3), bar: (4 + 5))" does to_s of "foo(1, (2 + 3), bar: (4 + 5))" does to_s of "foo._bar(1)" does to_s of "foo._bar(1)" does to_s of "asm(\"nop\" :: \"c\"(3), \"d\"(4) ::)" does to_s of "asm(\"nop\" :: \"c\"(3), \"d\"(4) ::)" does to_s of "macro foo(*var)\nend" does to_s of "macro foo(*var)\nend" does to_s of "foo { |i| i.bar { i } }" does to_s of "foo { |i| i.bar { i } }" does to_s of `#{::String.interpolation(x)}` does to_s of `#{::String.interpolation(x)}` does to_s of "1.0" does to_s of "1.0" does to_s of "->::foo(Int32, String)" does to_s of "->::foo(Int32, String)" does to_s of "case 1\nwhen .[](2)\n 3\nwhen .[]=(4)\n 5\nend" does to_s of "case 1\nwhen .[](2)\n 3\nwhen .[]=(4)\n 5\nend" does to_s of "def foo(@[Foo] *args)\nend" does to_s of "def foo(@[Foo] *args)\nend" does to_s of "macro foo(x, @[Foo] *y)\nend" does to_s of "macro foo(x, @[Foo] *y)\nend" does to_s of "macro foo\n 123\nend" does to_s of "macro foo\n 123\nend" does to_s of "macro foo(@[Foo] x, @[Foo] *y)\nend" does to_s of "macro foo(@[Foo] x, @[Foo] *y)\nend" does to_s of "%r()imx" does to_s of "%r()imx" does to_s of "他.说 = \"你好\"" does to_s of "他.说 = \"你好\"" does to_s of "&+1" does to_s of "&+1" does to_s of "return begin\n 1\n 2\nend" does to_s of "return begin\n 1\n 2\nend" does to_s of "%(\"\#{foo}\")" does to_s of "%(\"\#{foo}\")" does to_s of "@[Foo(1, 2, a: 1, b: 2)]" does to_s of "@[Foo(1, 2, a: 1, b: 2)]" does to_s of "(1 + 2).as(Int32)" does to_s of "(1 + 2).as(Int32)" does to_s of "/\\s/" does to_s of "/\\s/" does to_s of "\"\\e\\0\\\"\"" does to_s of "\"\\e\\0\\\"\"" does to_s of "macro foo(@[Foo] id)\nend" does to_s of "macro foo(@[Foo] id)\nend" does to_s of "{% verbatim do %}\n 1{{ 2 }}\n 3{{ 4 }}\n{% end %}" does to_s of "{% verbatim do %}\n 1{{ 2 }}\n 3{{ 4 }}\n{% end %}" does to_s of "(1 || 1.1).as(Int32)" does to_s of "(1 || 1.1).as(Int32)" does to_s of ":\"{\"" does to_s of ":\"{\"" does to_s of "Foo()" does to_s of "Foo()" does to_s of "asm(\"nop\" :::: \"volatile\")" does to_s of "asm(\"nop\" :::: \"volatile\")" does to_s of "Foo(\"bar baz\": Int32)" does to_s of "Foo(\"bar baz\": Int32)" does to_s of "{(1 + 2)}" does to_s of "{(1 + 2)}" does to_s of "%r( )" does to_s of "%r( )" does to_s of "&-1" does to_s of "&-1" does to_s of "macro foo(x, @[Foo] **args)\nend" does to_s of "macro foo(x, @[Foo] **args)\nend" does to_s of "{foo: (1 + 2)}" does to_s of "{foo: (1 + 2)}" does to_s of "(1 <= 2) <= 3" does to_s of "(1 <= 2) <= 3" does to_s of "macro foo(&block)\nend" does to_s of "macro foo(&block)\nend" does to_s of "enum A : B\nend" does to_s of "enum A : B\nend" does to_s of "alias Foo = Void" does to_s of "alias Foo = Void" does to_s of "foo : (A | B).class" does to_s of "foo : (A | B).class" does to_s of "/hello world/imx" does to_s of "/hello world/imx" does to_s of "({} of K => V).foo" does to_s of "({} of K => V).foo" does to_s of "{% if foo %}\n foo_then\n{% else %}\n foo_else\n{% end %}" does to_s of "{% if foo %}\n foo_then\n{% else %}\n foo_else\n{% end %}" does to_s of "macro foo(@[Foo] &block)\nend" does to_s of "macro foo(@[Foo] &block)\nend" does to_s of "def foo(*args)\nend" does to_s of "def foo(*args)\nend" does to_s of "他.说(\"你好\")" does to_s of "他.说(\"你好\")" does to_s of "[(1 + 2)] of Int32" does to_s of "[(1 + 2)] of Int32" does to_s of "lib Foo\n FOO = 0\nend" does to_s of "lib Foo\n FOO = 0\nend" does to_s of "->(x : Int32, y : Bool) : Char do\n 'a'\nend" does to_s of "->(x : Int32, y : Bool) : Char do\n 'a'\nend" does to_s of "def foo(**options, &block)\nend" does to_s of "def foo(**options, &block)\nend" does to_s of "def foo(x : X, y : Y) forall X, Y\nend" does to_s of "def foo(x : X, y : Y) forall X, Y\nend" does to_s of "foo(\"bar baz\": 2)" does to_s of "foo(\"bar baz\": 2)" does to_s of "%r()" does to_s of "%r()" does to_s of "あ.い, う.え.お = 1, 2" does to_s of "あ.い, う.え.お = 1, 2" does to_s of "foo do |k, v|\n k.bar(1, 2, 3)\nend" does to_s of "foo do |k, v|\n k.bar(1, 2, 3)\nend" does to_s of "1.~(2) do\nend" does to_s of "1.~(2) do\nend" does to_s of "\"\#{1}\\0\"" does to_s of "\"\#{1}\\0\"" does to_s of "/a/x" does to_s of "/a/x" does to_s of "(1..)" does to_s of "(1..)" does to_s of "type(Foo = Void)" does to_s of "type(Foo = Void)" does to_s of "1e10_f64" does to_s of "1e10_f64" does to_s of "enum Foo\n A = 0\n B\nend" does to_s of "enum Foo\n A = 0\n B\nend" does to_s of "/\#{1 / 2}/" does to_s of "/\#{1 / 2}/" does to_s of "%r(/)" does to_s of "%r(/)" does to_s of "(1 & 2) & (3 | 4)" does to_s of "(1 & 2) & (3 | 4)" does to_s of "macro foo\n{% verbatim do %}1{% end %}\nend" does to_s of "macro foo\n{% verbatim do %}1{% end %}\nend" does to_s of "lib LibC\n fun getchar(Int, Float)\nend" does to_s of "lib LibC\n fun getchar(Int, Float)\nend" does to_s of "1 & 2 & (3 | 4)" does to_s of "1 & 2 & (3 | 4)" does to_s of "/\\?/" does to_s of "/\\?/" does to_s of "{ {foo: 2} }" does to_s of "{ {foo: 2} }" does to_s of "{% if foo %}\n foo_then\n{% end %}" does to_s of "{% if foo %}\n foo_then\n{% end %}" does to_s of "# doc\ndef foo\nend" does to_s of "# doc\ndef foo\nend" does to_s of "{(1 + 2) => (3 + 4)}" does to_s of "{(1 + 2) => (3 + 4)}" does to_s of "(1 + 2)..3" does to_s of "(1 + 2)..3" does to_s of "asm(\"nop\" : \"a\"(1), \"b\"(2) : \"c\"(3), \"d\"(4) : \"e\", \"f\" : \"volatile\", \"alignstack\", \"intel\")" does to_s of "asm(\"nop\" : \"a\"(1), \"b\"(2) : \"c\"(3), \"d\"(4) : \"e\", \"f\" : \"volatile\", \"alignstack\", \"intel\")" does to_s of "macro foo(x)\n yield\nend" does to_s of "macro foo(x)\n yield\nend" does to_s of "if (1 + 2\n3)\n 4\nend" does to_s of "if (1 + 2\n3)\n 4\nend" does to_s of x = (1 2 ) does to_s of x = (1 2 ) does to_s of "(~1).foo" does to_s of "(~1).foo" does to_s of "(1 + 2).as?(Int32)" does to_s of "(1 + 2).as?(Int32)" does to_s of "foo(&.==(2))" does to_s of "foo(&.==(2))" does to_s of "1_f32" does to_s of "1_f32" does to_s of "foo(3, &.*(2))" does to_s of "foo(3, &.*(2))" does to_s of "lib Foo\n A = Pointer(Void).new(0)\n struct B\n x : Void*\n y : Int[1]\n end\n fun c(Void*) : Char[2]*\nend" does to_s of "lib Foo\n A = Pointer(Void).new(0)\n struct B\n x : Void*\n y : Int[1]\n end\n fun c(Void*) : Char[2]*\nend" does to_s of "foo[x, y, a: 1, b: 2]" does to_s of "foo[x, y, a: 1, b: 2]" does to_s of "macro foo\n{{ @type }}\nend" does to_s of "macro foo\n{{ @type }}\nend" does to_s of "fun foo(a : Void, b : Void, ...) : Void\nend" does to_s of "fun foo(a : Void, b : Void, ...) : Void\nend" does to_s of ":foo" does to_s of ":foo" does to_s of "begin\n ()\nend" does to_s of "begin\n ()\nend" does to_s of "if 1\n begin\n 2\n end\nelse\n begin\n 3\n end\nend" does to_s of "if 1\n begin\n 2\n end\nelse\n begin\n 3\n end\nend" does to_s of "macro foo\n{% @type %}\nend" does to_s of "macro foo\n{% @type %}\nend" does to_s of "/\\(group\\)/" does to_s of "/\\(group\\)/" does to_s of "1.[](2) do\nend" does to_s of "1.[](2) do\nend" does to_s of "class Foo\n # doc\n def foo\n end\nend" does to_s of "class Foo\n # doc\n def foo\n end\nend" does to_s of "{ {1, 2, 3} => 4 }" does to_s of "{ {1, 2, 3} => 4 }" does to_s of "{% for foo in bar %}\n {{ foo }}\n{% end %}" does to_s of "{% for foo in bar %}\n {{ foo }}\n{% end %}" does to_s of "def foo(@[Foo] x, @[Bar] **args, @[Baz] &block)\nend" does to_s of "def foo(@[Foo] x, @[Bar] **args, @[Baz] &block)\nend" Code gen: named args calls with named arg and other args calls with named arg and other args calls new with named arg calls new with named arg overloads based on required named args overloads based on required named args calls twice with different types calls twice with different types 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 as object method calls with named arg as object method sends one regular argument as named argument sends one regular argument as named argument uses bare splat in new (2) uses bare splat in new (2) calls with named arg calls with named arg overloads based on required named args, with restrictions overloads based on required named args, with restrictions sends two regular arguments as named arguments in inverted position (2) sends two regular arguments as named arguments in inverted position (2) sends two regular arguments as named arguments sends two regular arguments as named arguments uses named args in dispatch uses named args in dispatch Semantic: pointer types realloc types realloc pointer of value error pointer of value error pointer malloc creates new type pointer malloc creates new type takes pointerof lib external var takes pointerof lib external var errors with non-matching generic value with value=, generic type (#10211) errors with non-matching generic value with value=, generic type (#10211) type pointer casting type pointer casting pointer of class raises error pointer of class raises error allows using pointer with subclass allows using pointer with subclass can assign nil to void pointer can assign nil to void pointer says undefined variable (#7556) says undefined variable (#7556) can pass any pointer to something expecting void* in lib call can pass any pointer to something expecting void* in lib call doesn't crash if pointerof expansion type has generic splat parameter (#11808) doesn't crash if pointerof expansion type has generic splat parameter (#11808) errors with non-matching generic value with value= (#10211) errors with non-matching generic value with value= (#10211) types pointer diff types pointer diff can't do Pointer.malloc without type var can't do Pointer.malloc without type var types pointer add types pointer add errors if doing Pointer.allocate errors if doing Pointer.allocate types pointer value types pointer value type pointer casting of object type type pointer casting of object type types pointer of constant types pointer of constant detects recursive pointerof expansion (3) detects recursive pointerof expansion (3) types int pointer types int pointer detects recursive pointerof expansion (4) detects recursive pointerof expansion (4) detects recursive pointerof expansion (#551) (#553) detects recursive pointerof expansion (#551) (#553) types pointer value on typedef types pointer value on typedef 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) detects recursive pointerof expansion (2) (#1654) detects recursive pointerof expansion (2) (#1654) can assign pointerof virtual type (#8216) can assign pointerof virtual type (#8216) types Pointer.malloc types Pointer.malloc 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 create pointer by address create pointer by address Call errors says no parameters named says no parameters named method signatures in error traces expands single splat argument expands single splat argument uses `T.method` instead of `T.class#method` uses `T.method` instead of `T.class#method` expands positional and double splat argument, more elements expands positional and double splat argument, more elements expands positional and single splat argument expands positional and single splat argument expands double splat argument, empty named tuple expands double splat argument, empty named tuple uses `T.method` instead of `T:module#method` uses `T.method` instead of `T:module#method` expands positional and single splat argument, empty tuple expands positional and single splat argument, empty tuple 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 double splat argument expands double splat argument expands positional and double splat argument expands positional and double splat argument expands positional and single splat argument, more elements expands positional and single splat argument, more elements expands single splat argument, empty tuple expands single splat argument, empty tuple includes positional and named argument includes positional and named argument expands single splat argument, more elements expands single splat argument, more elements includes named arguments includes named arguments includes named argument includes named argument 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 with two options says type mismatch for positional argument with two options says type mismatch for symbol against enum, named argument case says type mismatch for symbol against enum, named argument case says missing named arguments says missing named arguments replaces free variables in named argument replaces free variables in named argument says argument already specified says argument already specified says not expected to be invoked with a block says not 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 says missing named argument says missing named argument says type mismatch for named argument says type mismatch for named argument replaces generic type var in positional argument replaces generic type var in positional argument says no parameter named says no parameter 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 says type mismatch for positional argument with three options says type mismatch for positional argument with three options says type mismatch for positional argument says type mismatch for positional argument says expected to be invoked with a block says expected to be invoked with a block replaces generic type var in named argument replaces generic type var in named argument says wrong number of arguments (to few arguments) says wrong number of arguments (to few arguments) replaces free variables in positional argument replaces free variables in positional argument 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) errors on argument if more types are given than expected, shows all expected types errors on argument if more types are given than expected, shows all expected types says 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 Semantic: uninitialized disallows declaring var of type Int disallows declaring var of type Int uses virtual type for uninitialized (#8216) uses virtual type for uninitialized (#8216) errors if declaring generic type without type vars (with instance var) errors if declaring generic type without type vars (with instance var) disallows declaring var of type Float disallows declaring var of type Float errors if declares var and then assigns other type errors if declares var and then assigns other type errors if declaring variable multiple times with different types (#917) errors if declaring variable multiple times with different types (#917) declares as uninitialized and reads it declares as uninitialized and reads it disallows declaring var of type Reference disallows declaring var of type Reference declares as uninitialized declares as uninitialized works with uninitialized NoReturn (#3314) works with uninitialized NoReturn (#3314) disallows declaring var of type Object disallows declaring var of type Object disallows declaring var of type Enum disallows declaring var of type Enum disallows declaring var of type Value disallows declaring var of type Value disallows declaring var of type Struct disallows declaring var of type Struct can uninitialize variable outside initialize (#2828) can uninitialize variable outside initialize (#2828) disallows declaring var of type Number disallows declaring var of type Number errors if declaring generic type without type vars (with class var) errors if declaring generic type without type vars (with class var) has type (#3641) has type (#3641) declares an instance variable in initialize as uninitialized declares an instance variable in initialize as uninitialized disallows declaring var of type Class disallows declaring var of type Class can use uninitialized with class type (#2940) can use uninitialized with class type (#2940) can uninitialize variable outside initialize, generic (#2828) can uninitialize variable outside initialize, generic (#2828) unreachable finds method called from expanded macro finds method called from expanded macro finds class methods finds class methods finds method called from proc finds method called from proc ignores autogenerated enum predicates ignores autogenerated enum predicates finds methods called from reachable code finds methods called from reachable code finds method with free variable finds method with free variable finds method in abstract type finds method in abstract type finds instance methods finds instance methods finds shadowed method finds shadowed method finds virtual method finds virtual method finds method called from block finds method called from block finds instance methods in nested types finds instance methods in nested types tallies calls tallies calls finds method called from instance variable initializer finds method called from instance variable initializer finds method with `previous_def` finds method with `previous_def` finds top level methods finds top level methods finds method with `super` finds method with `super` finds methods in generic type finds methods in generic type finds abstract method finds abstract method finds initializer finds initializer finds yielding methods finds yielding methods finds methods with proc parameter finds methods with proc parameter finds method called from expanded macro expression finds method called from expanded macro expression Codegen: thread local works with class variable in main thread works with class variable in main thread works with class variable in main thread works with class variable in main thread works with class variable in main thread works with class variable in main thread works with class variable in main thread works with class variable in main thread works with class variable in main thread works with class variable in main thread compiles with class variable referenced from initializer compiles with class variable referenced from initializer compiles with class variable referenced from initializer compiles with class variable referenced from initializer compiles with class variable referenced from initializer compiles with class variable referenced from initializer compiles with class variable referenced from initializer compiles with class variable referenced from initializer compiles with class variable referenced from initializer compiles with class variable referenced from initializer works with class variables works with class variables works with class variables works with class variables works with class variables works with class variables works with class variables works with class variables works with class variables works with class variables Semantic: static array types static array new types static array new doesn't match other number type argument of static array (#1203) doesn't match other number type argument of static array (#1203) can match number type argument of static array (#1203) can match number type argument of static array (#1203) doesn't crash on offsetof (#8858) doesn't crash on offsetof (#8858) types static array new with size being a nested constant inside type declaration (#5426) types static array new with size being a nested constant inside type declaration (#5426) doesn't crash on sizeof (#8858) doesn't crash on sizeof (#8858) errors on negative static array size errors on negative static array size errors if trying to instantiate static array with N not an integer errors if trying to instantiate static array with N not an integer doesn't crash on instance_sizeof (#8858) doesn't crash on instance_sizeof (#8858) types static array with type as size types static array with type as size types static array new with size being a computed constant, and use N (bug) types static array new with size being a computed constant, and use N (bug) types static array with var declaration types static array with var declaration doesn't crash on restriction (#584) doesn't crash on restriction (#584) types static array new with size being a computed constant types static array new with size being a computed constant can match N type argument of static array (#1203) can match N type argument of static array (#1203) allows instantiating static array instance var in initialize of generic type allows instantiating static array instance var in initialize of generic type types static array new with size being a constant types static array new with size being a constant Crystal::Loader .default_search_paths LD_LIBRARY_PATH LD_LIBRARY_PATH DYLD_LIBRARY_PATH DYLD_LIBRARY_PATH dynlib validate that lib handles are properly closed validate that lib handles are properly closed #load_library? lookup in order lookup in order full path full path library name library name does not implicitly find dependencies does not implicitly find dependencies #load_file? finds function symbol finds function symbol does not find global symbols does not find global symbols .parse parses file paths parses file paths parses library names parses library names prepends directory paths before default search paths prepends directory paths before default search paths parses directory paths parses directory paths parses static parses static .read_ld_conf basic basic with include with include Semantic: double splat uses double splat in new uses double splat in new matches double splat on method with named args and regular args matches double splat on method with named args and regular args uses double splat restriction with concrete type uses double splat restriction with concrete type uses double splat restriction uses double splat restriction errors if duplicate keys on call side with double splat and named args errors if duplicate keys on call side with double splat and named args uses restriction on double splat, means all types must be that type uses restriction on double splat, means all types must be that type overloads based on double splat restriction overloads based on double splat restriction uses restriction on double splat, doesn't match with empty named tuple uses restriction on double splat, doesn't match with empty named tuple 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 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) 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 (1) double splats named argument into arguments (1) matches double splat on method (empty) matches double splat on method (empty) matches double splat with regular splat matches double splat with regular splat uses double splat restriction, matches empty uses double splat restriction, matches empty matches named args producing an empty double splat (#2678) matches named args producing an empty double splat (#2678) Code gen: named tuple codegens tuple nilable index (3) codegens tuple nilable index (3) codegens tuple index another order codegens tuple index another order merges two named tuple types with same keys but different types (1) merges two named tuple types with same keys but different types (1) upcasts named tuple union to compatible named tuple upcasts named tuple union to compatible named tuple doesn't crash when overload doesn't match doesn't crash when overload doesn't match assigns named tuple union to compatible named tuple assigns named tuple union to compatible named tuple assigns two same-size named tuple types to a same var (#3132) assigns two same-size named tuple types to a same var (#3132) assigns named tuple inside union to union with compatible named tuple assigns named tuple inside union to union with compatible named tuple passes named tuple to def passes named tuple to def codegens union of tuple of float with tuple of tuple of float codegens union of tuple of float with tuple of tuple of float codegens tuple nilable index (2) codegens tuple nilable index (2) upcasts named tuple inside compatible named tuple upcasts named tuple inside compatible named tuple accesses T and creates instance from it accesses T and creates instance from it downcasts union inside tuple to value (#3907) downcasts union inside tuple to value (#3907) assigns named tuple to compatible named tuple assigns named tuple to compatible named tuple gets keys at compile time (2) gets keys at compile time (2) codegens tuple nilable index (1) codegens tuple nilable index (1) allows named tuple covariance allows named tuple covariance upcasts named tuple inside union to union with compatible named tuple upcasts named tuple inside union to union with compatible named tuple gets size at compile time gets size at compile time provides T as a named tuple literal provides T as a named tuple literal doesn't error if NamedTuple includes a non-generic module (#10380) doesn't error if NamedTuple includes a non-generic module (#10380) gets keys at compile time (1) gets keys at compile time (1) 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 codegens tuple index codegens tuple index merges two named tuple types with same keys but different types (2) merges two named tuple types with same keys but different types (2) Crystal::FFI::CallInterface .variadic zero varargs zero varargs validates args size validates args size basic basic .new simple call simple call array array make struct make struct with args with args all primitive arg types all primitive arg types sum struct sum struct Normalize: def expands arg with default value after splat expands arg with default value after splat uses bare * uses bare * expands with one named arg that is the only one (2) expands with one named arg that is the only one (2) expands with magic constant with named arg with yield expands with magic constant with named arg with yield expands a def on request with default arguments that yields (external names) expands a def on request with default arguments that yields (external names) 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 splat arg, with body splat arg, with body default arg, without body default arg, without body default arg with restriction, with body default arg with restriction, with body default arg with restriction, without body default arg with restriction, without body default arg, with body default arg, with body splat arg, without body splat arg, without body expands a def with double splat and no args expands a def with double splat and no args expands with two named argument expands with two named argument expands a def on request with default arguments expands a def on request with default arguments 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 expands a def on request with default arguments that yields expands default value after splat index expands default value after splat index expands a def on request with default arguments and type restrictions expands a def on request with default arguments and type restrictions expands with named argument and yield expands with named argument and yield 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 external names (2) expands a def with external names (2) expands with magic constant expands with magic constant expands with splat expands with splat expands with magic constant with named arg expands with magic constant with named arg expands a def with double splat and two named args and regular args expands a def with double splat and two named args and regular args expands with more named arg which come in the correct order expands with more named arg which come in the correct order expands with one named arg that is the only one (1) expands with one named arg that is the only one (1) expands a new def with double splat and two named args and regular args expands a new def with double splat and two named args and regular args expands with splat and zero expands with splat and zero expands with magic constant specifying one when all are magic expands with magic constant specifying one when all are magic expands a def on request with default arguments (external names) expands a def on request with default arguments (external names) expands def with reserved external name (#6559) expands def with reserved external name (#6559) expands with magic constant specifying one when not all are magic expands with magic constant specifying one when not all are magic expands with splat and default argument expands with splat and default argument expands with splat with one arg before expands with splat with one arg before expands with named argument expands with named argument expands with two named argument and one not expands with two named argument and one not expands a def on request with default arguments (2) expands a def on request with default arguments (2) expands a def on request with default arguments and type restrictions (2) expands a def on request with default arguments and type restrictions (2) expands a def with double splat and two named args expands a def with double splat and two named args expands a def with external names (1) expands a def with external names (1) Semantic: primitives types a bool types a bool errors when comparing void (#225) errors when comparing void (#225) errors if @[Primitive] has no args errors if @[Primitive] has no args types char ord types char ord correctly types first hash from type vars (bug) correctly types first hash from type vars (bug) types 1 + 2 types 1 + 2 errors if @[Primitive] has non-symbol arg errors if @[Primitive] has non-symbol arg types an expression types an expression types nop types nop types a char types a char types a symbol types a symbol types va_arg primitive types va_arg primitive looks up return type in correct scope (#13652) looks up return type in correct scope (#13652) extends from Number and doesn't find >= method extends from Number and doesn't find >= method extends from Number and doesn't find + method extends from Number and doesn't find + method can invoke binary on primitive typedef (#614) can invoke binary on primitive typedef (#614) computes correct hash value type if it's a function literal (#320) computes correct hash value type if it's a function literal (#320) can invoke binary on primitive typedef (2) (#614) can invoke binary on primitive typedef (2) (#614) Slice.literal with element type errors if element type is not primitive int or float errors if element type is not primitive int or float types empty literal types empty literal errors if element is not number literal errors if element is not number literal errors if element is out of range errors if element is out of range types primitive int literal types primitive int literal types primitive float literal types primitive float literal allows @[Primitive] on method that has body allows @[Primitive] on method that has body errors if using instance variable inside primitive type errors if using instance variable inside primitive type types a string types a string types a int128 types a int128 types pointer of int types pointer of int can invoke cast on primitive typedef (#614) can invoke cast on primitive typedef (#614) types nil types nil extends from Number and doesn't find to_i method extends from Number and doesn't find to_i method types a float32 types a float32 types a int64 types a int64 types @[Primitive] method types @[Primitive] method Reference.pre_initialize types with virtual reference type types with virtual reference type errors on abstract type errors on abstract type errors on uninstantiated generic type errors on uninstantiated generic type types with reference type types with reference type types a float64 types a float64 types a uint128 types a uint128 types an int32 types an int32 Code gen: C ABI returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) returns struct between 64 and 128 bits (for real) promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) promotes variadic args (i16 to i32) (#9742) passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) passes struct less than 64 bits (for real) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) promotes variadic args (u16 to i32) (#9742) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) returns struct less than 64 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct bigger than 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct between 64 and 128 bits (for real) passes struct after many other args (for real) passes struct after many other args (for real) passes struct after many other args (for real) passes struct after many other args (for real) passes struct after many other args (for real) passes struct after many other args (for real) passes struct after many other args (for real) passes struct after many other args (for real) passes struct after many other args (for real) passes struct after many other args (for real) accepts large struct in a callback (for real) accepts large struct in a callback (for real) accepts large struct in a callback (for real) accepts large struct in a callback (for real) accepts large struct in a callback (for real) accepts large struct in a callback (for real) accepts large struct in a callback (for real) accepts large struct in a callback (for real) accepts large struct in a callback (for real) accepts large struct in a callback (for real) promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) promotes variadic args (u8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) promotes variadic args (i8 to i32) (#9742) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) passes struct after many other args when returning a large struct (sret return type) promotes variadic args (float to double) promotes variadic args (float to double) promotes variadic args (float to double) promotes variadic args (float to double) promotes variadic args (float to double) promotes variadic args (float to double) promotes variadic args (float to double) promotes variadic args (float to double) promotes variadic args (float to double) promotes variadic args (float to double) returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret returns struct bigger than 128 bits with sret Codegen: double splat double splats named argument with positional arguments double splats named argument with positional arguments matches double splat on method with named args and regular args matches double splat on method with named args and regular args double splats twice double splats twice removes literal types in all matches (#6239) removes literal types in all matches (#6239) matches double splat with regular splat matches double splat with regular splat matches double splat on method with named args matches double splat on method with named args double splats named argument with named args (2) double splats named argument with named args (2) double splats named argument into arguments (2) double splats named argument into arguments (2) double splats named argument with named args (1) double splats named argument with named args (1) evaluates double splat argument just once (#2677) evaluates double splat argument just once (#2677) double splats named argument into arguments (1) double splats named argument into arguments (1) Code gen: union type codegens union type when no obj codegens union type when no obj codegens union type when obj is union and arg is union codegens union type when obj is union and arg is union assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 assigns union to larger union when source is nilable 1 codegens union type when obj is not union but arg is codegens union type when obj is not union but arg is codegens union type when no obj and restrictions codegens union type when no obj and restrictions assigns union to union assigns union to union assigns union to union assigns union to union assigns union to union assigns union to union assigns union to union assigns union to union assigns union to union assigns union to union codegens if with same nested union codegens if with same nested union assigns union to larger union assigns union to larger union assigns union to larger union assigns union to larger union assigns union to larger union assigns union to larger union assigns union to larger union assigns union to larger union assigns union to larger union assigns union to larger union codegens union type for instance var codegens union type for instance var codegens union type as return value codegens union type as return value dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable dispatch call to object method on nilable sorts restrictions when there are unions sorts restrictions when there are unions assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 assigns union to larger union when source is nilable 2 codegens union type when obj is union and no args codegens union type when obj is union and no args provides T as a tuple literal provides T as a tuple literal codegens union type when obj union but arg is not codegens union type when obj union but arg is not codegens union to_s codegens union to_s codegens union to_s codegens union to_s codegens union to_s codegens union to_s codegens union to_s codegens union to_s codegens union to_s codegens union to_s Code gen: array literal spec creates custom generic array via alias (2) creates custom generic array via alias (2) creates typed array creates typed array creates typed array creates typed array creates typed array creates typed array creates typed array creates typed array creates typed array creates typed array creates custom generic array, with splats creates custom generic array, with splats assignment in array literal works assignment in array literal works assignment in array literal works assignment in array literal works assignment in array literal works assignment in array literal works assignment in array literal works assignment in array literal works assignment in array literal works assignment in array literal works creates custom generic array with type var creates custom generic array with type var assignment in array-like literal works assignment in array-like literal works assignment in array-like literal works assignment in array-like literal works assignment in array-like literal works assignment in array-like literal works assignment in array-like literal works assignment in array-like literal works assignment in array-like literal works assignment in array-like literal works creates custom generic array creates custom generic array creates custom non-generic array in module creates custom non-generic array in module creates custom generic array in module (#5684) creates custom generic array in module (#5684) creates custom non-generic array in nested module creates custom non-generic array in nested module creates custom generic array via alias creates custom generic array via alias creates custom non-generic array, with splats creates custom non-generic array, with splats creates custom non-generic array creates custom non-generic array Semantic: previous_def types previous def with named arguments, def has bare splat parameter (#8895) types previous def with named arguments, def has bare splat parameter (#8895) types previous def with explicit arguments types previous def with explicit arguments types previous def with forwarded arguments, different internal names (#8895) types previous def with forwarded arguments, different internal names (#8895) types previous def with named arguments, def has double splat parameter (#8895) types previous def with named arguments, def has double splat parameter (#8895) 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 with restrictions types previous def with restrictions types previous def when inside fun and forwards args types previous def when inside fun and forwards args says wrong number of arguments for previous_def (#1223) says wrong number of arguments for previous_def (#1223) 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 with named arguments, def has bare splat parameter (2) (#8895) types previous def with named arguments, def has bare splat parameter (2) (#8895) types previous def with forwarded arguments, def has parameters types previous def with forwarded arguments, def has parameters types previous def when inside fun types previous def when inside fun types previous def types previous def Code gen: automatic cast casts literal integer (Int32 -> Float64) casts literal integer (Int32 -> Float64) does multidispatch with automatic casting (2) (#8217) does multidispatch with automatic casting (2) (#8217) casts literal float (Float32 -> Float64) casts literal float (Float32 -> Float64) casts Symbol to Enum in ivar assignment casts Symbol to Enum in ivar assignment casts Int32 to Int64 in cvar type declaration casts Int32 to Int64 in cvar type declaration casts Symbol to Enum in ivar type declaration casts Symbol to Enum in ivar type declaration casts literal integer (Int32 -> Float32) casts literal integer (Int32 -> Float32) casts Int32 to Int64 in ivar type declaration in generic casts Int32 to Int64 in ivar type declaration in generic casts literal integer (Int32 -> Int64) casts literal integer (Int32 -> Int64) casts integer variable to larger type (#9565) casts integer variable to larger type (#9565) casts literal integer (Int64 -> Int32, ok) casts literal integer (Int64 -> Int32, ok) casts Int32 -> Int64 in arg restriction casts Int32 -> Int64 in arg restriction casts symbol literal to enum casts symbol literal to enum casts Int32 to Int64 in ivar type declaration casts Int32 to Int64 in ivar type declaration casts Int32 to Int64 in lvar assignment casts Int32 to Int64 in lvar assignment does multidispatch with automatic casting (1) (#8217) does multidispatch with automatic casting (1) (#8217) casts Int32 to Int64 in ivar assignment casts Int32 to Int64 in ivar assignment doesn't autocast number on union (#8655) doesn't autocast number on union (#8655) casts Int32 to Int64 in cvar assignment casts Int32 to Int64 in cvar assignment does multidispatch with automatic casting (3) does multidispatch with automatic casting (3) casts literal float (Float64 -> Float32) casts literal float (Float64 -> Float32) Semantic: responds_to? restricts other types inside if else restricts other types inside if else restricts virtual generic module to including types (#8334) restricts virtual generic module to including types (#8334) is bool is bool restricts virtual generic superclass to subtypes restricts virtual generic superclass to subtypes restricts type inside if scope 1 restricts type inside if scope 1 restricts in assignment restricts in assignment Crystal::Formatter formats "require \"foo\"\n\n@x : Int32\n\nclass Bar\nend" formats "require \"foo\"\n\n@x : Int32\n\nclass Bar\nend" formats "nil" formats "nil" formats "{1 => 2, 3 => 4}\n{5234234 => 234098234, 7 => 8}" formats "{1 => 2, 3 => 4}\n{5234234 => 234098234, 7 => 8}" formats "foo( 1 , 2 )" formats "foo( 1 , 2 )" formats "1.[]= do\nend" formats "1.[]= do\nend" formats "<<-HTML\n \#{1}x\n HTML" formats "<<-HTML\n \#{1}x\n HTML" formats "class X; annotation FooAnnotation ; end ; end" formats "class X; annotation FooAnnotation ; end ; end" formats "def foo\n1\n2\n# foo\nend" formats "def foo\n1\n2\n# foo\nend" formats "lib Foo\ntype Foo = Bar\nend" formats "lib Foo\ntype Foo = Bar\nend" formats "begin\n 1\n # Comment\n\n\nend" formats "begin\n 1\n # Comment\n\n\nend" formats "{% verbatim do %}{{1}} + {{2}}{% end %}" formats "{% verbatim do %}{{1}} + {{2}}{% end %}" formats " {{\n1 + 2 }}" formats " {{\n1 + 2 }}" formats "begin 0[1] rescue 2 end" formats "begin 0[1] rescue 2 end" formats "foo.\nbar" formats "foo.\nbar" formats "if a\n2\n3\nend" formats "if a\n2\n3\nend" formats "def foo(@x)\n\nrescue\nend" formats "def foo(@x)\n\nrescue\nend" formats "\"\#{\"foo\"}\"" formats "\"\#{\"foo\"}\"" formats "foo &.[]?" formats "foo &.[]?" formats "def foo(&: Int32)\nend" formats "def foo(&: Int32)\nend" formats "-> :: Foo . foo" formats "-> :: Foo . foo" formats "asm(\"a\" :: \"d\"(e)\n)" formats "asm(\"a\" :: \"d\"(e)\n)" formats "lib Foo\nfun foo(x : Int32,\ny : Float64) : Int32\nend" formats "lib Foo\nfun foo(x : Int32,\ny : Float64) : Int32\nend" formats "asm(\"nop\" ::: \"eax\" )" formats "asm(\"nop\" ::: \"eax\" )" formats "inner &.color=(@color)\n1" formats "inner &.color=(@color)\n1" formats "\"\#{foo = 1\n}\"" formats "\"\#{foo = 1\n}\"" formats "lib Foo\n fun foo(Int32) : Int32\nend" formats "lib Foo\n fun foo(Int32) : Int32\nend" formats "foo = 1\n->foo.bar=(Int32)" formats "foo = 1\n->foo.bar=(Int32)" formats "def foo(a,\n **b)\nend" formats "def foo(a,\n **b)\nend" formats "break 1, {2, 3}" formats "break 1, {2, 3}" formats "begin\n1 ? 2 : 3\nend" formats "begin\n1 ? 2 : 3\nend" formats "begin\n1\nrescue ex : Int32 \n3\nend" formats "begin\n1\nrescue ex : Int32 \n3\nend" formats "case 1 \n when .foo? \n 3 \n end" formats "case 1 \n when .foo? \n 3 \n end" formats "a = while 1\n2\nend" formats "a = while 1\n2\nend" formats "class Foo;end" formats "class Foo;end" formats "x : (A | B)" formats "x : (A | B)" formats "begin\n a\nend.b { }\nc" formats "begin\n a\nend.b { }\nc" formats "foo.bar += \n1" formats "foo.bar += \n1" formats "1.<=(2) { 3 }" formats "1.<=(2) { 3 }" formats "0u64" formats "0u64" formats "lib Foo\nfun foo : Int32\nend" formats "lib Foo\nfun foo : Int32\nend" formats "unless a\n2\nelse\n3\nend" formats "unless a\n2\nelse\n3\nend" formats "x : Int32 |\nString" formats "x : Int32 |\nString" formats "def +(x)\nend" formats "def +(x)\nend" formats "args.any? &.name.baz" formats "args.any? &.name.baz" formats "->{}" formats "->{}" formats "bar = foo(->{\n 1 + 2\n})" formats "bar = foo(->{\n 1 + 2\n})" formats "next *1 , *2" formats "next *1 , *2" formats "\"1\#{\"\#{\"2\"}\"}3\#{\"4\"}5\"" formats "\"1\#{\"\#{\"2\"}\"}3\#{\"4\"}5\"" formats "foo(/ /)" formats "foo(/ /)" formats "&+ 1" formats "&+ 1" formats "unless a\n # hello\n 2\nend" formats "unless a\n # hello\n 2\nend" formats "a = 1 if 1 == 2 ||\n 3 == 4\n" formats "a = 1 if 1 == 2 ||\n 3 == 4\n" formats "lib Foo\nfun foo(x : Int32, y : Float64) : Int32\nend" formats "lib Foo\nfun foo(x : Int32, y : Float64) : Int32\nend" formats "foo : (Array(String)?) | String" formats "foo : (Array(String)?) | String" formats "# Here is the doc of a method, and contains an example:\n#\n# ```\n# result = foo\n#\n# puts result\n# ```\ndef foo\n # ...\nend\n" formats "# Here is the doc of a method, and contains an example:\n#\n# ```\n# result = foo\n#\n# puts result\n# ```\ndef foo\n # ...\nend\n" formats "foo(\"b\#{1}\" \\\n\"baz\")" formats "foo(\"b\#{1}\" \\\n\"baz\")" formats "break 1" formats "break 1" formats "foo ((1) ? 2 : 3)" formats "foo ((1) ? 2 : 3)" formats "def foo(x : X) forall X , Y; end" formats "def foo(x : X) forall X , Y; end" formats " <<-HTML\n foo\nHTML" formats " <<-HTML\n foo\nHTML" formats "1 // 2" formats "1 // 2" formats "page= <<-HTML\n \#{1}foo\nHTML" formats "page= <<-HTML\n \#{1}foo\nHTML" formats "if 1\n[ 1 , 2 , 3 ]\nend" formats "if 1\n[ 1 , 2 , 3 ]\nend" formats "lib Foo\nfun foo() : Int32\nend" formats "lib Foo\nfun foo() : Int32\nend" formats "[1,\n2,\n3]" formats "[1,\n2,\n3]" formats "macro foo\n {% 1 + 2 %}\nend" formats "macro foo\n {% 1 + 2 %}\nend" formats "yield 1\n2" formats "yield 1\n2" formats "case / /\nwhen /x/, / /\n / /\nend" formats "case / /\nwhen /x/, / /\n / /\nend" formats "macro foo\n macro bar\n \\{% begin %}\n \\\\{% puts %}\n \\{% end %}\n end\nend" formats "macro foo\n macro bar\n \\{% begin %}\n \\\\{% puts %}\n \\{% end %}\n end\nend" formats "def foo(\n foo,\n @[MyAnn]\n &block\n); end" formats "def foo(\n foo,\n @[MyAnn]\n &block\n); end" formats "Foo::Bar?" formats "Foo::Bar?" 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 "class Foo ( *T, U )\nend" formats "class Foo ( *T, U )\nend" formats "1.>= { 3 }" formats "1.>= { 3 }" formats "{{ foo <<-X\nbar\nX\n}}" formats "{{ foo <<-X\nbar\nX\n}}" formats "foo &.bar.as(T)" formats "foo &.bar.as(T)" formats "->@@foo.foo=" formats "->@@foo.foo=" formats ":/" formats ":/" formats "1.!=(2) { 3 }" formats "1.!=(2) { 3 }" formats "1 # foo\n1234 # bar\n\n10 # bar" formats "1 # foo\n1234 # bar\n\n10 # bar" formats "{\n1 => 2 ,\n 3 => 4 }" formats "{\n1 => 2 ,\n 3 => 4 }" formats "def foo(\n @[MyAnn]\n bar\n); end" formats "def foo(\n @[MyAnn]\n bar\n); end" formats "begin\nend\n\n# a\n" formats "begin\nend\n\n# a\n" formats "if 1\nif 2\n3 # foo\nend\nend" formats "if 1\nif 2\n3 # foo\nend\nend" formats "[\n1,\n2,\n3]" formats "[\n1,\n2,\n3]" formats "x, y = <<-FOO, <<-BAR\n hello\n FOO\n world\n BAR" formats "x, y = <<-FOO, <<-BAR\n hello\n FOO\n world\n BAR" formats "def 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 "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 "%w(one two three)" formats "%w(one two three)" formats " {% begin %} 2 {% end %}" formats " {% begin %} 2 {% end %}" formats "1.===(2) { 3 }" formats "1.===(2) { 3 }" 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 "def foo(a, **b, # comment\n &block)\nend" formats "def foo(a, **b, # comment\n &block)\nend" formats "a &.b[c]?" formats "a &.b[c]?" formats "(())" formats "(())" formats "Hash{\n foo => <<-EOF,\n foo\n EOF\n}" formats "Hash{\n foo => <<-EOF,\n foo\n EOF\n}" formats "->@foo.foo=" formats "->@foo.foo=" formats " <<-EOF\n 1\n 2\n EOF" formats " <<-EOF\n 1\n 2\n EOF" 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 "@x[ 1 ] ||= 2" formats "@x[ 1 ] ||= 2" formats "lib Foo\n fun foo = bar(Int32) : Int32\nend" formats "lib Foo\n fun foo = bar(Int32) : Int32\nend" formats "1 > 2" formats "1 > 2" formats "a[b] ||= c" formats "a[b] ||= c" formats "Foo" formats "Foo" formats "foo(1 &+ \n2)" formats "foo(1 &+ \n2)" formats "foo &.bar.nil?" formats "foo &.bar.nil?" 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 "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 "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 "$? = 1" formats "$? = 1" formats "\"foo \#{bar}\" \\\n \"baz\"" formats "\"foo \#{bar}\" \\\n \"baz\"" formats "{% verbatim do %}\n <<-FOO\n hello \n FOO\n{% end %}" formats "{% verbatim do %}\n <<-FOO\n hello \n FOO\n{% end %}" formats "1 ; 2" formats "1 ; 2" formats "NamedTuple(\n a: Int32,)" formats "NamedTuple(\n a: Int32,)" formats "if 1\nelse\n2 # foo\nend" formats "if 1\nelse\n2 # foo\nend" formats "foo.as? Int32*" formats "foo.as? Int32*" formats "return *1" formats "return *1" formats "macro foo\n {{x}} <<-FOO\n hello \n FOO\nend" formats "macro foo\n {{x}} <<-FOO\n hello \n FOO\nend" formats "foo &.==(2)" formats "foo &.==(2)" formats "alias Foo::Bar =Baz" formats "alias Foo::Bar =Baz" formats ":&" formats ":&" formats "foo x, self // 1" formats "foo x, self // 1" formats "begin\n1\nensure\n2\nend" formats "begin\n1\nensure\n2\nend" formats "[1, 2,\n 3, 4]\n" formats "[1, 2,\n 3, 4]\n" formats "foo &.[]?(1, 2)" formats "foo &.[]?(1, 2)" formats "def foo(@[MyAnn] & : String -> Nil); end" formats "def foo(@[MyAnn] & : String -> Nil); end" formats "def foo ( @select) \n end" formats "def foo ( @select) \n end" formats "foo a: 1\nb" formats "foo a: 1\nb" formats "def foo (\nx ,\n y ) \n end" formats "def foo (\nx ,\n y ) \n end" formats "def foo ( @x, @y) \n end" formats "def foo ( @x, @y) \n end" formats "-> : {Int32} { String }" formats "-> : {Int32} { String }" formats "unless a\n2\nend" formats "unless a\n2\nend" formats "# foo\ndef foo\nend\n# bar\ndef bar\nend" formats "# foo\ndef foo\nend\n# bar\ndef bar\nend" formats "@[Foo(\n foo: 1\n)]\ndef foo\nend" formats "@[Foo(\n foo: 1\n)]\ndef foo\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 "macro foo\n {{1 + 2}}\nend" formats "macro foo\n {{1 + 2}}\nend" formats "10 ** a" formats "10 ** a" formats "-> : {Int32, String} {}" formats "-> : {Int32, String} {}" formats "foo[a, b: 2]" formats "foo[a, b: 2]" formats "{% if true %}\n <<-FOO\n hello \n FOO\n{% end %}" formats "{% if true %}\n <<-FOO\n hello \n FOO\n{% end %}" formats "x : {\"foo bar\": Int32}" formats "x : {\"foo bar\": Int32}" formats " {% if 1 %} 2 {% end %}" formats " {% if 1 %} 2 {% end %}" formats "foo(1, 2, {\n foo: 1,\n bar: 2,\n})" formats "foo(1, 2, {\n foo: 1,\n bar: 2,\n})" formats "lib Bar\n enum Foo\n A\n end\nend" formats "lib Bar\n enum Foo\n A\n end\nend" formats "macro foo\n {% for x in y %} 2 {% end %}\nend" formats "macro foo\n {% for x in y %} 2 {% end %}\nend" formats "is_a? Foo" formats "is_a? Foo" formats "x : (A -> B)?" formats "x : (A -> B)?" formats "x : (A -> B)" formats "x : (A -> B)" formats "1" formats "1" formats "if a\nif b\nelse\n4\nend\nend" formats "if a\nif b\nelse\n4\nend\nend" formats "def foo(**b, # comment\n &block)\nend" formats "def foo(**b, # comment\n &block)\nend" formats " {{\n1 + 2\n }}" formats " {{\n1 + 2\n }}" formats "while / /\nend" formats "while / /\nend" formats "select \n when foo \n 2 \n end" formats "select \n when foo \n 2 \n end" formats "def foo(a, **b : Int32)\nend" formats "def foo(a, **b : Int32)\nend" formats ":>>" formats ":>>" formats "next 1 , *2" formats "next 1 , *2" formats "enum Foo : Int32\nA = 1\nend" formats "enum Foo : Int32\nA = 1\nend" formats "1.[]=() { 3 }" formats "1.[]=() { 3 }" formats "long_variable_name = [\n {\n :foo => 1,\n },\n {\n :bar => 2,\n },\n]" formats "long_variable_name = [\n {\n :foo => 1,\n },\n {\n :bar => 2,\n },\n]" formats "1 ?\n 2 : \n 3" formats "1 ?\n 2 : \n 3" formats "1.<=() { 3 }" formats "1.<=() { 3 }" formats "a = %w(\n one two\n three four\n)" formats "a = %w(\n one two\n three four\n)" formats "foo self // 1" formats "foo self // 1" formats ":foo" formats ":foo" formats "a &.a.!" formats "a &.a.!" formats "-> :: Foo . foo=" formats "-> :: Foo . foo=" formats "foo.bar / 2\n" formats "foo.bar / 2\n" formats "long_variable_name = [\n {\n :foo => 1,\n }, {\n :bar => 2,\n },\n]" formats "long_variable_name = [\n {\n :foo => 1,\n }, {\n :bar => 2,\n },\n]" formats "def foo\n {{@type}}\nend" formats "def foo\n {{@type}}\nend" formats "{1 => 2,\n 3 => 4, # lala\n}\n" formats "{1 => 2,\n 3 => 4, # lala\n}\n" formats "macro foo( x , y )\nend" formats "macro foo( x , y )\nend" formats ":&-" formats ":&-" formats "yield *1 , *2" formats "yield *1 , *2" formats "foo(\n 1,\n) {\n 2\n}" formats "foo(\n 1,\n) {\n 2\n}" formats "Foo:: Bar" formats "Foo:: Bar" formats "foo.bar\n.baz" formats "foo.bar\n.baz" formats "def foo\n 1\n #\nrescue\nend" formats "def foo\n 1\n #\nrescue\nend" formats "foo(A |\nB |\nC)" formats "foo(A |\nB |\nC)" formats "x[ y ] += 1" formats "x[ y ] += 1" formats "def /(x)\n 1\nend" formats "def /(x)\n 1\nend" formats "->{}" formats "->{}" formats "Set { 1 , 2 }" formats "Set { 1 , 2 }" formats "break {1, 2}, 3" formats "break {1, 2}, 3" formats "lib Foo\n $foo : Int32 \nend" formats "lib Foo\n $foo : Int32 \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" 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 "module M\n @[MyAnn(\n 1\n\n )]\nend" formats "module M\n @[MyAnn(\n 1\n\n )]\nend" formats "foo &.bar.nil?()" formats "foo &.bar.nil?()" formats "<<-HTML\n \#{\"foo\"}\n HTML" formats "<<-HTML\n \#{\"foo\"}\n HTML" formats "next 1, {2, 3}" formats "next 1, {2, 3}" formats "lib Foo\nfun foo( ... ) : Int32\nend" formats "lib Foo\nfun foo( ... ) : Int32\nend" formats "macro foo\n {% if 1 %} 2 {% else %} 3 {% end %}\nend" formats "macro foo\n {% if 1 %} 2 {% else %} 3 {% end %}\nend" formats "asm(\"a\" :: : : \"volatile\")" formats "asm(\"a\" :: : : \"volatile\")" formats "`foo \#{ bar }`" formats "`foo \#{ bar }`" formats "begin\n 1 + \\\n 2\n 3\nend" formats "begin\n 1 + \\\n 2\n 3\nend" formats "foo\n.bar\n.baz" formats "foo\n.bar\n.baz" formats "break( *1 , *2 )" formats "break( *1 , *2 )" formats "foo &.bar do\n 1 + 2\nend" formats "foo &.bar do\n 1 + 2\nend" formats "def foo : (A, B) ->\n nil\nend" formats "def foo : (A, B) ->\n nil\nend" 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 "alias X = ((Y, Z) ->)" formats "alias X = ((Y, Z) ->)" formats "1 / 2" formats "1 / 2" formats "def foo( x , & block : Int32 )\nend" formats "def foo( x , & block : Int32 )\nend" formats "x : Int32 = 1" formats "x : Int32 = 1" formats "def foo # bar\n # baz\nend" formats "def foo # bar\n # baz\nend" formats "macro flags\n {% if 1 %}{{1}}a{{2}}{% end %}\\\nend" formats "macro flags\n {% if 1 %}{{1}}a{{2}}{% end %}\\\nend" formats "foo(\n a: 1,\n b: 2,\n )\n" formats "foo(\n a: 1,\n b: 2,\n )\n" formats "def execute\n begin\n 1\n ensure\n 2\n end\n 3\nend" formats "def execute\n begin\n 1\n ensure\n 2\n end\n 3\nend" formats "Foo::Bar(T, U?)?" formats "Foo::Bar(T, U?)?" formats "foo.bar &.baz( 1 , 2 )" formats "foo.bar &.baz( 1 , 2 )" formats "macro foo\n {% for x in y %}\\ 2 {% end %}\\\nend" formats "macro foo\n {% for x in y %}\\ 2 {% end %}\\\nend" formats "def foo ( @@select) \n end" formats "def foo ( @@select) \n end" formats "# Hello\n#\n# ```cr\n# 1\n# ```\n# Bye" formats "# Hello\n#\n# ```cr\n# 1\n# ```\n# Bye" formats "def foo(**a,)\n 1\nend" formats "def foo(**a,)\n 1\nend" formats "$0" formats "$0" formats "<<-FOO\nfoo\n1\nFOO" formats "<<-FOO\nfoo\n1\nFOO" formats "begin\n1\n2\n3\nend" formats "begin\n1\n2\n3\nend" formats "foo.bar(1) # comment\n .baz" formats "foo.bar(1) # comment\n .baz" formats "macro foo\n {% if 1 %} 2 {% end %}\nend" formats "macro foo\n {% if 1 %} 2 {% end %}\nend" formats "true" formats "true" formats "[c.x]\n .foo" formats "[c.x]\n .foo" formats "case 1\nend" formats "case 1\nend" formats "abstract def foo\nabstract def bar" formats "abstract def foo\nabstract def bar" formats " {{ 1 + 2 }}" formats " {{ 1 + 2 }}" formats "foo &.bar.as?(T)" formats "foo &.bar.as?(T)" formats "{ \"foo\" => 1 }" formats "{ \"foo\" => 1 }" formats "def foo\na = bar do\n1\nend\nend" formats "def foo\na = bar do\n1\nend\nend" formats "if # some comment\n 2 # another\n 3 # final \n end # end " formats "if # some comment\n 2 # another\n 3 # final \n end # end " formats "def foo( @[MyAnn] v ); end" formats "def foo( @[MyAnn] v ); end" formats "a = 1\n;\nb = 2" formats "a = 1\n;\nb = 2" formats "a = foo &.bar do\n 1 + 2\nend" formats "a = foo &.bar do\n 1 + 2\nend" formats "if 1;\n2;\nelse;\n3;\nend" formats "if 1;\n2;\nelse;\n3;\nend" formats "class Foo\n # ```\n # 1\n # ```\nend\n" formats "class Foo\n # ```\n # 1\n # ```\nend\n" formats "foo &.>=(2)" formats "foo &.>=(2)" formats "10/a" formats "10/a" formats "def foo(x)\n {% if true %}\n # comment\n Foo = 1\n B = 2\n {% end %}\nend" formats "def foo(x)\n {% if true %}\n # comment\n Foo = 1\n B = 2\n {% end %}\nend" formats "foo(bar(\n 1,\n 2,\n))" formats "foo(bar(\n 1,\n 2,\n))" formats "foo : StaticArray(Foo, 12)[34]" formats "foo : StaticArray(Foo, 12)[34]" formats "\"hel\nlo\"" formats "\"hel\nlo\"" formats "break( 1 )" formats "break( 1 )" formats "{% begin %}\n \"\n foo\"\n{% end %}" formats "{% begin %}\n \"\n foo\"\n{% end %}" formats "if 1\n2\nelsif\n3\n4\nelse\n6\nend" formats "if 1\n2\nelsif\n3\n4\nelse\n6\nend" formats "->foo!" formats "->foo!" formats "foo {;;1}" formats "foo {;;1}" formats "foo 1,\na: 1,\nb: 2,\nc: 3" formats "foo 1,\na: 1,\nb: 2,\nc: 3" formats "->( x )\n:\nInt32 { }" formats "->( x )\n:\nInt32 { }" formats "class Foo\nx = 1\nend" formats "class Foo\nx = 1\nend" formats " <<-HTML\n \#{1} \#{2}\n HTML" formats " <<-HTML\n \#{1} \#{2}\n HTML" formats "1 unless 2" formats "1 unless 2" formats "module Moo ( T )\nend" formats "module Moo ( T )\nend" formats "1 ensure 2" formats "1 ensure 2" formats "def foo(x = __FILE__ )\nend" formats "def foo(x = __FILE__ )\nend" formats "def a\n {\n 1, # x\n # y\n }\nend" formats "def a\n {\n 1, # x\n # y\n }\nend" formats "if 1\n2\n3\n# foo\nend" formats "if 1\n2\n3\n# foo\nend" formats "while 1;\n2; end" formats "while 1;\n2; end" formats "1 && (\n 2 || 3\n)" formats "1 && (\n 2 || 3\n)" formats "\"hel\\nlo\"" formats "\"hel\\nlo\"" 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 "begin\n begin\n a\n # b\n end\nend" formats "begin\n begin\n a\n # b\n end\nend" formats "long_variable_name = [1, 2, 3, # foo\n 4, 5, 6]" formats "long_variable_name = [1, 2, 3, # foo\n 4, 5, 6]" formats "1 if 2\n# foo\n3" formats "1 if 2\n# foo\n3" formats "yield (1).foo" formats "yield (1).foo" formats "->( ){ x }" formats "->( ){ x }" formats "lib Foo\n fun foo =\n bar : Void\nend" formats "lib Foo\n fun foo =\n bar : Void\nend" formats "break( 1 , 2 )" formats "break( 1 , 2 )" formats "foo . bar" formats "foo . bar" formats "def foo(x, **z, &block)\nend" formats "def foo(x, **z, &block)\nend" formats "# ```\n# macro foo\n# 1\n# end\n# ```\n" formats "# ```\n# macro foo\n# 1\n# end\n# ```\n" formats ":|" formats ":|" formats "if / /\nend" formats "if / /\nend" formats "{\n variables => true,\n query => <<-HEREDOC,\n foo\n HEREDOC\n}" formats "{\n variables => true,\n query => <<-HEREDOC,\n foo\n HEREDOC\n}" formats "foo(&.bar)" formats "foo(&.bar)" formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar\n); end" formats "def foo(\n @[MyAnn]\n @[MyAnn]\n bar\n); end" formats "1 + \\\n2 + \\\n3" formats "1 + \\\n2 + \\\n3" formats "class Foo\ndef foo\n1\nensure\n2\nend\nend" formats "class Foo\ndef foo\n1\nensure\n2\nend\nend" formats "def foo(\n @[MyAnn]\n bar\n); end" formats "def foo(\n @[MyAnn]\n bar\n); end" formats "foo = 1\n->foo.[]=(Int32)" formats "foo = 1\n->foo.[]=(Int32)" formats "+ 1" formats "+ 1" formats "macro foo\n %foo{x.id+2}\nend" formats "macro foo\n %foo{x.id+2}\nend" formats "lib Foo\nunion Foo\nend\nend" formats "lib Foo\nunion Foo\nend\nend" formats "def foo ( @x) \n end" formats "def foo ( @x) \n end" formats "\"foo \#{ __DIR__ }\"" formats "\"foo \#{ __DIR__ }\"" formats "&- 1" formats "&- 1" formats "x : {A, B, }" formats "x : {A, B, }" formats "<<-HTML\n \#{1}x\n y\n HTML" formats "<<-HTML\n \#{1}x\n y\n HTML" 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(@[AnnOne] @[AnnTwo] &block : Int32 -> ); end" formats "def foo(@[AnnOne] @[AnnTwo] &block : Int32 -> ); end" formats "0i64" formats "0i64" formats "foo((1..3))" formats "foo((1..3))" formats "module Foo ( U, *T ); 1; end" formats "module Foo ( U, *T ); 1; end" formats "if 1\n2\nelsif\n3\n4\nend" formats "if 1\n2\nelsif\n3\n4\nend" formats "case 1\nwhen 2\n 3\n # foo\nelse\n 4\n # bar\nend" formats "case 1\nwhen 2\n 3\n # foo\nelse\n 4\n # bar\nend" formats "10 / a" formats "10 / a" formats "alias Foo = Bar" formats "alias Foo = Bar" formats "[\n # foo\n] of String" formats "[\n # foo\n] of String" formats "A = 10\nFOO = 123\nBARBAZ = 1234\n" formats "A = 10\nFOO = 123\nBARBAZ = 1234\n" formats "foo &.bar( 1 , 2 )" formats "foo &.bar( 1 , 2 )" formats "{ {1 => 2} }" formats "{ {1 => 2} }" formats "'\\n'" formats "'\\n'" formats "case\nelse\n 1\nend" formats "case\nelse\n 1\nend" formats "-> :: foo=" formats "-> :: foo=" formats "(\n a = 1\n a\n)" formats "(\n a = 1\n a\n)" formats "if 1\n2\nelsif\n3\n4\nelsif 5\n6\nend" formats "if 1\n2\nelsif\n3\n4\nelsif 5\n6\nend" formats "begin\n 1\nend\n\n1\n" formats "begin\n 1\nend\n\n1\n" formats "foo(\n 1, 2)" formats "foo(\n 1, 2)" formats "include Foo" formats "include Foo" formats "\n# hello\n\n1" formats "\n# hello\n\n1" formats "10 // a" formats "10 // a" formats "{/ / => / /, / / => / /}" formats "{/ / => / /, / / => / /}" formats "as? Foo" formats "as? Foo" formats "private getter foo" formats "private getter foo" formats "$~" formats "$~" formats "class Foo ( T )\nend" formats "class Foo ( T )\nend" formats "::StaticArray(T)" formats "::StaticArray(T)" formats "unless a\nelse\n2\nend" formats "unless a\nelse\n2\nend" formats "a = \"\n\"\n1 # 1\n12 # 2\n" formats "a = \"\n\"\n1 # 1\n12 # 2\n" 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 "def foo\n 1\n #\n\n\nrescue\nend" formats "def foo\n 1\n #\n\n\nrescue\nend" formats "foo (1).bar" formats "foo (1).bar" formats "<<-FOO\nbarfoobar\nFOO" formats "<<-FOO\nbarfoobar\nFOO" formats "def foo ( x = 1 ) \n end" formats "def foo ( x = 1 ) \n end" formats "{ } of A => B" formats "{ } of A => B" formats "next 1 , 2" formats "next 1 , 2" formats " <<-EOF\n 1\nEOF" formats " <<-EOF\n 1\nEOF" formats "select \n when foo ; 2 \n end" formats "select \n when foo ; 2 \n end" formats "foo(1, 2,)" formats "foo(1, 2,)" formats "def foo( x , * y )\nend" formats "def foo( x , * y )\nend" formats "あ.い, う.え.お = 1, 2" formats "あ.い, う.え.お = 1, 2" formats "def foo(@[MyAnn] v); end" formats "def foo(@[MyAnn] v); end" formats "def foo(x) : Int32 # bar\n # baz\nend" formats "def foo(x) : Int32 # bar\n # baz\nend" formats "foo { | a, ( _ , c ) | a + c }" formats "foo { | a, ( _ , c ) | a + c }" formats "a = [\n1,\n2]" formats "a = [\n1,\n2]" formats "[\n 1, 2, # foo\n 3, 4,\n]" formats "[\n 1, 2, # foo\n 3, 4,\n]" formats "case 1 \n when 2 ; 3 \n end" formats "case 1 \n when 2 ; 3 \n end" 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 "foo[bar.baz]\n .qux" formats "foo[bar.baz]\n .qux" formats "foo({\nbar: 1,\n})" formats "foo({\nbar: 1,\n})" formats "\n# hello\n1" formats "\n# hello\n1" formats "with foo yield bar" formats "with foo yield bar" formats "foo.bar do\n baz\n .b\nend" formats "foo.bar do\n baz\n .b\nend" formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\#{foo}\\v\\f\\e\"" formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\#{foo}\\v\\f\\e\"" formats "foo\n .bar\n .baz(\n 1\n )" formats "foo\n .bar\n .baz(\n 1\n )" formats "->Foo.foo!" formats "->Foo.foo!" formats "a = / /" formats "a = / /" formats "next *1 ,2" formats "next *1 ,2" formats "#### ###" formats "#### ###" formats "def run\n\nrescue\n 2\n 3\nend" formats "def run\n\nrescue\n 2\n 3\nend" formats "bar do\n call(foo <<-X\n bar\n X\n )\nend" formats "bar do\n call(foo <<-X\n bar\n X\n )\nend" formats "lib Foo\n fun foo = \"bar\"(Int32) : Int32\nend" formats "lib Foo\n fun foo = \"bar\"(Int32) : Int32\nend" formats "\"foo\#{\"bar\"} Baz \#{\"qux\"} \"" formats "\"foo\#{\"bar\"} Baz \#{\"qux\"} \"" formats "def foo( x , & block : Int32->Float64)\nend" formats "def foo( x , & block : Int32->Float64)\nend" formats "a , b = 1 , 2" formats "a , b = 1 , 2" formats "1.== do\nend" formats "1.== do\nend" formats "break { {1, 2}, {3, 4} }" formats "break { {1, 2}, {3, 4} }" formats "[\n] of \n Foo " formats "[\n] of \n Foo " formats "def foo(\n **a\n)\n 1\nend" formats "def foo(\n **a\n)\n 1\nend" formats "1*2" formats "1*2" formats "if 1\n node.is_a?(T)\nend" formats "if 1\n node.is_a?(T)\nend" formats "Union(Foo::Bar?, Baz?, Qux(T, U?))" formats "Union(Foo::Bar?, Baz?, Qux(T, U?))" formats "-> :: Foo . foo?" formats "-> :: Foo . foo?" formats "return( 1 )" formats "return( 1 )" formats "a = if 1\n2\nelse\n3\nend" formats "a = if 1\n2\nelse\n3\nend" formats "\"\#{\"\#{foo}\"}\"" formats "\"\#{\"\#{foo}\"}\"" formats "<<-HTML\n \#{__FILE__}\n HTML" formats "<<-HTML\n \#{__FILE__}\n HTML" formats "a = if 1\n2\nelsif 3\n4\nend" formats "a = if 1\n2\nelsif 3\n4\nend" formats "select # some comment\nwhen bar\n break\nend" formats "select # some comment\nwhen bar\n break\nend" formats "{\n <<-KEY => 1,\n key\n KEY\n}" formats "{\n <<-KEY => 1,\n key\n KEY\n}" formats "1\n.as?(Int32)" formats "1\n.as?(Int32)" formats "! 1" formats "! 1" formats "1\n.." formats "1\n.." formats "macro foo\n {{ 1 + 2 }}\\\n 1\n end" formats "macro foo\n {{ 1 + 2 }}\\\n 1\n 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 "foo &.[a] = 1" formats "foo &.[a] = 1" formats "asm(\n # the assembly template string, following the\n # syntax for LLVM's integrated assembler\n \"nop\" : # output operands\n\"=r\"(foo), \"=r\"(bar) : # input operands\n\"r\"(1), \"r\"(baz) : # names of clobbered registers\n\"eax\", \"memory\" : # optional flags, corresponding to the LLVM IR\n # sideeffect / alignstack / inteldialect / unwind attributes\n\"volatile\", \"alignstack\", \"intel\", \"unwind\"\n)" formats "asm(\n # the assembly template string, following the\n # syntax for LLVM's integrated assembler\n \"nop\" : # output operands\n\"=r\"(foo), \"=r\"(bar) : # input operands\n\"r\"(1), \"r\"(baz) : # names of clobbered registers\n\"eax\", \"memory\" : # optional flags, corresponding to the LLVM IR\n # sideeffect / alignstack / inteldialect / unwind attributes\n\"volatile\", \"alignstack\", \"intel\", \"unwind\"\n)" formats "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 "def foo=(x)\nend" formats "def foo=(x)\nend" formats "class Bar\nprotected def foo(x)\na=b(c)\nend\nend" formats "class Bar\nprotected def foo(x)\na=b(c)\nend\nend" formats "foo(\n 1, 2,\n&block)" formats "foo(\n 1, 2,\n&block)" formats "NamedTuple()" formats "NamedTuple()" formats "return {1, 2}, 3" formats "return {1, 2}, 3" formats "begin; 1; end" formats "begin; 1; end" formats "<<-HTML\n \#{\"foo\"}\n \#{\"bar\"}\n HTML" formats "<<-HTML\n \#{\"foo\"}\n \#{\"bar\"}\n HTML" formats "foo(baz1 do\nend)" formats "foo(baz1 do\nend)" formats "foo(//, //)" formats "foo(//, //)" formats "[1,\n2,\n3\n]" formats "[1,\n2,\n3\n]" formats "lib Foo\nfun foo(x : Int32, ... ) : Int32\nend" formats "lib Foo\nfun foo(x : Int32, ... ) : Int32\nend" formats "return *1 , *2" formats "return *1 , *2" formats "def foo(x)\n self // x\nend" formats "def foo(x)\n self // x\nend" formats "[\n1,\n\n2]" formats "[\n1,\n\n2]" formats "select\n# when foo\nwhen bar\n break\nend" formats "select\n# when foo\nwhen bar\n break\nend" formats "sizeof( Int32 )" formats "sizeof( Int32 )" formats "<<-FOO\nFOO" formats "<<-FOO\nFOO" formats "macro foo\nend" formats "macro foo\nend" formats "begin\n array[\n 0 # Zero\n ]\nend" formats "begin\n array[\n 0 # Zero\n ]\nend" formats "{ 1 => 2 , 3 => 4 }" formats "{ 1 => 2 , 3 => 4 }" formats "foo 1, # comment\n do\n end" formats "foo 1, # comment\n do\n end" formats "{ \"foo\": 1 }" formats "{ \"foo\": 1 }" formats "->@@foo.foo" formats "->@@foo.foo" formats "getter foo # comment\n\ndef foo\nend" formats "getter foo # comment\n\ndef foo\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 foo(\n **a # comment\n)\n 1\nend" formats "def foo(\n **a # comment\n)\n 1\nend" formats "<<-FOO\nfoobar\nFOO" formats "<<-FOO\nfoobar\nFOO" formats "if 1\nbegin\n2\nensure\n3\nend\nend" formats "if 1\nbegin\n2\nensure\n3\nend\nend" formats "(1 .. )" formats "(1 .. )" formats ":\"foo\"" formats ":\"foo\"" formats "def foo\n2 # foo\nend" formats "def foo\n2 # foo\nend" formats "def foo(x @y)\nend" formats "def foo(x @y)\nend" formats "def foo ( x , y , ) \n end" formats "def foo ( x , y , ) \n end" 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 "x.try &.[] 123" formats "x.try &.[] 123" formats "{ {% begin %}1{% end %}, nil }" formats "{ {% begin %}1{% end %}, nil }" formats "def foo(@[MyAnn] &block); end" formats "def foo(@[MyAnn] &block); end" formats "foo(1, # foo\n &.bar)" formats "foo(1, # foo\n &.bar)" formats "break { {1, 2}, {3, 4} }, 5" formats "break { {1, 2}, {3, 4} }, 5" formats "foo &.[]=(1, 2)" formats "foo &.[]=(1, 2)" formats "page= <<-HTML\n foo\nHTML" formats "page= <<-HTML\n foo\nHTML" 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 " [ 1 , 2 , 3 ] " formats " [ 1 , 2 , 3 ] " formats "while 1\n# nothing\nend" formats "while 1\n# nothing\nend" formats "def foo\n\n1\n\nend" formats "def foo\n\n1\n\nend" formats "foo &.as(T).bar" formats "foo &.as(T).bar" formats "foo(a: //, b: //)" formats "foo(a: //, b: //)" formats "alias Foo=Bar" formats "alias Foo=Bar" formats "@[::Foo::Bar]" formats "@[::Foo::Bar]" formats " <<-HTML\n hello \n world \n HTML" formats " <<-HTML\n hello \n world \n HTML" formats "{1, 2, 3}" formats "{1, 2, 3}" formats "def foo ( x ) \n end" formats "def foo ( x ) \n end" 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 "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 "if 1\n2 && 3\nend" formats "if 1\n2 && 3\nend" formats "alias A = (B)" formats "alias A = (B)" formats "return 1" formats "return 1" formats "1.== { 3 }" formats "1.== { 3 }" formats "extend Foo" formats "extend Foo" assert assert formats "a = b = 1\na, b =\n b, a" formats "a = b = 1\na, b =\n b, a" formats "begin\n array[\n 0, # Zero\n ]\nend" formats "begin\n array[\n 0, # Zero\n ]\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 "x = uninitialized Int32" formats "x = uninitialized Int32" formats "1.!= do\nend" formats "1.!= do\nend" formats "0_u64" formats "0_u64" formats "->@@foo.foo?" formats "->@@foo.foo?" formats "def foo\n@x = uninitialized Int32\nend" formats "def foo\n@x = uninitialized Int32\nend" formats "alias Foo::Bar=Baz" formats "alias Foo::Bar=Baz" formats "::Tuple(T)" formats "::Tuple(T)" formats "foo a , b , x: 1" formats "foo a , b , x: 1" formats "macro foo\n 1 + 2\nend" formats "macro foo\n 1 + 2\nend" formats "lib Foo\n fun bar = Bar\nend" formats "lib Foo\n fun bar = Bar\nend" formats "def foo ( &@block) \n end" formats "def foo ( &@block) \n end" formats "require \"foo\"" formats "require \"foo\"" formats "10//a" formats "10//a" formats "while 1 # foo\nend" formats "while 1 # foo\nend" formats "1\n2 \n # foo" formats "1\n2 \n # foo" formats "lib Foo\n fun foo =\n \"bar\"(Int32) : Int32\nend" formats "lib Foo\n fun foo =\n \"bar\"(Int32) : Int32\nend" formats "a.b &.[c]?\n1" formats "a.b &.[c]?\n1" formats "if 1\n {% for x in y %} {% end %}\nend" formats "if 1\n {% for x in y %} {% end %}\nend" formats "->{\nx\n}" formats "->{\nx\n}" formats "break 1 , 2" formats "break 1 , 2" formats "def foo(\"bar baz\" qux)\nend" formats "def foo(\"bar baz\" qux)\nend" formats "if 1\n [\n 1,\n ].none?\nend" formats "if 1\n [\n 1,\n ].none?\nend" formats "def foo(&block: Int32)\nend" formats "def foo(&block: Int32)\nend" formats "foo &.@bar" formats "foo &.@bar" formats "a = foo(bar(\n 1,\n 2,\n))" formats "a = foo(bar(\n 1,\n 2,\n))" formats "a &.b.c.as(C)" formats "a &.b.c.as(C)" formats "as Foo" formats "as Foo" formats "select \n when foo then 2 \n end" formats "select \n when foo then 2 \n end" formats "begin\n1\nrescue ex\n3\nelse\n4\nend" formats "begin\n1\nrescue ex\n3\nelse\n4\nend" formats "return {1, 2}, {3, 4}" formats "return {1, 2}, {3, 4}" 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 "1.[]=(2) { 3 }" formats "1.[]=(2) { 3 }" formats "macro foo\n 1 + 2 \n end" formats "macro foo\n 1 + 2 \n end" formats "asm(\n# foo\n\"nop\"\n# bar\n)" formats "asm(\n# foo\n\"nop\"\n# bar\n)" formats "if a\nelse\n2\nend" formats "if a\nelse\n2\nend" formats "def foo ( x : Int32 ) \n end" formats "def foo ( x : Int32 ) \n end" formats "foo do # a\n # b\n bar\nend" formats "foo do # a\n # b\n bar\nend" formats "{% if true %}\n # x\n # y\n{% end %}" formats "{% if true %}\n # x\n # y\n{% end %}" formats "foo(\n 1,\n # 2,\n # 3,\n)" formats "foo(\n 1,\n # 2,\n # 3,\n)" formats "def foo(**z, &block)\nend" formats "def foo(**z, &block)\nend" formats "foo &.bar" formats "foo &.bar" formats "case 1\nwhen a; 2\nelse; b\nend" formats "case 1\nwhen a; 2\nelse; b\nend" formats "unless a\n2\nelse\nend" formats "unless a\n2\nelse\nend" formats "foo( )" formats "foo( )" formats "-> : Int32* {}" formats "-> : Int32* {}" formats "[] of Foo" formats "[] of Foo" formats "if 1;\n2; end" formats "if 1;\n2; end" formats "foo(\n <<-HERE,\n hello\n HERE\n 1,\n)" formats "foo(\n <<-HERE,\n hello\n HERE\n 1,\n)" formats "foo.bar=(2)\n1" formats "foo.bar=(2)\n1" formats "Foo( * T, { * A ,*\n B } )" formats "Foo( * T, { * A ,*\n B } )" formats "foo = 1\n->foo.[](Int32)" formats "foo = 1\n->foo.[](Int32)" formats "{ {% for x in 1..2 %}3{% end %}, nil }" formats "{ {% for x in 1..2 %}3{% end %}, nil }" formats "# foo\na = 1 # bar" formats "# foo\na = 1 # bar" formats "{% if 1 %}\n 2\n{% end %}\ndef foo\nend" formats "{% if 1 %}\n 2\n{% end %}\ndef foo\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 @select) \n end" formats "def foo ( bar @select) \n end" formats "1 + \\\n2" formats "1 + \\\n2" formats "foo(\n # foo\n1,\n\n # bar\n2, \n)" formats "foo(\n # foo\n1,\n\n # bar\n2, \n)" formats "a = 1;;; b = 2" formats "a = 1;;; b = 2" formats "@[Foo]\ndef foo\nend" formats "@[Foo]\ndef foo\nend" formats "return 1, {2, 3}" formats "return 1, {2, 3}" formats "def foo(x : self ?) \n end" formats "def foo(x : self ?) \n end" formats "x\n# foo\n\n# bar" formats "x\n# foo\n\n# bar" formats "class Foo\n@x : Int32\nend" formats "class Foo\n@x : Int32\nend" formats "{ 1 => 2 ,\n\n 3 => 4 }" formats "{ 1 => 2 ,\n\n 3 => 4 }" formats "foo 1,\n2" formats "foo 1,\n2" formats "1&+2&*3" formats "1&+2&*3" formats "case 1 \n when 2 then 3 \n end" formats "case 1 \n when 2 then 3 \n end" formats "1 + # foo\n2" formats "1 + # foo\n2" formats "class Foo\n def foo\n # nothing\n end\nend" formats "class Foo\n def foo\n # nothing\n end\nend" formats "{% if z %}\n 1\n{% end %}\n\ndef foo\n z =\n 123 + # foo\n 4 # bar\n\n 1\nend" formats "{% if z %}\n 1\n{% end %}\n\ndef foo\n z =\n 123 + # foo\n 4 # bar\n\n 1\nend" formats "bar do\n foo <<-X\n bar\n X\nend" formats "bar do\n foo <<-X\n bar\n X\nend" formats "def foo ( x , y ) \n end" formats "def foo ( x , y ) \n end" formats "-> : Int32[1] {}" formats "-> : Int32[1] {}" formats "lib Foo\n fun foo = bar(Int32) : Int32\nend" formats "lib Foo\n fun foo = bar(Int32) : Int32\nend" formats "foo(\n1,\n 2 \n)" formats "foo(\n1,\n 2 \n)" formats "foo({% verbatim do %}{{1}} + {{2}}{% end %})" formats "foo({% verbatim do %}{{1}} + {{2}}{% end %})" formats "->\n:\nInt32\n{\n}" formats "->\n:\nInt32\n{\n}" formats "1 # foo\n/ 1 /" formats "1 # foo\n/ 1 /" 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 "module Moo \n\n 1 \n\nend" formats "module Moo \n\n 1 \n\nend" formats "def foo(x) # bar\n # baz\nend" formats "def foo(x) # bar\n # baz\nend" formats "yield 1" formats "yield 1" formats "foo.bar.baz\n.qux" formats "foo.bar.baz\n.qux" formats "break *1 ,2" formats "break *1 ,2" formats "foo do \n x \n end" formats "foo do \n x \n end" formats "foo = 1\n->foo.foo=" formats "foo = 1\n->foo.foo=" formats "foo = [1, [2,\n 3],\n 4]" formats "foo = [1, [2,\n 3],\n 4]" formats "return 1 , 2" formats "return 1 , 2" formats "fun foo(x : Int32) : Int32\n 1\nend" formats "fun foo(x : Int32) : Int32\n 1\nend" formats ":<<" formats ":<<" formats "yield( 1 , 2 )" formats "yield( 1 , 2 )" formats "foo &.is_a?(T)" formats "foo &.is_a?(T)" formats "->Foo.foo?" formats "->Foo.foo?" formats "lib Foo\n $foo = hello : Int32 \nend" formats "lib Foo\n $foo = hello : Int32 \nend" formats "->{}" formats "->{}" formats "next { {1, 2}, {3, 4} }" formats "next { {1, 2}, {3, 4} }" formats "begin\n1\nrescue ex\n3\nend" formats "begin\n1\nrescue ex\n3\nend" formats " _ , *_ ,\na.foo ,a.bar = 1 , 2,3" formats " _ , *_ ,\na.foo ,a.bar = 1 , 2,3" formats "@[ Foo(foo: 1) ]\ndef foo\nend" formats "@[ Foo(foo: 1) ]\ndef foo\nend" formats "->{ x }" formats "->{ x }" 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 "break { 1 , 2 }" formats "break { 1 , 2 }" formats "foo &.bar.is_a?(Baz)" formats "foo &.bar.is_a?(Baz)" formats "[foo <<-X\nbar\nX\n]" formats "[foo <<-X\nbar\nX\n]" formats "a-1" formats "a-1" formats "yield *1" formats "yield *1" formats "foo &.bar" formats "foo &.bar" formats "foo.%(bar)" formats "foo.%(bar)" formats "foo(self // 1)" formats "foo(self // 1)" 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 "\"\#{ # foo\n foo = 1\n}\"" formats "\"\#{ # foo\n foo = 1\n}\"" 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 "foo.as? ( Int32* )" formats "foo.as? ( Int32* )" formats "def foo(a, &@b)\nend" formats "def foo(a, &@b)\nend" formats "1.>=(2) { 3 }" formats "1.>=(2) { 3 }" formats "->() do x end" formats "->() do x end" formats "String?" formats "String?" formats "def foo \n end" formats "def foo \n end" formats "Foo:: Bar" formats "Foo:: Bar" formats "a = foo(bar([\n 1,\n]))" formats "a = foo(bar([\n 1,\n]))" formats "@[ Foo ]\ndef foo\nend" formats "@[ Foo ]\ndef foo\nend" formats "break *1 , *2" formats "break *1 , *2" formats "%r(foo \#{ bar })" formats "%r(foo \#{ bar })" 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 "def foo(a,\n *b)\nend" formats "def foo(a,\n *b)\nend" formats "[1, 2, 3, ]" formats "[1, 2, 3, ]" formats "macro foo()\n {% if 1 %} 2 {% end %}\nend" formats "macro foo()\n {% if 1 %} 2 {% end %}\nend" formats "<<-FOO\nfoo\nfoo\nFOO" formats "<<-FOO\nfoo\nfoo\nFOO" formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1),\n\"c\"(2) )" formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1),\n\"c\"(2) )" formats "while true\n1\n\n# foo\nend" formats "while true\n1\n\n# foo\nend" formats "1 if 2\n# foo" formats "1 if 2\n# foo" formats "a = 1\ncase\nwhen 2\nelse\n a /= 3\nend" formats "a = 1\ncase\nwhen 2\nelse\n a /= 3\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 "x = <<-EOF\n 1\nEOF" formats "x = <<-EOF\n 1\nEOF" formats "~ 1" formats "~ 1" formats "lib Foo\nalias Foo = Bar -> \n$a : Int32\nend" formats "lib Foo\nalias Foo = Bar -> \n$a : Int32\nend" formats "a &.b.as(C)" formats "a &.b.as(C)" formats "foo.bar = \n1" formats "foo.bar = \n1" formats "if a\n2\nelse\n3\nend" formats "if a\n2\nelse\n3\nend" formats "@a" formats "@a" formats "a+1" formats "a+1" 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 "[\n <<-EOF,\n foo\n EOF\n]" formats "[\n <<-EOF,\n foo\n EOF\n]" formats "foo.bar(&.% baz)" formats "foo.bar(&.% baz)" formats "<<-HTML\n hello \n world \n HTML" formats "<<-HTML\n hello \n world \n HTML" formats "getter foo : Int32 # comment\n\ndef foo\nend" formats "getter foo : Int32 # comment\n\ndef foo\nend" formats "alignof( Int32 )" formats "alignof( Int32 )" formats "`foo`" formats "`foo`" formats "{\n \"foo\": 1,\n \"babraz\": 2,\n}" formats "{\n \"foo\": 1,\n \"babraz\": 2,\n}" formats "foo(\n 1,\n 2\n) do\n 1\nend" formats "foo(\n 1,\n 2\n) do\n 1\nend" formats "yield 1 , *2" formats "yield 1 , *2" formats "::Tuple()" formats "::Tuple()" formats "foo a , **b" formats "foo a , **b" formats "1 ? 2 : 3" formats "1 ? 2 : 3" formats "{%\n if 1\n 2\n end\n%}" formats "{%\n if 1\n 2\n end\n%}" formats "if 1\n1\n\n# foo\nend" formats "if 1\n1\n\n# foo\nend" formats "foo (1; 2)" formats "foo (1; 2)" 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 "::foo(1, 2)" formats "::foo(1, 2)" formats "String???" formats "String???" formats "X(typeof(begin\n e.is_a?(Y)\nend))" formats "X(typeof(begin\n e.is_a?(Y)\nend))" formats "case / /\nwhen / /, /x/\n / /\nend" formats "case / /\nwhen / /, /x/\n / /\nend" formats "macro foo\n def bar \n end \n end" formats "macro foo\n def bar \n end \n end" formats "a = case 1\n when 1, # 1\n 2, # 2\n 3 # 3\n 1\n end" formats "a = case 1\n when 1, # 1\n 2, # 2\n 3 # 3\n 1\n end" formats "def foo(@[AnnOne] @[AnnTwo] v); end" formats "def foo(@[AnnOne] @[AnnTwo] v); 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 "def foo(\n @[MyAnn]\n @[MyAnn]\n bar,\n\n @[MyAnn] @[MyAnn] baz,\n\n @[MyAnn]\n @[MyAnn]\n biz\n); end" formats "[\n 1, # foo\n 3,\n]" formats "[\n 1, # foo\n 3,\n]" formats "foo.as ( Int32* )" formats "foo.as ( Int32* )" formats "{ A: 1 }\n" formats "{ A: 1 }\n" formats "a || b" formats "a || b" 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 "if 1\nelse\n# nothing\nend" formats "if 1\nelse\n# nothing\nend" formats "def foo(a : T) forall T \n #\nend" formats "def foo(a : T) forall T \n #\nend" formats "\"\#{\n foo = 1}\"" formats "\"\#{\n foo = 1}\"" formats "(size - 1).downto(0) do |i|\n yield @buffer[i]\nend" formats "(size - 1).downto(0) do |i|\n yield @buffer[i]\nend" formats "<<-FOO\nfoo\nFOO" formats "<<-FOO\nfoo\nFOO" formats "until 1\n2\nend" formats "until 1\n2\nend" formats "{% foo <<-X\nbar\nX\n%}" formats "{% foo <<-X\nbar\nX\n%}" formats "module Foo\n 1 # bar\nend\n\nmodule Foo\n 1\n # bar\nend\n\nmodule Foo\n 1\n\n # bar\nend\n\nmodule Foo\n 1\n 2\n # bar\nend\n\nmodule Foo\n 1\n 2\n\n # bar\nend\n\nif 1\n 1\n # bar\nend\n\nif 1\n 1\n\n # bar\nend\n\n1\n2\n# foo\n\n1\n2\n\n# foo\n" formats "module Foo\n 1 # bar\nend\n\nmodule Foo\n 1\n # bar\nend\n\nmodule Foo\n 1\n\n # bar\nend\n\nmodule Foo\n 1\n 2\n # bar\nend\n\nmodule Foo\n 1\n 2\n\n # bar\nend\n\nif 1\n 1\n # bar\nend\n\nif 1\n 1\n\n # bar\nend\n\n1\n2\n# foo\n\n1\n2\n\n# foo\n" formats "lib Bar\n enum Foo\n end\nend" formats "lib Bar\n enum Foo\n end\nend" formats "->(x : Int32) {}" formats "->(x : Int32) {}" 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 "def foo: Int32\nend" formats "def foo: Int32\nend" formats "$?.bar" formats "$?.bar" formats "unless a\nunless b\n3\nelse\n4\nend\nend" formats "unless a\nunless b\n3\nelse\n4\nend\nend" formats "->(){}" formats "->(){}" 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 "<<-FOO\nbarfoo\nFOO" formats "<<-FOO\nbarfoo\nFOO" formats "ary.size = (1).to_i" formats "ary.size = (1).to_i" formats "foo &.nil?()" formats "foo &.nil?()" formats "foo &.responds_to?(:foo).bar" formats "foo &.responds_to?(:foo).bar" formats "lib Foo\nstruct Foo\nx : Int32\ny : Float64\nend\nend" formats "lib Foo\nstruct Foo\nx : Int32\ny : Float64\nend\nend" formats "macro foo\n {%1 + 2%}\\\nend" formats "macro foo\n {%1 + 2%}\\\nend" formats "foo &.bar.responds_to?(:baz)" formats "foo &.bar.responds_to?(:baz)" formats "begin\n1\nrescue ex : Int32 | Float64 \n3\nend" formats "begin\n1\nrescue ex : Int32 | Float64 \n3\nend" formats "macro foo\n \\{\nend" formats "macro foo\n \\{\nend" formats "-> :: foo?" formats "-> :: foo?" formats "foo : self? | A" formats "foo : self? | A" 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 "foo\n .foo1(bar\n .bar1\n .bar2)" formats "foo\n .foo1(bar\n .bar1\n .bar2)" formats " * a = 1 " formats " * a = 1 " formats ":-" formats ":-" formats "foo[]" formats "foo[]" formats "struct Foo \n\n 1 \n\nend" formats "struct Foo \n\n 1 \n\nend" formats "if a\n2\nelse\nend" formats "if a\n2\nelse\nend" formats "1.>=() { 3 }" formats "1.>=() { 3 }" formats "Union(Int32, String)?" formats "Union(Int32, String)?" formats "{\n a: 1,\n foo: bar,\n}" formats "{\n a: 1,\n foo: bar,\n}" 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 "asm(\"nop\"\n: \"a\"(0) )" formats "asm(\"nop\"\n: \"a\"(0) )" formats "<<-HTML\n hello \n HTML" formats "<<-HTML\n hello \n HTML" formats "->do\nend" formats "->do\nend" formats "next { 1 , 2 }" formats "next { 1 , 2 }" formats "- 1" formats "- 1" formats "if 1;\n2;\nelsif 3;\n4;\nend" formats "if 1;\n2;\nelsif 3;\n4;\nend" formats "{\n \"a\" => 1, \"b\" => 2,\n \"foo\" => 3, \"bar\" => 4,\n \"coconio\" => 5, \"lala\" => 6,\n}\n" formats "{\n \"a\" => 1, \"b\" => 2,\n \"foo\" => 3, \"bar\" => 4,\n \"coconio\" => 5, \"lala\" => 6,\n}\n" formats "asm(\"nop\" ::: \"eax\" , \"ebx\" : \"volatile\" , \"alignstack\" )" formats "asm(\"nop\" ::: \"eax\" , \"ebx\" : \"volatile\" , \"alignstack\" )" formats "foo.[]" formats "foo.[]" formats "->do\nx\nend" formats "->do\nx\nend" formats "foo.bar(&.baz)" formats "foo.bar(&.baz)" formats "{% if true %}\n # x\n{% end %}" formats "{% if true %}\n # x\n{% end %}" formats "foo &bar" formats "foo &bar" 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 "asm(\"a\" ::: \"f\"\n)" formats "asm(\"a\" ::: \"f\"\n)" formats "return { 1 , 2 }" formats "return { 1 , 2 }" formats "-> : Int32 {}" formats "-> : Int32 {}" formats "{ 1 => 2 ,\n 3 => 4 }" formats "{ 1 => 2 ,\n 3 => 4 }" formats "1.==(2) { 3 }" formats "1.==(2) { 3 }" formats "NamedTuple(a: Int32,)" formats "NamedTuple(a: Int32,)" formats " <<-EOF\n 1\n EOF" formats " <<-EOF\n 1\n EOF" formats "[\n {\n 1 => 2,\n }, {\n 3 => 4,\n }, {\n 5 => 6,\n },\n]" formats "[\n {\n 1 => 2,\n }, {\n 3 => 4,\n }, {\n 5 => 6,\n },\n]" formats "def foo ( bar @@select) \n end" formats "def foo ( bar @@select) \n end" formats "-> :: foo" formats "-> :: foo" 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 "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/" formats "/foo/" formats "break 1 , *2" formats "break 1 , *2" formats "def foo : Int32\n 1\nend" formats "def foo : Int32\n 1\nend" formats "b &.[c]?.d" formats "b &.[c]?.d" formats "asm(\"a\" : :: : \"volatile\")" formats "asm(\"a\" : :: : \"volatile\")" formats "foo(\n1,\n\n 2 \n)" formats "foo(\n1,\n\n 2 \n)" formats "foo(1,\n &.bar)" formats "foo(1,\n &.bar)" formats "\" \" * 2" formats "\" \" * 2" formats "alias A = ({A, (B)})" formats "alias A = ({A, (B)})" formats "x : { {A, B}, {C, D} }" formats "x : { {A, B}, {C, D} }" formats "1.<= do\nend" formats "1.<= do\nend" formats "def foo ( x : Int32 = 1 ) \n end" formats "def foo ( x : Int32 = 1 ) \n end" formats "foo &.is_a?(T).bar" formats "foo &.is_a?(T).bar" 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 "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 "foo { | a, ( b , c ) | a + b + c }" formats "foo { | a, ( b , c ) | a + b + c }" formats "x.try &.[]= 123, 456" formats "x.try &.[]= 123, 456" formats "foo.[] =1" formats "foo.[] =1" formats "a[1] , b[2] = 1 , 2" formats "a[1] , b[2] = 1 , 2" formats "1.=== do\nend" formats "1.=== do\nend" formats "foo(\"bar\": 1, \"baz qux\": 2)" formats "foo(\"bar\": 1, \"baz qux\": 2)" formats "1.as? Int32" formats "1.as? Int32" formats " macro foo\n end\n\n :+" formats " macro foo\n end\n\n :+" formats "\"\#{\n foo = 1\n}\"" formats "\"\#{\n foo = 1\n}\"" formats "def self . foo\nend" formats "def self . foo\nend" formats "foo.[1, 2] = 3" formats "foo.[1, 2] = 3" formats "1 && # foo\n 2 &&\n 3" formats "1 && # foo\n 2 &&\n 3" formats "foo.% bar" formats "foo.% bar" formats "struct Foo\n # bar\n # baz\n1\nend" formats "struct Foo\n # bar\n # baz\n1\nend" formats "class Foo\n macro foo\n 1\n end\nend" formats "class Foo\n macro foo\n 1\n end\nend" formats "if a\n2; 3\nelse\n3\nend" formats "if a\n2; 3\nelse\n3\nend" formats "foo do\n {% foo <<-X\n bar\n X\n %}\nend" formats "foo do\n {% foo <<-X\n bar\n X\n %}\nend" formats "case 1 # foo\nwhen 2\nend" formats "case 1 # foo\nwhen 2\nend" formats "1.==() { 3 }" formats "1.==() { 3 }" formats "[/ /, / /]" formats "[/ /, / /]" formats "a = case 1\nwhen 2\n3\nelse\n4\nend" formats "a = case 1\nwhen 2\n3\nelse\n4\nend" formats "-> : {x: Int32, y: String} {}" formats "-> : {x: Int32, y: String} {}" formats "break" formats "break" formats "->: Int32 do\nx\nend" formats "->: Int32 do\nx\nend" formats "yield 1 , 2" formats "yield 1 , 2" formats "lib Foo\n fun foo =\n\n\n bar : Void\nend" formats "lib Foo\n fun foo =\n\n\n bar : Void\nend" formats "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 "if 1\n[\n a() # b\n]\nend" formats "if 1\n[\n a() # b\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 " {%\na = 1\n %}" formats " {%\na = 1\n %}" formats "-> : Int32 | String { 1 }" formats "-> : Int32 | String { 1 }" formats "alias Foo=\nBar" formats "alias Foo=\nBar" formats "foo(&.@bar)" formats "foo(&.@bar)" formats "macro foo\n %foo{x,y}\nend" formats "macro foo\n %foo{x,y}\nend" formats "a &.b.as C" formats "a &.b.as C" formats "foo\n \nbar" formats "foo\n \nbar" formats "foo.[1]" formats "foo.[1]" formats "yield" formats "yield" formats "case 1\nwhen a; 2\nelse; ; b\nend" formats "case 1\nwhen a; 2\nelse; ; b\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 "1 * 2" formats "1 * 2" formats "next *1" formats "next *1" formats "select \n when foo \n 2 \n else \n 3 \n end" formats "select \n when foo \n 2 \n else \n 3 \n end" formats "foo(<<-X,\na\nX\n 1)" formats "foo(<<-X,\na\nX\n 1)" formats "alias A = ((B(C | D) | E) | F)" formats "alias A = ((B(C | D) | E) | F)" formats "foo(1, 2,\n)" formats "foo(1, 2,\n)" formats "\"foo\" \\\n \"bar\"" formats "\"foo\" \\\n \"bar\"" formats "->@foo.foo!" formats "->@foo.foo!" formats "[1, 2, 3] of Foo" formats "[1, 2, 3] of Foo" formats "def foo\n # Comment\n\n\nend" formats "def foo\n # Comment\n\n\nend" formats "foo do | x , y | \n x \n end" formats "foo do | x , y | \n x \n end" formats "def foo(a,\n &block)\nend" formats "def foo(a,\n &block)\nend" formats "x = 1\nx += 1" formats "x = 1\nx += 1" formats "Foo( x: Int32 )" formats "Foo( x: Int32 )" formats ":+" formats ":+" formats "def foo(**z : Foo)\nend" formats "def foo(**z : Foo)\nend" formats "a &.!" formats "a &.!" formats "lib Foo\nstruct Foo\nx : Int32\nend\nend" formats "lib Foo\nstruct Foo\nx : Int32\nend\nend" formats "foo(1, ) do\nend" formats "foo(1, ) do\nend" formats "foo = 1\n->foo.foo!" formats "foo = 1\n->foo.foo!" formats "next( 1 , 2 )" formats "next( 1 , 2 )" formats "asm(\"a\" ::: \"a\"\n : \"volatile\",\n \"intel\")" formats "asm(\"a\" ::: \"a\"\n : \"volatile\",\n \"intel\")" formats "class Foo\ndef foo (\nx ,\n y ) \n end\nend" formats "class Foo\ndef foo (\nx ,\n y ) \n end\nend" 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 "foo = {1, {2,\n 3},\n 4}" formats "foo = {1, {2,\n 3},\n 4}" formats " {% if 1 %} {% if 2 %} 2 {% end %} {% end %}" formats " {% if 1 %} {% if 2 %} 2 {% end %} {% end %}" formats "foo\n .bar(\n 1\n )" formats "foo\n .bar(\n 1\n )" 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 "foo.bar # comment\n .baz" formats "foo.bar # comment\n .baz" formats " {%\na = 1 %}" formats " {%\na = 1 %}" formats "def foo(@[AnnOne] @[AnnTwo] & ); end" formats "def foo(@[AnnOne] @[AnnTwo] & ); end" formats "@[Foo( 1, 2, foo: 3 )]" formats "@[Foo( 1, 2, foo: 3 )]" formats "def foo\n1\nrescue\n2\nend" formats "def foo\n1\nrescue\n2\nend" formats "def foo\n1\nensure\n2\nend" formats "def foo\n1\nensure\n2\nend" formats "foo { | a, ( b , c, ), | a + b + c }" formats "foo { | a, ( b , c, ), | a + b + c }" formats "if 1 &&\n2 &&\n3\n4\nend" formats "if 1 &&\n2 &&\n3\n4\nend" formats "def foo ( x : Foo.class ) \n end" formats "def foo ( x : Foo.class ) \n end" formats "yield(\n1 , \n2)" formats "yield(\n1 , \n2)" formats "asm(\"a\" : \"b\"(c) : \"d\"(e) :: \"volatile\")" formats "asm(\"a\" : \"b\"(c) : \"d\"(e) :: \"volatile\")" formats "foo do # hello\nend" formats "foo do # hello\nend" adds trailing comma to def multi-line normal, splat, and double splat parameters formats "def foo(\n a, b\n)\nend" formats "def foo(\n a, b\n)\nend" formats "def foo(\n a,\n *b\n)\nend" formats "def foo(\n a,\n *b\n)\nend" formats "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 &block\n)\nend" formats "def foo(\n a,\n &block\n)\nend" formats "fun foo(\n a : Int32,\n ...\n)\nend" formats "fun foo(\n a : Int32,\n ...\n)\nend" formats "def foo(\n a : Int32,\n b : Int32\n)\nend" formats "def foo(\n a : Int32,\n b : Int32\n)\nend" formats "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, # Foo\n b # Bar\n)\nend" formats "def foo(\n a, # Foo\n b # Bar\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 @[Ann]\n b\n)\nend" formats "def foo(\n a,\n @[Ann]\n b\n)\nend" formats "def foo(\n a,\n b c\n)\nend" formats "def foo(\n a,\n b c\n)\nend" formats "def foo(\n a,\n)\nend" formats "def foo(\n a,\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 : Int32,\n b : Int32 = 1\n)\nend" formats "def foo(\n a : Int32,\n b : Int32 = 1\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, b,\n c, d\n)\nend" formats "def foo(\n a, b,\n c, d\n)\nend" formats "_ = 1" formats "_ = 1" formats "def foo : Int32 \n end" formats "def foo : Int32 \n end" formats "unless a\nunless b\nelse\n4\nend\nend" formats "unless a\nunless b\nelse\n4\nend\nend" formats "a = 1\nb, c = 2, 3\n{% begin %}\n a |= 1\n b |= 2\n c |= 3\n{% end %}" formats "a = 1\nb, c = 2, 3\n{% begin %}\n a |= 1\n b |= 2\n c |= 3\n{% end %}" formats "1 + 2" formats "1 + 2" formats "\"foo\" \\\n \"bar\" \\\n \"baz\"" formats "\"foo\" \\\n \"bar\" \\\n \"baz\"" formats "\n# hello\n\n\n1" formats "\n# hello\n\n\n1" formats "foo = 1\n->foo.bar(Int32*)" formats "foo = 1\n->foo.bar(Int32*)" formats "foo(\n 1,\n # 2,\n 3,\n)" formats "foo(\n 1,\n # 2,\n 3,\n)" formats "foo : Foo * * * * *" formats "foo : Foo * * * * *" formats "next" formats "next" 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(1, / /)" formats "foo(1, / /)" formats " {% for x in y %} 2 {% end %}" formats " {% for x in y %} 2 {% end %}" formats "%" formats "%" formats "[\n a(),\n]" formats "[\n a(),\n]" formats "loop do\n 1\nrescue\n 2\nend" formats "loop do\n 1\nrescue\n 2\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 "lib Foo\nfun foo () : Int32\nend" formats "lib Foo\nfun foo () : Int32\nend" formats "b &.[c].d" formats "b &.[c].d" 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 "a(&.b.c.as C)" formats "a(&.b.c.as C)" 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 "asm(\"a\" :::: \"volatile\"\n)" formats "asm(\"a\" :::: \"volatile\"\n)" formats "foo[ 1 , 2 ] =3" formats "foo[ 1 , 2 ] =3" formats "foo(1 + \n2)" formats "foo(1 + \n2)" formats "def foo(x : (A | B)) \n end" formats "def foo(x : (A | B)) \n end" 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 "def foo\nend\n\n\n\ndef bar\nend" formats "def foo\nend\n\n\n\ndef bar\nend" formats "foo bar # comment\n\n# doc\ndef baz; end" formats "foo bar # comment\n\n# doc\ndef baz; end" formats "foo 1, a: 1,\nb: 2,\nc: 3" formats "foo 1, a: 1,\nb: 2,\nc: 3" formats "Foo( )" formats "Foo( )" formats "foo.responds_to? :bar\n1" formats "foo.responds_to? :bar\n1" formats "case 1\nwhen 2\n#comment\nend" formats "case 1\nwhen 2\n#comment\nend" formats " Array( {x: Int32, y: String } )" formats " Array( {x: Int32, y: String } )" formats "x: Int32" formats "x: Int32" formats "def foo(@[AnnOne] @[AnnTwo] v); end" formats "def foo(@[AnnOne] @[AnnTwo] v); end" formats "class Foo; 1; end" formats "class Foo; 1; end" formats "macro foo # bar\n baz\nend" formats "macro foo # bar\n baz\nend" 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 "macro foo(x)\n {% if 1 %} 2 {% end %}\nend" formats "macro foo(x)\n {% if 1 %} 2 {% end %}\nend" formats "<<-HEREDOC\n \#{foo}\n H\#{bar}\n HEREDOC" formats "<<-HEREDOC\n \#{foo}\n H\#{bar}\n HEREDOC" 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(\n 1, # hola\n2, # chau\n )" formats "foo(\n 1, # hola\n2, # chau\n )" formats "%[hello]" formats "%[hello]" formats "\"hello\"" formats "\"hello\"" formats "foo (1)" formats "foo (1)" formats "<<-HTML\n \#{\"fo\#{\"o\"}\"}\n HTML" formats "<<-HTML\n \#{\"fo\#{\"o\"}\"}\n HTML" formats "1 && 2" formats "1 && 2" formats "foo &.[]( 1, 2 )" formats "foo &.[]( 1, 2 )" formats "pointerof( @a )" formats "pointerof( @a )" formats "foo(bar([\n 1,\n]))" formats "foo(bar([\n 1,\n]))" formats "def foo\n 1\n # Comment\n\n\nend" formats "def foo\n 1\n # Comment\n\n\nend" formats "asm(\"a\" : : : : \"volatile\")" formats "asm(\"a\" : : : : \"volatile\")" 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 "+ a + d" formats "+ a + d" formats "@[Foo(\n 1,\n)]" formats "@[Foo(\n 1,\n)]" formats "foo : ( A | B )" formats "foo : ( A | B )" formats "asm(\"a\" : \"b\"(1), \"c\"(2) : \"d\"(3) : : \"volatile\")" formats "asm(\"a\" : \"b\"(1), \"c\"(2) : \"d\"(3) : : \"volatile\")" formats "foo do\n # bar\nend" formats "foo do\n # bar\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 "$0.bar" formats "$0.bar" formats "def a\n b(\n a: 1, # x\n # y\n b: 2\n )\nend" formats "def a\n b(\n a: 1, # x\n # y\n b: 2\n )\nend" formats "alias A = ( A | B )" formats "alias A = ( A | B )" formats "::NamedTuple(T)" formats "::NamedTuple(T)" formats "def foo(\n &block\n)\nend" formats "def foo(\n &block\n)\nend" formats "foo \\\n foo: 1,\n bar: 2" formats "foo \\\n foo: 1,\n bar: 2" formats "foo \\\n 1,\n 2" formats "foo \\\n 1,\n 2" formats "Foo( A , 1 )" formats "Foo( A , 1 )" formats "def foo(x, *, y, **z)\nend" formats "def foo(x, *, y, **z)\nend" formats "asm(\"nop\" : \"a\"(0), \"b\"(1) )" formats "asm(\"nop\" : \"a\"(0), \"b\"(1) )" formats "def foo ( x : self ) \n end" formats "def foo ( x : self ) \n end" formats "case nil\nelse nil; nil\n# comment\nend" formats "case nil\nelse nil; nil\n# comment\nend" formats "foo . is_a? Bar" formats "foo . is_a? Bar" formats "foo . bar()" formats "foo . bar()" 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 "{% 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 "yield( 1 )" formats "yield( 1 )" formats "alias A = (B) -> C" formats "alias A = (B) -> C" formats "x : Int32" formats "x : Int32" formats "case 1 \n when 2 then \n 3 \n end" formats "case 1 \n when 2 then \n 3 \n end" formats "1.<= { 3 }" formats "1.<= { 3 }" formats "foo do;\n1; end" formats "foo do;\n1; end" formats "def foo\n@x : Int32\nend" formats "def foo\n@x : Int32\nend" formats "unless a\n2\n3\nelse\n4\n5\nend" formats "unless a\n2\n3\nelse\n4\n5\nend" formats "a = \\\n # foo\n bar(1)" formats "a = \\\n # foo\n bar(1)" formats "a&-1" formats "a&-1" formats "asm(\"nop\" : \"a\"(0) )" formats "asm(\"nop\" : \"a\"(0) )" formats "1..\n2" formats "1..\n2" formats "x : (A -> )" formats "x : (A -> )" formats "begin\n # Comment\n\n\nend" formats "begin\n # Comment\n\n\nend" formats "\"\\a\\c\#{foo}\\b\\d\"" formats "\"\\a\\c\#{foo}\\b\\d\"" formats "[\n1, # a\n2, # b\n 3 # c\n]" formats "[\n1, # a\n2, # b\n 3 # c\n]" formats "macro foo\n %foo\nend" formats "macro foo\n %foo\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 "alias Foo::Bar = Baz" formats "alias Foo::Bar = Baz" formats "foo { |x| (x).a }" formats "foo { |x| (x).a }" formats "->@foo.foo?" formats "->@foo.foo?" formats "struct Foo(T)\n# bar\n1\nend" formats "struct Foo(T)\n# bar\n1\nend" formats "1.>= do\nend" formats "1.>= do\nend" formats "call(foo <<-X\nbar\nX\n)" formats "call(foo <<-X\nbar\nX\n)" formats "def foo ( x ,\n y ) \n end" formats "def foo ( x ,\n y ) \n end" formats "foo.[]" formats "foo.[]" formats "foo(a: 1 // 2)" formats "foo(a: 1 // 2)" formats "asm(\"nop\" :: )" formats "asm(\"nop\" :: )" formats "nil?" formats "nil?" formats " [ 1, \n 2 , \n 3 ] " formats " [ 1, \n 2 , \n 3 ] " formats "FOO = 2 + 3\nA = 1 - 10" formats "FOO = 2 + 3\nA = 1 - 10" formats "case\n# hello\nwhen 1\n 2\nend" formats "case\n# hello\nwhen 1\n 2\nend" formats "def foo ( x , y ,\n) \n end" formats "def foo ( x , y ,\n) \n end" formats "1/2" formats "1/2" formats "macro foo(x, *, z)\nend" formats "macro foo(x, *, z)\nend" formats "alias Foo::Bar= Baz" formats "alias Foo::Bar= Baz" formats "def %(x)\n 1\nend" formats "def %(x)\n 1\nend" formats "class Foo # foo\nend" formats "class Foo # foo\nend" formats "enum Foo\n A; B; C\nend\n" formats "enum Foo\n A; B; C\nend\n" 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 "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 "->Foo.foo" formats "->Foo.foo" formats "lib Foo\nstruct Foo\nx , y : Int32\nend\nend" formats "lib Foo\nstruct Foo\nx , y : Int32\nend\nend" formats "/foo/imx" formats "/foo/imx" formats "\"foo \#{ 1 + 2 }\"" formats "\"foo \#{ 1 + 2 }\"" formats "abstract class Foo\nend" formats "abstract class Foo\nend" formats "1 #foo \n2 #bar" formats "1 #foo \n2 #bar" formats "foo \"bar\": 1, \"baz qux\": 2" formats "foo \"bar\": 1, \"baz qux\": 2" formats "[] of (Array(T))" formats "[] of (Array(T))" formats "foo &.[](1, 2)" formats "foo &.[](1, 2)" formats "return { {1, 2}, {3, 4} }, 5" formats "return { {1, 2}, {3, 4} }, 5" formats ":&**" formats ":&**" 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 "foo &.as(T)" formats "foo &.as(T)" formats "begin\n #hola\n 1\nend\n" formats "begin\n #hola\n 1\nend\n" Unicode bi-directional control characters formats "%r(\u202C\#{1})" formats "%r(\u202C\#{1})" formats "<<-EOS\n\u202D\nEOS" formats "<<-EOS\n\u202D\nEOS" formats "\"\u2069\#{1}\"" formats "\"\u2069\#{1}\"" formats "def foo(\"\u202E\" x)\nend" formats "def foo(\"\u202E\" x)\nend" formats "<<-EOS\n\u202A\#{1}\nEOS" formats "<<-EOS\n\u202A\#{1}\nEOS" formats "/\u202D\#{1}/" formats "/\u202D\#{1}/" formats "{\"\u202D\": 1}" formats "{\"\u202D\": 1}" formats "%r(\u2067\#{1})" formats "%r(\u2067\#{1})" formats "\"\\c\u202B\"" formats "\"\\c\u202B\"" formats "{\"\u2066\": 1}" formats "{\"\u2066\": 1}" formats "\"\u2068\"" formats "\"\u2068\"" formats "<<-EOS\n\u2068\#{1}\nEOS" formats "<<-EOS\n\u2068\#{1}\nEOS" formats "/\u2068\#{1}/" formats "/\u2068\#{1}/" formats "%q(\u202E)" formats "%q(\u202E)" formats "{\"\u202E\": 1}" formats "{\"\u202E\": 1}" formats "/\u2067/" formats "/\u2067/" formats "/\u2069\#{1}/" formats "/\u2069\#{1}/" formats "\"\\c\u2066\"" formats "\"\\c\u2066\"" formats "<<-EOS\n\u202C\nEOS" formats "<<-EOS\n\u202C\nEOS" formats "%r(\u2068\#{1})" formats "%r(\u2068\#{1})" formats "%(\u202E)" formats "%(\u202E)" formats "/\u202B\#{1}/" formats "/\u202B\#{1}/" formats "<<-EOS\n\u202E\#{1}\nEOS" formats "<<-EOS\n\u202E\#{1}\nEOS" formats "def foo(\"\u202B\" x)\nend" formats "def foo(\"\u202B\" x)\nend" formats "%Q(\u2066)" formats "%Q(\u2066)" formats "\"\\c\u202E\#{1}\"" formats "\"\\c\u202E\#{1}\"" formats "/\u202A\#{1}/" formats "/\u202A\#{1}/" formats "\"\u202C\#{1}\"" formats "\"\u202C\#{1}\"" formats "\"\u2068\#{1}\"" formats "\"\u2068\#{1}\"" formats "\"\u202A\"" formats "\"\u202A\"" formats "NamedTuple(\"\u202D\": Int32)" formats "NamedTuple(\"\u202D\": Int32)" formats "%i(\u2066)" formats "%i(\u2066)" formats "def foo(\"\u2067\" x)\nend" formats "def foo(\"\u2067\" x)\nend" formats "{\"\u2069\": 1}" formats "{\"\u2069\": 1}" formats "%Q(\u202A\#{1})" formats "%Q(\u202A\#{1})" formats "%q(\u2067)" formats "%q(\u2067)" formats "<<-EOS\n\u2066\#{1}\nEOS" formats "<<-EOS\n\u2066\#{1}\nEOS" formats "<<-'EOS'\n\u202C\nEOS" formats "<<-'EOS'\n\u202C\nEOS" formats "foo(\"\u2066\": 1)" formats "foo(\"\u2066\": 1)" formats "/\u2067\#{1}/" formats "/\u2067\#{1}/" formats "%r(\u202C)" formats "%r(\u202C)" formats "<<-EOS\n\u202D\#{1}\nEOS" formats "<<-EOS\n\u202D\#{1}\nEOS" formats "def foo(\"\u202C\" x)\nend" formats "def foo(\"\u202C\" x)\nend" formats "%(\u2069)" formats "%(\u2069)" formats "\"\\c\u2069\#{1}\"" formats "\"\\c\u2069\#{1}\"" formats "%Q(\u202D\#{1})" formats "%Q(\u202D\#{1})" formats "/\u202A/" formats "/\u202A/" formats "\"\\c\u202D\#{1}\"" formats "\"\\c\u202D\#{1}\"" formats "{\"\u202C\": 1}" formats "{\"\u202C\": 1}" formats "%r(\u2067)" formats "%r(\u2067)" formats "%r(\u202E)" formats "%r(\u202E)" formats "foo(\"\u2068\": 1)" formats "foo(\"\u2068\": 1)" formats "<<-'EOS'\n\u2069\nEOS" formats "<<-'EOS'\n\u2069\nEOS" formats "/\u2069/" formats "/\u2069/" formats "<<-EOS\n\u202A\nEOS" formats "<<-EOS\n\u202A\nEOS" formats "foo(\"\u202E\": 1)" formats "foo(\"\u202E\": 1)" formats "/\u202E/" formats "/\u202E/" formats "NamedTuple(\"\u202E\": Int32)" formats "NamedTuple(\"\u202E\": Int32)" formats "\"\u2066\"" formats "\"\u2066\"" formats "%Q(\u202E\#{1})" formats "%Q(\u202E\#{1})" formats "\"\\c\u202C\#{1}\"" formats "\"\\c\u202C\#{1}\"" formats "\"\u2069\"" formats "\"\u2069\"" formats "\"\\c\u2068\#{1}\"" formats "\"\\c\u2068\#{1}\"" formats "%r(\u2068)" formats "%r(\u2068)" formats "foo(\"\u202D\": 1)" formats "foo(\"\u202D\": 1)" formats "%(\u202C)" formats "%(\u202C)" formats "%w(\u2069)" formats "%w(\u2069)" formats "/\u2068/" formats "/\u2068/" formats "NamedTuple(\"\u2066\": Int32)" formats "NamedTuple(\"\u2066\": Int32)" formats "%q(\u2066)" formats "%q(\u2066)" formats "%i(\u2068)" formats "%i(\u2068)" formats "%Q(\u202C)" formats "%Q(\u202C)" formats "%Q(\u2068)" formats "%Q(\u2068)" formats "%(\u2067)" formats "%(\u2067)" formats "NamedTuple(\"\u2068\": Int32)" formats "NamedTuple(\"\u2068\": Int32)" formats "<<-EOS\n\u202B\#{1}\nEOS" formats "<<-EOS\n\u202B\#{1}\nEOS" formats "\"\u202E\"" formats "\"\u202E\"" formats "def foo(\"\u202D\" x)\nend" formats "def foo(\"\u202D\" x)\nend" formats "<<-'EOS'\n\u202A\nEOS" formats "<<-'EOS'\n\u202A\nEOS" formats "\"\\c\u2067\"" formats "\"\\c\u2067\"" formats "%w(\u202A)" formats "%w(\u202A)" formats "%w(\u2066)" formats "%w(\u2066)" formats "<<-EOS\n\u2069\nEOS" formats "<<-EOS\n\u2069\nEOS" formats "/\u2066\#{1}/" formats "/\u2066\#{1}/" formats "%w(\u2068)" formats "%w(\u2068)" formats "<<-EOS\n\u202B\nEOS" formats "<<-EOS\n\u202B\nEOS" formats "%Q(\u2069\#{1})" formats "%Q(\u2069\#{1})" formats "%w(\u202C)" formats "%w(\u202C)" formats "{\"\u202A\": 1}" formats "{\"\u202A\": 1}" formats "\"\u202B\#{1}\"" formats "\"\u202B\#{1}\"" formats "%r(\u2069\#{1})" formats "%r(\u2069\#{1})" formats "%i(\u202B)" formats "%i(\u202B)" formats "\"\u202D\"" formats "\"\u202D\"" formats "<<-EOS\n\u2068\nEOS" formats "<<-EOS\n\u2068\nEOS" formats "NamedTuple(\"\u202C\": Int32)" formats "NamedTuple(\"\u202C\": Int32)" formats "\"\u202C\"" formats "\"\u202C\"" formats "%Q(\u2068\#{1})" formats "%Q(\u2068\#{1})" formats "%w(\u202E)" formats "%w(\u202E)" formats "%r(\u2066\#{1})" formats "%r(\u2066\#{1})" formats "%(\u2066)" formats "%(\u2066)" formats "\"\u2067\#{1}\"" formats "\"\u2067\#{1}\"" formats "{\"\u202B\": 1}" formats "{\"\u202B\": 1}" formats "%i(\u202E)" formats "%i(\u202E)" formats "%Q(\u202D)" formats "%Q(\u202D)" formats "\"\\c\u202B\#{1}\"" formats "\"\\c\u202B\#{1}\"" formats "%Q(\u2067\#{1})" formats "%Q(\u2067\#{1})" formats "%(\u2068)" formats "%(\u2068)" formats "\"\\c\u202E\"" formats "\"\\c\u202E\"" formats "\"\u2067\"" formats "\"\u2067\"" formats "<<-EOS\n\u2066\nEOS" formats "<<-EOS\n\u2066\nEOS" formats "\"\u202A\#{1}\"" formats "\"\u202A\#{1}\"" formats "%Q(\u202C\#{1})" formats "%Q(\u202C\#{1})" formats "%(\u202B)" formats "%(\u202B)" formats "%r(\u202A\#{1})" formats "%r(\u202A\#{1})" formats "\"\\c\u2069\"" formats "\"\\c\u2069\"" formats "\"\\c\u202A\#{1}\"" formats "\"\\c\u202A\#{1}\"" formats "\"\\c\u202A\"" formats "\"\\c\u202A\"" formats "<<-EOS\n\u202C\#{1}\nEOS" formats "<<-EOS\n\u202C\#{1}\nEOS" formats "%r(\u202B\#{1})" formats "%r(\u202B\#{1})" formats "%(\u202D)" formats "%(\u202D)" formats "NamedTuple(\"\u202A\": Int32)" formats "NamedTuple(\"\u202A\": Int32)" formats "%i(\u202D)" formats "%i(\u202D)" formats "/\u202E\#{1}/" formats "/\u202E\#{1}/" formats "\"\\c\u2067\#{1}\"" formats "\"\\c\u2067\#{1}\"" formats "%q(\u202C)" formats "%q(\u202C)" formats "%r(\u2066)" formats "%r(\u2066)" formats "<<-'EOS'\n\u2067\nEOS" formats "<<-'EOS'\n\u2067\nEOS" formats "{\"\u2067\": 1}" formats "{\"\u2067\": 1}" formats "<<-EOS\n\u202E\nEOS" formats "<<-EOS\n\u202E\nEOS" formats "foo(\"\u202A\": 1)" formats "foo(\"\u202A\": 1)" formats "%w(\u202B)" formats "%w(\u202B)" formats "def foo(\"\u2068\" x)\nend" formats "def foo(\"\u2068\" x)\nend" formats "%Q(\u202B\#{1})" formats "%Q(\u202B\#{1})" formats "/\u202D/" formats "/\u202D/" formats "\"\u2066\#{1}\"" formats "\"\u2066\#{1}\"" formats "%r(\u202D\#{1})" formats "%r(\u202D\#{1})" formats "%Q(\u2066\#{1})" formats "%Q(\u2066\#{1})" formats "%r(\u202E\#{1})" formats "%r(\u202E\#{1})" formats "/\u202C\#{1}/" formats "/\u202C\#{1}/" formats "foo(\"\u2067\": 1)" formats "foo(\"\u2067\": 1)" formats "NamedTuple(\"\u2067\": Int32)" formats "NamedTuple(\"\u2067\": Int32)" formats "%q(\u2068)" formats "%q(\u2068)" formats "\"\u202D\#{1}\"" formats "\"\u202D\#{1}\"" formats "\"\\c\u202C\"" formats "\"\\c\u202C\"" formats "%q(\u202B)" formats "%q(\u202B)" formats "foo(\"\u202C\": 1)" formats "foo(\"\u202C\": 1)" formats "%i(\u2067)" formats "%i(\u2067)" formats "%Q(\u2069)" formats "%Q(\u2069)" formats "\"\\c\u2066\#{1}\"" formats "\"\\c\u2066\#{1}\"" formats "%r(\u202D)" formats "%r(\u202D)" formats "/\u2066/" formats "/\u2066/" formats "<<-'EOS'\n\u2068\nEOS" formats "<<-'EOS'\n\u2068\nEOS" formats "{\"\u2068\": 1}" formats "{\"\u2068\": 1}" formats "%Q(\u202A)" formats "%Q(\u202A)" formats "%q(\u2069)" formats "%q(\u2069)" formats "NamedTuple(\"\u202B\": Int32)" formats "NamedTuple(\"\u202B\": Int32)" formats "%Q(\u202E)" formats "%Q(\u202E)" formats "%(\u202A)" formats "%(\u202A)" formats "<<-EOS\n\u2067\nEOS" formats "<<-EOS\n\u2067\nEOS" formats "NamedTuple(\"\u2069\": Int32)" formats "NamedTuple(\"\u2069\": Int32)" formats "\"\\c\u2068\"" formats "\"\\c\u2068\"" formats "%i(\u202A)" formats "%i(\u202A)" formats "%q(\u202A)" formats "%q(\u202A)" formats "/\u202B/" formats "/\u202B/" formats "%r(\u202A)" formats "%r(\u202A)" formats "foo(\"\u202B\": 1)" formats "foo(\"\u202B\": 1)" formats "def foo(\"\u2069\" x)\nend" formats "def foo(\"\u2069\" x)\nend" formats "def foo(\"\u2066\" x)\nend" formats "def foo(\"\u2066\" x)\nend" formats "<<-'EOS'\n\u202D\nEOS" formats "<<-'EOS'\n\u202D\nEOS" formats "def foo(\"\u202A\" x)\nend" formats "def foo(\"\u202A\" x)\nend" formats "%i(\u2069)" formats "%i(\u2069)" formats "%q(\u202D)" formats "%q(\u202D)" formats "\"\u202E\#{1}\"" formats "\"\u202E\#{1}\"" formats "<<-'EOS'\n\u2066\nEOS" formats "<<-'EOS'\n\u2066\nEOS" formats "<<-EOS\n\u2067\#{1}\nEOS" formats "<<-EOS\n\u2067\#{1}\nEOS" formats "/\u202C/" formats "/\u202C/" formats "\"\u202B\"" formats "\"\u202B\"" formats "%i(\u202C)" formats "%i(\u202C)" formats "<<-EOS\n\u2069\#{1}\nEOS" formats "<<-EOS\n\u2069\#{1}\nEOS" formats "%Q(\u202B)" formats "%Q(\u202B)" formats "%w(\u2067)" formats "%w(\u2067)" formats "%w(\u202D)" formats "%w(\u202D)" formats "<<-'EOS'\n\u202B\nEOS" formats "<<-'EOS'\n\u202B\nEOS" formats "foo(\"\u2069\": 1)" formats "foo(\"\u2069\": 1)" formats "<<-'EOS'\n\u202E\nEOS" formats "<<-'EOS'\n\u202E\nEOS" formats "%Q(\u2067)" formats "%Q(\u2067)" formats "%r(\u202B)" formats "%r(\u202B)" formats "%r(\u2069)" formats "%r(\u2069)" formats "\"\\c\u202D\"" formats "\"\\c\u202D\"" formats "next 1" formats "next 1" formats "foo &.as?(T).bar" formats "foo &.as?(T).bar" formats "if 1\n2\nend\nif 3\nend" formats "if 1\n2\nend\nif 3\nend" formats "foo.as(T).bar" formats "foo.as(T).bar" formats "->( x : Int32 , y ) { x }" formats "->( x : Int32 , y ) { x }" formats "yield *1 ,2" formats "yield *1 ,2" formats "def foo : (A | B(C))\n nil\nend" formats "def foo : (A | B(C))\n nil\nend" formats "foo ()" formats "foo ()" formats "macro foo()\nend" formats "macro foo()\nend" formats "1_234" formats "1_234" formats "{ {1, 2, 3} }" formats "{ {1, 2, 3} }" formats "alias A = (B(C, (C | D)) | E)" formats "alias A = (B(C, (C | D)) | E)" formats "a = foo(bar(baz3 do\nend))" formats "a = foo(bar(baz3 do\nend))" formats "asm(\"a\" : \"b\"(c)\n)" formats "asm(\"a\" : \"b\"(c)\n)" formats "->foo=" formats "->foo=" 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()]" formats "@[Foo()]" formats "offsetof( String, @length )" formats "offsetof( String, @length )" formats "begin\n1\nrescue\n3\nensure\n2\nend" formats "begin\n1\nrescue\n3\nensure\n2\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 "case 1 \n when 2 ; 3 \n when 4 ; 5\nend" formats "case 1 \n when 2 ; 3 \n when 4 ; 5\nend" formats "1 \\\nrescue 2" formats "1 \\\nrescue 2" formats "(a).b { }\nc" formats "(a).b { }\nc" formats "class Foo \n\n 1 \n\nend" formats "class Foo \n\n 1 \n\nend" formats "1\n2\n# foo" formats "1\n2\n# foo" formats "case 1 \n when 2 , 3 \n 4 \n end" formats "case 1 \n when 2 , 3 \n 4 \n end" 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 "1.===() { 3 }" formats "1.===() { 3 }" formats "macro foo( x = 1, y = 2, &block)\nend" formats "macro foo( x = 1, y = 2, &block)\nend" formats "def foo()\n1\nend" formats "def foo()\n1\nend" formats "1 \\\nensure 2" formats "1 \\\nensure 2" formats "<<-HTML\n \#{1}x\n y\n z\n HTML" formats "<<-HTML\n \#{1}x\n y\n z\n HTML" formats "1 ||\n # foo\n 2" formats "1 ||\n # foo\n 2" formats "{x => self // 1}" formats "{x => self // 1}" formats "{%\n unless true\n 1\n end\n%}" formats "{%\n unless true\n 1\n end\n%}" formats "def foo( x , & block : Int32 ->)\nend" formats "def foo( x , & block : Int32 ->)\nend" formats "break *1" formats "break *1" formats "enum Baz\nA = 1\nFOO\n\nEX = 3\nend" formats "enum Baz\nA = 1\nFOO\n\nEX = 3\nend" formats "break {1, 2}, {3, 4}" formats "break {1, 2}, {3, 4}" formats "asm(\"a\" : : :: \"volatile\")" formats "asm(\"a\" : : :: \"volatile\")" formats "foo . bar = 1" formats "foo . bar = 1" formats "a.!" formats "a.!" formats "'a'" formats "'a'" formats "alias Foo =Bar" formats "alias Foo =Bar" formats "asm(\"nop\" ::: \"eax\" , \"ebx\" )" formats "asm(\"nop\" ::: \"eax\" , \"ebx\" )" formats "foo([\n 1, 2,\n 3, 4,\n])" formats "foo([\n 1, 2,\n 3, 4,\n])" formats "@foo : Int32 # comment\n\ndef foo\nend" formats "@foo : Int32 # comment\n\ndef foo\nend" 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 "-> : Array(Int32) {}" formats "-> : Array(Int32) {}" formats "[\n a() # b\n]" formats "[\n a() # b\n]" formats "foo = 1\n->foo.bar(Int32)" formats "foo = 1\n->foo.bar(Int32)" 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 "yield( *1 , *2 )" formats "yield( *1 , *2 )" formats "1234 # foo\n1 # bar" formats "1234 # foo\n1 # bar" formats "->Foo.foo=" formats "->Foo.foo=" formats "あ.い = 1" formats "あ.い = 1" 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 "asm(\"nop\" : : )" formats "asm(\"nop\" : : )" formats "foo : (A) | D" formats "foo : (A) | D" formats ":^" formats ":^" formats "/ /" formats "/ /" formats "def foo : A(B)\n nil\nend" formats "def foo : A(B)\n nil\nend" formats "return( 1 , 2 )" formats "return( 1 , 2 )" formats "foo 1, # comment\n # bar\n do\n end" formats "foo 1, # comment\n # bar\n do\n end" formats "asm(\"nop\" : \"a\"(0) : \"b\"(1) )" formats "asm(\"nop\" : \"a\"(0) : \"b\"(1) )" formats "foo.as?(T).bar" formats "foo.as?(T).bar" formats "foo bar, \\\nbaz" formats "foo bar, \\\nbaz" 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 &+ 2" formats "1 &+ 2" formats "foo.bar += 2" formats "foo.bar += 2" formats "-> :: Foo . foo!" formats "-> :: Foo . foo!" formats "asm(\"nop\" :: \"r\"(0))" formats "asm(\"nop\" :: \"r\"(0))" formats "enum Foo; A = 1; end" formats "enum Foo; A = 1; end" formats "a=1" formats "a=1" formats "p = Foo[1, 2, 3,\n 4, 5, 6,\n ]" formats "p = Foo[1, 2, 3,\n 4, 5, 6,\n ]" gives proper line number in syntax error inside macro gives proper line number in syntax error inside macro formats "def foo(a : T) forall T\n #\n\n\nend" formats "def foo(a : T) forall T\n #\n\n\nend" formats "foo : (A -> B)\nbar : C" formats "foo : (A -> B)\nbar : C" formats "if 1\n {% if 2 %} {% end %}\nend" formats "if 1\n {% if 2 %} {% end %}\nend" formats "foo.bar. as Int32" formats "foo.bar. as Int32" formats "if 1\ncase 1\nwhen 2\n3\nend\nend" formats "if 1\ncase 1\nwhen 2\n3\nend\nend" formats "\n\n1" formats "\n\n1" formats "class Foo < \n Bar \n\n 1 \n\nend" formats "class Foo < \n Bar \n\n 1 \n\nend" formats "[ # foo\n 1,\n]" formats "[ # foo\n 1,\n]" formats "$?" formats "$?" formats "1\n\n2" formats "1\n\n2" formats "::NamedTuple()" formats "::NamedTuple()" formats "x : Int32[ 8 ]" formats "x : Int32[ 8 ]" formats "lib Foo\n fun foo =\n bar(Int32) : Int32\nend" formats "lib Foo\n fun foo =\n bar(Int32) : Int32\nend" formats "next {1, 2}, {3, 4}" formats "next {1, 2}, {3, 4}" formats "1 &&\n2" formats "1 &&\n2" formats "x : Int32**" formats "x : Int32**" does not add `&` without flag `method_signature_yield` formats "def foo(\nx)\n yield\nend" formats "def foo(\nx)\n yield\nend" formats "def foo(x ,)\n yield\nend" formats "def foo(x ,)\n yield\nend" formats "def foo(x,\n y)\n yield\nend" formats "def foo(x,\n y)\n yield\nend" formats "def foo(\nx,\n)\n yield\nend" formats "def foo(\nx,\n)\n yield\nend" formats "def foo()\n yield\nend" formats "def foo()\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(a, **b)\n yield\nend" formats "def foo(a, **b)\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(\nx,\ny)\n yield\nend" formats "def foo(\nx,\ny)\n yield\nend" 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(x)\n yield\nend" formats "def foo(x)\n yield\nend" formats "def foo(x,\n)\n yield\nend" formats "def foo(x,\n)\n yield\nend" formats "return *1 ,2" formats "return *1 ,2" formats "x.is_a? T\n3\n" formats "x.is_a? T\n3\n" formats "%i{one( two( three)}" formats "%i{one( two( three)}" formats "a&+1" formats "a&+1" formats "foo &.[]" formats "foo &.[]" formats "...\n2" formats "...\n2" formats "1\n# hello\n\n\n" formats "1\n# hello\n\n\n" formats "->@@foo.foo!" formats "->@@foo.foo!" formats "$~.bar" formats "$~.bar" formats "enum Foo\nend" formats "enum Foo\nend" formats "[\n # foo\n 1,\n\n # bar\n 2,\n]" formats "[\n # foo\n 1,\n\n # bar\n 2,\n]" formats "coco.lala\nfoo\n .bar" formats "coco.lala\nfoo\n .bar" formats "def foo(x, **z)\nend" formats "def foo(x, **z)\nend" formats "return" formats "return" formats "1 +\n # foo\n 2" formats "1 +\n # foo\n 2" formats "false" formats "false" formats "yield 1 , \n2" formats "yield 1 , \n2" formats " <<-HTML\n foo\n HTML" formats " <<-HTML\n foo\n HTML" formats "A = 1\nFOO = 2\n\nEX = 3" formats "A = 1\nFOO = 2\n\nEX = 3" formats "def foo ( x ) : Int32 \n end" formats "def foo ( x ) : Int32 \n end" formats "a(&.b.c.as(C))" formats "a(&.b.c.as(C))" formats "{ {{FOO}}, nil}" formats "{ {{FOO}}, nil}" formats "{\n query => <<-HEREDOC,\n foo\n HEREDOC\n}" formats "{\n query => <<-HEREDOC,\n foo\n HEREDOC\n}" formats "a = begin\n1\n2\nend" formats "a = begin\n1\n2\nend" formats "def foo\n case x\n # z\n when 1\n end\nend" formats "def foo\n case x\n # z\n when 1\n end\nend" formats "if a\nif b\n3\nelse\n4\nend\nend" formats "if a\nif b\n3\nelse\n4\nend\nend" formats "[ * [ * [ 1 ] ], * \n[ 2] ]" formats "[ * [ * [ 1 ] ], * \n[ 2] ]" formats "foo.@bar" formats "foo.@bar" formats "'\\u{0123}'" formats "'\\u{0123}'" formats "foo.bar\n .baz(\n 1\n )" formats "foo.bar\n .baz(\n 1\n )" formats "lib Foo\nend" formats "lib Foo\nend" formats "foo.[] = 1" formats "foo.[] = 1" formats "-> :: foo!" formats "-> :: foo!" formats "foo &.[]?( 1, 2 )" formats "foo &.[]?( 1, 2 )" 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 "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 "1 # foo\n1234 # bar" formats "1 # foo\n1234 # bar" formats "if a\n # hello\n 2\nend" formats "if a\n # hello\n 2\nend" formats "case 1\nelse\n 2\nend" formats "case 1\nelse\n 2\nend" formats "macro foo=(x)\nend" formats "macro foo=(x)\nend" formats "1 # foo" formats "1 # foo" formats "def func # comment\n (1 + 2) / 3\nend" formats "def func # comment\n (1 + 2) / 3\nend" formats "module Foo # foo\nend" formats "module Foo # foo\nend" formats "1\nyield\n2" formats "1\nyield\n2" formats "# Hello\n#\n# ```crystal\n# 1\n# ```\n# Bye" formats "# Hello\n#\n# ```crystal\n# 1\n# ```\n# Bye" formats "foo (1), 2" formats "foo (1), 2" 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 "unless a\n2; 3\nelse\n3\nend" formats "unless a\n2; 3\nelse\n3\nend" formats "if 1\n# nothing\nend" formats "if 1\n# nothing\nend" formats "1 ;\n 2" formats "1 ;\n 2" formats "foo.bar(&.%(baz))" formats "foo.bar(&.%(baz))" 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 "module Foo;end" formats "module Foo;end" formats "module Foo; 1; end" formats "module Foo; 1; end" formats "lib Foo\n fun Bar\nend" formats "lib Foo\n fun Bar\nend" formats "def foo(a, # comment\n *b)\nend" formats "def foo(a, # comment\n *b)\nend" formats "case\nend" formats "case\nend" formats "foo()" formats "foo()" 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 do\n [foo <<-X\n bar\n X\n ]\nend" formats "foo do\n [foo <<-X\n bar\n X\n ]\nend" formats "<<-HTML\n foo\n \#{\"foo\"}\n HTML" formats "<<-HTML\n foo\n \#{\"foo\"}\n HTML" 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 "x : Int32*" formats "x : Int32*" formats " 1" formats " 1" formats "foo(\n 1,\n a: 1,\n b: 2,\n)" formats "foo(\n 1,\n a: 1,\n b: 2,\n)" formats "-> : Int32? {}" formats "-> : Int32? {}" formats "macro foo\n <<-FOO\n hello \n FOO\nend" formats "macro foo\n <<-FOO\n hello \n FOO\nend" formats ":\"foo bar\"" formats ":\"foo bar\"" formats "def foo : A | B(C)\n nil\nend" formats "def foo : A | B(C)\n nil\nend" formats "a &.!.!" formats "a &.!.!" formats "foo.[ 1 , 2 ]" formats "foo.[ 1 , 2 ]" formats "long_variable_name = [1, 2, 3,\n 4, 5, 6]" formats "long_variable_name = [1, 2, 3,\n 4, 5, 6]" formats "begin\n / /\nend" formats "begin\n / /\nend" formats "1 rescue 2" formats "1 rescue 2" formats "a = foo(baz1 do\nend)" formats "a = foo(baz1 do\nend)" formats "def foo(\n @[MyAnn] bar\n); end" formats "def foo(\n @[MyAnn] bar\n); end" formats "%{hello}" formats "%{hello}" formats "if a\n2\n3\nelse\n4\n5\nend" formats "if a\n2\n3\nelse\n4\n5\nend" formats "instance_alignof( Int32 )" formats "instance_alignof( Int32 )" formats "bar = foo(->{\n 1 + 2\n})" formats "bar = foo(->{\n 1 + 2\n})" formats "{ %() }" formats "{ %() }" formats "@@a" formats "@@a" formats "foo = 1\n->foo.foo?" formats "foo = 1\n->foo.foo?" formats "foo(1,\n2,\n)" formats "foo(1,\n2,\n)" formats "bar = foo(->do\n 1 + 2\nend)" formats "bar = foo(->do\n 1 + 2\nend)" formats "return 1 , *2" formats "return 1 , *2" formats "self.as(Int32)" formats "self.as(Int32)" formats "while 1\n2\nend" formats "while 1\n2\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 "{ foo: 1 }" formats "{ foo: 1 }" formats "class Foo\nend\nclass Bar\nend" formats "class Foo\nend\nclass Bar\nend" formats "begin\n begin\n\n end\nend" formats "begin\n begin\n\n end\nend" formats "abstract def foo \n 1" formats "abstract def foo \n 1" formats "typeof( 1, 2, 3 )" formats "typeof( 1, 2, 3 )" formats "def foo(x y)\nend" formats "def foo(x y)\nend" formats "foo(\n 1, 2, &block)" formats "foo(\n 1, 2, &block)" formats "alias Foo= Bar" formats "alias Foo= Bar" formats "if 1\n2 # foo\nend" formats "if 1\n2 # foo\nend" 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 "1 \\\n+ 2" formats "1 \\\n+ 2" formats "foo[ 1, 2 ]?" formats "foo[ 1, 2 ]?" formats "foo { |x, *y| }" formats "foo { |x, *y| }" formats "next {1, 2}, 3" formats "next {1, 2}, 3" 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 "\"1\#{\"4\#{\"\#{\"2\"}\"}3\"}3\#{__DIR__}4\#{5}6\"" formats "\"1\#{\"4\#{\"\#{\"2\"}\"}3\"}3\#{__DIR__}4\#{5}6\"" formats "if 1\n {{1 + 2}}\nend" formats "if 1\n {{1 + 2}}\nend" formats "FOO = 2\nA = 1" formats "FOO = 2\nA = 1" formats "def foo(x : A(B), y)\nend" formats "def foo(x : A(B), y)\nend" formats "Hash{\n foo => <<-EOF,\n foo\n EOF\n bar => <<-BAR,\n bar\n BAR\n}" formats "Hash{\n foo => <<-EOF,\n foo\n EOF\n bar => <<-BAR,\n bar\n BAR\n}" formats "$1?" formats "$1?" formats "1#foo" formats "1#foo" formats "[\n 1, 2, # foo\n 3,\n]" formats "[\n 1, 2, # foo\n 3,\n]" formats "@[Foo::Bar]" formats "@[Foo::Bar]" formats "def foo(*y, **z)\nend" formats "def foo(*y, **z)\nend" formats "#!shebang\n1 + 2" formats "#!shebang\n1 + 2" formats "#######" formats "#######" formats "case nil\nelse nil; nil # comment\nend" formats "case nil\nelse nil; nil # comment\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 "lib Foo\nstruct Foo\nx , y , z : Int32\nend\nend" formats "lib Foo\nstruct Foo\nx , y , z : Int32\nend\nend" formats "foo(\n 1,\n) do\n 2\nend" formats "foo(\n 1,\n) do\n 2\nend" formats "[] of (((Array(T))))" formats "[] of (((Array(T))))" formats "(1)" formats "(1)" formats "while 1 &&\n2 &&\n3\n4\nend" formats "while 1 &&\n2 &&\n3\n4\nend" formats "def foo\n# hello\n1\nend" formats "def foo\n# hello\n1\nend" formats "->{1}" formats "->{1}" formats "next( *1 , *2 )" formats "next( *1 , *2 )" formats "a = 1\ndef bar\nend" formats "a = 1\ndef bar\nend" formats "a = 1\na ||= begin\n 1\nend" formats "a = 1\na ||= begin\n 1\nend" formats "asm(\"nop\")" formats "asm(\"nop\")" formats "1 # foo\n/ 1 /" formats "1 # foo\n/ 1 /" 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 "while 1\n2 # foo\nend" formats "while 1\n2 # foo\nend" formats "foo(a: //)" formats "foo(a: //)" formats "foo \\\nbar" formats "foo \\\nbar" formats "run(\"a\", 1)" formats "run(\"a\", 1)" formats "-> : Int32 {}" formats "-> : Int32 {}" 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 "foo do | x | \n x \n end" formats "foo do | x | \n x \n end" formats "foo bar:baz, qux:other" formats "foo bar:baz, qux:other" formats "a = # foo\n bar(1)" formats "a = # foo\n bar(1)" formats "->foo?" formats "->foo?" formats "@x : A(B | C)?" formats "@x : A(B | C)?" formats "1 if 2" formats "1 if 2" formats "begin\n 1 \\\n + 2\n 3\nend" formats "begin\n 1 \\\n + 2\n 3\nend" formats "yield(1 , \n2)" formats "yield(1 , \n2)" formats "{ 1 => 2 }" formats "{ 1 => 2 }" formats "def foo( & )\nend" formats "def foo( & )\nend" formats "unless a\n2\n3\nend" formats "unless a\n2\n3\nend" formats "enum Foo : Int32\nA = 1\ndef foo\n1\nend\nend" formats "enum Foo : Int32\nA = 1\ndef foo\n1\nend\nend" formats "macro foo\n {{ 1 + 2 }}\\\nend" formats "macro foo\n {{ 1 + 2 }}\\\nend" formats "1 .. 2" formats "1 .. 2" formats "def foo\n 1\n 2\nrescue IO\n 1\nend" formats "def foo\n 1\n 2\nrescue IO\n 1\nend" formats "\"\" + <<-END\n bar\n END" formats "\"\" + <<-END\n bar\n END" formats "@[Foo]" formats "@[Foo]" formats "def foo(x, *, z)\nend" formats "def foo(x, *, z)\nend" formats "def foo(a : T) forall T\n #\n\nend" formats "def foo(a : T) forall T\n #\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 "if 1\n ((1) + 2)\nend" formats "if 1\n ((1) + 2)\nend" formats "asm(\"nop\" :::: \"volatile\" )" formats "asm(\"nop\" :::: \"volatile\" )" formats "def foo( & block )\nend" formats "def foo( & block )\nend" formats ":*" formats ":*" formats "@x[ 1 ] += 2" formats "@x[ 1 ] += 2" formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n : \"f\",\n \"g\")" formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n : \"f\",\n \"g\")" formats "foo{|x|\n x}" formats "foo{|x|\n x}" formats "def foo\nend\n\ndef bar\nend\n\n# foo" formats "def foo\nend\n\ndef bar\nend\n\n# foo" formats "def foo\n1\nend" formats "def foo\n1\nend" formats "private def foo\nend\nprivate def bar\nend" formats "private def foo\nend\nprivate def bar\nend" formats "foo(->do\n 1 + 2\nend)" formats "foo(->do\n 1 + 2\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 "foo : (self)?" formats "foo : (self)?" formats "1.as Int32" formats "1.as Int32" formats "{% if z %}\n class Foo\n end\n{% end %}" formats "{% if z %}\n class Foo\n end\n{% end %}" 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 "1 || 2" formats "1 || 2" formats "x 1, \\\n 2" formats "x 1, \\\n 2" formats "->@foo.foo" formats "->@foo.foo" formats "foo . bar( x , y )" formats "foo . bar( x , y )" formats "{ * 1 * 2,\n*\n3, 4 }" formats "{ * 1 * 2,\n*\n3, 4 }" formats "1 # foo\n2 # bar" formats "1 # foo\n2 # bar" formats "{1 => foo <<-X\nbar\nX\n}" formats "{1 => foo <<-X\nbar\nX\n}" formats "foo . is_a? ( Bar )" formats "foo . is_a? ( Bar )" formats "return( *1 , *2 )" formats "return( *1 , *2 )" formats "asm(\"nop\" : \"a\"(0) : \"b\"(1), \"c\"(2) )" formats "asm(\"nop\" : \"a\"(0) : \"b\"(1), \"c\"(2) )" formats " .. 2" formats " .. 2" formats "a = \\\n # foo\n nil" formats "a = \\\n # foo\n nil" formats "def foo(\n foo,\n @[MyAnn] &block\n); end" formats "def foo(\n foo,\n @[MyAnn] &block\n); end" formats "{ {1}.foo, 2 }" formats "{ {1}.foo, 2 }" formats ":&*" formats ":&*" 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 "case 1\nwhen 2\n\n#comment\nend" formats "case 1\nwhen 2\n\n#comment\nend" formats "SomeLib.UppercasedFunCall 1, 2" formats "SomeLib.UppercasedFunCall 1, 2" formats "%(hello)" formats "%(hello)" formats "foo(\"bar\" \\\n\"baz\")" formats "foo(\"bar\" \\\n\"baz\")" formats "@x ||= 1" formats "@x ||= 1" formats "__LINE__" formats "__LINE__" formats "def //(x)\n 1\nend" formats "def //(x)\n 1\nend" formats "%i(one two three)" formats "%i(one two three)" formats "foo{|x| x}" formats "foo{|x| x}" formats "join io, &.inspect" formats "join io, &.inspect" formats "def foo( x , & : Int32 )\nend" formats "def foo( x , & : Int32 )\nend" formats "def foo(\n a,\n &block\n)\nend" formats "def foo(\n a,\n &block\n)\nend" formats "def foo(@[MyAnn] &); end" formats "def foo(@[MyAnn] &); end" formats "foo &.nil?" formats "foo &.nil?" formats "<<-FOO\n1\nFOO\n\n{\n 1 => 2,\n 10 => 3,\n}" formats "<<-FOO\n1\nFOO\n\n{\n 1 => 2,\n 10 => 3,\n}" formats "def foo(\n **a\n # comment\n)\n 1\nend" formats "def foo(\n **a\n # comment\n)\n 1\nend" formats "1 \\\nif 2" formats "1 \\\nif 2" formats "%w{one( two( three)}" formats "%w{one( two( three)}" formats "macro foo\n {% if 1 %}\\ 2 {% else %}\\ 3 {% end %}\\\nend" formats "macro foo\n {% if 1 %}\\ 2 {% else %}\\ 3 {% end %}\\\nend" formats "@x &&= 1" formats "@x &&= 1" formats "class Foo\n# nothing\nend" formats "class Foo\n# nothing\nend" 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 "case 0\nwhen 0 then 1; 2\n# Comments\nend" formats "case 0\nwhen 0 then 1; 2\n# Comments\nend" formats "foo . responds_to? :bar" formats "foo . responds_to? :bar" formats "foo(1 &- 2)" formats "foo(1 &- 2)" formats "foo ( )" formats "foo ( )" formats "def foo(**z)\nend" formats "def foo(**z)\nend" formats "foo(\n [\n 1,\n 2,\n ],\n [\n 3,\n 4,\n ]\n)" formats "foo(\n [\n 1,\n 2,\n ],\n [\n 3,\n 4,\n ]\n)" formats "lib Foo\n fun Foo = Bar\nend" formats "lib Foo\n fun Foo = Bar\nend" formats "foo : Pointer(Foo)*" formats "foo : Pointer(Foo)*" formats "foo : (String -> Array(String)?) | (String -> Array(String)) | Nil" formats "foo : (String -> Array(String)?) | (String -> Array(String)) | Nil" formats "1 + \n2" formats "1 + \n2" formats "def `(x)\n 1\nend" formats "def `(x)\n 1\nend" formats "if 1\n ->{ 1 }\nend" formats "if 1\n ->{ 1 }\nend" formats "def a\n b(\n 1, # x\n # y\n )\nend" formats "def a\n b(\n 1, # x\n # y\n )\nend" formats "foo 1 , 2" formats "foo 1 , 2" formats "x = <<-FOO\n hello\n FOO\n\ndef bar\nend" formats "x = <<-FOO\n hello\n FOO\n\ndef bar\nend" formats "0x1234_u32" formats "0x1234_u32" formats "Foo( x: Int32 , y: Float64 )" formats "Foo( x: Int32 , y: Float64 )" formats "1 + \\\n2\n3" formats "1 + \\\n2\n3" formats "foo { | ( a, *b , c ) | a }" formats "foo { | ( a, *b , c ) | a }" formats "a = 1 + # foo\n2" formats "a = 1 + # foo\n2" formats "foo 1, a: 1,\nb: 2,\nc: 3,\n&block" formats "foo 1, a: 1,\nb: 2,\nc: 3,\n&block" formats "\n # hello\n\n1" formats "\n # hello\n\n1" formats "[\n# foo\n] of String" formats "[\n# foo\n] of String" formats "1\n.as(Int32)" formats "1\n.as(Int32)" formats "foo : A(B)\nbar : C" formats "foo : A(B)\nbar : C" formats "1\n..2" formats "1\n..2" formats "{\n foo: 1,\n b: 2,\n barbaz: 3,\n}" formats "{\n foo: 1,\n b: 2,\n barbaz: 3,\n}" formats "foo[] =1" formats "foo[] =1" formats "1 ... 2" formats "1 ... 2" formats "{ %w() }" formats "{ %w() }" formats "@x[ 1 ] &&= 2" formats "@x[ 1 ] &&= 2" formats "[\n <<-EOF,\n foo\n EOF\n <<-BAR,\n bar\n BAR\n]" formats "[\n <<-EOF,\n foo\n EOF\n <<-BAR,\n bar\n BAR\n]" formats "enum Baz\nA = 1\nFOO = 2\n\nEX = 3\nend" formats "enum Baz\nA = 1\nFOO = 2\n\nEX = 3\nend" formats "private FOO = 2\nprivate A = 1" formats "private FOO = 2\nprivate A = 1" formats "def foo(x : ( A | B )) : ( A | B )\nend" formats "def foo(x : ( A | B )) : ( A | B )\nend" formats "class Foo\n NamedTuple(\n a: Int32,\n )\nend" formats "class Foo\n NamedTuple(\n a: Int32,\n )\nend" formats "{\n 1 => 2, 3 => 4,\n 567 => 8910,\n}" formats "{\n 1 => 2, 3 => 4,\n 567 => 8910,\n}" formats "x = {% if flag?(:foo) %}\n foo + bar\n {% else %}\n baz + qux\n {% end %}" formats "x = {% if flag?(:foo) %}\n foo + bar\n {% else %}\n baz + qux\n {% end %}" formats "{ # foo\n 1,\n}" formats "{ # foo\n 1,\n}" formats "x : A | B" formats "x : A | B" formats "1.!=() { 3 }" formats "1.!=() { 3 }" formats "%x(foo \#{ bar })" formats "%x(foo \#{ bar })" formats "module Foo\n# nothing\nend" formats "module Foo\n# nothing\nend" formats "foo.[ 1, 2 ]?" formats "foo.[ 1, 2 ]?" formats "def foo : self | Nil\n nil\nend" formats "def foo : self | Nil\n nil\nend" formats "if 1\n foo(\n bar\n # comment\n )\nend" formats "if 1\n foo(\n bar\n # comment\n )\nend" formats "Foo( Bar( ) )" formats "Foo( Bar( ) )" formats "/\#{1}/imx" formats "/\#{1}/imx" formats "def foo\n <<-FOO\n foo \#{1}\n FOO\nend" formats "def foo\n <<-FOO\n foo \#{1}\n FOO\nend" formats "next { {1, 2}, {3, 4} }, 5" formats "next { {1, 2}, {3, 4} }, 5" formats "case 1 \n in Int32 \n 3 \n end" formats "case 1 \n in Int32 \n 3 \n end" formats "foo(\n# x\n1,\n\n# y\nz: 2\n)" formats "foo(\n# x\n1,\n\n# y\nz: 2\n)" formats "Tuple()" formats "Tuple()" 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 "foo[ 1 , 2 ]" formats "foo[ 1 , 2 ]" formats "foo(bar(baz3 do\nend))" formats "foo(bar(baz3 do\nend))" formats "if a\n b &c\nend" formats "if a\n b &c\nend" formats "case 1 \n when 2 ;\n 3 \n end" formats "case 1 \n when 2 ;\n 3 \n end" formats "def foo( x , & block : ->)\nend" formats "def foo( x , & block : ->)\nend" formats "$1" formats "$1" formats "Foo(\"bar\": Int32, \"baz qux\": Float64)" formats "Foo(\"bar\": Int32, \"baz qux\": Float64)" formats "foo(->{\n 1 + 2\n})" formats "foo(->{\n 1 + 2\n})" formats "asm(\n\"nop\"\n)" formats "asm(\n\"nop\"\n)" formats "x : A?" formats "x : A?" formats "x : {A, B}" formats "x : {A, B}" formats "1 #=>2" formats "1 #=>2" formats "bla.select(&.all?{ |x| x } )" formats "bla.select(&.all?{ |x| x } )" formats "return 1\n# end" formats "return 1\n# end" formats "1\n\n\n2" formats "1\n\n\n2" formats " ((1) + 2)" formats " ((1) + 2)" formats "1 #=> 2" formats "1 #=> 2" formats "->{\n # first comment\n puts \"hi\"\n # second comment\n}" formats "->{\n # first comment\n puts \"hi\"\n # second comment\n}" formats "case 1\nwhen 1 then\n2\nwhen 3\n4\nend" formats "case 1\nwhen 1 then\n2\nwhen 3\n4\nend" formats "SomeLib.UppercasedFunCall" formats "SomeLib.UppercasedFunCall" formats "begin\n ()\nend" formats "begin\n ()\nend" formats "def foo(\n @[MyAnn]\n bar\n); end" formats "def foo(\n @[MyAnn]\n bar\n); end" formats "next( 1 )" formats "next( 1 )" 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 "foo(1, ) { }" formats "foo(1, ) { }" formats "foo(1 ||\n # foo\n 2)" formats "foo(1 ||\n # foo\n 2)" formats "" formats "" formats "macro []=(x, y)\nend" formats "macro []=(x, y)\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 " <<-HTML\n \#{1}\n HTML" formats " <<-HTML\n \#{1}\n HTML" formats "foo" formats "foo" formats "foo(\n 1,\n &.foo\n)" formats "foo(\n 1,\n &.foo\n)" formats "enum Foo\nA = 1\nend" formats "enum Foo\nA = 1\nend" formats "def foo ( @@x) \n end" formats "def foo ( @@x) \n end" formats "$~ = 1" formats "$~ = 1" formats "foo.[ 1 , 2 ] =3" formats "foo.[ 1 , 2 ] =3" formats "return { {1, 2}, {3, 4} }" formats "return { {1, 2}, {3, 4} }" formats "foo {;1}" formats "foo {;1}" formats "->( x , y ) { x }" formats "->( x , y ) { x }" formats "foo 1" formats "foo 1" formats "Hash{\n foo => <<-EOF\n foo\n EOF\n}" formats "Hash{\n foo => <<-EOF\n foo\n EOF\n}" formats "foo &.[]=( 1, 2 )" formats "foo &.[]=( 1, 2 )" formats "1.=== { 3 }" formats "1.=== { 3 }" formats "enum Foo;end" formats "enum Foo;end" formats "class Foo\n@x : Int32\nend" formats "class Foo\n@x : Int32\nend" formats "[1, 2, 3]" formats "[1, 2, 3]" formats "1+2*3" formats "1+2*3" formats "foo(1, &.bar)" formats "foo(1, &.bar)" formats "a = if 1\n2\n3\nend" formats "a = if 1\n2\n3\nend" formats "foo(out x)" formats "foo(out x)" formats "def foo(x @@y)\nend" formats "def foo(x @@y)\nend" formats "foo([\n 1,\n 2,\n 3,\n])" formats "foo([\n 1,\n 2,\n 3,\n])" formats "1.[]= { 3 }" formats "1.[]= { 3 }" formats "begin\n query = <<-HEREDOC\n foo\n HEREDOC\nend" formats "begin\n query = <<-HEREDOC\n foo\n HEREDOC\nend" formats "begin\n 0[1] rescue 2 end" formats "begin\n 0[1] rescue 2 end" formats "macro [](x)\nend" formats "macro [](x)\nend" formats "foo x: 1" formats "foo x: 1" 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 "lib Foo\nstruct Foo\nend\nend" formats "lib Foo\nstruct Foo\nend\nend" formats "()" formats "()" formats "macro foo\n {{ 1 + 2 }}\nend" formats "macro foo\n {{ 1 + 2 }}\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 = \nif 1\n2\nend" formats "a = \nif 1\n2\nend" formats "[\n a(), # b\n]" formats "[\n a(), # b\n]" formats "if 1 # foo\nend" formats "if 1 # foo\nend" formats "foo = 1\n->foo.foo" formats "foo = 1\n->foo.foo" formats "case 1\nend" formats "case 1\nend" formats "foo do\n {{ foo <<-X\n bar\n X\n }}\nend" formats "foo do\n {{ foo <<-X\n bar\n X\n }}\nend" formats "__DIR__" formats "__DIR__" formats "foo x: 1, y: 2" formats "foo x: 1, y: 2" formats "{} of A => B\n{} of Foo => Bar" formats "{} of A => B\n{} of Foo => Bar" 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,\ny)\n yield\nend" formats "def foo(x,\ny)\n yield\nend" formats "def foo(x ,)\n yield\nend" formats "def foo(x ,)\n yield\nend" formats "def foo\n yield\nend" formats "def foo\n yield\nend" formats "def foo(\nx)\n yield\nend" formats "def foo(\nx)\n yield\nend" formats "def foo(x,\ny,)\n yield\nend" formats "def foo(x,\ny,)\n yield\nend" formats "def foo(a, **b)\n yield\nend" formats "def foo(a, **b)\n yield\nend" formats "def foo(x,\n)\n yield\nend" formats "def foo(x,\n)\n yield\nend" formats "def foo(x\n)\n yield\nend" formats "def foo(x\n)\n yield\nend" formats "def foo(\nx,\ny)\n yield\nend" formats "def foo(\nx,\ny)\n yield\nend" formats "def foo(x)\n yield\nend" formats "def foo(x)\n yield\nend" formats "def foo()\n yield\nend" formats "def foo()\n yield\nend" formats "def foo(\nx, y)\n yield\nend" formats "def foo(\nx, y)\n yield\nend" formats "def foo(\n)\n yield\nend" formats "def foo(\n)\n yield\nend" formats "def foo # bar\n yield\nend" formats "def foo # bar\n yield\nend" formats "foo a , *b" formats "foo a , *b" 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 &.responds_to?(:foo)" formats "foo &.responds_to?(:foo)" formats "def foo(\nx, #foo\nz #bar\n)\nend" formats "def foo(\nx, #foo\nz #bar\n)\nend" formats "/foo \#{ bar }/" formats "/foo \#{ bar }/" formats "foo 1 , &bar" formats "foo 1 , &bar" formats "responds_to? :foo" formats "responds_to? :foo" formats "case 1 \n when 2 \n 3 \n end" formats "case 1 \n when 2 \n 3 \n end" formats "x = a do\n 1 ||\n 2\nend" formats "x = a do\n 1 ||\n 2\nend" formats "def a\n [\n 1, # x\n # y\n ]\nend" formats "def a\n [\n 1, # x\n # y\n ]\nend" formats "Set{ # foo\n 1,\n}" formats "Set{ # foo\n 1,\n}" formats "1.!= { 3 }" formats "1.!= { 3 }" formats "foo { | a, ( b , (c, d) ) | a + b + c }" formats "foo { | a, ( b , (c, d) ) | a + b + c }" formats "class Actor\n macro inherited\nend\nend\n" formats "class Actor\n macro inherited\nend\nend\n" formats "$1.bar" formats "$1.bar" formats "begin\n1\nrescue Int32 \n3\nend" formats "begin\n1\nrescue Int32 \n3\nend" formats "# ```text\n# 1 + 2\n# ```" formats "# ```text\n# 1 + 2\n# ```" formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n : \"f\")" formats "asm(\"a\" : \"b\"(c) : \"d\"(e)\n : \"f\")" formats "asm(\n\"nop\" : \"a\"(0), \"b\"(1) )" formats "asm(\n\"nop\" : \"a\"(0), \"b\"(1) )" formats "1 if nil?\na.b + c" formats "1 if nil?\na.b + c" formats "@[Foo( 1, 2 )]" formats "@[Foo( 1, 2 )]" formats "instance_sizeof( Int32 )" formats "instance_sizeof( Int32 )" formats "10**a" formats "10**a" formats "{ {1, 2, 3} => 4 }" formats "{ {1, 2, 3} => 4 }" formats "@[Foo(\n foo: 1,\n)]\ndef foo\nend" formats "@[Foo(\n foo: 1,\n)]\ndef foo\nend" formats "alias X = (A, B) ->\nbar : C" formats "alias X = (A, B) ->\nbar : C" formats "foo &.as?(T)" formats "foo &.as?(T)" formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1), \"c\"(2) )" formats "asm(\"nop\" : \"a\"(0)\n: \"b\"(1), \"c\"(2) )" formats "{ {foo: 2} }" formats "{ {foo: 2} }" formats "1 == / /" formats "1 == / /" formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\\v\\f\\e\"" formats "\"\\\\\\\"\\#\\a\\b\\n\\r\\t\\v\\f\\e\"" formats "1 +\n # foo\n 2" formats "1 +\n # foo\n 2" formats "bar = foo([\n 1,\n 2,\n 3,\n])" formats "bar = foo([\n 1,\n 2,\n 3,\n])" formats "NamedTuple(\n a: Int32,\n)" formats "NamedTuple(\n a: Int32,\n)" formats "1 &&\n2 &&\n3" formats "1 &&\n2 &&\n3" formats "\"foo \#{ 1 } \#{ __DIR__ }\"" formats "\"foo \#{ 1 } \#{ __DIR__ }\"" 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 " ( 1; 2; 3 ) " formats " ( 1; 2; 3 ) " formats "a &.b.c.as C" formats "a &.b.c.as C" formats "macro foo\n {{\n1 + 2 }}\nend" formats "macro foo\n {{\n1 + 2 }}\nend" formats "x, y, z = <<-FOO, <<-BAR, <<-BAZ\n hello\n FOO\n world\n BAR\n qux\nBAZ" formats "x, y, z = <<-FOO, <<-BAR, <<-BAZ\n hello\n FOO\n world\n BAR\n qux\nBAZ" formats "%w(\n one two\n three four\n)" formats "%w(\n one two\n three four\n)" formats "foo{}" formats "foo{}" formats "a.b &.[c]\n1" formats "a.b &.[c]\n1" formats "foo . responds_to?( :bar )" formats "foo . responds_to?( :bar )" formats "module Foo\n1\n\n# foo\nend" formats "module Foo\n1\n\n# foo\nend" formats "lib LibFoo\n {% begin %}\n fun foo : Int32\n {% end %}\nend" formats "lib LibFoo\n {% begin %}\n fun foo : Int32\n {% end %}\nend" formats "foo : (String -> String?) | (String)" formats "foo : (String -> String?) | (String)" 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 "\"\\a\\c\\b\\d\"" formats "\"\\a\\c\\b\\d\"" formats "class X\n annotation FooAnnotation \n end \n end" formats "class X\n annotation FooAnnotation \n end \n end" formats "->foo" formats "->foo" formats "case 1\nwhen 2 # a\n # b\nend" formats "case 1\nwhen 2 # a\n # b\nend" formats "<<-HTML\n \#{\"foo\"}\#{1}\n HTML" formats "<<-HTML\n \#{\"foo\"}\#{1}\n HTML" formats "def foo\n 1 #\nrescue\nend" formats "def foo\n 1 #\nrescue\nend" formats "def foo( & \n )\nend" formats "def foo( & \n )\nend" formats "if a\n2\nend" formats "if a\n2\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 "__FILE__" formats "__FILE__" 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 "asm(\"nop\" :::: \"volatile\" , \"alignstack\" , \"intel\" )" formats "asm(\"nop\" :::: \"volatile\" , \"alignstack\" , \"intel\" )" 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 "if 0\n1 &&\n2 &&\n3\nend" formats "if 0\n1 &&\n2 &&\n3\nend" formats "class Foo\n1\n\n# foo\nend" formats "class Foo\n1\n\n# foo\nend" formats "case\nend" formats "case\nend" formats "foo.as Int32*" formats "foo.as Int32*" formats "if 1\nelse\n2\nend\n3" formats "if 1\nelse\n2\nend\n3" formats ":&+" formats ":&+" formats "def foo\nend;def bar\nend" formats "def foo\nend;def bar\nend" formats "macro flags\n {% if 1 %}\\\n {% end %}\\\nend" formats "macro flags\n {% if 1 %}\\\n {% end %}\\\nend" formats "while 1 # foo\n # bar\n 2\nend" formats "while 1 # foo\n # bar\n 2\nend" formats "foo 1, do\n2\nend" formats "foo 1, do\n2\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 "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 x(@y = ->(z) {})\nend" formats "def x(@y = ->(z) {})\nend" formats "macro foo\n {% unless 1 %} 2 {% end %}\nend" formats "macro foo\n {% unless 1 %} 2 {% end %}\nend" formats "1\n..\n2" formats "1\n..\n2" formats "case 1\nelse # foo\n # bar\nend" formats "case 1\nelse # foo\n # bar\nend" formats "macro foo\n{% verbatim do %}1 + 2{% end %}\nend" formats "macro foo\n{% verbatim do %}1 + 2{% end %}\nend" formats "foo(baz(x, y) do\n 1 + 2\nend)" formats "foo(baz(x, y) do\n 1 + 2\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 "foo : self?" formats "foo : self?" formats "def foo(\n @[MyAnn] bar\n); end" formats "def foo(\n @[MyAnn] bar\n); end" formats "def foo( x , & block )\nend" formats "def foo( x , & block )\nend" formats "foo.foo1(\n bar\n .bar1\n .bar2)" formats "foo.foo1(\n bar\n .bar1\n .bar2)" formats "enum Foo\nA \nend" formats "enum Foo\nA \nend" formats "def foo\nend\ndef bar\nend" formats "def foo\nend\ndef bar\nend" formats "a, b = \nif 1\n2\nend" formats "a, b = \nif 1\n2\nend" formats "def foo(x : (self)?)\nend" formats "def foo(x : (self)?)\nend" formats "foo.bar. as? Int32" formats "foo.bar. as? Int32" formats "{ # foo\n 1 => 2,\n}" formats "{ # foo\n 1 => 2,\n}" formats "lib Foo\nfun foo\nend" formats "lib Foo\nfun foo\nend" formats "::Pointer(T)" formats "::Pointer(T)" formats "::Foo:: Bar" formats "::Foo:: Bar" formats "def foo\n 1 #\nrescue\nend" formats "def foo\n 1 #\nrescue\nend" formats "foo : Foo*****" formats "foo : Foo*****" formats "[] of Int32\n1" formats "[] of Int32\n1" formats "lib Foo::Bar\nend" formats "lib Foo::Bar\nend" formats "class Actor\n macro inherited\n\nend\nend\n" formats "class Actor\n macro inherited\n\nend\nend\n" formats "if 1 # foo\n2\nend" formats "if 1 # foo\n2\nend" Semantic: lib errors if using named args with variadic function errors if using named args with variadic function reports error on fun return type not primitive like reports error on fun return type not primitive like passes int as another integer type in variable passes int as another integer type in variable reports error on typedef type not primitive like reports error on typedef type not primitive like error if passing non primitive type as varargs error if passing non primitive type as varargs types a varargs external types a varargs external reopens lib and adds same link annotations reopens lib and adds same link annotations errors if missing arguments errors if missing arguments raises wrong argument type raises wrong argument type errors if redefining fun with different signature (#2468) errors if redefining fun with different signature (#2468) warns if Link annotations use positional arguments warns if Link annotations use positional arguments errors if lib named arg is not a String errors if lib named arg is not a String types lib var get types lib var get errors if using void as parameter (related to #508) errors if using void as parameter (related to #508) error if passing type to LibC with to_unsafe but type doesn't match error if passing type to LibC with to_unsafe but type doesn't match errors if using out with non-pointer errors if using out with non-pointer reopens lib and adds more link annotations reopens lib and adds more link annotations supports forward references (#399) supports forward references (#399) errors if wrong number of arguments for CallConvention errors if wrong number of arguments for CallConvention defined fun with aliased type defined fun with aliased type supports forward references with struct inside struct (#399) supports forward references with struct inside struct (#399) reports error on struct field type not primitive like reports error on struct field type not primitive like errors if CallConvention argument is not a string errors if CallConvention argument is not a string reports error out can only be used with lib funs in named argument reports error out can only be used with lib funs in named argument disallows passing nil or pointer to arg expecting pointer disallows passing nil or pointer to arg expecting pointer errors if fourth argument is not a bool errors if fourth argument is not a bool defines lib funs before funs with body defines lib funs before funs with body errors if missing link arguments errors if missing link arguments types fun returning nil as nil types fun returning nil as nil errors if defines def on lib errors if defines def on lib errors if lib fun call is part of dispatch errors if lib fun call is part of dispatch allows passing splat to LibC fun allows passing splat to LibC fun warns if @[Link(static: true)] is specified warns if @[Link(static: true)] is specified errors if invoking to_i32! and got wrong type errors if invoking to_i32! and got wrong type errors if using unknown named param errors if using unknown named param overrides definition of fun overrides definition of fun reports error if using out with an already declared variable reports error if using out with an already declared variable errors if using out with void pointer (#2424) errors if using out with void pointer (#2424) allows invoking out with underscore allows invoking out with underscore can use tuple as fun return can use tuple as fun return gathers link annotations from macro expression gathers link annotations from macro expression types fun returning nothing as nil types fun returning nothing as nil reports redefinition of fun with different signature reports redefinition of fun with different signature can use out with named args can use out with named args errors if missing argument errors if missing argument errors if assigning void lib call to var (#4414) errors if assigning void lib call to var (#4414) reports error on fun argument type not primitive like reports error on fun argument type not primitive like errors if unknown named arg errors if unknown named arg raises on undefined fun raises on undefined fun errors if dll argument does not end with '.dll' errors if dll argument does not end with '.dll' doesn't try to invoke unsafe for c struct/union (#1362) doesn't try to invoke unsafe for c struct/union (#1362) allows passing double splat to LibC fun allows passing double splat to LibC fun errors if first argument is not a string errors if first argument is not a string specifies a call convention to a lib specifies a call convention to a lib allows dll argument allows dll argument errors if second argument is not a string errors if second argument is not a string errors if using out with varargs errors if using out with varargs errors if lib already specified with positional argument errors if lib already specified with positional argument errors if passing void lib call to call argument (#4414) errors if passing void lib call to call argument (#4414) specifies a call convention specifies a call convention reports error out can only be used with lib funs reports error out can only be used with lib funs errors if using out with void pointer through type errors if using out with void pointer through type allows invoking lib call without obj inside lib allows invoking lib call without obj inside lib correctly attached link flags if there's a macro if correctly attached link flags if there's a macro if errors if parameter already specified errors if parameter already specified errors if third argument is not a bool errors if third argument is not a bool types lib var get with forward declaration types lib var get with forward declaration reports error on fun argument type not primitive like, Nil (#2994) reports error on fun argument type not primitive like, Nil (#2994) errors if too many link arguments errors if too many link arguments passes int as another integer type with literal passes int as another integer type with literal raises wrong number of arguments raises wrong number of arguments errors if dll argument contains directory separators errors if dll argument contains directory separators errors if invoking to_i32! and got error in that call errors if invoking to_i32! and got error in that call types fun returning void as nil types fun returning void as nil reports error when changing var type and something breaks reports error when changing var type and something breaks errors if defining incompatible funs with the same name in the same lib (#3045) errors if defining incompatible funs with the same name in the same lib (#3045) can use named args can use named args can use macros inside lib can use macros inside lib error if passing non primitive type as varargs invoking to_unsafe error if passing non primitive type as varargs invoking to_unsafe reports error when changing instance var type and something breaks reports error when changing instance var type and something breaks can list lib functions at the top level (#12395) can list lib functions at the top level (#12395) clears annotations after lib clears annotations after lib errors if defining incompatible funs with the same name in different libs (#3045) errors if defining incompatible funs with the same name in different libs (#3045) errors if CallConvention argument is not a valid string errors if CallConvention argument is not a valid string passes float as another integer type in variable passes float as another integer type in variable types lib var set types lib var set can use macros inside struct can use macros inside struct errors if using void via typedef as parameter (related to #508) errors if using void via typedef as parameter (related to #508) Semantic: cast errors on cast inside a call that can't be instantiated errors on cast inside a call that can't be instantiated should error if can't cast even if not instantiated should error if can't cast even if not instantiated doesn't error if casting to a generic type doesn't error if casting to a generic type casts to target type even if can't infer casted value type (obsolete) casts to target type even if can't infer casted value type (obsolete) casts to incompatible type gives error casts to incompatible type gives error disallows casting fun to pointer disallows casting fun to pointer casts from union to compatible union casts from union to compatible union allows casting NoReturn to any type (#2132) allows casting NoReturn to any type (#2132) can cast from Void* to virtual type (#3014) can cast from Void* to virtual type (#3014) can cast to metaclass (2) (#11121) can cast to metaclass (2) (#11121) errors if casting nil to Object inside typeof (#2403) errors if casting nil to Object inside typeof (#2403) doesn't cast to unbound generic type (as?) (#5927) doesn't cast to unbound generic type (as?) (#5927) casts to bigger union casts to bigger union doesn't allow upcast of generic type var (#996) doesn't allow upcast of generic type var (#996) doesn't eagerly try to check cast type (#12268) doesn't eagerly try to check cast type (#12268) casts pointer to another type casts pointer to another type considers else to be unreachable (#9658) considers else to be unreachable (#9658) disallows casting to Reference disallows casting to Reference casts to compatible type and use it casts to compatible type and use it doesn't cast to virtual primitive (bug) doesn't cast to virtual primitive (bug) casts from union to incompatible union gives error casts from union to incompatible union gives error doesn't crash with typeof no-type (#7441) doesn't crash with typeof no-type (#7441) casts pointer of one type to another type casts pointer of one type to another type casts uninstantiated generic class to itself (#10882) casts uninstantiated generic class to itself (#10882) casts from pointer to generic class gives error casts from pointer to generic class gives error allows casting reference union to void pointer allows casting reference union to void pointer casts to module casts to module disallows casting pointer to fun disallows casting pointer to fun casts to base class making it virtual (1) casts to base class making it virtual (1) disallows casting int to pointer disallows casting int to pointer disallows casting to Object (#815) disallows casting to Object (#815) casts to same type is ok casts to same type is ok allows casting object to void pointer allows casting object to void pointer casts to generic virtual type casts to generic virtual type doesn't cast to unbound generic type (as) (#5927) doesn't cast to unbound generic type (as) (#5927) can cast to metaclass (bug) can cast to metaclass (bug) casts to base class making it virtual (2) casts to base class making it virtual (2) disallows casting to Class disallows casting to Class Normalize: unless normalizes unless normalizes unless Semantic: class var types class var as nil if not assigned at the top level types class var as nil if not assigned at the top level doesn't error on recursive dependency if var is nilable (#2943) doesn't error on recursive dependency if var is nilable (#2943) gives correct error when trying to use Int as a class variable type gives correct error when trying to use Int as a class variable type errors on undefined constant (1) errors on undefined constant (1) declares class var in generic module declares class var in generic module errors when using Class (#2605) errors when using Class (#2605) doesn't error if accessing class variable before defined (#2941) doesn't error if accessing class variable before defined (#2941) declares class variable declares class variable types class var inside instance method types class var inside instance method can access constant from generic metaclass (#3719) can access constant from generic metaclass (#3719) infers type from T.new infers type from T.new infers in multiple assign for tuple type (1) infers in multiple assign for tuple type (1) infers type from number literal infers type from number literal allows self.class as type var in class body (#537) allows self.class as type var in class body (#537) errors if using class variable at the top level errors if using class variable at the top level errors if class variable not nilable without initializer errors if class variable not nilable without initializer errors if redefining class var type in subclass, with guess errors if redefining class var type in subclass, with guess errors if redefining class var type in subclass errors if redefining class var type in subclass can find class var through included module can find class var through included module types as nilable if doesn't have initializer types as nilable if doesn't have initializer declares class variable (2) declares class variable (2) allows class var in primitive types (#612) allows class var in primitive types (#612) errors on undefined constant (2) errors on undefined constant (2) types class var types class var declares class var in generic class declares class var in generic class 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) errors if redefining class var type in included module errors if redefining class var type in included module says undefined class variable says undefined class variable declares uninitialized (#2935) declares uninitialized (#2935) errors when typing a class variable inside a method errors when typing a class variable inside a method 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) redefines class variable type redefines class variable type types class var inside proc literal inside class types class var inside proc literal inside class errors if using local variable in initializer errors if using local variable in initializer can find class var in subclass can find class var in subclass Codegen: until codegens until codegens until Semantic: alias allows recursive array with alias allows recursive array with alias allows using alias type as generic type allows using alias type as generic type errors if trying to use typeof in alias errors if trying to use typeof in alias reopens module through alias reopens module through alias allows defining recursive fun aliases allows defining recursive fun aliases doesn't crash by infinite recursion against type alias and generics (#5329) doesn't crash by infinite recursion against type alias and generics (#5329) works with alias type as restriction works with alias type as restriction can use .class in alias (#2835) can use .class in alias (#2835) declares alias inside type declares alias inside type overloads union type through alias overloads union type through alias doesn't find type parameter in alias (#3502) doesn't find type parameter in alias (#3502) finds type through alias (#4645) finds type through alias (#4645) reopens struct through alias reopens struct through alias uses constant in alias with math (#3259) uses constant in alias with math (#3259) errors if alias is already defined as another type errors if alias is already defined as another type resolves alias type resolves alias type errors if declares alias inside if errors if declares alias inside if inherits class through alias inherits class through alias errors if defining infinite recursive alias errors if defining infinite recursive alias errors if alias already defined errors if alias already defined allows defining recursive aliases allows defining recursive aliases errors if trying to resolve type of recursive alias errors if trying to resolve type of recursive alias inherits struct through alias inherits struct through alias looks up alias for macro resolution (#3548) looks up alias for macro resolution (#3548) includes module through alias includes module through alias can pass recursive alias to proc can pass recursive alias to proc uses constant in alias (#3259) uses constant in alias (#3259) reopens class through alias reopens class through alias resolves type through alias (#563) resolves type through alias (#563) errors if defining infinite recursive alias in union errors if defining infinite recursive alias in union allows using generic type of recursive alias as restriction (#488) allows using generic type of recursive alias as restriction (#488) Semantic: exception gets a non-nilable type if all rescue are unreachable (#8751) gets a non-nilable type if all rescue are unreachable (#8751) can't use next inside block inside ensure (#4470) can't use next inside block inside ensure (#4470) can't return from ensure (#4470) can't return from ensure (#4470) type union with empty rescue block type union with empty rescue block doesn't crash on break inside rescue, in while (#2441) doesn't crash on break inside rescue, in while (#2441) types instance variable as nilable if assigned inside an exception handler (#1845) types instance variable as nilable if assigned inside an exception handler (#1845) marks proc literal as raises marks proc literal as raises types a var after rescue as being nilable types a var after rescue as being nilable marks fun as raises marks fun as raises can use break inside while inside ensure (#4470) can use break inside while inside ensure (#4470) can use next inside block inside ensure (#4470) can use next inside block inside ensure (#4470) marks method calling method that raises as raises marks method calling method that raises as raises correctly types variable assigned inside nested exception handler (#9769) correctly types variable assigned inside nested exception handler (#9769) can't return from while inside ensure (#4470) can't return from while inside ensure (#4470) doesn't consider vars as nilable inside else (#610) doesn't consider vars as nilable inside else (#610) can't use break inside while inside ensure (#4470) can't use break inside while inside ensure (#4470) marks instance variable as nilable if assigned inside rescue inside initialize marks instance variable as nilable if assigned inside rescue inside initialize types exception with type types exception with type assigns var inside ensure (1) (#3919) assigns var inside ensure (1) (#3919) type for exception handler for explicit types type for exception handler for explicit types errors if caught exception is not a subclass of Exception errors if caught exception is not a subclass of Exception doesn't type instance variable as nilable if assigned inside an exception handler after being assigned doesn't type instance variable as nilable if assigned inside an exception handler after being assigned can use next inside while inside ensure (#4470) can use next inside while inside ensure (#4470) types var as nilable inside ensure (2) types var as nilable inside ensure (2) types exception var with no types types exception var with no types types var as not nil if defined inside begin and defined inside rescue types var as not nil if defined inside begin and defined inside rescue assigns var inside ensure (2) (#3919) assigns var inside ensure (2) (#3919) detects reading nil-if-read variable after exception handler (#4723) detects reading nil-if-read variable after exception handler (#4723) doesn't infect type to variable before handler (#4002) doesn't infect type to variable before handler (#4002) can use break inside block inside ensure (#4470) can use break inside block inside ensure (#4470) can't use next inside while inside ensure (#4470) can't use next inside while inside ensure (#4470) types var as nilable if previously nilable (2) types var as nilable if previously nilable (2) transform nodes in else block transform nodes in else block correctly types variables inside conditional inside exception handler with no-return rescue (#8012) correctly types variables inside conditional inside exception handler with no-return rescue (#8012) types a var after begin rescue as having all possible types in begin and rescue types a var after begin rescue as having all possible types in begin and rescue can't return from block inside ensure (#4470) can't return from block inside ensure (#4470) types a var after begin rescue with no-return in rescue types a var after begin rescue with no-return in rescue types var as nilable inside ensure (1) types var as nilable inside ensure (1) marks method that calls another method that raises as raises, recursively marks method that calls another method that raises as raises, recursively types code with abstract exception that delegates method types code with abstract exception that delegates method types var assignment inside block inside exception handler (#3324) types var assignment inside block inside exception handler (#3324) types a var after begin rescue as having all possible types and nil in begin if read (2) types a var after begin rescue as having all possible types and nil in begin if read (2) says syntax error on "begin; rescue ex; rescue ex : Foo; end; ex" says syntax error on "begin; rescue ex; rescue ex : Foo; end; ex" can't use break inside block inside ensure (#4470) can't use break inside block inside ensure (#4470) marks method calling lib fun that raises as raises marks method calling lib fun that raises as raises type is union of main and rescue blocks type is union of main and rescue blocks says syntax error on "begin; rescue ex; rescue; end; ex" says syntax error on "begin; rescue ex; rescue; end; ex" errors if caught exception is not a subclass of Exception without var errors if caught exception is not a subclass of Exception without var correctly types #1988 correctly types #1988 shadows local variable (1) shadows local variable (1) remains nilable after rescue remains nilable after rescue types a var after begin rescue as having all possible types in begin and rescue (2) types a var after begin rescue as having all possible types in begin and rescue (2) says syntax error on "begin; else; 1; end" says syntax error on "begin; else; 1; end" marks def as raises marks def as raises types var as nilable if previously nilable (1) types var as nilable if previously nilable (1) type union with empty main block type union with empty main block Semantic: special vars types $? when not defined as no return types $? when not defined as no return infers $~ infers $~ types $? when not defined as no return (2) types $? when not defined as no return (2) 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 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 errors if assigning $~ at top level errors if assigning $~ at top level infers in block with nested block infers in block with nested block Crystal::Repl::Interpreter calls does Assign class var with wants_struct_pointer does Assign class var with wants_struct_pointer inlines method that just reads an instance var, but produces side effects of args inlines method that just reads an instance var, but produces side effects of args interprets call with if interprets call with if interprets call with named arguments interprets call with named arguments mutates call argument mutates call argument does call on Pointer#value that's a struct, takes a pointer to instance var does call on Pointer#value that's a struct, takes a pointer to instance var does call on self that's a struct, takes a pointer to instance var, inside if does call on self that's a struct, takes a pointer to instance var, inside if does ReadInstanceVar with wants_struct_pointer does ReadInstanceVar with wants_struct_pointer interprets explicit self call for primitive types interprets explicit self call for primitive types puts struct pointer after tuple indexer puts struct pointer after tuple indexer calls a top-level method without arguments but with local vars calls a top-level method without arguments but with local vars does call with struct as obj does call with struct as obj does call on ivar that's a struct, takes a pointer to instance var, inside if does call on ivar that's a struct, takes a pointer to instance var, inside if interprets self for primitive types interprets self for primitive types does call on instance var that's a struct, from a class does call on instance var that's a struct, from a class does call on constant that's a struct, takes a pointer to instance var does call on constant that's a struct, takes a pointer to instance var does call on read instance var that's a struct, takes a pointer to instance var does call on read instance var that's a struct, takes a pointer to instance var does call on var that's a struct, takes a pointer to instance var, inside if does call on var that's a struct, takes a pointer to instance var, inside if mutates through pointer (3) mutates through pointer (3) does Assign instance var with wants_struct_pointer does Assign instance var with wants_struct_pointer inlines method that just reads an instance var inlines method that just reads an instance var inlines method that just reads an instance var (2) inlines method that just reads an instance var (2) inlines call that returns self (2) inlines call that returns self (2) inlines call that returns self inlines call that returns self mutates through inlined instance var without receiver mutates through inlined instance var without receiver calls a top-level method without arguments and no local vars calls a top-level method without arguments and no local vars does call on constant that's a struct, takes a pointer to instance var, inside if does call on constant that's a struct, takes a pointer to instance var, inside if interprets call with default values interprets call with default values mutates through pointer (1) mutates through pointer (1) mutates through read instance var mutates through read instance var does call on instance var that's a struct, from a struct does call on instance var that's a struct, from a struct calls a top-level method with two arguments calls a top-level method with two arguments mutates through inlined instance var with receiver mutates through inlined instance var with receiver interprets implicit self call for pointer interprets implicit self call for pointer discards call with struct as obj discards call with struct as obj mutates through pointer (2) mutates through pointer (2) does call with struct as obj (2) does call with struct as obj (2) does Assign var with wants_struct_pointer does Assign var with wants_struct_pointer read_file with absolute path reads file (doesn't exist) reads file (doesn't exist) reads file (exists) reads file (exists) with relative path reads file (doesn't exist) reads file (doesn't exist) reads file (exists) reads file (exists) Normalize: hash literal hoists complex element expressions, hash-like hoists complex element expressions, hash-like normalizes empty with of normalizes empty with of normalizes non-empty with of normalizes non-empty with of normalizes non-empty without of normalizes non-empty without of hoists complex element expressions hoists complex element expressions hoists complex element expressions, hash-like generic hoists complex element expressions, hash-like generic Codegen: responds_to? codegens responds_to? true for simple type codegens responds_to? true for simple type does for generic instance type metaclass (#4353) does for generic instance type metaclass (#4353) works with generic virtual module (2) (#8334) works with generic virtual module (2) (#8334) codegens responds_to? with generic class (2) codegens responds_to? with generic class (2) codegens responds_to? with union gives true codegens responds_to? with union gives true codegens responds_to? with nilable gives true codegens responds_to? with nilable gives true codegens responds_to? with generic class (1) codegens responds_to? with generic class (1) works with generic virtual module (1) works with generic virtual module (1) codegens responds_to? with union gives false codegens responds_to? with union gives false works with virtual type works with virtual type doesn't error if result is discarded (#14113) doesn't error if result is discarded (#14113) works with generic virtual superclass (1) works with generic virtual superclass (1) works with two virtual types works with two virtual types codegens responds_to? false for simple type codegens responds_to? false for simple type works with virtual class type (2) (#1926) works with virtual class type (2) (#1926) works with virtual class type (1) (#1926) works with virtual class type (1) (#1926) codegens responds_to? with nilable gives false because other type 2 codegens responds_to? with nilable gives false because other type 2 codegens responds_to? with nilable gives false because other type 1 codegens responds_to? with nilable gives false because other type 1 works with module works with module works with generic virtual superclass (2) works with generic virtual superclass (2) Semantic: macro overload doesn't overwrite last macro definition if named args differs doesn't overwrite last macro definition if named args differs Crystal::Repl::Interpreter enum does enum new does enum new does enum value does enum value Code gen: uninitialized codegens declare instance var codegens declare instance var codegens declare var and changes it codegens declare var and changes it works with uninitialized NoReturn (#3314) works with uninitialized NoReturn (#3314) codegens declare instance var with static array type codegens declare instance var with static array type codegens value (#3641) codegens value (#3641) codegens declare var and read it codegens declare var and read it doesn't break on inherited declared var (#390) doesn't break on inherited declared var (#390) 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) Crystal::Doc::Generator #must_include_toplevel? returns false if program has constant which is defined in other place returns false if program has constant which is defined in other place returns false if program has nothing returns false if program has nothing returns true if program has constant returns true if program has constant returns true if program has macro returns true if program has macro returns false if program has method which is defined in other place returns false if program has method which is defined in other place returns true if program has method returns true if program has method returns false if program has macro which is defined in other place returns false if program has macro which is defined in other place #formatted_summary should generate the first line should generate the first line should exclude whitespace before the summary line should exclude whitespace before the summary line with a Deprecated annotation, and no docs should generate just the Deprecated tag should generate just the Deprecated tag with a Experimental annotation, and no docs should generate just the Experimental tag should generate just the Experimental tag with no annotation, and no docs should generate nothing should generate nothing with a Deprecated annotation, and docs should generate both the docs and Deprecated tag should generate both the docs and Deprecated tag should generate the first sentence should generate the first sentence with a Experimental annotation, and docs should generate both the docs and Experimental tag should generate both the docs and Experimental tag generates sitemap generates sitemap #formatted_doc with a Deprecated annotation, and no docs should generate just the Deprecated tag should generate just the Deprecated tag with no annotation, and no docs should generate nothing should generate nothing with a Deprecated annotation, and docs should generate both the docs and Deprecated tag should generate both the docs and Deprecated tag should generate the full document should generate the full document with a Experimental annotation, and docs should generate both the docs and Experimental tag should generate both the docs and Experimental tag should generate the full document should generate the full document with a Experimental annotation, and no docs should generate just the Experimental tag should generate just the Experimental tag #collect_constants returns empty array when constants are private returns empty array when constants are private crystal repo inserts pseudo methods inserts pseudo methods cleanup errors if assigning var to itself errors if assigning var to itself strip named-tuple elements after unreachable element strip named-tuple elements after unreachable element errors if assigning instance var to itself errors if assigning instance var to itself strip tuple elements after unreachable element strip tuple elements after unreachable element Normalize: op assign normalizes @var.value += normalizes @var.value += normalizes var &+= normalizes var &+= normalizes var += normalizes var += normalizes exp[value] &&= normalizes exp[value] &&= normalizes var ||= normalizes var ||= normalizes var.value += normalizes var.value += normalizes exp.value += normalizes exp.value += normalizes var *= normalizes var *= normalizes exp[value] += normalizes exp[value] += normalizes @var[0] += normalizes @var[0] += normalizes var[0] += normalizes var[0] += normalizes exp.value &&= normalizes exp.value &&= normalizes var &*= normalizes var &*= normalizes exp[value] ||= normalizes exp[value] ||= normalizes var -= normalizes var -= normalizes exp[0] += normalizes exp[0] += normalizes @@var.value += normalizes @@var.value += normalizes var &-= normalizes var &-= normalizes @@var[0] += normalizes @@var[0] += normalizes exp.value ||= normalizes exp.value ||= normalizes var &&= normalizes var &&= Lexer string array using | as delimiter lexes simple string array lexes simple string array lexes string array with new line gives correct column for next token lexes string array with new line gives correct column for next token lexes 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 string array with new line lexes string array with new line Code gen: macro uses tuple T in method with free vars uses tuple T in method with free vars executes subclasses executes subclasses doesn't override local variable when using macro variable doesn't override local variable when using macro variable expands macro def with return (#1040) expands macro def with return (#1040) fixes empty types of macro expansions (#1379) fixes empty types of macro expansions (#1379) replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) replaces %s inside string inside interpolation (#2178) expands def macro with var expands def macro with var expands def macro with @type.instance_vars with subclass expands def macro with @type.instance_vars with subclass can refer to union (2) can refer to union (2) determines if overrides (false) determines if overrides (false) allows overriding macro definition when redefining base class allows overriding macro definition when redefining base class says that enum doesn't have Flags annotation says that enum doesn't have Flags annotation correctly resolves constant inside block in macro def correctly resolves constant inside block in macro def forwards file location forwards file location determines if method exists (false) determines if method exists (false) gets correct class name when there are classes in the middle gets correct class name when there are classes in the middle can refer to abstract (1) can refer to abstract (1) expands def macro with @type.name with virtual (2) expands def macro with @type.name with virtual (2) copies base macro def to sub-subtype even after it was copied to a subtype (#448) copies base macro def to sub-subtype even after it was copied to a subtype (#448) determines if overrides (true) determines if overrides (true) codegens macro def with splat (#496) codegens macro def with splat (#496) can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal can use macro inside hash literal can refer to types can refer to types determines if variable has default value determines if variable has default value expands def macro with @type.instance_vars expands def macro with @type.instance_vars gets enum members with @type.constants gets enum members with @type.constants access to the program with @top_level access to the program with @top_level keeps line number with no block keeps line number with no block can refer to @type can refer to @type expands macro defined in base class expands macro defined in base class transforms hooks (bug) transforms hooks (bug) correctly recomputes call (bug) correctly recomputes call (bug) expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) expands macro with op assign inside assign (#5568) expands macro with default arg and splat (#784) expands macro with default arg and splat (#784) expands @def in inline macro expands @def in inline macro runs macro with arg and splat runs macro with arg and splat runs macro with splat runs macro with splat resolves alias in macro resolves alias in macro expands macro with arguments expands macro with arguments expands def macro with @type.name expands def macro with @type.name keeps heredoc contents inside macro keeps heredoc contents inside macro expands macro with escaped quotes (#895) expands macro with escaped quotes (#895) expands macro that invokes another macro expands macro that invokes another macro says that enum has Flags annotation says that enum has Flags annotation codegens macro def with default arg (similar to #496) codegens macro def with default arg (similar to #496) expands def macro with instance var and method call (bug) expands def macro with instance var and method call (bug) executes with named arguments for positional arg (3) executes with named arguments for positional arg (3) stringifies type without virtual marker stringifies type without virtual marker responds correctly to has_constant? with @top_level responds correctly to has_constant? with @top_level expands inline macro if (false) expands inline macro if (false) expands inline macro for expands inline macro for errors if dynamic constant assignment after macro expansion errors if dynamic constant assignment after macro expansion surrounds {{yield}} with begin/end surrounds {{yield}} with begin/end expands macro that yields expands macro that yields forwards dir location forwards dir location codegens macro with comment (bug) (#1396) codegens macro with comment (bug) (#1396) expands macro as class method and accesses @type expands macro as class method and accesses @type allows macro with default arguments allows macro with default arguments receives &block receives &block devirtualizes @type devirtualizes @type initializes instance var in macro initializes instance var in macro uses indexed macro variable uses indexed macro variable checks if macro expansion returns (#821) checks if macro expansion returns (#821) expands macro defined in class expands macro defined in class gets default value of instance variable of generic type gets default value of instance variable of generic type gets default value of instance variable of generic type gets default value of instance variable of generic type gets default value of instance variable of generic type gets default value of instance variable of generic type gets default value of instance variable of generic type gets default value of instance variable of generic type gets default value of instance variable of generic type gets default value of instance variable of generic type doesn't replace %q() (#2178) doesn't replace %q() (#2178) recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added recalculates method when virtual metaclass type is added doesn't skip abstract classes when defining macro methods doesn't skip abstract classes when defining macro methods expands macro with default arg and splat (3) (#784) expands macro with default arg and splat (3) (#784) keeps line number with a block keeps line number with a block determines if method exists (true) determines if method exists (true) finds macro in class finds macro in class determines if overrides, through another class (true) determines if overrides, through another class (true) expands @type.name in virtual metaclass (1) expands @type.name in virtual metaclass (1) can refer to union (1) can refer to union (1) gets methods gets methods does block unpacking inside macro expression (#13707) does block unpacking inside macro expression (#13707) retains original yield expression (#2923) retains original yield expression (#2923) can access free variables can access free variables gets default value of instance variable of inherited type that also includes module gets default value of instance variable of inherited type that also includes module initializes class var in macro initializes class var in macro finds macro from virtual type finds macro from virtual type uses indexed macro variable with many keys uses indexed macro variable with many keys expands inline macro if (true) expands inline macro if (true) can refer to abstract (2) can refer to abstract (2) implicitly marks method as macro def when using @type implicitly marks method as macro def when using @type declares constant in macro (#838) declares constant in macro (#838) can access type variables of a generic type can access type variables of a generic type expands def macro with @type.name with virtual expands def macro with @type.name with virtual expands inline macro expands inline macro doesn't replace %s in string (#2178) doesn't replace %s in string (#2178) determines if overrides, with macro method (false) determines if overrides, with macro method (false) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) replaces %s inside string inside interpolation, with braces (#2178) expands def macro expands def macro can access type variables that are not types can access type variables that are not types uses invocation context uses invocation context can use macro inside array literal can use macro inside array literal can use macro inside array literal can use macro inside array literal can use macro inside array literal can use macro inside array literal can use macro inside array literal can use macro inside array literal can use macro inside array literal can use macro inside array literal keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro keeps heredoc contents with interpolation inside macro can access type variables of a tuple can access type variables of a tuple doesn't override local variable when using macro variable (2) doesn't override local variable when using macro variable (2) expands @type.name in virtual metaclass (2) expands @type.name in virtual metaclass (2) gets default value of instance variable gets default value of instance variable expands macro as class method expands macro as class method passes #826 passes #826 expands macro with default arg and splat (2) (#784) expands macro with default arg and splat (2) (#784) executes with named arguments for positional arg (1) executes with named arguments for positional arg (1) executes with named arguments for positional arg (2) executes with named arguments for positional arg (2) expands def macro with @type.instance_vars with virtual expands def macro with @type.instance_vars with virtual executes with named arguments executes with named arguments forwards line number forwards line number determines if overrides, through module (true) determines if overrides, through module (true) expands macro and resolves type correctly expands macro and resolves type correctly gets constant gets constant can access type variables can access type variables expands @def in macro expands @def in macro expands macro expands macro can access type variables of a module can access type variables of a module can use constants can use constants doesn't reuse macro nodes (bug) doesn't reuse macro nodes (bug) types macro expansion bug (#1734) types macro expansion bug (#1734) gets enum members as constants gets enum members as constants executes all_subclasses executes all_subclasses can iterate union types can iterate union types expands Path with resolve method expands Path with resolve method Semantic: virtual doesn't check methods on abstract classes 2 doesn't check methods on abstract classes 2 types inspect types inspect types method call of virtual type with override types method call of virtual type with override types class and subclass as one type types class and subclass as one type restricts with union and doesn't merge to super type restricts with union and doesn't merge to super type finds overloads of union of virtual, class and nil with abstract class finds overloads of union of virtual, class and nil with abstract class uses virtual type as generic type if class is abstract uses virtual type as generic type if class is abstract types two classes without a shared virtual types two classes without a shared virtual checks cover in every concrete subclass 2 checks cover in every concrete subclass 2 uses virtual type as generic type if class is abstract even in union uses virtual type as generic type if class is abstract even in union reports missing cover for subclass of abstract class reports missing cover for subclass of abstract class doesn't check cover for subclasses doesn't check cover for subclasses types class and two subclasses types class and two subclasses doesn't check methods on abstract classes doesn't check methods on abstract classes removes instance var from subclasses removes instance var from subclasses types instance var as virtual when using type declaration and has subclasses types instance var as virtual when using type declaration and has subclasses types method call of virtual type types method call of virtual type doesn't check cover for abstract classes doesn't check cover for abstract classes checks cover in every concrete subclass 3 checks cover in every concrete subclass 3 dispatches virtual method dispatches virtual method reports no matches for virtual type reports no matches for virtual type checks cover in every concrete subclass checks cover in every concrete subclass checks method in every concrete subclass but method in Object checks method in every concrete subclass but method in Object automatically does virtual for generic type if there are subclasses automatically does virtual for generic type if there are subclasses reports undefined method in subclass of abstract class reports undefined method in subclass of abstract class works with restriction alpha works with restriction alpha types two subclasses types two subclasses finds overloads of union of virtual, class and nil finds overloads of union of virtual, class and nil dispatches virtual method with overload dispatches virtual method with overload Code gen: def uses self uses self allows to change argument values allows to change argument values codegens with and without many default arguments codegens with and without many default arguments codegens yield with destructing tuple having unreachable element codegens yield with destructing tuple having unreachable element codegens return nil when nilable type (1) codegens return nil when nilable type (1) codegens def which changes type of arg codegens def which changes type of arg use target def type as return type use target def type as return type use target def type as return type use target def type as return type use target def type as return type use target def type as return type use target def type as return type use target def type as return type use target def type as return type use target def type as return type codegens with interesting default argument codegens with interesting default argument codegens call with args codegens call with args runs empty def runs empty def codegens dispatch on static method codegens dispatch on static method can match N type argument of static array (#1203) can match N type argument of static array (#1203) puts union before single type in matches preferences puts union before single type in matches preferences codegens with related types codegens with related types looks up matches in super classes and merges them with subclasses looks up matches in super classes and merges them with subclasses codegens with and without default arguments codegens with and without default arguments unifies all calls to same def unifies all calls to same def unifies all calls to same def unifies all calls to same def unifies all calls to same def unifies all calls to same def unifies all calls to same def unifies all calls to same def unifies all calls to same def unifies all calls to same def uses previous argument in default value (#1062) uses previous argument in default value (#1062) uses var after external uses var after external codegens union to union assignment of mutable arg (#3691) codegens union to union assignment of mutable arg (#3691) codegens call without args codegens call without args call functions defined in any order call functions defined in any order builds infinite recursive function builds infinite recursive function codegens dispatch with single def when discarding unallocated ones (2) codegens dispatch with single def when discarding unallocated ones (2) codegens dispatch with single def when discarding unallocated ones (1) codegens dispatch with single def when discarding unallocated ones (1) codegens dispatch with nilable reference union type codegens dispatch with nilable reference union type uses dispatch call type for phi (#3529) uses dispatch call type for phi (#3529) codegens empty def codegens empty def codegens return nil when nilable type (2) codegens return nil when nilable type (2) codegens recursive nasty code codegens recursive nasty code call external function 'putchar' call external function 'putchar' codegens bug #119 codegens bug #119 codegens bug #119 codegens bug #119 codegens bug #119 codegens bug #119 codegens bug #119 codegens bug #119 codegens bug #119 codegens bug #119 fixes #230: include original owner in mangled def fixes #230: include original owner in mangled def codegens dispatch without obj, bug 1 codegens dispatch without obj, bug 1 codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation codegens and doesn't break if obj is int and there's a mutation codegens recursive type with union codegens recursive type with union dispatches on virtual type implementing generic module (related to bug #165) dispatches on virtual type implementing generic module (related to bug #165) doesn't crash on private def as last expression doesn't crash on private def as last expression codegens dispatch without obj, bug 1 codegens dispatch without obj, bug 1 Code gen: not codegens not pointer (true) codegens not pointer (true) codegens not true codegens not true codegens not nilable type (true) codegens not nilable type (true) codegens not nilable type (false) codegens not nilable type (false) doesn't crash doesn't crash codegens not nil codegens not nil codegens not with inlinable value (#6451) codegens not with inlinable value (#6451) codegens not pointer (false) codegens not pointer (false) codegens not false codegens not false codegens not number codegens not number Lexer doc lexes with doc enabled and docs, one line comment with two newlines and another comment lexes with doc enabled and docs, one line comment with two newlines and another comment resets doc after non newline or space token resets doc after non newline or space token lexes with doc enabled and docs, two line comment with leading whitespace lexes with doc enabled and docs, two line comment with leading whitespace lexes with doc enabled and docs, two line comment lexes with doc enabled and docs, two line comment lexes with doc enabled but without docs lexes with doc enabled but without docs lexes without doc enabled lexes without doc enabled lexes with doc enabled and docs lexes with doc enabled and docs Code gen: next codegens next with break (3) codegens next with break (3) codegens next with while inside block codegens next with while inside block codegens next without expressions codegens next without expressions codegens next with break (2) codegens next with break (2) codegens next with break (1) codegens next with break (1) codegens next conditionally codegens next conditionally codegens next conditionally with int type (2) codegens next conditionally with int type (2) codegens next codegens next Normalize: block normalizes multiple nested unpackings normalizes multiple nested unpackings normalizes unpacking with single expression body normalizes unpacking with single expression body normalizes unpacking with multiple body expressions normalizes unpacking with multiple body expressions normalizes unpacking with empty body normalizes unpacking with empty body normalizes unpacking with splat normalizes unpacking with splat normalizes nested unpacking normalizes nested unpacking normalizes unpacking with underscore normalizes unpacking with underscore Code gen: multi assign supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) supports 1 to n assignment, raises if out of bounds (1) supports m to n assignment, with splat on left-hand side (3) supports m to n assignment, with splat on left-hand side (3) supports n to n assignment supports n to n assignment supports m to n assignment, with splat on left-hand side (1) supports m to n assignment, with splat on left-hand side (1) supports m to n assignment, with splat on left-hand side (2) supports m to n assignment, with splat on left-hand side (2) strict_multi_assign raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count raises if value size in 1 to n assignment doesn't match target count supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short supports 1 to n assignment, raises if too short supports 1 to n assignment, with splat on left-hand side (2) supports 1 to n assignment, with splat on left-hand side (2) supports 1 to n assignment, splat is empty (2) supports 1 to n assignment, splat is empty (2) supports m to n assignment, splat is empty tuple (1) supports m to n assignment, splat is empty tuple (1) supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) supports 1 to n assignment, splat is empty (1) without strict_multi_assign doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count doesn't raise if value size in 1 to n assignment doesn't match target count supports 1 to n assignment supports 1 to n assignment supports 1 to n assignment, splat is empty (3) supports 1 to n assignment, splat is empty (3) supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) supports 1 to n assignment, with splat on left-hand side (1) supports m to n assignment, splat is empty tuple (3) supports m to n assignment, splat is empty tuple (3) supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) supports 1 to n assignment, raises if out of bounds (2) supports m to n assignment, splat is empty tuple (2) supports m to n assignment, splat is empty tuple (2) supports 1 to n assignment, with splat on left-hand side (3) supports 1 to n assignment, with splat on left-hand side (3) Code gen: sizeof can use instance_sizeof in type argument can use instance_sizeof in type argument gets sizeof Bool (#8272) gets sizeof Bool (#8272) gets instance_sizeof a generic type with type vars gets instance_sizeof a generic type with type vars gets sizeof union gets sizeof union gets sizeof Nil (#7644) gets sizeof Nil (#7644) gets sizeof struct gets sizeof struct can use sizeof of virtual type can use sizeof of virtual type gets sizeof int gets sizeof int can use sizeof in type argument (1) can use sizeof in type argument (1) gets sizeof Void gets sizeof Void returns correct sizeof for abstract struct (#4319) returns correct sizeof for abstract struct (#4319) can use instance_sizeof of virtual type can use instance_sizeof of virtual type instance_alignof gets instance_alignof a generic type with type vars gets instance_alignof a generic type with type vars gets instance_alignof class gets instance_alignof class can use sizeof in type argument (2) can use sizeof in type argument (2) alignof alignof mixed union is not less than alignof its variant types alignof mixed union is not less than alignof its variant types gets alignof struct gets alignof struct gets alignof union gets alignof union gets alignof primitive types gets alignof primitive types gets alignof class gets alignof class gets sizeof NoReturn gets sizeof NoReturn doesn't precompute sizeof of module (#7741) doesn't precompute sizeof of module (#7741) doesn't precompute sizeof of abstract struct (#7741) doesn't precompute sizeof of abstract struct (#7741) gets instance_sizeof class gets instance_sizeof class gets sizeof class gets sizeof class file_exists? with relative path reads file (exists) reads file (exists) reads file (doesn't exist) reads file (doesn't exist) with absolute path returns true if file exists returns true if file exists returns false if file doesn't exist returns false if file doesn't exist Semantic: nil can call a fun with nil for typedef pointer can call a fun with nil for typedef pointer marks instance variables as nil but doesn't explode on macros marks instance variables as nil but doesn't explode on macros can call a fun with nil for pointer can call a fun with nil for pointer restricts type of 'while foo' on assign restricts type of 'while foo' on assign doesn't check return type for void doesn't check return type for void types empty types empty restricts type of 'if foo' on assign restricts type of 'if foo' on assign restricts type of 'if foo' restricts type of 'if foo' restricts type of 'while foo' restricts type of 'while foo' marks instance variables as nil when not in initialize marks instance variables as nil when not in initialize doesn't check return type for nil doesn't check return type for nil types nil types nil marks instance variables as nil when not in initialize 2 marks instance variables as nil when not in initialize 2 Crystal::Repl::Interpreter extern discards primitive struct_or_union_set because it's a copy discards primitive struct_or_union_set because it's a copy sets extern struct proc field sets extern struct proc field discards primitive struct_or_union_set and get (struct) discards primitive struct_or_union_set and get (struct) interprets primitive struct_or_union_set and get (struct) interprets primitive struct_or_union_set and get (struct) does automatic C cast does automatic C cast sets struct field through pointer sets struct field through pointer interprets primitive struct_or_union_set and get (union) interprets primitive struct_or_union_set and get (union) Semantic: nilable instance var says self was used before instance var was initialized (2) says self was used before instance var was initialized (2) doesn't consider as nil if initialized with catch-all doesn't consider as nil if initialized with catch-all says instance var was used before initialized (2) says instance var was used before initialized (2) marks instance var as nilable if assigned inside captured block (#1696) marks instance var as nilable if assigned inside captured block (#1696) says instance var was not initialized in all of the initialize methods, with var declaration says instance var was not initialized in all of the initialize methods, with var declaration says self was used before instance var was initialized (3) says self was used before instance var was initialized (3) says instance var was not initialized in all of the initialize methods says instance var was not initialized in all of the initialize methods says instance var was not initialized in all of the initialize methods (2) says instance var was not initialized in all of the initialize methods (2) marks instance var as nilable if assigned inside proc literal marks instance var as nilable if assigned inside proc literal says self was used before instance var was initialized says self was used before instance var was initialized finds type that doesn't initialize instance var (#1222) finds type that doesn't initialize instance var (#1222) says instance var was used before initialized says instance var was used before initialized Code gen: experimental errors if missing link arguments errors if missing link arguments compiles with single string argument compiles with single string argument errors if invalid argument type errors if invalid argument type errors if too many arguments errors if too many arguments compiles with no argument compiles with no argument Code gen: C ABI x86_64 passes struct less than 64 bits as { i64 } in varargs passes struct less than 64 bits as { i64 } in varargs 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) returns struct less than 64 bits as { i64 } returns struct less than 64 bits as { i64 } passes struct between 64 and 128 bits as { i64, i64 } passes struct between 64 and 128 bits as { i64, i64 } passes struct bigger than128 bits with byval passes struct bigger than128 bits with byval returns struct between 64 and 128 bits as { i64, i64 } returns 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 } Crystal::Repl::Interpreter typeof interprets typeof metaclass type interprets typeof metaclass type interprets typeof instance type interprets typeof instance type interprets typeof virtual type interprets typeof virtual type Code gen: enum can define flags enum : UInt128 with 128 values can define flags enum : UInt128 with 128 values codegens enum All redefined codegens enum All redefined does ~ at compile time for enum member does ~ at compile time for enum member can define flags enum : UInt64 with more than 32 values (#7268) can define flags enum : UInt64 with more than 32 values (#7268) automatically defines question method for each enum member (true case) automatically defines question method for each enum member (true case) codegens enum bitflags (4) codegens enum bitflags (4) allows class vars in enum allows class vars in enum automatically defines question method for each enum member (flags, false case) automatically defines question method for each enum member (flags, false case) can use macro calls inside enum value, with receiver (#424) can use macro calls inside enum value, with receiver (#424) automatically defines question method for each enum member (false case) automatically defines question method for each enum member (false case) codegens enum value codegens enum value can redefine Enum.new and use previous_def can redefine Enum.new and use previous_def codegens enum None redefined codegens enum None redefined can use macro calls inside enum value, macro defined outside enum (#424) can use macro calls inside enum value, macro defined outside enum (#424) codegens enum bitflags (2) codegens enum bitflags (2) can use macro calls inside enum value (#424) can use macro calls inside enum value (#424) codegens enum without explicit value codegens enum without explicit value adds a none? method to flags enum adds a none? method to flags enum casts All value to base type casts All value to base type automatically defines question method for each enum member (flags, true case) automatically defines question method for each enum member (flags, true case) codegens enum bitflags (1) codegens enum bitflags (1) can define flags enum : UInt128 with compile-time interpreted values can define flags enum : UInt128 with compile-time interpreted values creates enum from value creates enum from value codegens enum codegens enum uses enum value before declaration (hoisting) uses enum value before declaration (hoisting) codegens enum bitflags None codegens enum bitflags None codegens enum bitflags All codegens enum bitflags All Init invocation honors the custom set directory name honors the custom set directory name errors if files will be overwritten by a generated file errors if files will be overwritten by a generated file doesn't error when asked to skip existing files doesn't error when asked to skip existing files doesn't error if files will be overwritten by a generated file and --force is used doesn't error if files will be overwritten by a generated file and --force is used produces valid yaml file produces valid yaml file prints error if a file is already present prints error if a file is already present Semantic: yield with scope doesn't explode if specifying &block but never using it (#181) doesn't explode if specifying &block but never using it (#181) uses scope in instance method uses scope in instance method uses scope in instance method uses scope in instance method uses scope in instance method uses scope in instance method uses scope in instance method uses scope in instance method uses scope in instance method uses scope in instance method it uses self for instance method it uses self for instance method it uses self for instance method it uses self for instance method it uses self for instance method it uses self for instance method it uses self for instance method it uses self for instance method it uses self for instance method it uses self for instance method uses scope in global method uses scope in global method uses scope in global method uses scope in global method uses scope in global method uses scope in global method uses scope in global method uses scope in global method uses scope in global method uses scope in global method uses instance variable of enclosing scope uses instance variable of enclosing scope generate right code when yielding struct as scope generate right code when yielding struct as scope uses method of with object uses method of with object yields with dispatch (#2171) (1) yields with dispatch (#2171) (1) yields virtual type (#2171) (2) yields virtual type (#2171) (2) uses method of enclosing scope uses method of enclosing scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope it invokes global method inside block of yield scope Semantic: doc stores doc for enum when reopening stores doc for enum when reopening stores doc for enum with @[Flags] stores doc for enum with @[Flags] stores doc for nodes defined in macro call stores doc for nodes defined in macro call stores doc for fun def stores doc for fun def :ditto: :ditto: references last non-ditto doc :ditto: references last non-ditto doc stores doc for def stores doc for def stores doc for const stores doc for const amend previous doc amend previous doc amend previous doc (without empty line) amend previous doc (without empty line) stores doc for macro stores doc for macro doc before annotation attached to module attached to module attached to enum attached to enum attached to constant attached to constant attached to macro attached to macro attached to alias attached to alias attached to def attached to def attached to struct/class attached to struct/class stores doc for def with visibility stores doc for def with visibility overwrites doc for macro when redefining overwrites doc for macro when redefining stores doc for module when reopening stores doc for module when reopening stores doc for alias stores doc for alias stores doc for abstract class stores doc for abstract class attaches doc in double macro expansion (#8463) attaches doc in double macro expansion (#8463) stores doc for struct when reopening stores doc for struct when reopening stores doc for enum member stores doc for enum member stores doc for nodes defined in macro call (2) stores doc for nodes defined in macro call (2) stores doc for class when reopening stores doc for class when reopening stores doc for struct stores doc for struct stores doc for module stores doc for module stores doc for macro stores doc for macro stores doc for def stores doc for def attaches doc to annotation in macro expansion (#9628) attaches doc to annotation in macro expansion (#9628) stores doc for enum and doesn't mix with value stores doc for enum and doesn't mix with value stores doc for macro defined in macro call stores doc for macro defined in macro call overwrites doc for module when reopening overwrites doc for module when reopening stores doc for def with annotation stores doc for def with annotation stores doc for abstract def stores doc for abstract def overwrites doc for class when reopening overwrites doc for class when reopening stores doc for enum stores doc for enum overwrites doc for enum when reopening overwrites doc for enum when reopening stores doc for def with annotation stores doc for def with annotation stores doc for flags enum with base type stores doc for flags enum with base type stores location for implicit flag enum members stores location for implicit flag enum members stores doc for class stores doc for class overwrites doc for def when redefining overwrites doc for def when redefining overwrites doc for struct when reopening overwrites doc for struct when reopening stores locations for auto-generated module stores locations for auto-generated module stores doc for constant stores doc for constant Code gen: var codegens var with type declaration codegens var with type declaration codegens ivar assignment when not-nil type filter applies codegens ivar assignment when not-nil type filter applies codegens bug with union of int, nil and string (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 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 var, while, if, break and ssa codegens bug with var, while, if, break and ssa assigns to underscore assigns to underscore codegens bug with instance vars and ssa codegens bug with instance vars and ssa Semantic: type errors if original type doesn't support instance variables errors if original type doesn't support instance variables can access instance variables of original type can access instance variables of original type can call methods of parent type can call methods of parent type can call methods of original type can call methods of original type Block inference allows alias as block fun type allows alias as block fun type reports error if yields a type that later changes and that's not that one in the block specification reports error if yields a type that later changes and that's not that one in the block specification errors if returns from captured block errors if returns from captured block types recursive hash assignment types recursive hash assignment reports error if yields a type that's not that one in the block specification reports error if yields a type that's not that one in the block specification does next from block with value 2 does next from block with value 2 errors on recursive yield with non ProcNotation restriction (#6896) errors on recursive yield with non ProcNotation restriction (#6896) reports mismatch with generic argument type in input type reports mismatch with generic argument type in input type uses splat in block parameter uses splat in block parameter matches block arg return type matches block arg return type auto-unpacks tuple, captured block with multiple statements auto-unpacks tuple, captured block with multiple statements reports error if block type doesn't match reports error if block type doesn't match does next from captured block does next from captured block maps block of union types to union types maps block of union types to union types errors if declares class inside block errors if declares class inside block auto-unpacks tuple, captured empty block auto-unpacks tuple, captured empty block errors if declares include inside block errors if declares include inside block ignores void return type (4) ignores void return type (4) checks block type with virtual type checks block type with virtual type infer type of block body infer type of block body errors if using ( -> Object) as block return type (#2358) errors if using ( -> Object) as block return type (#2358) infers type of block before call infers type of block before call ignores void return type (3) (#427) ignores void return type (3) (#427) auto-unpacks tuple, too many args, captured block auto-unpacks tuple, too many args, captured block break from block without value break from block without value break without value has nil type break without value has nil type yields with different types yields with different types errors if breaks from captured block errors if breaks from captured block auto-unpacks with block arg type auto-unpacks with block arg type errors if splat parameter becomes a union errors if splat parameter becomes a union errors if yields from top level errors if yields from top level reports error if missing arguments to yield reports error if missing arguments to yield errors if declares fun inside block errors if declares fun inside block errors on recursive yield with ProcNotation restriction errors on recursive yield with ProcNotation restriction reports error if yields a type that's not that one in the block specification reports error if yields a type that's not that one in the block specification ignores void return type (#427) ignores void return type (#427) binds block return type free variable even if there are no block parameters (#1797) binds block return type free variable even if there are no block parameters (#1797) errors if declares class inside captured block errors if declares class inside captured block does next from block without value does next from block without value uses block arg, too many parameters uses block arg, too many parameters unpacks block argument unpacks block argument ignores block parameter if not used ignores block parameter if not used yields splat yields splat doesn't auto-unpack tuple, more args doesn't auto-unpack tuple, more args allows invoking method on a object of a captured block with a type that was never instantiated allows invoking method on a object of a captured block with a type that was never instantiated error with self output type doesn't match error with self output type doesn't match errors if declares module inside block errors if declares module inside block infer type of yield infer type of yield infer type of empty block body infer type of empty block body errors if declares enum inside block errors if declares enum inside block auto-unpacks tuple, less than max, captured block auto-unpacks tuple, less than max, captured block finds type inside module in block finds type inside module in block uses splat in block parameter, many args uses splat in block parameter, many args reports error if block changes type reports error if block changes type correctly types unpacked tuple block arg after block (#3339) correctly types unpacked tuple block arg after block (#3339) errors if invoking new with block when no initialize is defined errors if invoking new with block when no initialize is defined can infer block type given that the method has a return type (#7160) can infer block type given that the method has a return type (#7160) errors if declares alias inside block errors if declares alias inside block types bug with yield not_nil! that is never not nil types bug with yield not_nil! that is never not nil auto-unpacks tuple, too many args auto-unpacks tuple, too many args errors if declares lib inside block errors if declares lib inside block errors if using (Object ->) as block return type (#2358) errors if using (Object ->) as block return type (#2358) errors if alias is not a fun type errors if alias is not a fun type passes &->f passes &->f sets captured block type to that of restriction with alias sets captured block type to that of restriction with alias doesn't mix local var with block var, using break (#2314) doesn't mix local var with block var, using break (#2314) infer type of block parameter infer type of block parameter allows underscore in block return type even if the return type can't be computed allows underscore in block return type even if the return type can't be computed uses free var in return type with tuple type uses free var in return type with tuple type respects block arg restriction when block has a splat parameter (2) (#9524) respects block arg restriction when block has a splat parameter (2) (#9524) respects block arg restriction when block has a splat parameter (#6473) respects block arg restriction when block has a splat parameter (#6473) errors if declares def inside block errors if declares def inside block matches block with generic type and free var matches block with generic type and free var errors if using Bar | Object as block return type (#2358) errors if using Bar | Object as block return type (#2358) errors if declares extend inside block errors if declares extend inside block doesn't mix local var with block var, using next (#2314) doesn't mix local var with block var, using next (#2314) infer type with union infer type with union recalculates call that uses block arg output as free var recalculates call that uses block arg output as free var auto-unpacks tuple auto-unpacks tuple reports error if block didn't return expected type reports error if block didn't return expected type errors on recursive yield errors on recursive yield yields in overload, matches type yields in overload, matches type ignores void return type (2) (#427) ignores void return type (2) (#427) passes #233: block with initialize with default args passes #233: block with initialize with default args errors if proc is not instantiated errors if proc is not instantiated renders expected block return type of a free variable on mismatch renders expected block return type of a free variable on mismatch auto-unpacks tuple, less than max auto-unpacks tuple, less than max preserves type filters in block preserves type filters in block returns from proc literal returns from proc literal doesn't assign block variable type to last value (#694) doesn't assign block variable type to last value (#694) uses block return type as return type, even if can't infer block type uses block return type as return type, even if can't infer block type allows initialize with yield (#224) allows initialize with yield (#224) reports mismatch with generic argument type in output type reports mismatch with generic argument type in output type infers type of block before call taking other args free vars into account infers type of block before call taking other args free vars into account errors if doing next in proc literal errors if doing next in proc literal yields splat and non splat yields splat and non splat uses free var in return type in captured block uses free var in return type in captured block infers type of block with generic type infers type of block with generic type passes #262 passes #262 types empty block types empty block binds to proc, not only to its body (#1796) binds to proc, not only to its body (#1796) errors if using Object as block return type (#2358) errors if using Object as block return type (#2358) doesn't fail with 'already had enclosing call' (#11200) doesn't fail with 'already had enclosing call' (#11200) allows yielding multiple types when a union is expected allows yielding multiple types when a union is expected does next from block with value does next from block with value doesn't crash on cleaning up typeof node without dependencies (#8669) doesn't crash on cleaning up typeof node without dependencies (#8669) uses block var with same name as local var uses block var with same name as local var auto-unpacks tuple, captured block auto-unpacks tuple, captured block infer type of local variable infer type of local variable errors when using local variable with block parameter name errors when using local variable with block parameter name errors if declares macro inside block errors if declares macro inside block uses splat in block parameter, but not enough yield expressions uses splat in block parameter, but not enough yield expressions reports error on method instantiate (#4543) reports error on method instantiate (#4543) error with self input type doesn't match error with self input type doesn't match infer type with self block arg infer type with self block arg doesn't crash on #2531 doesn't crash on #2531 sets captured block type to that of restriction sets captured block type to that of restriction Codegen: class var doesn't crash with pointerof from another module doesn't crash with pointerof from another module doesn't crash with pointerof from another module doesn't crash with pointerof from another module doesn't crash with pointerof from another module doesn't crash with pointerof from another module doesn't crash with pointerof from another module doesn't crash with pointerof from another module doesn't crash with pointerof from another module doesn't crash with pointerof from another module declares and initializes declares and initializes codegens generic class with class var codegens generic class with class var catch infinite loop in class var initializer catch infinite loop in class var initializer catch infinite loop in class var initializer catch infinite loop in class var initializer catch infinite loop in class var initializer catch infinite loop in class var initializer catch infinite loop in class var initializer catch infinite loop in class var initializer catch infinite loop in class var initializer catch infinite loop in class var initializer codegens second class var initializer codegens second class var initializer reads class var before initializing it (hoisting) reads class var before initializing it (hoisting) codegens class var as nil if assigned for the first time inside method codegens class var as nil if assigned for the first time inside method accesses class var from proc literal accesses class var from proc literal doesn't use nilable type for initializer doesn't use nilable type for initializer reads class var from virtual type reads class var from virtual type initializes class var of union with single type initializes class var of union with single type writes class var from virtual type writes class var from virtual type codegens class var with type declaration begin and vars codegens class var with type declaration begin and vars codegens class var inside module codegens class var inside module codegens class var with begin and vars codegens class var with begin and vars gets pointerof class var gets pointerof class var doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) doesn't error if class var shares name with const (#7865) initializes class var with array literal initializes class var with array literal initializes class var with array literal initializes class var with array literal initializes class var with array literal initializes class var with array literal initializes class var with array literal initializes class var with array literal initializes class var with array literal initializes class var with array literal inline initialization of simple class var inline initialization of simple class var initializes dependent constant before class var initializes dependent constant before class var initializes dependent constant before class var initializes dependent constant before class var initializes dependent constant before class var initializes dependent constant before class var initializes dependent constant before class var initializes dependent constant before class var initializes dependent constant before class var initializes dependent constant before class var initializes class var the moment it reaches it initializes class var the moment it reaches it initializes class var the moment it reaches it initializes class var the moment it reaches it initializes class var the moment it reaches it initializes class var the moment it reaches it initializes class var the moment it reaches it initializes class var the moment it reaches it initializes class var the moment it reaches it initializes class var the moment it reaches it codegens class var inside instance method codegens class var inside instance method gets pointerof class var complex constant gets pointerof class var complex constant reads class var from virtual type metaclass reads class var from virtual type metaclass reads simple class var before another complex one reads simple class var before another complex one codegens class var as nil codegens class var as nil doesn't inherit class var value in module doesn't inherit class var value in module doesn't inherit class var value in subclass doesn't inherit class var value in subclass declares var as uninitialized and initializes it unsafely declares var as uninitialized and initializes it unsafely codegens class var with nilable reference type codegens class var with nilable reference type uses var in class var initializer uses var in class var initializer runs class var side effects (#8862) runs class var side effects (#8862) runs class var side effects (#8862) runs class var side effects (#8862) runs class var side effects (#8862) runs class var side effects (#8862) runs class var side effects (#8862) runs class var side effects (#8862) runs class var side effects (#8862) runs class var side effects (#8862) codegens class var codegens class var Semantic: generic class shows error due to generic instantiation (#7083) shows error due to generic instantiation (#7083) 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 inherits instance var type annotation from generic to concrete with T inherits instance var type annotation from generic to concrete with T 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 twice inherits twice creates pointer of generic type and uses it (2) creates pointer of generic type and uses it (2) inherits from generic with forwarding (2) inherits from generic with forwarding (2) errors if inheriting generic type and not specifying type vars (#460) errors if inheriting generic type and not specifying type vars (#460) inherits non-generic to generic (1) inherits non-generic to generic (1) never types Path as virtual outside generic type parameter (#3989) never types Path as virtual outside generic type parameter (#3989) errors if using Tuple in a generic type errors if using Tuple in a generic type restricts virtual generic instance type against generic (#3351) restricts virtual generic instance type against generic (#3351) can use type var that resolves to number in restriction using Int128 can use type var that resolves to number in restriction using Int128 inherits instance var type annotation from generic to concrete inherits instance var type annotation from generic to concrete gives helpful error message when generic type var is missing (#1526) gives helpful error message when generic type var is missing (#1526) creates pointer of generic type and uses it creates pointer of generic type and uses it inherits class methods from generic class inherits class methods from generic class allows initializing instance variable (#665) allows initializing instance variable (#665) errors on too nested generic instance, with union type errors on too nested generic instance, with union type errors if using Pointer in a generic type errors if using Pointer in a generic type inherits from generic with instantiation with instance var inherits from generic with instantiation with instance var calls super on generic type when superclass has no initialize (#933) calls super on generic type when superclass has no initialize (#933) errors if using Object in a generic type errors if using Object 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 subclasses twice with same generic class (#3423) subclasses twice with same generic class (#3423) nests generics with the same type var (#3297) nests generics with the same type var (#3297) recomputes on new subclass recomputes on new subclass allows T::Type with T a generic type allows T::Type with T a generic type errors if using Struct in a generic type errors if using Struct in a generic type restricts generic to generic with free var restricts generic to generic with free var finds generic type argument from method with default value finds generic type argument from method with default value errors if using Class in a generic type errors if using Class in a generic type inherits from generic with forwarding (1) inherits from generic with forwarding (1) virtual metaclass type implements super virtual metaclass type (#3007) virtual metaclass type implements super virtual metaclass type (#3007) errors if using Proc in a generic type errors if using Proc in a generic type inherits instance var type annotation from generic to generic to concrete inherits instance var type annotation from generic to generic to concrete restricts non-generic to generic with free var restricts non-generic to generic with free var inherits from generic with instantiation inherits from generic with instantiation types macro def with generic instance types macro def with generic instance can define instance var forward declared (#962) can define instance var forward declared (#962) errors if using Number in a generic type errors if using Number in a generic type doesn't find unbound type parameter in main code inside generic type (#6168) doesn't find unbound type parameter in main code inside generic type (#6168) 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 doesn't crash when matching restriction against number literal (#3157) doesn't crash when matching restriction against number literal (#3157) replaces type parameters for virtual types (#3235) replaces type parameters for virtual types (#3235) errors if using StaticArray in a generic type errors if using StaticArray in a generic type splats generic type var splats generic type var errors if using Number | String in a generic type errors if using Number | String in a generic type correctly checks argument count when target type has a splat (#9855) correctly checks argument count when target type has a splat (#9855) allows initializing instance variable in inherited generic type allows initializing instance variable in inherited generic type disallow using a non-instantiated module type as a generic type argument disallow using a non-instantiated module type as a generic type argument errors if inheriting from generic when it is non-generic errors if inheriting from generic when it is non-generic never types Generic as virtual outside generic type parameter (#3989) never types Generic as virtual outside generic type parameter (#3989) doesn't consider unbound generic instantiations as concrete (#7200) doesn't consider unbound generic instantiations as concrete (#7200) instantiates generic variadic class, accesses T from instance method, more args instantiates generic variadic class, accesses T from instance method, more args instantiates generic variadic class, accesses T from class method instantiates generic variadic class, accesses T from class method errors if using Int in a generic type errors if using Int in a generic type doesn't duplicate overload on generic class with class method (#2385) doesn't duplicate overload on generic class with class method (#2385) doesn't find T type parameter of current type in superclass (#4604) doesn't find T type parameter of current type in superclass (#4604) resolves T through metaclass inheritance (#7914) resolves T through metaclass inheritance (#7914) errors if using Float in a generic type errors if using Float in a generic type can use type var that resolves to number in restriction (#6502) can use type var that resolves to number in restriction (#6502) errors if using Value in a generic type errors if using Value in a generic type errors if using Enum in a generic type errors if using Enum in a generic type errors if using Number in alias errors if using Number in alias errors if passing integer literal to Union as generic argument errors if passing integer literal to Union as generic argument can use virtual type for generic class can use virtual type for generic class defines empty initialize on inherited generic class defines empty initialize on inherited generic class disallow using a non-instantiated generic type as a generic type argument disallow using a non-instantiated generic type as a generic type argument 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 splatting a non-tuple (#9853) errors if splatting a non-tuple (#9853) 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) restricts non-generic to generic restricts non-generic to generic 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) instantiates generic variadic class, accesses T from instance method through superclass instantiates generic variadic class, accesses T from instance method through superclass errors if passing integer literal to Proc as generic argument (#1120) errors if passing integer literal to Proc as generic argument (#1120) 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) instantiates generic class with default argument in initialize (#394) instantiates generic class with default argument in initialize (#394) errors if passing integer literal to Tuple as generic argument (#1120) errors if passing integer literal to Tuple as generic argument (#1120) instantiates generic variadic class, accesses T from instance method instantiates generic variadic class, accesses T from instance method errors if using Reference in a generic type errors if using Reference in a generic type restricts generic type argument through alias in a non-strict way restricts generic type argument through alias in a non-strict way errors if using Number in recursive alias errors if using Number in recursive alias errors if invoking new on private new in generic type (#3485) errors if invoking new on private new in generic type (#3485) errors on too nested generic instance errors on too nested generic instance errors if inheriting from generic and incorrect number of type vars errors if inheriting from generic and incorrect number of type vars unifies generic metaclass types unifies generic metaclass types doesn't crash when matching restriction against number literal (2) (#3157) doesn't crash when matching restriction against number literal (2) (#3157) inherits non-generic to generic (2) inherits non-generic to generic (2) initializes instance variable of generic type using type var (#961) initializes instance variable of generic type using type var (#961) Code gen: closure codegens nested closure that mentions var in both contexts codegens nested closure that mentions var in both contexts codegens closure with implicit self and var codegens closure with implicit self and var codegens closure with block that declares same var codegens closure with block that declares same var unifies types of closured var unifies types of closured var codegens simple closure at global scope codegens simple closure at global scope codegens closure with self and arguments codegens closure with self and arguments allows mixing yield and block.call allows mixing yield and block.call codegens closure with instance var codegens closure with instance var codegens closured self in block (#3388) codegens closured self in block (#3388) codegens simple closure in block codegens simple closure in block codegens closure with instance var and block codegens closure with instance var and block transforms block to proc literal with free var transforms block to proc literal with free var closures struct self closures struct self allows passing an external function along (2) allows passing an external function along (2) codegens nested closure with block (1) codegens nested closure with block (1) codegens simple closure in function with argument codegens simple closure in function with argument codegens super nested closure with nested closured variable codegens super nested closure with nested closured variable codegens nested closure codegens nested closure allows passing block as proc literal to new and to initialize allows passing block as proc literal to new and to initialize allows passing proc literal to def that captures block with & allows passing proc literal to def that captures block with & codegens closure with struct codegens closure with struct codegens closure with block codegens closure with block codegens closured nested in block codegens closured nested in block doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) doesn't free closure memory (bug) transforms block to proc literal transforms block to proc literal codegens multiple nested blocks codegens multiple nested blocks codegens closured nested in block with a call with a closure with same names codegens closured nested in block with a call with a closure with same names codegens nested closure with nested closured variable codegens nested closure with nested closured variable codegen closure in instance method without self closured codegen closure in instance method without self closured codegens closure with nested context without new closured vars but with block arg codegens closure with nested context without new closured vars but with block arg codegens closure with nested context without new closured vars codegens closure with nested context without new closured vars doesn't incorrectly consider local as closured (#4948) doesn't incorrectly consider local as closured (#4948) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) captures block and accesses local variable (#2050) codegens closure with instance var and var codegens closure with instance var and var doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method doesn't form a closure if invoking class method codegens closure with self and var codegens closure with self and var allows passing an external function along allows passing an external function along codegens super nested closure codegens super nested closure codegens proc literal with struct codegens proc literal with struct codegens closure with def that has an if codegens closure with def that has an if doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self doesn't form a closure if invoking class method with self allows giving less block args when transforming block to proc literal allows giving less block args when transforming block to proc literal codegens nested closure with block (2) codegens nested closure with block (2) codegens closure with nested context without new closured vars codegens closure with nested context without new closured vars ensures it can raise from the closure check ensures it can raise from the closure check codegens closure inside initialize inside block with self codegens closure inside initialize inside block with self codegens simple closure in function codegens simple closure in function Semantic: union doesn't run virtual lookup on unbound unions (#9173) doesn't run virtual lookup on unbound unions (#9173) can reopen Union and access T can reopen Union and access T can use Union in type restriction (#2988) can use Union in type restriction (#2988) doesn't virtualize union elements (#7814) doesn't virtualize union elements (#7814) commutativity virtual metaclass v.s. generic subclass instance metaclass virtual metaclass v.s. generic subclass instance metaclass generic module instance v.s. extending generic module instance metaclass generic module instance v.s. extending generic module instance metaclass uninstantiated generic super-metaclass v.s. uninstantiated generic sub-metaclass uninstantiated generic super-metaclass v.s. uninstantiated generic sub-metaclass module v.s. including generic module instance module v.s. including generic module instance module v.s. including module module v.s. including module module v.s. extending generic module instance metaclass module v.s. extending generic module instance metaclass superclass v.s. uninstantiated generic subclass superclass v.s. uninstantiated generic subclass generic module instance v.s. including module generic module instance v.s. including module generic module instance v.s. including generic module instance generic module instance v.s. including generic module instance errors if instantiates union errors if instantiates union finds method in Value finds method in Value doesn't crash with union of no-types (#5805) doesn't crash with union of no-types (#5805) can iterate T can iterate T types union when arg is union types union when arg is union supports macro if inside union supports macro if inside union finds method in Object finds method in Object can reopen Union can reopen Union looks up type in union type with free var looks up type in union type with free var types union of same type types union of same type assigns to union and keeps new union type in call assigns to union and keeps new union type in call types union of classes types union of classes treats void as nil in union treats void as nil in union types union when both obj and arg are union types union when both obj and arg are union merges types in the same hierarchy with Union merges types in the same hierarchy with Union types union when obj is union types union when obj is union types union types union Semantic: c enum types enum value types enum value types enum value with base type types enum value with base type allows using an enum as a type in a fun allows using an enum as a type in a fun errors if enum value is different from default (Int32) (#194) errors if enum value is different from default (Int32) (#194) errors if enum base type is not an integer errors if enum base type is not an integer allows using an enum as a type in a struct allows using an enum as a type in a struct Semantic: module includes generic module with self (check argument superclass type, success) includes generic module with self (check argument superclass type, success) gives error with cyclic include between non-generic and generic module (2) gives error with cyclic include between non-generic and generic module (2) uses type declaration inside module and gives error uses type declaration inside module and gives error can restrict module with module (#3029) can restrict module with module (#3029) includes generic module with self, and inherits it includes generic module with self, and inherits it initializes variable in module, recursive initializes variable in module, recursive extends generic module from generic class and calls class method (#7167) extends generic module from generic class and calls class method (#7167) instantiates generic variadic module, accesses T from instance method through generic include instantiates generic variadic module, accesses T from instance method through generic include includes module in a module includes module in a module includes generic module with another generic type includes generic module with another generic type uses :Module name for modules in errors uses :Module name for modules in errors gives error when trying to instantiate with new gives error when trying to instantiate with new can use generic module as instance variable type can use generic module as instance variable type finds constant in generic module included in another module finds constant in generic module included in another module includes module with Union(T*) includes module with Union(T*) types pointer of module with generic type types pointer of module with generic type gives helpful error message when generic type var is missing in block spec gives helpful error message when generic type var is missing in block spec gives error when including self, generic module gives error when including self, generic module 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 (2) calls super on included generic module and finds type var (2) includes generic module with self includes generic module with self reports can't use instance variables inside module reports can't use instance variables inside module errors if including generic module and not specifying type vars errors if including generic module and not specifying type vars types pointer of module with method types pointer of module with method includes module but wrong number of arguments includes module but wrong number of arguments errors when extending module that defines instance vars (2) (#4065) errors when extending module that defines instance vars (2) (#4065) finds inner class from inherited one (#476) finds inner class from inherited one (#476) includes generic module with type includes generic module with type gives error when including self gives error when including self finds types close to included module finds types close to included module includes generic module explicitly and errors includes generic module explicitly and errors doesn't look up initialize past module that defines initialize (#7007) doesn't look up initialize past module that defines initialize (#7007) 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 with self (check argument superclass type, success) includes generic module with self (check argument superclass type, success) instantiates generic variadic module, accesses T from class method instantiates generic variadic module, accesses T from class method errors when extending generic module that defines instance vars (2) errors when extending generic module that defines instance vars (2) types union of module and class that includes it types union of module and class that includes it extends generic module from generic module and calls class method (#7167) extends generic module from generic module and calls class method (#7167) includes generic module with self (check return type, success) includes generic module with self (check return type, success) 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 type, error) includes generic module with self (check return type, error) errors when extending self and self defines instance vars (#9568) errors when extending self and self defines instance vars (#9568) errors when recursively extending module that defines instance vars (2) errors when recursively extending module that defines instance vars (2) calls super on included generic module and finds type var calls super on included generic module and finds type var can't reopen as struct can't reopen as struct calls super on included generic module calls super on included generic module errors if reopening non-generic module as generic errors if reopening non-generic module as generic errors if reopening generic module with different splat index errors if reopening generic module with different splat index includes generic module with self (check return subclass type, success) includes generic module with self (check return subclass type, success) gives error with cyclic include between non-generic and generic module gives error with cyclic include between non-generic and generic module includes module in a class includes module in a class errors if reopening generic module with different type vars (2) errors if reopening generic module with different type vars (2) inherits instance var type annotation from generic to generic to concrete inherits instance var type annotation from generic to generic to concrete can't reopen as class can't reopen as class 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 class declares module automatically if not previously declared when declaring a class declares module automatically if not previously declared when declaring a module declares module automatically if not previously declared when declaring a module 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) types proc of module with generic class types proc of module with generic class errors when extending module that defines instance vars (#4065) errors when extending module that defines instance vars (#4065) instantiates generic variadic module, accesses T from instance method, more args instantiates generic variadic module, accesses T from instance method, more args 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 includes but not a module includes but not a module errors when extending self and self defines instance vars (3) (#9568) errors when extending self and self defines instance vars (3) (#9568) gives error with cyclic include, generic module gives error with cyclic include, generic module includes generic module explicitly includes generic module explicitly uses type declaration inside module uses type declaration inside module finds class method in block finds class method in block 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 instantiates generic variadic module, accesses T from instance method errors when extending generic module that defines instance vars errors when extending generic module that defines instance vars finds in module when included finds in module when included errors when recursively extending module that defines instance vars errors when recursively extending module that defines instance vars allows overloading with included generic module allows overloading with included generic module inherits instance var type annotation from generic to concrete with T inherits instance var type annotation from generic to concrete with T errors if reopening generic module with different splat index (2) errors if reopening generic module with different splat index (2) extends module from generic class and calls class method (#7167) extends module from generic class and calls class method (#7167) finds nested type inside method in block inside module finds nested type inside method in block inside module instantiates generic variadic module, accesses T from class method through generic extend instantiates generic variadic module, accesses T from class method through generic extend inherits instance var type annotation from generic to concrete inherits instance var type annotation from generic to concrete 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 generic module with self (check argument type, error) includes generic module with self (check argument type, error) gives helpful error message when generic type var is missing gives helpful error message when generic type var is missing errors if declares module inside if errors if declares module inside if errors if reopening generic module with different type vars errors if reopening generic module with different type vars includes generic module and errors in call includes generic module and errors in call initializes variable in module initializes variable in module gives error with cyclic include gives error with cyclic include gives error when trying to instantiate with allocate gives error when trying to instantiate with allocate errors if reopening generic module with different splat index (3) errors if reopening generic module with different splat index (3) can instantiate generic module can instantiate generic module errors when extending self and self defines instance vars (2) (#9568) errors when extending self and self defines instance vars (2) (#9568) gives error when including instantiation of self, generic module gives error when including instantiation of self, generic module doesn't lookup type in ancestor when matches in current type (#2982) doesn't lookup type in ancestor when matches in current type (#2982) includes module but can't access metaclass methods includes module but can't access metaclass methods includes module but not generic includes module but not generic works with int including enumerable works with int including enumerable extends self extends self types pointer of module with generic type types pointer of module with generic type types pointer of module types pointer of module works with range and map works with range and map can use generic module as instance variable type (2) can use generic module as instance variable type (2) extends a module extends a module Code gen: pointer changes through var and reads from pointer changes through var and reads from pointer codegens nilable pointer type dispatch (1) codegens nilable pointer type dispatch (1) takes pointerof lib external var takes pointerof lib external var takes pointerof lib external var takes pointerof lib external var takes pointerof lib external var takes pointerof lib external var takes pointerof lib external var takes pointerof lib external var takes pointerof lib external var takes pointerof lib external var does pointerof read variable does pointerof read variable codegens pointer as if condition inside union (2) codegens pointer as if condition inside union (2) codegens realloc codegens realloc creates pointer by address creates pointer by address get pointer and value of it get pointer and value of it gets pointer of argument that is never assigned to gets pointer of argument that is never assigned to get pointer of instance var get pointer of instance var codegens nilable pointer type (1) codegens nilable pointer type (1) set pointer value set pointer value codegens pointer as if condition codegens pointer as if condition passes arguments correctly for typedef metaclass (#8544) passes arguments correctly for typedef metaclass (#8544) 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 uses correct llvm module for typedef metaclass (#2877) uses correct llvm module for typedef metaclass (#2877) codegens nilable pointer type (2) codegens nilable pointer type (2) passes pointer of pointer to method passes pointer of pointer to method can pass any pointer to something expecting void* in lib call can pass any pointer to something expecting void* in lib call assigns nil and pointer to nilable pointer type assigns nil and pointer to nilable pointer type sets value of pointer to union sets value of pointer to union gets pointer of instance variable in virtual type gets pointer of instance variable in virtual type get value of pointer to union get value of pointer to union increments pointer increments pointer codegens nilable pointer type dispatch (2) codegens nilable pointer type dispatch (2) does pointerof class variable does pointerof class variable codegens pointer as if condition inside union (1) codegens pointer as if condition inside union (1) can dereference pointer to func can dereference pointer to func codegens null pointer as if condition codegens null pointer as if condition calculates pointer diff calculates pointer diff can assign nil to void pointer can assign nil to void pointer sets value of pointer to struct sets value of pointer to struct generates correct code for Pointer.malloc(0) (#2905) generates correct code for Pointer.malloc(0) (#2905) compares pointers through typedef compares pointers through typedef codegens malloc codegens malloc codegens pointer cast to Nil (#8015) codegens pointer cast to Nil (#8015) gets pointer to constant gets pointer to constant gets pointer to constant gets pointer to constant gets pointer to constant gets pointer to constant gets pointer to constant gets pointer to constant gets pointer to constant gets pointer to constant can use typedef pointer value get and set (#630) can use typedef pointer value get and set (#630) codegens pointer cast codegens pointer cast does pointerof class variable with class does pointerof class variable with class Crystal::Repl::Interpreter pointers interprets pointer set and get (bool) interprets pointer set and get (bool) pointerof class var pointerof class var interprets pointer set and get (union type, setter value) interprets pointer set and get (union type, setter value) discards pointerof discards pointerof interprets pointer set and get (union type) interprets pointer set and get (union type) discards pointer malloc discards pointer malloc interprets pointer new and pointer address interprets pointer new and pointer address interprets pointer diff interprets pointer diff interprets nilable pointer truthiness interprets nilable pointer truthiness pointerof read `StaticArray#@buffer` (2) pointerof read `StaticArray#@buffer` (2) discards pointer diff discards pointer diff discards pointer new discards pointer new pointerof read instance var pointerof read instance var discards pointer get discards pointer get interprets pointerof, mutates var, read pointer interprets pointerof, mutates var, read pointer interprets pointer set and get (clear stack) interprets pointer set and get (clear stack) discards pointer add discards pointer add discards pointer realloc discards pointer realloc interprets pointer diff, negative interprets pointer diff, negative interprets pointerof and mutates memory (there are more variables) interprets pointerof and mutates memory (there are more variables) interprets pointer add interprets pointer add 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 pointerof, mutates pointer, read var interprets pointerof, mutates pointer, read var interprets pointer realloc wrapper interprets pointer realloc wrapper pointerof read `StaticArray#@buffer` (1) pointerof read `StaticArray#@buffer` (1) interprets pointer realloc interprets pointer realloc Semantic: virtual metaclass types virtual metaclass types virtual metaclass allows passing metaclass to virtual metaclass restriction allows passing metaclass to virtual metaclass restriction types virtual metaclass method types virtual metaclass method merges metaclass types with 3 types merges metaclass types with 3 types types metaclass node types metaclass node restricts virtual metaclass to Class (#11376) restricts virtual metaclass to Class (#11376) merges metaclass types merges metaclass types allows allocating virtual type when base class is abstract allows allocating virtual type when base class is abstract allows passing metaclass to virtual metaclass restriction allows passing metaclass to virtual metaclass restriction yields virtual type in block arg if class is abstract yields virtual type in block arg if class is abstract Code gen: generic class type codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 codegens compile-time interpreted generic int128 doesn't consider abstract types for including types (#7200) doesn't consider abstract types for including types (#7200) doesn't use virtual + in type arguments for Tuple (#2839) doesn't use virtual + in type arguments for Tuple (#2839) runs generic instance var initializers in superclass's metaclass context (2) (#6482) runs generic instance var initializers in superclass's metaclass context (2) (#6482) allows initializing instance variable (#665) allows initializing instance variable (#665) declares instance var with virtual T (#1675) declares instance var with virtual T (#1675) invokes super in generic class (#2354) invokes super in generic class (#2354) allows initializing instance variable in inherited generic type allows initializing instance variable in inherited generic type inherited instance var initialize from generic to generic to concrete (#2128) inherited instance var initialize from generic to generic to concrete (#2128) runs generic instance var initializers in superclass's metaclass context (#4753) runs generic instance var initializers in superclass's metaclass context (#4753) doesn't crash on generic type restriction with no subtypes (#7583) doesn't crash on generic type restriction with no subtypes (#7583) 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 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) doesn't run generic instance var initializers in formal superclass's context (#4753) doesn't run generic instance var initializers in formal superclass's context (#4753) doesn't use virtual + in type arguments for NamedTuple (#2839) doesn't use virtual + in type arguments for NamedTuple (#2839) codegens inherited generic class instance var codegens inherited generic class instance var inherited instance var initialize from generic to concrete (#2128) inherited instance var initialize from generic to concrete (#2128) 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) 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) codegens static array size after instantiating codegens static array size after instantiating doesn't consider abstract generic instantiation when restricting type (#5190) doesn't consider abstract generic instantiation when restricting type (#5190) instantiates generic class with default argument in initialize (#394) instantiates generic class with default argument in initialize (#394) codegens virtual generic metaclass macro method call codegens virtual generic metaclass macro method call Crystal::Repl::Interpreter class vars interprets class var for virtual type interprets class var for virtual type interprets class var with initializer interprets class var with initializer does class var initializer with union (#12633) does class var initializer with union (#12633) interprets class var for virtual metaclass type interprets class var for virtual metaclass type reads class var initializer with union (#12633) reads class var initializer with union (#12633) interprets class var without initializer interprets class var without initializer finds self in class var initializer (#12439) finds self in class var initializer (#12439) Crystal::Codegen::Target parses freebsd version parses freebsd version normalizes triples normalizes triples parses incomplete triples parses incomplete triples immutability of returned container literals (#10818) StringInterpolation#expressions StringInterpolation#expressions MultiAssign#values MultiAssign#values Generic#type_vars Generic#type_vars MultiAssign#targets MultiAssign#targets When#conds When#conds Annotation#args Annotation#args ProcPointer#args ProcPointer#args ProcNotation#inputs ProcNotation#inputs Union#types Union#types Normalize: case normalizes select with else normalizes select with else normalizes select with assign and bang method normalizes select with assign and bang method normalizes select with assign normalizes select with assign normalizes select with call normalizes select with call normalizes select with assign and question method normalizes select with assign and question method Normalize: return next break removes nodes after next removes nodes after next removes nodes after return removes nodes after return doesn't remove after return when there's an unless doesn't remove after return when there's an unless removes nodes after break removes nodes after break doesn't remove nodes after if that returns in one branch doesn't remove nodes after if that returns in one branch removes nodes after if that returns in both branches removes nodes after if that returns in both branches Parser doc includes doc for abstract def includes doc for abstract def includes doc for struct includes doc for struct includes doc for module includes doc for module includes doc for annotation includes doc for annotation disables doc parsing inside defs disables doc parsing inside defs includes doc for enum def includes doc for enum def includes doc for call without obj includes doc for call without obj includes doc for private def includes doc for private def includes doc for fun def includes doc for fun def includes doc for abstract class includes doc for abstract class includes doc for def includes doc for def includes doc for macro includes doc for macro includes doc for alias includes doc for alias includes doc for constant assign includes doc for constant assign includes doc for class includes doc for class Crystal::Repl::Interpreter multidispatch passes self as pointer when doing multidispatch (2) passes self as pointer when doing multidispatch (2) 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 does dispatch on one argument with struct receiver, and modifies it does dispatch on one argument with struct receiver, and modifies it does dispatch on receiver type does dispatch on receiver type does multidispatch on virtual metaclass type (2) does multidispatch on virtual metaclass type (2) doesn't compile block if it's not used (no yield) doesn't compile block if it's not used (no yield) does dispatch on receiver type and argument type does dispatch on receiver type and argument type initialize multidispatch initialize multidispatch does dispatch on receiver type and argument type, multiple times does dispatch on receiver type and argument type, multiple times passes self as pointer when doing multidispatch passes self as pointer when doing multidispatch does dispatch on virtual type does dispatch on virtual type does dispatch on one argument inside module with implicit self does dispatch on one argument inside module with implicit self does multidispatch with captured block (#12217) does multidispatch with captured block (#12217) does dispatch on one argument with block does dispatch on one argument with block does multidispatch with mandatory named arguments does multidispatch with mandatory named arguments does dispatch on one argument does dispatch on one argument casts multidispatch argument to the def's arg type casts multidispatch argument to the def's arg type downcasts self from union to struct (pass pointer to self) downcasts self from union to struct (pass pointer to self) Crystal::Doc::MarkdDocRenderer renders code spans renders "`