=============================================================================== 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/rebuilderdBS7scV/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 Mon, 17 Nov 2025 02:41:04 +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.5 kB] Get:5 https://deb.debian.org/debian trixie-backports InRelease [54.0 kB] Get:6 https://deb.debian.org/debian forky InRelease [148 kB] Get:7 https://deb.debian.org/debian sid InRelease [176 kB] Get:8 https://deb.debian.org/debian experimental InRelease [82.8 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,548 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 [93.2 kB] Get:13 https://deb.debian.org/debian trixie-updates/main Sources [2,788 B] Get:14 https://deb.debian.org/debian trixie-backports/non-free-firmware Sources [1,052 B] Get:15 https://deb.debian.org/debian trixie-backports/main Sources [85.3 kB] Get:16 https://deb.debian.org/debian forky/main Sources [10.7 MB] Get:17 https://deb.debian.org/debian forky/non-free-firmware Sources [7,108 B] Get:18 https://deb.debian.org/debian sid/main Sources [11.2 MB] Get:19 https://deb.debian.org/debian sid/non-free-firmware Sources [9,384 B] Get:20 https://deb.debian.org/debian experimental/main Sources [355 kB] Get:21 https://deb.debian.org/debian experimental/non-free-firmware Sources [3,332 B] Fetched 33.7 MB in 5s (7,317 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 Mon, 17 Nov 2025 02:41:10 +0000 | +------------------------------------------------------------------------------+ Rebuilding yaramod=3.21.0-1.1 in /srv/rebuilderd/tmp/rebuilderdBS7scV/inputs now. + nice /usr/bin/debrebuild --buildresult=/srv/rebuilderd/tmp/rebuilderdBS7scV/out --builder=sbuild+unshare --cache=/srv/rebuilderd/cache -- /srv/rebuilderd/tmp/rebuilderdBS7scV/inputs/yaramod_3.21.0-1.1+b2_amd64.buildinfo /srv/rebuilderd/tmp/rebuilderdBS7scV/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 [176 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 (8833 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 automake all 1:1.17-3 [862 kB] Fetched 862 kB in 0s (50.9 MB/s) dpkg-name: info: moved 'automake_1%3a1.17-3_all.deb' to '/srv/rebuilderd/tmp/tmpqef8si6s/automake_1.17-3_all.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 (3290 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0qbi_gsy/libpkgconf3_1.8.1-4_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 ncurses-base all 6.5+20250216-2 [273 kB] Fetched 273 kB in 0s (19.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpy938qfnl/ncurses-base_6.5+20250216-2_all.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 (1132 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpyi_hma2u/python3-jaraco.functools_4.1.0-1_all.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 (9945 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpwb92utez/dh-python_6.20250308_all.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 (728 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp2y80emw3/dh-strip-nondeterminism_1.14.1-2_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 (2149 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3r5r6lrt/libcurl4t64_8.12.1-3_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 (32.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpalkvfq_8/libgprofng0_2.44-3_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 (8880 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpw7zmjhzu/libjs-underscore_1.13.4~dfsg+~1.11.4-3_all.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 (1790 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp7ya3yecl/libjsoncpp26_1.9.6-3_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 (1836 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpw8g762fz/pkgconf-bin_1.8.1-4_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libpipeline1 amd64 1.5.8-1 [42.0 kB] Fetched 42.0 kB in 0s (2682 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6gn0269h/libpipeline1_1.5.8-1_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 (3367 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpekbrlekp/libre2-dev_20240702-3+b1_amd64.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 (6615 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp2c5n_d20/libgdbm6t64_1.24-2_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 (1460 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmprpupmaxy/sysvinit-utils_3.14-3_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 (8554 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpkbd0cuq8/dwz_0.15-1+b1_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 (99.7 kB/s) dpkg-name: info: moved 'g++-x86-64-linux-gnu_4%3a14.2.0-1_amd64.deb' to '/srv/rebuilderd/tmp/tmpjbdq20ml/g++-x86-64-linux-gnu_14.2.0-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 (5114 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6lfvwjgo/libexpat1-dev_2.6.4-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 (4903 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpzq08d_y0/librhash1_1.4.5-1_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 (30.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpkr9iy57m/autopoint_0.23.1-1_all.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 (33.8 MB/s) dpkg-name: info: moved 'procps_2%3a4.0.4-7_amd64.deb' to '/srv/rebuilderd/tmp/tmpsm11mze5/procps_4.0.4-7_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 (1101 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp7j710r3k/dh-autoreconf_20_all.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 (3810 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp11ci6mw6/python3-more-itertools_10.6.0-1_all.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 (1038 kB/s) dpkg-name: info: moved 'libcap2_1%3a2.75-1_amd64.deb' to '/srv/rebuilderd/tmp/tmpq_lcc7sy/libcap2_2.75-1_amd64.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 (6896 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmprren23yf/libuv1t64_1.50.0-2_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 (72.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp8r02ai4q/gettext_0.23.1-1_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 (241 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpotxmqoee/libatomic1_14.2.0-17_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 (1744 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp71kbk5lx/libcc1-0_14.2.0-17_amd64.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 (48.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6iz11_j3/linux-libc-dev_6.12.17-1_all.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 (72.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpsl3040xy/g++-14-x86-64-linux-gnu_14.2.0-17_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 (11.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjjiqqeg6/libarchive13t64_3.7.4-1.1_amd64.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 (548 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpyn5j46xj/netbase_6.4_all.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 2s (74.4 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpcxg2kutt/python3-debian_1.0.0_all.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 (2081 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpet3zdxdz/sensible-utils_0.0.24_all.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 (8675 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp8iczm77_/pybind11-dev_2.13.6-2_all.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 (23.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjjoxkvdg/openssl-provider-legacy_3.4.1-1_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 (34.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpzh1hegwj/tar_1.35+dfsg-3.1_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 (3193 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp1t37hwhn/debconf_1.5.90_all.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 (3084 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpdizotnwp/libselinux1_3.8-4_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 gzip amd64 1.13-1 [138 kB] Fetched 138 kB in 0s (7945 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpydgq606j/gzip_1.13-1_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 (4093 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp8sjhnaw6/libseccomp2_2.5.5-2+b1_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 (4816 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmps_78e567/autotools-dev_20220109.1_all.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 (2545 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpfb6ggiyl/libuuid1_2.40.4-5_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 (121 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpcg5ak4zv/libperl5.40_5.40.1-2_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 (24.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp63dotbrg/libpython3.13_3.13.2-1_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 (488 kB/s) dpkg-name: info: moved 'gcc_4%3a14.2.0-1_amd64.deb' to '/srv/rebuilderd/tmp/tmphssnzgq3/gcc_14.2.0-1_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 (45.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmprnpsz6ae/python3-setuptools_75.8.0-1_all.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 (3868 kB/s) dpkg-name: info: moved 'file_1%3a5.45-3+b1_amd64.deb' to '/srv/rebuilderd/tmp/tmpm95kuvss/file_5.45-3+b1_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 (20.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpo5d6r264/libp11-kit0_0.25.5-3_amd64.deb' Get: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 (7614 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpi3o6nj4b/bsdextrautils_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 (979 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpvrdtjrrk/hostname_3.25_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 (10.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp1hlz92f_/libpam-modules_1.7.0-3_amd64.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 (13.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmppl63ng9n/binutils_2.44-3_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libisl23 amd64 0.27-1 [659 kB] Fetched 659 kB in 0s (41.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmph7d513z3/libisl23_0.27-1_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 (22.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpo4cvb6c0/autoconf_2.72-3_all.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 (8875 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpcg2e0aft/libctf-nobfd0_2.44-3_amd64.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 (1302 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpenrb6ua9/libc-dev-bin_2.41-4_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 (9264 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpaimhx7vd/libubsan1_14.2.0-17_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 (57.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpdso852lw/binutils-common_2.44-3_amd64.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 0s (62.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpiqp50ftr/libssl3t64_3.4.1-1_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 (50.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpaoaeswhw/binutils-x86-64-linux-gnu_2.44-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 (66.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpf9xmriay/coreutils_9.5-1+b1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 build-essential amd64 12.12 [4624 B] Fetched 4624 B in 0s (313 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpry_cz_si/build-essential_12.12_amd64.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 (48.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp26ryh7fg/dpkg-dev_1.22.18_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 (86.1 kB/s) dpkg-name: info: moved 'g++_4%3a14.2.0-1_amd64.deb' to '/srv/rebuilderd/tmp/tmpkxiex6w3/g++_14.2.0-1_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 (14.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpe4ngmq3t/gettext-base_0.23.1-1_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 (1543 kB/s) dpkg-name: info: moved 'libattr1_1%3a2.5.2-3_amd64.deb' to '/srv/rebuilderd/tmp/tmpx79ttra9/libattr1_2.5.2-3_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 (3777 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpudccz79_/rpcsvc-proto_1.4.3-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 (2906 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpdp29u55m/libpam-modules-bin_1.7.0-3_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 (42.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0d_u7jhr/findutils_4.10.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 (23.9 MB/s) dpkg-name: info: moved 'libmagic-mgc_1%3a5.45-3+b1_amd64.deb' to '/srv/rebuilderd/tmp/tmpbpznbrjs/libmagic-mgc_5.45-3+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 (36.5 MB/s) dpkg-name: info: moved 'libgmp10_2%3a6.3.0+dfsg-3_amd64.deb' to '/srv/rebuilderd/tmp/tmpuwuxjmh7/libgmp10_6.3.0+dfsg-3_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 (6268 kB/s) dpkg-name: info: moved 'libmagic1t64_1%3a5.45-3+b1_amd64.deb' to '/srv/rebuilderd/tmp/tmposaruhfl/libmagic1t64_5.45-3+b1_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 (3331 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp7h__79xh/base-passwd_3.6.6_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 (7154 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpqgic6wik/libdebhelper-perl_13.24.1_all.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 (8984 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmptr6g20ae/nlohmann-json3-dev_3.11.3-2_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 (5196 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpq0hin6v9/libpsl5t64_0.21.2-1.1+b1_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 (2445 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpxapj60fs/bzip2_1.0.8-6_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 (25.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpp7hh2bx8/libbinutils_2.44-3_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 (19.1 MB/s) dpkg-name: info: moved 'diffutils_1%3a3.10-2_amd64.deb' to '/srv/rebuilderd/tmp/tmpf2m79n4b/diffutils_3.10-2_amd64.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 (5332 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpar7fpp9c/libgomp1_14.2.0-17_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 zlib1g-dev amd64 1:1.3.dfsg+really1.3.1-1+b1 [920 kB] Fetched 920 kB in 0s (45.7 MB/s) dpkg-name: info: moved 'zlib1g-dev_1%3a1.3.dfsg+really1.3.1-1+b1_amd64.deb' to '/srv/rebuilderd/tmp/tmp4ms_9bc5/zlib1g-dev_1.3.dfsg+really1.3.1-1+b1_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 (7506 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpue_lmjb4/libgssapi-krb5-2_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 (1133 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpzy1dtimd/libsasl2-modules-db_2.1.28+dfsg1-9_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 sed amd64 4.9-2 [329 kB] Fetched 329 kB in 0s (24.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpmqi8c0ak/sed_4.9-2_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 (6436 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmplnt0ajl2/python3-typing-extensions_4.12.2-2_all.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 (6753 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpn0xcfirg/libsystemd0_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 (6112 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpzj501pf1/libuchardet0_0.0.8-1+b2_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 (21.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpmmnhhuv4/libunistring5_1.3-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 (41.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp7kg5epe7/groff-base_1.23.0-7_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 (8389 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp7z5bam0r/libstdc++-14-dev_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 (21.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpd6vv75b7/libc6_2.41-4_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 (19.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpk684xtji/libhogweed6t64_3.10.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 (37.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpgp6g0o0v/libtsan2_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 (2073 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpuovied_8/libcom-err2_1.47.2-1_amd64.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 (2309 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpvwvvf88_/libffi8_3.4.7-1_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 (3883 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0f8y8i0v/python3-yaml_6.0.2-1+b2_amd64.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 (3122 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpkhvyghr7/init-system-helpers_1.68_all.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 (1564 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpgcangdil/gcc-14-base_14.2.0-17_amd64.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 (2776 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp9l1jja4f/pkg-kde-tools_0.18.12_all.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 (6847 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpb4ha7ke8/libexpat1_2.6.4-1_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 (12.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpql1_fopf/libmount1_2.40.4-5_amd64.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 (98.9 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp38_oosb4/perl-modules-5.40_5.40.1-2_all.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 (3640 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpj_p9y61h/libmpc3_1.3.1-1+b3_amd64.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 (2600 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjqwsrhdz/media-types_13.0.0_all.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 (12.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpl521plpt/libhwasan0_14.2.0-17_amd64.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 (25.9 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpvr_78zgc/cmake-data_3.31.6-1_all.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 (1127 kB/s) dpkg-name: info: moved 'libaudit-common_1%3a4.0.2-2_all.deb' to '/srv/rebuilderd/tmp/tmpjic_sueu/libaudit-common_4.0.2-2_all.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 (4105 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpeib8a61n/libidn2-0_2.3.8-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 (22.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpgn6ux63t/libnettle8t64_3.10.1-1_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 (9309 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpw3qxby95/libreadline8t64_8.2-6_amd64.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 (2111 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0uo3l5aq/pkgconf_1.8.1-4_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 (4237 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp7umi7td2/python3-charset-normalizer_3.4.1-1+b1_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 (17.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp5543mua6/python3-pkg-resources_75.8.0-1_all.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 (4198 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpisx8rs6v/libfmt-dev_10.1.1+ds1-4_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 (1971 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpc7zcbyur/libjs-sphinxdoc_8.1.3-5_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 (7422 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmphgq86zrq/libk5crypto3_1.21.3-4_amd64.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 (34.9 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjnn5s0g5/libpython3.13-stdlib_3.13.2-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 (4604 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp93j0rn6o/libquadmath0_14.2.0-17_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 (46.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpi8bbcz5o/libdpkg-perl_1.22.18_all.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 (722 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpicdfcuex/python3-jaraco.context_6.0.1-1_all.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 (1034 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp8y11ytyy/python3-jaraco.text_4.0.0-1_all.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 (13.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpz7o2eb2v/python3.13-dev_3.13.2-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 (11.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpkikhcmj2/libc-bin_2.41-4_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 (11.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp9vlr_4f9/libstdc++6_14.2.0-17_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libcap-ng0 amd64 0.8.5-4+b1 [17.6 kB] Fetched 17.6 kB in 0s (1161 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpymzjw_xf/libcap-ng0_0.8.5-4+b1_amd64.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 (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3njs2zw5/libpython3-stdlib_3.13.2-2_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 (14.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpbb48ee0e/libblkid1_2.40.4-5_amd64.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 (74.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp9ajx77mj/perl-base_5.40.1-2_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 0s (26.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpppkrfbad/cpp-14-x86-64-linux-gnu_14.2.0-17_amd64.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 (8430 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpigdrp_1b/libgtest-dev_1.16.0-1_amd64.deb' Downloading dependency 1 of 231: automake:amd64=1:1.17-3 Downloading dependency 2 of 231: libpkgconf3:amd64=1.8.1-4 Downloading dependency 3 of 231: ncurses-base:amd64=6.5+20250216-2 Downloading dependency 4 of 231: python3-jaraco.functools:amd64=4.1.0-1 Downloading dependency 5 of 231: dh-python:amd64=6.20250308 Downloading dependency 6 of 231: dh-strip-nondeterminism:amd64=1.14.1-2 Downloading dependency 7 of 231: libcurl4t64:amd64=8.12.1-3 Downloading dependency 8 of 231: libgprofng0:amd64=2.44-3 Downloading dependency 9 of 231: libjs-underscore:amd64=1.13.4~dfsg+~1.11.4-3 Downloading dependency 10 of 231: libjsoncpp26:amd64=1.9.6-3 Downloading dependency 11 of 231: pkgconf-bin:amd64=1.8.1-4 Downloading dependency 12 of 231: libpipeline1:amd64=1.5.8-1 Downloading dependency 13 of 231: libre2-dev:amd64=20240702-3+b1 Downloading dependency 14 of 231: libgdbm6t64:amd64=1.24-2 Downloading dependency 15 of 231: sysvinit-utils:amd64=3.14-3 Downloading dependency 16 of 231: dwz:amd64=0.15-1+b1 Downloading dependency 17 of 231: g++-x86-64-linux-gnu:amd64=4:14.2.0-1 Downloading dependency 18 of 231: libexpat1-dev:amd64=2.6.4-1 Downloading dependency 19 of 231: librhash1:amd64=1.4.5-1 Downloading dependency 20 of 231: autopoint:amd64=0.23.1-1 Downloading dependency 21 of 231: procps:amd64=2:4.0.4-7 Downloading dependency 22 of 231: dh-autoreconf:amd64=20 Downloading dependency 23 of 231: python3-more-itertools:amd64=10.6.0-1 Downloading dependency 24 of 231: libcap2:amd64=1:2.75-1 Downloading dependency 25 of 231: libuv1t64:amd64=1.50.0-2 Downloading dependency 26 of 231: gettext:amd64=0.23.1-1 Downloading dependency 27 of 231: libatomic1:amd64=14.2.0-17 Downloading dependency 28 of 231: libcc1-0:amd64=14.2.0-17 Downloading dependency 29 of 231: linux-libc-dev:amd64=6.12.17-1 Downloading dependency 30 of 231: g++-14-x86-64-linux-gnu:amd64=14.2.0-17 Downloading dependency 31 of 231: libarchive13t64:amd64=3.7.4-1.1 Downloading dependency 32 of 231: netbase:amd64=6.4 Downloading dependency 33 of 231: python3-debian:amd64=1.0.0 Downloading dependency 34 of 231: sensible-utils:amd64=0.0.24 Downloading dependency 35 of 231: pybind11-dev:amd64=2.13.6-2 Downloading dependency 36 of 231: openssl-provider-legacy:amd64=3.4.1-1 Downloading dependency 37 of 231: tar:amd64=1.35+dfsg-3.1 Downloading dependency 38 of 231: debconf:amd64=1.5.90 Downloading dependency 39 of 231: libselinux1:amd64=3.8-4 Downloading dependency 40 of 231: gzip:amd64=1.13-1 Downloading dependency 41 of 231: libseccomp2:amd64=2.5.5-2+b1 Downloading dependency 42 of 231: autotools-dev:amd64=20220109.1 Downloading dependency 43 of 231: libuuid1:amd64=2.40.4-5 Downloading dependency 44 of 231: libperl5.40:amd64=5.40.1-2 Downloading dependency 45 of 231: libpython3.13:amd64=3.13.2-1 Downloading dependency 46 of 231: gcc:amd64=4:14.2.0-1 Downloading dependency 47 of 231: python3-setuptools:amd64=75.8.0-1 Downloading dependency 48 of 231: file:amd64=1:5.45-3+b1 Downloading dependency 49 of 231: libp11-kit0:amd64=0.25.5-3 Downloading dependency 50 of 231: bsdextrautils:amd64=2.40.4-5 Downloading dependency 51 of 231: hostname:amd64=3.25 Downloading dependency 52 of 231: libpam-modules:amd64=1.7.0-3 Downloading dependency 53 of 231: binutils:amd64=2.44-3 Downloading dependency 54 of 231: libisl23:amd64=0.27-1 Downloading dependency 55 of 231: autoconf:amd64=2.72-3 Downloading dependency 56 of 231: libctf-nobfd0:amd64=2.44-3 Downloading dependency 57 of 231: libc-dev-bin:amd64=2.41-4 Downloading dependency 58 of 231: libubsan1:amd64=14.2.0-17 Downloading dependency 59 of 231: binutils-common:amd64=2.44-3 Downloading dependency 60 of 231: libssl3t64:amd64=3.4.1-1 Downloading dependency 61 of 231: binutils-x86-64-linux-gnu:amd64=2.44-3 Downloading dependency 62 of 231: coreutils:amd64=9.5-1+b1 Downloading dependency 63 of 231: build-essential:amd64=12.12 Downloading dependency 64 of 231: dpkg-dev:amd64=1.22.18 Downloading dependency 65 of 231: g++:amd64=4:14.2.0-1 Downloading dependency 66 of 231: gettext-base:amd64=0.23.1-1 Downloading dependency 67 of 231: libattr1:amd64=1:2.5.2-3 Downloading dependency 68 of 231: rpcsvc-proto:amd64=1.4.3-1 Downloading dependency 69 of 231: libpam-modules-bin:amd64=1.7.0-3 Downloading dependency 70 of 231: findutils:amd64=4.10.0-3 Downloading dependency 71 of 231: libmagic-mgc:amd64=1:5.45-3+b1 Downloading dependency 72 of 231: libgmp10:amd64=2:6.3.0+dfsg-3 Downloading dependency 73 of 231: libmagic1t64:amd64=1:5.45-3+b1 Downloading dependency 74 of 231: base-passwd:amd64=3.6.6 Downloading dependency 75 of 231: libdebhelper-perl:amd64=13.24.1 Downloading dependency 76 of 231: nlohmann-json3-dev:amd64=3.11.3-2 Downloading dependency 77 of 231: libpsl5t64:amd64=0.21.2-1.1+b1 Downloading dependency 78 of 231: bzip2:amd64=1.0.8-6 Downloading dependency 79 of 231: libbinutils:amd64=2.44-3 Downloading dependency 80 of 231: diffutils:amd64=1:3.10-2 Downloading dependency 81 of 231: libgomp1:amd64=14.2.0-17 Downloading dependency 82 of 231: zlib1g-dev:amd64=1:1.3.dfsg+really1.3.1-1+b1 Downloading dependency 83 of 231: libgssapi-krb5-2:amd64=1.21.3-4 Downloading dependency 84 of 231: libsasl2-modules-db:amd64=2.1.28+dfsg1-9 Downloading dependency 85 of 231: sed:amd64=4.9-2 Downloading dependency 86 of 231: python3-typing-extensions:amd64=4.12.2-2 Downloading dependency 87 of 231: libsystemd0:amd64=257.4-1 Downloading dependency 88 of 231: libuchardet0:amd64=0.0.8-1+b2 Downloading dependency 89 of 231: libunistring5:amd64=1.3-1 Downloading dependency 90 of 231: groff-base:amd64=1.23.0-7 Downloading dependency 91 of 231: libstdc++-14-dev:amd64=14.2.0-17 Downloading dependency 92 of 231: libc6:amd64=2.41-4 Downloading dependency 93 of 231: libhogweed6t64:amd64=3.10.1-1 Downloading dependency 94 of 231: libtsan2:amd64=14.2.0-17 Downloading dependency 95 of 231: libcom-err2:amd64=1.47.2-1 Downloading dependency 96 of 231: libffi8:amd64=3.4.7-1 Downloading dependency 97 of 231: python3-yaml:amd64=6.0.2-1+b2 Downloading dependency 98 of 231: init-system-helpers:amd64=1.68 Downloading dependency 99 of 231: gcc-14-base:amd64=14.2.0-17 Downloading dependency 100 of 231: pkg-kde-tools:amd64=0.18.12 Downloading dependency 101 of 231: libexpat1:amd64=2.6.4-1 Downloading dependency 102 of 231: libmount1:amd64=2.40.4-5 Downloading dependency 103 of 231: perl-modules-5.40:amd64=5.40.1-2 Downloading dependency 104 of 231: libmpc3:amd64=1.3.1-1+b3 Downloading dependency 105 of 231: media-types:amd64=13.0.0 Downloading dependency 106 of 231: libhwasan0:amd64=14.2.0-17 Downloading dependency 107 of 231: cmake-data:amd64=3.31.6-1 Downloading dependency 108 of 231: libaudit-common:amd64=1:4.0.2-2 Downloading dependency 109 of 231: libidn2-0:amd64=2.3.8-1 Downloading dependency 110 of 231: libnettle8t64:amd64=3.10.1-1 Downloading dependency 111 of 231: libreadline8t64:amd64=8.2-6 Downloading dependency 112 of 231: pkgconf:amd64=1.8.1-4 Downloading dependency 113 of 231: python3-charset-normalizer:amd64=3.4.1-1+b1 Downloading dependency 114 of 231: python3-pkg-resources:amd64=75.8.0-1 Downloading dependency 115 of 231: libfmt-dev:amd64=10.1.1+ds1-4 Downloading dependency 116 of 231: libjs-sphinxdoc:amd64=8.1.3-5 Downloading dependency 117 of 231: libk5crypto3:amd64=1.21.3-4 Downloading dependency 118 of 231: libpython3.13-stdlib:amd64=3.13.2-1 Downloading dependency 119 of 231: libquadmath0:amd64=14.2.0-17 Downloading dependency 120 of 231: libdpkg-perl:amd64=1.22.18 Downloading dependency 121 of 231: python3-jaraco.context:amd64=6.0.1-1 Downloading dependency 122 of 231: python3-jaraco.text:amd64=4.0.0-1 Downloading dependency 123 of 231: python3.13-dev:amd64=3.13.2-1 Downloading dependency 124 of 231: libc-bin:amd64=2.41-4 Downloading dependency 125 of 231: libstdc++6:amd64=14.2.0-17 Downloading dependency 126 of 231: libcap-ng0:amd64=0.8.5-4+b1 Downloading dependency 127 of 231: libpython3-stdlib:amd64=3.13.2-2 Downloading dependency 128 of 231: libblkid1:amd64=2.40.4-5 Downloading dependency 129 of 231: perl-base:amd64=5.40.1-2 Downloading dependency 130 of 231: cpp-14-x86-64-linux-gnu:amd64=14.2.0-17 Downloading dependency 131 of 231: libgtest-dev:amd64=1.16.0-1 Downloading dependency 132 of 231: libnghttp3-9:amd64=1.8.0-1Get: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 (6265 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpvtexm0yf/libnghttp3-9_1.8.0-1_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 (4496 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp5wuneb9k/libtasn1-6_4.20.0-2_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 (1282 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp67ij1dtg/libfile-stripnondeterminism-perl_1.14.1-2_all.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 (4939 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp4n00ie4f/librtmp1_2.4+20151223.gitfa8646d.1-2+b5_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 (24.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp4rvoz3jm/make_4.4.1-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 (5357 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpdo1xai3j/libpam0g_1.7.0-3_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 po-debconf all 1.0.21+nmu1 [248 kB] Fetched 248 kB in 0s (19.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpmwkn0dkl/po-debconf_1.0.21+nmu1_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 (7477 kB/s) dpkg-name: info: moved 'libcrypt1_1%3a4.4.38-1_amd64.deb' to '/srv/rebuilderd/tmp/tmptiec_pwl/libcrypt1_4.4.38-1_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 (7021 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp1xbe9el5/libsframe1_2.44-3_amd64.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 (39.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpljneki4e/libsqlite3-0_3.46.1-2_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 0s (57.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpan8_31jz/gcc-14-x86-64-linux-gnu_14.2.0-17_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libtinfo6 amd64 6.5+20250216-2 [348 kB] Fetched 348 kB in 0s (19.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpkbmp9ijf/libtinfo6_6.5+20250216-2_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 (47.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp01kfn6cc/man-db_2.13.0-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 python3-autocommand all 2.2.2-3 [13.6 kB] Fetched 13.6 kB in 0s (1192 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpvl1y15_i/python3-autocommand_2.2.2-3_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 (14.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp_i2z9h0n/libssh2-1t64_1.11.1-1_amd64.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 (62.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp4aytprj9/dpkg_1.22.18_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 (2088 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp9t827qth/libre2-11_20240702-3+b1_amd64.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 (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp5v7b0wbt/python3-zipp_3.21.0-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 (57.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0ssrp67c/debhelper_13.24.1_all.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 (4712 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpupprwjz5/readline-common_8.2-6_all.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 (2652 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3ef0fv0j/python3-typeguard_4.4.2-1_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 (22.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpdzmqre5l/python3.13_3.13.2-1_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 (1549 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpk4w__4j1/intltool-debian_0.35.0+20060710.6_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 (38.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp4irjin2l/libgcc-14-dev_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 (4327 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpvme88bmt/libgdbm-compat4t64_1.24-2_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 (5955 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpftckl0_x/liblz4-1_1.10.0-4_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 (3701 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp9co0fogt/libudev1_257.4-1_amd64.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 (32.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpg7yhmv0d/libtool_2.5.4-4_all.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 (8897 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6dp9v2dy/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 libkrb5support0 amd64 1.21.3-4 [32.8 kB] Fetched 32.8 kB in 0s (3133 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp87jjhwr5/libkrb5support0_1.21.3-4_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 (35.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpnhkvmdrk/libasan8_14.2.0-17_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 (13.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpkfjn7hyl/libelf1t64_0.192-4_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 (0 B/s) dpkg-name: info: moved 'gcc-x86-64-linux-gnu_4%3a14.2.0-1_amd64.deb' to '/srv/rebuilderd/tmp/tmpedtuwesb/gcc-x86-64-linux-gnu_14.2.0-1_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 (2603 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpbmxajhkc/libbz2-1.0_1.0.8-6_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 (14.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp1dg2dhbw/libpam-runtime_1.7.0-3_all.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 (691 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpuhev3kyz/libpython3-dev_3.13.2-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 (8089 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpfg5phto6/python3.13-minimal_3.13.2-1_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 (17.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp1lva439j/libkrb5-3_1.21.3-4_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 (6973 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpo5br339i/gcc-14_14.2.0-17_amd64.deb' 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 (645 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpz4hzic9u/libdebconfclient0_0.277_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 (30.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpihh05i9e/libc6-dev_2.41-4_amd64.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 0s (40.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmprs_ylqji/libpython3.13-dev_3.13.2-1_amd64.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 (1877 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpziuunjb5/libxxhash0_0.8.3-2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 zlib1g amd64 1:1.3.dfsg+really1.3.1-1+b1 [88.9 kB] Fetched 88.9 kB in 0s (5179 kB/s) dpkg-name: info: moved 'zlib1g_1%3a1.3.dfsg+really1.3.1-1+b1_amd64.deb' to '/srv/rebuilderd/tmp/tmpxqfep7an/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 (6771 kB/s) dpkg-name: info: moved 'libcrypt-dev_1%3a4.4.38-1_amd64.deb' to '/srv/rebuilderd/tmp/tmpi0cfk2dp/libcrypt-dev_4.4.38-1_amd64.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 (643 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpqv5h0a9k/g++-14_14.2.0-17_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 (4771 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp5pi669op/libabsl20240722_20240722.0-1.5_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 (2765 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpnn6h7jk8/libacl1_2.3.2-2+b1_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 (167 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3fk90p61/libpog-dev_0.5.3-3_all.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 (6771 kB/s) dpkg-name: info: moved 'bsdutils_1%3a2.40.4-5_amd64.deb' to '/srv/rebuilderd/tmp/tmpoh02ni0c/bsdutils_2.40.4-5_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 (122 kB/s) dpkg-name: info: moved 'cpp_4%3a14.2.0-1_amd64.deb' to '/srv/rebuilderd/tmp/tmpivzfwuwn/cpp_14.2.0-1_amd64.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 (4912 kB/s) dpkg-name: info: moved 'libaudit1_1%3a4.0.2-2+b2_amd64.deb' to '/srv/rebuilderd/tmp/tmp7uskvc1b/libaudit1_4.0.2-2+b2_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 (8493 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpcwt07d79/libsmartcols1_2.40.4-5_amd64.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 (35.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmplh8cdiw8/xz-utils_5.6.4-1_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 (1940 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpmxdvtkwm/python3-dev_3.13.2-2_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 (44.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpk1eqji_9/util-linux_2.40.4-5_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 (13.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjrx7l1z_/bash_5.2.37-1.1_amd64.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 (7129 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp97hh_tzt/dash_0.5.12-12_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 (14.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpwhopxa_t/liblzma5_5.6.4-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 (21.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjsvrdyma/libzstd1_1.5.6+dfsg-2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 mawk amd64 1.3.4.20250131-1 [141 kB] Fetched 141 kB in 0s (8997 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp7sfzr7to/mawk_1.3.4.20250131-1_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 ncurses-bin amd64 6.5+20250216-2 [438 kB] Fetched 438 kB in 0s (29.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0vc1rsd0/ncurses-bin_6.5+20250216-2_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 (593 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpkw0fjtcb/libkeyutils1_1.6.3-4_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 (130 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpob7u_85n/libicu72_72.1-6_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 (531 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpay7xkgsk/libitm1_14.2.0-17_amd64.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 (23.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmphc1zdx2m/libpcre2-8-0_10.45-1_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 0s (30.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmprcnbsqh7/cmake_3.31.6-1_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 (4658 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpsffx42tt/libnghttp2-14_1.64.0-1_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 (2553 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpizlqa4w0/python3_3.13.2-2_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 (13.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpl0_x41cu/liblsan0_14.2.0-17_amd64.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 9s (133 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpab1as9do/libabsl-dev_20240722.0-1.5_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libjansson4 amd64 2.14-2+b3 [39.8 kB] Fetched 39.8 kB in 0s (1893 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0_2gljj8/libjansson4_2.14-2+b3_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 (6658 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpp80pfkn7/libarchive-zip-perl_1.68-1_all.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 (33.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpy55g2172/libpython3.13-minimal_3.13.2-1_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 (1883 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpciyp13jq/libgcc-s1_14.2.0-17_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 (2378 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp7k1cn6ky/python3-minimal_3.13.2-2_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 (11.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpyzzzt833/tzdata_2025a-2_all.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libbrotli1 amd64 1.1.0-2+b7 [307 kB] Fetched 307 kB in 0s (16.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp9cg8ukbh/libbrotli1_1.1.0-2+b7_amd64.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 (22.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpkkwzs6oh/grep_3.11-4_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 (436 kB/s) dpkg-name: info: moved 'cpp-x86-64-linux-gnu_4%3a14.2.0-1_amd64.deb' to '/srv/rebuilderd/tmp/tmp26znriko/cpp-x86-64-linux-gnu_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 (8270 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpzrbofpae/debianutils_5.21_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 (67.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpulwrbpzs/libgnutls30t64_3.8.9-2_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libyaml-0-2 amd64 0.2.5-2 [52.5 kB] Fetched 52.5 kB in 0s (4127 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpegaaafne/libyaml-0-2_0.2.5-2_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 (46.4 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp45z23cex/cpp-14_14.2.0-17_amd64.deb' Get:1 http://deb.debian.org/debian unstable/main amd64 libncursesw6 amd64 6.5+20250216-2 [135 kB] Fetched 135 kB in 0s (7051 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmph11v2mmp/libncursesw6_6.5+20250216-2_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 (30.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpdlfs_n6x/libmpfr6_4.2.1-1+b2_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 (2735 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp4qvxxlpa/googletest_1.16.0-1_all.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 (2329 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmphr1_99q4/libmd0_1.1.0-2+b1_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 (15.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpv6xrz60b/perl_5.40.1-2_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 (16.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpj7ezkhpq/libjs-jquery_3.6.1+dfsg+~3.5.14-1_all.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 (3643 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpbki5_8wa/libfmt10_10.1.1+ds1-4_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 (10.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpuf54mpss/patch_2.7.6-7_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 (2980 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpm58sg1ab/python3-inflect_7.3.1-2_all.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 (8191 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp7p1ekx0k/libctf0_2.44-3_amd64.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 (4959 kB/s) dpkg-name: info: moved 'libproc2-0_2%3a4.0.4-7_amd64.deb' to '/srv/rebuilderd/tmp/tmp9cjnz2tp/libproc2-0_4.0.4-7_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 (15.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmphizqxdah/m4_1.4.19-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 (4684 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpes8r10na/base-files_13.7_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 (5000 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpd12bp9he/libsasl2-2_2.1.28+dfsg1-9_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 (44.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpoq0gtuhu/libdb5.3t64_5.3.28+dfsg2-9_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 (15.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3ipzq6sn/libldap2_2.6.9+dfsg-1_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/tmp84w_32j7/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.hFgYtykxBF as tempdir I: running --setup-hook directly: /usr/share/mmdebstrap/hooks/maybe-merged-usr/setup00.sh /srv/rebuilderd/tmp/mmdebstrap.hFgYtykxBF 127.0.0.1 - - [17/Nov/2025 02:43:57] code 404, message File not found 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./InRelease HTTP/1.1" 404 - Ign:1 http://localhost:46441 ./ InRelease 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./Release HTTP/1.1" 200 - Get:2 http://localhost:46441 ./ Release [462 B] 127.0.0.1 - - [17/Nov/2025 02:43:57] code 404, message File not found 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./Release.gpg HTTP/1.1" 404 - Ign:3 http://localhost:46441 ./ Release.gpg 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./Packages HTTP/1.1" 200 - Get:4 http://localhost:46441 ./ Packages [284 kB] Fetched 284 kB in 0s (10.8 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 - - [17/Nov/2025 02:43:57] "GET /./gcc-14-base_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libc6_2.41-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libgcc-s1_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./mawk_1.3.4.20250131-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./base-files_13.7_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libtinfo6_6.5%2b20250216-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./debianutils_5.21_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./bash_5.2.37-1.1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libcap2_2.75-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libsystemd0_257.4-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./bsdutils_2.40.4-5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libacl1_2.3.2-2%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libattr1_2.5.2-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libgmp10_6.3.0%2bdfsg-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libpcre2-8-0_10.45-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libselinux1_3.8-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libzstd1_1.5.6%2bdfsg-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./zlib1g_1.3.dfsg%2breally1.3.1-1%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libssl3t64_3.4.1-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./openssl-provider-legacy_3.4.1-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./coreutils_9.5-1%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./dash_0.5.12-12_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./diffutils_3.10-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libbz2-1.0_1.0.8-6_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./liblzma5_5.6.4-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libmd0_1.1.0-2%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./tar_1.35%2bdfsg-3.1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./dpkg_1.22.18_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./findutils_4.10.0-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./grep_3.11-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./gzip_1.13-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./hostname_3.25_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./ncurses-bin_6.5%2b20250216-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libcrypt1_4.4.38-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./perl-base_5.40.1-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./sed_4.9-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libaudit-common_4.0.2-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libcap-ng0_0.8.5-4%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libaudit1_4.0.2-2%2bb2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libdb5.3t64_5.3.28%2bdfsg2-9_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./debconf_1.5.90_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libpam0g_1.7.0-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libpam-modules-bin_1.7.0-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libpam-modules_1.7.0-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libpam-runtime_1.7.0-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libblkid1_2.40.4-5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libmount1_2.40.4-5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libsmartcols1_2.40.4-5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libudev1_257.4-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libuuid1_2.40.4-5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./util-linux_2.40.4-5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libdebconfclient0_0.277_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./base-passwd_3.6.6_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./init-system-helpers_1.68_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./libc-bin_2.41-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "GET /./ncurses-base_6.5%2b20250216-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:43:57] "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.hFgYtykxBF 127.0.0.1 - - [17/Nov/2025 02:43:59] code 404, message File not found 127.0.0.1 - - [17/Nov/2025 02:43:59] "GET /./InRelease HTTP/1.1" 404 - Ign:1 http://localhost:46441 ./ InRelease 127.0.0.1 - - [17/Nov/2025 02:43:59] "GET /./Release HTTP/1.1" 304 - Hit:2 http://localhost:46441 ./ Release 127.0.0.1 - - [17/Nov/2025 02:43:59] code 404, message File not found 127.0.0.1 - - [17/Nov/2025 02:43:59] "GET /./Release.gpg HTTP/1.1" 404 - Ign:3 http://localhost:46441 ./ 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.hFgYtykxBF 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 - - [17/Nov/2025 02:44:16] "GET /./libpython3.13-minimal_3.13.2-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libexpat1_2.6.4-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./python3.13-minimal_3.13.2-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./python3-minimal_3.13.2-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./media-types_13.0.0_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./netbase_6.4_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./tzdata_2025a-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libffi8_3.4.7-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libncursesw6_6.5%2b20250216-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./readline-common_8.2-6_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libreadline8t64_8.2-6_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libsqlite3-0_3.46.1-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libpython3.13-stdlib_3.13.2-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./python3.13_3.13.2-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libpython3-stdlib_3.13.2-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./python3_3.13.2-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./sensible-utils_0.0.24_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libstdc%2b%2b6_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libuchardet0_0.0.8-1%2bb2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./groff-base_1.23.0-7_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./bsdextrautils_2.40.4-5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libgdbm6t64_1.24-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libpipeline1_1.5.8-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libseccomp2_2.5.5-2%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./man-db_2.13.0-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libproc2-0_4.0.4-7_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./procps_4.0.4-7_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./bzip2_1.0.8-6_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libmagic-mgc_5.45-3%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libmagic1t64_5.45-3%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./file_5.45-3%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./gettext-base_0.23.1-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./perl-modules-5.40_5.40.1-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libgdbm-compat4t64_1.24-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libperl5.40_5.40.1-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./perl_5.40.1-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./xz-utils_5.6.4-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./m4_1.4.19-7_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./autoconf_2.72-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./autotools-dev_20220109.1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./automake_1.17-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./autopoint_0.23.1-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libsframe1_2.44-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./binutils-common_2.44-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libbinutils_2.44-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libgprofng0_2.44-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libctf-nobfd0_2.44-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libctf0_2.44-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libjansson4_2.14-2%2bb3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./binutils-x86-64-linux-gnu_2.44-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./binutils_2.44-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libc-dev-bin_2.41-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./linux-libc-dev_6.12.17-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libcrypt-dev_4.4.38-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./rpcsvc-proto_1.4.3-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libc6-dev_2.41-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libisl23_0.27-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libmpfr6_4.2.1-1%2bb2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libmpc3_1.3.1-1%2bb3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./cpp-14-x86-64-linux-gnu_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./cpp-14_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./cpp-x86-64-linux-gnu_14.2.0-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./cpp_14.2.0-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libcc1-0_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libgomp1_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libitm1_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libatomic1_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:16] "GET /./libasan8_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./liblsan0_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libtsan2_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libubsan1_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libhwasan0_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libquadmath0_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libgcc-14-dev_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./gcc-14-x86-64-linux-gnu_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./gcc-14_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./gcc-x86-64-linux-gnu_14.2.0-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./gcc_14.2.0-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libstdc%2b%2b-14-dev_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./g%2b%2b-14-x86-64-linux-gnu_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./g%2b%2b-14_14.2.0-17_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./g%2b%2b-x86-64-linux-gnu_14.2.0-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./g%2b%2b_14.2.0-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./make_4.4.1-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libdpkg-perl_1.22.18_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./patch_2.7.6-7_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./dpkg-dev_1.22.18_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./build-essential_12.12_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./cmake-data_3.31.6-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libxxhash0_0.8.3-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./liblz4-1_1.10.0-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libnettle8t64_3.10.1-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libicu72_72.1-6_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libxml2_2.12.7%2bdfsg%2breally2.9.14-0.2%2bb2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libarchive13t64_3.7.4-1.1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libbrotli1_1.1.0-2%2bb7_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libkrb5support0_1.21.3-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libcom-err2_1.47.2-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libk5crypto3_1.21.3-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libkeyutils1_1.6.3-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libkrb5-3_1.21.3-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libgssapi-krb5-2_1.21.3-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libunistring5_1.3-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libidn2-0_2.3.8-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libsasl2-modules-db_2.1.28%2bdfsg1-9_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libsasl2-2_2.1.28%2bdfsg1-9_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libldap2_2.6.9%2bdfsg-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libnghttp2-14_1.64.0-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libnghttp3-9_1.8.0-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libpsl5t64_0.21.2-1.1%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libhogweed6t64_3.10.1-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libp11-kit0_0.25.5-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libtasn1-6_4.20.0-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libgnutls30t64_3.8.9-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./librtmp1_2.4%2b20151223.gitfa8646d.1-2%2bb5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libssh2-1t64_1.11.1-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libcurl4t64_8.12.1-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libjsoncpp26_1.9.6-3_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./librhash1_1.4.5-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./libuv1t64_1.50.0-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:17] "GET /./cmake_3.31.6-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libdebhelper-perl_13.24.1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libtool_2.5.4-4_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./dh-autoreconf_20_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libarchive-zip-perl_1.68-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libfile-stripnondeterminism-perl_1.14.1-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./dh-strip-nondeterminism_1.14.1-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libelf1t64_0.192-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./dwz_0.15-1%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./gettext_0.23.1-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./intltool-debian_0.35.0%2b20060710.6_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./po-debconf_1.0.21%2bnmu1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./debhelper_13.24.1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libpkgconf3_1.8.1-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./python3-more-itertools_10.6.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./python3-jaraco.functools_4.1.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./dh-python_6.20250308_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libjs-underscore_1.13.4%7edfsg%2b%7e1.11.4-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./pkgconf-bin_1.8.1-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libabsl20240722_20240722.0-1.5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libabsl-dev_20240722.0-1.5_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libre2-11_20240702-3%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libre2-dev_20240702-3%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libexpat1-dev_2.6.4-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./python3-charset-normalizer_3.4.1-1%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./python3-debian_1.0.0_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libpython3.13_3.13.2-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./zlib1g-dev_1.3.dfsg%2breally1.3.1-1%2bb1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libpython3.13-dev_3.13.2-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libpython3-dev_3.13.2-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./pybind11-dev_2.13.6-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./python3-autocommand_2.2.2-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./python3-typing-extensions_4.12.2-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./python3-typeguard_4.4.2-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./python3-inflect_7.3.1-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./python3-jaraco.context_6.0.1-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./python3-pkg-resources_75.8.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./python3-jaraco.text_4.0.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./python3-zipp_3.21.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./python3-setuptools_75.8.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./nlohmann-json3-dev_3.11.3-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libyaml-0-2_0.2.5-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./python3-yaml_6.0.2-1%2bb2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./pkg-kde-tools_0.18.12_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./pkgconf_1.8.1-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libfmt10_10.1.1%2bds1-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libfmt-dev_10.1.1%2bds1-4_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libjs-jquery_3.6.1%2bdfsg%2b%7e3.5.14-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libjs-sphinxdoc_8.1.3-5_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./python3.13-dev_3.13.2-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./googletest_1.16.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libgtest-dev_1.16.0-1_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./libpog-dev_0.5.3-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./python3-dev_3.13.2-2_amd64.deb HTTP/1.1" 200 - 127.0.0.1 - - [17/Nov/2025 02:44:18] "GET /./debootsnap-dummy_1.0_all.deb HTTP/1.1" 200 - I: running --customize-hook directly: /srv/rebuilderd/tmp/tmp84w_32j7/apt_install.sh /srv/rebuilderd/tmp/mmdebstrap.hFgYtykxBF Reading package lists... Building dependency tree... Reading state information... automake is already the newest version (1:1.17-3). automake set to manually installed. libpkgconf3 is already the newest version (1.8.1-4). libpkgconf3 set to manually installed. ncurses-base is already the newest version (6.5+20250216-2). python3-jaraco.functools is already the newest version (4.1.0-1). python3-jaraco.functools set to manually installed. dh-python is already the newest version (6.20250308). dh-python set to manually installed. dh-strip-nondeterminism is already the newest version (1.14.1-2). dh-strip-nondeterminism set to manually installed. libcurl4t64 is already the newest version (8.12.1-3). libcurl4t64 set to manually installed. libgprofng0 is already the newest version (2.44-3). libgprofng0 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. libjsoncpp26 is already the newest version (1.9.6-3). libjsoncpp26 set to manually installed. pkgconf-bin is already the newest version (1.8.1-4). pkgconf-bin set to manually installed. libpipeline1 is already the newest version (1.5.8-1). libpipeline1 set to manually installed. libre2-dev is already the newest version (20240702-3+b1). libre2-dev set to manually installed. libgdbm6t64 is already the newest version (1.24-2). libgdbm6t64 set to manually installed. sysvinit-utils is already the newest version (3.14-3). dwz is already the newest version (0.15-1+b1). dwz set to manually installed. g++-x86-64-linux-gnu is already the newest version (4:14.2.0-1). g++-x86-64-linux-gnu set to manually installed. libexpat1-dev is already the newest version (2.6.4-1). libexpat1-dev set to manually installed. librhash1 is already the newest version (1.4.5-1). librhash1 set to manually installed. autopoint is already the newest version (0.23.1-1). autopoint set to manually installed. procps is already the newest version (2:4.0.4-7). procps set to manually installed. dh-autoreconf is already the newest version (20). dh-autoreconf set to manually installed. python3-more-itertools is already the newest version (10.6.0-1). python3-more-itertools set to manually installed. libcap2 is already the newest version (1:2.75-1). libuv1t64 is already the newest version (1.50.0-2). libuv1t64 set to manually installed. gettext is already the newest version (0.23.1-1). gettext set to manually installed. libatomic1 is already the newest version (14.2.0-17). libatomic1 set to manually installed. libcc1-0 is already the newest version (14.2.0-17). libcc1-0 set to manually installed. linux-libc-dev is already the newest version (6.12.17-1). linux-libc-dev 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. libarchive13t64 is already the newest version (3.7.4-1.1). libarchive13t64 set to manually installed. netbase is already the newest version (6.4). netbase set to manually installed. python3-debian is already the newest version (1.0.0). python3-debian set to manually installed. sensible-utils is already the newest version (0.0.24). sensible-utils set to manually installed. pybind11-dev is already the newest version (2.13.6-2). pybind11-dev set to manually installed. openssl-provider-legacy is already the newest version (3.4.1-1). tar is already the newest version (1.35+dfsg-3.1). debconf is already the newest version (1.5.90). libselinux1 is already the newest version (3.8-4). gzip is already the newest version (1.13-1). libseccomp2 is already the newest version (2.5.5-2+b1). libseccomp2 set to manually installed. autotools-dev is already the newest version (20220109.1). autotools-dev set to manually installed. libuuid1 is already the newest version (2.40.4-5). libperl5.40 is already the newest version (5.40.1-2). libperl5.40 set to manually installed. libpython3.13 is already the newest version (3.13.2-1). libpython3.13 set to manually installed. gcc is already the newest version (4:14.2.0-1). gcc set to manually installed. python3-setuptools is already the newest version (75.8.0-1). python3-setuptools set to manually installed. file is already the newest version (1:5.45-3+b1). file set to manually installed. libp11-kit0 is already the newest version (0.25.5-3). libp11-kit0 set to manually installed. bsdextrautils is already the newest version (2.40.4-5). bsdextrautils set to manually installed. hostname is already the newest version (3.25). libpam-modules is already the newest version (1.7.0-3). binutils is already the newest version (2.44-3). binutils set to manually installed. libisl23 is already the newest version (0.27-1). libisl23 set to manually installed. autoconf is already the newest version (2.72-3). autoconf set to manually installed. libctf-nobfd0 is already the newest version (2.44-3). libctf-nobfd0 set to manually installed. libc-dev-bin is already the newest version (2.41-4). libc-dev-bin set to manually installed. libubsan1 is already the newest version (14.2.0-17). libubsan1 set to manually installed. binutils-common is already the newest version (2.44-3). binutils-common set to manually installed. libssl3t64 is already the newest version (3.4.1-1). binutils-x86-64-linux-gnu is already the newest version (2.44-3). binutils-x86-64-linux-gnu set to manually installed. coreutils is already the newest version (9.5-1+b1). build-essential is already the newest version (12.12). build-essential set to manually installed. dpkg-dev is already the newest version (1.22.18). dpkg-dev set to manually installed. g++ is already the newest version (4:14.2.0-1). g++ set to manually installed. gettext-base is already the newest version (0.23.1-1). gettext-base set to manually installed. libattr1 is already the newest version (1:2.5.2-3). rpcsvc-proto is already the newest version (1.4.3-1). rpcsvc-proto set to manually installed. libpam-modules-bin is already the newest version (1.7.0-3). findutils is already the newest version (4.10.0-3). libmagic-mgc is already the newest version (1:5.45-3+b1). libmagic-mgc set to manually installed. libgmp10 is already the newest version (2:6.3.0+dfsg-3). libmagic1t64 is already the newest version (1:5.45-3+b1). libmagic1t64 set to manually installed. base-passwd is already the newest version (3.6.6). libdebhelper-perl is already the newest version (13.24.1). libdebhelper-perl set to manually installed. nlohmann-json3-dev is already the newest version (3.11.3-2). nlohmann-json3-dev set to manually installed. libpsl5t64 is already the newest version (0.21.2-1.1+b1). libpsl5t64 set to manually installed. bzip2 is already the newest version (1.0.8-6). bzip2 set to manually installed. libbinutils is already the newest version (2.44-3). libbinutils set to manually installed. diffutils is already the newest version (1:3.10-2). libgomp1 is already the newest version (14.2.0-17). libgomp1 set to manually installed. zlib1g-dev is already the newest version (1:1.3.dfsg+really1.3.1-1+b1). zlib1g-dev set to manually installed. libgssapi-krb5-2 is already the newest version (1.21.3-4). libgssapi-krb5-2 set to manually installed. libsasl2-modules-db is already the newest version (2.1.28+dfsg1-9). libsasl2-modules-db set to manually installed. sed is already the newest version (4.9-2). python3-typing-extensions is already the newest version (4.12.2-2). python3-typing-extensions set to manually installed. libsystemd0 is already the newest version (257.4-1). libuchardet0 is already the newest version (0.0.8-1+b2). libuchardet0 set to manually installed. libunistring5 is already the newest version (1.3-1). libunistring5 set to manually installed. groff-base is already the newest version (1.23.0-7). groff-base set to manually installed. libstdc++-14-dev is already the newest version (14.2.0-17). libstdc++-14-dev set to manually installed. libc6 is already the newest version (2.41-4). libhogweed6t64 is already the newest version (3.10.1-1). libhogweed6t64 set to manually installed. libtsan2 is already the newest version (14.2.0-17). libtsan2 set to manually installed. libcom-err2 is already the newest version (1.47.2-1). libcom-err2 set to manually installed. libffi8 is already the newest version (3.4.7-1). libffi8 set to manually installed. python3-yaml is already the newest version (6.0.2-1+b2). python3-yaml set to manually installed. init-system-helpers is already the newest version (1.68). gcc-14-base is already the newest version (14.2.0-17). pkg-kde-tools is already the newest version (0.18.12). pkg-kde-tools set to manually installed. libexpat1 is already the newest version (2.6.4-1). libexpat1 set to manually installed. libmount1 is already the newest version (2.40.4-5). perl-modules-5.40 is already the newest version (5.40.1-2). perl-modules-5.40 set to manually installed. libmpc3 is already the newest version (1.3.1-1+b3). libmpc3 set to manually installed. media-types is already the newest version (13.0.0). media-types set to manually installed. libhwasan0 is already the newest version (14.2.0-17). libhwasan0 set to manually installed. cmake-data is already the newest version (3.31.6-1). cmake-data set to manually installed. libaudit-common is already the newest version (1:4.0.2-2). libidn2-0 is already the newest version (2.3.8-1). libidn2-0 set to manually installed. libnettle8t64 is already the newest version (3.10.1-1). libnettle8t64 set to manually installed. libreadline8t64 is already the newest version (8.2-6). libreadline8t64 set to manually installed. pkgconf is already the newest version (1.8.1-4). pkgconf set to manually installed. python3-charset-normalizer is already the newest version (3.4.1-1+b1). python3-charset-normalizer set to manually installed. python3-pkg-resources is already the newest version (75.8.0-1). python3-pkg-resources set to manually installed. libfmt-dev is already the newest version (10.1.1+ds1-4). libfmt-dev set to manually installed. libjs-sphinxdoc is already the newest version (8.1.3-5). libjs-sphinxdoc set to manually installed. libk5crypto3 is already the newest version (1.21.3-4). libk5crypto3 set to manually installed. libpython3.13-stdlib is already the newest version (3.13.2-1). libpython3.13-stdlib set to manually installed. libquadmath0 is already the newest version (14.2.0-17). libquadmath0 set to manually installed. libdpkg-perl is already the newest version (1.22.18). libdpkg-perl set to manually installed. python3-jaraco.context is already the newest version (6.0.1-1). python3-jaraco.context set to manually installed. python3-jaraco.text is already the newest version (4.0.0-1). python3-jaraco.text set to manually installed. python3.13-dev is already the newest version (3.13.2-1). python3.13-dev set to manually installed. libc-bin is already the newest version (2.41-4). libstdc++6 is already the newest version (14.2.0-17). libstdc++6 set to manually installed. libcap-ng0 is already the newest version (0.8.5-4+b1). libpython3-stdlib is already the newest version (3.13.2-2). libpython3-stdlib set to manually installed. libblkid1 is already the newest version (2.40.4-5). perl-base is already the newest version (5.40.1-2). 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. libgtest-dev is already the newest version (1.16.0-1). libgtest-dev set to manually installed. libnghttp3-9 is already the newest version (1.8.0-1). libnghttp3-9 set to manually installed. libtasn1-6 is already the newest version (4.20.0-2). libtasn1-6 set to manually installed. libfile-stripnondeterminism-perl is already the newest version (1.14.1-2). libfile-stripnondeterminism-perl set to manually installed. librtmp1 is already the newest version (2.4+20151223.gitfa8646d.1-2+b5). librtmp1 set to manually installed. make is already the newest version (4.4.1-1). make set to manually installed. libpam0g is already the newest version (1.7.0-3). po-debconf is already the newest version (1.0.21+nmu1). po-debconf set to manually installed. libcrypt1 is already the newest version (1:4.4.38-1). libsframe1 is already the newest version (2.44-3). libsframe1 set to manually installed. libsqlite3-0 is already the newest version (3.46.1-2). libsqlite3-0 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. libtinfo6 is already the newest version (6.5+20250216-2). man-db is already the newest version (2.13.0-1). man-db set to manually installed. python3-autocommand is already the newest version (2.2.2-3). python3-autocommand set to manually installed. libssh2-1t64 is already the newest version (1.11.1-1). libssh2-1t64 set to manually installed. dpkg is already the newest version (1.22.18). libre2-11 is already the newest version (20240702-3+b1). libre2-11 set to manually installed. python3-zipp is already the newest version (3.21.0-1). python3-zipp set to manually installed. debhelper is already the newest version (13.24.1). debhelper set to manually installed. readline-common is already the newest version (8.2-6). readline-common set to manually installed. python3-typeguard is already the newest version (4.4.2-1). python3-typeguard set to manually installed. python3.13 is already the newest version (3.13.2-1). python3.13 set to manually installed. intltool-debian is already the newest version (0.35.0+20060710.6). intltool-debian set to manually installed. libgcc-14-dev is already the newest version (14.2.0-17). libgcc-14-dev set to manually installed. libgdbm-compat4t64 is already the newest version (1.24-2). libgdbm-compat4t64 set to manually installed. liblz4-1 is already the newest version (1.10.0-4). liblz4-1 set to manually installed. libudev1 is already the newest version (257.4-1). libtool is already the newest version (2.5.4-4). libtool 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. libkrb5support0 is already the newest version (1.21.3-4). libkrb5support0 set to manually installed. libasan8 is already the newest version (14.2.0-17). libasan8 set to manually installed. libelf1t64 is already the newest version (0.192-4). libelf1t64 set to manually installed. gcc-x86-64-linux-gnu is already the newest version (4:14.2.0-1). gcc-x86-64-linux-gnu set to manually installed. libbz2-1.0 is already the newest version (1.0.8-6). libpam-runtime is already the newest version (1.7.0-3). libpython3-dev is already the newest version (3.13.2-2). libpython3-dev set to manually installed. python3.13-minimal is already the newest version (3.13.2-1). python3.13-minimal set to manually installed. libkrb5-3 is already the newest version (1.21.3-4). libkrb5-3 set to manually installed. gcc-14 is already the newest version (14.2.0-17). gcc-14 set to manually installed. libdebconfclient0 is already the newest version (0.277). libc6-dev is already the newest version (2.41-4). libc6-dev set to manually installed. libpython3.13-dev is already the newest version (3.13.2-1). libpython3.13-dev set to manually installed. libxxhash0 is already the newest version (0.8.3-2). libxxhash0 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. g++-14 is already the newest version (14.2.0-17). g++-14 set to manually installed. libabsl20240722 is already the newest version (20240722.0-1.5). libabsl20240722 set to manually installed. libacl1 is already the newest version (2.3.2-2+b1). libpog-dev is already the newest version (0.5.3-3). libpog-dev set to manually installed. bsdutils is already the newest version (1:2.40.4-5). cpp is already the newest version (4:14.2.0-1). cpp set to manually installed. libaudit1 is already the newest version (1:4.0.2-2+b2). libsmartcols1 is already the newest version (2.40.4-5). xz-utils is already the newest version (5.6.4-1). xz-utils set to manually installed. python3-dev is already the newest version (3.13.2-2). python3-dev set to manually installed. util-linux is already the newest version (2.40.4-5). bash is already the newest version (5.2.37-1.1). dash is already the newest version (0.5.12-12). liblzma5 is already the newest version (5.6.4-1). libzstd1 is already the newest version (1.5.6+dfsg-2). mawk is already the newest version (1.3.4.20250131-1). ncurses-bin is already the newest version (6.5+20250216-2). libkeyutils1 is already the newest version (1.6.3-4). libkeyutils1 set to manually installed. libicu72 is already the newest version (72.1-6). libicu72 set to manually installed. libitm1 is already the newest version (14.2.0-17). libitm1 set to manually installed. libpcre2-8-0 is already the newest version (10.45-1). cmake is already the newest version (3.31.6-1). cmake set to manually installed. libnghttp2-14 is already the newest version (1.64.0-1). libnghttp2-14 set to manually installed. python3 is already the newest version (3.13.2-2). python3 set to manually installed. liblsan0 is already the newest version (14.2.0-17). liblsan0 set to manually installed. libabsl-dev is already the newest version (20240722.0-1.5). libabsl-dev set to manually installed. libjansson4 is already the newest version (2.14-2+b3). libjansson4 set to manually installed. libarchive-zip-perl is already the newest version (1.68-1). libarchive-zip-perl set to manually installed. libpython3.13-minimal is already the newest version (3.13.2-1). libpython3.13-minimal set to manually installed. libgcc-s1 is already the newest version (14.2.0-17). python3-minimal is already the newest version (3.13.2-2). python3-minimal set to manually installed. tzdata is already the newest version (2025a-2). tzdata set to manually installed. libbrotli1 is already the newest version (1.1.0-2+b7). libbrotli1 set to manually installed. grep is already the newest version (3.11-4). cpp-x86-64-linux-gnu is already the newest version (4:14.2.0-1). cpp-x86-64-linux-gnu set to manually installed. debianutils is already the newest version (5.21). libgnutls30t64 is already the newest version (3.8.9-2). libgnutls30t64 set to manually installed. libyaml-0-2 is already the newest version (0.2.5-2). libyaml-0-2 set to manually installed. cpp-14 is already the newest version (14.2.0-17). cpp-14 set to manually installed. libncursesw6 is already the newest version (6.5+20250216-2). libncursesw6 set to manually installed. libmpfr6 is already the newest version (4.2.1-1+b2). libmpfr6 set to manually installed. googletest is already the newest version (1.16.0-1). googletest set to manually installed. libmd0 is already the newest version (1.1.0-2+b1). perl is already the newest version (5.40.1-2). perl 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. libfmt10 is already the newest version (10.1.1+ds1-4). libfmt10 set to manually installed. patch is already the newest version (2.7.6-7). patch set to manually installed. python3-inflect is already the newest version (7.3.1-2). python3-inflect set to manually installed. libctf0 is already the newest version (2.44-3). libctf0 set to manually installed. libproc2-0 is already the newest version (2:4.0.4-7). libproc2-0 set to manually installed. m4 is already the newest version (1.4.19-7). m4 set to manually installed. base-files is already the newest version (13.7). libsasl2-2 is already the newest version (2.1.28+dfsg1-9). libsasl2-2 set to manually installed. libdb5.3t64 is already the newest version (5.3.28+dfsg2-9). libldap2 is already the newest version (2.6.9+dfsg-1). libldap2 set to manually installed. 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.hFgYtykxBF (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.hFgYtykxBF I: running special hook: download /pkglist ./pkglist I: running --customize-hook in shell: sh -c 'rm "$1/pkglist"' exec /srv/rebuilderd/tmp/mmdebstrap.hFgYtykxBF 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.hFgYtykxBF... I: success in 85.9153 seconds Downloading dependency 133 of 231: libtasn1-6:amd64=4.20.0-2 Downloading dependency 134 of 231: libfile-stripnondeterminism-perl:amd64=1.14.1-2 Downloading dependency 135 of 231: librtmp1:amd64=2.4+20151223.gitfa8646d.1-2+b5 Downloading dependency 136 of 231: make:amd64=4.4.1-1 Downloading dependency 137 of 231: libpam0g:amd64=1.7.0-3 Downloading dependency 138 of 231: po-debconf:amd64=1.0.21+nmu1 Downloading dependency 139 of 231: libcrypt1:amd64=1:4.4.38-1 Downloading dependency 140 of 231: libsframe1:amd64=2.44-3 Downloading dependency 141 of 231: libsqlite3-0:amd64=3.46.1-2 Downloading dependency 142 of 231: gcc-14-x86-64-linux-gnu:amd64=14.2.0-17 Downloading dependency 143 of 231: libtinfo6:amd64=6.5+20250216-2 Downloading dependency 144 of 231: man-db:amd64=2.13.0-1 Downloading dependency 145 of 231: python3-autocommand:amd64=2.2.2-3 Downloading dependency 146 of 231: libssh2-1t64:amd64=1.11.1-1 Downloading dependency 147 of 231: dpkg:amd64=1.22.18 Downloading dependency 148 of 231: libre2-11:amd64=20240702-3+b1 Downloading dependency 149 of 231: python3-zipp:amd64=3.21.0-1 Downloading dependency 150 of 231: debhelper:amd64=13.24.1 Downloading dependency 151 of 231: readline-common:amd64=8.2-6 Downloading dependency 152 of 231: python3-typeguard:amd64=4.4.2-1 Downloading dependency 153 of 231: python3.13:amd64=3.13.2-1 Downloading dependency 154 of 231: intltool-debian:amd64=0.35.0+20060710.6 Downloading dependency 155 of 231: libgcc-14-dev:amd64=14.2.0-17 Downloading dependency 156 of 231: libgdbm-compat4t64:amd64=1.24-2 Downloading dependency 157 of 231: liblz4-1:amd64=1.10.0-4 Downloading dependency 158 of 231: libudev1:amd64=257.4-1 Downloading dependency 159 of 231: libtool:amd64=2.5.4-4 Downloading dependency 160 of 231: libxml2:amd64=2.12.7+dfsg+really2.9.14-0.2+b2 Downloading dependency 161 of 231: libkrb5support0:amd64=1.21.3-4 Downloading dependency 162 of 231: libasan8:amd64=14.2.0-17 Downloading dependency 163 of 231: libelf1t64:amd64=0.192-4 Downloading dependency 164 of 231: gcc-x86-64-linux-gnu:amd64=4:14.2.0-1 Downloading dependency 165 of 231: libbz2-1.0:amd64=1.0.8-6 Downloading dependency 166 of 231: libpam-runtime:amd64=1.7.0-3 Downloading dependency 167 of 231: libpython3-dev:amd64=3.13.2-2 Downloading dependency 168 of 231: python3.13-minimal:amd64=3.13.2-1 Downloading dependency 169 of 231: libkrb5-3:amd64=1.21.3-4 Downloading dependency 170 of 231: gcc-14:amd64=14.2.0-17 Downloading dependency 171 of 231: libdebconfclient0:amd64=0.277 Downloading dependency 172 of 231: libc6-dev:amd64=2.41-4 Downloading dependency 173 of 231: libpython3.13-dev:amd64=3.13.2-1 Downloading dependency 174 of 231: libxxhash0:amd64=0.8.3-2 Downloading dependency 175 of 231: zlib1g:amd64=1:1.3.dfsg+really1.3.1-1+b1 Downloading dependency 176 of 231: libcrypt-dev:amd64=1:4.4.38-1 Downloading dependency 177 of 231: g++-14:amd64=14.2.0-17 Downloading dependency 178 of 231: libabsl20240722:amd64=20240722.0-1.5 Downloading dependency 179 of 231: libacl1:amd64=2.3.2-2+b1 Downloading dependency 180 of 231: libpog-dev:amd64=0.5.3-3 Downloading dependency 181 of 231: bsdutils:amd64=1:2.40.4-5 Downloading dependency 182 of 231: cpp:amd64=4:14.2.0-1 Downloading dependency 183 of 231: libaudit1:amd64=1:4.0.2-2+b2 Downloading dependency 184 of 231: libsmartcols1:amd64=2.40.4-5 Downloading dependency 185 of 231: xz-utils:amd64=5.6.4-1 Downloading dependency 186 of 231: python3-dev:amd64=3.13.2-2 Downloading dependency 187 of 231: util-linux:amd64=2.40.4-5 Downloading dependency 188 of 231: bash:amd64=5.2.37-1.1 Downloading dependency 189 of 231: dash:amd64=0.5.12-12 Downloading dependency 190 of 231: liblzma5:amd64=5.6.4-1 Downloading dependency 191 of 231: libzstd1:amd64=1.5.6+dfsg-2 Downloading dependency 192 of 231: mawk:amd64=1.3.4.20250131-1 Downloading dependency 193 of 231: ncurses-bin:amd64=6.5+20250216-2 Downloading dependency 194 of 231: libkeyutils1:amd64=1.6.3-4 Downloading dependency 195 of 231: libicu72:amd64=72.1-6 Downloading dependency 196 of 231: libitm1:amd64=14.2.0-17 Downloading dependency 197 of 231: libpcre2-8-0:amd64=10.45-1 Downloading dependency 198 of 231: cmake:amd64=3.31.6-1 Downloading dependency 199 of 231: libnghttp2-14:amd64=1.64.0-1 Downloading dependency 200 of 231: python3:amd64=3.13.2-2 Downloading dependency 201 of 231: liblsan0:amd64=14.2.0-17 Downloading dependency 202 of 231: libabsl-dev:amd64=20240722.0-1.5 Downloading dependency 203 of 231: libjansson4:amd64=2.14-2+b3 Downloading dependency 204 of 231: libarchive-zip-perl:amd64=1.68-1 Downloading dependency 205 of 231: libpython3.13-minimal:amd64=3.13.2-1 Downloading dependency 206 of 231: libgcc-s1:amd64=14.2.0-17 Downloading dependency 207 of 231: python3-minimal:amd64=3.13.2-2 Downloading dependency 208 of 231: tzdata:amd64=2025a-2 Downloading dependency 209 of 231: libbrotli1:amd64=1.1.0-2+b7 Downloading dependency 210 of 231: grep:amd64=3.11-4 Downloading dependency 211 of 231: cpp-x86-64-linux-gnu:amd64=4:14.2.0-1 Downloading dependency 212 of 231: debianutils:amd64=5.21 Downloading dependency 213 of 231: libgnutls30t64:amd64=3.8.9-2 Downloading dependency 214 of 231: libyaml-0-2:amd64=0.2.5-2 Downloading dependency 215 of 231: cpp-14:amd64=14.2.0-17 Downloading dependency 216 of 231: libncursesw6:amd64=6.5+20250216-2 Downloading dependency 217 of 231: libmpfr6:amd64=4.2.1-1+b2 Downloading dependency 218 of 231: googletest:amd64=1.16.0-1 Downloading dependency 219 of 231: libmd0:amd64=1.1.0-2+b1 Downloading dependency 220 of 231: perl:amd64=5.40.1-2 Downloading dependency 221 of 231: libjs-jquery:amd64=3.6.1+dfsg+~3.5.14-1 Downloading dependency 222 of 231: libfmt10:amd64=10.1.1+ds1-4 Downloading dependency 223 of 231: patch:amd64=2.7.6-7 Downloading dependency 224 of 231: python3-inflect:amd64=7.3.1-2 Downloading dependency 225 of 231: libctf0:amd64=2.44-3 Downloading dependency 226 of 231: libproc2-0:amd64=2:4.0.4-7 Downloading dependency 227 of 231: m4:amd64=1.4.19-7 Downloading dependency 228 of 231: base-files:amd64=13.7 Downloading dependency 229 of 231: libsasl2-2:amd64=2.1.28+dfsg1-9 Downloading dependency 230 of 231: libdb5.3t64:amd64=5.3.28+dfsg2-9 Downloading dependency 231 of 231: libldap2:amd64=2.6.9+dfsg-1 env --chdir=/srv/rebuilderd/tmp/rebuilderdBS7scV/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/debrebuildt6wTOJ/debrebuild.sbuildrc.G_VyrcA8jsAz 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/debrebuildt6wTOJ/debrebuild.tar.FukzC4Mw_aqc --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/rebuilderdBS7scV/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+deb13u1 (16 August 2025) on osuosl42-amd64.novalocal +==============================================================================+ | yaramod 3.21.0-1.1+b2 (amd64) Mon, 17 Nov 2025 02:45:23 +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/debrebuildt6wTOJ/debrebuild.tar.FukzC4Mw_aqc to /srv/rebuilderd/tmp/tmp.sbuild.jtmiyGF_cN... I: Setting up the chroot... I: Creating chroot session... I: Setting up log color... I: Setting up apt archive... +------------------------------------------------------------------------------+ | Fetch source files Mon, 17 Nov 2025 02:45:29 +0000 | +------------------------------------------------------------------------------+ Local sources ------------- /srv/rebuilderd/tmp/rebuilderdBS7scV/inputs/yaramod_3.21.0-1.1.dsc exists in /srv/rebuilderd/tmp/rebuilderdBS7scV/inputs; copying to chroot sbuild: warning: descr(l1): found blank line where expected first heading +------------------------------------------------------------------------------+ | Install package build dependencies Mon, 17 Nov 2025 02:45:31 +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-w1oDSC/apt_archive/sbuild-build-depends-main-dummy.deb'. Install main build dependencies (apt-based resolver) ---------------------------------------------------- Installing build dependencies +------------------------------------------------------------------------------+ | Check architectures Mon, 17 Nov 2025 02:45:36 +0000 | +------------------------------------------------------------------------------+ Arch check ok (amd64 included in any) +------------------------------------------------------------------------------+ | Build environment Mon, 17 Nov 2025 02:45:36 +0000 | +------------------------------------------------------------------------------+ Kernel: Linux 6.12.57+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.57-1 (2025-11-05) 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 Mon, 17 Nov 2025 02:45:36 +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 (45.3s) -- 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' 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=" 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]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' 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]: 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[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' [ 2%] Building CXX object src/CMakeFiles/yaramod-obj.dir/builder/yara_file_builder.cpp.o [ 5%] Building CXX object src/CMakeFiles/yaramod-obj.dir/builder/yara_hex_string_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_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 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 [ 8%] Building CXX object src/CMakeFiles/yaramod-obj.dir/builder/yara_expression_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 [ 10%] 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/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 [ 13%] 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 [ 16%] Converting yaramod modules from JSON to byte arrays in .cpp files /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 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 [ 40%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/sections_summary.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/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: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()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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 /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 /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 [ 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 [ 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 [ 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 /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 [ 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[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 -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' make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-x86_64-linux-gnu' [ 62%] Linking CXX static library libyaramod.a 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 [ 64%] Linking CXX shared library libyaramod.so 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 cd /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 /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-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 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 /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 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' [ 64%] Built target yaramod-static [ 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 -f src/python/CMakeFiles/yaramod-python.dir/build.make src/python/CMakeFiles/yaramod-python.dir/build make[4]: Entering 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 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' [ 67%] Building CXX object src/python/CMakeFiles/yaramod-python.dir/yaramod_python.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 [ 70%] Building CXX object src/python/CMakeFiles/yaramod-python.dir/py_visitor.cpp.o [ 72%] 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 [ 75%] 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/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 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 [ 78%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/builder_tests.cpp.o [ 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/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 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 /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); } | ^~~~~~~~ [ 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 [ 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 (40 ms) [ RUN ] BuilderTests.PureImportsWorks [ OK ] BuilderTests.PureImportsWorks (34 ms) [ RUN ] BuilderTests.PureImportsComplicateWorks [ OK ] BuilderTests.PureImportsComplicateWorks (35 ms) [ RUN ] BuilderTests.UnnamedRuleWorks [ OK ] BuilderTests.UnnamedRuleWorks (52 ms) [ RUN ] BuilderTests.UnnamedRuleWithImportsWorks [ OK ] BuilderTests.UnnamedRuleWithImportsWorks (51 ms) [ RUN ] BuilderTests.UnnamedRuleWithImportsWorks2 [ OK ] BuilderTests.UnnamedRuleWithImportsWorks2 (53 ms) [ RUN ] BuilderTests.RuleWithCustomNameWorks [ OK ] BuilderTests.RuleWithCustomNameWorks (34 ms) [ RUN ] BuilderTests.RuleWithMetasWorks [ OK ] BuilderTests.RuleWithMetasWorks (51 ms) [ RUN ] BuilderTests.RuleWithVariablesWorks [ OK ] BuilderTests.RuleWithVariablesWorks (52 ms) [ RUN ] BuilderTests.RuleWithEmptyStringMetaValueWorks [ OK ] BuilderTests.RuleWithEmptyStringMetaValueWorks (52 ms) [ RUN ] BuilderTests.RuleWithTagsWorks [ OK ] BuilderTests.RuleWithTagsWorks (36 ms) [ RUN ] BuilderTests.RuleWithModifierWorks [ OK ] BuilderTests.RuleWithModifierWorks (52 ms) [ RUN ] BuilderTests.RuleWithOnelineCommentWorks [ OK ] BuilderTests.RuleWithOnelineCommentWorks (39 ms) [ RUN ] BuilderTests.RuleWithMultilineCommentWorks [ OK ] BuilderTests.RuleWithMultilineCommentWorks (35 ms) [ RUN ] BuilderTests.RuleWithPlainStringWorks [ OK ] BuilderTests.RuleWithPlainStringWorks (44 ms) [ RUN ] BuilderTests.RuleWithPlainStringPureWideWorks [ OK ] BuilderTests.RuleWithPlainStringPureWideWorks (87 ms) [ RUN ] BuilderTests.MultipleRulesWorks [ OK ] BuilderTests.MultipleRulesWorks (34 ms) [ RUN ] BuilderTests.RuleWithCustomConditionWorks [ OK ] BuilderTests.RuleWithCustomConditionWorks (49 ms) [ RUN ] BuilderTests.RuleWithConditionWithSymbolsWorks [ OK ] BuilderTests.RuleWithConditionWithSymbolsWorks (38 ms) [ RUN ] BuilderTests.RuleWithHexStringWorks [ OK ] BuilderTests.RuleWithHexStringWorks (51 ms) [ RUN ] BuilderTests.RuleWithDictForConditionWorks [ OK ] BuilderTests.RuleWithDictForConditionWorks (34 ms) [ RUN ] BuilderTests.RuleWithStringForConditionWorks [ OK ] BuilderTests.RuleWithStringForConditionWorks (34 ms) [ RUN ] BuilderTests.RuleWithOfWorks [ OK ] BuilderTests.RuleWithOfWorks (49 ms) [ RUN ] BuilderTests.RuleWithRangeWorks [ OK ] BuilderTests.RuleWithRangeWorks (34 ms) [ RUN ] BuilderTests.RuleWithOfAtWorks [ OK ] BuilderTests.RuleWithOfAtWorks (51 ms) [ RUN ] BuilderTests.RuleWithStructureWorks [ OK ] BuilderTests.RuleWithStructureWorks (49 ms) [ RUN ] BuilderTests.RuleWithConditionWithOnelineComment [ OK ] BuilderTests.RuleWithConditionWithOnelineComment (49 ms) [ RUN ] BuilderTests.RuleWithConditionWithMultilineComment [ OK ] BuilderTests.RuleWithConditionWithMultilineComment (49 ms) [ RUN ] BuilderTests.RuleWithArrayAndStructureWorks [ OK ] BuilderTests.RuleWithArrayAndStructureWorks (34 ms) [ RUN ] BuilderTests.RuleWithFunctionCallWorks [ OK ] BuilderTests.RuleWithFunctionCallWorks (50 ms) [ RUN ] BuilderTests.RuleWithIntFunctionWorks [ OK ] BuilderTests.RuleWithIntFunctionWorks (33 ms) [ RUN ] BuilderTests.RuleWithArithmeticOperationsWorks [ OK ] BuilderTests.RuleWithArithmeticOperationsWorks (48 ms) [ RUN ] BuilderTests.RuleWithArithmeticOperationsWithDoubleValuesWorks [ OK ] BuilderTests.RuleWithArithmeticOperationsWithDoubleValuesWorks (34 ms) [ RUN ] BuilderTests.RuleWithBitwiseOperationsWorks [ OK ] BuilderTests.RuleWithBitwiseOperationsWorks (50 ms) [ RUN ] BuilderTests.RuleWithLogicOperationsWorks [ OK ] BuilderTests.RuleWithLogicOperationsWorks (33 ms) [ RUN ] BuilderTests.RuleWithIntMultpliersWorks [ OK ] BuilderTests.RuleWithIntMultpliersWorks (49 ms) [ RUN ] BuilderTests.RuleWithStringOperatorsWorks [ OK ] BuilderTests.RuleWithStringOperatorsWorks (33 ms) [ RUN ] BuilderTests.RuleWithRegexpWorks [ OK ] BuilderTests.RuleWithRegexpWorks (49 ms) [ RUN ] BuilderTests.RuleWithRegexpInConditionWorks [ OK ] BuilderTests.RuleWithRegexpInConditionWorks (33 ms) [ RUN ] BuilderTests.RuleWithConjunctionInConditionWorks [ OK ] BuilderTests.RuleWithConjunctionInConditionWorks (48 ms) [ RUN ] BuilderTests.RuleWithDisjunctionInConditionWorks [ OK ] BuilderTests.RuleWithDisjunctionInConditionWorks (34 ms) [ RUN ] BuilderTests.RuleWithConjunctionWithLinebreaksInConditionWorks [ OK ] BuilderTests.RuleWithConjunctionWithLinebreaksInConditionWorks (48 ms) [ RUN ] BuilderTests.RuleWithDisjunctionWithLinebreaksInConditionWorks [ OK ] BuilderTests.RuleWithDisjunctionWithLinebreaksInConditionWorks (34 ms) [ RUN ] BuilderTests.RuleWithCommentedConjunctionInConditionWorks [ OK ] BuilderTests.RuleWithCommentedConjunctionInConditionWorks (49 ms) [ RUN ] BuilderTests.RuleWithCommentedDisjunctionInConditionWorks [ OK ] BuilderTests.RuleWithCommentedDisjunctionInConditionWorks (34 ms) [ RUN ] BuilderTests.RuleWithParenthesesWithLinebreaksInConditionWorks [ OK ] BuilderTests.RuleWithParenthesesWithLinebreaksInConditionWorks (49 ms) [ RUN ] BuilderTests.RuleWithEscapedSequencesWorks [ OK ] BuilderTests.RuleWithEscapedSequencesWorks (33 ms) [ RUN ] BuilderTests.RuleWithNoneOfThemExpression [ OK ] BuilderTests.RuleWithNoneOfThemExpression (51 ms) [ RUN ] BuilderTests.RuleWithNoneOfThemInRangeWorks [ OK ] BuilderTests.RuleWithNoneOfThemInRangeWorks (34 ms) [ RUN ] BuilderTests.RuleWithStringsWithDifferentKindsOfModifiers [ OK ] BuilderTests.RuleWithStringsWithDifferentKindsOfModifiers (50 ms) [ RUN ] BuilderTests.RuleWithXorStringModifierOutOfBounds [ OK ] BuilderTests.RuleWithXorStringModifierOutOfBounds (24 ms) [ RUN ] BuilderTests.RuleWithXorStringModifierOutOfBoundsLowerKey [ OK ] BuilderTests.RuleWithXorStringModifierOutOfBoundsLowerKey (24 ms) [ RUN ] BuilderTests.RuleWithXorStringModifierOutOfBoundsHigherKey [ OK ] BuilderTests.RuleWithXorStringModifierOutOfBoundsHigherKey (24 ms) [ RUN ] BuilderTests.RuleWithXorStringModifierLowerBoundGreaterThanHigherBound [ OK ] BuilderTests.RuleWithXorStringModifierLowerBoundGreaterThanHigherBound (24 ms) [ RUN ] BuilderTests.ConjunctionWithSingleTerm [ OK ] BuilderTests.ConjunctionWithSingleTerm (50 ms) [ RUN ] BuilderTests.DefinedTerm [ OK ] BuilderTests.DefinedTerm (49 ms) [ RUN ] BuilderTests.PercentageOfStringSet [ OK ] BuilderTests.PercentageOfStringSet (49 ms) [ RUN ] BuilderTests.FloatValueWorks [ OK ] BuilderTests.FloatValueWorks (50 ms) [ RUN ] BuilderTests.IequalsWorks [ OK ] BuilderTests.IequalsWorks (49 ms) [ RUN ] BuilderTests.IdWildcardWorks [ OK ] BuilderTests.IdWildcardWorks (49 ms) [ RUN ] BuilderTests.StringAsBoolInConditionWorks [ OK ] BuilderTests.StringAsBoolInConditionWorks (49 ms) [ RUN ] BuilderTests.IcontainsWorks [ OK ] BuilderTests.IcontainsWorks (48 ms) [ RUN ] BuilderTests.IendsWithWorks [ OK ] BuilderTests.IendsWithWorks (49 ms) [ RUN ] BuilderTests.IstartsWithWorks [ OK ] BuilderTests.IstartsWithWorks (48 ms) [ RUN ] BuilderTests.StartsWithWorks [ OK ] BuilderTests.StartsWithWorks (49 ms) [ RUN ] BuilderTests.EndsWithWorks [ OK ] BuilderTests.EndsWithWorks (49 ms) [----------] 66 tests from BuilderTests (2907 ms total) [----------] 256 tests from ParserTests [ RUN ] ParserTests.EmptyInputWorks [ OK ] ParserTests.EmptyInputWorks (25 ms) [ RUN ] ParserTests.EmptyRuleWorks [ OK ] ParserTests.EmptyRuleWorks (24 ms) [ RUN ] ParserTests.RulesWithSameNameForbidden [ OK ] ParserTests.RulesWithSameNameForbidden (24 ms) [ RUN ] ParserTests.RuleWithTagsWorks [ OK ] ParserTests.RuleWithTagsWorks (24 ms) [ RUN ] ParserTests.RuleWithMetasWorks [ OK ] ParserTests.RuleWithMetasWorks (24 ms) [ RUN ] ParserTests.RuleWithRepetitiveMetasWorks [ OK ] ParserTests.RuleWithRepetitiveMetasWorks (25 ms) [ RUN ] ParserTests.HexAndDecimalIntegersArePreservedWorks [ OK ] ParserTests.HexAndDecimalIntegersArePreservedWorks (23 ms) [ RUN ] ParserTests.RuleWithVariablesWorks [ OK ] ParserTests.RuleWithVariablesWorks (24 ms) [ RUN ] ParserTests.VariableInConditionWorks [ OK ] ParserTests.VariableInConditionWorks (24 ms) [ RUN ] ParserTests.RuleWithNoStringsDoesntWork [ OK ] ParserTests.RuleWithNoStringsDoesntWork (25 ms) [ RUN ] ParserTests.RuleWithPlainTextStringsWorks [ OK ] ParserTests.RuleWithPlainTextStringsWorks (23 ms) [ RUN ] ParserTests.MultipleRulesWorks [ OK ] ParserTests.MultipleRulesWorks (25 ms) [ RUN ] ParserTests.RuleWithPlainTextStringWithModifiersWorks [ OK ] ParserTests.RuleWithPlainTextStringWithModifiersWorks (23 ms) [ RUN ] ParserTests.DuplicatedStringModifierForbidden [ OK ] ParserTests.DuplicatedStringModifierForbidden (24 ms) [ RUN ] ParserTests.InvalidStringModifiersCombination [ OK ] ParserTests.InvalidStringModifiersCombination (24 ms) [ RUN ] ParserTests.MultipleBase64AlphabetsForbidden [ OK ] ParserTests.MultipleBase64AlphabetsForbidden (24 ms) [ RUN ] ParserTests.HexStringWithPlainNibbleWorks [ OK ] ParserTests.HexStringWithPlainNibbleWorks (24 ms) [ RUN ] ParserTests.HexStringWithPlainNibblesWorks [ OK ] ParserTests.HexStringWithPlainNibblesWorks (24 ms) [ RUN ] ParserTests.HexStringWithLowHighJumpWorks [ OK ] ParserTests.HexStringWithLowHighJumpWorks (24 ms) [ RUN ] ParserTests.HexStringWithLowJumpWorks [ OK ] ParserTests.HexStringWithLowJumpWorks (24 ms) [ RUN ] ParserTests.HexStringWithUnrestrictedJumpWorks [ OK ] ParserTests.HexStringWithUnrestrictedJumpWorks (24 ms) [ RUN ] ParserTests.HexStringWithConstantJumpWorks [ OK ] ParserTests.HexStringWithConstantJumpWorks (24 ms) [ RUN ] ParserTests.HexStringWithSimpleOrWorks [ OK ] ParserTests.HexStringWithSimpleOrWorks (24 ms) [ RUN ] ParserTests.HexStringWithMultibyteSimpleOrWorks [ OK ] ParserTests.HexStringWithMultibyteSimpleOrWorks (24 ms) [ RUN ] ParserTests.HexStringWithNestedOrWorks [ OK ] ParserTests.HexStringWithNestedOrWorks (25 ms) [ RUN ] ParserTests.HexStringWithOrAndJumpWorks [ OK ] ParserTests.HexStringWithOrAndJumpWorks (25 ms) [ RUN ] ParserTests.HexStringWithOrOnTheBeginningAndEnd [ OK ] ParserTests.HexStringWithOrOnTheBeginningAndEnd (24 ms) [ RUN ] ParserTests.HexStringWithJumpAtBeginningForbidden [ OK ] ParserTests.HexStringWithJumpAtBeginningForbidden (24 ms) [ RUN ] ParserTests.HexStringWithJumpAtEndForbidden [ OK ] ParserTests.HexStringWithJumpAtEndForbidden (24 ms) [ RUN ] ParserTests.MultipleRulesWithHexStrings [ OK ] ParserTests.MultipleRulesWithHexStrings (24 ms) [ RUN ] ParserTests.InvalidHexStringAtom1 [ OK ] ParserTests.InvalidHexStringAtom1 (25 ms) [ RUN ] ParserTests.InvalidHexStringAtom2 [ OK ] ParserTests.InvalidHexStringAtom2 (24 ms) [ RUN ] ParserTests.InvalidHexStringOr [ OK ] ParserTests.InvalidHexStringOr (24 ms) [ RUN ] ParserTests.RegexpWithJustCharsWorks [ OK ] ParserTests.RegexpWithJustCharsWorks (25 ms) [ RUN ] ParserTests.MultipleRegexpsWithJustCharsWorks [ OK ] ParserTests.MultipleRegexpsWithJustCharsWorks (26 ms) [ RUN ] ParserTests.RegexpLimitedToWholeLineWorks [ OK ] ParserTests.RegexpLimitedToWholeLineWorks (26 ms) [ RUN ] ParserTests.RegexpWithPredefinedClassesWorks [ OK ] ParserTests.RegexpWithPredefinedClassesWorks (25 ms) [ RUN ] ParserTests.RegexpWithCustomClassWorks [ OK ] ParserTests.RegexpWithCustomClassWorks (27 ms) [ RUN ] ParserTests.RegexpWithCustomNegativeClassWorks [ OK ] ParserTests.RegexpWithCustomNegativeClassWorks (25 ms) [ RUN ] ParserTests.RegexpWithOptionalEscapedCharsWorks [ OK ] ParserTests.RegexpWithOptionalEscapedCharsWorks (24 ms) [ RUN ] ParserTests.RegexpWithEscapedSquareBracketsInsideClassWorks [ OK ] ParserTests.RegexpWithEscapedSquareBracketsInsideClassWorks (25 ms) [ RUN ] ParserTests.RegexpWithUnescapedSquareBracketsInsideClassWorks [ OK ] ParserTests.RegexpWithUnescapedSquareBracketsInsideClassWorks (25 ms) [ RUN ] ParserTests.RegexpWithEmptyAlternationGroupWorks [ OK ] ParserTests.RegexpWithEmptyAlternationGroupWorks (27 ms) [ RUN ] ParserTests.InvalidCuckooRuleAccessTokenStream [ OK ] ParserTests.InvalidCuckooRuleAccessTokenStream (26 ms) [ RUN ] ParserTests.ComplicatedRegexpClassWorks [ OK ] ParserTests.ComplicatedRegexpClassWorks (26 ms) [ RUN ] ParserTests.RegexpWithIterationWorks [ OK ] ParserTests.RegexpWithIterationWorks (27 ms) [ RUN ] ParserTests.RegexpWithPositiveIterationWorks [ OK ] ParserTests.RegexpWithPositiveIterationWorks (26 ms) [ RUN ] ParserTests.RegexpWithOptionalWorks [ OK ] ParserTests.RegexpWithOptionalWorks (26 ms) [ RUN ] ParserTests.RegexpWithRangesWorks [ OK ] ParserTests.RegexpWithRangesWorks (26 ms) [ RUN ] ParserTests.RegexpWithGreedyOperatorsWorks [ OK ] ParserTests.RegexpWithGreedyOperatorsWorks (26 ms) [ RUN ] ParserTests.RegexpWithGroupsWorks [ OK ] ParserTests.RegexpWithGroupsWorks (25 ms) [ RUN ] ParserTests.RegexpWithOrWorks [ OK ] ParserTests.RegexpWithOrWorks (25 ms) [ RUN ] ParserTests.RegexpWithModifiersWorks [ OK ] ParserTests.RegexpWithModifiersWorks (25 ms) [ RUN ] ParserTests.RegexpWithUndefinedRangeForbidden [ OK ] ParserTests.RegexpWithUndefinedRangeForbidden (25 ms) [ RUN ] ParserTests.RegexpWithInvalidRangeForbidden [ OK ] ParserTests.RegexpWithInvalidRangeForbidden (25 ms) [ RUN ] ParserTests.RulesWithVariablesAndStringsWork [ OK ] ParserTests.RulesWithVariablesAndStringsWork (25 ms) [ RUN ] ParserTests.RuleWithUnorderedSections [ OK ] ParserTests.RuleWithUnorderedSections (25 ms) [ RUN ] ParserTests.GlobalRuleModifierWorks [ OK ] ParserTests.GlobalRuleModifierWorks (25 ms) [ RUN ] ParserTests.PrivateRuleModifierWorks [ OK ] ParserTests.PrivateRuleModifierWorks (25 ms) [ RUN ] ParserTests.PrivateGlobalRuleModifierWorks [ OK ] ParserTests.PrivateGlobalRuleModifierWorks (25 ms) [ RUN ] ParserTests.SetRuleModifierWorks [ OK ] ParserTests.SetRuleModifierWorks (25 ms) [ RUN ] ParserTests.SetRuleModifierWorksWithDeleting [ OK ] ParserTests.SetRuleModifierWorksWithDeleting (25 ms) [ RUN ] ParserTests.ImportWorks [ OK ] ParserTests.ImportWorks (25 ms) [ RUN ] ParserTests.ImportOfUnrecognizedModuleForbidden [ OK ] ParserTests.ImportOfUnrecognizedModuleForbidden (24 ms) [ RUN ] ParserTests.TrueConditionWorks [ OK ] ParserTests.TrueConditionWorks (25 ms) [ RUN ] ParserTests.FalseConditionWorks [ OK ] ParserTests.FalseConditionWorks (26 ms) [ RUN ] ParserTests.StringIdConditionWorks [ OK ] ParserTests.StringIdConditionWorks (24 ms) [ RUN ] ParserTests.StringAtEntryPointConditionWorks [ OK ] ParserTests.StringAtEntryPointConditionWorks (24 ms) [ RUN ] ParserTests.StringInRangeConditionWorks [ OK ] ParserTests.StringInRangeConditionWorks (25 ms) [ RUN ] ParserTests.StringInRangeConditionWorks2 [ OK ] ParserTests.StringInRangeConditionWorks2 (24 ms) [ RUN ] ParserTests.NotConditionWorks [ OK ] ParserTests.NotConditionWorks (25 ms) [ RUN ] ParserTests.AndConditionWorks [ OK ] ParserTests.AndConditionWorks (26 ms) [ RUN ] ParserTests.AndConditionWorks2 [ OK ] ParserTests.AndConditionWorks2 (25 ms) [ RUN ] ParserTests.OrConditionWorks [ OK ] ParserTests.OrConditionWorks (25 ms) [ RUN ] ParserTests.EscapedOrConditionWorks [ OK ] ParserTests.EscapedOrConditionWorks (53 ms) [ RUN ] ParserTests.RelationalConditionWorks [ OK ] ParserTests.RelationalConditionWorks (43 ms) [ RUN ] ParserTests.ParenthesesConditionWorks [ OK ] ParserTests.ParenthesesConditionWorks (24 ms) [ RUN ] ParserTests.ArithmeticOpConditionWorksSimple [ OK ] ParserTests.ArithmeticOpConditionWorksSimple (25 ms) [ RUN ] ParserTests.ArithmeticOpConditionWorks [ OK ] ParserTests.ArithmeticOpConditionWorks (25 ms) [ RUN ] ParserTests.ArithmeticOpConditionWorks2 [ OK ] ParserTests.ArithmeticOpConditionWorks2 (24 ms) [ RUN ] ParserTests.BitwiseOpConditionNegation [ OK ] ParserTests.BitwiseOpConditionNegation (28 ms) [ RUN ] ParserTests.BitwiseOpConditionWorks [ OK ] ParserTests.BitwiseOpConditionWorks (24 ms) [ RUN ] ParserTests.IntFunctionConditionWorks [ OK ] ParserTests.IntFunctionConditionWorks (47 ms) [ RUN ] ParserTests.DoubleInConditionWorks [ OK ] ParserTests.DoubleInConditionWorks (39 ms) [ RUN ] ParserTests.ContainsInConditionWorks [ OK ] ParserTests.ContainsInConditionWorks (24 ms) [ RUN ] ParserTests.MatchesInConditionWorks [ OK ] ParserTests.MatchesInConditionWorks (47 ms) [ RUN ] ParserTests.StringCountConditionWorks [ OK ] ParserTests.StringCountConditionWorks (42 ms) [ RUN ] ParserTests.StringOffsetConditionWorks [ OK ] ParserTests.StringOffsetConditionWorks (24 ms) [ RUN ] ParserTests.HexadecimalNumbersInConditionWorks [ OK ] ParserTests.HexadecimalNumbersInConditionWorks (27 ms) [ RUN ] ParserTests.StringLengthConditionWorks [ OK ] ParserTests.StringLengthConditionWorks (25 ms) [ RUN ] ParserTests.FunctionCallConditionWorks [ OK ] ParserTests.FunctionCallConditionWorks (25 ms) [ RUN ] ParserTests.StructureAccessConditionWorks [ OK ] ParserTests.StructureAccessConditionWorks (25 ms) [ RUN ] ParserTests.ArrayAccessConditionWorks1 [ OK ] ParserTests.ArrayAccessConditionWorks1 (25 ms) [ RUN ] ParserTests.ArrayAccessConditionWorks2 [ OK ] ParserTests.ArrayAccessConditionWorks2 (25 ms) [ RUN ] ParserTests.ForIntegerSetConditionWorks [ OK ] ParserTests.ForIntegerSetConditionWorks (25 ms) [ RUN ] ParserTests.ForArrayConditionWorks [ OK ] ParserTests.ForArrayConditionWorks (25 ms) [ RUN ] ParserTests.NestedForArrayConditionWorks [ OK ] ParserTests.NestedForArrayConditionWorks (25 ms) [ RUN ] ParserTests.UserDefinedArrayWorks [ OK ] ParserTests.UserDefinedArrayWorks (25 ms) [ RUN ] ParserTests.ForDictConditionWorks [ OK ] ParserTests.ForDictConditionWorks (24 ms) [ RUN ] ParserTests.ForStringSetConditionWorks [ OK ] ParserTests.ForStringSetConditionWorks (26 ms) [ RUN ] ParserTests.ForStringLiteralSetConditionWorks [ OK ] ParserTests.ForStringLiteralSetConditionWorks (25 ms) [ RUN ] ParserTests.ForStringLiteralSetWithOneStringConditionWorks [ OK ] ParserTests.ForStringLiteralSetWithOneStringConditionWorks (25 ms) [ RUN ] ParserTests.ForStringLiteralSetWithStringSymbolsConditionWorks [ OK ] ParserTests.ForStringLiteralSetWithStringSymbolsConditionWorks (26 ms) [ RUN ] ParserTests.ForExpressionSetWithItemsVariousTypesForbidden [ OK ] ParserTests.ForExpressionSetWithItemsVariousTypesForbidden (25 ms) [ RUN ] ParserTests.NoneOfThemConditionWorks [ OK ] ParserTests.NoneOfThemConditionWorks (25 ms) [ RUN ] ParserTests.NoneOfSetConditionWorks [ OK ] ParserTests.NoneOfSetConditionWorks (25 ms) [ RUN ] ParserTests.OfConditionWorks [ OK ] ParserTests.OfConditionWorks (26 ms) [ RUN ] ParserTests.OfAtConditionWorks [ OK ] ParserTests.OfAtConditionWorks (24 ms) [ RUN ] ParserTests.OfAtWithStringSetConditionWorks [ OK ] ParserTests.OfAtWithStringSetConditionWorks (25 ms) [ RUN ] ParserTests.OfWithStringSetAndAtWithExpressionConditionWorks [ OK ] ParserTests.OfWithStringSetAndAtWithExpressionConditionWorks (25 ms) [ RUN ] ParserTests.EmptyStringMetaValue [ OK ] ParserTests.EmptyStringMetaValue (25 ms) [ RUN ] ParserTests.EmptyPlainStringValue [ OK ] ParserTests.EmptyPlainStringValue (24 ms) [ RUN ] ParserTests.EmptyStringInConditionWorks [ OK ] ParserTests.EmptyStringInConditionWorks (24 ms) [ RUN ] ParserTests.StringsAndArithmeticOperationsForbidden [ OK ] ParserTests.StringsAndArithmeticOperationsForbidden (25 ms) [ RUN ] ParserTests.BoolAndArithmeticOperationsForbidden [ OK ] ParserTests.BoolAndArithmeticOperationsForbidden (24 ms) [ RUN ] ParserTests.ContainsAndNonStringForbidden [ OK ] ParserTests.ContainsAndNonStringForbidden (24 ms) [ RUN ] ParserTests.UndefinedStringReferenceForbidden [ OK ] ParserTests.UndefinedStringReferenceForbidden (25 ms) [ RUN ] ParserTests.StringWildcardConditionWorks [ OK ] ParserTests.StringWildcardConditionWorks (24 ms) [ RUN ] ParserTests.StringWildcardConditionWithNoMatchingStringForbidden [ OK ] ParserTests.StringWildcardConditionWithNoMatchingStringForbidden (24 ms) [ RUN ] ParserTests.SameVariableInNestedForLoopsForbidden [ OK ] ParserTests.SameVariableInNestedForLoopsForbidden (24 ms) [ RUN ] ParserTests.FloatValueWorks [ OK ] ParserTests.FloatValueWorks (26 ms) [ RUN ] ParserTests.FloatValueWorks2 [ OK ] ParserTests.FloatValueWorks2 (25 ms) [ RUN ] ParserTests.ConsoleModuleWorks [ OK ] ParserTests.ConsoleModuleWorks (25 ms) [ RUN ] ParserTests.CuckooModuleWorks [ OK ] ParserTests.CuckooModuleWorks (24 ms) [ RUN ] ParserTests.DotnetModuleWorks [ OK ] ParserTests.DotnetModuleWorks (28 ms) [ RUN ] ParserTests.DexModuleWorks [ OK ] ParserTests.DexModuleWorks (25 ms) [ RUN ] ParserTests.ElfModuleWorks [ OK ] ParserTests.ElfModuleWorks (24 ms) [ RUN ] ParserTests.HashModuleWorks [ OK ] ParserTests.HashModuleWorks (24 ms) [ RUN ] ParserTests.MagicModuleWorks [ OK ] ParserTests.MagicModuleWorks (24 ms) [ RUN ] ParserTests.MathModuleWorks1 [ OK ] ParserTests.MathModuleWorks1 (25 ms) [ RUN ] ParserTests.MathModuleWorks2 [ OK ] ParserTests.MathModuleWorks2 (24 ms) [ RUN ] ParserTests.PeModuleWorks1 [ OK ] ParserTests.PeModuleWorks1 (25 ms) [ RUN ] ParserTests.PeModuleWorks2 [ OK ] ParserTests.PeModuleWorks2 (25 ms) [ RUN ] ParserTests.PeModuleWorks3 [ OK ] ParserTests.PeModuleWorks3 (24 ms) [ RUN ] ParserTests.VirusTotalSymbolsWork [ OK ] ParserTests.VirusTotalSymbolsWork (24 ms) [ RUN ] ParserTests.TransformationToTextWorks [ OK ] ParserTests.TransformationToTextWorks (25 ms) [ RUN ] ParserTests.RemoveLineBeforeAndWorks [ OK ] ParserTests.RemoveLineBeforeAndWorks (24 ms) [ RUN ] ParserTests.RemoveLineBeforeAndWithCommentsWorks [ OK ] ParserTests.RemoveLineBeforeAndWithCommentsWorks (23 ms) [ RUN ] ParserTests.RemoveLineBeforeAndWithComments2Works [ OK ] ParserTests.RemoveLineBeforeAndWithComments2Works (25 ms) [ RUN ] ParserTests.MultipleRulesWorks2 [ OK ] ParserTests.MultipleRulesWorks2 (25 ms) [ RUN ] ParserTests.KbMbIntegerMultipliersWorks [ OK ] ParserTests.KbMbIntegerMultipliersWorks (26 ms) [ RUN ] ParserTests.ReferencingRuleFromOtherRuleWorks [ OK ] ParserTests.ReferencingRuleFromOtherRuleWorks (24 ms) [ RUN ] ParserTests.RegexpWithSuffixModifierWorks [ OK ] ParserTests.RegexpWithSuffixModifierWorks (25 ms) [ RUN ] ParserTests.GlobalVariablesWorks [ OK ] ParserTests.GlobalVariablesWorks (26 ms) [ RUN ] ParserTests.LengthOfHexStringWorks [ OK ] ParserTests.LengthOfHexStringWorks (25 ms) [ RUN ] ParserTests.HexStringWithSpacesInJumpWorks [ OK ] ParserTests.HexStringWithSpacesInJumpWorks (24 ms) [ RUN ] ParserTests.ComplicatedHexStringAlterationWorks [ OK ] ParserTests.ComplicatedHexStringAlterationWorks (24 ms) [ RUN ] ParserTests.ComplicatedHexStringWorks [ OK ] ParserTests.ComplicatedHexStringWorks (24 ms) [ RUN ] ParserTests.NibbleGetterWorks [ OK ] ParserTests.NibbleGetterWorks (24 ms) [ RUN ] ParserTests.HexEscapeWorks [ OK ] ParserTests.HexEscapeWorks (24 ms) [ RUN ] ParserTests.EscapedSequencesInMetaWorks [ OK ] ParserTests.EscapedSequencesInMetaWorks (24 ms) [ RUN ] ParserTests.EscapedSequencesWorks [ OK ] ParserTests.EscapedSequencesWorks (27 ms) [ RUN ] ParserTests.InvalidEscapedSequence1 [ OK ] ParserTests.InvalidEscapedSequence1 (25 ms) [ RUN ] ParserTests.InvalidEscapedSequence2 [ OK ] ParserTests.InvalidEscapedSequence2 (24 ms) [ RUN ] ParserTests.NewlineInHexString [ OK ] ParserTests.NewlineInHexString (24 ms) [ RUN ] ParserTests.ErrorWhenUnknownTokenAfterImport [ OK ] ParserTests.ErrorWhenUnknownTokenAfterImport (23 ms) [ RUN ] ParserTests.PeDataDirectoryIsArray [ OK ] ParserTests.PeDataDirectoryIsArray (24 ms) [ RUN ] ParserTests.AnonymousStrings [ OK ] ParserTests.AnonymousStrings (24 ms) [ RUN ] ParserTests.AllOfThemInOperator [ OK ] ParserTests.AllOfThemInOperator (24 ms) [ RUN ] ParserTests.AllOfInOperatorAndAnyOfInOperator [ OK ] ParserTests.AllOfInOperatorAndAnyOfInOperator (26 ms) [ RUN ] ParserTests.StringCountInRange [ OK ] ParserTests.StringCountInRange (24 ms) [ RUN ] ParserTests.CommentsInCommonLocations [ OK ] ParserTests.CommentsInCommonLocations (25 ms) [ RUN ] ParserTests.CommentsInHexString [ OK ] ParserTests.CommentsInHexString (25 ms) [ RUN ] ParserTests.CommentsInCondition [ OK ] ParserTests.CommentsInCondition (24 ms) [ RUN ] ParserTests.ForCycleMultipleRows [ OK ] ParserTests.ForCycleMultipleRows (26 ms) [ RUN ] ParserTests.ForCycleMultipleRowsWithCRLF [ OK ] ParserTests.ForCycleMultipleRowsWithCRLF (24 ms) [ RUN ] ParserTests.OneMoreTest [ OK ] ParserTests.OneMoreTest (24 ms) [ RUN ] ParserTests.NonUTFmetaWorks [ OK ] ParserTests.NonUTFmetaWorks (25 ms) [ RUN ] ParserTests.NonUTFconditionWorks [ OK ] ParserTests.NonUTFconditionWorks (24 ms) [ RUN ] ParserTests.NonUTFcommentWorks [ OK ] ParserTests.NonUTFcommentWorks (24 ms) [ RUN ] ParserTests.NonUTFcommentsWork [ OK ] ParserTests.NonUTFcommentsWork (24 ms) [ RUN ] ParserTests.RemoveTrailingWhitespacesFromComments [ OK ] ParserTests.RemoveTrailingWhitespacesFromComments (24 ms) [ RUN ] ParserTests.AddMetaAfterParse [ OK ] ParserTests.AddMetaAfterParse (24 ms) [ RUN ] ParserTests.SetTagsAfterParse [ OK ] ParserTests.SetTagsAfterParse (24 ms) [ RUN ] ParserTests.RemoveMetasAfterParse [ OK ] ParserTests.RemoveMetasAfterParse (24 ms) [ RUN ] ParserTests.ParseIncompleteUnknownImport [ OK ] ParserTests.ParseIncompleteUnknownImport (24 ms) [ RUN ] ParserTests.ParseIncompleteReferenceUnknownSymbol [ OK ] ParserTests.ParseIncompleteReferenceUnknownSymbol (24 ms) [ RUN ] ParserTests.ParseIncompleteUnknownObjectSymbol [ OK ] ParserTests.ParseIncompleteUnknownObjectSymbol (25 ms) [ RUN ] ParserTests.ParseIncompleteUnknownObjectSymbolFromKnownModule [ OK ] ParserTests.ParseIncompleteUnknownObjectSymbolFromKnownModule (26 ms) [ RUN ] ParserTests.ParseIncompleteUnknownArraySymbol [ OK ] ParserTests.ParseIncompleteUnknownArraySymbol (27 ms) [ RUN ] ParserTests.ParseIncompleteUnknownArraySymbolFromKnownModule [ OK ] ParserTests.ParseIncompleteUnknownArraySymbolFromKnownModule (26 ms) [ RUN ] ParserTests.ParseIncompleteUnknownArraySymbolFromUnknownModule [ OK ] ParserTests.ParseIncompleteUnknownArraySymbolFromUnknownModule (24 ms) [ RUN ] ParserTests.ParseIncompleteUnknownObjectSymbolFromUnknownModule [ OK ] ParserTests.ParseIncompleteUnknownObjectSymbolFromUnknownModule (24 ms) [ RUN ] ParserTests.ParseIncompleteUnknownForDict [ OK ] ParserTests.ParseIncompleteUnknownForDict (24 ms) [ RUN ] ParserTests.ParseIncompleteUnknownForDictFromKnownModule [ OK ] ParserTests.ParseIncompleteUnknownForDictFromKnownModule (24 ms) [ RUN ] ParserTests.ParseIncompleteUnknownForDictFromUnknownModule [ OK ] ParserTests.ParseIncompleteUnknownForDictFromUnknownModule (24 ms) [ RUN ] ParserTests.ParseIncompleteUnknownFor [ OK ] ParserTests.ParseIncompleteUnknownFor (24 ms) [ RUN ] ParserTests.ParseIncompleteUnknownForFromKnownModule [ OK ] ParserTests.ParseIncompleteUnknownForFromKnownModule (25 ms) [ RUN ] ParserTests.ParseIncompleteUnknownForFromUnknownModule [ OK ] ParserTests.ParseIncompleteUnknownForFromUnknownModule (26 ms) [ RUN ] ParserTests.ParseIncompleteUnknownFunctionCall [ OK ] ParserTests.ParseIncompleteUnknownFunctionCall (27 ms) [ RUN ] ParserTests.ParseIncompleteUnknownFunctionCallFromKnownModule [ OK ] ParserTests.ParseIncompleteUnknownFunctionCallFromKnownModule (26 ms) [ RUN ] ParserTests.ParseIncompleteUnknownFunctionCallFromUnknownModule [ OK ] ParserTests.ParseIncompleteUnknownFunctionCallFromUnknownModule (26 ms) [ RUN ] ParserTests.ParseIncompleteUnknownFunctionOverloadOfKnownFunction [ OK ] ParserTests.ParseIncompleteUnknownFunctionOverloadOfKnownFunction (26 ms) [ RUN ] ParserTests.ParseIncompleteRuleNotFinished [ OK ] ParserTests.ParseIncompleteRuleNotFinished (26 ms) [ RUN ] ParserTests.AutoformattingClosingBracket [ OK ] ParserTests.AutoformattingClosingBracket (26 ms) [ RUN ] ParserTests.AutoformattingClosingDoubleBracket [ OK ] ParserTests.AutoformattingClosingDoubleBracket (24 ms) [ RUN ] ParserTests.AutoformattingClosingBracketWithOtherBracketsInside [ OK ] ParserTests.AutoformattingClosingBracketWithOtherBracketsInside (24 ms) [ RUN ] ParserTests.AutoformattingMultipleLineBrackets [ OK ] ParserTests.AutoformattingMultipleLineBrackets (24 ms) [ RUN ] ParserTests.AutoformattingProperAlignment [ OK ] ParserTests.AutoformattingProperAlignment (24 ms) [ RUN ] ParserTests.AutoformattingProperAlignmentOrStatement [ OK ] ParserTests.AutoformattingProperAlignmentOrStatement (28 ms) [ RUN ] ParserTests.AutoformattingAddNewlinesMinimal [ OK ] ParserTests.AutoformattingAddNewlinesMinimal (27 ms) [ RUN ] ParserTests.AutoformattingAddNewLines [ OK ] ParserTests.AutoformattingAddNewLines (26 ms) [ RUN ] ParserTests.AutoformattingAddNewlinesToBothSides [ OK ] ParserTests.AutoformattingAddNewlinesToBothSides (30 ms) [ RUN ] ParserTests.AutoformattingAddCRLF [ OK ] ParserTests.AutoformattingAddCRLF (32 ms) [ RUN ] ParserTests.AutoformattingNoSpaceBeforeArrayAccess [ OK ] ParserTests.AutoformattingNoSpaceBeforeArrayAccess (26 ms) [ RUN ] ParserTests.AutoformattingSpaceBeforeComments [ OK ] ParserTests.AutoformattingSpaceBeforeComments (27 ms) [ RUN ] ParserTests.AutoformattingRegexpClasses [ OK ] ParserTests.AutoformattingRegexpClasses (28 ms) [ RUN ] ParserTests.AutoformattingAlignedComments1 [ OK ] ParserTests.AutoformattingAlignedComments1 (27 ms) [ RUN ] ParserTests.AutoformattingAlignedComments2 [ OK ] ParserTests.AutoformattingAlignedComments2 (29 ms) [ RUN ] ParserTests.AutoformattingAlignedComments3 [ OK ] ParserTests.AutoformattingAlignedComments3 (28 ms) [ RUN ] ParserTests.AutoformattingNewlinesMultipleRules [ OK ] ParserTests.AutoformattingNewlinesMultipleRules (28 ms) [ RUN ] ParserTests.AutoformattingRemoveRedundantBlankLines [ OK ] ParserTests.AutoformattingRemoveRedundantBlankLines (26 ms) [ RUN ] ParserTests.AutoformattingRemoveRedundantBlankLines2 [ OK ] ParserTests.AutoformattingRemoveRedundantBlankLines2 (27 ms) [ RUN ] ParserTests.AutoformattingCommentInsideHexstringOnNewline [ OK ] ParserTests.AutoformattingCommentInsideHexstringOnNewline (27 ms) [ RUN ] ParserTests.AutoformattingNoSpaceBeforeNewLine [ OK ] ParserTests.AutoformattingNoSpaceBeforeNewLine (27 ms) [ RUN ] ParserTests.AutoformattingOfOnelineRule [ OK ] ParserTests.AutoformattingOfOnelineRule (27 ms) [ RUN ] ParserTests.AutoformattingOfTwoOnelineRules [ OK ] ParserTests.AutoformattingOfTwoOnelineRules (27 ms) [ RUN ] ParserTests.AutoformattingVariableInCondition [ OK ] ParserTests.AutoformattingVariableInCondition (27 ms) [ RUN ] ParserTests.RenameReferencedRuleWorks [ OK ] ParserTests.RenameReferencedRuleWorks (26 ms) [ RUN ] ParserTests.RenameStringWorks1 [ OK ] ParserTests.RenameStringWorks1 (28 ms) [ RUN ] ParserTests.RenameStringWorks2 [ OK ] ParserTests.RenameStringWorks2 (29 ms) [ RUN ] ParserTests.RenameStringWorks3 [ OK ] ParserTests.RenameStringWorks3 (28 ms) [ RUN ] ParserTests.StringXorModifierWithArguments [ OK ] ParserTests.StringXorModifierWithArguments (28 ms) [ RUN ] ParserTests.StringXorModifierWithOutOfBoundsKey [ OK ] ParserTests.StringXorModifierWithOutOfBoundsKey (29 ms) [ RUN ] ParserTests.StringXorModifierWithOutOfBoundsLowerKey [ OK ] ParserTests.StringXorModifierWithOutOfBoundsLowerKey (29 ms) [ RUN ] ParserTests.StringXorModifierWithOutOfBoundsHigherKey [ OK ] ParserTests.StringXorModifierWithOutOfBoundsHigherKey (26 ms) [ RUN ] ParserTests.StringXorModifierWithLowerBoundGreaterThanHigherBound [ OK ] ParserTests.StringXorModifierWithLowerBoundGreaterThanHigherBound (28 ms) [ RUN ] ParserTests.PrivateStringModifier [ OK ] ParserTests.PrivateStringModifier (24 ms) [ RUN ] ParserTests.UnexpectedEndOfFile [ OK ] ParserTests.UnexpectedEndOfFile (26 ms) [ RUN ] ParserTests.ReuseOfParserAfterError [ OK ] ParserTests.ReuseOfParserAfterError (27 ms) [ RUN ] ParserTests.DefinedExpression [ OK ] ParserTests.DefinedExpression (27 ms) [ RUN ] ParserTests.IequalsExpression [ OK ] ParserTests.IequalsExpression (25 ms) [ RUN ] ParserTests.ParsePeSignaturesXAlgorithmOID [ OK ] ParserTests.ParsePeSignaturesXAlgorithmOID (28 ms) [ RUN ] ParserTests.ParseELFDynsym [ OK ] ParserTests.ParseELFDynsym (26 ms) [ RUN ] ParserTests.ParsePercentage1Error [ OK ] ParserTests.ParsePercentage1Error (29 ms) [ RUN ] ParserTests.ParsePercentage2Error [ OK ] ParserTests.ParsePercentage2Error (27 ms) [ RUN ] ParserTests.ParsePercentage3 [ OK ] ParserTests.ParsePercentage3 (31 ms) [ RUN ] ParserTests.ParsePercentage4 [ OK ] ParserTests.ParsePercentage4 (24 ms) [ RUN ] ParserTests.ParsePercentage5 [ OK ] ParserTests.ParsePercentage5 (23 ms) [ RUN ] ParserTests.ParsePercentage6 [ OK ] ParserTests.ParsePercentage6 (29 ms) [ RUN ] ParserTests.ParsePercentage7 [ OK ] ParserTests.ParsePercentage7 (27 ms) [ RUN ] ParserTests.ParseOfRule [ OK ] ParserTests.ParseOfRule (28 ms) [ RUN ] ParserTests.ParseOfRuleInvalid [ OK ] ParserTests.ParseOfRuleInvalid (25 ms) [ RUN ] ParserTests.ParseOfRuleWildcard [ OK ] ParserTests.ParseOfRuleWildcard (26 ms) [ RUN ] ParserTests.ParseOfRuleWildcardInvalid [ OK ] ParserTests.ParseOfRuleWildcardInvalid (27 ms) [ RUN ] ParserTests.ParseAmbiguousWithIdWildcard [ OK ] ParserTests.ParseAmbiguousWithIdWildcard (26 ms) [ RUN ] ParserTests.ExpressionUids [ OK ] ParserTests.ExpressionUids (24 ms) [ RUN ] ParserTests.OctalIntegerWorks [ OK ] ParserTests.OctalIntegerWorks (25 ms) [ RUN ] ParserTests.Yara423FunctionsWorks [ OK ] ParserTests.Yara423FunctionsWorks (25 ms) [ RUN ] ParserTests.HexStringNotWorks [ OK ] ParserTests.HexStringNotWorks (25 ms) [ RUN ] ParserTests.IcontainsExpression [ OK ] ParserTests.IcontainsExpression (26 ms) [ RUN ] ParserTests.IendsWithExpression [ OK ] ParserTests.IendsWithExpression (24 ms) [ RUN ] ParserTests.IstartsWithExpression [ OK ] ParserTests.IstartsWithExpression (25 ms) [ RUN ] ParserTests.StartsWithExpression [ OK ] ParserTests.StartsWithExpression (27 ms) [ RUN ] ParserTests.EndsWithExpression [ OK ] ParserTests.EndsWithExpression (25 ms) [ RUN ] ParserTests.StringModuleWorks [ OK ] ParserTests.StringModuleWorks (24 ms) [----------] 256 tests from ParserTests (6747 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 (25 ms) [ RUN ] VisitorTests.RegexpModifyingVisitorInpactOnTokenStream [ OK ] VisitorTests.RegexpModifyingVisitorInpactOnTokenStream (24 ms) [ RUN ] VisitorTests.BoolModifyingVisitorInpactOnTokenStream1 [ OK ] VisitorTests.BoolModifyingVisitorInpactOnTokenStream1 (26 ms) [ RUN ] VisitorTests.BoolModifyingVisitorInpactOnTokenStream2 [ OK ] VisitorTests.BoolModifyingVisitorInpactOnTokenStream2 (27 ms) [ RUN ] VisitorTests.IntLiteralModifyingVisitorInpactOnTokenStream [ OK ] VisitorTests.IntLiteralModifyingVisitorInpactOnTokenStream (28 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerBoolLiteralExpression [ OK ] VisitorTests.CuckooFunctionReplacerBoolLiteralExpression (27 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerCuckooSyncEvent [ OK ] VisitorTests.CuckooFunctionReplacerCuckooSyncEvent (26 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerOrExpression1 [ OK ] VisitorTests.CuckooFunctionReplacerOrExpression1 (26 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerOrExpression2 [ OK ] VisitorTests.CuckooFunctionReplacerOrExpression2 (27 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerOrExpression3 [ OK ] VisitorTests.CuckooFunctionReplacerOrExpression3 (26 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerOrExpression4 [ OK ] VisitorTests.CuckooFunctionReplacerOrExpression4 (28 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerAndExpression1 [ OK ] VisitorTests.CuckooFunctionReplacerAndExpression1 (28 ms) [ RUN ] VisitorTests.IterableModifyingVisitorImpactOnTokenStream [ OK ] VisitorTests.IterableModifyingVisitorImpactOnTokenStream (27 ms) [ RUN ] VisitorTests.AndExpressionSwitcherAndExpression1 [ OK ] VisitorTests.AndExpressionSwitcherAndExpression1 (27 ms) [ RUN ] VisitorTests.AndExpressionSwitcherAndExpression2 [ OK ] VisitorTests.AndExpressionSwitcherAndExpression2 (26 ms) [ RUN ] VisitorTests.OrExpressionSwitcherOrExpression1 [ OK ] VisitorTests.OrExpressionSwitcherOrExpression1 (26 ms) [ RUN ] VisitorTests.OrExpressionSwitcherOrExpression2 [ OK ] VisitorTests.OrExpressionSwitcherOrExpression2 (27 ms) [ RUN ] VisitorTests.EqExpressionSwitcher [ OK ] VisitorTests.EqExpressionSwitcher (27 ms) [ RUN ] VisitorTests.DeletingVisitor1 [ OK ] VisitorTests.DeletingVisitor1 (24 ms) [ RUN ] VisitorTests.RuleModifierWorksWhenDeletingRules [ OK ] VisitorTests.RuleModifierWorksWhenDeletingRules (25 ms) [ RUN ] VisitorTests.DeletingVisitor2 [ OK ] VisitorTests.DeletingVisitor2 (24 ms) [ RUN ] VisitorTests.DeletingVisitor3 [ OK ] VisitorTests.DeletingVisitor3 (26 ms) [----------] 22 tests from VisitorTests (591 ms total) [----------] 1 test from YaraFileTests [ RUN ] YaraFileTests.ExpandRuleFromOrigin [ OK ] YaraFileTests.ExpandRuleFromOrigin (27 ms) [----------] 1 test from YaraFileTests (27 ms total) [----------] 4 tests from YaramodTests [ RUN ] YaramodTests.MultipleParsePhasesWithSingleYaramod [ OK ] YaramodTests.MultipleParsePhasesWithSingleYaramod (24 ms) [ RUN ] YaramodTests.AddMeta [ OK ] YaramodTests.AddMeta (24 ms) [ RUN ] YaramodTests.AddMetaToRulesWithComments [ OK ] YaramodTests.AddMetaToRulesWithComments (24 ms) [ RUN ] YaramodTests.SetMeta [ OK ] YaramodTests.SetMeta (24 ms) [----------] 4 tests from YaramodTests (98 ms total) [----------] Global test environment tear-down [==========] 398 tests from 9 test suites ran. (10374 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 10.948s 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' in '../libyaramod0_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 'libyaramod0-dbgsym' in '../libyaramod0-dbgsym_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-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 2025-11-17T02:50:30Z Finished -------- I: Built successfully +------------------------------------------------------------------------------+ | Changes Mon, 17 Nov 2025 02:50:31 +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 153a7a4b41118a7c98d8bf1059de548aac62878a 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 1498b5170bad063c2f3cde7abe84d3a9c48f4c48ffd32f4769f54b2d74bf4500 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 c16db0ca561f53408ca4b1db8ebb9274 8777 libs optional yaramod_3.21.0-1.1+b2_amd64.buildinfo +------------------------------------------------------------------------------+ | Buildinfo Mon, 17 Nov 2025 02:50:32 +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: Mon, 17 Nov 2025 02:50:29 +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 Mon, 17 Nov 2025 02:50:32 +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 Mon, 17 Nov 2025 02:50:35 +0000 | +------------------------------------------------------------------------------+ +------------------------------------------------------------------------------+ | Cleanup Mon, 17 Nov 2025 02:50:35 +0000 | +------------------------------------------------------------------------------+ Purging /build/reproducible-path Not cleaning session: cloned chroot in use +------------------------------------------------------------------------------+ | Summary Mon, 17 Nov 2025 02:50:37 +0000 | +------------------------------------------------------------------------------+ Build Architecture: amd64 Build Type: any Build-Space: 879120 Build-Time: 291 Distribution: unstable Host Architecture: amd64 Install-Time: 5 Job: /srv/rebuilderd/tmp/rebuilderdBS7scV/inputs/yaramod_3.21.0-1.1.dsc Machine Architecture: amd64 Package: yaramod Package-Time: 307 Source-Version: 3.21.0-1.1 Space: 879120 Status: successful Version: 3.21.0-1.1+b2 -------------------------------------------------------------------------------- Finished at 2025-11-17T02:50:30Z Build needed 00:05:07, 879120k disk space build artifacts stored in /srv/rebuilderd/tmp/rebuilderdBS7scV/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