=============================================================================== About this build: this rebuild has been done as part of reproduce.debian.net where we aim to reproduce Debian binary packages distributed via ftp.debian.org, by rebuilding using the exact same packages as the original build on the buildds, as described in the relevant .buildinfo file from buildinfos.debian.net. For more information please go to https://reproduce.debian.net or join #debian-reproducible on irc.debian.org =============================================================================== Preparing download of sources for /srv/rebuilderd/tmp/rebuilderdIvwy7c/inputs/yaramod_3.21.0-1.1+b2_amd64.buildinfo Source: yaramod Version: 3.21.0-1.1 rebuilderd-worker node: osuosl42-amd64 +------------------------------------------------------------------------------+ | Downloading sources Thu, 15 Jan 2026 01:57:56 +0000 | +------------------------------------------------------------------------------+ Get:1 https://deb.debian.org/debian trixie InRelease [140 kB] Get:2 https://deb.debian.org/debian-security trixie-security InRelease [43.4 kB] Get:3 https://deb.debian.org/debian trixie-updates InRelease [47.3 kB] Get:4 https://deb.debian.org/debian trixie-proposed-updates InRelease [57.6 kB] Get:5 https://deb.debian.org/debian trixie-backports InRelease [54.0 kB] Get:6 https://deb.debian.org/debian forky InRelease [137 kB] Get:7 https://deb.debian.org/debian sid InRelease [187 kB] Get:8 https://deb.debian.org/debian experimental InRelease [91.1 kB] Get:9 https://deb.debian.org/debian trixie/main Sources [10.5 MB] Get:10 https://deb.debian.org/debian trixie/non-free-firmware Sources [6,552 B] Get:11 https://deb.debian.org/debian-security trixie-security/non-free-firmware Sources [696 B] Get:12 https://deb.debian.org/debian-security trixie-security/main Sources [118 kB] Get:13 https://deb.debian.org/debian trixie-updates/main Sources [2,788 B] Get:14 https://deb.debian.org/debian trixie-proposed-updates/main Sources [10.5 kB] Get:15 https://deb.debian.org/debian trixie-backports/non-free-firmware Sources [2,468 B] Get:16 https://deb.debian.org/debian trixie-backports/main Sources [126 kB] Get:17 https://deb.debian.org/debian forky/main Sources [10.6 MB] Get:18 https://deb.debian.org/debian forky/non-free-firmware Sources [7,700 B] Get:19 https://deb.debian.org/debian sid/non-free-firmware Sources [9,688 B] Get:20 https://deb.debian.org/debian sid/main Sources [11.2 MB] Get:21 https://deb.debian.org/debian experimental/non-free-firmware Sources [3,180 B] Get:22 https://deb.debian.org/debian experimental/main Sources [388 kB] Fetched 33.8 MB in 3s (9,917 kB/s) Reading package lists... 'https://deb.debian.org/debian/pool/main/y/yaramod/yaramod_3.21.0-1.1.dsc' yaramod_3.21.0-1.1.dsc 2205 SHA256:d3852e587b04192d177516e5cb2e13bcd5dbde1d477f877c1636c4bea07a6d62 'https://deb.debian.org/debian/pool/main/y/yaramod/yaramod_3.21.0.orig.tar.gz' yaramod_3.21.0.orig.tar.gz 965418 SHA256:095aee2946f1636b01653a1b67f84973eeb7ce733b17350dfb911bc74fa4cb9e 'https://deb.debian.org/debian/pool/main/y/yaramod/yaramod_3.21.0-1.1.debian.tar.xz' yaramod_3.21.0-1.1.debian.tar.xz 6360 SHA256:07f88a705ab951273e865dad08732f09cd589230f56ea414bb63a599986678bc 095aee2946f1636b01653a1b67f84973eeb7ce733b17350dfb911bc74fa4cb9e yaramod_3.21.0.orig.tar.gz 07f88a705ab951273e865dad08732f09cd589230f56ea414bb63a599986678bc yaramod_3.21.0-1.1.debian.tar.xz d3852e587b04192d177516e5cb2e13bcd5dbde1d477f877c1636c4bea07a6d62 yaramod_3.21.0-1.1.dsc +------------------------------------------------------------------------------+ | Calling debrebuild Thu, 15 Jan 2026 01:58:01 +0000 | +------------------------------------------------------------------------------+ Rebuilding yaramod=3.21.0-1.1 in /srv/rebuilderd/tmp/rebuilderdIvwy7c/inputs now. + nice /usr/bin/debrebuild --buildresult=/srv/rebuilderd/tmp/rebuilderdIvwy7c/out --builder=sbuild+unshare --cache=/srv/rebuilderd/cache -- /srv/rebuilderd/tmp/rebuilderdIvwy7c/inputs/yaramod_3.21.0-1.1+b2_amd64.buildinfo /srv/rebuilderd/tmp/rebuilderdIvwy7c/inputs/yaramod_3.21.0-1.1+b2_amd64.buildinfo contains a GPG signature which has NOT been validated Using defined Build-Path: /build/reproducible-path/yaramod-3.21.0 I: verifying dsc... successful! Get:1 http://deb.debian.org/debian unstable InRelease [187 kB] Get:2 http://snapshot.debian.org/archive/debian/20250310T101857Z sid InRelease [205 kB] Get:3 http://deb.debian.org/debian unstable/main amd64 Packages [10.2 MB] Get:4 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 Packages [10.1 MB] Fetched 20.7 MB in 2s (8622 kB/s) Reading package lists... W: http://snapshot.debian.org/archive/debian/20250310T101857Z/dists/sid/InRelease: Loading /etc/apt/trusted.gpg from deprecated option Dir::Etc::Trusted Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libdebconfclient0 amd64 0.277 [10.4 kB] Fetched 10.4 kB in 0s (128 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpqrayoenq/libdebconfclient0_0.277_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 bzip2 amd64 1.0.8-6 [40.5 kB] Fetched 40.5 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp1bkwz2jo/bzip2_1.0.8-6_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libcap-ng0 amd64 0.8.5-4+b1 [17.6 kB] Fetched 17.6 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjxh92bne/libcap-ng0_0.8.5-4+b1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libelf1t64 amd64 0.192-4 [189 kB] Fetched 189 kB in 0s (3463 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp4mc8c21a/libelf1t64_0.192-4_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 python3-more-itertools all 10.6.0-1 [65.3 kB] Fetched 65.3 kB in 0s (462 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpdycf33qj/python3-more-itertools_10.6.0-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 linux-libc-dev all 6.12.17-1 [2526 kB] Fetched 2526 kB in 0s (11.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpqfc56m9r/linux-libc-dev_6.12.17-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 python3-zipp all 3.21.0-1 [10.6 kB] Fetched 10.6 kB in 0s (532 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpl8ywubdq/python3-zipp_3.21.0-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 dash amd64 0.5.12-12 [98.5 kB] Fetched 98.5 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp97mbryq4/dash_0.5.12-12_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 debconf all 1.5.90 [121 kB] Fetched 121 kB in 0s (1021 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpj5no9f2s/debconf_1.5.90_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 perl-modules-5.40 all 5.40.1-2 [3017 kB] Fetched 3017 kB in 0s (16.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpug72cgci/perl-modules-5.40_5.40.1-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libpcre2-8-0 amd64 10.45-1 [298 kB] Fetched 298 kB in 0s (4058 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpsr_eirmw/libpcre2-8-0_10.45-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libc6-dev amd64 2.41-4 [1989 kB] Fetched 1989 kB in 0s (18.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6j2cir14/libc6-dev_2.41-4_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 python3-setuptools all 75.8.0-1 [724 kB] Fetched 724 kB in 0s (16.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpfsb5cyqo/python3-setuptools_75.8.0-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libc-dev-bin amd64 2.41-4 [58.4 kB] Fetched 58.4 kB in 0s (3150 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp4cckxux4/libc-dev-bin_2.41-4_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libmpfr6 amd64 4.2.1-1+b2 [724 kB] Fetched 724 kB in 0s (20.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp_1bfng4t/libmpfr6_4.2.1-1+b2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libre2-11 amd64 20240702-3+b1 [169 kB] Fetched 169 kB in 0s (8021 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpvkgd9s_l/libre2-11_20240702-3+b1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 gcc amd64 4:14.2.0-1 [5136 B] Fetched 5136 B in 0s (285 kB/s) dpkg-name: info: moved 'gcc_4%3a14.2.0-1_amd64.deb' to '/srv/rebuilderd/tmp/tmpzu5sbk08/gcc_14.2.0-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libitm1 amd64 14.2.0-17 [25.9 kB] Fetched 25.9 kB in 0s (1503 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp918kbr62/libitm1_14.2.0-17_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libfile-stripnondeterminism-perl all 1.14.1-2 [19.7 kB] Fetched 19.7 kB in 0s (520 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp87itcct3/libfile-stripnondeterminism-perl_1.14.1-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 python3-autocommand all 2.2.2-3 [13.6 kB] Fetched 13.6 kB in 0s (549 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpmzqeluvj/python3-autocommand_2.2.2-3_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libgdbm6t64 amd64 1.24-2 [75.2 kB] Fetched 75.2 kB in 0s (3121 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpa0efd6ms/libgdbm6t64_1.24-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libabsl20240722 amd64 20240722.0-1.5 [492 kB] Fetched 492 kB in 0s (6450 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpvf4y4_ys/libabsl20240722_20240722.0-1.5_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 python3-typeguard all 4.4.2-1 [37.3 kB] Fetched 37.3 kB in 0s (1155 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpp2zr18zg/python3-typeguard_4.4.2-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libtool all 2.5.4-4 [539 kB] Fetched 539 kB in 0s (7791 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpuf5a1iuo/libtool_2.5.4-4_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libgtest-dev amd64 1.16.0-1 [259 kB] Fetched 259 kB in 0s (6641 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp1ebmof4r/libgtest-dev_1.16.0-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 pybind11-dev all 2.13.6-2 [205 kB] Fetched 205 kB in 0s (4457 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpm6mwpr4c/pybind11-dev_2.13.6-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libproc2-0 amd64 2:4.0.4-7 [64.9 kB] Fetched 64.9 kB in 0s (2834 kB/s) dpkg-name: info: moved 'libproc2-0_2%3a4.0.4-7_amd64.deb' to '/srv/rebuilderd/tmp/tmp3oqo2oy_/libproc2-0_4.0.4-7_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libreadline8t64 amd64 8.2-6 [169 kB] Fetched 169 kB in 0s (492 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpqpu71511/libreadline8t64_8.2-6_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libkrb5support0 amd64 1.21.3-4 [32.8 kB] Fetched 32.8 kB in 0s (876 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpgyr5m0ps/libkrb5support0_1.21.3-4_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 binutils-x86-64-linux-gnu amd64 2.44-3 [1014 kB] Fetched 1014 kB in 0s (17.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp4ox35a_7/binutils-x86-64-linux-gnu_2.44-3_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 autopoint all 0.23.1-1 [770 kB] Fetched 770 kB in 0s (12.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmph4jkl9wl/autopoint_0.23.1-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 cmake-data all 3.31.6-1 [2268 kB] Fetched 2268 kB in 0s (14.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpr4xesnxb/cmake-data_3.31.6-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 debhelper all 13.24.1 [920 kB] Fetched 920 kB in 0s (15.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpkerz9mki/debhelper_13.24.1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libk5crypto3 amd64 1.21.3-4 [80.9 kB] Fetched 80.9 kB in 0s (1234 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp8xo6ti3p/libk5crypto3_1.21.3-4_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libsasl2-modules-db amd64 2.1.28+dfsg1-9 [19.8 kB] Fetched 19.8 kB in 0s (1143 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpri_5nljz/libsasl2-modules-db_2.1.28+dfsg1-9_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libacl1 amd64 2.3.2-2+b1 [32.9 kB] Fetched 32.9 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3fm0tdrd/libacl1_2.3.2-2+b1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libunistring5 amd64 1.3-1 [476 kB] Fetched 476 kB in 0s (7329 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpwjxoumti/libunistring5_1.3-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libhwasan0 amd64 14.2.0-17 [1489 kB] Fetched 1489 kB in 0s (20.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpc_p3bg5k/libhwasan0_14.2.0-17_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 tar amd64 1.35+dfsg-3.1 [815 kB] Fetched 815 kB in 0s (74.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpct2lyslm/tar_1.35+dfsg-3.1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libdebhelper-perl all 13.24.1 [90.9 kB] Fetched 90.9 kB in 0s (2511 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpkdzm5s4a/libdebhelper-perl_13.24.1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libjansson4 amd64 2.14-2+b3 [39.8 kB] Fetched 39.8 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp381advu6/libjansson4_2.14-2+b3_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libpam-runtime all 1.7.0-3 [248 kB] Fetched 248 kB in 0s (1195 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmptvhekqza/libpam-runtime_1.7.0-3_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libpython3-stdlib amd64 3.13.2-2 [10.1 kB] Fetched 10.1 kB in 0s (69.9 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpt38vcb9m/libpython3-stdlib_3.13.2-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 patch amd64 2.7.6-7 [128 kB] Fetched 128 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp2rjjmu0d/patch_2.7.6-7_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libsmartcols1 amd64 2.40.4-5 [140 kB] Fetched 140 kB in 0s (2388 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp18zgk09i/libsmartcols1_2.40.4-5_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 hostname amd64 3.25 [11.0 kB] Fetched 11.0 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmprymwgl5_/hostname_3.25_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 g++-x86-64-linux-gnu amd64 4:14.2.0-1 [1200 B] Fetched 1200 B in 0s (120 kB/s) dpkg-name: info: moved 'g++-x86-64-linux-gnu_4%3a14.2.0-1_amd64.deb' to '/srv/rebuilderd/tmp/tmpxru2k4xj/g++-x86-64-linux-gnu_14.2.0-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 groff-base amd64 1.23.0-7 [1185 kB] Fetched 1185 kB in 0s (28.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp5q4onptg/groff-base_1.23.0-7_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libmount1 amd64 2.40.4-5 [200 kB] Fetched 200 kB in 0s (3038 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpqsgt7djy/libmount1_2.40.4-5_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libdb5.3t64 amd64 5.3.28+dfsg2-9 [704 kB] Fetched 704 kB in 0s (11.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpl2yuiqde/libdb5.3t64_5.3.28+dfsg2-9_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 bash amd64 5.2.37-1.1 [1500 kB] Fetched 1500 kB in 0s (11.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpaantx6rs/bash_5.2.37-1.1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 build-essential amd64 12.12 [4624 B] Fetched 4624 B in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpfeows71t/build-essential_12.12_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libpkgconf3 amd64 1.8.1-4 [36.4 kB] Fetched 36.4 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3262tdxm/libpkgconf3_1.8.1-4_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 gettext amd64 0.23.1-1 [1680 kB] Fetched 1680 kB in 0s (15.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpe70nddto/gettext_0.23.1-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libquadmath0 amd64 14.2.0-17 [145 kB] Fetched 145 kB in 0s (2399 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmphd8dc2_k/libquadmath0_14.2.0-17_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libattr1 amd64 1:2.5.2-3 [22.9 kB] Fetched 22.9 kB in 0s (0 B/s) dpkg-name: info: moved 'libattr1_1%3a2.5.2-3_amd64.deb' to '/srv/rebuilderd/tmp/tmp_xfbksuw/libattr1_2.5.2-3_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 autotools-dev all 20220109.1 [51.6 kB] Fetched 51.6 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpvuetojxc/autotools-dev_20220109.1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 g++ amd64 4:14.2.0-1 [1344 B] Fetched 1344 B in 0s (72.0 kB/s) dpkg-name: info: moved 'g++_4%3a14.2.0-1_amd64.deb' to '/srv/rebuilderd/tmp/tmpad013iyh/g++_14.2.0-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libjs-underscore all 1.13.4~dfsg+~1.11.4-3 [116 kB] Fetched 116 kB in 0s (2813 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpwwjkxr_4/libjs-underscore_1.13.4~dfsg+~1.11.4-3_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 gzip amd64 1.13-1 [138 kB] Fetched 138 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpkfqxdtvi/gzip_1.13-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 dh-python all 6.20250308 [115 kB] Fetched 115 kB in 0s (2379 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp9igtfc_8/dh-python_6.20250308_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 pkgconf amd64 1.8.1-4 [26.2 kB] Fetched 26.2 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpu7puz2ne/pkgconf_1.8.1-4_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libgnutls30t64 amd64 3.8.9-2 [1464 kB] Fetched 1464 kB in 0s (14.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpqjaxw4yg/libgnutls30t64_3.8.9-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libpython3.13-minimal amd64 3.13.2-1 [859 kB] Fetched 859 kB in 0s (16.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpi9gnvlvj/libpython3.13-minimal_3.13.2-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libarchive-zip-perl all 1.68-1 [104 kB] Fetched 104 kB in 0s (2719 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpgc04znsy/libarchive-zip-perl_1.68-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 pkg-kde-tools all 0.18.12 [89.1 kB] Fetched 89.1 kB in 0s (2236 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp2rfbthc_/pkg-kde-tools_0.18.12_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libcrypt1 amd64 1:4.4.38-1 [90.1 kB] Fetched 90.1 kB in 0s (0 B/s) dpkg-name: info: moved 'libcrypt1_1%3a4.4.38-1_amd64.deb' to '/srv/rebuilderd/tmp/tmp9g52sgdd/libcrypt1_4.4.38-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 sed amd64 4.9-2 [329 kB] Fetched 329 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp2wupuwbx/sed_4.9-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 sensible-utils all 0.0.24 [24.8 kB] Fetched 24.8 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpghditv7i/sensible-utils_0.0.24_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libabsl-dev amd64 20240722.0-1.5 [1250 kB] Fetched 1250 kB in 0s (7719 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpc2osmxt8/libabsl-dev_20240722.0-1.5_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libp11-kit0 amd64 0.25.5-3 [425 kB] Fetched 425 kB in 0s (3876 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpr2vtoe5j/libp11-kit0_0.25.5-3_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libsframe1 amd64 2.44-3 [78.4 kB] Fetched 78.4 kB in 0s (1139 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp_9s9bb3n/libsframe1_2.44-3_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 gcc-14 amd64 14.2.0-17 [537 kB] Fetched 537 kB in 0s (6145 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp76ivuf8u/gcc-14_14.2.0-17_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libseccomp2 amd64 2.5.5-2+b1 [48.1 kB] Fetched 48.1 kB in 0s (2229 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpwp23b3up/libseccomp2_2.5.5-2+b1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libhogweed6t64 amd64 3.10.1-1 [335 kB] Fetched 335 kB in 0s (10.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpooe0k_k1/libhogweed6t64_3.10.1-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 cpp-14 amd64 14.2.0-17 [1280 B] Fetched 1280 B in 0s (63.1 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpaql57z33/cpp-14_14.2.0-17_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libxml2 amd64 2.12.7+dfsg+really2.9.14-0.2+b2 [699 kB] Fetched 699 kB in 0s (19.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp68w6ampc/libxml2_2.12.7+dfsg+really2.9.14-0.2+b2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libexpat1 amd64 2.6.4-1 [106 kB] Fetched 106 kB in 0s (7234 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmproebxl9u/libexpat1_2.6.4-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 mawk amd64 1.3.4.20250131-1 [141 kB] Fetched 141 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpsnbncxc2/mawk_1.3.4.20250131-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libpython3-dev amd64 3.13.2-2 [10.3 kB] Fetched 10.3 kB in 0s (442 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmprq06fqzw/libpython3-dev_3.13.2-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 python3-minimal amd64 3.13.2-2 [27.1 kB] Fetched 27.1 kB in 0s (2694 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpsmn7oflv/python3-minimal_3.13.2-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 python3.13-dev amd64 3.13.2-1 [507 kB] Fetched 507 kB in 0s (11.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3ut8tr2t/python3.13-dev_3.13.2-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libubsan1 amd64 14.2.0-17 [1075 kB] Fetched 1075 kB in 0s (13.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpbolj3jrn/libubsan1_14.2.0-17_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libgprofng0 amd64 2.44-3 [808 kB] Fetched 808 kB in 0s (4300 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmplkz86mfn/libgprofng0_2.44-3_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 liblz4-1 amd64 1.10.0-4 [63.9 kB] Fetched 63.9 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpy1wnd_l4/liblz4-1_1.10.0-4_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 automake all 1:1.17-3 [862 kB] Fetched 862 kB in 0s (17.8 MB/s) dpkg-name: info: moved 'automake_1%3a1.17-3_all.deb' to '/srv/rebuilderd/tmp/tmprn033di9/automake_1.17-3_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libsqlite3-0 amd64 3.46.1-2 [913 kB] Fetched 913 kB in 0s (8775 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpak68d47d/libsqlite3-0_3.46.1-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 python3.13-minimal amd64 3.13.2-1 [2205 kB] Fetched 2205 kB in 0s (18.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp_pkkwfwk/python3.13-minimal_3.13.2-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 po-debconf all 1.0.21+nmu1 [248 kB] Fetched 248 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpx_lzcacf/po-debconf_1.0.21+nmu1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libpython3.13-stdlib amd64 3.13.2-1 [1979 kB] Fetched 1979 kB in 0s (9735 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpv7wukp2u/libpython3.13-stdlib_3.13.2-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 python3-charset-normalizer amd64 3.4.1-1+b1 [125 kB] Fetched 125 kB in 0s (2931 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpq6wotui_/python3-charset-normalizer_3.4.1-1+b1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libyaml-0-2 amd64 0.2.5-2 [52.5 kB] Fetched 52.5 kB in 0s (2648 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp4xfktnvu/libyaml-0-2_0.2.5-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libatomic1 amd64 14.2.0-17 [9316 B] Fetched 9316 B in 0s (398 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6v98hji0/libatomic1_14.2.0-17_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libblkid1 amd64 2.40.4-5 [169 kB] Fetched 169 kB in 0s (5050 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpg2c22zis/libblkid1_2.40.4-5_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libcc1-0 amd64 14.2.0-17 [42.8 kB] Fetched 42.8 kB in 0s (2046 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpifx7lmkt/libcc1-0_14.2.0-17_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libcom-err2 amd64 1.47.2-1 [24.0 kB] Fetched 24.0 kB in 0s (935 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpovy3njy_/libcom-err2_1.47.2-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libsasl2-2 amd64 2.1.28+dfsg1-9 [57.5 kB] Fetched 57.5 kB in 0s (1784 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpu11x966p/libsasl2-2_2.1.28+dfsg1-9_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libcap2 amd64 1:2.75-1 [27.5 kB] Fetched 27.5 kB in 0s (1136 kB/s) dpkg-name: info: moved 'libcap2_1%3a2.75-1_amd64.deb' to '/srv/rebuilderd/tmp/tmp2oyeeew3/libcap2_2.75-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libstdc++6 amd64 14.2.0-17 [713 kB] Fetched 713 kB in 0s (10.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp8u2x53kf/libstdc++6_14.2.0-17_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-jaraco.context all 6.0.1-1 [8276 B] Fetched 8276 B in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpsqqwe26l/python3-jaraco.context_6.0.1-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libpsl5t64 amd64 0.21.2-1.1+b1 [57.2 kB] Fetched 57.2 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0_a9slk8/libpsl5t64_0.21.2-1.1+b1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 gcc-14-x86-64-linux-gnu amd64 14.2.0-17 [21.4 MB] Fetched 21.4 MB in 1s (23.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp2kk12mlq/gcc-14-x86-64-linux-gnu_14.2.0-17_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 base-passwd amd64 3.6.6 [53.1 kB] Fetched 53.1 kB in 0s (2404 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpedvkkkrh/base-passwd_3.6.6_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libgcc-s1 amd64 14.2.0-17 [72.7 kB] Fetched 72.7 kB in 0s (6460 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmph8zmob6s/libgcc-s1_14.2.0-17_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libgdbm-compat4t64 amd64 1.24-2 [50.3 kB] Fetched 50.3 kB in 0s (1868 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpxu27bz4o/libgdbm-compat4t64_1.24-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libicu72 amd64 72.1-6 [9421 kB] Fetched 9421 kB in 0s (28.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp5qqvkisw/libicu72_72.1-6_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libpipeline1 amd64 1.5.8-1 [42.0 kB] Fetched 42.0 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp173lnxc2/libpipeline1_1.5.8-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 readline-common all 8.2-6 [69.4 kB] Fetched 69.4 kB in 0s (2074 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0jd0qfyh/readline-common_8.2-6_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 netbase all 6.4 [12.8 kB] Fetched 12.8 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpaniktchv/netbase_6.4_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libaudit1 amd64 1:4.0.2-2+b2 [55.1 kB] Fetched 55.1 kB in 0s (1535 kB/s) dpkg-name: info: moved 'libaudit1_1%3a4.0.2-2+b2_amd64.deb' to '/srv/rebuilderd/tmp/tmp7hpro1cx/libaudit1_4.0.2-2+b2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 pkgconf-bin amd64 1.8.1-4 [30.2 kB] Fetched 30.2 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpgwcrcoat/pkgconf-bin_1.8.1-4_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 make amd64 4.4.1-1 [463 kB] Fetched 463 kB in 0s (4105 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpughi8xsr/make_4.4.1-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libpog-dev all 0.5.3-3 [29.7 kB] Fetched 29.7 kB in 0s (900 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpxo9yvw9o/libpog-dev_0.5.3-3_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 binutils amd64 2.44-3 [265 kB] Fetched 265 kB in 0s (8520 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpidec8dl7/binutils_2.44-3_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libbz2-1.0 amd64 1.0.8-6 [37.9 kB] Fetched 37.9 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmppyazpyav/libbz2-1.0_1.0.8-6_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 python3-yaml amd64 6.0.2-1+b2 [136 kB] Fetched 136 kB in 0s (3949 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp1hl5u9fq/python3-yaml_6.0.2-1+b2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 findutils amd64 4.10.0-3 [700 kB] Fetched 700 kB in 0s (57.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmptrbr_9bw/findutils_4.10.0-3_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 coreutils amd64 9.5-1+b1 [2922 kB] Fetched 2922 kB in 0s (27.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp74kxdswo/coreutils_9.5-1+b1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libpython3.13 amd64 3.13.2-1 [2151 kB] Fetched 2151 kB in 0s (19.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpf6uw60_s/libpython3.13_3.13.2-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libpam0g amd64 1.7.0-3 [69.7 kB] Fetched 69.7 kB in 0s (2100 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpva7sdkro/libpam0g_1.7.0-3_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 util-linux amd64 2.40.4-5 [1205 kB] Fetched 1205 kB in 0s (3953 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpntwgx4we/util-linux_2.40.4-5_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 cmake amd64 3.31.6-1 [12.0 MB] Fetched 12.0 MB in 1s (13.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmplpzy7tnp/cmake_3.31.6-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libzstd1 amd64 1.5.6+dfsg-2 [300 kB] Fetched 300 kB in 0s (7195 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpqu2ncpga/libzstd1_1.5.6+dfsg-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 binutils-common amd64 2.44-3 [2509 kB] Fetched 2509 kB in 0s (27.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpahiscw_1/binutils-common_2.44-3_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libgssapi-krb5-2 amd64 1.21.3-4 [138 kB] Fetched 138 kB in 0s (3590 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp2ft096d4/libgssapi-krb5-2_1.21.3-4_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 intltool-debian all 0.35.0+20060710.6 [22.9 kB] Fetched 22.9 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpodwp2yiw/intltool-debian_0.35.0+20060710.6_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libpython3.13-dev amd64 3.13.2-1 [5005 kB] Fetched 5005 kB in 1s (7174 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpotces0sy/libpython3.13-dev_3.13.2-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 python3-typing-extensions all 4.12.2-2 [73.0 kB] Fetched 73.0 kB in 0s (2266 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp1_dy1_ak/python3-typing-extensions_4.12.2-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 xz-utils amd64 5.6.4-1 [554 kB] Fetched 554 kB in 0s (10.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp9azipsib/xz-utils_5.6.4-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 rpcsvc-proto amd64 1.4.3-1 [63.3 kB] Fetched 63.3 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmphoo7mksa/rpcsvc-proto_1.4.3-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libc-bin amd64 2.41-4 [635 kB] Fetched 635 kB in 0s (4361 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp008l_a60/libc-bin_2.41-4_amd64.deb' Downloading dependency 1 of 231: libdebconfclient0:amd64=0.277 Downloading dependency 2 of 231: bzip2:amd64=1.0.8-6 Downloading dependency 3 of 231: libcap-ng0:amd64=0.8.5-4+b1 Downloading dependency 4 of 231: libelf1t64:amd64=0.192-4 Downloading dependency 5 of 231: python3-more-itertools:amd64=10.6.0-1 Downloading dependency 6 of 231: linux-libc-dev:amd64=6.12.17-1 Downloading dependency 7 of 231: python3-zipp:amd64=3.21.0-1 Downloading dependency 8 of 231: dash:amd64=0.5.12-12 Downloading dependency 9 of 231: debconf:amd64=1.5.90 Downloading dependency 10 of 231: perl-modules-5.40:amd64=5.40.1-2 Downloading dependency 11 of 231: libpcre2-8-0:amd64=10.45-1 Downloading dependency 12 of 231: libc6-dev:amd64=2.41-4 Downloading dependency 13 of 231: python3-setuptools:amd64=75.8.0-1 Downloading dependency 14 of 231: libc-dev-bin:amd64=2.41-4 Downloading dependency 15 of 231: libmpfr6:amd64=4.2.1-1+b2 Downloading dependency 16 of 231: libre2-11:amd64=20240702-3+b1 Downloading dependency 17 of 231: gcc:amd64=4:14.2.0-1 Downloading dependency 18 of 231: libitm1:amd64=14.2.0-17 Downloading dependency 19 of 231: libfile-stripnondeterminism-perl:amd64=1.14.1-2 Downloading dependency 20 of 231: python3-autocommand:amd64=2.2.2-3 Downloading dependency 21 of 231: libgdbm6t64:amd64=1.24-2 Downloading dependency 22 of 231: libabsl20240722:amd64=20240722.0-1.5 Downloading dependency 23 of 231: python3-typeguard:amd64=4.4.2-1 Downloading dependency 24 of 231: libtool:amd64=2.5.4-4 Downloading dependency 25 of 231: libgtest-dev:amd64=1.16.0-1 Downloading dependency 26 of 231: pybind11-dev:amd64=2.13.6-2 Downloading dependency 27 of 231: libproc2-0:amd64=2:4.0.4-7 Downloading dependency 28 of 231: libreadline8t64:amd64=8.2-6 Downloading dependency 29 of 231: libkrb5support0:amd64=1.21.3-4 Downloading dependency 30 of 231: binutils-x86-64-linux-gnu:amd64=2.44-3 Downloading dependency 31 of 231: autopoint:amd64=0.23.1-1 Downloading dependency 32 of 231: cmake-data:amd64=3.31.6-1 Downloading dependency 33 of 231: debhelper:amd64=13.24.1 Downloading dependency 34 of 231: libk5crypto3:amd64=1.21.3-4 Downloading dependency 35 of 231: libsasl2-modules-db:amd64=2.1.28+dfsg1-9 Downloading dependency 36 of 231: libacl1:amd64=2.3.2-2+b1 Downloading dependency 37 of 231: libunistring5:amd64=1.3-1 Downloading dependency 38 of 231: libhwasan0:amd64=14.2.0-17 Downloading dependency 39 of 231: tar:amd64=1.35+dfsg-3.1 Downloading dependency 40 of 231: libdebhelper-perl:amd64=13.24.1 Downloading dependency 41 of 231: libjansson4:amd64=2.14-2+b3 Downloading dependency 42 of 231: libpam-runtime:amd64=1.7.0-3 Downloading dependency 43 of 231: libpython3-stdlib:amd64=3.13.2-2 Downloading dependency 44 of 231: patch:amd64=2.7.6-7 Downloading dependency 45 of 231: libsmartcols1:amd64=2.40.4-5 Downloading dependency 46 of 231: hostname:amd64=3.25 Downloading dependency 47 of 231: g++-x86-64-linux-gnu:amd64=4:14.2.0-1 Downloading dependency 48 of 231: groff-base:amd64=1.23.0-7 Downloading dependency 49 of 231: libmount1:amd64=2.40.4-5 Downloading dependency 50 of 231: libdb5.3t64:amd64=5.3.28+dfsg2-9 Downloading dependency 51 of 231: bash:amd64=5.2.37-1.1 Downloading dependency 52 of 231: build-essential:amd64=12.12 Downloading dependency 53 of 231: libpkgconf3:amd64=1.8.1-4 Downloading dependency 54 of 231: gettext:amd64=0.23.1-1 Downloading dependency 55 of 231: libquadmath0:amd64=14.2.0-17 Downloading dependency 56 of 231: libattr1:amd64=1:2.5.2-3 Downloading dependency 57 of 231: autotools-dev:amd64=20220109.1 Downloading dependency 58 of 231: g++:amd64=4:14.2.0-1 Downloading dependency 59 of 231: libjs-underscore:amd64=1.13.4~dfsg+~1.11.4-3 Downloading dependency 60 of 231: gzip:amd64=1.13-1 Downloading dependency 61 of 231: dh-python:amd64=6.20250308 Downloading dependency 62 of 231: pkgconf:amd64=1.8.1-4 Downloading dependency 63 of 231: libgnutls30t64:amd64=3.8.9-2 Downloading dependency 64 of 231: libpython3.13-minimal:amd64=3.13.2-1 Downloading dependency 65 of 231: libarchive-zip-perl:amd64=1.68-1 Downloading dependency 66 of 231: pkg-kde-tools:amd64=0.18.12 Downloading dependency 67 of 231: libcrypt1:amd64=1:4.4.38-1 Downloading dependency 68 of 231: sed:amd64=4.9-2 Downloading dependency 69 of 231: sensible-utils:amd64=0.0.24 Downloading dependency 70 of 231: libabsl-dev:amd64=20240722.0-1.5 Downloading dependency 71 of 231: libp11-kit0:amd64=0.25.5-3 Downloading dependency 72 of 231: libsframe1:amd64=2.44-3 Downloading dependency 73 of 231: gcc-14:amd64=14.2.0-17 Downloading dependency 74 of 231: libseccomp2:amd64=2.5.5-2+b1 Downloading dependency 75 of 231: libhogweed6t64:amd64=3.10.1-1 Downloading dependency 76 of 231: cpp-14:amd64=14.2.0-17 Downloading dependency 77 of 231: libxml2:amd64=2.12.7+dfsg+really2.9.14-0.2+b2 Downloading dependency 78 of 231: libexpat1:amd64=2.6.4-1 Downloading dependency 79 of 231: mawk:amd64=1.3.4.20250131-1 Downloading dependency 80 of 231: libpython3-dev:amd64=3.13.2-2 Downloading dependency 81 of 231: python3-minimal:amd64=3.13.2-2 Downloading dependency 82 of 231: python3.13-dev:amd64=3.13.2-1 Downloading dependency 83 of 231: libubsan1:amd64=14.2.0-17 Downloading dependency 84 of 231: libgprofng0:amd64=2.44-3 Downloading dependency 85 of 231: liblz4-1:amd64=1.10.0-4 Downloading dependency 86 of 231: automake:amd64=1:1.17-3 Downloading dependency 87 of 231: libsqlite3-0:amd64=3.46.1-2 Downloading dependency 88 of 231: python3.13-minimal:amd64=3.13.2-1 Downloading dependency 89 of 231: po-debconf:amd64=1.0.21+nmu1 Downloading dependency 90 of 231: libpython3.13-stdlib:amd64=3.13.2-1 Downloading dependency 91 of 231: python3-charset-normalizer:amd64=3.4.1-1+b1 Downloading dependency 92 of 231: libyaml-0-2:amd64=0.2.5-2 Downloading dependency 93 of 231: libatomic1:amd64=14.2.0-17 Downloading dependency 94 of 231: libblkid1:amd64=2.40.4-5 Downloading dependency 95 of 231: libcc1-0:amd64=14.2.0-17 Downloading dependency 96 of 231: libcom-err2:amd64=1.47.2-1 Downloading dependency 97 of 231: libsasl2-2:amd64=2.1.28+dfsg1-9 Downloading dependency 98 of 231: libcap2:amd64=1:2.75-1 Downloading dependency 99 of 231: libstdc++6:amd64=14.2.0-17 Downloading dependency 100 of 231: python3-jaraco.context:amd64=6.0.1-1 Downloading dependency 101 of 231: libpsl5t64:amd64=0.21.2-1.1+b1 Downloading dependency 102 of 231: gcc-14-x86-64-linux-gnu:amd64=14.2.0-17 Downloading dependency 103 of 231: base-passwd:amd64=3.6.6 Downloading dependency 104 of 231: libgcc-s1:amd64=14.2.0-17 Downloading dependency 105 of 231: libgdbm-compat4t64:amd64=1.24-2 Downloading dependency 106 of 231: libicu72:amd64=72.1-6 Downloading dependency 107 of 231: libpipeline1:amd64=1.5.8-1 Downloading dependency 108 of 231: readline-common:amd64=8.2-6 Downloading dependency 109 of 231: netbase:amd64=6.4 Downloading dependency 110 of 231: libaudit1:amd64=1:4.0.2-2+b2 Downloading dependency 111 of 231: pkgconf-bin:amd64=1.8.1-4 Downloading dependency 112 of 231: make:amd64=4.4.1-1 Downloading dependency 113 of 231: libpog-dev:amd64=0.5.3-3 Downloading dependency 114 of 231: binutils:amd64=2.44-3 Downloading dependency 115 of 231: libbz2-1.0:amd64=1.0.8-6 Downloading dependency 116 of 231: python3-yaml:amd64=6.0.2-1+b2 Downloading dependency 117 of 231: findutils:amd64=4.10.0-3 Downloading dependency 118 of 231: coreutils:amd64=9.5-1+b1 Downloading dependency 119 of 231: libpython3.13:amd64=3.13.2-1 Downloading dependency 120 of 231: libpam0g:amd64=1.7.0-3 Downloading dependency 121 of 231: util-linux:amd64=2.40.4-5 Downloading dependency 122 of 231: cmake:amd64=3.31.6-1 Downloading dependency 123 of 231: libzstd1:amd64=1.5.6+dfsg-2 Downloading dependency 124 of 231: binutils-common:amd64=2.44-3 Downloading dependency 125 of 231: libgssapi-krb5-2:amd64=1.21.3-4 Downloading dependency 126 of 231: intltool-debian:amd64=0.35.0+20060710.6 Downloading dependency 127 of 231: libpython3.13-dev:amd64=3.13.2-1 Downloading dependency 128 of 231: python3-typing-extensions:amd64=4.12.2-2 Downloading dependency 129 of 231: xz-utils:amd64=5.6.4-1 Downloading dependency 130 of 231: rpcsvc-proto:amd64=1.4.3-1 Downloading dependency 131 of 231: libc-bin:amd64=2.41-4 Downloading dependency 132 of 231: bsdextrautils:amd64=2.40.4-5Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 bsdextrautils amd64 2.40.4-5 [92.4 kB] Fetched 92.4 kB in 0s (1317 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp4c1g193e/bsdextrautils_2.40.4-5_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libnghttp3-9 amd64 1.8.0-1 [67.7 kB] Fetched 67.7 kB in 0s (2695 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp68mlai27/libnghttp3-9_1.8.0-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libtinfo6 amd64 6.5+20250216-2 [348 kB] Fetched 348 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpuwm7d27z/libtinfo6_6.5+20250216-2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libmd0 amd64 1.1.0-2+b1 [36.3 kB] Fetched 36.3 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmplq33kcc7/libmd0_1.1.0-2+b1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 cpp-14-x86-64-linux-gnu amd64 14.2.0-17 [11.0 MB] Fetched 11.0 MB in 1s (10.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmphpewitks/cpp-14-x86-64-linux-gnu_14.2.0-17_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 cpp amd64 4:14.2.0-1 [1568 B] Fetched 1568 B in 0s (87.1 kB/s) dpkg-name: info: moved 'cpp_4%3a14.2.0-1_amd64.deb' to '/srv/rebuilderd/tmp/tmpw82kfhol/cpp_14.2.0-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 debianutils amd64 5.21 [92.1 kB] Fetched 92.1 kB in 0s (2598 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpfp1btx0c/debianutils_5.21_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 dh-autoreconf all 20 [17.1 kB] Fetched 17.1 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmphi4idnbd/dh-autoreconf_20_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libbrotli1 amd64 1.1.0-2+b7 [307 kB] Fetched 307 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmptyh2efe9/libbrotli1_1.1.0-2+b7_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libjsoncpp26 amd64 1.9.6-3 [81.7 kB] Fetched 81.7 kB in 0s (3256 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpvv9lls0p/libjsoncpp26_1.9.6-3_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 gcc-14-base amd64 14.2.0-17 [49.1 kB] Fetched 49.1 kB in 0s (2308 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpytnzyg_l/gcc-14-base_14.2.0-17_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libctf-nobfd0 amd64 2.44-3 [156 kB] Fetched 156 kB in 0s (1821 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmphdngirtf/libctf-nobfd0_2.44-3_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 python3-dev amd64 3.13.2-2 [26.1 kB] Fetched 26.1 kB in 0s (991 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpl82pdx27/python3-dev_3.13.2-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 librtmp1 amd64 2.4+20151223.gitfa8646d.1-2+b5 [58.8 kB] Fetched 58.8 kB in 0s (1406 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjm3um7g2/librtmp1_2.4+20151223.gitfa8646d.1-2+b5_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 g++-14-x86-64-linux-gnu amd64 14.2.0-17 [12.1 MB] Fetched 12.1 MB in 0s (36.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp5gzkx57d/g++-14-x86-64-linux-gnu_14.2.0-17_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libctf0 amd64 2.44-3 [88.6 kB] Fetched 88.6 kB in 0s (2715 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpdtipqxpn/libctf0_2.44-3_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libsystemd0 amd64 257.4-1 [451 kB] Fetched 451 kB in 0s (7763 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpc7rkf668/libsystemd0_257.4-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 man-db amd64 2.13.0-1 [1420 kB] Fetched 1420 kB in 0s (16.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmplx8qdsb5/man-db_2.13.0-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 python3-pkg-resources all 75.8.0-1 [222 kB] Fetched 222 kB in 0s (7291 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp1dfn6_69/python3-pkg-resources_75.8.0-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 dpkg-dev all 1.22.18 [1338 kB] Fetched 1338 kB in 0s (20.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpntdkbsvz/dpkg-dev_1.22.18_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 g++-14 amd64 14.2.0-17 [22.1 kB] Fetched 22.1 kB in 0s (2083 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp7rrextkh/g++-14_14.2.0-17_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libc6 amd64 2.41-4 [2843 kB] Fetched 2843 kB in 0s (22.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3k1ow_gs/libc6_2.41-4_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libre2-dev amd64 20240702-3+b1 [228 kB] Fetched 228 kB in 0s (4654 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpwo7o1yuh/libre2-dev_20240702-3+b1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 sysvinit-utils amd64 3.14-3 [34.0 kB] Fetched 34.0 kB in 0s (3105 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp4bweotao/sysvinit-utils_3.14-3_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libaudit-common all 1:4.0.2-2 [12.7 kB] Fetched 12.7 kB in 0s (204 kB/s) dpkg-name: info: moved 'libaudit-common_1%3a4.0.2-2_all.deb' to '/srv/rebuilderd/tmp/tmpwkecmiy8/libaudit-common_4.0.2-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 zlib1g-dev amd64 1:1.3.dfsg+really1.3.1-1+b1 [920 kB] Fetched 920 kB in 0s (77.2 MB/s) dpkg-name: info: moved 'zlib1g-dev_1%3a1.3.dfsg+really1.3.1-1+b1_amd64.deb' to '/srv/rebuilderd/tmp/tmp8x_2fr87/zlib1g-dev_1.3.dfsg+really1.3.1-1+b1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libgmp10 amd64 2:6.3.0+dfsg-3 [560 kB] Fetched 560 kB in 0s (6396 kB/s) dpkg-name: info: moved 'libgmp10_2%3a6.3.0+dfsg-3_amd64.deb' to '/srv/rebuilderd/tmp/tmpvy87qyct/libgmp10_6.3.0+dfsg-3_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libkeyutils1 amd64 1.6.3-4 [9092 B] Fetched 9092 B in 0s (159 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp1e0dw7c6/libkeyutils1_1.6.3-4_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libuuid1 amd64 2.40.4-5 [36.5 kB] Fetched 36.5 kB in 0s (1699 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjfvr0xjd/libuuid1_2.40.4-5_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 autoconf all 2.72-3 [493 kB] Fetched 493 kB in 0s (11.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpg2it0w5v/autoconf_2.72-3_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libgomp1 amd64 14.2.0-17 [137 kB] Fetched 137 kB in 0s (3793 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmps2k2oxr8/libgomp1_14.2.0-17_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 liblsan0 amd64 14.2.0-17 [1205 kB] Fetched 1205 kB in 0s (7344 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpw3gm234u/liblsan0_14.2.0-17_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 cpp-x86-64-linux-gnu amd64 4:14.2.0-1 [4840 B] Fetched 4840 B in 0s (210 kB/s) dpkg-name: info: moved 'cpp-x86-64-linux-gnu_4%3a14.2.0-1_amd64.deb' to '/srv/rebuilderd/tmp/tmpbvn6odz8/cpp-x86-64-linux-gnu_14.2.0-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 procps amd64 2:4.0.4-7 [878 kB] Fetched 878 kB in 0s (8848 kB/s) dpkg-name: info: moved 'procps_2%3a4.0.4-7_amd64.deb' to '/srv/rebuilderd/tmp/tmphbekwwkk/procps_4.0.4-7_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 base-files amd64 13.7 [73.0 kB] Fetched 73.0 kB in 0s (2963 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpe14th8cg/base-files_13.7_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 perl amd64 5.40.1-2 [267 kB] Fetched 267 kB in 0s (2811 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpea6xac10/perl_5.40.1-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libperl5.40 amd64 5.40.1-2 [4315 kB] Fetched 4315 kB in 0s (14.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp9kp9z129/libperl5.40_5.40.1-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 liblzma5 amd64 5.6.4-1 [280 kB] Fetched 280 kB in 0s (9478 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjyo72gnc/liblzma5_5.6.4-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 nlohmann-json3-dev all 3.11.3-2 [262 kB] Fetched 262 kB in 0s (10.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp2gb8cmc3/nlohmann-json3-dev_3.11.3-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 init-system-helpers all 1.68 [38.7 kB] Fetched 38.7 kB in 0s (1543 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmplzw4xpm6/init-system-helpers_1.68_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libgcc-14-dev amd64 14.2.0-17 [2673 kB] Fetched 2673 kB in 0s (34.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp261vkgyb/libgcc-14-dev_14.2.0-17_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 python3-inflect all 7.3.1-2 [32.4 kB] Fetched 32.4 kB in 0s (1649 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpw52imp4m/python3-inflect_7.3.1-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 python3.13 amd64 3.13.2-1 [745 kB] Fetched 745 kB in 0s (14.9 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp8mi_ov2y/python3.13_3.13.2-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libpam-modules amd64 1.7.0-3 [177 kB] Fetched 177 kB in 0s (6931 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpwx4b9l0v/libpam-modules_1.7.0-3_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libmagic-mgc amd64 1:5.45-3+b1 [314 kB] Fetched 314 kB in 0s (6072 kB/s) dpkg-name: info: moved 'libmagic-mgc_1%3a5.45-3+b1_amd64.deb' to '/srv/rebuilderd/tmp/tmpoz3r9dgc/libmagic-mgc_5.45-3+b1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 dwz amd64 0.15-1+b1 [110 kB] Fetched 110 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpob66q98g/dwz_0.15-1+b1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 zlib1g amd64 1:1.3.dfsg+really1.3.1-1+b1 [88.9 kB] Fetched 88.9 kB in 0s (0 B/s) dpkg-name: info: moved 'zlib1g_1%3a1.3.dfsg+really1.3.1-1+b1_amd64.deb' to '/srv/rebuilderd/tmp/tmpivvqclvn/zlib1g_1.3.dfsg+really1.3.1-1+b1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libcrypt-dev amd64 1:4.4.38-1 [119 kB] Fetched 119 kB in 0s (0 B/s) dpkg-name: info: moved 'libcrypt-dev_1%3a4.4.38-1_amd64.deb' to '/srv/rebuilderd/tmp/tmp8c2thlu0/libcrypt-dev_4.4.38-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libexpat1-dev amd64 2.6.4-1 [158 kB] Fetched 158 kB in 0s (4922 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpuqhzg4s1/libexpat1-dev_2.6.4-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 tzdata all 2025a-2 [259 kB] Fetched 259 kB in 0s (929 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp79pm0dq6/tzdata_2025a-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libssl3t64 amd64 3.4.1-1 [2304 kB] Fetched 2304 kB in 1s (3910 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpprxsklbv/libssl3t64_3.4.1-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 gcc-x86-64-linux-gnu amd64 4:14.2.0-1 [1436 B] Fetched 1436 B in 0s (63.2 kB/s) dpkg-name: info: moved 'gcc-x86-64-linux-gnu_4%3a14.2.0-1_amd64.deb' to '/srv/rebuilderd/tmp/tmpavbzbtx8/gcc-x86-64-linux-gnu_14.2.0-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libstdc++-14-dev amd64 14.2.0-17 [2373 kB] Fetched 2373 kB in 0s (15.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp7n9zf379/libstdc++-14-dev_14.2.0-17_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 gettext-base amd64 0.23.1-1 [243 kB] Fetched 243 kB in 0s (1069 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmponh37hld/gettext-base_0.23.1-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libldap2 amd64 2.6.9+dfsg-1 [192 kB] Fetched 192 kB in 0s (4006 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpmhtf6ltk/libldap2_2.6.9+dfsg-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libjs-sphinxdoc all 8.1.3-5 [30.5 kB] Fetched 30.5 kB in 0s (112 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpi5and2hg/libjs-sphinxdoc_8.1.3-5_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 media-types all 13.0.0 [29.3 kB] Fetched 29.3 kB in 0s (516 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpklvdd_dw/media-types_13.0.0_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 ncurses-bin amd64 6.5+20250216-2 [438 kB] Fetched 438 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpa3oy_sp4/ncurses-bin_6.5+20250216-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libbinutils amd64 2.44-3 [534 kB] Fetched 534 kB in 0s (11.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp32se5pos/libbinutils_2.44-3_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 bsdutils amd64 1:2.40.4-5 [106 kB] Fetched 106 kB in 0s (3022 kB/s) dpkg-name: info: moved 'bsdutils_1%3a2.40.4-5_amd64.deb' to '/srv/rebuilderd/tmp/tmp435kzsir/bsdutils_2.40.4-5_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libfmt10 amd64 10.1.1+ds1-4 [127 kB] Fetched 127 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmppskiyu81/libfmt10_10.1.1+ds1-4_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libkrb5-3 amd64 1.21.3-4 [326 kB] Fetched 326 kB in 0s (4692 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp48gtvdbi/libkrb5-3_1.21.3-4_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 python3 amd64 3.13.2-2 [28.1 kB] Fetched 28.1 kB in 0s (1074 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpm3dh7evb/python3_3.13.2-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libasan8 amd64 14.2.0-17 [2730 kB] Fetched 2730 kB in 0s (21.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpv23_pqo3/libasan8_14.2.0-17_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 ncurses-base all 6.5+20250216-2 [273 kB] Fetched 273 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpo5j8xuub/ncurses-base_6.5+20250216-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libffi8 amd64 3.4.7-1 [23.9 kB] Fetched 23.9 kB in 0s (1158 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjbwxk8on/libffi8_3.4.7-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libdpkg-perl all 1.22.18 [649 kB] Fetched 649 kB in 0s (16.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpmyga_d7k/libdpkg-perl_1.22.18_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libxxhash0 amd64 0.8.3-2 [27.1 kB] Fetched 27.1 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpbrjmxbsv/libxxhash0_0.8.3-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libnghttp2-14 amd64 1.64.0-1 [75.5 kB] Fetched 75.5 kB in 0s (2182 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpt6binbuq/libnghttp2-14_1.64.0-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 librhash1 amd64 1.4.5-1 [132 kB] Fetched 132 kB in 0s (3370 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpj9v78ujg/librhash1_1.4.5-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 dh-strip-nondeterminism all 1.14.1-2 [8620 B] Fetched 8620 B in 0s (313 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp45d9k595/dh-strip-nondeterminism_1.14.1-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 dpkg amd64 1.22.18 [1545 kB] Fetched 1545 kB in 0s (19.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp198rxrvx/dpkg_1.22.18_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 openssl-provider-legacy amd64 3.4.1-1 [302 kB] Fetched 302 kB in 0s (5197 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp7uaef0pu/openssl-provider-legacy_3.4.1-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libtsan2 amd64 14.2.0-17 [2460 kB] Fetched 2460 kB in 0s (19.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmphbme68xq/libtsan2_14.2.0-17_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libmpc3 amd64 1.3.1-1+b3 [52.2 kB] Fetched 52.2 kB in 0s (1983 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpd3htp_h9/libmpc3_1.3.1-1+b3_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 m4 amd64 1.4.19-7 [294 kB] Fetched 294 kB in 0s (7819 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpt4blgq_i/m4_1.4.19-7_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libmagic1t64 amd64 1:5.45-3+b1 [108 kB] Fetched 108 kB in 0s (4758 kB/s) dpkg-name: info: moved 'libmagic1t64_1%3a5.45-3+b1_amd64.deb' to '/srv/rebuilderd/tmp/tmp5dcfuoop/libmagic1t64_5.45-3+b1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libselinux1 amd64 3.8-4 [84.8 kB] Fetched 84.8 kB in 0s (2487 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp2sfx3tvx/libselinux1_3.8-4_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 python3-debian all 1.0.0 [120 kB] Fetched 120 kB in 0s (2738 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpk5wvllg2/python3-debian_1.0.0_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libuv1t64 amd64 1.50.0-2 [154 kB] Fetched 154 kB in 0s (5096 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6fdjx6ee/libuv1t64_1.50.0-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 googletest all 1.16.0-1 [517 kB] Fetched 517 kB in 0s (4325 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpcpdd83j9/googletest_1.16.0-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 grep amd64 3.11-4 [431 kB] Fetched 431 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp74767skg/grep_3.11-4_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-jaraco.functools all 4.1.0-1 [12.0 kB] Fetched 12.0 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp66foeigh/python3-jaraco.functools_4.1.0-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 perl-base amd64 5.40.1-2 [1665 kB] Fetched 1665 kB in 0s (24.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpn64hy4ko/perl-base_5.40.1-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 diffutils amd64 1:3.10-2 [384 kB] Fetched 384 kB in 0s (2074 kB/s) dpkg-name: info: moved 'diffutils_1%3a3.10-2_amd64.deb' to '/srv/rebuilderd/tmp/tmpeu01l_vk/diffutils_3.10-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libidn2-0 amd64 2.3.8-1 [109 kB] Fetched 109 kB in 0s (4421 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpakbxn9w6/libidn2-0_2.3.8-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libisl23 amd64 0.27-1 [659 kB] Fetched 659 kB in 0s (58.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpg2pwl3yv/libisl23_0.27-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libjs-jquery all 3.6.1+dfsg+~3.5.14-1 [326 kB] Fetched 326 kB in 0s (10.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmptv7iomni/libjs-jquery_3.6.1+dfsg+~3.5.14-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libcurl4t64 amd64 8.12.1-3 [369 kB] Fetched 369 kB in 0s (10.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpth_9cfz_/libcurl4t64_8.12.1-3_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libtasn1-6 amd64 4.20.0-2 [49.9 kB] Fetched 49.9 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpex0b5i5r/libtasn1-6_4.20.0-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libudev1 amd64 257.4-1 [149 kB] Fetched 149 kB in 0s (2483 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpz5anfb45/libudev1_257.4-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libuchardet0 amd64 0.0.8-1+b2 [68.9 kB] Fetched 68.9 kB in 0s (1146 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpr1mmkjla/libuchardet0_0.0.8-1+b2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 file amd64 1:5.45-3+b1 [43.3 kB] Fetched 43.3 kB in 0s (1712 kB/s) dpkg-name: info: moved 'file_1%3a5.45-3+b1_amd64.deb' to '/srv/rebuilderd/tmp/tmphu95v2v3/file_5.45-3+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libfmt-dev amd64 10.1.1+ds1-4 [177 kB] Fetched 177 kB in 0s (4500 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjzfnd_4d/libfmt-dev_10.1.1+ds1-4_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libncursesw6 amd64 6.5+20250216-2 [135 kB] Fetched 135 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpi5wfefqn/libncursesw6_6.5+20250216-2_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libarchive13t64 amd64 3.7.4-1.1 [349 kB] Fetched 349 kB in 0s (4681 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmprxuopygo/libarchive13t64_3.7.4-1.1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libnettle8t64 amd64 3.10.1-1 [305 kB] Fetched 305 kB in 0s (8698 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpw0tblgj2/libnettle8t64_3.10.1-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-jaraco.text all 4.0.0-1 [11.4 kB] Fetched 11.4 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjhixwwb1/python3-jaraco.text_4.0.0-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libssh2-1t64 amd64 1.11.1-1 [245 kB] Fetched 245 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3_s9l03e/libssh2-1t64_1.11.1-1_amd64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main amd64 libpam-modules-bin amd64 1.7.0-3 [48.9 kB] Fetched 48.9 kB in 0s (1982 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpucjwsj60/libpam-modules-bin_1.7.0-3_amd64.deb' dpkg-buildpackage: info: source package debootsnap-dummy dpkg-buildpackage: info: source version 1.0 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Equivs Dummy Package Generator dpkg-source --before-build . dpkg-buildpackage: info: host architecture amd64 debian/rules clean dh clean dh_clean debian/rules binary dh binary dh_update_autotools_config dh_autoreconf create-stamp debian/debhelper-build-stamp dh_prep dh_auto_install --destdir=debian/debootsnap-dummy/ dh_install dh_installdocs dh_installchangelogs dh_perl dh_link dh_strip_nondeterminism dh_compress dh_fixperms dh_missing dh_installdeb dh_gencontrol dh_md5sums dh_builddeb dpkg-deb: building package 'debootsnap-dummy' in '../debootsnap-dummy_1.0_all.deb'. dpkg-genbuildinfo --build=binary -O../debootsnap-dummy_1.0_amd64.buildinfo dpkg-genchanges --build=binary -O../debootsnap-dummy_1.0_amd64.changes dpkg-genchanges: info: binary-only upload (no source code included) dpkg-source --after-build . dpkg-buildpackage: info: binary-only upload (no source included) The package has been created. Attention, the package has been created in the /srv/rebuilderd/tmp/tmpwhlh3d8s/cache directory, not in ".." as indicated by the message above! I: automatically chosen mode: unshare I: chroot architecture amd64 is equal to the host's architecture I: using /srv/rebuilderd/tmp/mmdebstrap.HQ_90JFalQ as tempdir I: running --setup-hook directly: /usr/share/mmdebstrap/hooks/maybe-merged-usr/setup00.sh /srv/rebuilderd/tmp/mmdebstrap.HQ_90JFalQ 127.0.0.1 - - [15/Jan/2026 02:00:07] code 404, message File not found 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./InRelease HTTP/1.1" 404 - Ign:1 http://localhost:41763 ./ InRelease 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./Release HTTP/1.1" 200 - Get:2 http://localhost:41763 ./ Release [462 B] 127.0.0.1 - - [15/Jan/2026 02:00:07] code 404, message File not found 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./Release.gpg HTTP/1.1" 404 - Ign:3 http://localhost:41763 ./ Release.gpg 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./Packages HTTP/1.1" 200 - Get:4 http://localhost:41763 ./ Packages [284 kB] Fetched 284 kB in 0s (15.1 MB/s) Reading package lists... usr-is-merged found but not real -- not running merged-usr setup hook I: skipping apt-get update because it was already run I: downloading packages with apt... 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./gcc-14-base_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libc6_2.41-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libgcc-s1_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./mawk_1.3.4.20250131-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./base-files_13.7_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libtinfo6_6.5%2b20250216-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./debianutils_5.21_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./bash_5.2.37-1.1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libcap2_2.75-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libsystemd0_257.4-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./bsdutils_2.40.4-5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libacl1_2.3.2-2%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libattr1_2.5.2-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libgmp10_6.3.0%2bdfsg-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libpcre2-8-0_10.45-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libselinux1_3.8-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libzstd1_1.5.6%2bdfsg-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./zlib1g_1.3.dfsg%2breally1.3.1-1%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libssl3t64_3.4.1-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./openssl-provider-legacy_3.4.1-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./coreutils_9.5-1%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./dash_0.5.12-12_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./diffutils_3.10-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libbz2-1.0_1.0.8-6_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./liblzma5_5.6.4-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libmd0_1.1.0-2%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./tar_1.35%2bdfsg-3.1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./dpkg_1.22.18_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./findutils_4.10.0-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./grep_3.11-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./gzip_1.13-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./hostname_3.25_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./ncurses-bin_6.5%2b20250216-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libcrypt1_4.4.38-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./perl-base_5.40.1-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./sed_4.9-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libaudit-common_4.0.2-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libcap-ng0_0.8.5-4%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libaudit1_4.0.2-2%2bb2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libdb5.3t64_5.3.28%2bdfsg2-9_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./debconf_1.5.90_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libpam0g_1.7.0-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libpam-modules-bin_1.7.0-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libpam-modules_1.7.0-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libpam-runtime_1.7.0-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libblkid1_2.40.4-5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libmount1_2.40.4-5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libsmartcols1_2.40.4-5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libudev1_257.4-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libuuid1_2.40.4-5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./util-linux_2.40.4-5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libdebconfclient0_0.277_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./base-passwd_3.6.6_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./init-system-helpers_1.68_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./libc-bin_2.41-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./ncurses-base_6.5%2b20250216-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:07] "GET /./sysvinit-utils_3.14-3_amd64.deb HTTP/1.1" 200 - I: extracting archives... I: running --extract-hook directly: /usr/share/mmdebstrap/hooks/maybe-merged-usr/extract00.sh /srv/rebuilderd/tmp/mmdebstrap.HQ_90JFalQ 127.0.0.1 - - [15/Jan/2026 02:00:09] code 404, message File not found 127.0.0.1 - - [15/Jan/2026 02:00:09] "GET /./InRelease HTTP/1.1" 404 - Ign:1 http://localhost:41763 ./ InRelease 127.0.0.1 - - [15/Jan/2026 02:00:09] "GET /./Release HTTP/1.1" 304 - Hit:2 http://localhost:41763 ./ Release 127.0.0.1 - - [15/Jan/2026 02:00:09] code 404, message File not found 127.0.0.1 - - [15/Jan/2026 02:00:09] "GET /./Release.gpg HTTP/1.1" 404 - Ign:3 http://localhost:41763 ./ Release.gpg Reading package lists... usr-is-merged found but not real -- not running merged-usr extract hook I: installing essential packages... I: running --essential-hook directly: /usr/share/mmdebstrap/hooks/maybe-merged-usr/essential00.sh /srv/rebuilderd/tmp/mmdebstrap.HQ_90JFalQ usr-is-merged was not installed in a previous hook -- not running merged-usr essential hook I: installing remaining packages inside the chroot... 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libpython3.13-minimal_3.13.2-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libexpat1_2.6.4-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./python3.13-minimal_3.13.2-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./python3-minimal_3.13.2-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./media-types_13.0.0_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./netbase_6.4_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./tzdata_2025a-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libffi8_3.4.7-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libncursesw6_6.5%2b20250216-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./readline-common_8.2-6_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libreadline8t64_8.2-6_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libsqlite3-0_3.46.1-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libpython3.13-stdlib_3.13.2-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./python3.13_3.13.2-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libpython3-stdlib_3.13.2-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./python3_3.13.2-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./sensible-utils_0.0.24_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libstdc%2b%2b6_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libuchardet0_0.0.8-1%2bb2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./groff-base_1.23.0-7_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./bsdextrautils_2.40.4-5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libgdbm6t64_1.24-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libpipeline1_1.5.8-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libseccomp2_2.5.5-2%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./man-db_2.13.0-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libproc2-0_4.0.4-7_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./procps_4.0.4-7_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./bzip2_1.0.8-6_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libmagic-mgc_5.45-3%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libmagic1t64_5.45-3%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./file_5.45-3%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./gettext-base_0.23.1-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./perl-modules-5.40_5.40.1-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libgdbm-compat4t64_1.24-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libperl5.40_5.40.1-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./perl_5.40.1-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./xz-utils_5.6.4-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./m4_1.4.19-7_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./autoconf_2.72-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./autotools-dev_20220109.1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./automake_1.17-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./autopoint_0.23.1-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libsframe1_2.44-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./binutils-common_2.44-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libbinutils_2.44-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libgprofng0_2.44-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libctf-nobfd0_2.44-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libctf0_2.44-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libjansson4_2.14-2%2bb3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./binutils-x86-64-linux-gnu_2.44-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./binutils_2.44-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libc-dev-bin_2.41-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./linux-libc-dev_6.12.17-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libcrypt-dev_4.4.38-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./rpcsvc-proto_1.4.3-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libc6-dev_2.41-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libisl23_0.27-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libmpfr6_4.2.1-1%2bb2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libmpc3_1.3.1-1%2bb3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./cpp-14-x86-64-linux-gnu_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./cpp-14_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./cpp-x86-64-linux-gnu_14.2.0-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./cpp_14.2.0-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libcc1-0_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libgomp1_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libitm1_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libatomic1_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libasan8_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./liblsan0_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libtsan2_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libubsan1_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libhwasan0_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libquadmath0_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libgcc-14-dev_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./gcc-14-x86-64-linux-gnu_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./gcc-14_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./gcc-x86-64-linux-gnu_14.2.0-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./gcc_14.2.0-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libstdc%2b%2b-14-dev_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./g%2b%2b-14-x86-64-linux-gnu_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./g%2b%2b-14_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./g%2b%2b-x86-64-linux-gnu_14.2.0-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./g%2b%2b_14.2.0-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./make_4.4.1-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libdpkg-perl_1.22.18_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./patch_2.7.6-7_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./dpkg-dev_1.22.18_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./build-essential_12.12_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./cmake-data_3.31.6-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libxxhash0_0.8.3-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./liblz4-1_1.10.0-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libnettle8t64_3.10.1-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libicu72_72.1-6_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libxml2_2.12.7%2bdfsg%2breally2.9.14-0.2%2bb2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libarchive13t64_3.7.4-1.1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libbrotli1_1.1.0-2%2bb7_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libkrb5support0_1.21.3-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libcom-err2_1.47.2-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libk5crypto3_1.21.3-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libkeyutils1_1.6.3-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libkrb5-3_1.21.3-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libgssapi-krb5-2_1.21.3-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libunistring5_1.3-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libidn2-0_2.3.8-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libsasl2-modules-db_2.1.28%2bdfsg1-9_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libsasl2-2_2.1.28%2bdfsg1-9_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libldap2_2.6.9%2bdfsg-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libnghttp2-14_1.64.0-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libnghttp3-9_1.8.0-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libpsl5t64_0.21.2-1.1%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:43] "GET /./libhogweed6t64_3.10.1-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libp11-kit0_0.25.5-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libtasn1-6_4.20.0-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libgnutls30t64_3.8.9-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./librtmp1_2.4%2b20151223.gitfa8646d.1-2%2bb5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libssh2-1t64_1.11.1-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libcurl4t64_8.12.1-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libjsoncpp26_1.9.6-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./librhash1_1.4.5-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libuv1t64_1.50.0-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./cmake_3.31.6-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libdebhelper-perl_13.24.1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libtool_2.5.4-4_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./dh-autoreconf_20_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libarchive-zip-perl_1.68-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libfile-stripnondeterminism-perl_1.14.1-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./dh-strip-nondeterminism_1.14.1-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libelf1t64_0.192-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./dwz_0.15-1%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./gettext_0.23.1-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./intltool-debian_0.35.0%2b20060710.6_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./po-debconf_1.0.21%2bnmu1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./debhelper_13.24.1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./python3-more-itertools_10.6.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./python3-zipp_3.21.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./python3-autocommand_2.2.2-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./python3-typing-extensions_4.12.2-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./python3-typeguard_4.4.2-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./python3-inflect_7.3.1-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./python3-jaraco.context_6.0.1-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./python3-jaraco.functools_4.1.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./python3-pkg-resources_75.8.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./python3-jaraco.text_4.0.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./python3-setuptools_75.8.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libabsl20240722_20240722.0-1.5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libre2-11_20240702-3%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./googletest_1.16.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libgtest-dev_1.16.0-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libpython3.13_3.13.2-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libexpat1-dev_2.6.4-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./zlib1g-dev_1.3.dfsg%2breally1.3.1-1%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libpython3.13-dev_3.13.2-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libpython3-dev_3.13.2-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./pybind11-dev_2.13.6-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libpkgconf3_1.8.1-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libjs-underscore_1.13.4%7edfsg%2b%7e1.11.4-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./dh-python_6.20250308_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./pkgconf-bin_1.8.1-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./pkgconf_1.8.1-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./python3-charset-normalizer_3.4.1-1%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./python3-debian_1.0.0_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libyaml-0-2_0.2.5-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./python3-yaml_6.0.2-1%2bb2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./pkg-kde-tools_0.18.12_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libabsl-dev_20240722.0-1.5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./python3.13-dev_3.13.2-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libre2-dev_20240702-3%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libfmt10_10.1.1%2bds1-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libfmt-dev_10.1.1%2bds1-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libpog-dev_0.5.3-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libjs-jquery_3.6.1%2bdfsg%2b%7e3.5.14-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./libjs-sphinxdoc_8.1.3-5_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./python3-dev_3.13.2-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./nlohmann-json3-dev_3.11.3-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [15/Jan/2026 02:00:44] "GET /./debootsnap-dummy_1.0_all.deb HTTP/1.1" 200 - I: running --customize-hook directly: /srv/rebuilderd/tmp/tmpwhlh3d8s/apt_install.sh /srv/rebuilderd/tmp/mmdebstrap.HQ_90JFalQ Reading package lists... Building dependency tree... Reading state information... libdebconfclient0 is already the newest version (0.277). bzip2 is already the newest version (1.0.8-6). bzip2 set to manually installed. libcap-ng0 is already the newest version (0.8.5-4+b1). libelf1t64 is already the newest version (0.192-4). libelf1t64 set to manually installed. python3-more-itertools is already the newest version (10.6.0-1). python3-more-itertools set to manually installed. linux-libc-dev is already the newest version (6.12.17-1). linux-libc-dev set to manually installed. python3-zipp is already the newest version (3.21.0-1). python3-zipp set to manually installed. dash is already the newest version (0.5.12-12). debconf is already the newest version (1.5.90). perl-modules-5.40 is already the newest version (5.40.1-2). perl-modules-5.40 set to manually installed. libpcre2-8-0 is already the newest version (10.45-1). libc6-dev is already the newest version (2.41-4). libc6-dev set to manually installed. python3-setuptools is already the newest version (75.8.0-1). python3-setuptools set to manually installed. libc-dev-bin is already the newest version (2.41-4). libc-dev-bin set to manually installed. libmpfr6 is already the newest version (4.2.1-1+b2). libmpfr6 set to manually installed. libre2-11 is already the newest version (20240702-3+b1). libre2-11 set to manually installed. gcc is already the newest version (4:14.2.0-1). gcc set to manually installed. libitm1 is already the newest version (14.2.0-17). libitm1 set to manually installed. libfile-stripnondeterminism-perl is already the newest version (1.14.1-2). libfile-stripnondeterminism-perl set to manually installed. python3-autocommand is already the newest version (2.2.2-3). python3-autocommand set to manually installed. libgdbm6t64 is already the newest version (1.24-2). libgdbm6t64 set to manually installed. libabsl20240722 is already the newest version (20240722.0-1.5). libabsl20240722 set to manually installed. python3-typeguard is already the newest version (4.4.2-1). python3-typeguard set to manually installed. libtool is already the newest version (2.5.4-4). libtool set to manually installed. libgtest-dev is already the newest version (1.16.0-1). libgtest-dev set to manually installed. pybind11-dev is already the newest version (2.13.6-2). pybind11-dev set to manually installed. libproc2-0 is already the newest version (2:4.0.4-7). libproc2-0 set to manually installed. libreadline8t64 is already the newest version (8.2-6). libreadline8t64 set to manually installed. libkrb5support0 is already the newest version (1.21.3-4). libkrb5support0 set to manually installed. binutils-x86-64-linux-gnu is already the newest version (2.44-3). binutils-x86-64-linux-gnu set to manually installed. autopoint is already the newest version (0.23.1-1). autopoint set to manually installed. cmake-data is already the newest version (3.31.6-1). cmake-data set to manually installed. debhelper is already the newest version (13.24.1). debhelper set to manually installed. libk5crypto3 is already the newest version (1.21.3-4). libk5crypto3 set to manually installed. libsasl2-modules-db is already the newest version (2.1.28+dfsg1-9). libsasl2-modules-db set to manually installed. libacl1 is already the newest version (2.3.2-2+b1). libunistring5 is already the newest version (1.3-1). libunistring5 set to manually installed. libhwasan0 is already the newest version (14.2.0-17). libhwasan0 set to manually installed. tar is already the newest version (1.35+dfsg-3.1). libdebhelper-perl is already the newest version (13.24.1). libdebhelper-perl set to manually installed. libjansson4 is already the newest version (2.14-2+b3). libjansson4 set to manually installed. libpam-runtime is already the newest version (1.7.0-3). libpython3-stdlib is already the newest version (3.13.2-2). libpython3-stdlib set to manually installed. patch is already the newest version (2.7.6-7). patch set to manually installed. libsmartcols1 is already the newest version (2.40.4-5). hostname is already the newest version (3.25). g++-x86-64-linux-gnu is already the newest version (4:14.2.0-1). g++-x86-64-linux-gnu set to manually installed. groff-base is already the newest version (1.23.0-7). groff-base set to manually installed. libmount1 is already the newest version (2.40.4-5). libdb5.3t64 is already the newest version (5.3.28+dfsg2-9). bash is already the newest version (5.2.37-1.1). build-essential is already the newest version (12.12). build-essential set to manually installed. libpkgconf3 is already the newest version (1.8.1-4). libpkgconf3 set to manually installed. gettext is already the newest version (0.23.1-1). gettext set to manually installed. libquadmath0 is already the newest version (14.2.0-17). libquadmath0 set to manually installed. libattr1 is already the newest version (1:2.5.2-3). autotools-dev is already the newest version (20220109.1). autotools-dev set to manually installed. g++ is already the newest version (4:14.2.0-1). g++ set to manually installed. libjs-underscore is already the newest version (1.13.4~dfsg+~1.11.4-3). libjs-underscore set to manually installed. gzip is already the newest version (1.13-1). dh-python is already the newest version (6.20250308). dh-python set to manually installed. pkgconf is already the newest version (1.8.1-4). pkgconf set to manually installed. libgnutls30t64 is already the newest version (3.8.9-2). libgnutls30t64 set to manually installed. libpython3.13-minimal is already the newest version (3.13.2-1). libpython3.13-minimal set to manually installed. libarchive-zip-perl is already the newest version (1.68-1). libarchive-zip-perl set to manually installed. pkg-kde-tools is already the newest version (0.18.12). pkg-kde-tools set to manually installed. libcrypt1 is already the newest version (1:4.4.38-1). sed is already the newest version (4.9-2). sensible-utils is already the newest version (0.0.24). sensible-utils set to manually installed. libabsl-dev is already the newest version (20240722.0-1.5). libabsl-dev set to manually installed. libp11-kit0 is already the newest version (0.25.5-3). libp11-kit0 set to manually installed. libsframe1 is already the newest version (2.44-3). libsframe1 set to manually installed. gcc-14 is already the newest version (14.2.0-17). gcc-14 set to manually installed. libseccomp2 is already the newest version (2.5.5-2+b1). libseccomp2 set to manually installed. libhogweed6t64 is already the newest version (3.10.1-1). libhogweed6t64 set to manually installed. cpp-14 is already the newest version (14.2.0-17). cpp-14 set to manually installed. libxml2 is already the newest version (2.12.7+dfsg+really2.9.14-0.2+b2). libxml2 set to manually installed. libexpat1 is already the newest version (2.6.4-1). libexpat1 set to manually installed. mawk is already the newest version (1.3.4.20250131-1). libpython3-dev is already the newest version (3.13.2-2). libpython3-dev set to manually installed. python3-minimal is already the newest version (3.13.2-2). python3-minimal set to manually installed. python3.13-dev is already the newest version (3.13.2-1). python3.13-dev set to manually installed. libubsan1 is already the newest version (14.2.0-17). libubsan1 set to manually installed. libgprofng0 is already the newest version (2.44-3). libgprofng0 set to manually installed. liblz4-1 is already the newest version (1.10.0-4). liblz4-1 set to manually installed. automake is already the newest version (1:1.17-3). automake set to manually installed. libsqlite3-0 is already the newest version (3.46.1-2). libsqlite3-0 set to manually installed. python3.13-minimal is already the newest version (3.13.2-1). python3.13-minimal set to manually installed. po-debconf is already the newest version (1.0.21+nmu1). po-debconf set to manually installed. libpython3.13-stdlib is already the newest version (3.13.2-1). libpython3.13-stdlib set to manually installed. python3-charset-normalizer is already the newest version (3.4.1-1+b1). python3-charset-normalizer set to manually installed. libyaml-0-2 is already the newest version (0.2.5-2). libyaml-0-2 set to manually installed. libatomic1 is already the newest version (14.2.0-17). libatomic1 set to manually installed. libblkid1 is already the newest version (2.40.4-5). libcc1-0 is already the newest version (14.2.0-17). libcc1-0 set to manually installed. libcom-err2 is already the newest version (1.47.2-1). libcom-err2 set to manually installed. libsasl2-2 is already the newest version (2.1.28+dfsg1-9). libsasl2-2 set to manually installed. libcap2 is already the newest version (1:2.75-1). libstdc++6 is already the newest version (14.2.0-17). libstdc++6 set to manually installed. python3-jaraco.context is already the newest version (6.0.1-1). python3-jaraco.context set to manually installed. libpsl5t64 is already the newest version (0.21.2-1.1+b1). libpsl5t64 set to manually installed. gcc-14-x86-64-linux-gnu is already the newest version (14.2.0-17). gcc-14-x86-64-linux-gnu set to manually installed. base-passwd is already the newest version (3.6.6). libgcc-s1 is already the newest version (14.2.0-17). libgdbm-compat4t64 is already the newest version (1.24-2). libgdbm-compat4t64 set to manually installed. libicu72 is already the newest version (72.1-6). libicu72 set to manually installed. libpipeline1 is already the newest version (1.5.8-1). libpipeline1 set to manually installed. readline-common is already the newest version (8.2-6). readline-common set to manually installed. netbase is already the newest version (6.4). netbase set to manually installed. libaudit1 is already the newest version (1:4.0.2-2+b2). pkgconf-bin is already the newest version (1.8.1-4). pkgconf-bin set to manually installed. make is already the newest version (4.4.1-1). make set to manually installed. libpog-dev is already the newest version (0.5.3-3). libpog-dev set to manually installed. binutils is already the newest version (2.44-3). binutils set to manually installed. libbz2-1.0 is already the newest version (1.0.8-6). python3-yaml is already the newest version (6.0.2-1+b2). python3-yaml set to manually installed. findutils is already the newest version (4.10.0-3). coreutils is already the newest version (9.5-1+b1). libpython3.13 is already the newest version (3.13.2-1). libpython3.13 set to manually installed. libpam0g is already the newest version (1.7.0-3). util-linux is already the newest version (2.40.4-5). cmake is already the newest version (3.31.6-1). cmake set to manually installed. libzstd1 is already the newest version (1.5.6+dfsg-2). binutils-common is already the newest version (2.44-3). binutils-common set to manually installed. libgssapi-krb5-2 is already the newest version (1.21.3-4). libgssapi-krb5-2 set to manually installed. intltool-debian is already the newest version (0.35.0+20060710.6). intltool-debian set to manually installed. libpython3.13-dev is already the newest version (3.13.2-1). libpython3.13-dev set to manually installed. python3-typing-extensions is already the newest version (4.12.2-2). python3-typing-extensions set to manually installed. xz-utils is already the newest version (5.6.4-1). xz-utils set to manually installed. rpcsvc-proto is already the newest version (1.4.3-1). rpcsvc-proto set to manually installed. libc-bin is already the newest version (2.41-4). bsdextrautils is already the newest version (2.40.4-5). bsdextrautils set to manually installed. libnghttp3-9 is already the newest version (1.8.0-1). libnghttp3-9 set to manually installed. libtinfo6 is already the newest version (6.5+20250216-2). libmd0 is already the newest version (1.1.0-2+b1). cpp-14-x86-64-linux-gnu is already the newest version (14.2.0-17). cpp-14-x86-64-linux-gnu set to manually installed. cpp is already the newest version (4:14.2.0-1). cpp set to manually installed. debianutils is already the newest version (5.21). dh-autoreconf is already the newest version (20). dh-autoreconf set to manually installed. libbrotli1 is already the newest version (1.1.0-2+b7). libbrotli1 set to manually installed. libjsoncpp26 is already the newest version (1.9.6-3). libjsoncpp26 set to manually installed. gcc-14-base is already the newest version (14.2.0-17). libctf-nobfd0 is already the newest version (2.44-3). libctf-nobfd0 set to manually installed. python3-dev is already the newest version (3.13.2-2). python3-dev set to manually installed. librtmp1 is already the newest version (2.4+20151223.gitfa8646d.1-2+b5). librtmp1 set to manually installed. g++-14-x86-64-linux-gnu is already the newest version (14.2.0-17). g++-14-x86-64-linux-gnu set to manually installed. libctf0 is already the newest version (2.44-3). libctf0 set to manually installed. libsystemd0 is already the newest version (257.4-1). man-db is already the newest version (2.13.0-1). man-db set to manually installed. python3-pkg-resources is already the newest version (75.8.0-1). python3-pkg-resources set to manually installed. dpkg-dev is already the newest version (1.22.18). dpkg-dev set to manually installed. g++-14 is already the newest version (14.2.0-17). g++-14 set to manually installed. libc6 is already the newest version (2.41-4). libre2-dev is already the newest version (20240702-3+b1). libre2-dev set to manually installed. sysvinit-utils is already the newest version (3.14-3). libaudit-common is already the newest version (1:4.0.2-2). zlib1g-dev is already the newest version (1:1.3.dfsg+really1.3.1-1+b1). zlib1g-dev set to manually installed. libgmp10 is already the newest version (2:6.3.0+dfsg-3). libkeyutils1 is already the newest version (1.6.3-4). libkeyutils1 set to manually installed. libuuid1 is already the newest version (2.40.4-5). autoconf is already the newest version (2.72-3). autoconf set to manually installed. libgomp1 is already the newest version (14.2.0-17). libgomp1 set to manually installed. liblsan0 is already the newest version (14.2.0-17). liblsan0 set to manually installed. cpp-x86-64-linux-gnu is already the newest version (4:14.2.0-1). cpp-x86-64-linux-gnu set to manually installed. procps is already the newest version (2:4.0.4-7). procps set to manually installed. base-files is already the newest version (13.7). perl is already the newest version (5.40.1-2). perl set to manually installed. libperl5.40 is already the newest version (5.40.1-2). libperl5.40 set to manually installed. liblzma5 is already the newest version (5.6.4-1). nlohmann-json3-dev is already the newest version (3.11.3-2). nlohmann-json3-dev set to manually installed. init-system-helpers is already the newest version (1.68). libgcc-14-dev is already the newest version (14.2.0-17). libgcc-14-dev set to manually installed. python3-inflect is already the newest version (7.3.1-2). python3-inflect set to manually installed. python3.13 is already the newest version (3.13.2-1). python3.13 set to manually installed. libpam-modules is already the newest version (1.7.0-3). libmagic-mgc is already the newest version (1:5.45-3+b1). libmagic-mgc set to manually installed. dwz is already the newest version (0.15-1+b1). dwz set to manually installed. zlib1g is already the newest version (1:1.3.dfsg+really1.3.1-1+b1). libcrypt-dev is already the newest version (1:4.4.38-1). libcrypt-dev set to manually installed. libexpat1-dev is already the newest version (2.6.4-1). libexpat1-dev set to manually installed. tzdata is already the newest version (2025a-2). tzdata set to manually installed. libssl3t64 is already the newest version (3.4.1-1). gcc-x86-64-linux-gnu is already the newest version (4:14.2.0-1). gcc-x86-64-linux-gnu set to manually installed. libstdc++-14-dev is already the newest version (14.2.0-17). libstdc++-14-dev set to manually installed. gettext-base is already the newest version (0.23.1-1). gettext-base set to manually installed. libldap2 is already the newest version (2.6.9+dfsg-1). libldap2 set to manually installed. libjs-sphinxdoc is already the newest version (8.1.3-5). libjs-sphinxdoc set to manually installed. media-types is already the newest version (13.0.0). media-types set to manually installed. ncurses-bin is already the newest version (6.5+20250216-2). libbinutils is already the newest version (2.44-3). libbinutils set to manually installed. bsdutils is already the newest version (1:2.40.4-5). libfmt10 is already the newest version (10.1.1+ds1-4). libfmt10 set to manually installed. libkrb5-3 is already the newest version (1.21.3-4). libkrb5-3 set to manually installed. python3 is already the newest version (3.13.2-2). python3 set to manually installed. libasan8 is already the newest version (14.2.0-17). libasan8 set to manually installed. ncurses-base is already the newest version (6.5+20250216-2). libffi8 is already the newest version (3.4.7-1). libffi8 set to manually installed. libdpkg-perl is already the newest version (1.22.18). libdpkg-perl set to manually installed. libxxhash0 is already the newest version (0.8.3-2). libxxhash0 set to manually installed. libnghttp2-14 is already the newest version (1.64.0-1). libnghttp2-14 set to manually installed. librhash1 is already the newest version (1.4.5-1). librhash1 set to manually installed. dh-strip-nondeterminism is already the newest version (1.14.1-2). dh-strip-nondeterminism set to manually installed. dpkg is already the newest version (1.22.18). openssl-provider-legacy is already the newest version (3.4.1-1). libtsan2 is already the newest version (14.2.0-17). libtsan2 set to manually installed. libmpc3 is already the newest version (1.3.1-1+b3). libmpc3 set to manually installed. m4 is already the newest version (1.4.19-7). m4 set to manually installed. libmagic1t64 is already the newest version (1:5.45-3+b1). libmagic1t64 set to manually installed. libselinux1 is already the newest version (3.8-4). python3-debian is already the newest version (1.0.0). python3-debian set to manually installed. libuv1t64 is already the newest version (1.50.0-2). libuv1t64 set to manually installed. googletest is already the newest version (1.16.0-1). googletest set to manually installed. grep is already the newest version (3.11-4). python3-jaraco.functools is already the newest version (4.1.0-1). python3-jaraco.functools set to manually installed. perl-base is already the newest version (5.40.1-2). diffutils is already the newest version (1:3.10-2). libidn2-0 is already the newest version (2.3.8-1). libidn2-0 set to manually installed. libisl23 is already the newest version (0.27-1). libisl23 set to manually installed. libjs-jquery is already the newest version (3.6.1+dfsg+~3.5.14-1). libjs-jquery set to manually installed. libcurl4t64 is already the newest version (8.12.1-3). libcurl4t64 set to manually installed. libtasn1-6 is already the newest version (4.20.0-2). libtasn1-6 set to manually installed. libudev1 is already the newest version (257.4-1). libuchardet0 is already the newest version (0.0.8-1+b2). libuchardet0 set to manually installed. file is already the newest version (1:5.45-3+b1). file set to manually installed. libfmt-dev is already the newest version (10.1.1+ds1-4). libfmt-dev set to manually installed. libncursesw6 is already the newest version (6.5+20250216-2). libncursesw6 set to manually installed. libarchive13t64 is already the newest version (3.7.4-1.1). libarchive13t64 set to manually installed. libnettle8t64 is already the newest version (3.10.1-1). libnettle8t64 set to manually installed. python3-jaraco.text is already the newest version (4.0.0-1). python3-jaraco.text set to manually installed. libssh2-1t64 is already the newest version (1.11.1-1). libssh2-1t64 set to manually installed. libpam-modules-bin is already the newest version (1.7.0-3). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. I: running --customize-hook in shell: sh -c 'chroot "$1" dpkg -r debootsnap-dummy' exec /srv/rebuilderd/tmp/mmdebstrap.HQ_90JFalQ (Reading database ... 22503 files and directories currently installed.) Removing debootsnap-dummy (1.0) ... I: running --customize-hook in shell: sh -c 'chroot "$1" dpkg-query --showformat '${binary:Package}=${Version}\n' --show > "$1/pkglist"' exec /srv/rebuilderd/tmp/mmdebstrap.HQ_90JFalQ I: running special hook: download /pkglist ./pkglist I: running --customize-hook in shell: sh -c 'rm "$1/pkglist"' exec /srv/rebuilderd/tmp/mmdebstrap.HQ_90JFalQ I: running special hook: upload sources.list /etc/apt/sources.list I: waiting for background processes to finish... I: cleaning package lists and apt cache... I: skipping cleanup/reproducible as requested I: creating tarball... I: done I: removing tempdir /srv/rebuilderd/tmp/mmdebstrap.HQ_90JFalQ... I: success in 163.4225 seconds Downloading dependency 133 of 231: libnghttp3-9:amd64=1.8.0-1 Downloading dependency 134 of 231: libtinfo6:amd64=6.5+20250216-2 Downloading dependency 135 of 231: libmd0:amd64=1.1.0-2+b1 Downloading dependency 136 of 231: cpp-14-x86-64-linux-gnu:amd64=14.2.0-17 Downloading dependency 137 of 231: cpp:amd64=4:14.2.0-1 Downloading dependency 138 of 231: debianutils:amd64=5.21 Downloading dependency 139 of 231: dh-autoreconf:amd64=20 Downloading dependency 140 of 231: libbrotli1:amd64=1.1.0-2+b7 Downloading dependency 141 of 231: libjsoncpp26:amd64=1.9.6-3 Downloading dependency 142 of 231: gcc-14-base:amd64=14.2.0-17 Downloading dependency 143 of 231: libctf-nobfd0:amd64=2.44-3 Downloading dependency 144 of 231: python3-dev:amd64=3.13.2-2 Downloading dependency 145 of 231: librtmp1:amd64=2.4+20151223.gitfa8646d.1-2+b5 Downloading dependency 146 of 231: g++-14-x86-64-linux-gnu:amd64=14.2.0-17 Downloading dependency 147 of 231: libctf0:amd64=2.44-3 Downloading dependency 148 of 231: libsystemd0:amd64=257.4-1 Downloading dependency 149 of 231: man-db:amd64=2.13.0-1 Downloading dependency 150 of 231: python3-pkg-resources:amd64=75.8.0-1 Downloading dependency 151 of 231: dpkg-dev:amd64=1.22.18 Downloading dependency 152 of 231: g++-14:amd64=14.2.0-17 Downloading dependency 153 of 231: libc6:amd64=2.41-4 Downloading dependency 154 of 231: libre2-dev:amd64=20240702-3+b1 Downloading dependency 155 of 231: sysvinit-utils:amd64=3.14-3 Downloading dependency 156 of 231: libaudit-common:amd64=1:4.0.2-2 Downloading dependency 157 of 231: zlib1g-dev:amd64=1:1.3.dfsg+really1.3.1-1+b1 Downloading dependency 158 of 231: libgmp10:amd64=2:6.3.0+dfsg-3 Downloading dependency 159 of 231: libkeyutils1:amd64=1.6.3-4 Downloading dependency 160 of 231: libuuid1:amd64=2.40.4-5 Downloading dependency 161 of 231: autoconf:amd64=2.72-3 Downloading dependency 162 of 231: libgomp1:amd64=14.2.0-17 Downloading dependency 163 of 231: liblsan0:amd64=14.2.0-17 Downloading dependency 164 of 231: cpp-x86-64-linux-gnu:amd64=4:14.2.0-1 Downloading dependency 165 of 231: procps:amd64=2:4.0.4-7 Downloading dependency 166 of 231: base-files:amd64=13.7 Downloading dependency 167 of 231: perl:amd64=5.40.1-2 Downloading dependency 168 of 231: libperl5.40:amd64=5.40.1-2 Downloading dependency 169 of 231: liblzma5:amd64=5.6.4-1 Downloading dependency 170 of 231: nlohmann-json3-dev:amd64=3.11.3-2 Downloading dependency 171 of 231: init-system-helpers:amd64=1.68 Downloading dependency 172 of 231: libgcc-14-dev:amd64=14.2.0-17 Downloading dependency 173 of 231: python3-inflect:amd64=7.3.1-2 Downloading dependency 174 of 231: python3.13:amd64=3.13.2-1 Downloading dependency 175 of 231: libpam-modules:amd64=1.7.0-3 Downloading dependency 176 of 231: libmagic-mgc:amd64=1:5.45-3+b1 Downloading dependency 177 of 231: dwz:amd64=0.15-1+b1 Downloading dependency 178 of 231: zlib1g:amd64=1:1.3.dfsg+really1.3.1-1+b1 Downloading dependency 179 of 231: libcrypt-dev:amd64=1:4.4.38-1 Downloading dependency 180 of 231: libexpat1-dev:amd64=2.6.4-1 Downloading dependency 181 of 231: tzdata:amd64=2025a-2 Downloading dependency 182 of 231: libssl3t64:amd64=3.4.1-1 Downloading dependency 183 of 231: gcc-x86-64-linux-gnu:amd64=4:14.2.0-1 Downloading dependency 184 of 231: libstdc++-14-dev:amd64=14.2.0-17 Downloading dependency 185 of 231: gettext-base:amd64=0.23.1-1 Downloading dependency 186 of 231: libldap2:amd64=2.6.9+dfsg-1 Downloading dependency 187 of 231: libjs-sphinxdoc:amd64=8.1.3-5 Downloading dependency 188 of 231: media-types:amd64=13.0.0 Downloading dependency 189 of 231: ncurses-bin:amd64=6.5+20250216-2 Downloading dependency 190 of 231: libbinutils:amd64=2.44-3 Downloading dependency 191 of 231: bsdutils:amd64=1:2.40.4-5 Downloading dependency 192 of 231: libfmt10:amd64=10.1.1+ds1-4 Downloading dependency 193 of 231: libkrb5-3:amd64=1.21.3-4 Downloading dependency 194 of 231: python3:amd64=3.13.2-2 Downloading dependency 195 of 231: libasan8:amd64=14.2.0-17 Downloading dependency 196 of 231: ncurses-base:amd64=6.5+20250216-2 Downloading dependency 197 of 231: libffi8:amd64=3.4.7-1 Downloading dependency 198 of 231: libdpkg-perl:amd64=1.22.18 Downloading dependency 199 of 231: libxxhash0:amd64=0.8.3-2 Downloading dependency 200 of 231: libnghttp2-14:amd64=1.64.0-1 Downloading dependency 201 of 231: librhash1:amd64=1.4.5-1 Downloading dependency 202 of 231: dh-strip-nondeterminism:amd64=1.14.1-2 Downloading dependency 203 of 231: dpkg:amd64=1.22.18 Downloading dependency 204 of 231: openssl-provider-legacy:amd64=3.4.1-1 Downloading dependency 205 of 231: libtsan2:amd64=14.2.0-17 Downloading dependency 206 of 231: libmpc3:amd64=1.3.1-1+b3 Downloading dependency 207 of 231: m4:amd64=1.4.19-7 Downloading dependency 208 of 231: libmagic1t64:amd64=1:5.45-3+b1 Downloading dependency 209 of 231: libselinux1:amd64=3.8-4 Downloading dependency 210 of 231: python3-debian:amd64=1.0.0 Downloading dependency 211 of 231: libuv1t64:amd64=1.50.0-2 Downloading dependency 212 of 231: googletest:amd64=1.16.0-1 Downloading dependency 213 of 231: grep:amd64=3.11-4 Downloading dependency 214 of 231: python3-jaraco.functools:amd64=4.1.0-1 Downloading dependency 215 of 231: perl-base:amd64=5.40.1-2 Downloading dependency 216 of 231: diffutils:amd64=1:3.10-2 Downloading dependency 217 of 231: libidn2-0:amd64=2.3.8-1 Downloading dependency 218 of 231: libisl23:amd64=0.27-1 Downloading dependency 219 of 231: libjs-jquery:amd64=3.6.1+dfsg+~3.5.14-1 Downloading dependency 220 of 231: libcurl4t64:amd64=8.12.1-3 Downloading dependency 221 of 231: libtasn1-6:amd64=4.20.0-2 Downloading dependency 222 of 231: libudev1:amd64=257.4-1 Downloading dependency 223 of 231: libuchardet0:amd64=0.0.8-1+b2 Downloading dependency 224 of 231: file:amd64=1:5.45-3+b1 Downloading dependency 225 of 231: libfmt-dev:amd64=10.1.1+ds1-4 Downloading dependency 226 of 231: libncursesw6:amd64=6.5+20250216-2 Downloading dependency 227 of 231: libarchive13t64:amd64=3.7.4-1.1 Downloading dependency 228 of 231: libnettle8t64:amd64=3.10.1-1 Downloading dependency 229 of 231: python3-jaraco.text:amd64=4.0.0-1 Downloading dependency 230 of 231: libssh2-1t64:amd64=1.11.1-1 Downloading dependency 231 of 231: libpam-modules-bin:amd64=1.7.0-3 env --chdir=/srv/rebuilderd/tmp/rebuilderdIvwy7c/out DEB_BUILD_OPTIONS=parallel=6 LANG=C.UTF-8 LC_COLLATE=C.UTF-8 LC_CTYPE=C.UTF-8 SOURCE_DATE_EPOCH=1741690388 SBUILD_CONFIG=/srv/rebuilderd/tmp/debrebuildM0d4uC/debrebuild.sbuildrc.FRmwNseUSwyB sbuild --build=amd64 --host=amd64 --no-source --arch-any --no-arch-all --binNMU-changelog= yaramod (3.21.0-1.1+b2) sid; urgency=low, binary-only=yes * Binary-only non-maintainer upload for amd64; no source changes. * Rebuild against blibre2-11-absl20240722. -- amd64 / i386 Build Daemon (x86-csail-01) Tue, 11 Mar 2025 10:53:08 +0000 --chroot=/srv/rebuilderd/tmp/debrebuildM0d4uC/debrebuild.tar.WH3e3ryp1j1T --chroot-mode=unshare --dist=unstable --no-run-lintian --no-run-piuparts --no-run-autopkgtest --no-apt-update --no-apt-upgrade --no-apt-distupgrade --verbose --nolog --bd-uninstallable-explainer= --build-path=/build/reproducible-path --dsc-dir=yaramod-3.21.0 /srv/rebuilderd/tmp/rebuilderdIvwy7c/inputs/yaramod_3.21.0-1.1.dsc I: consider moving your ~/.sbuildrc to /srv/rebuilderd/.config/sbuild/config.pl The Debian buildds switched to the "unshare" backend and sbuild will default to it in the future. To start using "unshare" add this to your `~/.config/sbuild/config.pl`: $chroot_mode = "unshare"; If you want to keep the old "schroot" mode even in the future, add the following to your `~/.config/sbuild/config.pl`: $chroot_mode = "schroot"; $schroot = "schroot"; sbuild: warning: descr(l1): found blank line where expected first heading sbuild (Debian sbuild) 0.89.3+deb13u4 (28 December 2025) on osuosl42-amd64.novalocal +==============================================================================+ | yaramod 3.21.0-1.1+b2 (amd64) Thu, 15 Jan 2026 02:02:51 +0000 | +==============================================================================+ Package: yaramod Version: 3.21.0-1.1+b2 Source Version: 3.21.0-1.1 Distribution: unstable Machine Architecture: amd64 Host Architecture: amd64 Build Architecture: amd64 Build Type: any I: No tarballs found in /srv/rebuilderd/.cache/sbuild I: Unpacking /srv/rebuilderd/tmp/debrebuildM0d4uC/debrebuild.tar.WH3e3ryp1j1T to /srv/rebuilderd/tmp/tmp.sbuild.WtOAK7pv_d... I: Setting up the chroot... I: Creating chroot session... I: Setting up log color... I: Setting up apt archive... +------------------------------------------------------------------------------+ | Fetch source files Thu, 15 Jan 2026 02:02:56 +0000 | +------------------------------------------------------------------------------+ Local sources ------------- /srv/rebuilderd/tmp/rebuilderdIvwy7c/inputs/yaramod_3.21.0-1.1.dsc exists in /srv/rebuilderd/tmp/rebuilderdIvwy7c/inputs; copying to chroot sbuild: warning: descr(l1): found blank line where expected first heading +------------------------------------------------------------------------------+ | Install package build dependencies Thu, 15 Jan 2026 02:02:57 +0000 | +------------------------------------------------------------------------------+ Setup apt archive ----------------- Merged Build-Depends: debhelper-compat (= 13), build-essential, pkg-kde-tools, cmake, pkgconf, libpog-dev, libgtest-dev, dh-sequence-python3, pybind11-dev, python3-dev, libpython3-dev, python3-setuptools, nlohmann-json3-dev Filtered Build-Depends: debhelper-compat (= 13), build-essential, pkg-kde-tools, cmake, pkgconf, libpog-dev, libgtest-dev, dh-sequence-python3, pybind11-dev, python3-dev, libpython3-dev, python3-setuptools, nlohmann-json3-dev dpkg-deb: building package 'sbuild-build-depends-main-dummy' in '/build/reproducible-path/resolver-E07Bs9/apt_archive/sbuild-build-depends-main-dummy.deb'. Install main build dependencies (apt-based resolver) ---------------------------------------------------- Installing build dependencies +------------------------------------------------------------------------------+ | Check architectures Thu, 15 Jan 2026 02:03:01 +0000 | +------------------------------------------------------------------------------+ Arch check ok (amd64 included in any) +------------------------------------------------------------------------------+ | Build environment Thu, 15 Jan 2026 02:03:01 +0000 | +------------------------------------------------------------------------------+ Kernel: Linux 6.12.63+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.63-1 (2025-12-30) amd64 (x86_64) Toolchain package versions: binutils_2.44-3 dpkg-dev_1.22.18 g++-14_14.2.0-17 gcc-14_14.2.0-17 libc6-dev_2.41-4 libstdc++-14-dev_14.2.0-17 libstdc++6_14.2.0-17 linux-libc-dev_6.12.17-1 Package versions: autoconf_2.72-3 automake_1:1.17-3 autopoint_0.23.1-1 autotools-dev_20220109.1 base-files_13.7 base-passwd_3.6.6 bash_5.2.37-1.1 binutils_2.44-3 binutils-common_2.44-3 binutils-x86-64-linux-gnu_2.44-3 bsdextrautils_2.40.4-5 bsdutils_1:2.40.4-5 build-essential_12.12 bzip2_1.0.8-6 cmake_3.31.6-1 cmake-data_3.31.6-1 coreutils_9.5-1+b1 cpp_4:14.2.0-1 cpp-14_14.2.0-17 cpp-14-x86-64-linux-gnu_14.2.0-17 cpp-x86-64-linux-gnu_4:14.2.0-1 dash_0.5.12-12 debconf_1.5.90 debhelper_13.24.1 debianutils_5.21 dh-autoreconf_20 dh-python_6.20250308 dh-strip-nondeterminism_1.14.1-2 diffutils_1:3.10-2 dpkg_1.22.18 dpkg-dev_1.22.18 dwz_0.15-1+b1 file_1:5.45-3+b1 findutils_4.10.0-3 g++_4:14.2.0-1 g++-14_14.2.0-17 g++-14-x86-64-linux-gnu_14.2.0-17 g++-x86-64-linux-gnu_4:14.2.0-1 gcc_4:14.2.0-1 gcc-14_14.2.0-17 gcc-14-base_14.2.0-17 gcc-14-x86-64-linux-gnu_14.2.0-17 gcc-x86-64-linux-gnu_4:14.2.0-1 gettext_0.23.1-1 gettext-base_0.23.1-1 googletest_1.16.0-1 grep_3.11-4 groff-base_1.23.0-7 gzip_1.13-1 hostname_3.25 init-system-helpers_1.68 intltool-debian_0.35.0+20060710.6 libabsl-dev_20240722.0-1.5 libabsl20240722_20240722.0-1.5 libacl1_2.3.2-2+b1 libarchive-zip-perl_1.68-1 libarchive13t64_3.7.4-1.1 libasan8_14.2.0-17 libatomic1_14.2.0-17 libattr1_1:2.5.2-3 libaudit-common_1:4.0.2-2 libaudit1_1:4.0.2-2+b2 libbinutils_2.44-3 libblkid1_2.40.4-5 libbrotli1_1.1.0-2+b7 libbz2-1.0_1.0.8-6 libc-bin_2.41-4 libc-dev-bin_2.41-4 libc6_2.41-4 libc6-dev_2.41-4 libcap-ng0_0.8.5-4+b1 libcap2_1:2.75-1 libcc1-0_14.2.0-17 libcom-err2_1.47.2-1 libcrypt-dev_1:4.4.38-1 libcrypt1_1:4.4.38-1 libctf-nobfd0_2.44-3 libctf0_2.44-3 libcurl4t64_8.12.1-3 libdb5.3t64_5.3.28+dfsg2-9 libdebconfclient0_0.277 libdebhelper-perl_13.24.1 libdpkg-perl_1.22.18 libelf1t64_0.192-4 libexpat1_2.6.4-1 libexpat1-dev_2.6.4-1 libffi8_3.4.7-1 libfile-stripnondeterminism-perl_1.14.1-2 libfmt-dev_10.1.1+ds1-4 libfmt10_10.1.1+ds1-4 libgcc-14-dev_14.2.0-17 libgcc-s1_14.2.0-17 libgdbm-compat4t64_1.24-2 libgdbm6t64_1.24-2 libgmp10_2:6.3.0+dfsg-3 libgnutls30t64_3.8.9-2 libgomp1_14.2.0-17 libgprofng0_2.44-3 libgssapi-krb5-2_1.21.3-4 libgtest-dev_1.16.0-1 libhogweed6t64_3.10.1-1 libhwasan0_14.2.0-17 libicu72_72.1-6 libidn2-0_2.3.8-1 libisl23_0.27-1 libitm1_14.2.0-17 libjansson4_2.14-2+b3 libjs-jquery_3.6.1+dfsg+~3.5.14-1 libjs-sphinxdoc_8.1.3-5 libjs-underscore_1.13.4~dfsg+~1.11.4-3 libjsoncpp26_1.9.6-3 libk5crypto3_1.21.3-4 libkeyutils1_1.6.3-4 libkrb5-3_1.21.3-4 libkrb5support0_1.21.3-4 libldap2_2.6.9+dfsg-1 liblsan0_14.2.0-17 liblz4-1_1.10.0-4 liblzma5_5.6.4-1 libmagic-mgc_1:5.45-3+b1 libmagic1t64_1:5.45-3+b1 libmd0_1.1.0-2+b1 libmount1_2.40.4-5 libmpc3_1.3.1-1+b3 libmpfr6_4.2.1-1+b2 libncursesw6_6.5+20250216-2 libnettle8t64_3.10.1-1 libnghttp2-14_1.64.0-1 libnghttp3-9_1.8.0-1 libp11-kit0_0.25.5-3 libpam-modules_1.7.0-3 libpam-modules-bin_1.7.0-3 libpam-runtime_1.7.0-3 libpam0g_1.7.0-3 libpcre2-8-0_10.45-1 libperl5.40_5.40.1-2 libpipeline1_1.5.8-1 libpkgconf3_1.8.1-4 libpog-dev_0.5.3-3 libproc2-0_2:4.0.4-7 libpsl5t64_0.21.2-1.1+b1 libpython3-dev_3.13.2-2 libpython3-stdlib_3.13.2-2 libpython3.13_3.13.2-1 libpython3.13-dev_3.13.2-1 libpython3.13-minimal_3.13.2-1 libpython3.13-stdlib_3.13.2-1 libquadmath0_14.2.0-17 libre2-11_20240702-3+b1 libre2-dev_20240702-3+b1 libreadline8t64_8.2-6 librhash1_1.4.5-1 librtmp1_2.4+20151223.gitfa8646d.1-2+b5 libsasl2-2_2.1.28+dfsg1-9 libsasl2-modules-db_2.1.28+dfsg1-9 libseccomp2_2.5.5-2+b1 libselinux1_3.8-4 libsframe1_2.44-3 libsmartcols1_2.40.4-5 libsqlite3-0_3.46.1-2 libssh2-1t64_1.11.1-1 libssl3t64_3.4.1-1 libstdc++-14-dev_14.2.0-17 libstdc++6_14.2.0-17 libsystemd0_257.4-1 libtasn1-6_4.20.0-2 libtinfo6_6.5+20250216-2 libtool_2.5.4-4 libtsan2_14.2.0-17 libubsan1_14.2.0-17 libuchardet0_0.0.8-1+b2 libudev1_257.4-1 libunistring5_1.3-1 libuuid1_2.40.4-5 libuv1t64_1.50.0-2 libxml2_2.12.7+dfsg+really2.9.14-0.2+b2 libxxhash0_0.8.3-2 libyaml-0-2_0.2.5-2 libzstd1_1.5.6+dfsg-2 linux-libc-dev_6.12.17-1 m4_1.4.19-7 make_4.4.1-1 man-db_2.13.0-1 mawk_1.3.4.20250131-1 media-types_13.0.0 ncurses-base_6.5+20250216-2 ncurses-bin_6.5+20250216-2 netbase_6.4 nlohmann-json3-dev_3.11.3-2 openssl-provider-legacy_3.4.1-1 patch_2.7.6-7 perl_5.40.1-2 perl-base_5.40.1-2 perl-modules-5.40_5.40.1-2 pkg-kde-tools_0.18.12 pkgconf_1.8.1-4 pkgconf-bin_1.8.1-4 po-debconf_1.0.21+nmu1 procps_2:4.0.4-7 pybind11-dev_2.13.6-2 python3_3.13.2-2 python3-autocommand_2.2.2-3 python3-charset-normalizer_3.4.1-1+b1 python3-debian_1.0.0 python3-dev_3.13.2-2 python3-inflect_7.3.1-2 python3-jaraco.context_6.0.1-1 python3-jaraco.functools_4.1.0-1 python3-jaraco.text_4.0.0-1 python3-minimal_3.13.2-2 python3-more-itertools_10.6.0-1 python3-pkg-resources_75.8.0-1 python3-setuptools_75.8.0-1 python3-typeguard_4.4.2-1 python3-typing-extensions_4.12.2-2 python3-yaml_6.0.2-1+b2 python3-zipp_3.21.0-1 python3.13_3.13.2-1 python3.13-dev_3.13.2-1 python3.13-minimal_3.13.2-1 readline-common_8.2-6 rpcsvc-proto_1.4.3-1 sed_4.9-2 sensible-utils_0.0.24 sysvinit-utils_3.14-3 tar_1.35+dfsg-3.1 tzdata_2025a-2 util-linux_2.40.4-5 xz-utils_5.6.4-1 zlib1g_1:1.3.dfsg+really1.3.1-1+b1 zlib1g-dev_1:1.3.dfsg+really1.3.1-1+b1 +------------------------------------------------------------------------------+ | Build Thu, 15 Jan 2026 02:03:01 +0000 | +------------------------------------------------------------------------------+ Unpack source ------------- -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 Format: 3.0 (quilt) Source: yaramod Binary: libyaramod-dev, libyaramod0, python3-yaramod Architecture: any Version: 3.21.0-1.1 Maintainer: Yangfl Homepage: https://github.com/avast/yaramod Standards-Version: 4.7.0 Vcs-Browser: https://salsa.debian.org/yangfl-guest/yaramod Vcs-Git: https://salsa.debian.org/yangfl-guest/yaramod.git Testsuite: autopkgtest Testsuite-Triggers: @builddeps@ Build-Depends: debhelper-compat (= 13) Build-Depends-Arch: pkg-kde-tools, cmake, pkgconf, libpog-dev, libgtest-dev, dh-sequence-python3, pybind11-dev, python3-dev:native, libpython3-dev, python3-setuptools, nlohmann-json3-dev Package-List: libyaramod-dev deb libdevel optional arch=any libyaramod0 deb libs optional arch=any python3-yaramod deb python optional arch=any Checksums-Sha1: 508763377b8b918e80760797e4a30c28e3f3d47d 965418 yaramod_3.21.0.orig.tar.gz c91be1a5d5678f2e75705110e087f134541d358f 6360 yaramod_3.21.0-1.1.debian.tar.xz Checksums-Sha256: 095aee2946f1636b01653a1b67f84973eeb7ce733b17350dfb911bc74fa4cb9e 965418 yaramod_3.21.0.orig.tar.gz 07f88a705ab951273e865dad08732f09cd589230f56ea414bb63a599986678bc 6360 yaramod_3.21.0-1.1.debian.tar.xz Files: 47828b5fe255c853f83f049b911816f4 965418 yaramod_3.21.0.orig.tar.gz 291dfd1e13753ee9d8e56d12919173f8 6360 yaramod_3.21.0-1.1.debian.tar.xz -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEfncpR22H1vEdkazLwpPntGGCWs4FAmaFwdoACgkQwpPntGGC Ws7kSRAAvgqPWtSE9XlusN96P2X3rjZ6KIGakP2ppiBROTnZXWXWPrMYp7tsxPlL nFCtwPX7qkUXrx/1UURzDir0M1vjAMlkMQiVQoiGV1IXVPOAdLUHj14lup6yLoFx JSyAWSRBlLxFHWobtaA/kVWfEybVD1RBikD65GXjrx9/pByndSUStpyykLiD7/Pu YTQHXws6W3Q2Lam1GZF2kgV3D49EHYoEqVoLmNsk5MOWdvm6Tp+FydG2KQdzmDXl lHRMqNNeKTUXPESkhQ878B/nmUn5EwJydCZm05Di4KdMa7WlgLc/9PXtybOIV9Ui 7CSsQAGFpiffK71z6aHNHyhVx3mBKUVLPV9lPVotuCr7SqqOy5H5g8BmVLmdpPVW jnhr+JkxYVYTGNf3IphMYWtPM5Zae16JsebDbw2hMId1GQ1xd/0hgrbStA1Z0fBF avOGHtCmuK5tGz12SgjnoShRe44NTvfVCbMbNp6lS6XDBLK4HBrEWJ4WyAUbI9jk Zf3KP9PxVS2pIRiwj6XGo8QxF1LzDeGYBq+XGpabCYvaCKx9HI7ruxW9letv2xVn i4slyMFRPXvrQ6XVqlI8mq4fahkto77RLskXF1K/vqmCkcmFWzAPiN/S6yIfCYYh 5IQX6SnhecaY7cGdztqZ+acw0NwvJxqVRUHtPEjSnX9Qvb8Rv7g= =SRjq -----END PGP SIGNATURE----- dpkg-source: warning: cannot verify inline signature for ./yaramod_3.21.0-1.1.dsc: unsupported subcommand dpkg-source: info: extracting yaramod in /build/reproducible-path/yaramod-3.21.0 dpkg-source: info: unpacking yaramod_3.21.0.orig.tar.gz dpkg-source: info: unpacking yaramod_3.21.0-1.1.debian.tar.xz dpkg-source: info: using patch list from debian/patches/series dpkg-source: info: applying 0001-Build-Python-module-together.patch dpkg-source: info: applying 0002-Build-shared-library.patch dpkg-source: info: applying 0003-Use-system-packages.patch Check disk space ---------------- Sufficient free space for build Hack binNMU version ------------------- Created changelog entry for binNMU version 3.21.0-1.1+b2 User Environment ---------------- APT_CONFIG=/var/lib/sbuild/apt.conf DEB_BUILD_OPTIONS=parallel=6 HOME=/sbuild-nonexistent LANG=C.UTF-8 LC_ALL=C.UTF-8 LC_COLLATE=C.UTF-8 LC_CTYPE=C.UTF-8 LOGNAME=sbuild PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games SHELL=/bin/sh SOURCE_DATE_EPOCH=1741690388 USER=sbuild dpkg-buildpackage ----------------- Command: dpkg-buildpackage --sanitize-env -us -uc -B dpkg-buildpackage: info: source package yaramod dpkg-buildpackage: info: source version 3.21.0-1.1+b2 dpkg-buildpackage: info: source distribution sid dpkg-buildpackage: info: source changed by amd64 / i386 Build Daemon (x86-csail-01) dpkg-source --before-build . dpkg-buildpackage: info: host architecture amd64 debian/rules clean dh clean debian/rules override_dh_auto_clean-arch make[1]: Entering directory '/build/reproducible-path/yaramod-3.21.0' dh_auto_clean -a -O--buildsystem=cmake dh_auto_clean -a -O--buildsystem=pybuild I: pybuild base:311: python3.13 setup.py clean /usr/lib/python3/dist-packages/setuptools/dist.py:493: SetuptoolsDeprecationWarning: Invalid dash-separated options !! ******************************************************************************** Usage of dash-separated 'description-file' will not be supported in future versions. Please use the underscore name 'description_file' instead. This deprecation is overdue, please update your project and remove deprecated calls to avoid build errors in the future. See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details. ******************************************************************************** !! opt = self.warn_dash_deprecation(opt, section) running clean removing '/build/reproducible-path/yaramod-3.21.0/.pybuild/cpython3_3.13/build' (and everything under it) 'build/bdist.linux-x86_64' does not exist -- can't clean it 'build/scripts-3.13' does not exist -- can't clean it rm -rf yaramod.egg-info make[1]: Leaving directory '/build/reproducible-path/yaramod-3.21.0' dh_clean debian/rules binary-arch dh binary-arch dh_update_autotools_config -a dh_autoreconf -a debian/rules override_dh_auto_configure-arch make[1]: Entering directory '/build/reproducible-path/yaramod-3.21.0' dh_auto_configure -a -O--buildsystem=cmake -- \ -DYARAMOD_VERSION=3.21.0 \ -DPYTHON_EXECUTABLE=/usr/bin/python3 \ -DYARAMOD_TESTS=ON -DYARAMOD_PYTHON=ON -DCMAKE_STRIP=OFF cd obj-x86_64-linux-gnu && DEB_PYTHON_INSTALL_LAYOUT=deb PKG_CONFIG=/usr/bin/pkg-config cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_SYSCONFDIR=/etc -DCMAKE_INSTALL_LOCALSTATEDIR=/var -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON -DCMAKE_FIND_USE_PACKAGE_REGISTRY=OFF -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON -DFETCHCONTENT_FULLY_DISCONNECTED=ON -DCMAKE_INSTALL_RUNSTATEDIR=/run -DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON "-GUnix Makefiles" -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_INSTALL_LIBDIR=lib/x86_64-linux-gnu -DYARAMOD_VERSION=3.21.0 -DPYTHON_EXECUTABLE=/usr/bin/python3 -DYARAMOD_TESTS=ON -DYARAMOD_PYTHON=ON -DCMAKE_STRIP=OFF .. CMake Deprecation Warning at CMakeLists.txt:5 (cmake_minimum_required): Compatibility with CMake < 3.10 will be removed from a future version of CMake. Update the VERSION argument value. Or, use the ... syntax to tell CMake that the project requires at least but has been updated to work with policies introduced by or earlier. -- The CXX compiler identification is GNU 14.2.0 -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Found PkgConfig: /usr/bin/pkg-config (found version "1.8.1") -- Checking for module 're2' -- Found re2, version 11.0.0 CMake Warning (dev) at /usr/lib/cmake/pybind11/FindPythonLibsNew.cmake:101 (message): Policy CMP0148 is not set: The FindPythonInterp and FindPythonLibs modules are removed. Run "cmake --help-policy CMP0148" for policy details. Use the cmake_policy command to set the policy and suppress this warning, or preferably upgrade to using FindPython, either by calling it explicitly before pybind11, or by setting PYBIND11_FINDPYTHON ON before pybind11. Call Stack (most recent call first): /usr/lib/cmake/pybind11/pybind11Tools.cmake:50 (find_package) /usr/lib/cmake/pybind11/pybind11Common.cmake:228 (include) /usr/lib/cmake/pybind11/pybind11Config.cmake:250 (include) src/python/CMakeLists.txt:1 (find_package) This warning is for project developers. Use -Wno-dev to suppress it. -- Found PythonInterp: /usr/bin/python3 (found suitable version "3.13.2", minimum required is "3.7") -- Found PythonLibs: /usr/lib/x86_64-linux-gnu/libpython3.13.so -- Performing Test HAS_FLTO -- Performing Test HAS_FLTO - Success -- Found pybind11: /usr/include (found version "2.13.6") -- Performing Test CMAKE_HAVE_LIBC_PTHREAD -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success -- Found Threads: TRUE -- Found GTest: /usr/lib/x86_64-linux-gnu/cmake/GTest/GTestConfig.cmake (found version "1.15.0") -- Found Python: /usr/bin/python3 (found version "3.13.2") found components: Interpreter -- Configuring done (32.8s) -- Generating done (0.1s) CMake Warning: Manually-specified variables were not used by the project: CMAKE_EXPORT_NO_PACKAGE_REGISTRY CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY FETCHCONTENT_FULLY_DISCONNECTED -- Build files have been written to: /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu dh_auto_configure -a -O--buildsystem=pybuild I: pybuild base:311: python3.13 setup.py config /usr/lib/python3/dist-packages/setuptools/dist.py:493: SetuptoolsDeprecationWarning: Invalid dash-separated options !! ******************************************************************************** Usage of dash-separated 'description-file' will not be supported in future versions. Please use the underscore name 'description_file' instead. This deprecation is overdue, please update your project and remove deprecated calls to avoid build errors in the future. See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details. ******************************************************************************** !! opt = self.warn_dash_deprecation(opt, section) running config make[1]: Leaving directory '/build/reproducible-path/yaramod-3.21.0' debian/rules override_dh_auto_build-arch make[1]: Entering directory '/build/reproducible-path/yaramod-3.21.0' dh_auto_build -a -O--buildsystem=cmake cd obj-x86_64-linux-gnu && make -j6 "INSTALL=install --strip-program=true" VERBOSE=1 make[2]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' /usr/bin/cmake -S/build/reproducible-path/yaramod-3.21.0 -B/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu --check-build-system CMakeFiles/Makefile.cmake 0 /usr/bin/cmake -E cmake_progress_start /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/CMakeFiles /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu//CMakeFiles/progress.marks make -f CMakeFiles/Makefile2 all make[3]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' make -f CMakeFiles/modules_wrapping.dir/build.make CMakeFiles/modules_wrapping.dir/depend make -f src/CMakeFiles/yaramod-obj.dir/build.make src/CMakeFiles/yaramod-obj.dir/depend make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /build/reproducible-path/yaramod-3.21.0 /build/reproducible-path/yaramod-3.21.0 /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/CMakeFiles/modules_wrapping.dir/DependInfo.cmake "--color=" make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /build/reproducible-path/yaramod-3.21.0 /build/reproducible-path/yaramod-3.21.0/src /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src/CMakeFiles/yaramod-obj.dir/DependInfo.cmake "--color=" make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' make -f CMakeFiles/modules_wrapping.dir/build.make CMakeFiles/modules_wrapping.dir/build make -f src/CMakeFiles/yaramod-obj.dir/build.make src/CMakeFiles/yaramod-obj.dir/build make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' [ 5%] Converting yaramod modules from JSON to byte arrays in .cpp files [ 5%] Building CXX object src/CMakeFiles/yaramod-obj.dir/builder/yara_hex_string_builder.cpp.o [ 8%] Building CXX object src/CMakeFiles/yaramod-obj.dir/parser/parser_driver.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/builder/yara_hex_string_builder.cpp.o -MF CMakeFiles/yaramod-obj.dir/builder/yara_hex_string_builder.cpp.o.d -o CMakeFiles/yaramod-obj.dir/builder/yara_hex_string_builder.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/builder/yara_hex_string_builder.cpp /usr/bin/python3 /build/reproducible-path/yaramod-3.21.0/scripts/json_to_array.py -i /build/reproducible-path/yaramod-3.21.0/modules -o /build/reproducible-path/yaramod-3.21.0/include/yaramod/types/modules/generated cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/parser/parser_driver.cpp.o -MF CMakeFiles/yaramod-obj.dir/parser/parser_driver.cpp.o.d -o CMakeFiles/yaramod-obj.dir/parser/parser_driver.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp [ 10%] Building CXX object src/CMakeFiles/yaramod-obj.dir/builder/yara_expression_builder.cpp.o [ 13%] Building CXX object src/CMakeFiles/yaramod-obj.dir/builder/yara_file_builder.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/builder/yara_expression_builder.cpp.o -MF CMakeFiles/yaramod-obj.dir/builder/yara_expression_builder.cpp.o.d -o CMakeFiles/yaramod-obj.dir/builder/yara_expression_builder.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/builder/yara_expression_builder.cpp cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/builder/yara_file_builder.cpp.o -MF CMakeFiles/yaramod-obj.dir/builder/yara_file_builder.cpp.o.d -o CMakeFiles/yaramod-obj.dir/builder/yara_file_builder.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/builder/yara_file_builder.cpp [ 16%] Building CXX object src/CMakeFiles/yaramod-obj.dir/builder/yara_rule_builder.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/builder/yara_rule_builder.cpp.o -MF CMakeFiles/yaramod-obj.dir/builder/yara_rule_builder.cpp.o.d -o CMakeFiles/yaramod-obj.dir/builder/yara_rule_builder.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/builder/yara_rule_builder.cpp Created ModuleContent /build/reproducible-path/yaramod-3.21.0/include/yaramod/types/modules/generated/module_dotnet_generated.h from module_dotnet Created ModuleContent /build/reproducible-path/yaramod-3.21.0/include/yaramod/types/modules/generated/module_cuckoo_deprecated_generated.h from module_cuckoo_deprecated Created ModuleContent /build/reproducible-path/yaramod-3.21.0/include/yaramod/types/modules/generated/module_macho_generated.h from module_macho Created ModuleContent /build/reproducible-path/yaramod-3.21.0/include/yaramod/types/modules/generated/module_dex_generated.h from module_dex Created ModuleContent /build/reproducible-path/yaramod-3.21.0/include/yaramod/types/modules/generated/module_hash_generated.h from module_hash Created ModuleContent /build/reproducible-path/yaramod-3.21.0/include/yaramod/types/modules/generated/module_magic_generated.h from module_magic Created ModuleContent /build/reproducible-path/yaramod-3.21.0/include/yaramod/types/modules/generated/module_elf_generated.h from module_elf Created ModuleContent /build/reproducible-path/yaramod-3.21.0/include/yaramod/types/modules/generated/module_pe_generated.h from module_pe Created ModuleContent /build/reproducible-path/yaramod-3.21.0/include/yaramod/types/modules/generated/module_string_generated.h from module_string Created ModuleContent /build/reproducible-path/yaramod-3.21.0/include/yaramod/types/modules/generated/module_time_generated.h from module_time Created ModuleContent /build/reproducible-path/yaramod-3.21.0/include/yaramod/types/modules/generated/module_math_generated.h from module_math Created ModuleContent /build/reproducible-path/yaramod-3.21.0/include/yaramod/types/modules/generated/module_cuckoo_generated.h from module_cuckoo Created ModuleContent /build/reproducible-path/yaramod-3.21.0/include/yaramod/types/modules/generated/module_console_generated.h from module_console make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' [ 16%] Built target modules_wrapping [ 18%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/hex_string.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/hex_string.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/hex_string.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/hex_string.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/hex_string.cpp [ 21%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/literal.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/literal.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/literal.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/literal.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/literal.cpp [ 24%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/meta.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/meta.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/meta.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/meta.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/meta.cpp [ 27%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/variable.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/variable.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/variable.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/variable.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/variable.cpp [ 29%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/modules/module.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/modules/module.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/modules/module.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/modules/module.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/modules/module.cpp [ 32%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/modules/module_pool.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/modules/module_pool.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/modules/module_pool.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/modules/module_pool.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/modules/module_pool.cpp [ 35%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/plain_string.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/plain_string.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/plain_string.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/plain_string.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/plain_string.cpp /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:196 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[11], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[4], const char (&)[11], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1391:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ 1349 | .production("for_expression", "OF", "string_set", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1350 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1351 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1352 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1353 | TokenIt at = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1354 | Expression::Ptr offset = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1355 | | 1356 | if (!offset->isInt()) { | ~~~~~~~~~~~~~~~~~~~~~~~ 1357 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1358 | ss << "Operator 'at' expects integer on the right-hand side of the expression. Got " << offset->getText() << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1359 | error_handle(args[4].getTokenIt()->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1360 | } | ~ 1361 | | 1362 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), at, offset); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1363 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1365 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1366 | return output; | ~~~~~~~~~~~~~~ 1367 | }) | ~~ 1368 | .production("primary_expression", "PERCENT", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1369 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1370 | TokenIt percent = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1371 | std::uint64_t value = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~ 1372 | if (strToNum(for_expr->getText(), value)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1373 | { | ~ 1374 | if (value == 0 || value > 100) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1375 | { | ~ 1376 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1377 | ss << "Percentage must be between 1 and 100 (inclusive). Got " << value << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1378 | error_handle(percent->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1379 | } | ~ 1380 | } | ~ 1381 | auto percentual_expr = std::make_shared(std::move(for_expr), percent); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1382 | percentual_expr->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1383 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1384 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1385 | auto output = std::make_shared(std::move(percentual_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1386 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1387 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1388 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1389 | return output; | ~~~~~~~~~~~~~~ 1390 | }) | ~~ 1391 | .production("NOT", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1392 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1393 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1394 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1395 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1396 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1397 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1398 | return output; | ~~~~~~~~~~~~~~ 1399 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1393:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1393 | auto expr = std::move(args[1].getExpression()); | ^~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1393:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:197 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[11], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[8], const char (&)[11], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1400:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ 1349 | .production("for_expression", "OF", "string_set", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1350 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1351 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1352 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1353 | TokenIt at = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1354 | Expression::Ptr offset = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1355 | | 1356 | if (!offset->isInt()) { | ~~~~~~~~~~~~~~~~~~~~~~~ 1357 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1358 | ss << "Operator 'at' expects integer on the right-hand side of the expression. Got " << offset->getText() << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1359 | error_handle(args[4].getTokenIt()->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1360 | } | ~ 1361 | | 1362 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), at, offset); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1363 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1365 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1366 | return output; | ~~~~~~~~~~~~~~ 1367 | }) | ~~ 1368 | .production("primary_expression", "PERCENT", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1369 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1370 | TokenIt percent = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1371 | std::uint64_t value = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~ 1372 | if (strToNum(for_expr->getText(), value)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1373 | { | ~ 1374 | if (value == 0 || value > 100) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1375 | { | ~ 1376 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1377 | ss << "Percentage must be between 1 and 100 (inclusive). Got " << value << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1378 | error_handle(percent->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1379 | } | ~ 1380 | } | ~ 1381 | auto percentual_expr = std::make_shared(std::move(for_expr), percent); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1382 | percentual_expr->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1383 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1384 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1385 | auto output = std::make_shared(std::move(percentual_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1386 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1387 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1388 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1389 | return output; | ~~~~~~~~~~~~~~ 1390 | }) | ~~ 1391 | .production("NOT", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1392 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1393 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1394 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1395 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1396 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1397 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1398 | return output; | ~~~~~~~~~~~~~~ 1399 | }) | ~~ 1400 | .production("DEFINED", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1401 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1402 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1403 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1404 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1405 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1406 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1407 | return output; | ~~~~~~~~~~~~~~ 1408 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1402:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1402 | auto expr = std::move(args[1].getExpression()); | ^~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1402:30: note: remove ‘std::move’ call [ 37%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/rule.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/rule.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/rule.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/rule.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/rule.cpp /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:191 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[11], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[15], const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1317:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1318:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1318 | auto for_expr = std::move(args[0].getExpression()); | ^~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1318:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1320:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1320 | auto set = std::move(args[2].getExpression()); | ^~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1320:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:192 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[9], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[9], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[15], const char (&)[3], const char (&)[9], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1327:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1328:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1328 | auto for_expr = std::move(args[0].getExpression()); | ^~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1328:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1330:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1330 | auto set = std::move(args[2].getExpression()); | ^~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1330:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:198 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[11], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[4], const char (&)[11], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[11], const char (&)[4], const char (&)[11], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1409:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ 1349 | .production("for_expression", "OF", "string_set", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1350 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1351 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1352 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1353 | TokenIt at = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1354 | Expression::Ptr offset = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1355 | | 1356 | if (!offset->isInt()) { | ~~~~~~~~~~~~~~~~~~~~~~~ 1357 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1358 | ss << "Operator 'at' expects integer on the right-hand side of the expression. Got " << offset->getText() << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1359 | error_handle(args[4].getTokenIt()->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1360 | } | ~ 1361 | | 1362 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), at, offset); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1363 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1365 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1366 | return output; | ~~~~~~~~~~~~~~ 1367 | }) | ~~ 1368 | .production("primary_expression", "PERCENT", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1369 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1370 | TokenIt percent = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1371 | std::uint64_t value = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~ 1372 | if (strToNum(for_expr->getText(), value)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1373 | { | ~ 1374 | if (value == 0 || value > 100) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1375 | { | ~ 1376 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1377 | ss << "Percentage must be between 1 and 100 (inclusive). Got " << value << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1378 | error_handle(percent->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1379 | } | ~ 1380 | } | ~ 1381 | auto percentual_expr = std::make_shared(std::move(for_expr), percent); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1382 | percentual_expr->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1383 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1384 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1385 | auto output = std::make_shared(std::move(percentual_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1386 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1387 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1388 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1389 | return output; | ~~~~~~~~~~~~~~ 1390 | }) | ~~ 1391 | .production("NOT", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1392 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1393 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1394 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1395 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1396 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1397 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1398 | return output; | ~~~~~~~~~~~~~~ 1399 | }) | ~~ 1400 | .production("DEFINED", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1401 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1402 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1403 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1404 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1405 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1406 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1407 | return output; | ~~~~~~~~~~~~~~ 1408 | }) | ~~ 1409 | .production("expression", "AND", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1410 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1411 | TokenIt and_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1412 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1413 | auto output = std::make_shared(std::move(left), and_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1414 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1415 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1416 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1417 | return output; | ~~~~~~~~~~~~~~ 1418 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1410:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1410 | auto left = std::move(args[0].getExpression()); | ^~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1410:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1412:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1412 | auto right = std::move(args[2].getExpression()); | ^~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1412:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:199 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[11], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[11], const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1419:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ 1349 | .production("for_expression", "OF", "string_set", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1350 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1351 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1352 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1353 | TokenIt at = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1354 | Expression::Ptr offset = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1355 | | 1356 | if (!offset->isInt()) { | ~~~~~~~~~~~~~~~~~~~~~~~ 1357 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1358 | ss << "Operator 'at' expects integer on the right-hand side of the expression. Got " << offset->getText() << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1359 | error_handle(args[4].getTokenIt()->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1360 | } | ~ 1361 | | 1362 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), at, offset); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1363 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1365 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1366 | return output; | ~~~~~~~~~~~~~~ 1367 | }) | ~~ 1368 | .production("primary_expression", "PERCENT", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1369 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1370 | TokenIt percent = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1371 | std::uint64_t value = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~ 1372 | if (strToNum(for_expr->getText(), value)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1373 | { | ~ 1374 | if (value == 0 || value > 100) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1375 | { | ~ 1376 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1377 | ss << "Percentage must be between 1 and 100 (inclusive). Got " << value << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1378 | error_handle(percent->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1379 | } | ~ 1380 | } | ~ 1381 | auto percentual_expr = std::make_shared(std::move(for_expr), percent); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1382 | percentual_expr->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1383 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1384 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1385 | auto output = std::make_shared(std::move(percentual_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1386 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1387 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1388 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1389 | return output; | ~~~~~~~~~~~~~~ 1390 | }) | ~~ 1391 | .production("NOT", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1392 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1393 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1394 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1395 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1396 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1397 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1398 | return output; | ~~~~~~~~~~~~~~ 1399 | }) | ~~ 1400 | .production("DEFINED", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1401 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1402 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1403 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1404 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1405 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1406 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1407 | return output; | ~~~~~~~~~~~~~~ 1408 | }) | ~~ 1409 | .production("expression", "AND", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1410 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1411 | TokenIt and_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1412 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1413 | auto output = std::make_shared(std::move(left), and_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1414 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1415 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1416 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1417 | return output; | ~~~~~~~~~~~~~~ 1418 | }) | ~~ 1419 | .production("expression", "OR", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1420 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1421 | TokenIt or_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1422 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1423 | auto output = std::make_shared(std::move(left), or_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1424 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1425 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1426 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1427 | return output; | ~~~~~~~~~~~~~~ 1428 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1420:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1420 | auto left = std::move(args[0].getExpression()); | ^~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1420:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1422:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1422 | auto right = std::move(args[2].getExpression()); | ^~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1422:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:200 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[19], const char (&)[3], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1429:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ 1349 | .production("for_expression", "OF", "string_set", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1350 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1351 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1352 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1353 | TokenIt at = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1354 | Expression::Ptr offset = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1355 | | 1356 | if (!offset->isInt()) { | ~~~~~~~~~~~~~~~~~~~~~~~ 1357 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1358 | ss << "Operator 'at' expects integer on the right-hand side of the expression. Got " << offset->getText() << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1359 | error_handle(args[4].getTokenIt()->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1360 | } | ~ 1361 | | 1362 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), at, offset); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1363 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1365 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1366 | return output; | ~~~~~~~~~~~~~~ 1367 | }) | ~~ 1368 | .production("primary_expression", "PERCENT", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1369 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1370 | TokenIt percent = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1371 | std::uint64_t value = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~ 1372 | if (strToNum(for_expr->getText(), value)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1373 | { | ~ 1374 | if (value == 0 || value > 100) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1375 | { | ~ 1376 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1377 | ss << "Percentage must be between 1 and 100 (inclusive). Got " << value << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1378 | error_handle(percent->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1379 | } | ~ 1380 | } | ~ 1381 | auto percentual_expr = std::make_shared(std::move(for_expr), percent); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1382 | percentual_expr->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1383 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1384 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1385 | auto output = std::make_shared(std::move(percentual_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1386 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1387 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1388 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1389 | return output; | ~~~~~~~~~~~~~~ 1390 | }) | ~~ 1391 | .production("NOT", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1392 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1393 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1394 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1395 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1396 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1397 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1398 | return output; | ~~~~~~~~~~~~~~ 1399 | }) | ~~ 1400 | .production("DEFINED", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1401 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1402 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1403 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1404 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1405 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1406 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1407 | return output; | ~~~~~~~~~~~~~~ 1408 | }) | ~~ 1409 | .production("expression", "AND", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1410 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1411 | TokenIt and_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1412 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1413 | auto output = std::make_shared(std::move(left), and_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1414 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1415 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1416 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1417 | return output; | ~~~~~~~~~~~~~~ 1418 | }) | ~~ 1419 | .production("expression", "OR", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1420 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1421 | TokenIt or_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1422 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1423 | auto output = std::make_shared(std::move(left), or_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1424 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1425 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1426 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1427 | return output; | ~~~~~~~~~~~~~~ 1428 | }) | ~~ 1429 | .production("primary_expression", "LT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1430 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1431 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1432 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1433 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1434 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1435 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1436 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1437 | return output; | ~~~~~~~~~~~~~~ 1438 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1430:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1430 | auto left = std::move(args[0].getExpression()); | ^~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1430:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1432:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1432 | auto right = std::move(args[2].getExpression()); | ^~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1432:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:201 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[19], const char (&)[3], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1439:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ 1349 | .production("for_expression", "OF", "string_set", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1350 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1351 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1352 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1353 | TokenIt at = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1354 | Expression::Ptr offset = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1355 | | 1356 | if (!offset->isInt()) { | ~~~~~~~~~~~~~~~~~~~~~~~ 1357 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1358 | ss << "Operator 'at' expects integer on the right-hand side of the expression. Got " << offset->getText() << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1359 | error_handle(args[4].getTokenIt()->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1360 | } | ~ 1361 | | 1362 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), at, offset); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1363 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1365 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1366 | return output; | ~~~~~~~~~~~~~~ 1367 | }) | ~~ 1368 | .production("primary_expression", "PERCENT", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1369 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1370 | TokenIt percent = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1371 | std::uint64_t value = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~ 1372 | if (strToNum(for_expr->getText(), value)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1373 | { | ~ 1374 | if (value == 0 || value > 100) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1375 | { | ~ 1376 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1377 | ss << "Percentage must be between 1 and 100 (inclusive). Got " << value << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1378 | error_handle(percent->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1379 | } | ~ 1380 | } | ~ 1381 | auto percentual_expr = std::make_shared(std::move(for_expr), percent); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1382 | percentual_expr->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1383 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1384 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1385 | auto output = std::make_shared(std::move(percentual_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1386 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1387 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1388 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1389 | return output; | ~~~~~~~~~~~~~~ 1390 | }) | ~~ 1391 | .production("NOT", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1392 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1393 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1394 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1395 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1396 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1397 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1398 | return output; | ~~~~~~~~~~~~~~ 1399 | }) | ~~ 1400 | .production("DEFINED", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1401 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1402 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1403 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1404 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1405 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1406 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1407 | return output; | ~~~~~~~~~~~~~~ 1408 | }) | ~~ 1409 | .production("expression", "AND", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1410 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1411 | TokenIt and_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1412 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1413 | auto output = std::make_shared(std::move(left), and_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1414 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1415 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1416 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1417 | return output; | ~~~~~~~~~~~~~~ 1418 | }) | ~~ 1419 | .production("expression", "OR", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1420 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1421 | TokenIt or_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1422 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1423 | auto output = std::make_shared(std::move(left), or_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1424 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1425 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1426 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1427 | return output; | ~~~~~~~~~~~~~~ 1428 | }) | ~~ 1429 | .production("primary_expression", "LT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1430 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1431 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1432 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1433 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1434 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1435 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1436 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1437 | return output; | ~~~~~~~~~~~~~~ 1438 | }) | ~~ 1439 | .production("primary_expression", "GT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1440 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1441 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1442 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1443 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1444 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1445 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1446 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1447 | return output; | ~~~~~~~~~~~~~~ 1448 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1440:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1440 | auto left = std::move(args[0].getExpression()); | ^~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1440:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1442:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1442 | auto right = std::move(args[2].getExpression()); | ^~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1442:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:202 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[19], const char (&)[3], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1449:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ 1349 | .production("for_expression", "OF", "string_set", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1350 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1351 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1352 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1353 | TokenIt at = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1354 | Expression::Ptr offset = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1355 | | 1356 | if (!offset->isInt()) { | ~~~~~~~~~~~~~~~~~~~~~~~ 1357 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1358 | ss << "Operator 'at' expects integer on the right-hand side of the expression. Got " << offset->getText() << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1359 | error_handle(args[4].getTokenIt()->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1360 | } | ~ 1361 | | 1362 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), at, offset); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1363 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1365 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1366 | return output; | ~~~~~~~~~~~~~~ 1367 | }) | ~~ 1368 | .production("primary_expression", "PERCENT", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1369 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1370 | TokenIt percent = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1371 | std::uint64_t value = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~ 1372 | if (strToNum(for_expr->getText(), value)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1373 | { | ~ 1374 | if (value == 0 || value > 100) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1375 | { | ~ 1376 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1377 | ss << "Percentage must be between 1 and 100 (inclusive). Got " << value << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1378 | error_handle(percent->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1379 | } | ~ 1380 | } | ~ 1381 | auto percentual_expr = std::make_shared(std::move(for_expr), percent); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1382 | percentual_expr->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1383 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1384 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1385 | auto output = std::make_shared(std::move(percentual_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1386 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1387 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1388 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1389 | return output; | ~~~~~~~~~~~~~~ 1390 | }) | ~~ 1391 | .production("NOT", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1392 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1393 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1394 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1395 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1396 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1397 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1398 | return output; | ~~~~~~~~~~~~~~ 1399 | }) | ~~ 1400 | .production("DEFINED", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1401 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1402 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1403 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1404 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1405 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1406 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1407 | return output; | ~~~~~~~~~~~~~~ 1408 | }) | ~~ 1409 | .production("expression", "AND", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1410 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1411 | TokenIt and_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1412 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1413 | auto output = std::make_shared(std::move(left), and_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1414 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1415 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1416 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1417 | return output; | ~~~~~~~~~~~~~~ 1418 | }) | ~~ 1419 | .production("expression", "OR", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1420 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1421 | TokenIt or_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1422 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1423 | auto output = std::make_shared(std::move(left), or_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1424 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1425 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1426 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1427 | return output; | ~~~~~~~~~~~~~~ 1428 | }) | ~~ 1429 | .production("primary_expression", "LT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1430 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1431 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1432 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1433 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1434 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1435 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1436 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1437 | return output; | ~~~~~~~~~~~~~~ 1438 | }) | ~~ 1439 | .production("primary_expression", "GT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1440 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1441 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1442 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1443 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1444 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1445 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1446 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1447 | return output; | ~~~~~~~~~~~~~~ 1448 | }) | ~~ 1449 | .production("primary_expression", "LE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1450 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1451 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1452 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1453 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1454 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1455 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1456 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1457 | return output; | ~~~~~~~~~~~~~~ 1458 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1450:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1450 | auto left = std::move(args[0].getExpression()); | ^~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1450:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1452:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1452 | auto right = std::move(args[2].getExpression()); | ^~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1452:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:203 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[19], const char (&)[3], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1459:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ 1349 | .production("for_expression", "OF", "string_set", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1350 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1351 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1352 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1353 | TokenIt at = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1354 | Expression::Ptr offset = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1355 | | 1356 | if (!offset->isInt()) { | ~~~~~~~~~~~~~~~~~~~~~~~ 1357 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1358 | ss << "Operator 'at' expects integer on the right-hand side of the expression. Got " << offset->getText() << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1359 | error_handle(args[4].getTokenIt()->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1360 | } | ~ 1361 | | 1362 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), at, offset); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1363 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1365 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1366 | return output; | ~~~~~~~~~~~~~~ 1367 | }) | ~~ 1368 | .production("primary_expression", "PERCENT", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1369 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1370 | TokenIt percent = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1371 | std::uint64_t value = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~ 1372 | if (strToNum(for_expr->getText(), value)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1373 | { | ~ 1374 | if (value == 0 || value > 100) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1375 | { | ~ 1376 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1377 | ss << "Percentage must be between 1 and 100 (inclusive). Got " << value << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1378 | error_handle(percent->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1379 | } | ~ 1380 | } | ~ 1381 | auto percentual_expr = std::make_shared(std::move(for_expr), percent); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1382 | percentual_expr->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1383 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1384 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1385 | auto output = std::make_shared(std::move(percentual_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1386 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1387 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1388 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1389 | return output; | ~~~~~~~~~~~~~~ 1390 | }) | ~~ 1391 | .production("NOT", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1392 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1393 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1394 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1395 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1396 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1397 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1398 | return output; | ~~~~~~~~~~~~~~ 1399 | }) | ~~ 1400 | .production("DEFINED", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1401 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1402 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1403 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1404 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1405 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1406 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1407 | return output; | ~~~~~~~~~~~~~~ 1408 | }) | ~~ 1409 | .production("expression", "AND", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1410 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1411 | TokenIt and_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1412 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1413 | auto output = std::make_shared(std::move(left), and_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1414 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1415 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1416 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1417 | return output; | ~~~~~~~~~~~~~~ 1418 | }) | ~~ 1419 | .production("expression", "OR", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1420 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1421 | TokenIt or_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1422 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1423 | auto output = std::make_shared(std::move(left), or_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1424 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1425 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1426 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1427 | return output; | ~~~~~~~~~~~~~~ 1428 | }) | ~~ 1429 | .production("primary_expression", "LT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1430 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1431 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1432 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1433 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1434 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1435 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1436 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1437 | return output; | ~~~~~~~~~~~~~~ 1438 | }) | ~~ 1439 | .production("primary_expression", "GT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1440 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1441 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1442 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1443 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1444 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1445 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1446 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1447 | return output; | ~~~~~~~~~~~~~~ 1448 | }) | ~~ 1449 | .production("primary_expression", "LE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1450 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1451 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1452 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1453 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1454 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1455 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1456 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1457 | return output; | ~~~~~~~~~~~~~~ 1458 | }) | ~~ 1459 | .production("primary_expression", "GE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1460 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1461 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1462 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1463 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1464 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1465 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1466 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1467 | return output; | ~~~~~~~~~~~~~~ 1468 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1460:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1460 | auto left = std::move(args[0].getExpression()); | ^~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1460:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1462:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1462 | auto right = std::move(args[2].getExpression()); | ^~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1462:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:204 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[19], const char (&)[3], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1469:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ 1349 | .production("for_expression", "OF", "string_set", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1350 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1351 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1352 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1353 | TokenIt at = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1354 | Expression::Ptr offset = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1355 | | 1356 | if (!offset->isInt()) { | ~~~~~~~~~~~~~~~~~~~~~~~ 1357 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1358 | ss << "Operator 'at' expects integer on the right-hand side of the expression. Got " << offset->getText() << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1359 | error_handle(args[4].getTokenIt()->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1360 | } | ~ 1361 | | 1362 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), at, offset); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1363 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1365 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1366 | return output; | ~~~~~~~~~~~~~~ 1367 | }) | ~~ 1368 | .production("primary_expression", "PERCENT", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1369 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1370 | TokenIt percent = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1371 | std::uint64_t value = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~ 1372 | if (strToNum(for_expr->getText(), value)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1373 | { | ~ 1374 | if (value == 0 || value > 100) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1375 | { | ~ 1376 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1377 | ss << "Percentage must be between 1 and 100 (inclusive). Got " << value << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1378 | error_handle(percent->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1379 | } | ~ 1380 | } | ~ 1381 | auto percentual_expr = std::make_shared(std::move(for_expr), percent); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1382 | percentual_expr->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1383 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1384 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1385 | auto output = std::make_shared(std::move(percentual_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1386 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1387 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1388 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1389 | return output; | ~~~~~~~~~~~~~~ 1390 | }) | ~~ 1391 | .production("NOT", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1392 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1393 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1394 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1395 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1396 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1397 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1398 | return output; | ~~~~~~~~~~~~~~ 1399 | }) | ~~ 1400 | .production("DEFINED", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1401 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1402 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1403 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1404 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1405 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1406 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1407 | return output; | ~~~~~~~~~~~~~~ 1408 | }) | ~~ 1409 | .production("expression", "AND", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1410 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1411 | TokenIt and_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1412 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1413 | auto output = std::make_shared(std::move(left), and_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1414 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1415 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1416 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1417 | return output; | ~~~~~~~~~~~~~~ 1418 | }) | ~~ 1419 | .production("expression", "OR", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1420 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1421 | TokenIt or_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1422 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1423 | auto output = std::make_shared(std::move(left), or_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1424 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1425 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1426 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1427 | return output; | ~~~~~~~~~~~~~~ 1428 | }) | ~~ 1429 | .production("primary_expression", "LT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1430 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1431 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1432 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1433 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1434 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1435 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1436 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1437 | return output; | ~~~~~~~~~~~~~~ 1438 | }) | ~~ 1439 | .production("primary_expression", "GT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1440 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1441 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1442 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1443 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1444 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1445 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1446 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1447 | return output; | ~~~~~~~~~~~~~~ 1448 | }) | ~~ 1449 | .production("primary_expression", "LE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1450 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1451 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1452 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1453 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1454 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1455 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1456 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1457 | return output; | ~~~~~~~~~~~~~~ 1458 | }) | ~~ 1459 | .production("primary_expression", "GE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1460 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1461 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1462 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1463 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1464 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1465 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1466 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1467 | return output; | ~~~~~~~~~~~~~~ 1468 | }) | ~~ 1469 | .production("primary_expression", "EQ", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1470 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1471 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1472 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1473 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1474 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1475 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1476 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1477 | return output; | ~~~~~~~~~~~~~~ 1478 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1470:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1470 | auto left = std::move(args[0].getExpression()); | ^~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1470:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1472:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1472 | auto right = std::move(args[2].getExpression()); | ^~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1472:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:205 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[4], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[19], const char (&)[4], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1479:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ 1349 | .production("for_expression", "OF", "string_set", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1350 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1351 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1352 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1353 | TokenIt at = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1354 | Expression::Ptr offset = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1355 | | 1356 | if (!offset->isInt()) { | ~~~~~~~~~~~~~~~~~~~~~~~ 1357 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1358 | ss << "Operator 'at' expects integer on the right-hand side of the expression. Got " << offset->getText() << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1359 | error_handle(args[4].getTokenIt()->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1360 | } | ~ 1361 | | 1362 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), at, offset); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1363 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1365 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1366 | return output; | ~~~~~~~~~~~~~~ 1367 | }) | ~~ 1368 | .production("primary_expression", "PERCENT", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1369 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1370 | TokenIt percent = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1371 | std::uint64_t value = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~ 1372 | if (strToNum(for_expr->getText(), value)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1373 | { | ~ 1374 | if (value == 0 || value > 100) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1375 | { | ~ 1376 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1377 | ss << "Percentage must be between 1 and 100 (inclusive). Got " << value << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1378 | error_handle(percent->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1379 | } | ~ 1380 | } | ~ 1381 | auto percentual_expr = std::make_shared(std::move(for_expr), percent); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1382 | percentual_expr->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1383 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1384 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1385 | auto output = std::make_shared(std::move(percentual_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1386 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1387 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1388 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1389 | return output; | ~~~~~~~~~~~~~~ 1390 | }) | ~~ 1391 | .production("NOT", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1392 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1393 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1394 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1395 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1396 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1397 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1398 | return output; | ~~~~~~~~~~~~~~ 1399 | }) | ~~ 1400 | .production("DEFINED", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1401 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1402 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1403 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1404 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1405 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1406 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1407 | return output; | ~~~~~~~~~~~~~~ 1408 | }) | ~~ 1409 | .production("expression", "AND", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1410 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1411 | TokenIt and_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1412 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1413 | auto output = std::make_shared(std::move(left), and_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1414 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1415 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1416 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1417 | return output; | ~~~~~~~~~~~~~~ 1418 | }) | ~~ 1419 | .production("expression", "OR", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1420 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1421 | TokenIt or_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1422 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1423 | auto output = std::make_shared(std::move(left), or_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1424 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1425 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1426 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1427 | return output; | ~~~~~~~~~~~~~~ 1428 | }) | ~~ 1429 | .production("primary_expression", "LT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1430 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1431 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1432 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1433 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1434 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1435 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1436 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1437 | return output; | ~~~~~~~~~~~~~~ 1438 | }) | ~~ 1439 | .production("primary_expression", "GT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1440 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1441 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1442 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1443 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1444 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1445 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1446 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1447 | return output; | ~~~~~~~~~~~~~~ 1448 | }) | ~~ 1449 | .production("primary_expression", "LE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1450 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1451 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1452 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1453 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1454 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1455 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1456 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1457 | return output; | ~~~~~~~~~~~~~~ 1458 | }) | ~~ 1459 | .production("primary_expression", "GE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1460 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1461 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1462 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1463 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1464 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1465 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1466 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1467 | return output; | ~~~~~~~~~~~~~~ 1468 | }) | ~~ 1469 | .production("primary_expression", "EQ", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1470 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1471 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1472 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1473 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1474 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1475 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1476 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1477 | return output; | ~~~~~~~~~~~~~~ 1478 | }) | ~~ 1479 | .production("primary_expression", "NEQ", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1480 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1481 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1482 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1483 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1484 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1485 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1486 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1487 | return output; | ~~~~~~~~~~~~~~ 1488 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1480:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1480 | auto left = std::move(args[0].getExpression()); | ^~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1480:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1482:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1482 | auto right = std::move(args[2].getExpression()); | ^~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1482:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:206 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[9], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[19], const char (&)[9], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1489:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ 1349 | .production("for_expression", "OF", "string_set", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1350 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1351 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1352 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1353 | TokenIt at = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1354 | Expression::Ptr offset = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1355 | | 1356 | if (!offset->isInt()) { | ~~~~~~~~~~~~~~~~~~~~~~~ 1357 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1358 | ss << "Operator 'at' expects integer on the right-hand side of the expression. Got " << offset->getText() << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1359 | error_handle(args[4].getTokenIt()->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1360 | } | ~ 1361 | | 1362 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), at, offset); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1363 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1365 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1366 | return output; | ~~~~~~~~~~~~~~ 1367 | }) | ~~ 1368 | .production("primary_expression", "PERCENT", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1369 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1370 | TokenIt percent = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1371 | std::uint64_t value = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~ 1372 | if (strToNum(for_expr->getText(), value)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1373 | { | ~ 1374 | if (value == 0 || value > 100) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1375 | { | ~ 1376 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1377 | ss << "Percentage must be between 1 and 100 (inclusive). Got " << value << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1378 | error_handle(percent->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1379 | } | ~ 1380 | } | ~ 1381 | auto percentual_expr = std::make_shared(std::move(for_expr), percent); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1382 | percentual_expr->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1383 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1384 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1385 | auto output = std::make_shared(std::move(percentual_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1386 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1387 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1388 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1389 | return output; | ~~~~~~~~~~~~~~ 1390 | }) | ~~ 1391 | .production("NOT", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1392 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1393 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1394 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1395 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1396 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1397 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1398 | return output; | ~~~~~~~~~~~~~~ 1399 | }) | ~~ 1400 | .production("DEFINED", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1401 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1402 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1403 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1404 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1405 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1406 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1407 | return output; | ~~~~~~~~~~~~~~ 1408 | }) | ~~ 1409 | .production("expression", "AND", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1410 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1411 | TokenIt and_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1412 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1413 | auto output = std::make_shared(std::move(left), and_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1414 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1415 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1416 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1417 | return output; | ~~~~~~~~~~~~~~ 1418 | }) | ~~ 1419 | .production("expression", "OR", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1420 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1421 | TokenIt or_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1422 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1423 | auto output = std::make_shared(std::move(left), or_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1424 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1425 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1426 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1427 | return output; | ~~~~~~~~~~~~~~ 1428 | }) | ~~ 1429 | .production("primary_expression", "LT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1430 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1431 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1432 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1433 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1434 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1435 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1436 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1437 | return output; | ~~~~~~~~~~~~~~ 1438 | }) | ~~ 1439 | .production("primary_expression", "GT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1440 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1441 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1442 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1443 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1444 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1445 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1446 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1447 | return output; | ~~~~~~~~~~~~~~ 1448 | }) | ~~ 1449 | .production("primary_expression", "LE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1450 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1451 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1452 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1453 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1454 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1455 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1456 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1457 | return output; | ~~~~~~~~~~~~~~ 1458 | }) | ~~ 1459 | .production("primary_expression", "GE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1460 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1461 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1462 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1463 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1464 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1465 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1466 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1467 | return output; | ~~~~~~~~~~~~~~ 1468 | }) | ~~ 1469 | .production("primary_expression", "EQ", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1470 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1471 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1472 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1473 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1474 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1475 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1476 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1477 | return output; | ~~~~~~~~~~~~~~ 1478 | }) | ~~ 1479 | .production("primary_expression", "NEQ", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1480 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1481 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1482 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1483 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1484 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1485 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1486 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1487 | return output; | ~~~~~~~~~~~~~~ 1488 | }) | ~~ 1489 | .production("primary_expression", "CONTAINS", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1490 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1491 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1492 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1493 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1494 | error_handle(op_token->getLocation(), "operator 'contains' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1495 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1496 | error_handle(op_token->getLocation(), "operator 'contains' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1497 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1498 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1499 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1500 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1501 | return output; | ~~~~~~~~~~~~~~ 1502 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1490:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1490 | auto left = std::move(args[0].getExpression()); | ^~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1490:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1492:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1492 | auto right = std::move(args[2].getExpression()); | ^~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1492:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:207 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[10], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[19], const char (&)[10], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1503:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ 1349 | .production("for_expression", "OF", "string_set", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1350 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1351 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1352 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1353 | TokenIt at = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1354 | Expression::Ptr offset = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1355 | | 1356 | if (!offset->isInt()) { | ~~~~~~~~~~~~~~~~~~~~~~~ 1357 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1358 | ss << "Operator 'at' expects integer on the right-hand side of the expression. Got " << offset->getText() << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1359 | error_handle(args[4].getTokenIt()->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1360 | } | ~ 1361 | | 1362 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), at, offset); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1363 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1365 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1366 | return output; | ~~~~~~~~~~~~~~ 1367 | }) | ~~ 1368 | .production("primary_expression", "PERCENT", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1369 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1370 | TokenIt percent = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1371 | std::uint64_t value = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~ 1372 | if (strToNum(for_expr->getText(), value)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1373 | { | ~ 1374 | if (value == 0 || value > 100) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1375 | { | ~ 1376 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1377 | ss << "Percentage must be between 1 and 100 (inclusive). Got " << value << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1378 | error_handle(percent->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1379 | } | ~ 1380 | } | ~ 1381 | auto percentual_expr = std::make_shared(std::move(for_expr), percent); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1382 | percentual_expr->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1383 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1384 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1385 | auto output = std::make_shared(std::move(percentual_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1386 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1387 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1388 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1389 | return output; | ~~~~~~~~~~~~~~ 1390 | }) | ~~ 1391 | .production("NOT", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1392 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1393 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1394 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1395 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1396 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1397 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1398 | return output; | ~~~~~~~~~~~~~~ 1399 | }) | ~~ 1400 | .production("DEFINED", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1401 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1402 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1403 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1404 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1405 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1406 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1407 | return output; | ~~~~~~~~~~~~~~ 1408 | }) | ~~ 1409 | .production("expression", "AND", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1410 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1411 | TokenIt and_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1412 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1413 | auto output = std::make_shared(std::move(left), and_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1414 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1415 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1416 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1417 | return output; | ~~~~~~~~~~~~~~ 1418 | }) | ~~ 1419 | .production("expression", "OR", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1420 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1421 | TokenIt or_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1422 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1423 | auto output = std::make_shared(std::move(left), or_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1424 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1425 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1426 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1427 | return output; | ~~~~~~~~~~~~~~ 1428 | }) | ~~ 1429 | .production("primary_expression", "LT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1430 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1431 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1432 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1433 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1434 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1435 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1436 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1437 | return output; | ~~~~~~~~~~~~~~ 1438 | }) | ~~ 1439 | .production("primary_expression", "GT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1440 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1441 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1442 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1443 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1444 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1445 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1446 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1447 | return output; | ~~~~~~~~~~~~~~ 1448 | }) | ~~ 1449 | .production("primary_expression", "LE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1450 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1451 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1452 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1453 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1454 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1455 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1456 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1457 | return output; | ~~~~~~~~~~~~~~ 1458 | }) | ~~ 1459 | .production("primary_expression", "GE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1460 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1461 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1462 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1463 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1464 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1465 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1466 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1467 | return output; | ~~~~~~~~~~~~~~ 1468 | }) | ~~ 1469 | .production("primary_expression", "EQ", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1470 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1471 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1472 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1473 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1474 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1475 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1476 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1477 | return output; | ~~~~~~~~~~~~~~ 1478 | }) | ~~ 1479 | .production("primary_expression", "NEQ", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1480 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1481 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1482 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1483 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1484 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1485 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1486 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1487 | return output; | ~~~~~~~~~~~~~~ 1488 | }) | ~~ 1489 | .production("primary_expression", "CONTAINS", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1490 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1491 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1492 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1493 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1494 | error_handle(op_token->getLocation(), "operator 'contains' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1495 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1496 | error_handle(op_token->getLocation(), "operator 'contains' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1497 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1498 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1499 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1500 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1501 | return output; | ~~~~~~~~~~~~~~ 1502 | }) | ~~ 1503 | .production("primary_expression", "ICONTAINS", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1504 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1505 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1506 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1507 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1508 | error_handle(op_token->getLocation(), "operator 'icontains' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1509 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1510 | error_handle(op_token->getLocation(), "operator 'icontains' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1511 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1512 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1513 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1514 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1515 | return output; | ~~~~~~~~~~~~~~ 1516 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1504:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1504 | auto left = std::move(args[0].getExpression()); | ^~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1504:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1506:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1506 | auto right = std::move(args[2].getExpression()); | ^~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1506:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:208 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[7], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[8], const char (&)[7], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[19], const char (&)[8], const char (&)[7], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1517:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ 1349 | .production("for_expression", "OF", "string_set", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1350 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1351 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1352 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1353 | TokenIt at = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1354 | Expression::Ptr offset = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1355 | | 1356 | if (!offset->isInt()) { | ~~~~~~~~~~~~~~~~~~~~~~~ 1357 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1358 | ss << "Operator 'at' expects integer on the right-hand side of the expression. Got " << offset->getText() << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1359 | error_handle(args[4].getTokenIt()->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1360 | } | ~ 1361 | | 1362 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), at, offset); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1363 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1365 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1366 | return output; | ~~~~~~~~~~~~~~ 1367 | }) | ~~ 1368 | .production("primary_expression", "PERCENT", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1369 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1370 | TokenIt percent = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1371 | std::uint64_t value = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~ 1372 | if (strToNum(for_expr->getText(), value)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1373 | { | ~ 1374 | if (value == 0 || value > 100) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1375 | { | ~ 1376 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1377 | ss << "Percentage must be between 1 and 100 (inclusive). Got " << value << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1378 | error_handle(percent->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1379 | } | ~ 1380 | } | ~ 1381 | auto percentual_expr = std::make_shared(std::move(for_expr), percent); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1382 | percentual_expr->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1383 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1384 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1385 | auto output = std::make_shared(std::move(percentual_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1386 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1387 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1388 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1389 | return output; | ~~~~~~~~~~~~~~ 1390 | }) | ~~ 1391 | .production("NOT", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1392 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1393 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1394 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1395 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1396 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1397 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1398 | return output; | ~~~~~~~~~~~~~~ 1399 | }) | ~~ 1400 | .production("DEFINED", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1401 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1402 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1403 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1404 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1405 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1406 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1407 | return output; | ~~~~~~~~~~~~~~ 1408 | }) | ~~ 1409 | .production("expression", "AND", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1410 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1411 | TokenIt and_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1412 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1413 | auto output = std::make_shared(std::move(left), and_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1414 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1415 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1416 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1417 | return output; | ~~~~~~~~~~~~~~ 1418 | }) | ~~ 1419 | .production("expression", "OR", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1420 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1421 | TokenIt or_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1422 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1423 | auto output = std::make_shared(std::move(left), or_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1424 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1425 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1426 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1427 | return output; | ~~~~~~~~~~~~~~ 1428 | }) | ~~ 1429 | .production("primary_expression", "LT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1430 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1431 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1432 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1433 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1434 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1435 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1436 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1437 | return output; | ~~~~~~~~~~~~~~ 1438 | }) | ~~ 1439 | .production("primary_expression", "GT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1440 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1441 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1442 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1443 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1444 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1445 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1446 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1447 | return output; | ~~~~~~~~~~~~~~ 1448 | }) | ~~ 1449 | .production("primary_expression", "LE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1450 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1451 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1452 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1453 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1454 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1455 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1456 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1457 | return output; | ~~~~~~~~~~~~~~ 1458 | }) | ~~ 1459 | .production("primary_expression", "GE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1460 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1461 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1462 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1463 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1464 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1465 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1466 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1467 | return output; | ~~~~~~~~~~~~~~ 1468 | }) | ~~ 1469 | .production("primary_expression", "EQ", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1470 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1471 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1472 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1473 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1474 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1475 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1476 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1477 | return output; | ~~~~~~~~~~~~~~ 1478 | }) | ~~ 1479 | .production("primary_expression", "NEQ", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1480 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1481 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1482 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1483 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1484 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1485 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1486 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1487 | return output; | ~~~~~~~~~~~~~~ 1488 | }) | ~~ 1489 | .production("primary_expression", "CONTAINS", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1490 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1491 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1492 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1493 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1494 | error_handle(op_token->getLocation(), "operator 'contains' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1495 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1496 | error_handle(op_token->getLocation(), "operator 'contains' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1497 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1498 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1499 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1500 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1501 | return output; | ~~~~~~~~~~~~~~ 1502 | }) | ~~ 1503 | .production("primary_expression", "ICONTAINS", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1504 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1505 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1506 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1507 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1508 | error_handle(op_token->getLocation(), "operator 'icontains' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1509 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1510 | error_handle(op_token->getLocation(), "operator 'icontains' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1511 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1512 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1513 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1514 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1515 | return output; | ~~~~~~~~~~~~~~ 1516 | }) | ~~ 1517 | .production("primary_expression", "MATCHES", "regexp", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1518 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1519 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1520 | auto right = std::move(args[2].getYaramodString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1521 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1522 | error_handle(op_token->getLocation(), "operator 'matches' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1523 | auto regexp_expression = std::make_shared(std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1524 | auto output = std::make_shared(std::move(left), op_token, std::move(regexp_expression)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1525 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1526 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1527 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1528 | return output; | ~~~~~~~~~~~~~~ 1529 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1518:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1518 | auto left = std::move(args[0].getExpression()); | ^~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1518:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:209 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[11], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[19], const char (&)[11], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1530:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ 1349 | .production("for_expression", "OF", "string_set", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1350 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1351 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1352 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1353 | TokenIt at = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1354 | Expression::Ptr offset = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1355 | | 1356 | if (!offset->isInt()) { | ~~~~~~~~~~~~~~~~~~~~~~~ 1357 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1358 | ss << "Operator 'at' expects integer on the right-hand side of the expression. Got " << offset->getText() << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1359 | error_handle(args[4].getTokenIt()->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1360 | } | ~ 1361 | | 1362 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), at, offset); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1363 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1365 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1366 | return output; | ~~~~~~~~~~~~~~ 1367 | }) | ~~ 1368 | .production("primary_expression", "PERCENT", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1369 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1370 | TokenIt percent = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1371 | std::uint64_t value = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~ 1372 | if (strToNum(for_expr->getText(), value)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1373 | { | ~ 1374 | if (value == 0 || value > 100) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1375 | { | ~ 1376 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1377 | ss << "Percentage must be between 1 and 100 (inclusive). Got " << value << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1378 | error_handle(percent->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1379 | } | ~ 1380 | } | ~ 1381 | auto percentual_expr = std::make_shared(std::move(for_expr), percent); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1382 | percentual_expr->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1383 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1384 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1385 | auto output = std::make_shared(std::move(percentual_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1386 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1387 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1388 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1389 | return output; | ~~~~~~~~~~~~~~ 1390 | }) | ~~ 1391 | .production("NOT", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1392 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1393 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1394 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1395 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1396 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1397 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1398 | return output; | ~~~~~~~~~~~~~~ 1399 | }) | ~~ 1400 | .production("DEFINED", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1401 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1402 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1403 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1404 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1405 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1406 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1407 | return output; | ~~~~~~~~~~~~~~ 1408 | }) | ~~ 1409 | .production("expression", "AND", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1410 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1411 | TokenIt and_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1412 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1413 | auto output = std::make_shared(std::move(left), and_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1414 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1415 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1416 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1417 | return output; | ~~~~~~~~~~~~~~ 1418 | }) | ~~ 1419 | .production("expression", "OR", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1420 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1421 | TokenIt or_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1422 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1423 | auto output = std::make_shared(std::move(left), or_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1424 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1425 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1426 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1427 | return output; | ~~~~~~~~~~~~~~ 1428 | }) | ~~ 1429 | .production("primary_expression", "LT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1430 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1431 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1432 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1433 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1434 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1435 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1436 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1437 | return output; | ~~~~~~~~~~~~~~ 1438 | }) | ~~ 1439 | .production("primary_expression", "GT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1440 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1441 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1442 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1443 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1444 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1445 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1446 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1447 | return output; | ~~~~~~~~~~~~~~ 1448 | }) | ~~ 1449 | .production("primary_expression", "LE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1450 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1451 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1452 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1453 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1454 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1455 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1456 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1457 | return output; | ~~~~~~~~~~~~~~ 1458 | }) | ~~ 1459 | .production("primary_expression", "GE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1460 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1461 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1462 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1463 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1464 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1465 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1466 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1467 | return output; | ~~~~~~~~~~~~~~ 1468 | }) | ~~ 1469 | .production("primary_expression", "EQ", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1470 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1471 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1472 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1473 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1474 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1475 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1476 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1477 | return output; | ~~~~~~~~~~~~~~ 1478 | }) | ~~ 1479 | .production("primary_expression", "NEQ", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1480 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1481 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1482 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1483 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1484 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1485 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1486 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1487 | return output; | ~~~~~~~~~~~~~~ 1488 | }) | ~~ 1489 | .production("primary_expression", "CONTAINS", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1490 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1491 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1492 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1493 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1494 | error_handle(op_token->getLocation(), "operator 'contains' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1495 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1496 | error_handle(op_token->getLocation(), "operator 'contains' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1497 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1498 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1499 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1500 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1501 | return output; | ~~~~~~~~~~~~~~ 1502 | }) | ~~ 1503 | .production("primary_expression", "ICONTAINS", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1504 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1505 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1506 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1507 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1508 | error_handle(op_token->getLocation(), "operator 'icontains' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1509 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1510 | error_handle(op_token->getLocation(), "operator 'icontains' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1511 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1512 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1513 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1514 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1515 | return output; | ~~~~~~~~~~~~~~ 1516 | }) | ~~ 1517 | .production("primary_expression", "MATCHES", "regexp", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1518 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1519 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1520 | auto right = std::move(args[2].getYaramodString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1521 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1522 | error_handle(op_token->getLocation(), "operator 'matches' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1523 | auto regexp_expression = std::make_shared(std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1524 | auto output = std::make_shared(std::move(left), op_token, std::move(regexp_expression)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1525 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1526 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1527 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1528 | return output; | ~~~~~~~~~~~~~~ 1529 | }) | ~~ 1530 | .production("primary_expression", "STARTSWITH", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1531 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1532 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1533 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1534 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1535 | error_handle(op_token->getLocation(), "operator 'startswith' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1536 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1537 | error_handle(op_token->getLocation(), "operator 'startswith' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1538 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1539 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1540 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1541 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1542 | return output; | ~~~~~~~~~~~~~~ 1543 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1531:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1531 | auto left = std::move(args[0].getExpression()); | ^~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1531:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1533:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1533 | auto right = std::move(args[2].getExpression()); | ^~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1533:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:210 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[12], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[19], const char (&)[12], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1544:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ 1349 | .production("for_expression", "OF", "string_set", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1350 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1351 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1352 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1353 | TokenIt at = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1354 | Expression::Ptr offset = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1355 | | 1356 | if (!offset->isInt()) { | ~~~~~~~~~~~~~~~~~~~~~~~ 1357 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1358 | ss << "Operator 'at' expects integer on the right-hand side of the expression. Got " << offset->getText() << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1359 | error_handle(args[4].getTokenIt()->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1360 | } | ~ 1361 | | 1362 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), at, offset); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1363 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1365 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1366 | return output; | ~~~~~~~~~~~~~~ 1367 | }) | ~~ 1368 | .production("primary_expression", "PERCENT", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1369 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1370 | TokenIt percent = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1371 | std::uint64_t value = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~ 1372 | if (strToNum(for_expr->getText(), value)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1373 | { | ~ 1374 | if (value == 0 || value > 100) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1375 | { | ~ 1376 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1377 | ss << "Percentage must be between 1 and 100 (inclusive). Got " << value << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1378 | error_handle(percent->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1379 | } | ~ 1380 | } | ~ 1381 | auto percentual_expr = std::make_shared(std::move(for_expr), percent); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1382 | percentual_expr->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1383 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1384 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1385 | auto output = std::make_shared(std::move(percentual_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1386 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1387 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1388 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1389 | return output; | ~~~~~~~~~~~~~~ 1390 | }) | ~~ 1391 | .production("NOT", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1392 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1393 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1394 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1395 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1396 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1397 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1398 | return output; | ~~~~~~~~~~~~~~ 1399 | }) | ~~ 1400 | .production("DEFINED", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1401 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1402 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1403 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1404 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1405 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1406 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1407 | return output; | ~~~~~~~~~~~~~~ 1408 | }) | ~~ 1409 | .production("expression", "AND", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1410 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1411 | TokenIt and_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1412 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1413 | auto output = std::make_shared(std::move(left), and_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1414 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1415 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1416 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1417 | return output; | ~~~~~~~~~~~~~~ 1418 | }) | ~~ 1419 | .production("expression", "OR", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1420 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1421 | TokenIt or_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1422 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1423 | auto output = std::make_shared(std::move(left), or_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1424 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1425 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1426 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1427 | return output; | ~~~~~~~~~~~~~~ 1428 | }) | ~~ 1429 | .production("primary_expression", "LT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1430 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1431 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1432 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1433 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1434 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1435 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1436 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1437 | return output; | ~~~~~~~~~~~~~~ 1438 | }) | ~~ 1439 | .production("primary_expression", "GT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1440 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1441 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1442 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1443 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1444 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1445 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1446 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1447 | return output; | ~~~~~~~~~~~~~~ 1448 | }) | ~~ 1449 | .production("primary_expression", "LE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1450 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1451 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1452 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1453 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1454 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1455 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1456 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1457 | return output; | ~~~~~~~~~~~~~~ 1458 | }) | ~~ 1459 | .production("primary_expression", "GE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1460 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1461 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1462 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1463 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1464 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1465 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1466 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1467 | return output; | ~~~~~~~~~~~~~~ 1468 | }) | ~~ 1469 | .production("primary_expression", "EQ", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1470 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1471 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1472 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1473 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1474 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1475 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1476 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1477 | return output; | ~~~~~~~~~~~~~~ 1478 | }) | ~~ 1479 | .production("primary_expression", "NEQ", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1480 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1481 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1482 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1483 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1484 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1485 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1486 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1487 | return output; | ~~~~~~~~~~~~~~ 1488 | }) | ~~ 1489 | .production("primary_expression", "CONTAINS", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1490 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1491 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1492 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1493 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1494 | error_handle(op_token->getLocation(), "operator 'contains' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1495 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1496 | error_handle(op_token->getLocation(), "operator 'contains' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1497 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1498 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1499 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1500 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1501 | return output; | ~~~~~~~~~~~~~~ 1502 | }) | ~~ 1503 | .production("primary_expression", "ICONTAINS", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1504 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1505 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1506 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1507 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1508 | error_handle(op_token->getLocation(), "operator 'icontains' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1509 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1510 | error_handle(op_token->getLocation(), "operator 'icontains' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1511 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1512 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1513 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1514 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1515 | return output; | ~~~~~~~~~~~~~~ 1516 | }) | ~~ 1517 | .production("primary_expression", "MATCHES", "regexp", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1518 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1519 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1520 | auto right = std::move(args[2].getYaramodString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1521 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1522 | error_handle(op_token->getLocation(), "operator 'matches' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1523 | auto regexp_expression = std::make_shared(std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1524 | auto output = std::make_shared(std::move(left), op_token, std::move(regexp_expression)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1525 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1526 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1527 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1528 | return output; | ~~~~~~~~~~~~~~ 1529 | }) | ~~ 1530 | .production("primary_expression", "STARTSWITH", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1531 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1532 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1533 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1534 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1535 | error_handle(op_token->getLocation(), "operator 'startswith' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1536 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1537 | error_handle(op_token->getLocation(), "operator 'startswith' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1538 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1539 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1540 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1541 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1542 | return output; | ~~~~~~~~~~~~~~ 1543 | }) | ~~ 1544 | .production("primary_expression", "ISTARTSWITH", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1545 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1546 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1547 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1548 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1549 | error_handle(op_token->getLocation(), "operator 'istartswith' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1550 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1551 | error_handle(op_token->getLocation(), "operator 'istartswith' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1552 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1553 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1554 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1555 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1556 | return output; | ~~~~~~~~~~~~~~ 1557 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1545:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1545 | auto left = std::move(args[0].getExpression()); | ^~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1545:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1547:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1547 | auto right = std::move(args[2].getExpression()); | ^~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1547:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:211 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[9], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[19], const char (&)[9], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1558:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ 1349 | .production("for_expression", "OF", "string_set", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1350 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1351 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1352 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1353 | TokenIt at = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1354 | Expression::Ptr offset = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1355 | | 1356 | if (!offset->isInt()) { | ~~~~~~~~~~~~~~~~~~~~~~~ 1357 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1358 | ss << "Operator 'at' expects integer on the right-hand side of the expression. Got " << offset->getText() << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1359 | error_handle(args[4].getTokenIt()->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1360 | } | ~ 1361 | | 1362 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), at, offset); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1363 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1365 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1366 | return output; | ~~~~~~~~~~~~~~ 1367 | }) | ~~ 1368 | .production("primary_expression", "PERCENT", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1369 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1370 | TokenIt percent = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1371 | std::uint64_t value = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~ 1372 | if (strToNum(for_expr->getText(), value)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1373 | { | ~ 1374 | if (value == 0 || value > 100) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1375 | { | ~ 1376 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1377 | ss << "Percentage must be between 1 and 100 (inclusive). Got " << value << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1378 | error_handle(percent->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1379 | } | ~ 1380 | } | ~ 1381 | auto percentual_expr = std::make_shared(std::move(for_expr), percent); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1382 | percentual_expr->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1383 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1384 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1385 | auto output = std::make_shared(std::move(percentual_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1386 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1387 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1388 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1389 | return output; | ~~~~~~~~~~~~~~ 1390 | }) | ~~ 1391 | .production("NOT", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1392 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1393 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1394 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1395 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1396 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1397 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1398 | return output; | ~~~~~~~~~~~~~~ 1399 | }) | ~~ 1400 | .production("DEFINED", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1401 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1402 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1403 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1404 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1405 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1406 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1407 | return output; | ~~~~~~~~~~~~~~ 1408 | }) | ~~ 1409 | .production("expression", "AND", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1410 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1411 | TokenIt and_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1412 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1413 | auto output = std::make_shared(std::move(left), and_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1414 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1415 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1416 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1417 | return output; | ~~~~~~~~~~~~~~ 1418 | }) | ~~ 1419 | .production("expression", "OR", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1420 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1421 | TokenIt or_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1422 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1423 | auto output = std::make_shared(std::move(left), or_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1424 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1425 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1426 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1427 | return output; | ~~~~~~~~~~~~~~ 1428 | }) | ~~ 1429 | .production("primary_expression", "LT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1430 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1431 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1432 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1433 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1434 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1435 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1436 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1437 | return output; | ~~~~~~~~~~~~~~ 1438 | }) | ~~ 1439 | .production("primary_expression", "GT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1440 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1441 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1442 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1443 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1444 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1445 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1446 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1447 | return output; | ~~~~~~~~~~~~~~ 1448 | }) | ~~ 1449 | .production("primary_expression", "LE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1450 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1451 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1452 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1453 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1454 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1455 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1456 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1457 | return output; | ~~~~~~~~~~~~~~ 1458 | }) | ~~ 1459 | .production("primary_expression", "GE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1460 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1461 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1462 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1463 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1464 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1465 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1466 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1467 | return output; | ~~~~~~~~~~~~~~ 1468 | }) | ~~ 1469 | .production("primary_expression", "EQ", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1470 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1471 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1472 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1473 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1474 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1475 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1476 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1477 | return output; | ~~~~~~~~~~~~~~ 1478 | }) | ~~ 1479 | .production("primary_expression", "NEQ", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1480 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1481 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1482 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1483 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1484 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1485 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1486 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1487 | return output; | ~~~~~~~~~~~~~~ 1488 | }) | ~~ 1489 | .production("primary_expression", "CONTAINS", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1490 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1491 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1492 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1493 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1494 | error_handle(op_token->getLocation(), "operator 'contains' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1495 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1496 | error_handle(op_token->getLocation(), "operator 'contains' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1497 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1498 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1499 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1500 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1501 | return output; | ~~~~~~~~~~~~~~ 1502 | }) | ~~ 1503 | .production("primary_expression", "ICONTAINS", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1504 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1505 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1506 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1507 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1508 | error_handle(op_token->getLocation(), "operator 'icontains' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1509 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1510 | error_handle(op_token->getLocation(), "operator 'icontains' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1511 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1512 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1513 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1514 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1515 | return output; | ~~~~~~~~~~~~~~ 1516 | }) | ~~ 1517 | .production("primary_expression", "MATCHES", "regexp", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1518 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1519 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1520 | auto right = std::move(args[2].getYaramodString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1521 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1522 | error_handle(op_token->getLocation(), "operator 'matches' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1523 | auto regexp_expression = std::make_shared(std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1524 | auto output = std::make_shared(std::move(left), op_token, std::move(regexp_expression)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1525 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1526 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1527 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1528 | return output; | ~~~~~~~~~~~~~~ 1529 | }) | ~~ 1530 | .production("primary_expression", "STARTSWITH", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1531 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1532 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1533 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1534 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1535 | error_handle(op_token->getLocation(), "operator 'startswith' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1536 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1537 | error_handle(op_token->getLocation(), "operator 'startswith' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1538 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1539 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1540 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1541 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1542 | return output; | ~~~~~~~~~~~~~~ 1543 | }) | ~~ 1544 | .production("primary_expression", "ISTARTSWITH", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1545 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1546 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1547 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1548 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1549 | error_handle(op_token->getLocation(), "operator 'istartswith' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1550 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1551 | error_handle(op_token->getLocation(), "operator 'istartswith' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1552 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1553 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1554 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1555 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1556 | return output; | ~~~~~~~~~~~~~~ 1557 | }) | ~~ 1558 | .production("primary_expression", "ENDSWITH", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1559 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1560 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1561 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1562 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1563 | error_handle(op_token->getLocation(), "operator 'endswith' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1564 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1565 | error_handle(op_token->getLocation(), "operator 'endswith' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1566 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1567 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1568 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1569 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1570 | return output; | ~~~~~~~~~~~~~~ 1571 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1559:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1559 | auto left = std::move(args[0].getExpression()); | ^~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1559:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1561:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1561 | auto right = std::move(args[2].getExpression()); | ^~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1561:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:212 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[10], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[19], const char (&)[10], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1572:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ 1349 | .production("for_expression", "OF", "string_set", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1350 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1351 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1352 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1353 | TokenIt at = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1354 | Expression::Ptr offset = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1355 | | 1356 | if (!offset->isInt()) { | ~~~~~~~~~~~~~~~~~~~~~~~ 1357 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1358 | ss << "Operator 'at' expects integer on the right-hand side of the expression. Got " << offset->getText() << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1359 | error_handle(args[4].getTokenIt()->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1360 | } | ~ 1361 | | 1362 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), at, offset); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1363 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1365 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1366 | return output; | ~~~~~~~~~~~~~~ 1367 | }) | ~~ 1368 | .production("primary_expression", "PERCENT", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1369 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1370 | TokenIt percent = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1371 | std::uint64_t value = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~ 1372 | if (strToNum(for_expr->getText(), value)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1373 | { | ~ 1374 | if (value == 0 || value > 100) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1375 | { | ~ 1376 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1377 | ss << "Percentage must be between 1 and 100 (inclusive). Got " << value << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1378 | error_handle(percent->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1379 | } | ~ 1380 | } | ~ 1381 | auto percentual_expr = std::make_shared(std::move(for_expr), percent); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1382 | percentual_expr->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1383 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1384 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1385 | auto output = std::make_shared(std::move(percentual_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1386 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1387 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1388 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1389 | return output; | ~~~~~~~~~~~~~~ 1390 | }) | ~~ 1391 | .production("NOT", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1392 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1393 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1394 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1395 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1396 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1397 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1398 | return output; | ~~~~~~~~~~~~~~ 1399 | }) | ~~ 1400 | .production("DEFINED", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1401 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1402 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1403 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1404 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1405 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1406 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1407 | return output; | ~~~~~~~~~~~~~~ 1408 | }) | ~~ 1409 | .production("expression", "AND", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1410 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1411 | TokenIt and_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1412 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1413 | auto output = std::make_shared(std::move(left), and_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1414 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1415 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1416 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1417 | return output; | ~~~~~~~~~~~~~~ 1418 | }) | ~~ 1419 | .production("expression", "OR", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1420 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1421 | TokenIt or_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1422 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1423 | auto output = std::make_shared(std::move(left), or_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1424 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1425 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1426 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1427 | return output; | ~~~~~~~~~~~~~~ 1428 | }) | ~~ 1429 | .production("primary_expression", "LT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1430 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1431 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1432 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1433 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1434 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1435 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1436 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1437 | return output; | ~~~~~~~~~~~~~~ 1438 | }) | ~~ 1439 | .production("primary_expression", "GT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1440 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1441 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1442 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1443 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1444 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1445 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1446 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1447 | return output; | ~~~~~~~~~~~~~~ 1448 | }) | ~~ 1449 | .production("primary_expression", "LE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1450 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1451 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1452 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1453 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1454 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1455 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1456 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1457 | return output; | ~~~~~~~~~~~~~~ 1458 | }) | ~~ 1459 | .production("primary_expression", "GE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1460 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1461 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1462 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1463 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1464 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1465 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1466 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1467 | return output; | ~~~~~~~~~~~~~~ 1468 | }) | ~~ 1469 | .production("primary_expression", "EQ", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1470 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1471 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1472 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1473 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1474 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1475 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1476 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1477 | return output; | ~~~~~~~~~~~~~~ 1478 | }) | ~~ 1479 | .production("primary_expression", "NEQ", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1480 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1481 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1482 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1483 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1484 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1485 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1486 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1487 | return output; | ~~~~~~~~~~~~~~ 1488 | }) | ~~ 1489 | .production("primary_expression", "CONTAINS", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1490 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1491 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1492 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1493 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1494 | error_handle(op_token->getLocation(), "operator 'contains' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1495 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1496 | error_handle(op_token->getLocation(), "operator 'contains' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1497 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1498 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1499 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1500 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1501 | return output; | ~~~~~~~~~~~~~~ 1502 | }) | ~~ 1503 | .production("primary_expression", "ICONTAINS", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1504 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1505 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1506 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1507 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1508 | error_handle(op_token->getLocation(), "operator 'icontains' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1509 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1510 | error_handle(op_token->getLocation(), "operator 'icontains' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1511 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1512 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1513 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1514 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1515 | return output; | ~~~~~~~~~~~~~~ 1516 | }) | ~~ 1517 | .production("primary_expression", "MATCHES", "regexp", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1518 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1519 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1520 | auto right = std::move(args[2].getYaramodString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1521 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1522 | error_handle(op_token->getLocation(), "operator 'matches' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1523 | auto regexp_expression = std::make_shared(std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1524 | auto output = std::make_shared(std::move(left), op_token, std::move(regexp_expression)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1525 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1526 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1527 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1528 | return output; | ~~~~~~~~~~~~~~ 1529 | }) | ~~ 1530 | .production("primary_expression", "STARTSWITH", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1531 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1532 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1533 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1534 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1535 | error_handle(op_token->getLocation(), "operator 'startswith' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1536 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1537 | error_handle(op_token->getLocation(), "operator 'startswith' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1538 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1539 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1540 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1541 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1542 | return output; | ~~~~~~~~~~~~~~ 1543 | }) | ~~ 1544 | .production("primary_expression", "ISTARTSWITH", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1545 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1546 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1547 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1548 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1549 | error_handle(op_token->getLocation(), "operator 'istartswith' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1550 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1551 | error_handle(op_token->getLocation(), "operator 'istartswith' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1552 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1553 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1554 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1555 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1556 | return output; | ~~~~~~~~~~~~~~ 1557 | }) | ~~ 1558 | .production("primary_expression", "ENDSWITH", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1559 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1560 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1561 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1562 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1563 | error_handle(op_token->getLocation(), "operator 'endswith' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1564 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1565 | error_handle(op_token->getLocation(), "operator 'endswith' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1566 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1567 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1568 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1569 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1570 | return output; | ~~~~~~~~~~~~~~ 1571 | }) | ~~ 1572 | .production("primary_expression", "IENDSWITH", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1573 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1574 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1575 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1576 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1577 | error_handle(op_token->getLocation(), "operator 'iendswith' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1578 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1579 | error_handle(op_token->getLocation(), "operator 'iendswith' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1580 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1581 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1582 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1583 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1584 | return output; | ~~~~~~~~~~~~~~ 1585 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1573:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1573 | auto left = std::move(args[0].getExpression()); | ^~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1573:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1575:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1575 | auto right = std::move(args[2].getExpression()); | ^~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1575:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:213 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[8], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[19], const char (&)[8], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1586:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ 1349 | .production("for_expression", "OF", "string_set", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1350 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1351 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1352 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1353 | TokenIt at = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1354 | Expression::Ptr offset = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1355 | | 1356 | if (!offset->isInt()) { | ~~~~~~~~~~~~~~~~~~~~~~~ 1357 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1358 | ss << "Operator 'at' expects integer on the right-hand side of the expression. Got " << offset->getText() << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1359 | error_handle(args[4].getTokenIt()->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1360 | } | ~ 1361 | | 1362 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), at, offset); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1363 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1365 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1366 | return output; | ~~~~~~~~~~~~~~ 1367 | }) | ~~ 1368 | .production("primary_expression", "PERCENT", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1369 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1370 | TokenIt percent = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1371 | std::uint64_t value = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~ 1372 | if (strToNum(for_expr->getText(), value)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1373 | { | ~ 1374 | if (value == 0 || value > 100) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1375 | { | ~ 1376 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1377 | ss << "Percentage must be between 1 and 100 (inclusive). Got " << value << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1378 | error_handle(percent->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1379 | } | ~ 1380 | } | ~ 1381 | auto percentual_expr = std::make_shared(std::move(for_expr), percent); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1382 | percentual_expr->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1383 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1384 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1385 | auto output = std::make_shared(std::move(percentual_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1386 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1387 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1388 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1389 | return output; | ~~~~~~~~~~~~~~ 1390 | }) | ~~ 1391 | .production("NOT", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1392 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1393 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1394 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1395 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1396 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1397 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1398 | return output; | ~~~~~~~~~~~~~~ 1399 | }) | ~~ 1400 | .production("DEFINED", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1401 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1402 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1403 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1404 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1405 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1406 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1407 | return output; | ~~~~~~~~~~~~~~ 1408 | }) | ~~ 1409 | .production("expression", "AND", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1410 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1411 | TokenIt and_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1412 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1413 | auto output = std::make_shared(std::move(left), and_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1414 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1415 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1416 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1417 | return output; | ~~~~~~~~~~~~~~ 1418 | }) | ~~ 1419 | .production("expression", "OR", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1420 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1421 | TokenIt or_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1422 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1423 | auto output = std::make_shared(std::move(left), or_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1424 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1425 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1426 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1427 | return output; | ~~~~~~~~~~~~~~ 1428 | }) | ~~ 1429 | .production("primary_expression", "LT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1430 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1431 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1432 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1433 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1434 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1435 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1436 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1437 | return output; | ~~~~~~~~~~~~~~ 1438 | }) | ~~ 1439 | .production("primary_expression", "GT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1440 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1441 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1442 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1443 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1444 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1445 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1446 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1447 | return output; | ~~~~~~~~~~~~~~ 1448 | }) | ~~ 1449 | .production("primary_expression", "LE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1450 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1451 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1452 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1453 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1454 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1455 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1456 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1457 | return output; | ~~~~~~~~~~~~~~ 1458 | }) | ~~ 1459 | .production("primary_expression", "GE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1460 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1461 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1462 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1463 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1464 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1465 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1466 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1467 | return output; | ~~~~~~~~~~~~~~ 1468 | }) | ~~ 1469 | .production("primary_expression", "EQ", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1470 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1471 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1472 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1473 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1474 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1475 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1476 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1477 | return output; | ~~~~~~~~~~~~~~ 1478 | }) | ~~ 1479 | .production("primary_expression", "NEQ", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1480 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1481 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1482 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1483 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1484 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1485 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1486 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1487 | return output; | ~~~~~~~~~~~~~~ 1488 | }) | ~~ 1489 | .production("primary_expression", "CONTAINS", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1490 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1491 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1492 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1493 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1494 | error_handle(op_token->getLocation(), "operator 'contains' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1495 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1496 | error_handle(op_token->getLocation(), "operator 'contains' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1497 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1498 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1499 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1500 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1501 | return output; | ~~~~~~~~~~~~~~ 1502 | }) | ~~ 1503 | .production("primary_expression", "ICONTAINS", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1504 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1505 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1506 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1507 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1508 | error_handle(op_token->getLocation(), "operator 'icontains' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1509 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1510 | error_handle(op_token->getLocation(), "operator 'icontains' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1511 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1512 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1513 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1514 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1515 | return output; | ~~~~~~~~~~~~~~ 1516 | }) | ~~ 1517 | .production("primary_expression", "MATCHES", "regexp", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1518 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1519 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1520 | auto right = std::move(args[2].getYaramodString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1521 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1522 | error_handle(op_token->getLocation(), "operator 'matches' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1523 | auto regexp_expression = std::make_shared(std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1524 | auto output = std::make_shared(std::move(left), op_token, std::move(regexp_expression)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1525 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1526 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1527 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1528 | return output; | ~~~~~~~~~~~~~~ 1529 | }) | ~~ 1530 | .production("primary_expression", "STARTSWITH", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1531 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1532 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1533 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1534 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1535 | error_handle(op_token->getLocation(), "operator 'startswith' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1536 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1537 | error_handle(op_token->getLocation(), "operator 'startswith' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1538 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1539 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1540 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1541 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1542 | return output; | ~~~~~~~~~~~~~~ 1543 | }) | ~~ 1544 | .production("primary_expression", "ISTARTSWITH", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1545 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1546 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1547 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1548 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1549 | error_handle(op_token->getLocation(), "operator 'istartswith' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1550 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1551 | error_handle(op_token->getLocation(), "operator 'istartswith' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1552 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1553 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1554 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1555 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1556 | return output; | ~~~~~~~~~~~~~~ 1557 | }) | ~~ 1558 | .production("primary_expression", "ENDSWITH", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1559 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1560 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1561 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1562 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1563 | error_handle(op_token->getLocation(), "operator 'endswith' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1564 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1565 | error_handle(op_token->getLocation(), "operator 'endswith' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1566 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1567 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1568 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1569 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1570 | return output; | ~~~~~~~~~~~~~~ 1571 | }) | ~~ 1572 | .production("primary_expression", "IENDSWITH", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1573 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1574 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1575 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1576 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1577 | error_handle(op_token->getLocation(), "operator 'iendswith' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1578 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1579 | error_handle(op_token->getLocation(), "operator 'iendswith' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1580 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1581 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1582 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1583 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1584 | return output; | ~~~~~~~~~~~~~~ 1585 | }) | ~~ 1586 | .production("primary_expression", "IEQUALS", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1587 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1588 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1589 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1590 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1591 | error_handle(op_token->getLocation(), "operator 'iequals' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1592 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1593 | error_handle(op_token->getLocation(), "operator 'iequals' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1594 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1595 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1596 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1597 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1598 | return output; | ~~~~~~~~~~~~~~ 1599 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1587:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1587 | auto left = std::move(args[0].getExpression()); | ^~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1587:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1589:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1589 | auto right = std::move(args[2].getExpression()); | ^~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1589:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:215 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1603:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ 1349 | .production("for_expression", "OF", "string_set", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1350 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1351 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1352 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1353 | TokenIt at = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1354 | Expression::Ptr offset = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1355 | | 1356 | if (!offset->isInt()) { | ~~~~~~~~~~~~~~~~~~~~~~~ 1357 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1358 | ss << "Operator 'at' expects integer on the right-hand side of the expression. Got " << offset->getText() << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1359 | error_handle(args[4].getTokenIt()->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1360 | } | ~ 1361 | | 1362 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), at, offset); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1363 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1365 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1366 | return output; | ~~~~~~~~~~~~~~ 1367 | }) | ~~ 1368 | .production("primary_expression", "PERCENT", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1369 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1370 | TokenIt percent = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1371 | std::uint64_t value = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~ 1372 | if (strToNum(for_expr->getText(), value)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1373 | { | ~ 1374 | if (value == 0 || value > 100) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1375 | { | ~ 1376 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1377 | ss << "Percentage must be between 1 and 100 (inclusive). Got " << value << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1378 | error_handle(percent->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1379 | } | ~ 1380 | } | ~ 1381 | auto percentual_expr = std::make_shared(std::move(for_expr), percent); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1382 | percentual_expr->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1383 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1384 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1385 | auto output = std::make_shared(std::move(percentual_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1386 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1387 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1388 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1389 | return output; | ~~~~~~~~~~~~~~ 1390 | }) | ~~ 1391 | .production("NOT", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1392 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1393 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1394 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1395 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1396 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1397 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1398 | return output; | ~~~~~~~~~~~~~~ 1399 | }) | ~~ 1400 | .production("DEFINED", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1401 | TokenIt not_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1402 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1403 | auto output = std::make_shared(not_token, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1404 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1405 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1406 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1407 | return output; | ~~~~~~~~~~~~~~ 1408 | }) | ~~ 1409 | .production("expression", "AND", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1410 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1411 | TokenIt and_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1412 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[ 40%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/sections_summary.cpp.o ~~ 1413 | auto output = std::make_shared(std::move(left), and_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1414 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1415 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1416 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1417 | return output; | ~~~~~~~~~~~~~~ 1418 | }) | ~~ 1419 | .production("expression", "OR", "expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1420 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1421 | TokenIt or_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1422 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1423 | auto output = std::make_shared(std::move(left), or_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1424 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1425 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1426 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1427 | return output; | ~~~~~~~~~~~~~~ 1428 | }) | ~~ 1429 | .production("primary_expression", "LT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1430 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1431 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1432 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1433 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1434 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1435 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1436 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1437 | return output; | ~~~~~~~~~~~~~~ 1438 | }) | ~~ 1439 | .production("primary_expression", "GT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1440 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1441 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1442 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1443 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1444 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1445 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1446 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1447 | return output; | ~~~~~~~~~~~~~~ 1448 | }) | ~~ 1449 | .production("primary_expression", "LE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1450 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1451 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1452 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1453 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1454 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1455 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1456 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1457 | return output; | ~~~~~~~~~~~~~~ 1458 | }) | ~~ 1459 | .production("primary_expression", "GE", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1460 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1461 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1462 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1463 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1464 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1465 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1466 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1467 | return output; | ~~~~~~~~~~~~~~ 1468 | }) | ~~ 1469 | .production("primary_expression", "EQ", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1470 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1471 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1472 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1473 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1474 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1475 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1476 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1477 | return output; | ~~~~~~~~~~~~~~ 1478 | }) | ~~ 1479 | .production("primary_expression", "NEQ", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1480 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1481 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1482 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1483 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1484 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1485 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1486 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1487 | return output; | ~~~~~~~~~~~~~~ 1488 | }) | ~~ 1489 | .production("primary_expression", "CONTAINS", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1490 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1491 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1492 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1493 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1494 | error_handle(op_token->getLocation(), "operator 'contains' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1495 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1496 | error_handle(op_token->getLocation(), "operator 'contains' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1497 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1498 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1499 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1500 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1501 | return output; | ~~~~~~~~~~~~~~ 1502 | }) | ~~ 1503 | .production("primary_expression", "ICONTAINS", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1504 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1505 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1506 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1507 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1508 | error_handle(op_token->getLocation(), "operator 'icontains' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1509 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1510 | error_handle(op_token->getLocation(), "operator 'icontains' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1511 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1512 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1513 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1514 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1515 | return output; | ~~~~~~~~~~~~~~ 1516 | }) | ~~ 1517 | .production("primary_expression", "MATCHES", "regexp", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1518 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1519 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1520 | auto right = std::move(args[2].getYaramodString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1521 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1522 | error_handle(op_token->getLocation(), "operator 'matches' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1523 | auto regexp_expression = std::make_shared(std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1524 | auto output = std::make_shared(std::move(left), op_token, std::move(regexp_expression)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1525 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1526 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1527 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1528 | return output; | ~~~~~~~~~~~~~~ 1529 | }) | ~~ 1530 | .production("primary_expression", "STARTSWITH", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1531 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1532 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1533 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1534 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1535 | error_handle(op_token->getLocation(), "operator 'startswith' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1536 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1537 | error_handle(op_token->getLocation(), "operator 'startswith' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1538 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1539 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1540 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1541 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1542 | return output; | ~~~~~~~~~~~~~~ 1543 | }) | ~~ 1544 | .production("primary_expression", "ISTARTSWITH", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1545 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1546 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1547 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1548 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1549 | error_handle(op_token->getLocation(), "operator 'istartswith' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1550 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1551 | error_handle(op_token->getLocation(), "operator 'istartswith' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1552 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1553 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1554 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1555 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1556 | return output; | ~~~~~~~~~~~~~~ 1557 | }) | ~~ 1558 | .production("primary_expression", "ENDSWITH", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1559 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1560 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1561 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1562 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1563 | error_handle(op_token->getLocation(), "operator 'endswith' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1564 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1565 | error_handle(op_token->getLocation(), "operator 'endswith' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1566 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1567 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1568 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1569 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1570 | return output; | ~~~~~~~~~~~~~~ 1571 | }) | ~~ 1572 | .production("primary_expression", "IENDSWITH", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1573 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1574 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1575 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1576 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1577 | error_handle(op_token->getLocation(), "operator 'iendswith' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1578 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1579 | error_handle(op_token->getLocation(), "operator 'iendswith' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1580 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1581 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1582 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1583 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1584 | return output; | ~~~~~~~~~~~~~~ 1585 | }) | ~~ 1586 | .production("primary_expression", "IEQUALS", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1587 | auto left = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1588 | TokenIt op_token = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1589 | auto right = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1590 | if (!left->isString()) | ~~~~~~~~~~~~~~~~~~~~~~ 1591 | error_handle(op_token->getLocation(), "operator 'iequals' expects string on the left-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1592 | if (!right->isString()) | ~~~~~~~~~~~~~~~~~~~~~~~ 1593 | error_handle(op_token->getLocation(), "operator 'iequals' expects string on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1594 | auto output = std::make_shared(std::move(left), op_token, std::move(right)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1595 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1596 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1597 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1598 | return output; | ~~~~~~~~~~~~~~ 1599 | }) | ~~ 1600 | .production("primary_expression", [](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1601 | return std::move(args[0]); | ~~~~~~~~~~~~~~~~~~~~~~~~~~ 1602 | }).precedence(0, pog::Associativity::Left) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1603 | .production("LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1604 | auto expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1605 | auto type = expr->getType(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1606 | auto output = std::make_shared(args[0].getTokenIt(), std::move(expr), args[2].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1607 | output->setType(type); | ~~~~~~~~~~~~~~~~~~~~~~ 1608 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1609 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1610 | return output; | ~~~~~~~~~~~~~~ 1611 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1604:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1604 | auto expr = std::move(args[1].getExpression()); | ^~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1604:30: note: remove ‘std::move’ call cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/sections_summary.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/sections_summary.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/sections_summary.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/sections_summary.cpp /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:216 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[20], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[20], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[15], const char (&)[3], const char (&)[20], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1615:18: required from here 1615 | expr.production("for_expression", "OF", "expression_iterable", [this](auto&& args) -> Value { | ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1616 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1617 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1618 | auto array = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1619 | auto output = std::make_shared(std::move(for_expr), of, std::move(array)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1620 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1621 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1622 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1623 | return output; | ~~~~~~~~~~~~~~ 1624 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1616:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1616 | auto for_expr = std::move(args[0].getExpression()); | ^~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1616:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1618:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1618 | auto array = std::move(args[2].getExpression()); | ^~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1618:30: note: remove ‘std::move’ call [ 43%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/token.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/token.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/token.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/token.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/token.cpp [ 45%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/token_stream.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/token_stream.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/token_stream.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/token_stream.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/token_stream.cpp /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:195 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[8], const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[19], const char (&)[8], const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1368:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ 1349 | .production("for_expression", "OF", "string_set", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1350 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1351 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1352 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1353 | TokenIt at = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1354 | Expression::Ptr offset = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1355 | | 1356 | if (!offset->isInt()) { | ~~~~~~~~~~~~~~~~~~~~~~~ 1357 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1358 | ss << "Operator 'at' expects integer on the right-hand side of the expression. Got " << offset->getText() << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1359 | error_handle(args[4].getTokenIt()->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1360 | } | ~ 1361 | | 1362 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), at, offset); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1363 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1365 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1366 | return output; | ~~~~~~~~~~~~~~ 1367 | }) | ~~ 1368 | .production("primary_expression", "PERCENT", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1369 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1370 | TokenIt percent = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1371 | std::uint64_t value = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~ 1372 | if (strToNum(for_expr->getText(), value)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1373 | { | ~ 1374 | if (value == 0 || value > 100) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1375 | { | ~ 1376 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1377 | ss << "Percentage must be between 1 and 100 (inclusive). Got " << value << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1378 | error_handle(percent->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1379 | } | ~ 1380 | } | ~ 1381 | auto percentual_expr = std::make_shared(std::move(for_expr), percent); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1382 | percentual_expr->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1383 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1384 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1385 | auto output = std::make_shared(std::move(percentual_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1386 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1387 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1388 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1389 | return output; | ~~~~~~~~~~~~~~ 1390 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1369:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1369 | auto for_expr = std::move(args[0].getExpression()); | ^~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1369:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1384:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1384 | auto set = std::move(args[3].getExpression()); | ^~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1384:30: note: remove ‘std::move’ call [ 48%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/yara_file.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/yara_file.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/yara_file.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/yara_file.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/yara_file.cpp /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:193 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[11], const char (&)[3], const char (&)[6], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[11], const char (&)[3], const char (&)[6], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[15], const char (&)[3], const char (&)[11], const char (&)[3], const char (&)[6], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1337:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1338:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1338 | auto for_expr = std::move(args[0].getExpression()); | ^~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1338:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1340:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1340 | auto set = std::move(args[2].getExpression()); | ^~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1340:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:194 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[11], const char (&)[3], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[11], const char (&)[3], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[15], const char (&)[3], const char (&)[11], const char (&)[3], const char (&)[19], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1349:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~~ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ 1317 | .production("for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1318 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1319 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1320 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1321 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1322 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1323 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1324 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1325 | return output; | ~~~~~~~~~~~~~~ 1326 | }) | ~~ 1327 | .production("for_expression", "OF", "rule_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1328 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1329 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1330 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1331 | auto output = std::make_shared(std::move(for_expr), of, std::move(set)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1332 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1333 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1334 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1335 | return output; | ~~~~~~~~~~~~~~ 1336 | }) | ~~ 1337 | .production("for_expression", "OF", "string_set", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1338 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1340 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1341 | TokenIt in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1342 | auto range = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1343 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), in, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1344 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1345 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1346 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1347 | return output; | ~~~~~~~~~~~~~~ 1348 | }) | ~~ 1349 | .production("for_expression", "OF", "string_set", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1350 | auto for_expr = std::move(args[0].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1351 | TokenIt of = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1352 | auto set = std::move(args[2].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1353 | TokenIt at = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1354 | Expression::Ptr offset = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1355 | | 1356 | if (!offset->isInt()) { | ~~~~~~~~~~~~~~~~~~~~~~~ 1357 | std::stringstream ss; | ~~~~~~~~~~~~~~~~~~~~~ 1358 | ss << "Operator 'at' expects integer on the right-hand side of the expression. Got " << offset->getText() << "."; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1359 | error_handle(args[4].getTokenIt()->getLocation(), ss.str()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1360 | } | ~ 1361 | | 1362 | auto output = std::make_shared(std::move(for_expr), of, std::move(set), at, offset); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1363 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1365 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1366 | return output; | ~~~~~~~~~~~~~~ 1367 | }) | ~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1350:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1350 | auto for_expr = std::move(args[0].getExpression()); | ^~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1350:30: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1352:30: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1352 | auto set = std::move(args[2].getExpression()); | ^~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1352:30: note: remove ‘std::move’ call [ 51%] Building CXX object src/CMakeFiles/yaramod-obj.dir/utils/json.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/utils/json.cpp.o -MF CMakeFiles/yaramod-obj.dir/utils/json.cpp.o.d -o CMakeFiles/yaramod-obj.dir/utils/json.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/utils/json.cpp [ 54%] Building CXX object src/CMakeFiles/yaramod-obj.dir/utils/filesystem_operations.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/utils/filesystem_operations.cpp.o -MF CMakeFiles/yaramod-obj.dir/utils/filesystem_operations.cpp.o.d -o CMakeFiles/yaramod-obj.dir/utils/filesystem_operations.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/utils/filesystem_operations.cpp /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:190 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[15], const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[4], const char (&)[15], const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1290:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~^ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1299:38: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1299 | auto for_expr = std::move(args[1].getExpression()); | ^~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1299:38: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1301:38: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1301 | auto set = std::move(args[3].getExpression()); | ^~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1301:38: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:184 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[3], const char (&)[19], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[15], const char (&)[3], const char (&)[3], const char (&)[19], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[4], const char (&)[15], const char (&)[3], const char (&)[3], const char (&)[19], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1143:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~^ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1152:38: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1152 | auto for_expr = std::move(args[1].getExpression()); | ^~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1152:38: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1156:38: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1156 | auto set = std::move(args[4].getExpression()); | ^~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1156:38: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:186 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[15], const char (&)[3], const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[4], const char (&)[15], const char (&)[3], const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1171:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~^ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1208:38: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1208 | auto for_expr = std::move(args[1].getExpression()); | ^~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1208:38: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1211:38: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1211 | auto array = std::move(args[4].getExpression()); | ^~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1211:38: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:188 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[6], const char (&)[3], const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[15], const char (&)[3], const char (&)[6], const char (&)[3], const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[4], const char (&)[15], const char (&)[3], const char (&)[6], const char (&)[3], const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1227:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~^ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1268:38: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1268 | auto for_expr = std::move(args[1].getExpression()); | ^~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1268:38: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1273:38: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1273 | auto dict = std::move(args[6].getExpression()); | ^~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1273:38: note: remove ‘std::move’ call [ 56%] Building CXX object src/CMakeFiles/yaramod-obj.dir/utils/utils.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/utils/utils.cpp.o -MF CMakeFiles/yaramod-obj.dir/utils/utils.cpp.o.d -o CMakeFiles/yaramod-obj.dir/utils/utils.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/utils/utils.cpp [ 59%] Building CXX object src/CMakeFiles/yaramod-obj.dir/yaramod.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/yaramod.cpp.o -MF CMakeFiles/yaramod-obj.dir/yaramod.cpp.o.d -o CMakeFiles/yaramod-obj.dir/yaramod.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/yaramod.cpp make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' [ 59%] Built target yaramod-obj make -f src/CMakeFiles/yaramod-static.dir/build.make src/CMakeFiles/yaramod-static.dir/depend make -f src/CMakeFiles/yaramod.dir/build.make src/CMakeFiles/yaramod.dir/depend make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /build/reproducible-path/yaramod-3.21.0 /build/reproducible-path/yaramod-3.21.0/src /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src/CMakeFiles/yaramod-static.dir/DependInfo.cmake "--color=" make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /build/reproducible-path/yaramod-3.21.0 /build/reproducible-path/yaramod-3.21.0/src /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src/CMakeFiles/yaramod.dir/DependInfo.cmake "--color=" make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' make -f src/CMakeFiles/yaramod-static.dir/build.make src/CMakeFiles/yaramod-static.dir/build make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' make -f src/CMakeFiles/yaramod.dir/build.make src/CMakeFiles/yaramod.dir/build make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' [ 62%] Linking CXX static library libyaramod.a [ 64%] Linking CXX shared library libyaramod.so cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/cmake -P CMakeFiles/yaramod-static.dir/cmake_clean_target.cmake cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/cmake -E cmake_link_script CMakeFiles/yaramod.dir/link.txt --verbose=1 /usr/bin/c++ -fPIC -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -pthread -Wl,--push-state,--as-needed -Wl,--pop-state -Wl,--dependency-file=CMakeFiles/yaramod.dir/link.d -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libyaramod.so.0 -o libyaramod.so.3.21.0 "CMakeFiles/yaramod-obj.dir/builder/yara_expression_builder.cpp.o" "CMakeFiles/yaramod-obj.dir/builder/yara_file_builder.cpp.o" "CMakeFiles/yaramod-obj.dir/builder/yara_hex_string_builder.cpp.o" "CMakeFiles/yaramod-obj.dir/builder/yara_rule_builder.cpp.o" "CMakeFiles/yaramod-obj.dir/parser/parser_driver.cpp.o" "CMakeFiles/yaramod-obj.dir/types/hex_string.cpp.o" "CMakeFiles/yaramod-obj.dir/types/literal.cpp.o" "CMakeFiles/yaramod-obj.dir/types/meta.cpp.o" "CMakeFiles/yaramod-obj.dir/types/variable.cpp.o" "CMakeFiles/yaramod-obj.dir/types/modules/module.cpp.o" "CMakeFiles/yaramod-obj.dir/types/modules/module_pool.cpp.o" "CMakeFiles/yaramod-obj.dir/types/plain_string.cpp.o" "CMakeFiles/yaramod-obj.dir/types/rule.cpp.o" "CMakeFiles/yaramod-obj.dir/types/sections_summary.cpp.o" "CMakeFiles/yaramod-obj.dir/types/token.cpp.o" "CMakeFiles/yaramod-obj.dir/types/token_stream.cpp.o" "CMakeFiles/yaramod-obj.dir/types/yara_file.cpp.o" "CMakeFiles/yaramod-obj.dir/utils/json.cpp.o" "CMakeFiles/yaramod-obj.dir/utils/filesystem_operations.cpp.o" "CMakeFiles/yaramod-obj.dir/utils/utils.cpp.o" "CMakeFiles/yaramod-obj.dir/yaramod.cpp.o" /usr/lib/x86_64-linux-gnu/libre2.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_check_op.so /usr/lib/x86_64-linux-gnu/libabsl_log_severity.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_conditions.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_message.so /usr/lib/x86_64-linux-gnu/libabsl_examine_stack.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_format.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_proto.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_nullguard.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_log_sink_set.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_globals.so /usr/lib/x86_64-linux-gnu/libabsl_log_globals.so /usr/lib/x86_64-linux-gnu/libabsl_log_sink.so /usr/lib/x86_64-linux-gnu/libabsl_log_entry.so /usr/lib/x86_64-linux-gnu/libabsl_strerror.so /usr/lib/x86_64-linux-gnu/libabsl_vlog_config_internal.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_fnmatch.so /usr/lib/x86_64-linux-gnu/libabsl_flags_internal.so /usr/lib/x86_64-linux-gnu/libabsl_flags_marshalling.so /usr/lib/x86_64-linux-gnu/libabsl_flags_reflection.so /usr/lib/x86_64-linux-gnu/libabsl_flags_private_handle_accessor.so /usr/lib/x86_64-linux-gnu/libabsl_flags_commandlineflag.so /usr/lib/x86_64-linux-gnu/libabsl_flags_commandlineflag_internal.so /usr/lib/x86_64-linux-gnu/libabsl_flags_config.so /usr/lib/x86_64-linux-gnu/libabsl_flags_program_name.so /usr/lib/x86_64-linux-gnu/libabsl_raw_logging_internal.so /usr/lib/x86_64-linux-gnu/libabsl_cord.so /usr/lib/x86_64-linux-gnu/libabsl_cordz_info.so /usr/lib/x86_64-linux-gnu/libabsl_cord_internal.so /usr/lib/x86_64-linux-gnu/libabsl_cordz_functions.so /usr/lib/x86_64-linux-gnu/libabsl_cordz_handle.so /usr/lib/x86_64-linux-gnu/libabsl_crc_cord_state.so /usr/lib/x86_64-linux-gnu/libabsl_crc32c.so /usr/lib/x86_64-linux-gnu/libabsl_crc_internal.so /usr/lib/x86_64-linux-gnu/libabsl_crc_cpu_detect.so /usr/lib/x86_64-linux-gnu/libabsl_raw_hash_set.so /usr/lib/x86_64-linux-gnu/libabsl_hashtablez_sampler.so /usr/lib/x86_64-linux-gnu/libabsl_exponential_biased.so /usr/lib/x86_64-linux-gnu/libabsl_hash.so /usr/lib/x86_64-linux-gnu/libabsl_city.so /usr/lib/x86_64-linux-gnu/libabsl_bad_variant_access.so /usr/lib/x86_64-linux-gnu/libabsl_low_level_hash.so /usr/lib/x86_64-linux-gnu/libabsl_throw_delegate.so /usr/lib/x86_64-linux-gnu/libabsl_bad_optional_access.so /usr/lib/x86_64-linux-gnu/libabsl_str_format_internal.so /usr/lib/x86_64-linux-gnu/libabsl_synchronization.so /usr/lib/x86_64-linux-gnu/libabsl_graphcycles_internal.so /usr/lib/x86_64-linux-gnu/libabsl_kernel_timeout_internal.so /usr/lib/x86_64-linux-gnu/libabsl_stacktrace.so /usr/lib/x86_64-linux-gnu/libabsl_symbolize.so /usr/lib/x86_64-linux-gnu/libabsl_debugging_internal.so /usr/lib/x86_64-linux-gnu/libabsl_demangle_internal.so /usr/lib/x86_64-linux-gnu/libabsl_demangle_rust.so /usr/lib/x86_64-linux-gnu/libabsl_decode_rust_punycode.so /usr/lib/x86_64-linux-gnu/libabsl_utf8_for_code_point.so /usr/lib/x86_64-linux-gnu/libabsl_malloc_internal.so /usr/lib/x86_64-linux-gnu/libabsl_time.so /usr/lib/x86_64-linux-gnu/libabsl_civil_time.so /usr/lib/x86_64-linux-gnu/libabsl_strings.so /usr/lib/x86_64-linux-gnu/libabsl_strings_internal.so /usr/lib/x86_64-linux-gnu/libabsl_string_view.so /usr/lib/x86_64-linux-gnu/libabsl_base.so -latomic /usr/lib/x86_64-linux-gnu/librt.a /usr/lib/x86_64-linux-gnu/libabsl_spinlock_wait.so /usr/lib/x86_64-linux-gnu/libabsl_int128.so /usr/lib/x86_64-linux-gnu/libabsl_log_severity.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_conditions.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_message.so /usr/lib/x86_64-linux-gnu/libabsl_examine_stack.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_format.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_proto.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_nullguard.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_log_sink_set.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_globals.so /usr/lib/x86_64-linux-gnu/libabsl_log_globals.so /usr/lib/x86_64-linux-gnu/libabsl_log_sink.so /usr/lib/x86_64-linux-gnu/libabsl_log_entry.so /usr/lib/x86_64-linux-gnu/libabsl_strerror.so /usr/lib/x86_64-linux-gnu/libabsl_vlog_config_internal.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_fnmatch.so /usr/lib/x86_64-linux-gnu/libabsl_flags_internal.so /usr/lib/x86_64-linux-gnu/libabsl_flags_marshalling.so /usr/lib/x86_64-linux-gnu/libabsl_flags_reflection.so /usr/lib/x86_64-linux-gnu/libabsl_flags_private_handle_accessor.so /usr/lib/x86_64-linux-gnu/libabsl_flags_commandlineflag.so /usr/lib/x86_64-linux-gnu/libabsl_flags_commandlineflag_internal.so /usr/lib/x86_64-linux-gnu/libabsl_flags_config.so /usr/lib/x86_64-linux-gnu/libabsl_flags_program_name.so /usr/lib/x86_64-linux-gnu/libabsl_raw_logging_internal.so /usr/lib/x86_64-linux-gnu/libabsl_cord.so /usr/lib/x86_64-linux-gnu/libabsl_cordz_info.so /usr/lib/x86_64-linux-gnu/libabsl_cord_internal.so /usr/lib/x86_64-linux-gnu/libabsl_cordz_functions.so /usr/lib/x86_64-linux-gnu/libabsl_cordz_handle.so /usr/lib/x86_64-linux-gnu/libabsl_crc_cord_state.so /usr/lib/x86_64-linux-gnu/libabsl_crc32c.so /usr/lib/x86_64-linux-gnu/libabsl_crc_internal.so /usr/lib/x86_64-linux-gnu/libabsl_crc_cpu_detect.so /usr/lib/x86_64-linux-gnu/libabsl_raw_hash_set.so /usr/lib/x86_64-linux-gnu/libabsl_hashtablez_sampler.so /usr/lib/x86_64-linux-gnu/libabsl_exponential_biased.so /usr/lib/x86_64-linux-gnu/libabsl_hash.so /usr/lib/x86_64-linux-gnu/libabsl_city.so /usr/lib/x86_64-linux-gnu/libabsl_bad_variant_access.so /usr/lib/x86_64-linux-gnu/libabsl_low_level_hash.so /usr/lib/x86_64-linux-gnu/libabsl_throw_delegate.so /usr/lib/x86_64-linux-gnu/libabsl_bad_optional_access.so /usr/lib/x86_64-linux-gnu/libabsl_str_format_internal.so /usr/lib/x86_64-linux-gnu/libabsl_synchronization.so /usr/lib/x86_64-linux-gnu/libabsl_graphcycles_internal.so /usr/lib/x86_64-linux-gnu/libabsl_kernel_timeout_internal.so /usr/lib/x86_64-linux-gnu/libabsl_stacktrace.so /usr/lib/x86_64-linux-gnu/libabsl_symbolize.so /usr/lib/x86_64-linux-gnu/libabsl_debugging_internal.so /usr/lib/x86_64-linux-gnu/libabsl_demangle_internal.so /usr/lib/x86_64-linux-gnu/libabsl_demangle_rust.so /usr/lib/x86_64-linux-gnu/libabsl_decode_rust_punycode.so /usr/lib/x86_64-linux-gnu/libabsl_utf8_for_code_point.so /usr/lib/x86_64-linux-gnu/libabsl_malloc_internal.so /usr/lib/x86_64-linux-gnu/libabsl_time.so /usr/lib/x86_64-linux-gnu/libabsl_civil_time.so /usr/lib/x86_64-linux-gnu/libabsl_strings.so /usr/lib/x86_64-linux-gnu/libabsl_strings_internal.so /usr/lib/x86_64-linux-gnu/libabsl_string_view.so /usr/lib/x86_64-linux-gnu/libabsl_base.so -latomic /usr/lib/x86_64-linux-gnucd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/cmake -E cmake_link_script CMakeFiles/yaramod-static.dir/link.txt --verbose=1 /librt.a /usr/lib/x86_64-linux-gnu/libabsl_spinlock_wait.so /usr/lib/x86_64-linux-gnu/libabsl_int128.so /usr/lib/x86_64-linux-gnu/libabsl_time_zone.so cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src && /usr/bin/cmake -E cmake_symlink_library libyaramod.so.3.21.0 libyaramod.so.0 libyaramod.so make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' [ 64%] Built target yaramod make -f src/python/CMakeFiles/yaramod-python.dir/build.make src/python/CMakeFiles/yaramod-python.dir/depend make -f tests/cpp/CMakeFiles/yaramod_tests.dir/build.make tests/cpp/CMakeFiles/yaramod_tests.dir/depend make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /build/reproducible-path/yaramod-3.21.0 /build/reproducible-path/yaramod-3.21.0/src/python /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src/python /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src/python/CMakeFiles/yaramod-python.dir/DependInfo.cmake "--color=" make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /build/reproducible-path/yaramod-3.21.0 /build/reproducible-path/yaramod-3.21.0/tests/cpp /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/tests/cpp /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/tests/cpp/CMakeFiles/yaramod_tests.dir/DependInfo.cmake "--color=" make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' make -f src/python/CMakeFiles/yaramod-python.dir/build.make src/python/CMakeFiles/yaramod-python.dir/build make -f tests/cpp/CMakeFiles/yaramod_tests.dir/build.make tests/cpp/CMakeFiles/yaramod_tests.dir/build make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' /usr/bin/ar qc libyaramod.a "CMakeFiles/yaramod-obj.dir/builder/yara_expression_builder.cpp.o" "CMakeFiles/yaramod-obj.dir/builder/yara_file_builder.cpp.o" "CMakeFiles/yaramod-obj.dir/builder/yara_hex_string_builder.cpp.o" "CMakeFiles/yaramod-obj.dir/builder/yara_rule_builder.cpp.o" "CMakeFiles/yaramod-obj.dir/parser/parser_driver.cpp.o" "CMakeFiles/yaramod-obj.dir/types/hex_string.cpp.o" "CMakeFiles/yaramod-obj.dir/types/literal.cpp.o" "CMakeFiles/yaramod-obj.dir/types/meta.cpp.o" "CMakeFiles/yaramod-obj.dir/types/variable.cpp.o" "CMakeFiles/yaramod-obj.dir/types/modules/module.cpp.o" "CMakeFiles/yaramod-obj.dir/types/modules/module_pool.cpp.o" "CMakeFiles/yaramod-obj.dir/types/plain_string.cpp.o" "CMakeFiles/yaramod-obj.dir/types/rule.cpp.o" "CMakeFiles/yaramod-obj.dir/types/sections_summary.cpp.o" "CMakeFiles/yaramod-obj.dir/types/token.cpp.o" "CMakeFiles/yaramod-obj.dir/types/token_stream.cpp.o" "CMakeFiles/yaramod-obj.dir/types/yara_file.cpp.o" "CMakeFiles/yaramod-obj.dir/utils/json.cpp.o" "CMakeFiles/yaramod-obj.dir/utils/filesystem_operations.cpp.o" "CMakeFiles/yaramod-obj.dir/utils/utils.cpp.o" "CMakeFiles/yaramod-obj.dir/yaramod.cpp.o" /usr/bin/ranlib libyaramod.a [ 67%] Building CXX object src/python/CMakeFiles/yaramod-python.dir/yaramod_python.cpp.o [ 70%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/representation_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src/python && /usr/bin/c++ -DFMT_SHARED -Dyaramod_python_EXPORTS -isystem /usr/include/python3.13 -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -fvisibility=hidden -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/python/CMakeFiles/yaramod-python.dir/yaramod_python.cpp.o -MF CMakeFiles/yaramod-python.dir/yaramod_python.cpp.o.d -o CMakeFiles/yaramod-python.dir/yaramod_python.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/python/yaramod_python.cpp cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/tests/cpp && /usr/bin/c++ -DFMT_SHARED -I/build/reproducible-path/yaramod-3.21.0/tests/cpp -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIE -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -DGTEST_HAS_PTHREAD=1 -MD -MT tests/cpp/CMakeFiles/yaramod_tests.dir/representation_tests.cpp.o -MF CMakeFiles/yaramod_tests.dir/representation_tests.cpp.o.d -o CMakeFiles/yaramod_tests.dir/representation_tests.cpp.o -c /build/reproducible-path/yaramod-3.21.0/tests/cpp/representation_tests.cpp make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' [ 72%] Building CXX object src/python/CMakeFiles/yaramod-python.dir/py_visitor.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src/python && /usr/bin/c++ -DFMT_SHARED -Dyaramod_python_EXPORTS -isystem /usr/include/python3.13 -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -fvisibility=hidden -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/python/CMakeFiles/yaramod-python.dir/py_visitor.cpp.o -MF CMakeFiles/yaramod-python.dir/py_visitor.cpp.o.d -o CMakeFiles/yaramod-python.dir/py_visitor.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/python/py_visitor.cpp [ 72%] Built target yaramod-static [ 75%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/builder_tests.cpp.o [ 78%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/tokenstream_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/tests/cpp && /usr/bin/c++ -DFMT_SHARED -I/build/reproducible-path/yaramod-3.21.0/tests/cpp -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIE -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -DGTEST_HAS_PTHREAD=1 -MD -MT tests/cpp/CMakeFiles/yaramod_tests.dir/tokenstream_tests.cpp.o -MF CMakeFiles/yaramod_tests.dir/tokenstream_tests.cpp.o.d -o CMakeFiles/yaramod_tests.dir/tokenstream_tests.cpp.o -c /build/reproducible-path/yaramod-3.21.0/tests/cpp/tokenstream_tests.cpp [ 81%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/parser_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/tests/cpp && /usr/bin/c++ -DFMT_SHARED -I/build/reproducible-path/yaramod-3.21.0/tests/cpp -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIE -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -DGTEST_HAS_PTHREAD=1 -MD -MT tests/cpp/CMakeFiles/yaramod_tests.dir/builder_tests.cpp.o -MF CMakeFiles/yaramod_tests.dir/builder_tests.cpp.o.d -o CMakeFiles/yaramod_tests.dir/builder_tests.cpp.o -c /build/reproducible-path/yaramod-3.21.0/tests/cpp/builder_tests.cpp cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/tests/cpp && /usr/bin/c++ -DFMT_SHARED -I/build/reproducible-path/yaramod-3.21.0/tests/cpp -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIE -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -DGTEST_HAS_PTHREAD=1 -MD -MT tests/cpp/CMakeFiles/yaramod_tests.dir/parser_tests.cpp.o -MF CMakeFiles/yaramod_tests.dir/parser_tests.cpp.o.d -o CMakeFiles/yaramod_tests.dir/parser_tests.cpp.o -c /build/reproducible-path/yaramod-3.21.0/tests/cpp/parser_tests.cpp [ 83%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/trie_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/tests/cpp && /usr/bin/c++ -DFMT_SHARED -I/build/reproducible-path/yaramod-3.21.0/tests/cpp -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIE -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -DGTEST_HAS_PTHREAD=1 -MD -MT tests/cpp/CMakeFiles/yaramod_tests.dir/trie_tests.cpp.o -MF CMakeFiles/yaramod_tests.dir/trie_tests.cpp.o.d -o CMakeFiles/yaramod_tests.dir/trie_tests.cpp.o -c /build/reproducible-path/yaramod-3.21.0/tests/cpp/trie_tests.cpp /build/reproducible-path/yaramod-3.21.0/src/python/yaramod_python.cpp: In lambda function: /build/reproducible-path/yaramod-3.21.0/src/python/yaramod_python.cpp:1029:42: warning: ‘void pybind11::exception::operator()(const char*) const [with type = yaramod::ParserError]’ is deprecated: Please use py::set_error() instead (https://github.com/pybind/pybind11/pull/4772) [-Wdeprecated-declarations] 1029 | exception(err.what()); | ~~~~~~~~~^~~~~~~~~~~~ In file included from /build/reproducible-path/yaramod-3.21.0/src/python/yaramod_python.cpp:10: /usr/include/pybind11/pybind11.h:2625:10: note: declared here 2625 | void operator()(const char *message) const { set_error(*this, message); } | ^~~~~~~~ [ 86%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/utils_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/tests/cpp && /usr/bin/c++ -DFMT_SHARED -I/build/reproducible-path/yaramod-3.21.0/tests/cpp -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIE -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -DGTEST_HAS_PTHREAD=1 -MD -MT tests/cpp/CMakeFiles/yaramod_tests.dir/utils_tests.cpp.o -MF CMakeFiles/yaramod_tests.dir/utils_tests.cpp.o.d -o CMakeFiles/yaramod_tests.dir/utils_tests.cpp.o -c /build/reproducible-path/yaramod-3.21.0/tests/cpp/utils_tests.cpp [ 89%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/visitor_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/tests/cpp && /usr/bin/c++ -DFMT_SHARED -I/build/reproducible-path/yaramod-3.21.0/tests/cpp -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIE -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -DGTEST_HAS_PTHREAD=1 -MD -MT tests/cpp/CMakeFiles/yaramod_tests.dir/visitor_tests.cpp.o -MF CMakeFiles/yaramod_tests.dir/visitor_tests.cpp.o.d -o CMakeFiles/yaramod_tests.dir/visitor_tests.cpp.o -c /build/reproducible-path/yaramod-3.21.0/tests/cpp/visitor_tests.cpp [ 91%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/yara_file_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/tests/cpp && /usr/bin/c++ -DFMT_SHARED -I/build/reproducible-path/yaramod-3.21.0/tests/cpp -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIE -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -DGTEST_HAS_PTHREAD=1 -MD -MT tests/cpp/CMakeFiles/yaramod_tests.dir/yara_file_tests.cpp.o -MF CMakeFiles/yaramod_tests.dir/yara_file_tests.cpp.o.d -o CMakeFiles/yaramod_tests.dir/yara_file_tests.cpp.o -c /build/reproducible-path/yaramod-3.21.0/tests/cpp/yara_file_tests.cpp [ 94%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/yaramod_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/tests/cpp && /usr/bin/c++ -DFMT_SHARED -I/build/reproducible-path/yaramod-3.21.0/tests/cpp -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIE -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -DGTEST_HAS_PTHREAD=1 -MD -MT tests/cpp/CMakeFiles/yaramod_tests.dir/yaramod_tests.cpp.o -MF CMakeFiles/yaramod_tests.dir/yaramod_tests.cpp.o.d -o CMakeFiles/yaramod_tests.dir/yaramod_tests.cpp.o -c /build/reproducible-path/yaramod-3.21.0/tests/cpp/yaramod_tests.cpp [ 97%] Linking CXX executable yaramod_tests cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/tests/cpp && /usr/bin/cmake -E cmake_link_script CMakeFiles/yaramod_tests.dir/link.txt --verbose=1 /usr/bin/c++ -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -Wl,-z,relro -Wl,-z,now -pthread -Wl,--push-state,--as-needed -Wl,--pop-state -Wl,--dependency-file=CMakeFiles/yaramod_tests.dir/link.d CMakeFiles/yaramod_tests.dir/tokenstream_tests.cpp.o CMakeFiles/yaramod_tests.dir/representation_tests.cpp.o CMakeFiles/yaramod_tests.dir/builder_tests.cpp.o CMakeFiles/yaramod_tests.dir/parser_tests.cpp.o CMakeFiles/yaramod_tests.dir/trie_tests.cpp.o CMakeFiles/yaramod_tests.dir/utils_tests.cpp.o CMakeFiles/yaramod_tests.dir/visitor_tests.cpp.o CMakeFiles/yaramod_tests.dir/yara_file_tests.cpp.o CMakeFiles/yaramod_tests.dir/yaramod_tests.cpp.o -o yaramod_tests -Wl,-rpath,/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src ../../src/libyaramod.so.3.21.0 /usr/lib/x86_64-linux-gnu/libre2.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_check_op.so /usr/lib/x86_64-linux-gnu/libabsl_log_severity.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_conditions.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_message.so /usr/lib/x86_64-linux-gnu/libabsl_examine_stack.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_format.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_proto.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_nullguard.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_log_sink_set.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_globals.so /usr/lib/x86_64-linux-gnu/libabsl_log_globals.so /usr/lib/x86_64-linux-gnu/libabsl_log_sink.so /usr/lib/x86_64-linux-gnu/libabsl_log_entry.so /usr/lib/x86_64-linux-gnu/libabsl_strerror.so /usr/lib/x86_64-linux-gnu/libabsl_vlog_config_internal.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_fnmatch.so /usr/lib/x86_64-linux-gnu/libabsl_flags_internal.so /usr/lib/x86_64-linux-gnu/libabsl_flags_marshalling.so /usr/lib/x86_64-linux-gnu/libabsl_flags_reflection.so /usr/lib/x86_64-linux-gnu/libabsl_flags_private_handle_accessor.so /usr/lib/x86_64-linux-gnu/libabsl_flags_commandlineflag.so /usr/lib/x86_64-linux-gnu/libabsl_flags_commandlineflag_internal.so /usr/lib/x86_64-linux-gnu/libabsl_flags_config.so /usr/lib/x86_64-linux-gnu/libabsl_flags_program_name.so /usr/lib/x86_64-linux-gnu/libabsl_raw_logging_internal.so /usr/lib/x86_64-linux-gnu/libabsl_cord.so /usr/lib/x86_64-linux-gnu/libabsl_cordz_info.so /usr/lib/x86_64-linux-gnu/libabsl_cord_internal.so /usr/lib/x86_64-linux-gnu/libabsl_cordz_functions.so /usr/lib/x86_64-linux-gnu/libabsl_cordz_handle.so /usr/lib/x86_64-linux-gnu/libabsl_crc_cord_state.so /usr/lib/x86_64-linux-gnu/libabsl_crc32c.so /usr/lib/x86_64-linux-gnu/libabsl_crc_internal.so /usr/lib/x86_64-linux-gnu/libabsl_crc_cpu_detect.so /usr/lib/x86_64-linux-gnu/libabsl_raw_hash_set.so /usr/lib/x86_64-linux-gnu/libabsl_hashtablez_sampler.so /usr/lib/x86_64-linux-gnu/libabsl_exponential_biased.so /usr/lib/x86_64-linux-gnu/libabsl_hash.so /usr/lib/x86_64-linux-gnu/libabsl_city.so /usr/lib/x86_64-linux-gnu/libabsl_bad_variant_access.so /usr/lib/x86_64-linux-gnu/libabsl_low_level_hash.so /usr/lib/x86_64-linux-gnu/libabsl_throw_delegate.so /usr/lib/x86_64-linux-gnu/libabsl_bad_optional_access.so /usr/lib/x86_64-linux-gnu/libabsl_str_format_internal.so /usr/lib/x86_64-linux-gnu/libabsl_synchronization.so /usr/lib/x86_64-linux-gnu/libabsl_graphcycles_internal.so /usr/lib/x86_64-linux-gnu/libabsl_kernel_timeout_internal.so /usr/lib/x86_64-linux-gnu/libabsl_stacktrace.so /usr/lib/x86_64-linux-gnu/libabsl_symbolize.so /usr/lib/x86_64-linux-gnu/libabsl_debugging_internal.so /usr/lib/x86_64-linux-gnu/libabsl_demangle_internal.so /usr/lib/x86_64-linux-gnu/libabsl_demangle_rust.so /usr/lib/x86_64-linux-gnu/libabsl_decode_rust_punycode.so /usr/lib/x86_64-linux-gnu/libabsl_utf8_for_code_point.so /usr/lib/x86_64-linux-gnu/libabsl_malloc_internal.so /usr/lib/x86_64-linux-gnu/libabsl_time.so /usr/lib/x86_64-linux-gnu/libabsl_civil_time.so /usr/lib/x86_64-linux-gnu/libabsl_strings.so /usr/lib/x86_64-linux-gnu/libabsl_strings_internal.so /usr/lib/x86_64-linux-gnu/libabsl_string_view.so /usr/lib/x86_64-linux-gnu/libabsl_base.so -latomic /usr/lib/x86_64-linux-gnu/librt.a /usr/lib/x86_64-linux-gnu/libabsl_spinlock_wait.so /usr/lib/x86_64-linux-gnu/libabsl_int128.so /usr/lib/x86_64-linux-gnu/libabsl_log_severity.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_conditions.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_message.so /usr/lib/x86_64-linux-gnu/libabsl_examine_stack.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_format.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_proto.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_nullguard.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_log_sink_set.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_globals.so /usr/lib/x86_64-linux-gnu/libabsl_log_globals.so /usr/lib/x86_64-linux-gnu/libabsl_log_sink.so /usr/lib/x86_64-linux-gnu/libabsl_log_entry.so /usr/lib/x86_64-linux-gnu/libabsl_strerror.so /usr/lib/x86_64-linux-gnu/libabsl_vlog_config_internal.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_fnmatch.so /usr/lib/x86_64-linux-gnu/libabsl_flags_internal.so /usr/lib/x86_64-linux-gnu/libabsl_flags_marshalling.so /usr/lib/x86_64-linux-gnu/libabsl_flags_reflection.so /usr/lib/x86_64-linux-gnu/libabsl_flags_private_handle_accessor.so /usr/lib/x86_64-linux-gnu/libabsl_flags_commandlineflag.so /usr/lib/x86_64-linux-gnu/libabsl_flags_commandlineflag_internal.so /usr/lib/x86_64-linux-gnu/libabsl_flags_config.so /usr/lib/x86_64-linux-gnu/libabsl_flags_program_name.so /usr/lib/x86_64-linux-gnu/libabsl_raw_logging_internal.so /usr/lib/x86_64-linux-gnu/libabsl_cord.so /usr/lib/x86_64-linux-gnu/libabsl_cordz_info.so /usr/lib/x86_64-linux-gnu/libabsl_cord_internal.so /usr/lib/x86_64-linux-gnu/libabsl_cordz_functions.so /usr/lib/x86_64-linux-gnu/libabsl_cordz_handle.so /usr/lib/x86_64-linux-gnu/libabsl_crc_cord_state.so /usr/lib/x86_64-linux-gnu/libabsl_crc32c.so /usr/lib/x86_64-linux-gnu/libabsl_crc_internal.so /usr/lib/x86_64-linux-gnu/libabsl_crc_cpu_detect.so /usr/lib/x86_64-linux-gnu/libabsl_raw_hash_set.so /usr/lib/x86_64-linux-gnu/libabsl_hashtablez_sampler.so /usr/lib/x86_64-linux-gnu/libabsl_exponential_biased.so /usr/lib/x86_64-linux-gnu/libabsl_hash.so /usr/lib/x86_64-linux-gnu/libabsl_city.so /usr/lib/x86_64-linux-gnu/libabsl_bad_variant_access.so /usr/lib/x86_64-linux-gnu/libabsl_low_level_hash.so /usr/lib/x86_64-linux-gnu/libabsl_throw_delegate.so /usr/lib/x86_64-linux-gnu/libabsl_bad_optional_access.so /usr/lib/x86_64-linux-gnu/libabsl_str_format_internal.so /usr/lib/x86_64-linux-gnu/libabsl_synchronization.so /usr/lib/x86_64-linux-gnu/libabsl_graphcycles_internal.so /usr/lib/x86_64-linux-gnu/libabsl_kernel_timeout_internal.so /usr/lib/x86_64-linux-gnu/libabsl_stacktrace.so /usr/lib/x86_64-linux-gnu/libabsl_symbolize.so /usr/lib/x86_64-linux-gnu/libabsl_debugging_internal.so /usr/lib/x86_64-linux-gnu/libabsl_demangle_internal.so /usr/lib/x86_64-linux-gnu/libabsl_demangle_rust.so /usr/lib/x86_64-linux-gnu/libabsl_decode_rust_punycode.so /usr/lib/x86_64-linux-gnu/libabsl_utf8_for_code_point.so /usr/lib/x86_64-linux-gnu/libabsl_malloc_internal.so /usr/lib/x86_64-linux-gnu/libabsl_time.so /usr/lib/x86_64-linux-gnu/libabsl_civil_time.so /usr/lib/x86_64-linux-gnu/libabsl_strings.so /usr/lib/x86_64-linux-gnu/libabsl_strings_internal.so /usr/lib/x86_64-linux-gnu/libabsl_string_view.so /usr/lib/x86_64-linux-gnu/libabsl_base.so -latomic /usr/lib/x86_64-linux-gnu/librt.a /usr/lib/x86_64-linux-gnu/libabsl_spinlock_wait.so /usr/lib/x86_64-linux-gnu/libabsl_int128.so /usr/lib/x86_64-linux-gnu/libabsl_time_zone.so /usr/lib/x86_64-linux-gnu/libfmt.so.10.1.0 /usr/lib/x86_64-linux-gnu/libgtest_main.a /usr/lib/x86_64-linux-gnu/libgtest.a make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' [ 97%] Built target yaramod_tests [100%] Linking CXX shared module yaramod.cpython-313-x86_64-linux-gnu.so cd /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src/python && /usr/bin/cmake -E cmake_link_script CMakeFiles/yaramod-python.dir/link.txt --verbose=1 /usr/bin/c++ -fPIC -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -pthread -Wl,--push-state,--as-needed -Wl,--pop-state -Wl,--dependency-file=CMakeFiles/yaramod-python.dir/link.d -Wl,-z,relro -Wl,-z,now -shared -o yaramod.cpython-313-x86_64-linux-gnu.so "CMakeFiles/yaramod-python.dir/yaramod_python.cpp.o" "CMakeFiles/yaramod-python.dir/py_visitor.cpp.o" ../libyaramod.so.3.21.0 /usr/lib/x86_64-linux-gnu/libre2.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_check_op.so /usr/lib/x86_64-linux-gnu/libabsl_log_severity.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_conditions.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_message.so /usr/lib/x86_64-linux-gnu/libabsl_examine_stack.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_format.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_proto.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_nullguard.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_log_sink_set.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_globals.so /usr/lib/x86_64-linux-gnu/libabsl_log_globals.so /usr/lib/x86_64-linux-gnu/libabsl_log_sink.so /usr/lib/x86_64-linux-gnu/libabsl_log_entry.so /usr/lib/x86_64-linux-gnu/libabsl_strerror.so /usr/lib/x86_64-linux-gnu/libabsl_vlog_config_internal.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_fnmatch.so /usr/lib/x86_64-linux-gnu/libabsl_flags_internal.so /usr/lib/x86_64-linux-gnu/libabsl_flags_marshalling.so /usr/lib/x86_64-linux-gnu/libabsl_flags_reflection.so /usr/lib/x86_64-linux-gnu/libabsl_flags_private_handle_accessor.so /usr/lib/x86_64-linux-gnu/libabsl_flags_commandlineflag.so /usr/lib/x86_64-linux-gnu/libabsl_flags_commandlineflag_internal.so /usr/lib/x86_64-linux-gnu/libabsl_flags_config.so /usr/lib/x86_64-linux-gnu/libabsl_flags_program_name.so /usr/lib/x86_64-linux-gnu/libabsl_raw_logging_internal.so /usr/lib/x86_64-linux-gnu/libabsl_cord.so /usr/lib/x86_64-linux-gnu/libabsl_cordz_info.so /usr/lib/x86_64-linux-gnu/libabsl_cord_internal.so /usr/lib/x86_64-linux-gnu/libabsl_cordz_functions.so /usr/lib/x86_64-linux-gnu/libabsl_cordz_handle.so /usr/lib/x86_64-linux-gnu/libabsl_crc_cord_state.so /usr/lib/x86_64-linux-gnu/libabsl_crc32c.so /usr/lib/x86_64-linux-gnu/libabsl_crc_internal.so /usr/lib/x86_64-linux-gnu/libabsl_crc_cpu_detect.so /usr/lib/x86_64-linux-gnu/libabsl_raw_hash_set.so /usr/lib/x86_64-linux-gnu/libabsl_hashtablez_sampler.so /usr/lib/x86_64-linux-gnu/libabsl_exponential_biased.so /usr/lib/x86_64-linux-gnu/libabsl_hash.so /usr/lib/x86_64-linux-gnu/libabsl_city.so /usr/lib/x86_64-linux-gnu/libabsl_bad_variant_access.so /usr/lib/x86_64-linux-gnu/libabsl_low_level_hash.so /usr/lib/x86_64-linux-gnu/libabsl_throw_delegate.so /usr/lib/x86_64-linux-gnu/libabsl_bad_optional_access.so /usr/lib/x86_64-linux-gnu/libabsl_str_format_internal.so /usr/lib/x86_64-linux-gnu/libabsl_synchronization.so /usr/lib/x86_64-linux-gnu/libabsl_graphcycles_internal.so /usr/lib/x86_64-linux-gnu/libabsl_kernel_timeout_internal.so /usr/lib/x86_64-linux-gnu/libabsl_stacktrace.so /usr/lib/x86_64-linux-gnu/libabsl_symbolize.so /usr/lib/x86_64-linux-gnu/libabsl_debugging_internal.so /usr/lib/x86_64-linux-gnu/libabsl_demangle_internal.so /usr/lib/x86_64-linux-gnu/libabsl_demangle_rust.so /usr/lib/x86_64-linux-gnu/libabsl_decode_rust_punycode.so /usr/lib/x86_64-linux-gnu/libabsl_utf8_for_code_point.so /usr/lib/x86_64-linux-gnu/libabsl_malloc_internal.so /usr/lib/x86_64-linux-gnu/libabsl_time.so /usr/lib/x86_64-linux-gnu/libabsl_civil_time.so /usr/lib/x86_64-linux-gnu/libabsl_strings.so /usr/lib/x86_64-linux-gnu/libabsl_strings_internal.so /usr/lib/x86_64-linux-gnu/libabsl_string_view.so /usr/lib/x86_64-linux-gnu/libabsl_base.so -latomic /usr/lib/x86_64-linux-gnu/librt.a /usr/lib/x86_64-linux-gnu/libabsl_spinlock_wait.so /usr/lib/x86_64-linux-gnu/libabsl_int128.so /usr/lib/x86_64-linux-gnu/libabsl_log_severity.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_conditions.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_message.so /usr/lib/x86_64-linux-gnu/libabsl_examine_stack.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_format.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_proto.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_nullguard.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_log_sink_set.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_globals.so /usr/lib/x86_64-linux-gnu/libabsl_log_globals.so /usr/lib/x86_64-linux-gnu/libabsl_log_sink.so /usr/lib/x86_64-linux-gnu/libabsl_log_entry.so /usr/lib/x86_64-linux-gnu/libabsl_strerror.so /usr/lib/x86_64-linux-gnu/libabsl_vlog_config_internal.so /usr/lib/x86_64-linux-gnu/libabsl_log_internal_fnmatch.so /usr/lib/x86_64-linux-gnu/libabsl_flags_internal.so /usr/lib/x86_64-linux-gnu/libabsl_flags_marshalling.so /usr/lib/x86_64-linux-gnu/libabsl_flags_reflection.so /usr/lib/x86_64-linux-gnu/libabsl_flags_private_handle_accessor.so /usr/lib/x86_64-linux-gnu/libabsl_flags_commandlineflag.so /usr/lib/x86_64-linux-gnu/libabsl_flags_commandlineflag_internal.so /usr/lib/x86_64-linux-gnu/libabsl_flags_config.so /usr/lib/x86_64-linux-gnu/libabsl_flags_program_name.so /usr/lib/x86_64-linux-gnu/libabsl_raw_logging_internal.so /usr/lib/x86_64-linux-gnu/libabsl_cord.so /usr/lib/x86_64-linux-gnu/libabsl_cordz_info.so /usr/lib/x86_64-linux-gnu/libabsl_cord_internal.so /usr/lib/x86_64-linux-gnu/libabsl_cordz_functions.so /usr/lib/x86_64-linux-gnu/libabsl_cordz_handle.so /usr/lib/x86_64-linux-gnu/libabsl_crc_cord_state.so /usr/lib/x86_64-linux-gnu/libabsl_crc32c.so /usr/lib/x86_64-linux-gnu/libabsl_crc_internal.so /usr/lib/x86_64-linux-gnu/libabsl_crc_cpu_detect.so /usr/lib/x86_64-linux-gnu/libabsl_raw_hash_set.so /usr/lib/x86_64-linux-gnu/libabsl_hashtablez_sampler.so /usr/lib/x86_64-linux-gnu/libabsl_exponential_biased.so /usr/lib/x86_64-linux-gnu/libabsl_hash.so /usr/lib/x86_64-linux-gnu/libabsl_city.so /usr/lib/x86_64-linux-gnu/libabsl_bad_variant_access.so /usr/lib/x86_64-linux-gnu/libabsl_low_level_hash.so /usr/lib/x86_64-linux-gnu/libabsl_throw_delegate.so /usr/lib/x86_64-linux-gnu/libabsl_bad_optional_access.so /usr/lib/x86_64-linux-gnu/libabsl_str_format_internal.so /usr/lib/x86_64-linux-gnu/libabsl_synchronization.so /usr/lib/x86_64-linux-gnu/libabsl_graphcycles_internal.so /usr/lib/x86_64-linux-gnu/libabsl_kernel_timeout_internal.so /usr/lib/x86_64-linux-gnu/libabsl_stacktrace.so /usr/lib/x86_64-linux-gnu/libabsl_symbolize.so /usr/lib/x86_64-linux-gnu/libabsl_debugging_internal.so /usr/lib/x86_64-linux-gnu/libabsl_demangle_internal.so /usr/lib/x86_64-linux-gnu/libabsl_demangle_rust.so /usr/lib/x86_64-linux-gnu/libabsl_decode_rust_punycode.so /usr/lib/x86_64-linux-gnu/libabsl_utf8_for_code_point.so /usr/lib/x86_64-linux-gnu/libabsl_malloc_internal.so /usr/lib/x86_64-linux-gnu/libabsl_time.so /usr/lib/x86_64-linux-gnu/libabsl_civil_time.so /usr/lib/x86_64-linux-gnu/libabsl_strings.so /usr/lib/x86_64-linux-gnu/libabsl_strings_internal.so /usr/lib/x86_64-linux-gnu/libabsl_string_view.so /usr/lib/x86_64-linux-gnu/libabsl_base.so -latomic /usr/lib/x86_64-linux-gnu/librt.a /usr/lib/x86_64-linux-gnu/libabsl_spinlock_wait.so /usr/lib/x86_64-linux-gnu/libabsl_int128.so /usr/lib/x86_64-linux-gnu/libabsl_time_zone.so /usr/lib/x86_64-linux-gnu/libfmt.so.10.1.0 make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' [100%] Built target yaramod-python make[3]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' /usr/bin/cmake -E cmake_progress_start /build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/CMakeFiles 0 make[2]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' cp obj-x86_64-linux-gnu/src/python/yaramod.cpython-*.so .pybuild/cpython3_*/build/ dh_auto_build -a -O--buildsystem=pybuild I: pybuild base:311: /usr/bin/python3 setup.py build /usr/lib/python3/dist-packages/setuptools/dist.py:493: SetuptoolsDeprecationWarning: Invalid dash-separated options !! ******************************************************************************** Usage of dash-separated 'description-file' will not be supported in future versions. Please use the underscore name 'description_file' instead. This deprecation is overdue, please update your project and remove deprecated calls to avoid build errors in the future. See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details. ******************************************************************************** !! opt = self.warn_dash_deprecation(opt, section) running build running build_py creating /build/reproducible-path/yaramod-3.21.0/.pybuild/cpython3_3.13/build/yaramod copying src/python/typings/__init__.pyi -> /build/reproducible-path/yaramod-3.21.0/.pybuild/cpython3_3.13/build/yaramod copying src/python/typings/py.typed -> /build/reproducible-path/yaramod-3.21.0/.pybuild/cpython3_3.13/build/yaramod running build_ext make[1]: Leaving directory '/build/reproducible-path/yaramod-3.21.0' debian/rules override_dh_auto_test-arch make[1]: Entering directory '/build/reproducible-path/yaramod-3.21.0' ./obj-x86_64-linux-gnu/tests/cpp/yaramod_tests Running main() from ./googletest/src/gtest_main.cc [==========] Running 398 tests from 9 test suites. [----------] Global test environment set-up. [----------] 19 tests from TokenStreamTests [ RUN ] TokenStreamTests.BoolLiteral [ OK ] TokenStreamTests.BoolLiteral (0 ms) [ RUN ] TokenStreamTests.TokenStreamFindSimple [ OK ] TokenStreamTests.TokenStreamFindSimple (0 ms) [ RUN ] TokenStreamTests.TokenStreamFind [ OK ] TokenStreamTests.TokenStreamFind (0 ms) [ RUN ] TokenStreamTests.TokenStreamFindBackwardsSimple [ OK ] TokenStreamTests.TokenStreamFindBackwardsSimple (0 ms) [ RUN ] TokenStreamTests.TokenStreamFindBackwards [ OK ] TokenStreamTests.TokenStreamFindBackwards (0 ms) [ RUN ] TokenStreamTests.TokenStreamEmplaceBack [ OK ] TokenStreamTests.TokenStreamEmplaceBack (0 ms) [ RUN ] TokenStreamTests.TokenStreamEmplace [ OK ] TokenStreamTests.TokenStreamEmplace (0 ms) [ RUN ] TokenStreamTests.TokenStreamPushBack [ OK ] TokenStreamTests.TokenStreamPushBack (0 ms) [ RUN ] TokenStreamTests.TokenStreamErase [ OK ] TokenStreamTests.TokenStreamErase (0 ms) [ RUN ] TokenStreamTests.TokenStreamSwapTokensWithDifferentTokenStreams [ OK ] TokenStreamTests.TokenStreamSwapTokensWithDifferentTokenStreams (0 ms) [ RUN ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusion1 [ OK ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusion1 (0 ms) [ RUN ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusion2 [ OK ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusion2 (0 ms) [ RUN ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusionTouching1 [ OK ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusionTouching1 (0 ms) [ RUN ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusionTouching2 [ OK ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusionTouching2 (0 ms) [ RUN ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusionInvalid [ OK ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusionInvalid (0 ms) [ RUN ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusionInvalid2 [ OK ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusionInvalid2 (0 ms) [ RUN ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamDistinct [ OK ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamDistinct (0 ms) [ RUN ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamDistinctTouching1 [ OK ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamDistinctTouching1 (0 ms) [ RUN ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamDistinctTouching2 [ OK ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamDistinctTouching2 (0 ms) [----------] 19 tests from TokenStreamTests (0 ms total) [----------] 12 tests from RepresentationTests [ RUN ] RepresentationTests.MetaConstruction [ OK ] RepresentationTests.MetaConstruction (0 ms) [ RUN ] RepresentationTests.MetaSetters [ OK ] RepresentationTests.MetaSetters (0 ms) [ RUN ] RepresentationTests.MetaCopyIsJustReference [ OK ] RepresentationTests.MetaCopyIsJustReference (0 ms) [ RUN ] RepresentationTests.RegexpConstruction [ OK ] RepresentationTests.RegexpConstruction (0 ms) [ RUN ] RepresentationTests.RegexpSetters [ OK ] RepresentationTests.RegexpSetters (0 ms) [ RUN ] RepresentationTests.RegexpConcat [ OK ] RepresentationTests.RegexpConcat (0 ms) [ RUN ] RepresentationTests.RegexpGroup [ OK ] RepresentationTests.RegexpGroup (0 ms) [ RUN ] RepresentationTests.RegexpOr [ OK ] RepresentationTests.RegexpOr (0 ms) [ RUN ] RepresentationTests.RegexpRange [ OK ] RepresentationTests.RegexpRange (0 ms) [ RUN ] RepresentationTests.RegexpOptional [ OK ] RepresentationTests.RegexpOptional (0 ms) [ RUN ] RepresentationTests.RegexpPositiveIteration [ OK ] RepresentationTests.RegexpPositiveIteration (0 ms) [ RUN ] RepresentationTests.RegexpIteration [ OK ] RepresentationTests.RegexpIteration (0 ms) [----------] 12 tests from RepresentationTests (0 ms total) [----------] 66 tests from BuilderTests [ RUN ] BuilderTests.EmptyFileWorks [ OK ] BuilderTests.EmptyFileWorks (29 ms) [ RUN ] BuilderTests.PureImportsWorks [ OK ] BuilderTests.PureImportsWorks (25 ms) [ RUN ] BuilderTests.PureImportsComplicateWorks [ OK ] BuilderTests.PureImportsComplicateWorks (27 ms) [ RUN ] BuilderTests.UnnamedRuleWorks [ OK ] BuilderTests.UnnamedRuleWorks (39 ms) [ RUN ] BuilderTests.UnnamedRuleWithImportsWorks [ OK ] BuilderTests.UnnamedRuleWithImportsWorks (38 ms) [ RUN ] BuilderTests.UnnamedRuleWithImportsWorks2 [ OK ] BuilderTests.UnnamedRuleWithImportsWorks2 (38 ms) [ RUN ] BuilderTests.RuleWithCustomNameWorks [ OK ] BuilderTests.RuleWithCustomNameWorks (26 ms) [ RUN ] BuilderTests.RuleWithMetasWorks [ OK ] BuilderTests.RuleWithMetasWorks (38 ms) [ RUN ] BuilderTests.RuleWithVariablesWorks [ OK ] BuilderTests.RuleWithVariablesWorks (38 ms) [ RUN ] BuilderTests.RuleWithEmptyStringMetaValueWorks [ OK ] BuilderTests.RuleWithEmptyStringMetaValueWorks (38 ms) [ RUN ] BuilderTests.RuleWithTagsWorks [ OK ] BuilderTests.RuleWithTagsWorks (26 ms) [ RUN ] BuilderTests.RuleWithModifierWorks [ OK ] BuilderTests.RuleWithModifierWorks (38 ms) [ RUN ] BuilderTests.RuleWithOnelineCommentWorks [ OK ] BuilderTests.RuleWithOnelineCommentWorks (26 ms) [ RUN ] BuilderTests.RuleWithMultilineCommentWorks [ OK ] BuilderTests.RuleWithMultilineCommentWorks (26 ms) [ RUN ] BuilderTests.RuleWithPlainStringWorks [ OK ] BuilderTests.RuleWithPlainStringWorks (26 ms) [ RUN ] BuilderTests.RuleWithPlainStringPureWideWorks [ OK ] BuilderTests.RuleWithPlainStringPureWideWorks (39 ms) [ RUN ] BuilderTests.MultipleRulesWorks [ OK ] BuilderTests.MultipleRulesWorks (26 ms) [ RUN ] BuilderTests.RuleWithCustomConditionWorks [ OK ] BuilderTests.RuleWithCustomConditionWorks (39 ms) [ RUN ] BuilderTests.RuleWithConditionWithSymbolsWorks [ OK ] BuilderTests.RuleWithConditionWithSymbolsWorks (26 ms) [ RUN ] BuilderTests.RuleWithHexStringWorks [ OK ] BuilderTests.RuleWithHexStringWorks (39 ms) [ RUN ] BuilderTests.RuleWithDictForConditionWorks [ OK ] BuilderTests.RuleWithDictForConditionWorks (26 ms) [ RUN ] BuilderTests.RuleWithStringForConditionWorks [ OK ] BuilderTests.RuleWithStringForConditionWorks (27 ms) [ RUN ] BuilderTests.RuleWithOfWorks [ OK ] BuilderTests.RuleWithOfWorks (38 ms) [ RUN ] BuilderTests.RuleWithRangeWorks [ OK ] BuilderTests.RuleWithRangeWorks (26 ms) [ RUN ] BuilderTests.RuleWithOfAtWorks [ OK ] BuilderTests.RuleWithOfAtWorks (38 ms) [ RUN ] BuilderTests.RuleWithStructureWorks [ OK ] BuilderTests.RuleWithStructureWorks (38 ms) [ RUN ] BuilderTests.RuleWithConditionWithOnelineComment [ OK ] BuilderTests.RuleWithConditionWithOnelineComment (38 ms) [ RUN ] BuilderTests.RuleWithConditionWithMultilineComment [ OK ] BuilderTests.RuleWithConditionWithMultilineComment (38 ms) [ RUN ] BuilderTests.RuleWithArrayAndStructureWorks [ OK ] BuilderTests.RuleWithArrayAndStructureWorks (26 ms) [ RUN ] BuilderTests.RuleWithFunctionCallWorks [ OK ] BuilderTests.RuleWithFunctionCallWorks (39 ms) [ RUN ] BuilderTests.RuleWithIntFunctionWorks [ OK ] BuilderTests.RuleWithIntFunctionWorks (26 ms) [ RUN ] BuilderTests.RuleWithArithmeticOperationsWorks [ OK ] BuilderTests.RuleWithArithmeticOperationsWorks (39 ms) [ RUN ] BuilderTests.RuleWithArithmeticOperationsWithDoubleValuesWorks [ OK ] BuilderTests.RuleWithArithmeticOperationsWithDoubleValuesWorks (27 ms) [ RUN ] BuilderTests.RuleWithBitwiseOperationsWorks [ OK ] BuilderTests.RuleWithBitwiseOperationsWorks (39 ms) [ RUN ] BuilderTests.RuleWithLogicOperationsWorks [ OK ] BuilderTests.RuleWithLogicOperationsWorks (26 ms) [ RUN ] BuilderTests.RuleWithIntMultpliersWorks [ OK ] BuilderTests.RuleWithIntMultpliersWorks (39 ms) [ RUN ] BuilderTests.RuleWithStringOperatorsWorks [ OK ] BuilderTests.RuleWithStringOperatorsWorks (26 ms) [ RUN ] BuilderTests.RuleWithRegexpWorks [ OK ] BuilderTests.RuleWithRegexpWorks (39 ms) [ RUN ] BuilderTests.RuleWithRegexpInConditionWorks [ OK ] BuilderTests.RuleWithRegexpInConditionWorks (27 ms) [ RUN ] BuilderTests.RuleWithConjunctionInConditionWorks [ OK ] BuilderTests.RuleWithConjunctionInConditionWorks (39 ms) [ RUN ] BuilderTests.RuleWithDisjunctionInConditionWorks [ OK ] BuilderTests.RuleWithDisjunctionInConditionWorks (27 ms) [ RUN ] BuilderTests.RuleWithConjunctionWithLinebreaksInConditionWorks [ OK ] BuilderTests.RuleWithConjunctionWithLinebreaksInConditionWorks (39 ms) [ RUN ] BuilderTests.RuleWithDisjunctionWithLinebreaksInConditionWorks [ OK ] BuilderTests.RuleWithDisjunctionWithLinebreaksInConditionWorks (27 ms) [ RUN ] BuilderTests.RuleWithCommentedConjunctionInConditionWorks [ OK ] BuilderTests.RuleWithCommentedConjunctionInConditionWorks (39 ms) [ RUN ] BuilderTests.RuleWithCommentedDisjunctionInConditionWorks [ OK ] BuilderTests.RuleWithCommentedDisjunctionInConditionWorks (26 ms) [ RUN ] BuilderTests.RuleWithParenthesesWithLinebreaksInConditionWorks [ OK ] BuilderTests.RuleWithParenthesesWithLinebreaksInConditionWorks (39 ms) [ RUN ] BuilderTests.RuleWithEscapedSequencesWorks [ OK ] BuilderTests.RuleWithEscapedSequencesWorks (27 ms) [ RUN ] BuilderTests.RuleWithNoneOfThemExpression [ OK ] BuilderTests.RuleWithNoneOfThemExpression (38 ms) [ RUN ] BuilderTests.RuleWithNoneOfThemInRangeWorks [ OK ] BuilderTests.RuleWithNoneOfThemInRangeWorks (27 ms) [ RUN ] BuilderTests.RuleWithStringsWithDifferentKindsOfModifiers [ OK ] BuilderTests.RuleWithStringsWithDifferentKindsOfModifiers (39 ms) [ RUN ] BuilderTests.RuleWithXorStringModifierOutOfBounds [ OK ] BuilderTests.RuleWithXorStringModifierOutOfBounds (19 ms) [ RUN ] BuilderTests.RuleWithXorStringModifierOutOfBoundsLowerKey [ OK ] BuilderTests.RuleWithXorStringModifierOutOfBoundsLowerKey (18 ms) [ RUN ] BuilderTests.RuleWithXorStringModifierOutOfBoundsHigherKey [ OK ] BuilderTests.RuleWithXorStringModifierOutOfBoundsHigherKey (19 ms) [ RUN ] BuilderTests.RuleWithXorStringModifierLowerBoundGreaterThanHigherBound [ OK ] BuilderTests.RuleWithXorStringModifierLowerBoundGreaterThanHigherBound (19 ms) [ RUN ] BuilderTests.ConjunctionWithSingleTerm [ OK ] BuilderTests.ConjunctionWithSingleTerm (39 ms) [ RUN ] BuilderTests.DefinedTerm [ OK ] BuilderTests.DefinedTerm (38 ms) [ RUN ] BuilderTests.PercentageOfStringSet [ OK ] BuilderTests.PercentageOfStringSet (38 ms) [ RUN ] BuilderTests.FloatValueWorks [ OK ] BuilderTests.FloatValueWorks (38 ms) [ RUN ] BuilderTests.IequalsWorks [ OK ] BuilderTests.IequalsWorks (38 ms) [ RUN ] BuilderTests.IdWildcardWorks [ OK ] BuilderTests.IdWildcardWorks (38 ms) [ RUN ] BuilderTests.StringAsBoolInConditionWorks [ OK ] BuilderTests.StringAsBoolInConditionWorks (41 ms) [ RUN ] BuilderTests.IcontainsWorks [ OK ] BuilderTests.IcontainsWorks (38 ms) [ RUN ] BuilderTests.IendsWithWorks [ OK ] BuilderTests.IendsWithWorks (39 ms) [ RUN ] BuilderTests.IstartsWithWorks [ OK ] BuilderTests.IstartsWithWorks (38 ms) [ RUN ] BuilderTests.StartsWithWorks [ OK ] BuilderTests.StartsWithWorks (38 ms) [ RUN ] BuilderTests.EndsWithWorks [ OK ] BuilderTests.EndsWithWorks (38 ms) [----------] 66 tests from BuilderTests (2215 ms total) [----------] 256 tests from ParserTests [ RUN ] ParserTests.EmptyInputWorks [ OK ] ParserTests.EmptyInputWorks (19 ms) [ RUN ] ParserTests.EmptyRuleWorks [ OK ] ParserTests.EmptyRuleWorks (19 ms) [ RUN ] ParserTests.RulesWithSameNameForbidden [ OK ] ParserTests.RulesWithSameNameForbidden (19 ms) [ RUN ] ParserTests.RuleWithTagsWorks [ OK ] ParserTests.RuleWithTagsWorks (19 ms) [ RUN ] ParserTests.RuleWithMetasWorks [ OK ] ParserTests.RuleWithMetasWorks (19 ms) [ RUN ] ParserTests.RuleWithRepetitiveMetasWorks [ OK ] ParserTests.RuleWithRepetitiveMetasWorks (19 ms) [ RUN ] ParserTests.HexAndDecimalIntegersArePreservedWorks [ OK ] ParserTests.HexAndDecimalIntegersArePreservedWorks (19 ms) [ RUN ] ParserTests.RuleWithVariablesWorks [ OK ] ParserTests.RuleWithVariablesWorks (19 ms) [ RUN ] ParserTests.VariableInConditionWorks [ OK ] ParserTests.VariableInConditionWorks (18 ms) [ RUN ] ParserTests.RuleWithNoStringsDoesntWork [ OK ] ParserTests.RuleWithNoStringsDoesntWork (19 ms) [ RUN ] ParserTests.RuleWithPlainTextStringsWorks [ OK ] ParserTests.RuleWithPlainTextStringsWorks (19 ms) [ RUN ] ParserTests.MultipleRulesWorks [ OK ] ParserTests.MultipleRulesWorks (20 ms) [ RUN ] ParserTests.RuleWithPlainTextStringWithModifiersWorks [ OK ] ParserTests.RuleWithPlainTextStringWithModifiersWorks (19 ms) [ RUN ] ParserTests.DuplicatedStringModifierForbidden [ OK ] ParserTests.DuplicatedStringModifierForbidden (19 ms) [ RUN ] ParserTests.InvalidStringModifiersCombination [ OK ] ParserTests.InvalidStringModifiersCombination (19 ms) [ RUN ] ParserTests.MultipleBase64AlphabetsForbidden [ OK ] ParserTests.MultipleBase64AlphabetsForbidden (19 ms) [ RUN ] ParserTests.HexStringWithPlainNibbleWorks [ OK ] ParserTests.HexStringWithPlainNibbleWorks (19 ms) [ RUN ] ParserTests.HexStringWithPlainNibblesWorks [ OK ] ParserTests.HexStringWithPlainNibblesWorks (19 ms) [ RUN ] ParserTests.HexStringWithLowHighJumpWorks [ OK ] ParserTests.HexStringWithLowHighJumpWorks (19 ms) [ RUN ] ParserTests.HexStringWithLowJumpWorks [ OK ] ParserTests.HexStringWithLowJumpWorks (18 ms) [ RUN ] ParserTests.HexStringWithUnrestrictedJumpWorks [ OK ] ParserTests.HexStringWithUnrestrictedJumpWorks (20 ms) [ RUN ] ParserTests.HexStringWithConstantJumpWorks [ OK ] ParserTests.HexStringWithConstantJumpWorks (18 ms) [ RUN ] ParserTests.HexStringWithSimpleOrWorks [ OK ] ParserTests.HexStringWithSimpleOrWorks (19 ms) [ RUN ] ParserTests.HexStringWithMultibyteSimpleOrWorks [ OK ] ParserTests.HexStringWithMultibyteSimpleOrWorks (19 ms) [ RUN ] ParserTests.HexStringWithNestedOrWorks [ OK ] ParserTests.HexStringWithNestedOrWorks (18 ms) [ RUN ] ParserTests.HexStringWithOrAndJumpWorks [ OK ] ParserTests.HexStringWithOrAndJumpWorks (19 ms) [ RUN ] ParserTests.HexStringWithOrOnTheBeginningAndEnd [ OK ] ParserTests.HexStringWithOrOnTheBeginningAndEnd (20 ms) [ RUN ] ParserTests.HexStringWithJumpAtBeginningForbidden [ OK ] ParserTests.HexStringWithJumpAtBeginningForbidden (18 ms) [ RUN ] ParserTests.HexStringWithJumpAtEndForbidden [ OK ] ParserTests.HexStringWithJumpAtEndForbidden (20 ms) [ RUN ] ParserTests.MultipleRulesWithHexStrings [ OK ] ParserTests.MultipleRulesWithHexStrings (19 ms) [ RUN ] ParserTests.InvalidHexStringAtom1 [ OK ] ParserTests.InvalidHexStringAtom1 (23 ms) [ RUN ] ParserTests.InvalidHexStringAtom2 [ OK ] ParserTests.InvalidHexStringAtom2 (31 ms) [ RUN ] ParserTests.InvalidHexStringOr [ OK ] ParserTests.InvalidHexStringOr (27 ms) [ RUN ] ParserTests.RegexpWithJustCharsWorks [ OK ] ParserTests.RegexpWithJustCharsWorks (19 ms) [ RUN ] ParserTests.MultipleRegexpsWithJustCharsWorks [ OK ] ParserTests.MultipleRegexpsWithJustCharsWorks (19 ms) [ RUN ] ParserTests.RegexpLimitedToWholeLineWorks [ OK ] ParserTests.RegexpLimitedToWholeLineWorks (20 ms) [ RUN ] ParserTests.RegexpWithPredefinedClassesWorks [ OK ] ParserTests.RegexpWithPredefinedClassesWorks (18 ms) [ RUN ] ParserTests.RegexpWithCustomClassWorks [ OK ] ParserTests.RegexpWithCustomClassWorks (19 ms) [ RUN ] ParserTests.RegexpWithCustomNegativeClassWorks [ OK ] ParserTests.RegexpWithCustomNegativeClassWorks (19 ms) [ RUN ] ParserTests.RegexpWithOptionalEscapedCharsWorks [ OK ] ParserTests.RegexpWithOptionalEscapedCharsWorks (19 ms) [ RUN ] ParserTests.RegexpWithEscapedSquareBracketsInsideClassWorks [ OK ] ParserTests.RegexpWithEscapedSquareBracketsInsideClassWorks (19 ms) [ RUN ] ParserTests.RegexpWithUnescapedSquareBracketsInsideClassWorks [ OK ] ParserTests.RegexpWithUnescapedSquareBracketsInsideClassWorks (19 ms) [ RUN ] ParserTests.RegexpWithEmptyAlternationGroupWorks [ OK ] ParserTests.RegexpWithEmptyAlternationGroupWorks (19 ms) [ RUN ] ParserTests.InvalidCuckooRuleAccessTokenStream [ OK ] ParserTests.InvalidCuckooRuleAccessTokenStream (19 ms) [ RUN ] ParserTests.ComplicatedRegexpClassWorks [ OK ] ParserTests.ComplicatedRegexpClassWorks (20 ms) [ RUN ] ParserTests.RegexpWithIterationWorks [ OK ] ParserTests.RegexpWithIterationWorks (18 ms) [ RUN ] ParserTests.RegexpWithPositiveIterationWorks [ OK ] ParserTests.RegexpWithPositiveIterationWorks (19 ms) [ RUN ] ParserTests.RegexpWithOptionalWorks [ OK ] ParserTests.RegexpWithOptionalWorks (19 ms) [ RUN ] ParserTests.RegexpWithRangesWorks [ OK ] ParserTests.RegexpWithRangesWorks (19 ms) [ RUN ] ParserTests.RegexpWithGreedyOperatorsWorks [ OK ] ParserTests.RegexpWithGreedyOperatorsWorks (19 ms) [ RUN ] ParserTests.RegexpWithGroupsWorks [ OK ] ParserTests.RegexpWithGroupsWorks (20 ms) [ RUN ] ParserTests.RegexpWithOrWorks [ OK ] ParserTests.RegexpWithOrWorks (18 ms) [ RUN ] ParserTests.RegexpWithModifiersWorks [ OK ] ParserTests.RegexpWithModifiersWorks (19 ms) [ RUN ] ParserTests.RegexpWithUndefinedRangeForbidden [ OK ] ParserTests.RegexpWithUndefinedRangeForbidden (19 ms) [ RUN ] ParserTests.RegexpWithInvalidRangeForbidden [ OK ] ParserTests.RegexpWithInvalidRangeForbidden (19 ms) [ RUN ] ParserTests.RulesWithVariablesAndStringsWork [ OK ] ParserTests.RulesWithVariablesAndStringsWork (19 ms) [ RUN ] ParserTests.RuleWithUnorderedSections [ OK ] ParserTests.RuleWithUnorderedSections (19 ms) [ RUN ] ParserTests.GlobalRuleModifierWorks [ OK ] ParserTests.GlobalRuleModifierWorks (18 ms) [ RUN ] ParserTests.PrivateRuleModifierWorks [ OK ] ParserTests.PrivateRuleModifierWorks (19 ms) [ RUN ] ParserTests.PrivateGlobalRuleModifierWorks [ OK ] ParserTests.PrivateGlobalRuleModifierWorks (19 ms) [ RUN ] ParserTests.SetRuleModifierWorks [ OK ] ParserTests.SetRuleModifierWorks (19 ms) [ RUN ] ParserTests.SetRuleModifierWorksWithDeleting [ OK ] ParserTests.SetRuleModifierWorksWithDeleting (19 ms) [ RUN ] ParserTests.ImportWorks [ OK ] ParserTests.ImportWorks (19 ms) [ RUN ] ParserTests.ImportOfUnrecognizedModuleForbidden [ OK ] ParserTests.ImportOfUnrecognizedModuleForbidden (19 ms) [ RUN ] ParserTests.TrueConditionWorks [ OK ] ParserTests.TrueConditionWorks (18 ms) [ RUN ] ParserTests.FalseConditionWorks [ OK ] ParserTests.FalseConditionWorks (19 ms) [ RUN ] ParserTests.StringIdConditionWorks [ OK ] ParserTests.StringIdConditionWorks (18 ms) [ RUN ] ParserTests.StringAtEntryPointConditionWorks [ OK ] ParserTests.StringAtEntryPointConditionWorks (19 ms) [ RUN ] ParserTests.StringInRangeConditionWorks [ OK ] ParserTests.StringInRangeConditionWorks (19 ms) [ RUN ] ParserTests.StringInRangeConditionWorks2 [ OK ] ParserTests.StringInRangeConditionWorks2 (19 ms) [ RUN ] ParserTests.NotConditionWorks [ OK ] ParserTests.NotConditionWorks (19 ms) [ RUN ] ParserTests.AndConditionWorks [ OK ] ParserTests.AndConditionWorks (19 ms) [ RUN ] ParserTests.AndConditionWorks2 [ OK ] ParserTests.AndConditionWorks2 (19 ms) [ RUN ] ParserTests.OrConditionWorks [ OK ] ParserTests.OrConditionWorks (19 ms) [ RUN ] ParserTests.EscapedOrConditionWorks [ OK ] ParserTests.EscapedOrConditionWorks (19 ms) [ RUN ] ParserTests.RelationalConditionWorks [ OK ] ParserTests.RelationalConditionWorks (19 ms) [ RUN ] ParserTests.ParenthesesConditionWorks [ OK ] ParserTests.ParenthesesConditionWorks (19 ms) [ RUN ] ParserTests.ArithmeticOpConditionWorksSimple [ OK ] ParserTests.ArithmeticOpConditionWorksSimple (19 ms) [ RUN ] ParserTests.ArithmeticOpConditionWorks [ OK ] ParserTests.ArithmeticOpConditionWorks (20 ms) [ RUN ] ParserTests.ArithmeticOpConditionWorks2 [ OK ] ParserTests.ArithmeticOpConditionWorks2 (18 ms) [ RUN ] ParserTests.BitwiseOpConditionNegation [ OK ] ParserTests.BitwiseOpConditionNegation (19 ms) [ RUN ] ParserTests.BitwiseOpConditionWorks [ OK ] ParserTests.BitwiseOpConditionWorks (20 ms) [ RUN ] ParserTests.IntFunctionConditionWorks [ OK ] ParserTests.IntFunctionConditionWorks (19 ms) [ RUN ] ParserTests.DoubleInConditionWorks [ OK ] ParserTests.DoubleInConditionWorks (18 ms) [ RUN ] ParserTests.ContainsInConditionWorks [ OK ] ParserTests.ContainsInConditionWorks (19 ms) [ RUN ] ParserTests.MatchesInConditionWorks [ OK ] ParserTests.MatchesInConditionWorks (19 ms) [ RUN ] ParserTests.StringCountConditionWorks [ OK ] ParserTests.StringCountConditionWorks (19 ms) [ RUN ] ParserTests.StringOffsetConditionWorks [ OK ] ParserTests.StringOffsetConditionWorks (19 ms) [ RUN ] ParserTests.HexadecimalNumbersInConditionWorks [ OK ] ParserTests.HexadecimalNumbersInConditionWorks (19 ms) [ RUN ] ParserTests.StringLengthConditionWorks [ OK ] ParserTests.StringLengthConditionWorks (20 ms) [ RUN ] ParserTests.FunctionCallConditionWorks [ OK ] ParserTests.FunctionCallConditionWorks (18 ms) [ RUN ] ParserTests.StructureAccessConditionWorks [ OK ] ParserTests.StructureAccessConditionWorks (19 ms) [ RUN ] ParserTests.ArrayAccessConditionWorks1 [ OK ] ParserTests.ArrayAccessConditionWorks1 (19 ms) [ RUN ] ParserTests.ArrayAccessConditionWorks2 [ OK ] ParserTests.ArrayAccessConditionWorks2 (19 ms) [ RUN ] ParserTests.ForIntegerSetConditionWorks [ OK ] ParserTests.ForIntegerSetConditionWorks (18 ms) [ RUN ] ParserTests.ForArrayConditionWorks [ OK ] ParserTests.ForArrayConditionWorks (19 ms) [ RUN ] ParserTests.NestedForArrayConditionWorks [ OK ] ParserTests.NestedForArrayConditionWorks (19 ms) [ RUN ] ParserTests.UserDefinedArrayWorks [ OK ] ParserTests.UserDefinedArrayWorks (20 ms) [ RUN ] ParserTests.ForDictConditionWorks [ OK ] ParserTests.ForDictConditionWorks (18 ms) [ RUN ] ParserTests.ForStringSetConditionWorks [ OK ] ParserTests.ForStringSetConditionWorks (19 ms) [ RUN ] ParserTests.ForStringLiteralSetConditionWorks [ OK ] ParserTests.ForStringLiteralSetConditionWorks (19 ms) [ RUN ] ParserTests.ForStringLiteralSetWithOneStringConditionWorks [ OK ] ParserTests.ForStringLiteralSetWithOneStringConditionWorks (19 ms) [ RUN ] ParserTests.ForStringLiteralSetWithStringSymbolsConditionWorks [ OK ] ParserTests.ForStringLiteralSetWithStringSymbolsConditionWorks (19 ms) [ RUN ] ParserTests.ForExpressionSetWithItemsVariousTypesForbidden [ OK ] ParserTests.ForExpressionSetWithItemsVariousTypesForbidden (18 ms) [ RUN ] ParserTests.NoneOfThemConditionWorks [ OK ] ParserTests.NoneOfThemConditionWorks (19 ms) [ RUN ] ParserTests.NoneOfSetConditionWorks [ OK ] ParserTests.NoneOfSetConditionWorks (20 ms) [ RUN ] ParserTests.OfConditionWorks [ OK ] ParserTests.OfConditionWorks (19 ms) [ RUN ] ParserTests.OfAtConditionWorks [ OK ] ParserTests.OfAtConditionWorks (19 ms) [ RUN ] ParserTests.OfAtWithStringSetConditionWorks [ OK ] ParserTests.OfAtWithStringSetConditionWorks (19 ms) [ RUN ] ParserTests.OfWithStringSetAndAtWithExpressionConditionWorks [ OK ] ParserTests.OfWithStringSetAndAtWithExpressionConditionWorks (19 ms) [ RUN ] ParserTests.EmptyStringMetaValue [ OK ] ParserTests.EmptyStringMetaValue (19 ms) [ RUN ] ParserTests.EmptyPlainStringValue [ OK ] ParserTests.EmptyPlainStringValue (19 ms) [ RUN ] ParserTests.EmptyStringInConditionWorks [ OK ] ParserTests.EmptyStringInConditionWorks (19 ms) [ RUN ] ParserTests.StringsAndArithmeticOperationsForbidden [ OK ] ParserTests.StringsAndArithmeticOperationsForbidden (19 ms) [ RUN ] ParserTests.BoolAndArithmeticOperationsForbidden [ OK ] ParserTests.BoolAndArithmeticOperationsForbidden (18 ms) [ RUN ] ParserTests.ContainsAndNonStringForbidden [ OK ] ParserTests.ContainsAndNonStringForbidden (19 ms) [ RUN ] ParserTests.UndefinedStringReferenceForbidden [ OK ] ParserTests.UndefinedStringReferenceForbidden (19 ms) [ RUN ] ParserTests.StringWildcardConditionWorks [ OK ] ParserTests.StringWildcardConditionWorks (19 ms) [ RUN ] ParserTests.StringWildcardConditionWithNoMatchingStringForbidden [ OK ] ParserTests.StringWildcardConditionWithNoMatchingStringForbidden (19 ms) [ RUN ] ParserTests.SameVariableInNestedForLoopsForbidden [ OK ] ParserTests.SameVariableInNestedForLoopsForbidden (19 ms) [ RUN ] ParserTests.FloatValueWorks [ OK ] ParserTests.FloatValueWorks (19 ms) [ RUN ] ParserTests.FloatValueWorks2 [ OK ] ParserTests.FloatValueWorks2 (20 ms) [ RUN ] ParserTests.ConsoleModuleWorks [ OK ] ParserTests.ConsoleModuleWorks (20 ms) [ RUN ] ParserTests.CuckooModuleWorks [ OK ] ParserTests.CuckooModuleWorks (19 ms) [ RUN ] ParserTests.DotnetModuleWorks [ OK ] ParserTests.DotnetModuleWorks (20 ms) [ RUN ] ParserTests.DexModuleWorks [ OK ] ParserTests.DexModuleWorks (20 ms) [ RUN ] ParserTests.ElfModuleWorks [ OK ] ParserTests.ElfModuleWorks (20 ms) [ RUN ] ParserTests.HashModuleWorks [ OK ] ParserTests.HashModuleWorks (19 ms) [ RUN ] ParserTests.MagicModuleWorks [ OK ] ParserTests.MagicModuleWorks (19 ms) [ RUN ] ParserTests.MathModuleWorks1 [ OK ] ParserTests.MathModuleWorks1 (19 ms) [ RUN ] ParserTests.MathModuleWorks2 [ OK ] ParserTests.MathModuleWorks2 (20 ms) [ RUN ] ParserTests.PeModuleWorks1 [ OK ] ParserTests.PeModuleWorks1 (20 ms) [ RUN ] ParserTests.PeModuleWorks2 [ OK ] ParserTests.PeModuleWorks2 (19 ms) [ RUN ] ParserTests.PeModuleWorks3 [ OK ] ParserTests.PeModuleWorks3 (20 ms) [ RUN ] ParserTests.VirusTotalSymbolsWork [ OK ] ParserTests.VirusTotalSymbolsWork (20 ms) [ RUN ] ParserTests.TransformationToTextWorks [ OK ] ParserTests.TransformationToTextWorks (19 ms) [ RUN ] ParserTests.RemoveLineBeforeAndWorks [ OK ] ParserTests.RemoveLineBeforeAndWorks (21 ms) [ RUN ] ParserTests.RemoveLineBeforeAndWithCommentsWorks [ OK ] ParserTests.RemoveLineBeforeAndWithCommentsWorks (18 ms) [ RUN ] ParserTests.RemoveLineBeforeAndWithComments2Works [ OK ] ParserTests.RemoveLineBeforeAndWithComments2Works (20 ms) [ RUN ] ParserTests.MultipleRulesWorks2 [ OK ] ParserTests.MultipleRulesWorks2 (19 ms) [ RUN ] ParserTests.KbMbIntegerMultipliersWorks [ OK ] ParserTests.KbMbIntegerMultipliersWorks (19 ms) [ RUN ] ParserTests.ReferencingRuleFromOtherRuleWorks [ OK ] ParserTests.ReferencingRuleFromOtherRuleWorks (19 ms) [ RUN ] ParserTests.RegexpWithSuffixModifierWorks [ OK ] ParserTests.RegexpWithSuffixModifierWorks (19 ms) [ RUN ] ParserTests.GlobalVariablesWorks [ OK ] ParserTests.GlobalVariablesWorks (19 ms) [ RUN ] ParserTests.LengthOfHexStringWorks [ OK ] ParserTests.LengthOfHexStringWorks (19 ms) [ RUN ] ParserTests.HexStringWithSpacesInJumpWorks [ OK ] ParserTests.HexStringWithSpacesInJumpWorks (19 ms) [ RUN ] ParserTests.ComplicatedHexStringAlterationWorks [ OK ] ParserTests.ComplicatedHexStringAlterationWorks (18 ms) [ RUN ] ParserTests.ComplicatedHexStringWorks [ OK ] ParserTests.ComplicatedHexStringWorks (19 ms) [ RUN ] ParserTests.NibbleGetterWorks [ OK ] ParserTests.NibbleGetterWorks (19 ms) [ RUN ] ParserTests.HexEscapeWorks [ OK ] ParserTests.HexEscapeWorks (19 ms) [ RUN ] ParserTests.EscapedSequencesInMetaWorks [ OK ] ParserTests.EscapedSequencesInMetaWorks (19 ms) [ RUN ] ParserTests.EscapedSequencesWorks [ OK ] ParserTests.EscapedSequencesWorks (18 ms) [ RUN ] ParserTests.InvalidEscapedSequence1 [ OK ] ParserTests.InvalidEscapedSequence1 (19 ms) [ RUN ] ParserTests.InvalidEscapedSequence2 [ OK ] ParserTests.InvalidEscapedSequence2 (19 ms) [ RUN ] ParserTests.NewlineInHexString [ OK ] ParserTests.NewlineInHexString (19 ms) [ RUN ] ParserTests.ErrorWhenUnknownTokenAfterImport [ OK ] ParserTests.ErrorWhenUnknownTokenAfterImport (19 ms) [ RUN ] ParserTests.PeDataDirectoryIsArray [ OK ] ParserTests.PeDataDirectoryIsArray (18 ms) [ RUN ] ParserTests.AnonymousStrings [ OK ] ParserTests.AnonymousStrings (19 ms) [ RUN ] ParserTests.AllOfThemInOperator [ OK ] ParserTests.AllOfThemInOperator (22 ms) [ RUN ] ParserTests.AllOfInOperatorAndAnyOfInOperator [ OK ] ParserTests.AllOfInOperatorAndAnyOfInOperator (23 ms) [ RUN ] ParserTests.StringCountInRange [ OK ] ParserTests.StringCountInRange (20 ms) [ RUN ] ParserTests.CommentsInCommonLocations [ OK ] ParserTests.CommentsInCommonLocations (20 ms) [ RUN ] ParserTests.CommentsInHexString [ OK ] ParserTests.CommentsInHexString (19 ms) [ RUN ] ParserTests.CommentsInCondition [ OK ] ParserTests.CommentsInCondition (20 ms) [ RUN ] ParserTests.ForCycleMultipleRows [ OK ] ParserTests.ForCycleMultipleRows (20 ms) [ RUN ] ParserTests.ForCycleMultipleRowsWithCRLF [ OK ] ParserTests.ForCycleMultipleRowsWithCRLF (19 ms) [ RUN ] ParserTests.OneMoreTest [ OK ] ParserTests.OneMoreTest (20 ms) [ RUN ] ParserTests.NonUTFmetaWorks [ OK ] ParserTests.NonUTFmetaWorks (19 ms) [ RUN ] ParserTests.NonUTFconditionWorks [ OK ] ParserTests.NonUTFconditionWorks (19 ms) [ RUN ] ParserTests.NonUTFcommentWorks [ OK ] ParserTests.NonUTFcommentWorks (18 ms) [ RUN ] ParserTests.NonUTFcommentsWork [ OK ] ParserTests.NonUTFcommentsWork (20 ms) [ RUN ] ParserTests.RemoveTrailingWhitespacesFromComments [ OK ] ParserTests.RemoveTrailingWhitespacesFromComments (19 ms) [ RUN ] ParserTests.AddMetaAfterParse [ OK ] ParserTests.AddMetaAfterParse (18 ms) [ RUN ] ParserTests.SetTagsAfterParse [ OK ] ParserTests.SetTagsAfterParse (20 ms) [ RUN ] ParserTests.RemoveMetasAfterParse [ OK ] ParserTests.RemoveMetasAfterParse (19 ms) [ RUN ] ParserTests.ParseIncompleteUnknownImport [ OK ] ParserTests.ParseIncompleteUnknownImport (19 ms) [ RUN ] ParserTests.ParseIncompleteReferenceUnknownSymbol [ OK ] ParserTests.ParseIncompleteReferenceUnknownSymbol (18 ms) [ RUN ] ParserTests.ParseIncompleteUnknownObjectSymbol [ OK ] ParserTests.ParseIncompleteUnknownObjectSymbol (19 ms) [ RUN ] ParserTests.ParseIncompleteUnknownObjectSymbolFromKnownModule [ OK ] ParserTests.ParseIncompleteUnknownObjectSymbolFromKnownModule (18 ms) [ RUN ] ParserTests.ParseIncompleteUnknownArraySymbol [ OK ] ParserTests.ParseIncompleteUnknownArraySymbol (20 ms) [ RUN ] ParserTests.ParseIncompleteUnknownArraySymbolFromKnownModule [ OK ] ParserTests.ParseIncompleteUnknownArraySymbolFromKnownModule (19 ms) [ RUN ] ParserTests.ParseIncompleteUnknownArraySymbolFromUnknownModule [ OK ] ParserTests.ParseIncompleteUnknownArraySymbolFromUnknownModule (19 ms) [ RUN ] ParserTests.ParseIncompleteUnknownObjectSymbolFromUnknownModule [ OK ] ParserTests.ParseIncompleteUnknownObjectSymbolFromUnknownModule (18 ms) [ RUN ] ParserTests.ParseIncompleteUnknownForDict [ OK ] ParserTests.ParseIncompleteUnknownForDict (20 ms) [ RUN ] ParserTests.ParseIncompleteUnknownForDictFromKnownModule [ OK ] ParserTests.ParseIncompleteUnknownForDictFromKnownModule (18 ms) [ RUN ] ParserTests.ParseIncompleteUnknownForDictFromUnknownModule [ OK ] ParserTests.ParseIncompleteUnknownForDictFromUnknownModule (19 ms) [ RUN ] ParserTests.ParseIncompleteUnknownFor [ OK ] ParserTests.ParseIncompleteUnknownFor (19 ms) [ RUN ] ParserTests.ParseIncompleteUnknownForFromKnownModule [ OK ] ParserTests.ParseIncompleteUnknownForFromKnownModule (19 ms) [ RUN ] ParserTests.ParseIncompleteUnknownForFromUnknownModule [ OK ] ParserTests.ParseIncompleteUnknownForFromUnknownModule (19 ms) [ RUN ] ParserTests.ParseIncompleteUnknownFunctionCall [ OK ] ParserTests.ParseIncompleteUnknownFunctionCall (19 ms) [ RUN ] ParserTests.ParseIncompleteUnknownFunctionCallFromKnownModule [ OK ] ParserTests.ParseIncompleteUnknownFunctionCallFromKnownModule (19 ms) [ RUN ] ParserTests.ParseIncompleteUnknownFunctionCallFromUnknownModule [ OK ] ParserTests.ParseIncompleteUnknownFunctionCallFromUnknownModule (19 ms) [ RUN ] ParserTests.ParseIncompleteUnknownFunctionOverloadOfKnownFunction [ OK ] ParserTests.ParseIncompleteUnknownFunctionOverloadOfKnownFunction (19 ms) [ RUN ] ParserTests.ParseIncompleteRuleNotFinished [ OK ] ParserTests.ParseIncompleteRuleNotFinished (19 ms) [ RUN ] ParserTests.AutoformattingClosingBracket [ OK ] ParserTests.AutoformattingClosingBracket (19 ms) [ RUN ] ParserTests.AutoformattingClosingDoubleBracket [ OK ] ParserTests.AutoformattingClosingDoubleBracket (19 ms) [ RUN ] ParserTests.AutoformattingClosingBracketWithOtherBracketsInside [ OK ] ParserTests.AutoformattingClosingBracketWithOtherBracketsInside (19 ms) [ RUN ] ParserTests.AutoformattingMultipleLineBrackets [ OK ] ParserTests.AutoformattingMultipleLineBrackets (20 ms) [ RUN ] ParserTests.AutoformattingProperAlignment [ OK ] ParserTests.AutoformattingProperAlignment (19 ms) [ RUN ] ParserTests.AutoformattingProperAlignmentOrStatement [ OK ] ParserTests.AutoformattingProperAlignmentOrStatement (20 ms) [ RUN ] ParserTests.AutoformattingAddNewlinesMinimal [ OK ] ParserTests.AutoformattingAddNewlinesMinimal (18 ms) [ RUN ] ParserTests.AutoformattingAddNewLines [ OK ] ParserTests.AutoformattingAddNewLines (20 ms) [ RUN ] ParserTests.AutoformattingAddNewlinesToBothSides [ OK ] ParserTests.AutoformattingAddNewlinesToBothSides (19 ms) [ RUN ] ParserTests.AutoformattingAddCRLF [ OK ] ParserTests.AutoformattingAddCRLF (19 ms) [ RUN ] ParserTests.AutoformattingNoSpaceBeforeArrayAccess [ OK ] ParserTests.AutoformattingNoSpaceBeforeArrayAccess (19 ms) [ RUN ] ParserTests.AutoformattingSpaceBeforeComments [ OK ] ParserTests.AutoformattingSpaceBeforeComments (20 ms) [ RUN ] ParserTests.AutoformattingRegexpClasses [ OK ] ParserTests.AutoformattingRegexpClasses (18 ms) [ RUN ] ParserTests.AutoformattingAlignedComments1 [ OK ] ParserTests.AutoformattingAlignedComments1 (20 ms) [ RUN ] ParserTests.AutoformattingAlignedComments2 [ OK ] ParserTests.AutoformattingAlignedComments2 (20 ms) [ RUN ] ParserTests.AutoformattingAlignedComments3 [ OK ] ParserTests.AutoformattingAlignedComments3 (19 ms) [ RUN ] ParserTests.AutoformattingNewlinesMultipleRules [ OK ] ParserTests.AutoformattingNewlinesMultipleRules (19 ms) [ RUN ] ParserTests.AutoformattingRemoveRedundantBlankLines [ OK ] ParserTests.AutoformattingRemoveRedundantBlankLines (19 ms) [ RUN ] ParserTests.AutoformattingRemoveRedundantBlankLines2 [ OK ] ParserTests.AutoformattingRemoveRedundantBlankLines2 (19 ms) [ RUN ] ParserTests.AutoformattingCommentInsideHexstringOnNewline [ OK ] ParserTests.AutoformattingCommentInsideHexstringOnNewline (19 ms) [ RUN ] ParserTests.AutoformattingNoSpaceBeforeNewLine [ OK ] ParserTests.AutoformattingNoSpaceBeforeNewLine (19 ms) [ RUN ] ParserTests.AutoformattingOfOnelineRule [ OK ] ParserTests.AutoformattingOfOnelineRule (20 ms) [ RUN ] ParserTests.AutoformattingOfTwoOnelineRules [ OK ] ParserTests.AutoformattingOfTwoOnelineRules (18 ms) [ RUN ] ParserTests.AutoformattingVariableInCondition [ OK ] ParserTests.AutoformattingVariableInCondition (19 ms) [ RUN ] ParserTests.RenameReferencedRuleWorks [ OK ] ParserTests.RenameReferencedRuleWorks (19 ms) [ RUN ] ParserTests.RenameStringWorks1 [ OK ] ParserTests.RenameStringWorks1 (18 ms) [ RUN ] ParserTests.RenameStringWorks2 [ OK ] ParserTests.RenameStringWorks2 (19 ms) [ RUN ] ParserTests.RenameStringWorks3 [ OK ] ParserTests.RenameStringWorks3 (19 ms) [ RUN ] ParserTests.StringXorModifierWithArguments [ OK ] ParserTests.StringXorModifierWithArguments (18 ms) [ RUN ] ParserTests.StringXorModifierWithOutOfBoundsKey [ OK ] ParserTests.StringXorModifierWithOutOfBoundsKey (19 ms) [ RUN ] ParserTests.StringXorModifierWithOutOfBoundsLowerKey [ OK ] ParserTests.StringXorModifierWithOutOfBoundsLowerKey (19 ms) [ RUN ] ParserTests.StringXorModifierWithOutOfBoundsHigherKey [ OK ] ParserTests.StringXorModifierWithOutOfBoundsHigherKey (18 ms) [ RUN ] ParserTests.StringXorModifierWithLowerBoundGreaterThanHigherBound [ OK ] ParserTests.StringXorModifierWithLowerBoundGreaterThanHigherBound (19 ms) [ RUN ] ParserTests.PrivateStringModifier [ OK ] ParserTests.PrivateStringModifier (19 ms) [ RUN ] ParserTests.UnexpectedEndOfFile [ OK ] ParserTests.UnexpectedEndOfFile (19 ms) [ RUN ] ParserTests.ReuseOfParserAfterError [ OK ] ParserTests.ReuseOfParserAfterError (19 ms) [ RUN ] ParserTests.DefinedExpression [ OK ] ParserTests.DefinedExpression (18 ms) [ RUN ] ParserTests.IequalsExpression [ OK ] ParserTests.IequalsExpression (20 ms) [ RUN ] ParserTests.ParsePeSignaturesXAlgorithmOID [ OK ] ParserTests.ParsePeSignaturesXAlgorithmOID (20 ms) [ RUN ] ParserTests.ParseELFDynsym [ OK ] ParserTests.ParseELFDynsym (19 ms) [ RUN ] ParserTests.ParsePercentage1Error [ OK ] ParserTests.ParsePercentage1Error (20 ms) [ RUN ] ParserTests.ParsePercentage2Error [ OK ] ParserTests.ParsePercentage2Error (18 ms) [ RUN ] ParserTests.ParsePercentage3 [ OK ] ParserTests.ParsePercentage3 (20 ms) [ RUN ] ParserTests.ParsePercentage4 [ OK ] ParserTests.ParsePercentage4 (20 ms) [ RUN ] ParserTests.ParsePercentage5 [ OK ] ParserTests.ParsePercentage5 (18 ms) [ RUN ] ParserTests.ParsePercentage6 [ OK ] ParserTests.ParsePercentage6 (20 ms) [ RUN ] ParserTests.ParsePercentage7 [ OK ] ParserTests.ParsePercentage7 (19 ms) [ RUN ] ParserTests.ParseOfRule [ OK ] ParserTests.ParseOfRule (19 ms) [ RUN ] ParserTests.ParseOfRuleInvalid [ OK ] ParserTests.ParseOfRuleInvalid (19 ms) [ RUN ] ParserTests.ParseOfRuleWildcard [ OK ] ParserTests.ParseOfRuleWildcard (19 ms) [ RUN ] ParserTests.ParseOfRuleWildcardInvalid [ OK ] ParserTests.ParseOfRuleWildcardInvalid (19 ms) [ RUN ] ParserTests.ParseAmbiguousWithIdWildcard [ OK ] ParserTests.ParseAmbiguousWithIdWildcard (18 ms) [ RUN ] ParserTests.ExpressionUids [ OK ] ParserTests.ExpressionUids (21 ms) [ RUN ] ParserTests.OctalIntegerWorks [ OK ] ParserTests.OctalIntegerWorks (19 ms) [ RUN ] ParserTests.Yara423FunctionsWorks [ OK ] ParserTests.Yara423FunctionsWorks (19 ms) [ RUN ] ParserTests.HexStringNotWorks [ OK ] ParserTests.HexStringNotWorks (19 ms) [ RUN ] ParserTests.IcontainsExpression [ OK ] ParserTests.IcontainsExpression (18 ms) [ RUN ] ParserTests.IendsWithExpression [ OK ] ParserTests.IendsWithExpression (19 ms) [ RUN ] ParserTests.IstartsWithExpression [ OK ] ParserTests.IstartsWithExpression (20 ms) [ RUN ] ParserTests.StartsWithExpression [ OK ] ParserTests.StartsWithExpression (19 ms) [ RUN ] ParserTests.EndsWithExpression [ OK ] ParserTests.EndsWithExpression (18 ms) [ RUN ] ParserTests.StringModuleWorks [ OK ] ParserTests.StringModuleWorks (19 ms) [----------] 256 tests from ParserTests (5062 ms total) [----------] 14 tests from TrieTests [ RUN ] TrieTests.InsertAndFindWorks [ OK ] TrieTests.InsertAndFindWorks (0 ms) [ RUN ] TrieTests.InsertFailsOnDuplicateInsertWorks [ OK ] TrieTests.InsertFailsOnDuplicateInsertWorks (0 ms) [ RUN ] TrieTests.FindFailsIfKeyNotPresentWorks [ OK ] TrieTests.FindFailsIfKeyNotPresentWorks (0 ms) [ RUN ] TrieTests.IsPrefixWorks [ OK ] TrieTests.IsPrefixWorks (0 ms) [ RUN ] TrieTests.IsPrefixFailsIfKeyNotPresentWorks [ OK ] TrieTests.IsPrefixFailsIfKeyNotPresentWorks (0 ms) [ RUN ] TrieTests.GetAllValuesWorks [ OK ] TrieTests.GetAllValuesWorks (0 ms) [ RUN ] TrieTests.GetAllValuesPreservesInsertionOrderWorks [ OK ] TrieTests.GetAllValuesPreservesInsertionOrderWorks (0 ms) [ RUN ] TrieTests.GetValuesWithPrefixWorks [ OK ] TrieTests.GetValuesWithPrefixWorks (0 ms) [ RUN ] TrieTests.EmptyWorks [ OK ] TrieTests.EmptyWorks (0 ms) [ RUN ] TrieTests.ClearWorks [ OK ] TrieTests.ClearWorks (0 ms) [ RUN ] TrieTests.RemoveWorks [ OK ] TrieTests.RemoveWorks (0 ms) [ RUN ] TrieTests.RemoveWithMultiDeleteWorks [ OK ] TrieTests.RemoveWithMultiDeleteWorks (0 ms) [ RUN ] TrieTests.RemoveWithParentRemovedWorks [ OK ] TrieTests.RemoveWithParentRemovedWorks (0 ms) [ RUN ] TrieTests.RemoveClearsWorks [ OK ] TrieTests.RemoveClearsWorks (0 ms) [----------] 14 tests from TrieTests (0 ms total) [----------] 4 tests from UtilsTests [ RUN ] UtilsTests.IsValidIdentifierWorks [ OK ] UtilsTests.IsValidIdentifierWorks (0 ms) [ RUN ] UtilsTests.EscapeStringWorks [ OK ] UtilsTests.EscapeStringWorks (0 ms) [ RUN ] UtilsTests.UnescapeStringWorks [ OK ] UtilsTests.UnescapeStringWorks (0 ms) [ RUN ] UtilsTests.NumToStrWorks [ OK ] UtilsTests.NumToStrWorks (0 ms) [----------] 4 tests from UtilsTests (0 ms total) [----------] 22 tests from VisitorTests [ RUN ] VisitorTests.StringExpressionVisitorInpactOnTokenStream [ OK ] VisitorTests.StringExpressionVisitorInpactOnTokenStream (19 ms) [ RUN ] VisitorTests.RegexpModifyingVisitorInpactOnTokenStream [ OK ] VisitorTests.RegexpModifyingVisitorInpactOnTokenStream (20 ms) [ RUN ] VisitorTests.BoolModifyingVisitorInpactOnTokenStream1 [ OK ] VisitorTests.BoolModifyingVisitorInpactOnTokenStream1 (19 ms) [ RUN ] VisitorTests.BoolModifyingVisitorInpactOnTokenStream2 [ OK ] VisitorTests.BoolModifyingVisitorInpactOnTokenStream2 (19 ms) [ RUN ] VisitorTests.IntLiteralModifyingVisitorInpactOnTokenStream [ OK ] VisitorTests.IntLiteralModifyingVisitorInpactOnTokenStream (19 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerBoolLiteralExpression [ OK ] VisitorTests.CuckooFunctionReplacerBoolLiteralExpression (18 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerCuckooSyncEvent [ OK ] VisitorTests.CuckooFunctionReplacerCuckooSyncEvent (20 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerOrExpression1 [ OK ] VisitorTests.CuckooFunctionReplacerOrExpression1 (19 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerOrExpression2 [ OK ] VisitorTests.CuckooFunctionReplacerOrExpression2 (20 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerOrExpression3 [ OK ] VisitorTests.CuckooFunctionReplacerOrExpression3 (19 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerOrExpression4 [ OK ] VisitorTests.CuckooFunctionReplacerOrExpression4 (18 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerAndExpression1 [ OK ] VisitorTests.CuckooFunctionReplacerAndExpression1 (21 ms) [ RUN ] VisitorTests.IterableModifyingVisitorImpactOnTokenStream [ OK ] VisitorTests.IterableModifyingVisitorImpactOnTokenStream (20 ms) [ RUN ] VisitorTests.AndExpressionSwitcherAndExpression1 [ OK ] VisitorTests.AndExpressionSwitcherAndExpression1 (19 ms) [ RUN ] VisitorTests.AndExpressionSwitcherAndExpression2 [ OK ] VisitorTests.AndExpressionSwitcherAndExpression2 (18 ms) [ RUN ] VisitorTests.OrExpressionSwitcherOrExpression1 [ OK ] VisitorTests.OrExpressionSwitcherOrExpression1 (19 ms) [ RUN ] VisitorTests.OrExpressionSwitcherOrExpression2 [ OK ] VisitorTests.OrExpressionSwitcherOrExpression2 (20 ms) [ RUN ] VisitorTests.EqExpressionSwitcher [ OK ] VisitorTests.EqExpressionSwitcher (19 ms) [ RUN ] VisitorTests.DeletingVisitor1 [ OK ] VisitorTests.DeletingVisitor1 (21 ms) [ RUN ] VisitorTests.RuleModifierWorksWhenDeletingRules [ OK ] VisitorTests.RuleModifierWorksWhenDeletingRules (19 ms) [ RUN ] VisitorTests.DeletingVisitor2 [ OK ] VisitorTests.DeletingVisitor2 (20 ms) [ RUN ] VisitorTests.DeletingVisitor3 [ OK ] VisitorTests.DeletingVisitor3 (20 ms) [----------] 22 tests from VisitorTests (440 ms total) [----------] 1 test from YaraFileTests [ RUN ] YaraFileTests.ExpandRuleFromOrigin [ OK ] YaraFileTests.ExpandRuleFromOrigin (19 ms) [----------] 1 test from YaraFileTests (19 ms total) [----------] 4 tests from YaramodTests [ RUN ] YaramodTests.MultipleParsePhasesWithSingleYaramod [ OK ] YaramodTests.MultipleParsePhasesWithSingleYaramod (19 ms) [ RUN ] YaramodTests.AddMeta [ OK ] YaramodTests.AddMeta (19 ms) [ RUN ] YaramodTests.AddMetaToRulesWithComments [ OK ] YaramodTests.AddMetaToRulesWithComments (19 ms) [ RUN ] YaramodTests.SetMeta [ OK ] YaramodTests.SetMeta (19 ms) [----------] 4 tests from YaramodTests (77 ms total) [----------] Global test environment tear-down [==========] 398 tests from 9 test suites ran. (7817 ms total) [ PASSED ] 398 tests. # tests.python.test_parser.ParserTests bug LD_LIBRARY_PATH=/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu/src:$LD_LIBRARY_PATH dh_auto_test -a -O--buildsystem=pybuild I: pybuild base:311: cd /build/reproducible-path/yaramod-3.21.0/.pybuild/cpython3_3.13/build; python3.13 -m unittest discover -v test_empty_file (tests.python.test_builder.BuilderTests.test_empty_file) ... ok test_empty_rule (tests.python.test_builder.BuilderTests.test_empty_rule) ... ok test_multiple_rules (tests.python.test_builder.BuilderTests.test_multiple_rules) ... ok test_pure_imports (tests.python.test_builder.BuilderTests.test_pure_imports) ... ok test_rule_with_and_condition (tests.python.test_builder.BuilderTests.test_rule_with_and_condition) ... ok test_rule_with_and_condition_with_comments (tests.python.test_builder.BuilderTests.test_rule_with_and_condition_with_comments) ... ok test_rule_with_and_condition_with_comments_behind (tests.python.test_builder.BuilderTests.test_rule_with_and_condition_with_comments_behind) ... ok test_rule_with_array_access_condition (tests.python.test_builder.BuilderTests.test_rule_with_array_access_condition) ... ok test_rule_with_bitwise_and_condition (tests.python.test_builder.BuilderTests.test_rule_with_bitwise_and_condition) ... ok test_rule_with_bitwise_not_condition (tests.python.test_builder.BuilderTests.test_rule_with_bitwise_not_condition) ... ok test_rule_with_bitwise_or_condition (tests.python.test_builder.BuilderTests.test_rule_with_bitwise_or_condition) ... ok test_rule_with_comments (tests.python.test_builder.BuilderTests.test_rule_with_comments) ... ok test_rule_with_complex_condition (tests.python.test_builder.BuilderTests.test_rule_with_complex_condition) ... ok test_rule_with_custom_modules (tests.python.test_builder.BuilderTests.test_rule_with_custom_modules) ... ok test_rule_with_defined_condition (tests.python.test_builder.BuilderTests.test_rule_with_defined_condition) ... ok test_rule_with_dictionary_access_condition (tests.python.test_builder.BuilderTests.test_rule_with_dictionary_access_condition) ... ok test_rule_with_divide_condition (tests.python.test_builder.BuilderTests.test_rule_with_divide_condition) ... ok test_rule_with_double_values (tests.python.test_builder.BuilderTests.test_rule_with_double_values) ... ok test_rule_with_eq_condition (tests.python.test_builder.BuilderTests.test_rule_with_eq_condition) ... ok test_rule_with_for_loop_over_dictionary (tests.python.test_builder.BuilderTests.test_rule_with_for_loop_over_dictionary) ... ok test_rule_with_function_call_and_oneline_comment (tests.python.test_builder.BuilderTests.test_rule_with_function_call_and_oneline_comment) ... ok test_rule_with_function_call_condition (tests.python.test_builder.BuilderTests.test_rule_with_function_call_condition) ... ok test_rule_with_ge_condition (tests.python.test_builder.BuilderTests.test_rule_with_ge_condition) ... ok test_rule_with_gt_condition (tests.python.test_builder.BuilderTests.test_rule_with_gt_condition) ... ok test_rule_with_hex_string (tests.python.test_builder.BuilderTests.test_rule_with_hex_string) ... ok test_rule_with_le_condition (tests.python.test_builder.BuilderTests.test_rule_with_le_condition) ... ok test_rule_with_lt_condition (tests.python.test_builder.BuilderTests.test_rule_with_lt_condition) ... ok test_rule_with_match_count_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_count_condition) ... ok test_rule_with_match_in_range_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_in_range_condition) ... ok test_rule_with_match_length_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_length_condition) ... ok test_rule_with_match_length_with_index_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_length_with_index_condition) ... ok test_rule_with_match_offset_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_offset_condition) ... ok test_rule_with_match_offset_with_index_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_offset_with_index_condition) ... ok test_rule_with_metas (tests.python.test_builder.BuilderTests.test_rule_with_metas) ... ok test_rule_with_minus_condition (tests.python.test_builder.BuilderTests.test_rule_with_minus_condition) ... ok test_rule_with_modifiers (tests.python.test_builder.BuilderTests.test_rule_with_modifiers) ... ok test_rule_with_modulo_condition (tests.python.test_builder.BuilderTests.test_rule_with_modulo_condition) ... ok test_rule_with_multiply_condition (tests.python.test_builder.BuilderTests.test_rule_with_multiply_condition) ... ok test_rule_with_neq_condition (tests.python.test_builder.BuilderTests.test_rule_with_neq_condition) ... ok test_rule_with_not_condition (tests.python.test_builder.BuilderTests.test_rule_with_not_condition) ... ok test_rule_with_of_at_offset_condition (tests.python.test_builder.BuilderTests.test_rule_with_of_at_offset_condition) ... ok test_rule_with_of_in_range_condition (tests.python.test_builder.BuilderTests.test_rule_with_of_in_range_condition) ... ok test_rule_with_or_condition (tests.python.test_builder.BuilderTests.test_rule_with_or_condition) ... ok test_rule_with_or_condition_with_comments (tests.python.test_builder.BuilderTests.test_rule_with_or_condition_with_comments) ... ok test_rule_with_or_condition_with_single_comment (tests.python.test_builder.BuilderTests.test_rule_with_or_condition_with_single_comment) ... ok test_rule_with_pe_int_constants_condition (tests.python.test_builder.BuilderTests.test_rule_with_pe_int_constants_condition) ... ok test_rule_with_percentage_of_stringset (tests.python.test_builder.BuilderTests.test_rule_with_percentage_of_stringset) ... ok test_rule_with_plain_string (tests.python.test_builder.BuilderTests.test_rule_with_plain_string) ... ok test_rule_with_plus_condition (tests.python.test_builder.BuilderTests.test_rule_with_plus_condition) ... ok test_rule_with_regexp (tests.python.test_builder.BuilderTests.test_rule_with_regexp) ... ok test_rule_with_shift_left_condition (tests.python.test_builder.BuilderTests.test_rule_with_shift_left_condition) ... ok test_rule_with_shift_right_condition (tests.python.test_builder.BuilderTests.test_rule_with_shift_right_condition) ... ok test_rule_with_string_at_condition (tests.python.test_builder.BuilderTests.test_rule_with_string_at_condition) ... ok test_rule_with_string_id_condition (tests.python.test_builder.BuilderTests.test_rule_with_string_id_condition) ... ok test_rule_with_string_literal_set (tests.python.test_builder.BuilderTests.test_rule_with_string_literal_set) ... ok test_rule_with_string_modifiers (tests.python.test_builder.BuilderTests.test_rule_with_string_modifiers) ... ok test_rule_with_structure_access_condition (tests.python.test_builder.BuilderTests.test_rule_with_structure_access_condition) ... ok test_rule_with_tags (tests.python.test_builder.BuilderTests.test_rule_with_tags) ... ok test_rule_with_unary_minus_condition (tests.python.test_builder.BuilderTests.test_rule_with_unary_minus_condition) ... ok test_rule_with_variable_id_condition (tests.python.test_builder.BuilderTests.test_rule_with_variable_id_condition) ... ok test_rule_with_variables (tests.python.test_builder.BuilderTests.test_rule_with_variables) ... ok test_rule_with_xor_condition (tests.python.test_builder.BuilderTests.test_rule_with_xor_condition) ... ok test_add_meta (tests.python.test_parser.ParserTests.test_add_meta) ... ok test_and_condition (tests.python.test_parser.ParserTests.test_and_condition) ... ok test_array_access_condition (tests.python.test_parser.ParserTests.test_array_access_condition) ... ok test_bitwise_and_condition (tests.python.test_parser.ParserTests.test_bitwise_and_condition) ... ok test_bitwise_not_condition (tests.python.test_parser.ParserTests.test_bitwise_not_condition) ... ok test_bitwise_or_condition (tests.python.test_parser.ParserTests.test_bitwise_or_condition) ... ok test_bool_literal_condition (tests.python.test_parser.ParserTests.test_bool_literal_condition) ... ok test_complex_regular_expression_in_fnc_call (tests.python.test_parser.ParserTests.test_complex_regular_expression_in_fnc_call) ... ok test_complex_regular_expression_in_strings (tests.python.test_parser.ParserTests.test_complex_regular_expression_in_strings) ... ok test_contains_condition (tests.python.test_parser.ParserTests.test_contains_condition) ... ok test_divide_condition (tests.python.test_parser.ParserTests.test_divide_condition) ... ok test_double_literal_condition (tests.python.test_parser.ParserTests.test_double_literal_condition) ... ok test_empty_input (tests.python.test_parser.ParserTests.test_empty_input) ... ok test_empty_rule (tests.python.test_parser.ParserTests.test_empty_rule) ... ok test_equal_condition (tests.python.test_parser.ParserTests.test_equal_condition) ... ok test_expression_uids (tests.python.test_parser.ParserTests.test_expression_uids) ... ok test_for_array_condition (tests.python.test_parser.ParserTests.test_for_array_condition) ... ok test_for_dict_condition (tests.python.test_parser.ParserTests.test_for_dict_condition) ... ok test_for_integer_set_condition (tests.python.test_parser.ParserTests.test_for_integer_set_condition) ... ok test_for_string_literal_set_condition (tests.python.test_parser.ParserTests.test_for_string_literal_set_condition) ... ok test_for_string_set_condition (tests.python.test_parser.ParserTests.test_for_string_set_condition) ... ok test_function_call_condition (tests.python.test_parser.ParserTests.test_function_call_condition) ... ok test_global_private_rule (tests.python.test_parser.ParserTests.test_global_private_rule) ... ok test_global_rule (tests.python.test_parser.ParserTests.test_global_rule) ... ok test_greater_equal_condition (tests.python.test_parser.ParserTests.test_greater_equal_condition) ... ok test_greater_than_condition (tests.python.test_parser.ParserTests.test_greater_than_condition) ... ok test_import (tests.python.test_parser.ParserTests.test_import) ... ok test_include_file (tests.python.test_parser.ParserTests.test_include_file) ... ok test_include_file_2 (tests.python.test_parser.ParserTests.test_include_file_2) ... ok test_include_file_and_import_in_regular_mode (tests.python.test_parser.ParserTests.test_include_file_and_import_in_regular_mode) ... ok test_include_undefined_file_and_import_in_incomplete_mode (tests.python.test_parser.ParserTests.test_include_undefined_file_and_import_in_incomplete_mode) ... ok test_include_undefined_file_in_incomplete_mode (tests.python.test_parser.ParserTests.test_include_undefined_file_in_incomplete_mode) ... ok test_int_function_condition (tests.python.test_parser.ParserTests.test_int_function_condition) ... ok test_int_literal_condition (tests.python.test_parser.ParserTests.test_int_literal_condition) ... ok test_less_equal_condition (tests.python.test_parser.ParserTests.test_less_equal_condition) ... ok test_less_than_condition (tests.python.test_parser.ParserTests.test_less_than_condition) ... ok test_links_between_rules_after_rename (tests.python.test_parser.ParserTests.test_links_between_rules_after_rename) ... ok test_match_count_condition (tests.python.test_parser.ParserTests.test_match_count_condition) ... ok test_match_length_condition (tests.python.test_parser.ParserTests.test_match_length_condition) ... ok test_match_length_with_index_condition (tests.python.test_parser.ParserTests.test_match_length_with_index_condition) ... ok test_match_offset_condition (tests.python.test_parser.ParserTests.test_match_offset_condition) ... ok test_match_offset_with_index_condition (tests.python.test_parser.ParserTests.test_match_offset_with_index_condition) ... ok test_matches_condition (tests.python.test_parser.ParserTests.test_matches_condition) ... ok test_math_module (tests.python.test_parser.ParserTests.test_math_module) ... ok test_minus_condition (tests.python.test_parser.ParserTests.test_minus_condition) ... ok test_modify_meta (tests.python.test_parser.ParserTests.test_modify_meta) ... ok test_modulo_condition (tests.python.test_parser.ParserTests.test_modulo_condition) ... ok test_multiple_parse_phases_with_single_yaramod_instance (tests.python.test_parser.ParserTests.test_multiple_parse_phases_with_single_yaramod_instance) ... ok test_multiple_rules (tests.python.test_parser.ParserTests.test_multiple_rules) ... ok test_multiply_condition (tests.python.test_parser.ParserTests.test_multiply_condition) ... ok test_nonutf_comments (tests.python.test_parser.ParserTests.test_nonutf_comments) ... ok test_not_condition (tests.python.test_parser.ParserTests.test_not_condition) ... ok test_not_equal_condition (tests.python.test_parser.ParserTests.test_not_equal_condition) ... ok test_of_at_condition (tests.python.test_parser.ParserTests.test_of_at_condition) ... ok test_of_at_with_string_set_condition (tests.python.test_parser.ParserTests.test_of_at_with_string_set_condition) ... ok test_of_condition (tests.python.test_parser.ParserTests.test_of_condition) ... ok test_or_condition (tests.python.test_parser.ParserTests.test_or_condition) ... ok test_parentheses_condition (tests.python.test_parser.ParserTests.test_parentheses_condition) ... ok test_parse_elf_dynsym (tests.python.test_parser.ParserTests.test_parse_elf_dynsym) ... ok test_parse_pe_signatures_x_algorithm_oid (tests.python.test_parser.ParserTests.test_parse_pe_signatures_x_algorithm_oid) ... ok test_parse_percentage (tests.python.test_parser.ParserTests.test_parse_percentage) ... ok test_parser_error (tests.python.test_parser.ParserTests.test_parser_error) ... ok test_pe_delayed_imports (tests.python.test_parser.ParserTests.test_pe_delayed_imports) ... ok test_pe_imports (tests.python.test_parser.ParserTests.test_pe_imports) ... ok test_pe_number_of_imported_functions (tests.python.test_parser.ParserTests.test_pe_number_of_imported_functions) ... ok test_plain_strings_with_modifiers (tests.python.test_parser.ParserTests.test_plain_strings_with_modifiers) ... ok test_plus_condition (tests.python.test_parser.ParserTests.test_plus_condition) ... ok test_private_rule (tests.python.test_parser.ParserTests.test_private_rule) ... ok test_regular_expression_character_classes (tests.python.test_parser.ParserTests.test_regular_expression_character_classes) ... ok test_regular_expression_escape_sequences (tests.python.test_parser.ParserTests.test_regular_expression_escape_sequences) ... ok test_regular_expression_meta_characters (tests.python.test_parser.ParserTests.test_regular_expression_meta_characters) ... ok test_regular_expression_quantifiers (tests.python.test_parser.ParserTests.test_regular_expression_quantifiers) ... ok test_regular_expression_quantifiers_nongreedy (tests.python.test_parser.ParserTests.test_regular_expression_quantifiers_nongreedy) ... ok test_regular_expression_suffix_modifiers (tests.python.test_parser.ParserTests.test_regular_expression_suffix_modifiers) ... ok test_remove_import (tests.python.test_parser.ParserTests.test_remove_import) ... ok test_rule_locations (tests.python.test_parser.ParserTests.test_rule_locations) ... ok test_rule_with_hex_string (tests.python.test_parser.ParserTests.test_rule_with_hex_string) ... ok test_rule_with_metas (tests.python.test_parser.ParserTests.test_rule_with_metas) ... ok test_rule_with_plain_strings (tests.python.test_parser.ParserTests.test_rule_with_plain_strings) ... ok test_rule_with_regexp (tests.python.test_parser.ParserTests.test_rule_with_regexp) ... ok test_rule_with_tags (tests.python.test_parser.ParserTests.test_rule_with_tags) ... ok test_rule_with_unordered_sections (tests.python.test_parser.ParserTests.test_rule_with_unordered_sections) ... ok test_rule_with_variable_and_string (tests.python.test_parser.ParserTests.test_rule_with_variable_and_string) ... ok test_rule_with_variables (tests.python.test_parser.ParserTests.test_rule_with_variables) ... ok test_shift_left_condition (tests.python.test_parser.ParserTests.test_shift_left_condition) ... ok test_shift_right_condition (tests.python.test_parser.ParserTests.test_shift_right_condition) ... ok test_simple_regular_expression_in_strings (tests.python.test_parser.ParserTests.test_simple_regular_expression_in_strings) ... ok test_string_at_condition (tests.python.test_parser.ParserTests.test_string_at_condition) ... ok test_string_condition (tests.python.test_parser.ParserTests.test_string_condition) ... ok test_string_in_range_condition (tests.python.test_parser.ParserTests.test_string_in_range_condition) ... ok test_string_locations (tests.python.test_parser.ParserTests.test_string_locations) ... ok test_string_with_invalid_utf8_sequences (tests.python.test_parser.ParserTests.test_string_with_invalid_utf8_sequences) ... ok test_structure_access_condition (tests.python.test_parser.ParserTests.test_structure_access_condition) ... ok test_unary_minus_condition (tests.python.test_parser.ParserTests.test_unary_minus_condition) ... ok test_variable_condition (tests.python.test_parser.ParserTests.test_variable_condition) ... ok test_xor_condition (tests.python.test_parser.ParserTests.test_xor_condition) ... ok test_empty_file (tests.python.test_builder.BuilderTests.test_empty_file) ... ok test_empty_rule (tests.python.test_builder.BuilderTests.test_empty_rule) ... ok test_multiple_rules (tests.python.test_builder.BuilderTests.test_multiple_rules) ... ok test_pure_imports (tests.python.test_builder.BuilderTests.test_pure_imports) ... ok test_rule_with_and_condition (tests.python.test_builder.BuilderTests.test_rule_with_and_condition) ... ok test_rule_with_and_condition_with_comments (tests.python.test_builder.BuilderTests.test_rule_with_and_condition_with_comments) ... ok test_rule_with_and_condition_with_comments_behind (tests.python.test_builder.BuilderTests.test_rule_with_and_condition_with_comments_behind) ... ok test_rule_with_array_access_condition (tests.python.test_builder.BuilderTests.test_rule_with_array_access_condition) ... ok test_rule_with_bitwise_and_condition (tests.python.test_builder.BuilderTests.test_rule_with_bitwise_and_condition) ... ok test_rule_with_bitwise_not_condition (tests.python.test_builder.BuilderTests.test_rule_with_bitwise_not_condition) ... ok test_rule_with_bitwise_or_condition (tests.python.test_builder.BuilderTests.test_rule_with_bitwise_or_condition) ... ok test_rule_with_comments (tests.python.test_builder.BuilderTests.test_rule_with_comments) ... ok test_rule_with_complex_condition (tests.python.test_builder.BuilderTests.test_rule_with_complex_condition) ... ok test_rule_with_custom_modules (tests.python.test_builder.BuilderTests.test_rule_with_custom_modules) ... ok test_rule_with_defined_condition (tests.python.test_builder.BuilderTests.test_rule_with_defined_condition) ... ok test_rule_with_dictionary_access_condition (tests.python.test_builder.BuilderTests.test_rule_with_dictionary_access_condition) ... ok test_rule_with_divide_condition (tests.python.test_builder.BuilderTests.test_rule_with_divide_condition) ... ok test_rule_with_double_values (tests.python.test_builder.BuilderTests.test_rule_with_double_values) ... ok test_rule_with_eq_condition (tests.python.test_builder.BuilderTests.test_rule_with_eq_condition) ... ok test_rule_with_for_loop_over_dictionary (tests.python.test_builder.BuilderTests.test_rule_with_for_loop_over_dictionary) ... ok test_rule_with_function_call_and_oneline_comment (tests.python.test_builder.BuilderTests.test_rule_with_function_call_and_oneline_comment) ... ok test_rule_with_function_call_condition (tests.python.test_builder.BuilderTests.test_rule_with_function_call_condition) ... ok test_rule_with_ge_condition (tests.python.test_builder.BuilderTests.test_rule_with_ge_condition) ... ok test_rule_with_gt_condition (tests.python.test_builder.BuilderTests.test_rule_with_gt_condition) ... ok test_rule_with_hex_string (tests.python.test_builder.BuilderTests.test_rule_with_hex_string) ... ok test_rule_with_le_condition (tests.python.test_builder.BuilderTests.test_rule_with_le_condition) ... ok test_rule_with_lt_condition (tests.python.test_builder.BuilderTests.test_rule_with_lt_condition) ... ok test_rule_with_match_count_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_count_condition) ... ok test_rule_with_match_in_range_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_in_range_condition) ... ok test_rule_with_match_length_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_length_condition) ... ok test_rule_with_match_length_with_index_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_length_with_index_condition) ... ok test_rule_with_match_offset_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_offset_condition) ... ok test_rule_with_match_offset_with_index_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_offset_with_index_condition) ... ok test_rule_with_metas (tests.python.test_builder.BuilderTests.test_rule_with_metas) ... ok test_rule_with_minus_condition (tests.python.test_builder.BuilderTests.test_rule_with_minus_condition) ... ok test_rule_with_modifiers (tests.python.test_builder.BuilderTests.test_rule_with_modifiers) ... ok test_rule_with_modulo_condition (tests.python.test_builder.BuilderTests.test_rule_with_modulo_condition) ... ok test_rule_with_multiply_condition (tests.python.test_builder.BuilderTests.test_rule_with_multiply_condition) ... ok test_rule_with_neq_condition (tests.python.test_builder.BuilderTests.test_rule_with_neq_condition) ... ok test_rule_with_not_condition (tests.python.test_builder.BuilderTests.test_rule_with_not_condition) ... ok test_rule_with_of_at_offset_condition (tests.python.test_builder.BuilderTests.test_rule_with_of_at_offset_condition) ... ok test_rule_with_of_in_range_condition (tests.python.test_builder.BuilderTests.test_rule_with_of_in_range_condition) ... ok test_rule_with_or_condition (tests.python.test_builder.BuilderTests.test_rule_with_or_condition) ... ok test_rule_with_or_condition_with_comments (tests.python.test_builder.BuilderTests.test_rule_with_or_condition_with_comments) ... ok test_rule_with_or_condition_with_single_comment (tests.python.test_builder.BuilderTests.test_rule_with_or_condition_with_single_comment) ... ok test_rule_with_pe_int_constants_condition (tests.python.test_builder.BuilderTests.test_rule_with_pe_int_constants_condition) ... ok test_rule_with_percentage_of_stringset (tests.python.test_builder.BuilderTests.test_rule_with_percentage_of_stringset) ... ok test_rule_with_plain_string (tests.python.test_builder.BuilderTests.test_rule_with_plain_string) ... ok test_rule_with_plus_condition (tests.python.test_builder.BuilderTests.test_rule_with_plus_condition) ... ok test_rule_with_regexp (tests.python.test_builder.BuilderTests.test_rule_with_regexp) ... ok test_rule_with_shift_left_condition (tests.python.test_builder.BuilderTests.test_rule_with_shift_left_condition) ... ok test_rule_with_shift_right_condition (tests.python.test_builder.BuilderTests.test_rule_with_shift_right_condition) ... ok test_rule_with_string_at_condition (tests.python.test_builder.BuilderTests.test_rule_with_string_at_condition) ... ok test_rule_with_string_id_condition (tests.python.test_builder.BuilderTests.test_rule_with_string_id_condition) ... ok test_rule_with_string_literal_set (tests.python.test_builder.BuilderTests.test_rule_with_string_literal_set) ... ok test_rule_with_string_modifiers (tests.python.test_builder.BuilderTests.test_rule_with_string_modifiers) ... ok test_rule_with_structure_access_condition (tests.python.test_builder.BuilderTests.test_rule_with_structure_access_condition) ... ok test_rule_with_tags (tests.python.test_builder.BuilderTests.test_rule_with_tags) ... ok test_rule_with_unary_minus_condition (tests.python.test_builder.BuilderTests.test_rule_with_unary_minus_condition) ... ok test_rule_with_variable_id_condition (tests.python.test_builder.BuilderTests.test_rule_with_variable_id_condition) ... ok test_rule_with_variables (tests.python.test_builder.BuilderTests.test_rule_with_variables) ... ok test_rule_with_xor_condition (tests.python.test_builder.BuilderTests.test_rule_with_xor_condition) ... ok test_add_meta (tests.python.test_parser.ParserTests.test_add_meta) ... ok test_and_condition (tests.python.test_parser.ParserTests.test_and_condition) ... ok test_array_access_condition (tests.python.test_parser.ParserTests.test_array_access_condition) ... ok test_bitwise_and_condition (tests.python.test_parser.ParserTests.test_bitwise_and_condition) ... ok test_bitwise_not_condition (tests.python.test_parser.ParserTests.test_bitwise_not_condition) ... ok test_bitwise_or_condition (tests.python.test_parser.ParserTests.test_bitwise_or_condition) ... ok test_bool_literal_condition (tests.python.test_parser.ParserTests.test_bool_literal_condition) ... ok test_complex_regular_expression_in_fnc_call (tests.python.test_parser.ParserTests.test_complex_regular_expression_in_fnc_call) ... ok test_complex_regular_expression_in_strings (tests.python.test_parser.ParserTests.test_complex_regular_expression_in_strings) ... ok test_contains_condition (tests.python.test_parser.ParserTests.test_contains_condition) ... ok test_divide_condition (tests.python.test_parser.ParserTests.test_divide_condition) ... ok test_double_literal_condition (tests.python.test_parser.ParserTests.test_double_literal_condition) ... ok test_empty_input (tests.python.test_parser.ParserTests.test_empty_input) ... ok test_empty_rule (tests.python.test_parser.ParserTests.test_empty_rule) ... ok test_equal_condition (tests.python.test_parser.ParserTests.test_equal_condition) ... ok test_expression_uids (tests.python.test_parser.ParserTests.test_expression_uids) ... ok test_for_array_condition (tests.python.test_parser.ParserTests.test_for_array_condition) ... ok test_for_dict_condition (tests.python.test_parser.ParserTests.test_for_dict_condition) ... ok test_for_integer_set_condition (tests.python.test_parser.ParserTests.test_for_integer_set_condition) ... ok test_for_string_literal_set_condition (tests.python.test_parser.ParserTests.test_for_string_literal_set_condition) ... ok test_for_string_set_condition (tests.python.test_parser.ParserTests.test_for_string_set_condition) ... ok test_function_call_condition (tests.python.test_parser.ParserTests.test_function_call_condition) ... ok test_global_private_rule (tests.python.test_parser.ParserTests.test_global_private_rule) ... ok test_global_rule (tests.python.test_parser.ParserTests.test_global_rule) ... ok test_greater_equal_condition (tests.python.test_parser.ParserTests.test_greater_equal_condition) ... ok test_greater_than_condition (tests.python.test_parser.ParserTests.test_greater_than_condition) ... ok test_import (tests.python.test_parser.ParserTests.test_import) ... ok test_include_file (tests.python.test_parser.ParserTests.test_include_file) ... ok test_include_file_2 (tests.python.test_parser.ParserTests.test_include_file_2) ... ok test_include_file_and_import_in_regular_mode (tests.python.test_parser.ParserTests.test_include_file_and_import_in_regular_mode) ... ok test_include_undefined_file_and_import_in_incomplete_mode (tests.python.test_parser.ParserTests.test_include_undefined_file_and_import_in_incomplete_mode) ... ok test_include_undefined_file_in_incomplete_mode (tests.python.test_parser.ParserTests.test_include_undefined_file_in_incomplete_mode) ... ok test_int_function_condition (tests.python.test_parser.ParserTests.test_int_function_condition) ... ok test_int_literal_condition (tests.python.test_parser.ParserTests.test_int_literal_condition) ... ok test_less_equal_condition (tests.python.test_parser.ParserTests.test_less_equal_condition) ... ok test_less_than_condition (tests.python.test_parser.ParserTests.test_less_than_condition) ... ok test_links_between_rules_after_rename (tests.python.test_parser.ParserTests.test_links_between_rules_after_rename) ... ok test_match_count_condition (tests.python.test_parser.ParserTests.test_match_count_condition) ... ok test_match_length_condition (tests.python.test_parser.ParserTests.test_match_length_condition) ... ok test_match_length_with_index_condition (tests.python.test_parser.ParserTests.test_match_length_with_index_condition) ... ok test_match_offset_condition (tests.python.test_parser.ParserTests.test_match_offset_condition) ... ok test_match_offset_with_index_condition (tests.python.test_parser.ParserTests.test_match_offset_with_index_condition) ... ok test_matches_condition (tests.python.test_parser.ParserTests.test_matches_condition) ... ok test_math_module (tests.python.test_parser.ParserTests.test_math_module) ... ok test_minus_condition (tests.python.test_parser.ParserTests.test_minus_condition) ... ok test_modify_meta (tests.python.test_parser.ParserTests.test_modify_meta) ... ok test_modulo_condition (tests.python.test_parser.ParserTests.test_modulo_condition) ... ok test_multiple_parse_phases_with_single_yaramod_instance (tests.python.test_parser.ParserTests.test_multiple_parse_phases_with_single_yaramod_instance) ... ok test_multiple_rules (tests.python.test_parser.ParserTests.test_multiple_rules) ... ok test_multiply_condition (tests.python.test_parser.ParserTests.test_multiply_condition) ... ok test_nonutf_comments (tests.python.test_parser.ParserTests.test_nonutf_comments) ... ok test_not_condition (tests.python.test_parser.ParserTests.test_not_condition) ... ok test_not_equal_condition (tests.python.test_parser.ParserTests.test_not_equal_condition) ... ok test_of_at_condition (tests.python.test_parser.ParserTests.test_of_at_condition) ... ok test_of_at_with_string_set_condition (tests.python.test_parser.ParserTests.test_of_at_with_string_set_condition) ... ok test_of_condition (tests.python.test_parser.ParserTests.test_of_condition) ... ok test_or_condition (tests.python.test_parser.ParserTests.test_or_condition) ... ok test_parentheses_condition (tests.python.test_parser.ParserTests.test_parentheses_condition) ... ok test_parse_elf_dynsym (tests.python.test_parser.ParserTests.test_parse_elf_dynsym) ... ok test_parse_pe_signatures_x_algorithm_oid (tests.python.test_parser.ParserTests.test_parse_pe_signatures_x_algorithm_oid) ... ok test_parse_percentage (tests.python.test_parser.ParserTests.test_parse_percentage) ... ok test_parser_error (tests.python.test_parser.ParserTests.test_parser_error) ... ok test_pe_delayed_imports (tests.python.test_parser.ParserTests.test_pe_delayed_imports) ... ok test_pe_imports (tests.python.test_parser.ParserTests.test_pe_imports) ... ok test_pe_number_of_imported_functions (tests.python.test_parser.ParserTests.test_pe_number_of_imported_functions) ... ok test_plain_strings_with_modifiers (tests.python.test_parser.ParserTests.test_plain_strings_with_modifiers) ... ok test_plus_condition (tests.python.test_parser.ParserTests.test_plus_condition) ... ok test_private_rule (tests.python.test_parser.ParserTests.test_private_rule) ... ok test_regular_expression_character_classes (tests.python.test_parser.ParserTests.test_regular_expression_character_classes) ... ok test_regular_expression_escape_sequences (tests.python.test_parser.ParserTests.test_regular_expression_escape_sequences) ... ok test_regular_expression_meta_characters (tests.python.test_parser.ParserTests.test_regular_expression_meta_characters) ... ok test_regular_expression_quantifiers (tests.python.test_parser.ParserTests.test_regular_expression_quantifiers) ... ok test_regular_expression_quantifiers_nongreedy (tests.python.test_parser.ParserTests.test_regular_expression_quantifiers_nongreedy) ... ok test_regular_expression_suffix_modifiers (tests.python.test_parser.ParserTests.test_regular_expression_suffix_modifiers) ... ok test_remove_import (tests.python.test_parser.ParserTests.test_remove_import) ... ok test_rule_locations (tests.python.test_parser.ParserTests.test_rule_locations) ... ok test_rule_with_hex_string (tests.python.test_parser.ParserTests.test_rule_with_hex_string) ... ok test_rule_with_metas (tests.python.test_parser.ParserTests.test_rule_with_metas) ... ok test_rule_with_plain_strings (tests.python.test_parser.ParserTests.test_rule_with_plain_strings) ... ok test_rule_with_regexp (tests.python.test_parser.ParserTests.test_rule_with_regexp) ... ok test_rule_with_tags (tests.python.test_parser.ParserTests.test_rule_with_tags) ... ok test_rule_with_unordered_sections (tests.python.test_parser.ParserTests.test_rule_with_unordered_sections) ... ok test_rule_with_variable_and_string (tests.python.test_parser.ParserTests.test_rule_with_variable_and_string) ... ok test_rule_with_variables (tests.python.test_parser.ParserTests.test_rule_with_variables) ... ok test_shift_left_condition (tests.python.test_parser.ParserTests.test_shift_left_condition) ... ok test_shift_right_condition (tests.python.test_parser.ParserTests.test_shift_right_condition) ... ok test_simple_regular_expression_in_strings (tests.python.test_parser.ParserTests.test_simple_regular_expression_in_strings) ... ok test_string_at_condition (tests.python.test_parser.ParserTests.test_string_at_condition) ... ok test_string_condition (tests.python.test_parser.ParserTests.test_string_condition) ... ok test_string_in_range_condition (tests.python.test_parser.ParserTests.test_string_in_range_condition) ... ok test_string_locations (tests.python.test_parser.ParserTests.test_string_locations) ... ok test_string_with_invalid_utf8_sequences (tests.python.test_parser.ParserTests.test_string_with_invalid_utf8_sequences) ... ok test_structure_access_condition (tests.python.test_parser.ParserTests.test_structure_access_condition) ... ok test_unary_minus_condition (tests.python.test_parser.ParserTests.test_unary_minus_condition) ... ok test_variable_condition (tests.python.test_parser.ParserTests.test_variable_condition) ... ok test_xor_condition (tests.python.test_parser.ParserTests.test_xor_condition) ... ok test_change_meta_of_rule (tests.python.test_representation.RepresentationTests.test_change_meta_of_rule) ... ok test_custom_module_enhancing_known_module (tests.python.test_representation.RepresentationTests.test_custom_module_enhancing_known_module) ... ok test_custom_module_interface (tests.python.test_representation.RepresentationTests.test_custom_module_interface) ... ok test_get_modulepool (tests.python.test_representation.RepresentationTests.test_get_modulepool) ... ok test_get_string_modifiers (tests.python.test_representation.RepresentationTests.test_get_string_modifiers) ... ok test_get_tokenstream (tests.python.test_representation.RepresentationTests.test_get_tokenstream) ... ok test_get_tokenstream_after_syntax_error_1 (tests.python.test_representation.RepresentationTests.test_get_tokenstream_after_syntax_error_1) ... ok test_get_tokenstream_after_syntax_error_2 (tests.python.test_representation.RepresentationTests.test_get_tokenstream_after_syntax_error_2) ... ok test_get_tokenstream_after_unknown_identifier_error (tests.python.test_representation.RepresentationTests.test_get_tokenstream_after_unknown_identifier_error) ... ok test_get_tokenstream_after_unknown_module_error (tests.python.test_representation.RepresentationTests.test_get_tokenstream_after_unknown_module_error) ... ok test_literals (tests.python.test_representation.RepresentationTests.test_literals) ... ok test_meta_values_interface (tests.python.test_representation.RepresentationTests.test_meta_values_interface) ... ok test_module_interface (tests.python.test_representation.RepresentationTests.test_module_interface) ... ok test_remove_string_modifiers (tests.python.test_representation.RepresentationTests.test_remove_string_modifiers) ... ok test_set_tags_on_a_rule_with_tags (tests.python.test_representation.RepresentationTests.test_set_tags_on_a_rule_with_tags) ... ok test_set_tags_on_a_rule_without_tags (tests.python.test_representation.RepresentationTests.test_set_tags_on_a_rule_without_tags) ... ok test_set_tags_to_empty_list (tests.python.test_representation.RepresentationTests.test_set_tags_to_empty_list) ... ok test_set_tags_to_empty_list_on_a_rule_without_tags (tests.python.test_representation.RepresentationTests.test_set_tags_to_empty_list_on_a_rule_without_tags) ... ok test_cuckoo_function_replacer (tests.python.test_visitor.VisitorTests.test_cuckoo_function_replacer) ... ok test_modifying_visitor_delete_rules (tests.python.test_visitor.VisitorTests.test_modifying_visitor_delete_rules) ... ok test_modifying_visitor_eq_expression (tests.python.test_visitor.VisitorTests.test_modifying_visitor_eq_expression) ... ok test_modifying_visitor_inpact_on_regexp_expression (tests.python.test_visitor.VisitorTests.test_modifying_visitor_inpact_on_regexp_expression) ... ok test_modifying_visitor_or_deleter (tests.python.test_visitor.VisitorTests.test_modifying_visitor_or_deleter) ... ok test_pe_iconhash_deleter (tests.python.test_visitor.VisitorTests.test_pe_iconhash_deleter) ... ok test_rule_inserter (tests.python.test_visitor.VisitorTests.test_rule_inserter) ... ok test_simple_modifying_visitor (tests.python.test_visitor.VisitorTests.test_simple_modifying_visitor) ... ok test_empty_file (tests.python.test_builder.BuilderTests.test_empty_file) ... ok test_empty_rule (tests.python.test_builder.BuilderTests.test_empty_rule) ... ok test_multiple_rules (tests.python.test_builder.BuilderTests.test_multiple_rules) ... ok test_pure_imports (tests.python.test_builder.BuilderTests.test_pure_imports) ... ok test_rule_with_and_condition (tests.python.test_builder.BuilderTests.test_rule_with_and_condition) ... ok test_rule_with_and_condition_with_comments (tests.python.test_builder.BuilderTests.test_rule_with_and_condition_with_comments) ... ok test_rule_with_and_condition_with_comments_behind (tests.python.test_builder.BuilderTests.test_rule_with_and_condition_with_comments_behind) ... ok test_rule_with_array_access_condition (tests.python.test_builder.BuilderTests.test_rule_with_array_access_condition) ... ok test_rule_with_bitwise_and_condition (tests.python.test_builder.BuilderTests.test_rule_with_bitwise_and_condition) ... ok test_rule_with_bitwise_not_condition (tests.python.test_builder.BuilderTests.test_rule_with_bitwise_not_condition) ... ok test_rule_with_bitwise_or_condition (tests.python.test_builder.BuilderTests.test_rule_with_bitwise_or_condition) ... ok test_rule_with_comments (tests.python.test_builder.BuilderTests.test_rule_with_comments) ... ok test_rule_with_complex_condition (tests.python.test_builder.BuilderTests.test_rule_with_complex_condition) ... ok test_rule_with_custom_modules (tests.python.test_builder.BuilderTests.test_rule_with_custom_modules) ... ok test_rule_with_defined_condition (tests.python.test_builder.BuilderTests.test_rule_with_defined_condition) ... ok test_rule_with_dictionary_access_condition (tests.python.test_builder.BuilderTests.test_rule_with_dictionary_access_condition) ... ok test_rule_with_divide_condition (tests.python.test_builder.BuilderTests.test_rule_with_divide_condition) ... ok test_rule_with_double_values (tests.python.test_builder.BuilderTests.test_rule_with_double_values) ... ok test_rule_with_eq_condition (tests.python.test_builder.BuilderTests.test_rule_with_eq_condition) ... ok test_rule_with_for_loop_over_dictionary (tests.python.test_builder.BuilderTests.test_rule_with_for_loop_over_dictionary) ... ok test_rule_with_function_call_and_oneline_comment (tests.python.test_builder.BuilderTests.test_rule_with_function_call_and_oneline_comment) ... ok test_rule_with_function_call_condition (tests.python.test_builder.BuilderTests.test_rule_with_function_call_condition) ... ok test_rule_with_ge_condition (tests.python.test_builder.BuilderTests.test_rule_with_ge_condition) ... ok test_rule_with_gt_condition (tests.python.test_builder.BuilderTests.test_rule_with_gt_condition) ... ok test_rule_with_hex_string (tests.python.test_builder.BuilderTests.test_rule_with_hex_string) ... ok test_rule_with_le_condition (tests.python.test_builder.BuilderTests.test_rule_with_le_condition) ... ok test_rule_with_lt_condition (tests.python.test_builder.BuilderTests.test_rule_with_lt_condition) ... ok test_rule_with_match_count_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_count_condition) ... ok test_rule_with_match_in_range_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_in_range_condition) ... ok test_rule_with_match_length_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_length_condition) ... ok test_rule_with_match_length_with_index_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_length_with_index_condition) ... ok test_rule_with_match_offset_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_offset_condition) ... ok test_rule_with_match_offset_with_index_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_offset_with_index_condition) ... ok test_rule_with_metas (tests.python.test_builder.BuilderTests.test_rule_with_metas) ... ok test_rule_with_minus_condition (tests.python.test_builder.BuilderTests.test_rule_with_minus_condition) ... ok test_rule_with_modifiers (tests.python.test_builder.BuilderTests.test_rule_with_modifiers) ... ok test_rule_with_modulo_condition (tests.python.test_builder.BuilderTests.test_rule_with_modulo_condition) ... ok test_rule_with_multiply_condition (tests.python.test_builder.BuilderTests.test_rule_with_multiply_condition) ... ok test_rule_with_neq_condition (tests.python.test_builder.BuilderTests.test_rule_with_neq_condition) ... ok test_rule_with_not_condition (tests.python.test_builder.BuilderTests.test_rule_with_not_condition) ... ok test_rule_with_of_at_offset_condition (tests.python.test_builder.BuilderTests.test_rule_with_of_at_offset_condition) ... ok test_rule_with_of_in_range_condition (tests.python.test_builder.BuilderTests.test_rule_with_of_in_range_condition) ... ok test_rule_with_or_condition (tests.python.test_builder.BuilderTests.test_rule_with_or_condition) ... ok test_rule_with_or_condition_with_comments (tests.python.test_builder.BuilderTests.test_rule_with_or_condition_with_comments) ... ok test_rule_with_or_condition_with_single_comment (tests.python.test_builder.BuilderTests.test_rule_with_or_condition_with_single_comment) ... ok test_rule_with_pe_int_constants_condition (tests.python.test_builder.BuilderTests.test_rule_with_pe_int_constants_condition) ... ok test_rule_with_percentage_of_stringset (tests.python.test_builder.BuilderTests.test_rule_with_percentage_of_stringset) ... ok test_rule_with_plain_string (tests.python.test_builder.BuilderTests.test_rule_with_plain_string) ... ok test_rule_with_plus_condition (tests.python.test_builder.BuilderTests.test_rule_with_plus_condition) ... ok test_rule_with_regexp (tests.python.test_builder.BuilderTests.test_rule_with_regexp) ... ok test_rule_with_shift_left_condition (tests.python.test_builder.BuilderTests.test_rule_with_shift_left_condition) ... ok test_rule_with_shift_right_condition (tests.python.test_builder.BuilderTests.test_rule_with_shift_right_condition) ... ok test_rule_with_string_at_condition (tests.python.test_builder.BuilderTests.test_rule_with_string_at_condition) ... ok test_rule_with_string_id_condition (tests.python.test_builder.BuilderTests.test_rule_with_string_id_condition) ... ok test_rule_with_string_literal_set (tests.python.test_builder.BuilderTests.test_rule_with_string_literal_set) ... ok test_rule_with_string_modifiers (tests.python.test_builder.BuilderTests.test_rule_with_string_modifiers) ... ok test_rule_with_structure_access_condition (tests.python.test_builder.BuilderTests.test_rule_with_structure_access_condition) ... ok test_rule_with_tags (tests.python.test_builder.BuilderTests.test_rule_with_tags) ... ok test_rule_with_unary_minus_condition (tests.python.test_builder.BuilderTests.test_rule_with_unary_minus_condition) ... ok test_rule_with_variable_id_condition (tests.python.test_builder.BuilderTests.test_rule_with_variable_id_condition) ... ok test_rule_with_variables (tests.python.test_builder.BuilderTests.test_rule_with_variables) ... ok test_rule_with_xor_condition (tests.python.test_builder.BuilderTests.test_rule_with_xor_condition) ... ok test_add_meta (tests.python.test_parser.ParserTests.test_add_meta) ... ok test_and_condition (tests.python.test_parser.ParserTests.test_and_condition) ... ok test_array_access_condition (tests.python.test_parser.ParserTests.test_array_access_condition) ... ok test_bitwise_and_condition (tests.python.test_parser.ParserTests.test_bitwise_and_condition) ... ok test_bitwise_not_condition (tests.python.test_parser.ParserTests.test_bitwise_not_condition) ... ok test_bitwise_or_condition (tests.python.test_parser.ParserTests.test_bitwise_or_condition) ... ok test_bool_literal_condition (tests.python.test_parser.ParserTests.test_bool_literal_condition) ... ok test_complex_regular_expression_in_fnc_call (tests.python.test_parser.ParserTests.test_complex_regular_expression_in_fnc_call) ... ok test_complex_regular_expression_in_strings (tests.python.test_parser.ParserTests.test_complex_regular_expression_in_strings) ... ok test_contains_condition (tests.python.test_parser.ParserTests.test_contains_condition) ... ok test_divide_condition (tests.python.test_parser.ParserTests.test_divide_condition) ... ok test_double_literal_condition (tests.python.test_parser.ParserTests.test_double_literal_condition) ... ok test_empty_input (tests.python.test_parser.ParserTests.test_empty_input) ... ok test_empty_rule (tests.python.test_parser.ParserTests.test_empty_rule) ... ok test_equal_condition (tests.python.test_parser.ParserTests.test_equal_condition) ... ok test_expression_uids (tests.python.test_parser.ParserTests.test_expression_uids) ... ok test_for_array_condition (tests.python.test_parser.ParserTests.test_for_array_condition) ... ok test_for_dict_condition (tests.python.test_parser.ParserTests.test_for_dict_condition) ... ok test_for_integer_set_condition (tests.python.test_parser.ParserTests.test_for_integer_set_condition) ... ok test_for_string_literal_set_condition (tests.python.test_parser.ParserTests.test_for_string_literal_set_condition) ... ok test_for_string_set_condition (tests.python.test_parser.ParserTests.test_for_string_set_condition) ... ok test_function_call_condition (tests.python.test_parser.ParserTests.test_function_call_condition) ... ok test_global_private_rule (tests.python.test_parser.ParserTests.test_global_private_rule) ... ok test_global_rule (tests.python.test_parser.ParserTests.test_global_rule) ... ok test_greater_equal_condition (tests.python.test_parser.ParserTests.test_greater_equal_condition) ... ok test_greater_than_condition (tests.python.test_parser.ParserTests.test_greater_than_condition) ... ok test_import (tests.python.test_parser.ParserTests.test_import) ... ok test_include_file (tests.python.test_parser.ParserTests.test_include_file) ... ok test_include_file_2 (tests.python.test_parser.ParserTests.test_include_file_2) ... ok test_include_file_and_import_in_regular_mode (tests.python.test_parser.ParserTests.test_include_file_and_import_in_regular_mode) ... ok test_include_undefined_file_and_import_in_incomplete_mode (tests.python.test_parser.ParserTests.test_include_undefined_file_and_import_in_incomplete_mode) ... ok test_include_undefined_file_in_incomplete_mode (tests.python.test_parser.ParserTests.test_include_undefined_file_in_incomplete_mode) ... ok test_int_function_condition (tests.python.test_parser.ParserTests.test_int_function_condition) ... ok test_int_literal_condition (tests.python.test_parser.ParserTests.test_int_literal_condition) ... ok test_less_equal_condition (tests.python.test_parser.ParserTests.test_less_equal_condition) ... ok test_less_than_condition (tests.python.test_parser.ParserTests.test_less_than_condition) ... ok test_links_between_rules_after_rename (tests.python.test_parser.ParserTests.test_links_between_rules_after_rename) ... ok test_match_count_condition (tests.python.test_parser.ParserTests.test_match_count_condition) ... ok test_match_length_condition (tests.python.test_parser.ParserTests.test_match_length_condition) ... ok test_match_length_with_index_condition (tests.python.test_parser.ParserTests.test_match_length_with_index_condition) ... ok test_match_offset_condition (tests.python.test_parser.ParserTests.test_match_offset_condition) ... ok test_match_offset_with_index_condition (tests.python.test_parser.ParserTests.test_match_offset_with_index_condition) ... ok test_matches_condition (tests.python.test_parser.ParserTests.test_matches_condition) ... ok test_math_module (tests.python.test_parser.ParserTests.test_math_module) ... ok test_minus_condition (tests.python.test_parser.ParserTests.test_minus_condition) ... ok test_modify_meta (tests.python.test_parser.ParserTests.test_modify_meta) ... ok test_modulo_condition (tests.python.test_parser.ParserTests.test_modulo_condition) ... ok test_multiple_parse_phases_with_single_yaramod_instance (tests.python.test_parser.ParserTests.test_multiple_parse_phases_with_single_yaramod_instance) ... ok test_multiple_rules (tests.python.test_parser.ParserTests.test_multiple_rules) ... ok test_multiply_condition (tests.python.test_parser.ParserTests.test_multiply_condition) ... ok test_nonutf_comments (tests.python.test_parser.ParserTests.test_nonutf_comments) ... ok test_not_condition (tests.python.test_parser.ParserTests.test_not_condition) ... ok test_not_equal_condition (tests.python.test_parser.ParserTests.test_not_equal_condition) ... ok test_of_at_condition (tests.python.test_parser.ParserTests.test_of_at_condition) ... ok test_of_at_with_string_set_condition (tests.python.test_parser.ParserTests.test_of_at_with_string_set_condition) ... ok test_of_condition (tests.python.test_parser.ParserTests.test_of_condition) ... ok test_or_condition (tests.python.test_parser.ParserTests.test_or_condition) ... ok test_parentheses_condition (tests.python.test_parser.ParserTests.test_parentheses_condition) ... ok test_parse_elf_dynsym (tests.python.test_parser.ParserTests.test_parse_elf_dynsym) ... ok test_parse_pe_signatures_x_algorithm_oid (tests.python.test_parser.ParserTests.test_parse_pe_signatures_x_algorithm_oid) ... ok test_parse_percentage (tests.python.test_parser.ParserTests.test_parse_percentage) ... ok test_parser_error (tests.python.test_parser.ParserTests.test_parser_error) ... ok test_pe_delayed_imports (tests.python.test_parser.ParserTests.test_pe_delayed_imports) ... ok test_pe_imports (tests.python.test_parser.ParserTests.test_pe_imports) ... ok test_pe_number_of_imported_functions (tests.python.test_parser.ParserTests.test_pe_number_of_imported_functions) ... ok test_plain_strings_with_modifiers (tests.python.test_parser.ParserTests.test_plain_strings_with_modifiers) ... ok test_plus_condition (tests.python.test_parser.ParserTests.test_plus_condition) ... ok test_private_rule (tests.python.test_parser.ParserTests.test_private_rule) ... ok test_regular_expression_character_classes (tests.python.test_parser.ParserTests.test_regular_expression_character_classes) ... ok test_regular_expression_escape_sequences (tests.python.test_parser.ParserTests.test_regular_expression_escape_sequences) ... ok test_regular_expression_meta_characters (tests.python.test_parser.ParserTests.test_regular_expression_meta_characters) ... ok test_regular_expression_quantifiers (tests.python.test_parser.ParserTests.test_regular_expression_quantifiers) ... ok test_regular_expression_quantifiers_nongreedy (tests.python.test_parser.ParserTests.test_regular_expression_quantifiers_nongreedy) ... ok test_regular_expression_suffix_modifiers (tests.python.test_parser.ParserTests.test_regular_expression_suffix_modifiers) ... ok test_remove_import (tests.python.test_parser.ParserTests.test_remove_import) ... ok test_rule_locations (tests.python.test_parser.ParserTests.test_rule_locations) ... ok test_rule_with_hex_string (tests.python.test_parser.ParserTests.test_rule_with_hex_string) ... ok test_rule_with_metas (tests.python.test_parser.ParserTests.test_rule_with_metas) ... ok test_rule_with_plain_strings (tests.python.test_parser.ParserTests.test_rule_with_plain_strings) ... ok test_rule_with_regexp (tests.python.test_parser.ParserTests.test_rule_with_regexp) ... ok test_rule_with_tags (tests.python.test_parser.ParserTests.test_rule_with_tags) ... ok test_rule_with_unordered_sections (tests.python.test_parser.ParserTests.test_rule_with_unordered_sections) ... ok test_rule_with_variable_and_string (tests.python.test_parser.ParserTests.test_rule_with_variable_and_string) ... ok test_rule_with_variables (tests.python.test_parser.ParserTests.test_rule_with_variables) ... ok test_shift_left_condition (tests.python.test_parser.ParserTests.test_shift_left_condition) ... ok test_shift_right_condition (tests.python.test_parser.ParserTests.test_shift_right_condition) ... ok test_simple_regular_expression_in_strings (tests.python.test_parser.ParserTests.test_simple_regular_expression_in_strings) ... ok test_string_at_condition (tests.python.test_parser.ParserTests.test_string_at_condition) ... ok test_string_condition (tests.python.test_parser.ParserTests.test_string_condition) ... ok test_string_in_range_condition (tests.python.test_parser.ParserTests.test_string_in_range_condition) ... ok test_string_locations (tests.python.test_parser.ParserTests.test_string_locations) ... ok test_string_with_invalid_utf8_sequences (tests.python.test_parser.ParserTests.test_string_with_invalid_utf8_sequences) ... ok test_structure_access_condition (tests.python.test_parser.ParserTests.test_structure_access_condition) ... ok test_unary_minus_condition (tests.python.test_parser.ParserTests.test_unary_minus_condition) ... ok test_variable_condition (tests.python.test_parser.ParserTests.test_variable_condition) ... ok test_xor_condition (tests.python.test_parser.ParserTests.test_xor_condition) ... ok test_change_meta_of_rule (tests.python.test_representation.RepresentationTests.test_change_meta_of_rule) ... ok test_custom_module_enhancing_known_module (tests.python.test_representation.RepresentationTests.test_custom_module_enhancing_known_module) ... ok test_custom_module_interface (tests.python.test_representation.RepresentationTests.test_custom_module_interface) ... ok test_get_modulepool (tests.python.test_representation.RepresentationTests.test_get_modulepool) ... ok test_get_string_modifiers (tests.python.test_representation.RepresentationTests.test_get_string_modifiers) ... ok test_get_tokenstream (tests.python.test_representation.RepresentationTests.test_get_tokenstream) ... ok test_get_tokenstream_after_syntax_error_1 (tests.python.test_representation.RepresentationTests.test_get_tokenstream_after_syntax_error_1) ... ok test_get_tokenstream_after_syntax_error_2 (tests.python.test_representation.RepresentationTests.test_get_tokenstream_after_syntax_error_2) ... ok test_get_tokenstream_after_unknown_identifier_error (tests.python.test_representation.RepresentationTests.test_get_tokenstream_after_unknown_identifier_error) ... ok test_get_tokenstream_after_unknown_module_error (tests.python.test_representation.RepresentationTests.test_get_tokenstream_after_unknown_module_error) ... ok test_literals (tests.python.test_representation.RepresentationTests.test_literals) ... ok test_meta_values_interface (tests.python.test_representation.RepresentationTests.test_meta_values_interface) ... ok test_module_interface (tests.python.test_representation.RepresentationTests.test_module_interface) ... ok test_remove_string_modifiers (tests.python.test_representation.RepresentationTests.test_remove_string_modifiers) ... ok test_set_tags_on_a_rule_with_tags (tests.python.test_representation.RepresentationTests.test_set_tags_on_a_rule_with_tags) ... ok test_set_tags_on_a_rule_without_tags (tests.python.test_representation.RepresentationTests.test_set_tags_on_a_rule_without_tags) ... ok test_set_tags_to_empty_list (tests.python.test_representation.RepresentationTests.test_set_tags_to_empty_list) ... ok test_set_tags_to_empty_list_on_a_rule_without_tags (tests.python.test_representation.RepresentationTests.test_set_tags_to_empty_list_on_a_rule_without_tags) ... ok test_find_token (tests.python.test_tokenstream.TokenStreamTests.test_find_token) ... ok test_iteration (tests.python.test_tokenstream.TokenStreamTests.test_iteration) ... ok test_modify_stream (tests.python.test_tokenstream.TokenStreamTests.test_modify_stream) ... ok test_mypy (tests.python.test_typing_stub.TypingStubTests.test_mypy) ... skipped 'MyPy not installed.' test_cuckoo_function_replacer (tests.python.test_visitor.VisitorTests.test_cuckoo_function_replacer) ... ok test_modifying_visitor_delete_rules (tests.python.test_visitor.VisitorTests.test_modifying_visitor_delete_rules) ... ok test_modifying_visitor_eq_expression (tests.python.test_visitor.VisitorTests.test_modifying_visitor_eq_expression) ... ok test_modifying_visitor_inpact_on_regexp_expression (tests.python.test_visitor.VisitorTests.test_modifying_visitor_inpact_on_regexp_expression) ... ok test_modifying_visitor_or_deleter (tests.python.test_visitor.VisitorTests.test_modifying_visitor_or_deleter) ... ok test_pe_iconhash_deleter (tests.python.test_visitor.VisitorTests.test_pe_iconhash_deleter) ... ok test_rule_inserter (tests.python.test_visitor.VisitorTests.test_rule_inserter) ... ok test_simple_modifying_visitor (tests.python.test_visitor.VisitorTests.test_simple_modifying_visitor) ... ok ---------------------------------------------------------------------- Ran 530 tests in 8.397s OK (skipped=1) import "pe" rule rule_with_function_call_condition { condition: pe.is_dll() // Generated } import "pe" rule rule_with_function_call_condition { condition: pe.is_dll() // Generated } ['Testing function overload documentation.', 'Testing function cool overload documentation.'] import "pe" rule rule_with_function_call_condition { condition: pe.is_dll() // Generated } ['Testing function overload documentation.', 'Testing function cool overload documentation.'] make[1]: Leaving directory '/build/reproducible-path/yaramod-3.21.0' create-stamp debian/debhelper-build-stamp dh_prep -a debian/rules override_dh_auto_install-arch make[1]: Entering directory '/build/reproducible-path/yaramod-3.21.0' dh_auto_install -a -O--buildsystem=cmake cd obj-x86_64-linux-gnu && make -j6 install DESTDIR=/build/reproducible-path/yaramod-3.21.0/debian/tmp AM_UPDATE_INFO_DIR=no "INSTALL=install --strip-program=true" make[2]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' /usr/bin/cmake -S/build/reproducible-path/yaramod-3.21.0 -B/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu --check-build-system CMakeFiles/Makefile.cmake 0 make -f CMakeFiles/Makefile2 preinstall make[3]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' make[3]: Nothing to be done for 'preinstall'. make[3]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' Install the project... /usr/bin/cmake -P cmake_install.cmake -- Install configuration: "None" -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/x86_64-linux-gnu/libyaramod.so.3.21.0 -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/x86_64-linux-gnu/libyaramod.so.0 -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/x86_64-linux-gnu/libyaramod.so -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/x86_64-linux-gnu/libyaramod.a -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/yaramod.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/yara_file.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/symbols.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/expression.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/literal.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/features.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/token.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/hex_string.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/string_modifier.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/string.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/plain_string.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/sections_summary.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/expression_type.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/symbol.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/token_stream.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/meta.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/regexp.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/expressions.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/variable.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/modules -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/modules/module_pool.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/modules/generated -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/modules/generated/module_math_generated.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/modules/generated/module_string_generated.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/modules/generated/module_macho_generated.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/modules/generated/module_elf_generated.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/modules/generated/module_dotnet_generated.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/modules/generated/module_console_generated.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/modules/generated/module_time_generated.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/modules/generated/module_cuckoo_generated.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/modules/generated/module_hash_generated.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/modules/generated/module_magic_generated.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/modules/generated/module_list.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/modules/generated/module_dex_generated.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/modules/generated/module_pe_generated.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/modules/generated/module_cuckoo_deprecated_generated.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/modules/module.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/modules/module_content.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/rule.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/types/token_type.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/utils -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/utils/filesystem.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/utils/visitor_result.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/utils/utils.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/utils/trie.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/utils/observing_visitor.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/utils/filesystem_operations.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/utils/visitor.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/utils/modifying_visitor.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/utils/json.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/parser -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/parser/location.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/parser/value.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/parser/parser_driver.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/parser/uid_generator.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/parser/file_context.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/builder -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/builder/yara_file_builder.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/builder/yara_hex_string_builder.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/builder/yara_expression_builder.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/builder/yara_rule_builder.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/yaramod_error.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/x86_64-linux-gnu/pkgconfig/yaramod.pc make[2]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' dh_auto_install -a -O--buildsystem=pybuild I: pybuild base:311: /usr/bin/python3 setup.py install --root /build/reproducible-path/yaramod-3.21.0/debian/tmp /usr/lib/python3/dist-packages/setuptools/dist.py:493: SetuptoolsDeprecationWarning: Invalid dash-separated options !! ******************************************************************************** Usage of dash-separated 'description-file' will not be supported in future versions. Please use the underscore name 'description_file' instead. This deprecation is overdue, please update your project and remove deprecated calls to avoid build errors in the future. See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details. ******************************************************************************** !! opt = self.warn_dash_deprecation(opt, section) running install /usr/lib/python3/dist-packages/setuptools/_distutils/cmd.py:79: SetuptoolsDeprecationWarning: setup.py install is deprecated. !! ******************************************************************************** Please avoid running ``setup.py`` directly. Instead, use pypa/build, pypa/installer or other standards-based tools. See https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html for details. ******************************************************************************** !! self.initialize_options() running build running build_py running build_ext running install_lib creating /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/python3.13/dist-packages creating /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/python3.13/dist-packages/yaramod copying /build/reproducible-path/yaramod-3.21.0/.pybuild/cpython3_3.13/build/yaramod/py.typed -> /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/python3.13/dist-packages/yaramod copying /build/reproducible-path/yaramod-3.21.0/.pybuild/cpython3_3.13/build/yaramod/__init__.pyi -> /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/python3.13/dist-packages/yaramod copying /build/reproducible-path/yaramod-3.21.0/.pybuild/cpython3_3.13/build/yaramod.cpython-313-x86_64-linux-gnu.so -> /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/python3.13/dist-packages running install_egg_info running egg_info creating yaramod.egg-info writing yaramod.egg-info/PKG-INFO writing dependency_links to yaramod.egg-info/dependency_links.txt writing top-level names to yaramod.egg-info/top_level.txt writing manifest file 'yaramod.egg-info/SOURCES.txt' reading manifest file 'yaramod.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' adding license file 'LICENSE' writing manifest file 'yaramod.egg-info/SOURCES.txt' Copying yaramod.egg-info to /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/python3.13/dist-packages/yaramod-3.21.0.egg-info Skipping SOURCES.txt running install_scripts make[1]: Leaving directory '/build/reproducible-path/yaramod-3.21.0' dh_install -a dh_installdocs -a dh_installchangelogs -a dh_installexamples -a dh_python3 -a dh_perl -a dh_link -a dh_strip_nondeterminism -a dh_compress -a dh_fixperms -a dh_missing -a dh_dwz -a dh_strip -a dh_makeshlibs -a dh_shlibdeps -a dpkg-shlibdeps: warning: diversions involved - output may be incorrect diversion by libc6 from: /lib64/ld-linux-x86-64.so.2 dpkg-shlibdeps: warning: diversions involved - output may be incorrect diversion by libc6 to: /lib64/ld-linux-x86-64.so.2.usr-is-merged dh_installdeb -a dh_gencontrol -a dpkg-gencontrol: warning: Provides field of package python3-yaramod: substitution variable ${python3:Provides} used, but is not defined dpkg-gencontrol: warning: Provides field of package python3-yaramod: substitution variable ${python3:Provides} used, but is not defined dh_md5sums -a dh_builddeb -a dpkg-deb: building package 'libyaramod-dev' in '../libyaramod-dev_3.21.0-1.1+b2_amd64.deb'. dpkg-deb: building package 'libyaramod0-dbgsym' in '../libyaramod0-dbgsym_3.21.0-1.1+b2_amd64.deb'. dpkg-deb: building package 'python3-yaramod' in '../python3-yaramod_3.21.0-1.1+b2_amd64.deb'. dpkg-deb: building package 'python3-yaramod-dbgsym' in '../python3-yaramod-dbgsym_3.21.0-1.1+b2_amd64.deb'. dpkg-deb: building package 'libyaramod0' in '../libyaramod0_3.21.0-1.1+b2_amd64.deb'. dpkg-genbuildinfo --build=any -O../yaramod_3.21.0-1.1+b2_amd64.buildinfo dpkg-genchanges --build=any -O../yaramod_3.21.0-1.1+b2_amd64.changes dpkg-genchanges: info: binary-only arch-specific upload (source code and arch-indep packages not included) dpkg-source --after-build . dpkg-buildpackage: info: binary-only upload (no source included) -------------------------------------------------------------------------------- Build finished at 2026-01-15T02:06:35Z Finished -------- I: Built successfully +------------------------------------------------------------------------------+ | Changes Thu, 15 Jan 2026 02:06:36 +0000 | +------------------------------------------------------------------------------+ yaramod_3.21.0-1.1+b2_amd64.changes: ------------------------------------ Format: 1.8 Date: Tue, 11 Mar 2025 10:53:08 +0000 Source: yaramod (3.21.0-1.1) Binary: libyaramod-dev libyaramod0 libyaramod0-dbgsym python3-yaramod python3-yaramod-dbgsym Binary-Only: yes Architecture: amd64 Version: 3.21.0-1.1+b2 Distribution: unstable Urgency: low Maintainer: Yangfl Changed-By: amd64 / i386 Build Daemon (x86-csail-01) Description: libyaramod-dev - YARA parser for C++ (development headers) libyaramod0 - YARA parser for C++ python3-yaramod - YARA parser for C++ (Python 3 binding) Changes: yaramod (3.21.0-1.1+b2) sid; urgency=low, binary-only=yes . * Binary-only non-maintainer upload for amd64; no source changes. * Rebuild against blibre2-11-absl20240722. Checksums-Sha1: 41535facffb14d25a586893104025df7b54a2611 722688 libyaramod-dev_3.21.0-1.1+b2_amd64.deb ca7f8594e32c50a530ca2c624e230e5210e5fa41 12676604 libyaramod0-dbgsym_3.21.0-1.1+b2_amd64.deb 8032d370f34011375e56d21d62ad02db2afbaa1c 527148 libyaramod0_3.21.0-1.1+b2_amd64.deb e9b33cc80db9c11ebc536be1b37db211aa7d92cd 10489080 python3-yaramod-dbgsym_3.21.0-1.1+b2_amd64.deb a96c7c59369cb73462c0a9b97bd29e1704b0483a 415260 python3-yaramod_3.21.0-1.1+b2_amd64.deb e83c4277a3c75de02a6d0feba9fb7545101f957b 8777 yaramod_3.21.0-1.1+b2_amd64.buildinfo Checksums-Sha256: c390520f504877a061ad17687d6e92c31bade30b7b7a7e8e86f64961f05e8f06 722688 libyaramod-dev_3.21.0-1.1+b2_amd64.deb c669a1549e90a4cf03cac39940c6ae11af6c1611969427b95b7076a6ec9c009b 12676604 libyaramod0-dbgsym_3.21.0-1.1+b2_amd64.deb 9d64cef600323af66220e5b5f0ed8f272ce19e05777ed4d90dc707201cd6fc45 527148 libyaramod0_3.21.0-1.1+b2_amd64.deb 1f060a18f02f59f0abd69109d3aff53284231ac156a4ea1c4e181078217abe4d 10489080 python3-yaramod-dbgsym_3.21.0-1.1+b2_amd64.deb 0dff872505cd88db3ee93024f8c672faafb49a7f9dd1cda6344767e7ad408469 415260 python3-yaramod_3.21.0-1.1+b2_amd64.deb a275d0ccadd48ac39bd5dd42867789c7efd2eba8e62bb1a3051c857304c462f8 8777 yaramod_3.21.0-1.1+b2_amd64.buildinfo Files: d4ddbdb05e4c20e6ead894bcd8e62c4e 722688 libdevel optional libyaramod-dev_3.21.0-1.1+b2_amd64.deb 2e41f6407c4ee7c5f93defb863c5495d 12676604 debug optional libyaramod0-dbgsym_3.21.0-1.1+b2_amd64.deb 95269ef58c15eeb37e6fbed0a0417690 527148 libs optional libyaramod0_3.21.0-1.1+b2_amd64.deb cdcd1174e9294161bafaec12507dbc81 10489080 debug optional python3-yaramod-dbgsym_3.21.0-1.1+b2_amd64.deb 76f2591e5de64123aca97d2a49d2b85c 415260 python optional python3-yaramod_3.21.0-1.1+b2_amd64.deb 2c608514430132b0b15168527d1a35e7 8777 libs optional yaramod_3.21.0-1.1+b2_amd64.buildinfo +------------------------------------------------------------------------------+ | Buildinfo Thu, 15 Jan 2026 02:06:37 +0000 | +------------------------------------------------------------------------------+ Format: 1.0 Source: yaramod (3.21.0-1.1) Binary: libyaramod-dev libyaramod0 libyaramod0-dbgsym python3-yaramod python3-yaramod-dbgsym Architecture: amd64 Version: 3.21.0-1.1+b2 Binary-Only-Changes: yaramod (3.21.0-1.1+b2) sid; urgency=low, binary-only=yes . * Binary-only non-maintainer upload for amd64; no source changes. * Rebuild against blibre2-11-absl20240722. . -- amd64 / i386 Build Daemon (x86-csail-01) Tue, 11 Mar 2025 10:53:08 +0000 Checksums-Md5: d4ddbdb05e4c20e6ead894bcd8e62c4e 722688 libyaramod-dev_3.21.0-1.1+b2_amd64.deb 2e41f6407c4ee7c5f93defb863c5495d 12676604 libyaramod0-dbgsym_3.21.0-1.1+b2_amd64.deb 95269ef58c15eeb37e6fbed0a0417690 527148 libyaramod0_3.21.0-1.1+b2_amd64.deb cdcd1174e9294161bafaec12507dbc81 10489080 python3-yaramod-dbgsym_3.21.0-1.1+b2_amd64.deb 76f2591e5de64123aca97d2a49d2b85c 415260 python3-yaramod_3.21.0-1.1+b2_amd64.deb Checksums-Sha1: 41535facffb14d25a586893104025df7b54a2611 722688 libyaramod-dev_3.21.0-1.1+b2_amd64.deb ca7f8594e32c50a530ca2c624e230e5210e5fa41 12676604 libyaramod0-dbgsym_3.21.0-1.1+b2_amd64.deb 8032d370f34011375e56d21d62ad02db2afbaa1c 527148 libyaramod0_3.21.0-1.1+b2_amd64.deb e9b33cc80db9c11ebc536be1b37db211aa7d92cd 10489080 python3-yaramod-dbgsym_3.21.0-1.1+b2_amd64.deb a96c7c59369cb73462c0a9b97bd29e1704b0483a 415260 python3-yaramod_3.21.0-1.1+b2_amd64.deb Checksums-Sha256: c390520f504877a061ad17687d6e92c31bade30b7b7a7e8e86f64961f05e8f06 722688 libyaramod-dev_3.21.0-1.1+b2_amd64.deb c669a1549e90a4cf03cac39940c6ae11af6c1611969427b95b7076a6ec9c009b 12676604 libyaramod0-dbgsym_3.21.0-1.1+b2_amd64.deb 9d64cef600323af66220e5b5f0ed8f272ce19e05777ed4d90dc707201cd6fc45 527148 libyaramod0_3.21.0-1.1+b2_amd64.deb 1f060a18f02f59f0abd69109d3aff53284231ac156a4ea1c4e181078217abe4d 10489080 python3-yaramod-dbgsym_3.21.0-1.1+b2_amd64.deb 0dff872505cd88db3ee93024f8c672faafb49a7f9dd1cda6344767e7ad408469 415260 python3-yaramod_3.21.0-1.1+b2_amd64.deb Build-Origin: Debian Build-Architecture: amd64 Build-Date: Thu, 15 Jan 2026 02:06:35 +0000 Build-Path: /build/reproducible-path/yaramod-3.21.0 Installed-Build-Depends: autoconf (= 2.72-3), automake (= 1:1.17-3), autopoint (= 0.23.1-1), autotools-dev (= 20220109.1), base-files (= 13.7), base-passwd (= 3.6.6), bash (= 5.2.37-1.1), binutils (= 2.44-3), binutils-common (= 2.44-3), binutils-x86-64-linux-gnu (= 2.44-3), bsdextrautils (= 2.40.4-5), bsdutils (= 1:2.40.4-5), build-essential (= 12.12), bzip2 (= 1.0.8-6), cmake (= 3.31.6-1), cmake-data (= 3.31.6-1), coreutils (= 9.5-1+b1), cpp (= 4:14.2.0-1), cpp-14 (= 14.2.0-17), cpp-14-x86-64-linux-gnu (= 14.2.0-17), cpp-x86-64-linux-gnu (= 4:14.2.0-1), dash (= 0.5.12-12), debconf (= 1.5.90), debhelper (= 13.24.1), debianutils (= 5.21), dh-autoreconf (= 20), dh-python (= 6.20250308), dh-strip-nondeterminism (= 1.14.1-2), diffutils (= 1:3.10-2), dpkg (= 1.22.18), dpkg-dev (= 1.22.18), dwz (= 0.15-1+b1), file (= 1:5.45-3+b1), findutils (= 4.10.0-3), g++ (= 4:14.2.0-1), g++-14 (= 14.2.0-17), g++-14-x86-64-linux-gnu (= 14.2.0-17), g++-x86-64-linux-gnu (= 4:14.2.0-1), gcc (= 4:14.2.0-1), gcc-14 (= 14.2.0-17), gcc-14-base (= 14.2.0-17), gcc-14-x86-64-linux-gnu (= 14.2.0-17), gcc-x86-64-linux-gnu (= 4:14.2.0-1), gettext (= 0.23.1-1), gettext-base (= 0.23.1-1), googletest (= 1.16.0-1), grep (= 3.11-4), groff-base (= 1.23.0-7), gzip (= 1.13-1), hostname (= 3.25), init-system-helpers (= 1.68), intltool-debian (= 0.35.0+20060710.6), libabsl-dev (= 20240722.0-1.5), libabsl20240722 (= 20240722.0-1.5), libacl1 (= 2.3.2-2+b1), libarchive-zip-perl (= 1.68-1), libarchive13t64 (= 3.7.4-1.1), libasan8 (= 14.2.0-17), libatomic1 (= 14.2.0-17), libattr1 (= 1:2.5.2-3), libaudit-common (= 1:4.0.2-2), libaudit1 (= 1:4.0.2-2+b2), libbinutils (= 2.44-3), libblkid1 (= 2.40.4-5), libbrotli1 (= 1.1.0-2+b7), libbz2-1.0 (= 1.0.8-6), libc-bin (= 2.41-4), libc-dev-bin (= 2.41-4), libc6 (= 2.41-4), libc6-dev (= 2.41-4), libcap-ng0 (= 0.8.5-4+b1), libcap2 (= 1:2.75-1), libcc1-0 (= 14.2.0-17), libcom-err2 (= 1.47.2-1), libcrypt-dev (= 1:4.4.38-1), libcrypt1 (= 1:4.4.38-1), libctf-nobfd0 (= 2.44-3), libctf0 (= 2.44-3), libcurl4t64 (= 8.12.1-3), libdb5.3t64 (= 5.3.28+dfsg2-9), libdebconfclient0 (= 0.277), libdebhelper-perl (= 13.24.1), libdpkg-perl (= 1.22.18), libelf1t64 (= 0.192-4), libexpat1 (= 2.6.4-1), libexpat1-dev (= 2.6.4-1), libffi8 (= 3.4.7-1), libfile-stripnondeterminism-perl (= 1.14.1-2), libfmt-dev (= 10.1.1+ds1-4), libfmt10 (= 10.1.1+ds1-4), libgcc-14-dev (= 14.2.0-17), libgcc-s1 (= 14.2.0-17), libgdbm-compat4t64 (= 1.24-2), libgdbm6t64 (= 1.24-2), libgmp10 (= 2:6.3.0+dfsg-3), libgnutls30t64 (= 3.8.9-2), libgomp1 (= 14.2.0-17), libgprofng0 (= 2.44-3), libgssapi-krb5-2 (= 1.21.3-4), libgtest-dev (= 1.16.0-1), libhogweed6t64 (= 3.10.1-1), libhwasan0 (= 14.2.0-17), libicu72 (= 72.1-6), libidn2-0 (= 2.3.8-1), libisl23 (= 0.27-1), libitm1 (= 14.2.0-17), libjansson4 (= 2.14-2+b3), libjs-jquery (= 3.6.1+dfsg+~3.5.14-1), libjs-sphinxdoc (= 8.1.3-5), libjs-underscore (= 1.13.4~dfsg+~1.11.4-3), libjsoncpp26 (= 1.9.6-3), libk5crypto3 (= 1.21.3-4), libkeyutils1 (= 1.6.3-4), libkrb5-3 (= 1.21.3-4), libkrb5support0 (= 1.21.3-4), libldap2 (= 2.6.9+dfsg-1), liblsan0 (= 14.2.0-17), liblz4-1 (= 1.10.0-4), liblzma5 (= 5.6.4-1), libmagic-mgc (= 1:5.45-3+b1), libmagic1t64 (= 1:5.45-3+b1), libmd0 (= 1.1.0-2+b1), libmount1 (= 2.40.4-5), libmpc3 (= 1.3.1-1+b3), libmpfr6 (= 4.2.1-1+b2), libncursesw6 (= 6.5+20250216-2), libnettle8t64 (= 3.10.1-1), libnghttp2-14 (= 1.64.0-1), libnghttp3-9 (= 1.8.0-1), libp11-kit0 (= 0.25.5-3), libpam-modules (= 1.7.0-3), libpam-modules-bin (= 1.7.0-3), libpam-runtime (= 1.7.0-3), libpam0g (= 1.7.0-3), libpcre2-8-0 (= 10.45-1), libperl5.40 (= 5.40.1-2), libpipeline1 (= 1.5.8-1), libpkgconf3 (= 1.8.1-4), libpog-dev (= 0.5.3-3), libproc2-0 (= 2:4.0.4-7), libpsl5t64 (= 0.21.2-1.1+b1), libpython3-dev (= 3.13.2-2), libpython3-stdlib (= 3.13.2-2), libpython3.13 (= 3.13.2-1), libpython3.13-dev (= 3.13.2-1), libpython3.13-minimal (= 3.13.2-1), libpython3.13-stdlib (= 3.13.2-1), libquadmath0 (= 14.2.0-17), libre2-11 (= 20240702-3+b1), libre2-dev (= 20240702-3+b1), libreadline8t64 (= 8.2-6), librhash1 (= 1.4.5-1), librtmp1 (= 2.4+20151223.gitfa8646d.1-2+b5), libsasl2-2 (= 2.1.28+dfsg1-9), libsasl2-modules-db (= 2.1.28+dfsg1-9), libseccomp2 (= 2.5.5-2+b1), libselinux1 (= 3.8-4), libsframe1 (= 2.44-3), libsmartcols1 (= 2.40.4-5), libsqlite3-0 (= 3.46.1-2), libssh2-1t64 (= 1.11.1-1), libssl3t64 (= 3.4.1-1), libstdc++-14-dev (= 14.2.0-17), libstdc++6 (= 14.2.0-17), libsystemd0 (= 257.4-1), libtasn1-6 (= 4.20.0-2), libtinfo6 (= 6.5+20250216-2), libtool (= 2.5.4-4), libtsan2 (= 14.2.0-17), libubsan1 (= 14.2.0-17), libuchardet0 (= 0.0.8-1+b2), libudev1 (= 257.4-1), libunistring5 (= 1.3-1), libuuid1 (= 2.40.4-5), libuv1t64 (= 1.50.0-2), libxml2 (= 2.12.7+dfsg+really2.9.14-0.2+b2), libxxhash0 (= 0.8.3-2), libyaml-0-2 (= 0.2.5-2), libzstd1 (= 1.5.6+dfsg-2), linux-libc-dev (= 6.12.17-1), m4 (= 1.4.19-7), make (= 4.4.1-1), man-db (= 2.13.0-1), mawk (= 1.3.4.20250131-1), media-types (= 13.0.0), ncurses-base (= 6.5+20250216-2), ncurses-bin (= 6.5+20250216-2), netbase (= 6.4), nlohmann-json3-dev (= 3.11.3-2), openssl-provider-legacy (= 3.4.1-1), patch (= 2.7.6-7), perl (= 5.40.1-2), perl-base (= 5.40.1-2), perl-modules-5.40 (= 5.40.1-2), pkg-kde-tools (= 0.18.12), pkgconf (= 1.8.1-4), pkgconf-bin (= 1.8.1-4), po-debconf (= 1.0.21+nmu1), procps (= 2:4.0.4-7), pybind11-dev (= 2.13.6-2), python3 (= 3.13.2-2), python3-autocommand (= 2.2.2-3), python3-charset-normalizer (= 3.4.1-1+b1), python3-debian (= 1.0.0), python3-dev (= 3.13.2-2), python3-inflect (= 7.3.1-2), python3-jaraco.context (= 6.0.1-1), python3-jaraco.functools (= 4.1.0-1), python3-jaraco.text (= 4.0.0-1), python3-minimal (= 3.13.2-2), python3-more-itertools (= 10.6.0-1), python3-pkg-resources (= 75.8.0-1), python3-setuptools (= 75.8.0-1), python3-typeguard (= 4.4.2-1), python3-typing-extensions (= 4.12.2-2), python3-yaml (= 6.0.2-1+b2), python3-zipp (= 3.21.0-1), python3.13 (= 3.13.2-1), python3.13-dev (= 3.13.2-1), python3.13-minimal (= 3.13.2-1), readline-common (= 8.2-6), rpcsvc-proto (= 1.4.3-1), sed (= 4.9-2), sensible-utils (= 0.0.24), sysvinit-utils (= 3.14-3), tar (= 1.35+dfsg-3.1), tzdata (= 2025a-2), util-linux (= 2.40.4-5), xz-utils (= 5.6.4-1), zlib1g (= 1:1.3.dfsg+really1.3.1-1+b1), zlib1g-dev (= 1:1.3.dfsg+really1.3.1-1+b1) Environment: DEB_BUILD_OPTIONS="parallel=6" LANG="C.UTF-8" LC_COLLATE="C.UTF-8" LC_CTYPE="C.UTF-8" SOURCE_DATE_EPOCH="1741690388" +------------------------------------------------------------------------------+ | Package contents Thu, 15 Jan 2026 02:06:37 +0000 | +------------------------------------------------------------------------------+ libyaramod-dev_3.21.0-1.1+b2_amd64.deb -------------------------------------- new Debian package, version 2.0. size 722688 bytes: control archive=2664 bytes. 612 bytes, 17 lines control 6100 bytes, 73 lines md5sums Package: libyaramod-dev Source: yaramod (3.21.0-1.1) Version: 3.21.0-1.1+b2 Architecture: amd64 Maintainer: Yangfl Installed-Size: 7929 Depends: libyaramod0 (= 3.21.0-1.1+b2), libpog-dev Section: libdevel Priority: optional Multi-Arch: same Homepage: https://github.com/avast/yaramod Description: YARA parser for C++ (development headers) yaramod is a library that provides parsing of YARA rules into AST and a C++ programming interface to build new YARA rulesets. yaramod also comes with Python bindings and can be installed using pip. . This package contains the development headers. drwxr-xr-x root/root 0 2025-03-11 10:53 ./ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/include/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/include/yaramod/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/include/yaramod/builder/ -rw-r--r-- root/root 11617 2024-01-04 20:03 ./usr/include/yaramod/builder/yara_expression_builder.h -rw-r--r-- root/root 2211 2024-01-04 20:03 ./usr/include/yaramod/builder/yara_file_builder.h -rw-r--r-- root/root 5016 2024-01-04 20:03 ./usr/include/yaramod/builder/yara_hex_string_builder.h -rw-r--r-- root/root 4607 2024-01-04 20:03 ./usr/include/yaramod/builder/yara_rule_builder.h drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/include/yaramod/parser/ -rw-r--r-- root/root 1415 2024-01-04 20:03 ./usr/include/yaramod/parser/file_context.h -rw-r--r-- root/root 2898 2024-01-04 20:03 ./usr/include/yaramod/parser/location.h -rw-r--r-- root/root 7539 2024-01-04 20:03 ./usr/include/yaramod/parser/parser_driver.h -rw-r--r-- root/root 626 2024-01-04 20:03 ./usr/include/yaramod/parser/uid_generator.h -rw-r--r-- root/root 5246 2024-01-04 20:03 ./usr/include/yaramod/parser/value.h drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/include/yaramod/types/ -rw-r--r-- root/root 4502 2024-01-04 20:03 ./usr/include/yaramod/types/expression.h -rw-r--r-- root/root 320 2024-01-04 20:03 ./usr/include/yaramod/types/expression_type.h -rw-r--r-- root/root 65093 2024-01-04 20:03 ./usr/include/yaramod/types/expressions.h -rw-r--r-- root/root 1040 2024-01-04 20:03 ./usr/include/yaramod/types/features.h -rw-r--r-- root/root 9970 2024-01-04 20:03 ./usr/include/yaramod/types/hex_string.h -rw-r--r-- root/root 5178 2024-01-04 20:03 ./usr/include/yaramod/types/literal.h -rw-r--r-- root/root 1051 2024-01-04 20:03 ./usr/include/yaramod/types/meta.h drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/include/yaramod/types/modules/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/include/yaramod/types/modules/generated/ -rw-r--r-- root/root 21379 2025-03-11 10:53 ./usr/include/yaramod/types/modules/generated/module_console_generated.h -rw-r--r-- root/root 4321 2025-03-11 10:53 ./usr/include/yaramod/types/modules/generated/module_cuckoo_deprecated_generated.h -rw-r--r-- root/root 43587 2025-03-11 10:53 ./usr/include/yaramod/types/modules/generated/module_cuckoo_generated.h -rw-r--r-- root/root 156820 2025-03-11 10:53 ./usr/include/yaramod/types/modules/generated/module_dex_generated.h -rw-r--r-- root/root 100101 2025-03-11 10:53 ./usr/include/yaramod/types/modules/generated/module_dotnet_generated.h -rw-r--r-- root/root 141897 2025-03-11 10:53 ./usr/include/yaramod/types/modules/generated/module_elf_generated.h -rw-r--r-- root/root 28745 2025-03-11 10:53 ./usr/include/yaramod/types/modules/generated/module_hash_generated.h -rw-r--r-- root/root 1151 2025-03-11 10:53 ./usr/include/yaramod/types/modules/generated/module_list.h -rw-r--r-- root/root 222853 2025-03-11 10:53 ./usr/include/yaramod/types/modules/generated/module_macho_generated.h -rw-r--r-- root/root 4698 2025-03-11 10:53 ./usr/include/yaramod/types/modules/generated/module_magic_generated.h -rw-r--r-- root/root 84731 2025-03-11 10:53 ./usr/include/yaramod/types/modules/generated/module_math_generated.h -rw-r--r-- root/root 396231 2025-03-11 10:53 ./usr/include/yaramod/types/modules/generated/module_pe_generated.h -rw-r--r-- root/root 11493 2025-03-11 10:53 ./usr/include/yaramod/types/modules/generated/module_string_generated.h -rw-r--r-- root/root 2834 2025-03-11 10:53 ./usr/include/yaramod/types/modules/generated/module_time_generated.h -rw-r--r-- root/root 2501 2024-01-04 20:03 ./usr/include/yaramod/types/modules/module.h -rw-r--r-- root/root 898 2024-01-04 20:03 ./usr/include/yaramod/types/modules/module_content.h -rw-r--r-- root/root 1767 2024-01-04 20:03 ./usr/include/yaramod/types/modules/module_pool.h -rw-r--r-- root/root 1185 2024-01-04 20:03 ./usr/include/yaramod/types/plain_string.h -rw-r--r-- root/root 18065 2024-01-04 20:03 ./usr/include/yaramod/types/regexp.h -rw-r--r-- root/root 3717 2024-01-04 20:03 ./usr/include/yaramod/types/rule.h -rw-r--r-- root/root 1551 2024-01-04 20:03 ./usr/include/yaramod/types/sections_summary.h -rw-r--r-- root/root 7772 2024-01-04 20:03 ./usr/include/yaramod/types/string.h -rw-r--r-- root/root 6158 2024-01-04 20:03 ./usr/include/yaramod/types/string_modifier.h -rw-r--r-- root/root 2905 2024-01-04 20:03 ./usr/include/yaramod/types/symbol.h -rw-r--r-- root/root 10093 2024-01-04 20:03 ./usr/include/yaramod/types/symbols.h -rw-r--r-- root/root 5922 2024-01-04 20:03 ./usr/include/yaramod/types/token.h -rw-r--r-- root/root 6711 2024-01-04 20:03 ./usr/include/yaramod/types/token_stream.h -rw-r--r-- root/root 2227 2024-01-04 20:03 ./usr/include/yaramod/types/token_type.h -rw-r--r-- root/root 1136 2024-01-04 20:03 ./usr/include/yaramod/types/variable.h -rw-r--r-- root/root 4105 2024-01-04 20:03 ./usr/include/yaramod/types/yara_file.h drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/include/yaramod/utils/ -rw-r--r-- root/root 566 2024-01-04 20:03 ./usr/include/yaramod/utils/filesystem.h -rw-r--r-- root/root 482 2024-01-04 20:03 ./usr/include/yaramod/utils/filesystem_operations.h -rw-r--r-- root/root 702 2025-03-11 10:53 ./usr/include/yaramod/utils/json.h -rw-r--r-- root/root 24258 2024-01-04 20:03 ./usr/include/yaramod/utils/modifying_visitor.h -rw-r--r-- root/root 11973 2024-01-04 20:03 ./usr/include/yaramod/utils/observing_visitor.h -rw-r--r-- root/root 9429 2024-01-04 20:03 ./usr/include/yaramod/utils/trie.h -rw-r--r-- root/root 3652 2024-01-04 20:03 ./usr/include/yaramod/utils/utils.h -rw-r--r-- root/root 8104 2024-01-04 20:03 ./usr/include/yaramod/utils/visitor.h -rw-r--r-- root/root 918 2024-01-04 20:03 ./usr/include/yaramod/utils/visitor_result.h -rw-r--r-- root/root 2254 2024-01-04 20:03 ./usr/include/yaramod/yaramod.h -rw-r--r-- root/root 799 2024-01-04 20:03 ./usr/include/yaramod/yaramod_error.h drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/lib/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/lib/x86_64-linux-gnu/ -rw-r--r-- root/root 6512372 2025-03-11 10:53 ./usr/lib/x86_64-linux-gnu/libyaramod.a lrwxrwxrwx root/root 0 2025-03-11 10:53 ./usr/lib/x86_64-linux-gnu/libyaramod.so -> libyaramod.so.0 drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/lib/x86_64-linux-gnu/pkgconfig/ -rw-r--r-- root/root 209 2025-03-11 10:53 ./usr/lib/x86_64-linux-gnu/pkgconfig/yaramod.pc drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/share/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/share/doc/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/share/doc/libyaramod-dev/ -rw-r--r-- root/root 235 2025-03-11 10:53 ./usr/share/doc/libyaramod-dev/changelog.Debian.amd64.gz -rw-r--r-- root/root 480 2025-03-11 10:53 ./usr/share/doc/libyaramod-dev/changelog.Debian.gz -rw-r--r-- root/root 6302 2024-01-04 20:03 ./usr/share/doc/libyaramod-dev/changelog.gz -rw-r--r-- root/root 3733 2024-06-02 03:14 ./usr/share/doc/libyaramod-dev/copyright drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/share/doc/libyaramod-dev/examples/ -rw-r--r-- root/root 22 2024-01-04 20:03 ./usr/share/doc/libyaramod-dev/examples/CMakeLists.txt drwxr-xr-x root/root 0 2024-01-04 20:03 ./usr/share/doc/libyaramod-dev/examples/cpp/ -rw-r--r-- root/root 66 2024-01-04 20:03 ./usr/share/doc/libyaramod-dev/examples/cpp/CMakeLists.txt drwxr-xr-x root/root 0 2024-01-04 20:03 ./usr/share/doc/libyaramod-dev/examples/cpp/dump_rules_ast/ -rw-r--r-- root/root 86 2024-01-04 20:03 ./usr/share/doc/libyaramod-dev/examples/cpp/dump_rules_ast/CMakeLists.txt -rw-r--r-- root/root 18362 2024-01-04 20:03 ./usr/share/doc/libyaramod-dev/examples/cpp/dump_rules_ast/dumper.h -rw-r--r-- root/root 704 2024-01-04 20:03 ./usr/share/doc/libyaramod-dev/examples/cpp/dump_rules_ast/main.cpp drwxr-xr-x root/root 0 2024-01-04 20:03 ./usr/share/doc/libyaramod-dev/examples/cpp/simplify_bools/ -rw-r--r-- root/root 86 2024-01-04 20:03 ./usr/share/doc/libyaramod-dev/examples/cpp/simplify_bools/CMakeLists.txt -rw-r--r-- root/root 5939 2024-01-04 20:03 ./usr/share/doc/libyaramod-dev/examples/cpp/simplify_bools/bool_simplifier.h -rw-r--r-- root/root 1006 2024-01-04 20:03 ./usr/share/doc/libyaramod-dev/examples/cpp/simplify_bools/main.cpp drwxr-xr-x root/root 0 2024-01-04 20:03 ./usr/share/doc/libyaramod-dev/examples/python/ -rw-r--r-- root/root 12818 2024-01-04 20:03 ./usr/share/doc/libyaramod-dev/examples/python/dump_rules_ast.py -rw-r--r-- root/root 5236 2024-01-04 20:03 ./usr/share/doc/libyaramod-dev/examples/python/simplify_bools.py libyaramod0-dbgsym_3.21.0-1.1+b2_amd64.deb ------------------------------------------ new Debian package, version 2.0. size 12676604 bytes: control archive=540 bytes. 381 bytes, 13 lines control 106 bytes, 1 lines md5sums Package: libyaramod0-dbgsym Source: yaramod (3.21.0-1.1) Version: 3.21.0-1.1+b2 Auto-Built-Package: debug-symbols Architecture: amd64 Maintainer: Yangfl Installed-Size: 13314 Depends: libyaramod0 (= 3.21.0-1.1+b2) Section: debug Priority: optional Multi-Arch: same Description: debug symbols for libyaramod0 Build-Ids: e2f665d5f2d765955f2d2e2beeb753dba3f8e728 drwxr-xr-x root/root 0 2025-03-11 10:53 ./ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/lib/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/lib/debug/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/lib/debug/.build-id/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/lib/debug/.build-id/e2/ -rw-r--r-- root/root 13623232 2025-03-11 10:53 ./usr/lib/debug/.build-id/e2/f665d5f2d765955f2d2e2beeb753dba3f8e728.debug drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/share/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/share/doc/ lrwxrwxrwx root/root 0 2025-03-11 10:53 ./usr/share/doc/libyaramod0-dbgsym -> libyaramod0 libyaramod0_3.21.0-1.1+b2_amd64.deb ----------------------------------- new Debian package, version 2.0. size 527148 bytes: control archive=944 bytes. 611 bytes, 17 lines control 389 bytes, 5 lines md5sums 37 bytes, 1 lines shlibs 68 bytes, 2 lines triggers Package: libyaramod0 Source: yaramod (3.21.0-1.1) Version: 3.21.0-1.1+b2 Architecture: amd64 Maintainer: Yangfl Installed-Size: 2399 Depends: libc6 (>= 2.38), libgcc-s1 (>= 3.0), libre2-11-absl20240722, libstdc++6 (>= 13.1) Section: libs Priority: optional Multi-Arch: same Homepage: https://github.com/avast/yaramod Description: YARA parser for C++ yaramod is a library that provides parsing of YARA rules into AST and a C++ programming interface to build new YARA rulesets. yaramod also comes with Python bindings and can be installed using pip. . This package contains the library. drwxr-xr-x root/root 0 2025-03-11 10:53 ./ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/lib/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/lib/x86_64-linux-gnu/ lrwxrwxrwx root/root 0 2025-03-11 10:53 ./usr/lib/x86_64-linux-gnu/libyaramod.so.0 -> libyaramod.so.3.21.0 -rw-r--r-- root/root 2431008 2025-03-11 10:53 ./usr/lib/x86_64-linux-gnu/libyaramod.so.3.21.0 drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/share/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/share/doc/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/share/doc/libyaramod0/ -rw-r--r-- root/root 235 2025-03-11 10:53 ./usr/share/doc/libyaramod0/changelog.Debian.amd64.gz -rw-r--r-- root/root 480 2025-03-11 10:53 ./usr/share/doc/libyaramod0/changelog.Debian.gz -rw-r--r-- root/root 6302 2024-01-04 20:03 ./usr/share/doc/libyaramod0/changelog.gz -rw-r--r-- root/root 3733 2024-06-02 03:14 ./usr/share/doc/libyaramod0/copyright python3-yaramod-dbgsym_3.21.0-1.1+b2_amd64.deb ---------------------------------------------- new Debian package, version 2.0. size 10489080 bytes: control archive=540 bytes. 393 bytes, 13 lines control 106 bytes, 1 lines md5sums Package: python3-yaramod-dbgsym Source: yaramod (3.21.0-1.1) Version: 3.21.0-1.1+b2 Auto-Built-Package: debug-symbols Architecture: amd64 Maintainer: Yangfl Installed-Size: 12158 Depends: python3-yaramod (= 3.21.0-1.1+b2) Section: debug Priority: optional Multi-Arch: same Description: debug symbols for python3-yaramod Build-Ids: 2d5cdc2be69656799b47688e551be2904fe257b1 drwxr-xr-x root/root 0 2025-03-11 10:53 ./ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/lib/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/lib/debug/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/lib/debug/.build-id/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/lib/debug/.build-id/2d/ -rw-r--r-- root/root 12439472 2025-03-11 10:53 ./usr/lib/debug/.build-id/2d/5cdc2be69656799b47688e551be2904fe257b1.debug drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/share/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/share/doc/ lrwxrwxrwx root/root 0 2025-03-11 10:53 ./usr/share/doc/python3-yaramod-dbgsym -> python3-yaramod python3-yaramod_3.21.0-1.1+b2_amd64.deb --------------------------------------- new Debian package, version 2.0. size 415260 bytes: control archive=1060 bytes. 707 bytes, 17 lines control 903 bytes, 10 lines md5sums Package: python3-yaramod Source: yaramod (3.21.0-1.1) Version: 3.21.0-1.1+b2 Architecture: amd64 Maintainer: Yangfl Installed-Size: 2267 Depends: libc6 (>= 2.32), libgcc-s1 (>= 3.0), libre2-11-absl20240722, libstdc++6 (>= 14), libyaramod0 (>= 3.21.0), python3 (<< 3.14), python3 (>= 3.13~) Section: python Priority: optional Multi-Arch: same Homepage: https://github.com/avast/yaramod Description: YARA parser for C++ (Python 3 binding) yaramod is a library that provides parsing of YARA rules into AST and a C++ programming interface to build new YARA rulesets. yaramod also comes with Python bindings and can be installed using pip. . This package contains the Python 3 binding. drwxr-xr-x root/root 0 2025-03-11 10:53 ./ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/lib/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/lib/python3/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/lib/python3/dist-packages/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/lib/python3/dist-packages/yaramod-3.21.0.egg-info/ -rw-r--r-- root/root 991 2025-03-11 10:53 ./usr/lib/python3/dist-packages/yaramod-3.21.0.egg-info/PKG-INFO -rw-r--r-- root/root 1 2025-03-11 10:53 ./usr/lib/python3/dist-packages/yaramod-3.21.0.egg-info/dependency_links.txt -rw-r--r-- root/root 8 2025-03-11 10:53 ./usr/lib/python3/dist-packages/yaramod-3.21.0.egg-info/top_level.txt -rw-r--r-- root/root 2214184 2025-03-11 10:53 ./usr/lib/python3/dist-packages/yaramod.cpython-313-x86_64-linux-gnu.so drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/lib/python3/dist-packages/yaramod/ -rw-r--r-- root/root 78420 2024-01-04 20:03 ./usr/lib/python3/dist-packages/yaramod/__init__.pyi -rw-r--r-- root/root 0 2024-01-04 20:03 ./usr/lib/python3/dist-packages/yaramod/py.typed drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/share/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/share/doc/ drwxr-xr-x root/root 0 2025-03-11 10:53 ./usr/share/doc/python3-yaramod/ -rw-r--r-- root/root 235 2025-03-11 10:53 ./usr/share/doc/python3-yaramod/changelog.Debian.amd64.gz -rw-r--r-- root/root 480 2025-03-11 10:53 ./usr/share/doc/python3-yaramod/changelog.Debian.gz -rw-r--r-- root/root 6302 2024-01-04 20:03 ./usr/share/doc/python3-yaramod/changelog.gz -rw-r--r-- root/root 3733 2024-06-02 03:14 ./usr/share/doc/python3-yaramod/copyright +------------------------------------------------------------------------------+ | Post Build Thu, 15 Jan 2026 02:06:39 +0000 | +------------------------------------------------------------------------------+ +------------------------------------------------------------------------------+ | Cleanup Thu, 15 Jan 2026 02:06:39 +0000 | +------------------------------------------------------------------------------+ Purging /build/reproducible-path Not cleaning session: cloned chroot in use +------------------------------------------------------------------------------+ | Summary Thu, 15 Jan 2026 02:06:40 +0000 | +------------------------------------------------------------------------------+ Build Architecture: amd64 Build Type: any Build-Space: 879124 Build-Time: 212 Distribution: unstable Host Architecture: amd64 Install-Time: 4 Job: /srv/rebuilderd/tmp/rebuilderdIvwy7c/inputs/yaramod_3.21.0-1.1.dsc Machine Architecture: amd64 Package: yaramod Package-Time: 224 Source-Version: 3.21.0-1.1 Space: 879124 Status: successful Version: 3.21.0-1.1+b2 -------------------------------------------------------------------------------- Finished at 2026-01-15T02:06:35Z Build needed 00:03:44, 879124k disk space build artifacts stored in /srv/rebuilderd/tmp/rebuilderdIvwy7c/out checking libyaramod-dev_3.21.0-1.1+b2_amd64.deb: size differs for libyaramod-dev_3.21.0-1.1+b2_amd64.deb