=============================================================================== 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/rebuilderdjhZodZ/inputs/yaramod_3.21.0-1.1+b2_armhf.buildinfo Source: yaramod Version: 3.21.0-1.1 rebuilderd-worker node: codethink01-arm64 +------------------------------------------------------------------------------+ | Downloading sources Fri, 28 Nov 2025 20:59:29 +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/non-free-firmware Sources [6548 B] Get:10 https://deb.debian.org/debian trixie/main Sources [10.5 MB] 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 [95.1 kB] Get:13 https://deb.debian.org/debian trixie-updates/main Sources [2788 B] Get:14 https://deb.debian.org/debian trixie-proposed-updates/main Sources [35.8 kB] Get:15 https://deb.debian.org/debian trixie-backports/main Sources [104 kB] Get:16 https://deb.debian.org/debian trixie-backports/non-free-firmware Sources [1032 B] Get:17 https://deb.debian.org/debian forky/non-free-firmware Sources [7408 B] Get:18 https://deb.debian.org/debian forky/main Sources [10.7 MB] Get:19 https://deb.debian.org/debian sid/main Sources [11.2 MB] Get:20 https://deb.debian.org/debian sid/non-free-firmware Sources [9684 B] Get:21 https://deb.debian.org/debian experimental/non-free-firmware Sources [3052 B] Get:22 https://deb.debian.org/debian experimental/main Sources [365 kB] Fetched 33.8 MB in 33s (1037 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 Fri, 28 Nov 2025 21:00:02 +0000 | +------------------------------------------------------------------------------+ Rebuilding yaramod=3.21.0-1.1 in /srv/rebuilderd/tmp/rebuilderdjhZodZ/inputs now. + nice /usr/bin/debrebuild --buildresult=/srv/rebuilderd/tmp/rebuilderdjhZodZ/out --builder=sbuild+unshare --cache=/srv/rebuilderd/cache -- /srv/rebuilderd/tmp/rebuilderdjhZodZ/inputs/yaramod_3.21.0-1.1+b2_armhf.buildinfo /srv/rebuilderd/tmp/rebuilderdjhZodZ/inputs/yaramod_3.21.0-1.1+b2_armhf.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 armhf Packages [9712 kB] Get:4 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf Packages [9607 kB] Fetched 19.7 MB in 2s (8951 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 armhf man-db armhf 2.13.0-1 [1382 kB] Fetched 1382 kB in 0s (48.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpz5jo1aro/man-db_2.13.0-1_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf intltool-debian all 0.35.0+20060710.6 [22.9 kB] Fetched 22.9 kB in 0s (1214 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp_povtmao/intltool-debian_0.35.0+20060710.6_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libpam-runtime all 1.7.0-3 [248 kB] Fetched 248 kB in 0s (21.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp1u7n22ow/libpam-runtime_1.7.0-3_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf make armhf 4.4.1-1 [450 kB] Fetched 450 kB in 0s (14.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpaoq9lzev/make_4.4.1-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libseccomp2 armhf 2.5.5-2+b1 [46.3 kB] Fetched 46.3 kB in 0s (1979 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp9ctwzf9n/libseccomp2_2.5.5-2+b1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libsmartcols1 armhf 2.40.4-5 [125 kB] Fetched 125 kB in 0s (4035 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp72mdhvk5/libsmartcols1_2.40.4-5_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf python3.13-minimal armhf 3.13.2-1 [1842 kB] Fetched 1842 kB in 0s (47.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp9ma67nlf/python3.13-minimal_3.13.2-1_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf zlib1g armhf 1:1.3.dfsg+really1.3.1-1+b1 [75.2 kB] Fetched 75.2 kB in 0s (3956 kB/s) dpkg-name: info: moved 'zlib1g_1%3a1.3.dfsg+really1.3.1-1+b1_armhf.deb' to '/srv/rebuilderd/tmp/tmp3hq5bh80/zlib1g_1.3.dfsg+really1.3.1-1+b1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libpam-modules-bin armhf 1.7.0-3 [44.9 kB] Fetched 44.9 kB in 0s (2172 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3sx8uns6/libpam-modules-bin_1.7.0-3_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf netbase all 6.4 [12.8 kB] Fetched 12.8 kB in 0s (665 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpml3a8jbl/netbase_6.4_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf python3-inflect all 7.3.1-2 [32.4 kB] Fetched 32.4 kB in 0s (1552 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpefuj_gcx/python3-inflect_7.3.1-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libssl3t64 armhf 3.4.1-1 [1886 kB] Fetched 1886 kB in 0s (61.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmppcweyxti/libssl3t64_3.4.1-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libuuid1 armhf 2.40.4-5 [35.3 kB] Fetched 35.3 kB in 0s (1886 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp82v3nmk6/libuuid1_2.40.4-5_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf pkgconf-bin armhf 1.8.1-4 [29.2 kB] Fetched 29.2 kB in 0s (1594 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpi529tlcf/pkgconf-bin_1.8.1-4_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf readline-common all 8.2-6 [69.4 kB] Fetched 69.4 kB in 0s (3414 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpma9q24ku/readline-common_8.2-6_all.deb' Get:1 http://deb.debian.org/debian unstable/main armhf build-essential armhf 12.12 [4624 B] Fetched 4624 B in 0s (257 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpvs63k340/build-essential_12.12_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf dpkg armhf 1.22.18 [1494 kB] Fetched 1494 kB in 0s (48.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpmhsx2rkc/dpkg_1.22.18_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf libbz2-1.0 armhf 1.0.8-6 [35.0 kB] Fetched 35.0 kB in 0s (1728 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp9hzl4igo/libbz2-1.0_1.0.8-6_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libpython3.13-stdlib armhf 3.13.2-1 [1853 kB] Fetched 1853 kB in 0s (60.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpktiyl329/libpython3.13-stdlib_3.13.2-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libpipeline1 armhf 1.5.8-1 [35.0 kB] Fetched 35.0 kB in 0s (578 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmplah5h5i3/libpipeline1_1.5.8-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libgnutls30t64 armhf 3.8.9-2 [1382 kB] Fetched 1382 kB in 0s (60.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp2t5c934r/libgnutls30t64_3.8.9-2_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libnghttp3-9 armhf 1.8.0-1 [59.9 kB] Fetched 59.9 kB in 0s (2884 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpl8rq8738/libnghttp3-9_1.8.0-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf debianutils armhf 5.21 [90.8 kB] Fetched 90.8 kB in 0s (8806 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmppm1qdto4/debianutils_5.21_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf debhelper all 13.24.1 [920 kB] Fetched 920 kB in 0s (21.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpd3pv0re1/debhelper_13.24.1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf liblz4-1 armhf 1.10.0-4 [52.8 kB] Fetched 52.8 kB in 0s (2900 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpijpp5rx5/liblz4-1_1.10.0-4_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libnghttp2-14 armhf 1.64.0-1 [62.9 kB] Fetched 62.9 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp4g7vmguz/libnghttp2-14_1.64.0-1_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf tar armhf 1.35+dfsg-3.1 [794 kB] Fetched 794 kB in 0s (30.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpx7fahu0w/tar_1.35+dfsg-3.1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf cmake armhf 3.31.6-1 [5909 kB] Fetched 5909 kB in 0s (99.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3vfko0zx/cmake_3.31.6-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libaudit-common all 1:4.0.2-2 [12.7 kB] Fetched 12.7 kB in 0s (692 kB/s) dpkg-name: info: moved 'libaudit-common_1%3a4.0.2-2_all.deb' to '/srv/rebuilderd/tmp/tmpyn4cvx1j/libaudit-common_4.0.2-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libhogweed6t64 armhf 3.10.1-1 [322 kB] Fetched 322 kB in 0s (16.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpwx_bbsiz/libhogweed6t64_3.10.1-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf tzdata all 2025a-2 [259 kB] Fetched 259 kB in 0s (24.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpavsokc1y/tzdata_2025a-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf dh-autoreconf all 20 [17.1 kB] Fetched 17.1 kB in 0s (720 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpdz15zpwg/dh-autoreconf_20_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libdb5.3t64 armhf 5.3.28+dfsg2-9 [602 kB] Fetched 602 kB in 0s (28.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0ei8d7z_/libdb5.3t64_5.3.28+dfsg2-9_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf libyaml-0-2 armhf 0.2.5-2 [45.4 kB] Fetched 45.4 kB in 0s (2074 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpqdh3u91k/libyaml-0-2_0.2.5-2_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libarchive13t64 armhf 3.7.4-1.1 [306 kB] Fetched 306 kB in 0s (12.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpkgya7fky/libarchive13t64_3.7.4-1.1_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf libssh2-1t64 armhf 1.11.1-1 [227 kB] Fetched 227 kB in 0s (8297 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpg_51d2m_/libssh2-1t64_1.11.1-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf binutils-arm-linux-gnueabihf armhf 2.44-3 [833 kB] Fetched 833 kB in 0s (46.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpcnpx9p6g/binutils-arm-linux-gnueabihf_2.44-3_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf coreutils armhf 9.5-1 [2782 kB] Fetched 2782 kB in 0s (73.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpm8c6e1rq/coreutils_9.5-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf gettext armhf 0.23.1-1 [1560 kB] Fetched 1560 kB in 0s (95.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpr8h1jbkq/gettext_0.23.1-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libgdbm6t64 armhf 1.24-2 [71.1 kB] Fetched 71.1 kB in 0s (3869 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpvmmtg4hr/libgdbm6t64_1.24-2_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libidn2-0 armhf 2.3.8-1 [105 kB] Fetched 105 kB in 0s (5408 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpnamxaq0e/libidn2-0_2.3.8-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libc6 armhf 2.41-4 [2245 kB] Fetched 2245 kB in 0s (111 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp887bvdj_/libc6_2.41-4_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libstdc++6 armhf 14.2.0-17 [607 kB] Fetched 607 kB in 0s (28.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpiax8ug5w/libstdc++6_14.2.0-17_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libgcc-14-dev armhf 14.2.0-17 [768 kB] Fetched 768 kB in 0s (55.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp5c2_un3g/libgcc-14-dev_14.2.0-17_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf debconf all 1.5.90 [121 kB] Fetched 121 kB in 0s (1739 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpyveu38rk/debconf_1.5.90_all.deb' Get:1 http://deb.debian.org/debian unstable/main armhf libisl23 armhf 0.27-1 [517 kB] Fetched 517 kB in 0s (23.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp5kqqeyov/libisl23_0.27-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libdebhelper-perl all 13.24.1 [90.9 kB] Fetched 90.9 kB in 0s (4262 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpofr33a2f/libdebhelper-perl_13.24.1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf dwz armhf 0.15-1+b2 [106 kB] Fetched 106 kB in 0s (5146 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmptsx0betx/dwz_0.15-1+b2_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf python3.13-dev armhf 3.13.2-1 [505 kB] Fetched 505 kB in 0s (24.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpj8ydd3b0/python3.13-dev_3.13.2-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf 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/tmp2y9j644e/python3-zipp_3.21.0-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf python3-dev armhf 3.13.2-2 [26.1 kB] Fetched 26.1 kB in 0s (1214 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpsqrkw_rx/python3-dev_3.13.2-2_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf binutils armhf 2.44-3 [69.1 kB] Fetched 69.1 kB in 0s (3561 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp94rfjakq/binutils_2.44-3_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libkrb5support0 armhf 1.21.3-4 [30.3 kB] Fetched 30.3 kB in 0s (1464 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpwihbgjz5/libkrb5support0_1.21.3-4_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libunistring5 armhf 1.3-1 [444 kB] Fetched 444 kB in 0s (21.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpdans7b30/libunistring5_1.3-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf ncurses-bin armhf 6.5+20250216-2 [429 kB] Fetched 429 kB in 0s (31.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp_o4qcxgc/ncurses-bin_6.5+20250216-2_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf libfmt-dev armhf 10.1.1+ds1-4 [177 kB] Fetched 177 kB in 0s (14.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpv7mo29rn/libfmt-dev_10.1.1+ds1-4_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf python3-charset-normalizer armhf 3.4.1-1+b1 [118 kB] Fetched 118 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6_im357k/python3-charset-normalizer_3.4.1-1+b1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libpam-modules armhf 1.7.0-3 [162 kB] Fetched 162 kB in 0s (8657 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmphlbgchll/libpam-modules_1.7.0-3_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf python3-typing-extensions all 4.12.2-2 [73.0 kB] Fetched 73.0 kB in 0s (3813 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp02ljevf0/python3-typing-extensions_4.12.2-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libxml2 armhf 2.12.7+dfsg+really2.9.14-0.2+b2 [605 kB] Fetched 605 kB in 0s (52.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpg3gak3_5/libxml2_2.12.7+dfsg+really2.9.14-0.2+b2_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf groff-base armhf 1.23.0-7 [1095 kB] Fetched 1095 kB in 0s (40.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpnvy_iy3s/groff-base_1.23.0-7_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libexpat1-dev armhf 2.6.4-1 [140 kB] Fetched 140 kB in 0s (7152 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpbraogo32/libexpat1-dev_2.6.4-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf googletest all 1.16.0-1 [517 kB] Fetched 517 kB in 0s (24.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpfp7prmep/googletest_1.16.0-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libelf1t64 armhf 0.192-4 [184 kB] Fetched 184 kB in 0s (8235 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpxk_uqlcb/libelf1t64_0.192-4_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libgtest-dev armhf 1.16.0-1 [246 kB] Fetched 246 kB in 0s (12.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpav4vcg3_/libgtest-dev_1.16.0-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libuchardet0 armhf 0.0.8-1+b2 [65.6 kB] Fetched 65.6 kB in 0s (3164 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp573wehnq/libuchardet0_0.0.8-1+b2_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libzstd1 armhf 1.5.6+dfsg-2 [260 kB] Fetched 260 kB in 0s (11.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpyvc4_e67/libzstd1_1.5.6+dfsg-2_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf base-files armhf 13.7 [72.9 kB] Fetched 72.9 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpufi6q6r5/base-files_13.7_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libmpc3 armhf 1.3.1-1+b3 [43.7 kB] Fetched 43.7 kB in 0s (2652 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpxjui3_27/libmpc3_1.3.1-1+b3_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf sensible-utils all 0.0.24 [24.8 kB] Fetched 24.8 kB in 0s (1484 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpr91qjf29/sensible-utils_0.0.24_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf g++ armhf 4:14.2.0-1 [1324 B] Fetched 1324 B in 0s (78.7 kB/s) dpkg-name: info: moved 'g++_4%3a14.2.0-1_armhf.deb' to '/srv/rebuilderd/tmp/tmpun963hw9/g++_14.2.0-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf patch armhf 2.7.6-7 [125 kB] Fetched 125 kB in 0s (6561 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpqorfv_s4/patch_2.7.6-7_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libtool all 2.5.4-4 [539 kB] Fetched 539 kB in 0s (46.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpwq3rzl7b/libtool_2.5.4-4_all.deb' Get:1 http://deb.debian.org/debian unstable/main armhf findutils armhf 4.10.0-3 [687 kB] Fetched 687 kB in 0s (56.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpz0f7ygq8/findutils_4.10.0-3_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libk5crypto3 armhf 1.21.3-4 [75.8 kB] Fetched 75.8 kB in 0s (7441 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp72ylyjyi/libk5crypto3_1.21.3-4_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libc-bin armhf 2.41-4 [522 kB] Fetched 522 kB in 0s (24.9 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpmulbuo08/libc-bin_2.41-4_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libpython3-stdlib armhf 3.13.2-2 [10.1 kB] Fetched 10.1 kB in 0s (513 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp2jyiuomb/libpython3-stdlib_3.13.2-2_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf python3-jaraco.functools all 4.1.0-1 [12.0 kB] Fetched 12.0 kB in 0s (656 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpd6fa5iun/python3-jaraco.functools_4.1.0-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf cpp-14 armhf 14.2.0-17 [1284 B] Fetched 1284 B in 0s (61.7 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmppnmlh97c/cpp-14_14.2.0-17_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf zlib1g-dev armhf 1:1.3.dfsg+really1.3.1-1+b1 [905 kB] Fetched 905 kB in 0s (25.7 MB/s) dpkg-name: info: moved 'zlib1g-dev_1%3a1.3.dfsg+really1.3.1-1+b1_armhf.deb' to '/srv/rebuilderd/tmp/tmpazt0o0de/zlib1g-dev_1.3.dfsg+really1.3.1-1+b1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libreadline8t64 armhf 8.2-6 [146 kB] Fetched 146 kB in 0s (6866 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjye67ksv/libreadline8t64_8.2-6_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf perl armhf 5.40.1-2 [267 kB] Fetched 267 kB in 0s (19.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpx41zpb6u/perl_5.40.1-2_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf gcc-arm-linux-gnueabihf armhf 4:14.2.0-1 [1440 B] Fetched 1440 B in 0s (73.4 kB/s) dpkg-name: info: moved 'gcc-arm-linux-gnueabihf_4%3a14.2.0-1_armhf.deb' to '/srv/rebuilderd/tmp/tmpzw23vki1/gcc-arm-linux-gnueabihf_14.2.0-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libselinux1 armhf 3.8-4 [74.5 kB] Fetched 74.5 kB in 0s (3322 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpprzvq9nx/libselinux1_3.8-4_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf libpkgconf3 armhf 1.8.1-4 [31.8 kB] Fetched 31.8 kB in 0s (481 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpxwitnjfe/libpkgconf3_1.8.1-4_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libuv1t64 armhf 1.50.0-2 [140 kB] Fetched 140 kB in 0s (5794 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpltf3l46q/libuv1t64_1.50.0-2_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libgomp1 armhf 14.2.0-17 [111 kB] Fetched 111 kB in 0s (3744 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp38k1mwqo/libgomp1_14.2.0-17_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf python3-debian all 1.0.0 [120 kB] Fetched 120 kB in 0s (6116 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp1fii1c4o/python3-debian_1.0.0_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf gcc armhf 4:14.2.0-1 [5140 B] Fetched 5140 B in 0s (234 kB/s) dpkg-name: info: moved 'gcc_4%3a14.2.0-1_armhf.deb' to '/srv/rebuilderd/tmp/tmpm3nl9pje/gcc_14.2.0-1_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf libfmt10 armhf 10.1.1+ds1-4 [118 kB] Fetched 118 kB in 0s (5237 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpzkc4ub2l/libfmt10_10.1.1+ds1-4_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf sed armhf 4.9-2 [321 kB] Fetched 321 kB in 0s (15.9 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmps625zb8d/sed_4.9-2_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libabsl-dev armhf 20240722.0-1.5 [1241 kB] Fetched 1241 kB in 0s (38.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpru5rfn85/libabsl-dev_20240722.0-1.5_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libasan8 armhf 14.2.0-17 [2581 kB] Fetched 2581 kB in 0s (69.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp_u_voxcm/libasan8_14.2.0-17_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libpython3.13-minimal armhf 3.13.2-1 [845 kB] Fetched 845 kB in 0s (32.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3mu8mwxo/libpython3.13-minimal_3.13.2-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf dh-python all 6.20250308 [115 kB] Fetched 115 kB in 0s (11.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpomceu492/dh-python_6.20250308_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libkrb5-3 armhf 1.21.3-4 [285 kB] Fetched 285 kB in 0s (12.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp_edao7c5/libkrb5-3_1.21.3-4_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf nlohmann-json3-dev all 3.11.3-2 [262 kB] Fetched 262 kB in 0s (11.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmple1qk39s/nlohmann-json3-dev_3.11.3-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf grep armhf 3.11-4 [420 kB] Fetched 420 kB in 0s (20.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpxm8n2ifg/grep_3.11-4_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libdpkg-perl all 1.22.18 [649 kB] Fetched 649 kB in 0s (26.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpemm8dwl6/libdpkg-perl_1.22.18_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libmagic1t64 armhf 1:5.45-3+b1 [98.5 kB] Fetched 98.5 kB in 0s (4399 kB/s) dpkg-name: info: moved 'libmagic1t64_1%3a5.45-3+b1_armhf.deb' to '/srv/rebuilderd/tmp/tmp2c_b8u9r/libmagic1t64_5.45-3+b1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libudev1 armhf 257.4-1 [140 kB] Fetched 140 kB in 0s (9168 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp8meu35j4/libudev1_257.4-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf python3-pkg-resources all 75.8.0-1 [222 kB] Fetched 222 kB in 0s (10.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpcidjcjt7/python3-pkg-resources_75.8.0-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf bash armhf 5.2.37-1.1 [1433 kB] Fetched 1433 kB in 0s (40.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpj5slpq2r/bash_5.2.37-1.1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libgssapi-krb5-2 armhf 1.21.3-4 [116 kB] Fetched 116 kB in 0s (5169 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpbx094glm/libgssapi-krb5-2_1.21.3-4_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libcrypt1 armhf 1:4.4.38-1 [95.6 kB] Fetched 95.6 kB in 0s (4247 kB/s) dpkg-name: info: moved 'libcrypt1_1%3a4.4.38-1_armhf.deb' to '/srv/rebuilderd/tmp/tmp74p38nlg/libcrypt1_4.4.38-1_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf libacl1 armhf 2.3.2-2+b1 [30.0 kB] Fetched 30.0 kB in 0s (1454 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpg1b3dv43/libacl1_2.3.2-2+b1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libsystemd0 armhf 257.4-1 [415 kB] Fetched 415 kB in 0s (16.9 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6ryyd6i9/libsystemd0_257.4-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libabsl20240722 armhf 20240722.0-1.5 [458 kB] Fetched 458 kB in 0s (16.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpaoykc_ts/libabsl20240722_20240722.0-1.5_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libffi8 armhf 3.4.7-1 [20.3 kB] Fetched 20.3 kB in 0s (857 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp54d0gt4n/libffi8_3.4.7-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf python3.13 armhf 3.13.2-1 [745 kB] Fetched 745 kB in 0s (35.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpdsekg0a8/python3.13_3.13.2-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libc-dev-bin armhf 2.41-4 [57.0 kB] Fetched 57.0 kB in 0s (2906 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpft69oh96/libc-dev-bin_2.41-4_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libatomic1 armhf 14.2.0-17 [7184 B] Fetched 7184 B in 0s (338 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpk6m46ska/libatomic1_14.2.0-17_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libc6-dev armhf 2.41-4 [1326 kB] Fetched 1326 kB in 0s (42.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpqb7m7we9/libc6-dev_2.41-4_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf binutils-common armhf 2.44-3 [2509 kB] Fetched 2509 kB in 0s (57.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpnqx8qlw6/binutils-common_2.44-3_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libre2-11 armhf 20240702-3+b1 [140 kB] Fetched 140 kB in 0s (7034 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpi_r9zc4d/libre2-11_20240702-3+b1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf file armhf 1:5.45-3+b1 [42.3 kB] Fetched 42.3 kB in 0s (1990 kB/s) dpkg-name: info: moved 'file_1%3a5.45-3+b1_armhf.deb' to '/srv/rebuilderd/tmp/tmp8h8mjeh2/file_5.45-3+b1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libsqlite3-0 armhf 3.46.1-2 [802 kB] Fetched 802 kB in 0s (56.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp1rogvaqo/libsqlite3-0_3.46.1-2_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libpam0g armhf 1.7.0-3 [64.3 kB] Fetched 64.3 kB in 0s (3288 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpbxnzkmho/libpam0g_1.7.0-3_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libpython3.13 armhf 3.13.2-1 [1868 kB] Fetched 1868 kB in 0s (57.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3suyymsi/libpython3.13_3.13.2-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf dh-strip-nondeterminism all 1.14.1-2 [8620 B] Fetched 8620 B in 0s (480 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp2kxa7dj2/dh-strip-nondeterminism_1.14.1-2_all.deb' Get:1 http://deb.debian.org/debian unstable/main armhf libjs-underscore all 1.13.4~dfsg+~1.11.4-3 [116 kB] Fetched 116 kB in 0s (4362 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0iv8bsyh/libjs-underscore_1.13.4~dfsg+~1.11.4-3_all.deb' Get:1 http://deb.debian.org/debian unstable/main armhf po-debconf all 1.0.21+nmu1 [248 kB] Fetched 248 kB in 0s (11.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpkcwdg5is/po-debconf_1.0.21+nmu1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libcrypt-dev armhf 1:4.4.38-1 [125 kB] Fetched 125 kB in 0s (11.9 MB/s) dpkg-name: info: moved 'libcrypt-dev_1%3a4.4.38-1_armhf.deb' to '/srv/rebuilderd/tmp/tmpv_c0td76/libcrypt-dev_4.4.38-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf cpp-14-arm-linux-gnueabihf armhf 14.2.0-17 [8236 kB] Fetched 8236 kB in 0s (105 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp68w8b1sx/cpp-14-arm-linux-gnueabihf_14.2.0-17_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf python3-setuptools all 75.8.0-1 [724 kB] Fetched 724 kB in 0s (32.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp82rz5ojh/python3-setuptools_75.8.0-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf gcc-14-arm-linux-gnueabihf armhf 14.2.0-17 [15.8 MB] Fetched 15.8 MB in 0s (106 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpqmwm8lqs/gcc-14-arm-linux-gnueabihf_14.2.0-17_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf pkg-kde-tools all 0.18.12 [89.1 kB] Fetched 89.1 kB in 0s (3314 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpuu7_qo4l/pkg-kde-tools_0.18.12_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf dpkg-dev all 1.22.18 [1338 kB] Fetched 1338 kB in 0s (41.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpohr_zf4b/dpkg-dev_1.22.18_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libgcc-s1 armhf 14.2.0-17 [36.9 kB] Fetched 36.9 kB in 0s (1979 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp23ehtsrt/libgcc-s1_14.2.0-17_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libsframe1 armhf 2.44-3 [75.8 kB] Fetched 75.8 kB in 0s (4012 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp615sjf2m/libsframe1_2.44-3_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libsasl2-modules-db armhf 2.1.28+dfsg1-9 [18.5 kB] Fetched 18.5 kB in 0s (989 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpfd6m0esh/libsasl2-modules-db_2.1.28+dfsg1-9_armhf.deb' Downloading dependency 1 of 225: man-db:armhf=2.13.0-1 Downloading dependency 2 of 225: intltool-debian:armhf=0.35.0+20060710.6 Downloading dependency 3 of 225: libpam-runtime:armhf=1.7.0-3 Downloading dependency 4 of 225: make:armhf=4.4.1-1 Downloading dependency 5 of 225: libseccomp2:armhf=2.5.5-2+b1 Downloading dependency 6 of 225: libsmartcols1:armhf=2.40.4-5 Downloading dependency 7 of 225: python3.13-minimal:armhf=3.13.2-1 Downloading dependency 8 of 225: zlib1g:armhf=1:1.3.dfsg+really1.3.1-1+b1 Downloading dependency 9 of 225: libpam-modules-bin:armhf=1.7.0-3 Downloading dependency 10 of 225: netbase:armhf=6.4 Downloading dependency 11 of 225: python3-inflect:armhf=7.3.1-2 Downloading dependency 12 of 225: libssl3t64:armhf=3.4.1-1 Downloading dependency 13 of 225: libuuid1:armhf=2.40.4-5 Downloading dependency 14 of 225: pkgconf-bin:armhf=1.8.1-4 Downloading dependency 15 of 225: readline-common:armhf=8.2-6 Downloading dependency 16 of 225: build-essential:armhf=12.12 Downloading dependency 17 of 225: dpkg:armhf=1.22.18 Downloading dependency 18 of 225: libbz2-1.0:armhf=1.0.8-6 Downloading dependency 19 of 225: libpython3.13-stdlib:armhf=3.13.2-1 Downloading dependency 20 of 225: libpipeline1:armhf=1.5.8-1 Downloading dependency 21 of 225: libgnutls30t64:armhf=3.8.9-2 Downloading dependency 22 of 225: libnghttp3-9:armhf=1.8.0-1 Downloading dependency 23 of 225: debianutils:armhf=5.21 Downloading dependency 24 of 225: debhelper:armhf=13.24.1 Downloading dependency 25 of 225: liblz4-1:armhf=1.10.0-4 Downloading dependency 26 of 225: libnghttp2-14:armhf=1.64.0-1 Downloading dependency 27 of 225: tar:armhf=1.35+dfsg-3.1 Downloading dependency 28 of 225: cmake:armhf=3.31.6-1 Downloading dependency 29 of 225: libaudit-common:armhf=1:4.0.2-2 Downloading dependency 30 of 225: libhogweed6t64:armhf=3.10.1-1 Downloading dependency 31 of 225: tzdata:armhf=2025a-2 Downloading dependency 32 of 225: dh-autoreconf:armhf=20 Downloading dependency 33 of 225: libdb5.3t64:armhf=5.3.28+dfsg2-9 Downloading dependency 34 of 225: libyaml-0-2:armhf=0.2.5-2 Downloading dependency 35 of 225: libarchive13t64:armhf=3.7.4-1.1 Downloading dependency 36 of 225: libssh2-1t64:armhf=1.11.1-1 Downloading dependency 37 of 225: binutils-arm-linux-gnueabihf:armhf=2.44-3 Downloading dependency 38 of 225: coreutils:armhf=9.5-1 Downloading dependency 39 of 225: gettext:armhf=0.23.1-1 Downloading dependency 40 of 225: libgdbm6t64:armhf=1.24-2 Downloading dependency 41 of 225: libidn2-0:armhf=2.3.8-1 Downloading dependency 42 of 225: libc6:armhf=2.41-4 Downloading dependency 43 of 225: libstdc++6:armhf=14.2.0-17 Downloading dependency 44 of 225: libgcc-14-dev:armhf=14.2.0-17 Downloading dependency 45 of 225: debconf:armhf=1.5.90 Downloading dependency 46 of 225: libisl23:armhf=0.27-1 Downloading dependency 47 of 225: libdebhelper-perl:armhf=13.24.1 Downloading dependency 48 of 225: dwz:armhf=0.15-1+b2 Downloading dependency 49 of 225: python3.13-dev:armhf=3.13.2-1 Downloading dependency 50 of 225: python3-zipp:armhf=3.21.0-1 Downloading dependency 51 of 225: python3-dev:armhf=3.13.2-2 Downloading dependency 52 of 225: binutils:armhf=2.44-3 Downloading dependency 53 of 225: libkrb5support0:armhf=1.21.3-4 Downloading dependency 54 of 225: libunistring5:armhf=1.3-1 Downloading dependency 55 of 225: ncurses-bin:armhf=6.5+20250216-2 Downloading dependency 56 of 225: libfmt-dev:armhf=10.1.1+ds1-4 Downloading dependency 57 of 225: python3-charset-normalizer:armhf=3.4.1-1+b1 Downloading dependency 58 of 225: libpam-modules:armhf=1.7.0-3 Downloading dependency 59 of 225: python3-typing-extensions:armhf=4.12.2-2 Downloading dependency 60 of 225: libxml2:armhf=2.12.7+dfsg+really2.9.14-0.2+b2 Downloading dependency 61 of 225: groff-base:armhf=1.23.0-7 Downloading dependency 62 of 225: libexpat1-dev:armhf=2.6.4-1 Downloading dependency 63 of 225: googletest:armhf=1.16.0-1 Downloading dependency 64 of 225: libelf1t64:armhf=0.192-4 Downloading dependency 65 of 225: libgtest-dev:armhf=1.16.0-1 Downloading dependency 66 of 225: libuchardet0:armhf=0.0.8-1+b2 Downloading dependency 67 of 225: libzstd1:armhf=1.5.6+dfsg-2 Downloading dependency 68 of 225: base-files:armhf=13.7 Downloading dependency 69 of 225: libmpc3:armhf=1.3.1-1+b3 Downloading dependency 70 of 225: sensible-utils:armhf=0.0.24 Downloading dependency 71 of 225: g++:armhf=4:14.2.0-1 Downloading dependency 72 of 225: patch:armhf=2.7.6-7 Downloading dependency 73 of 225: libtool:armhf=2.5.4-4 Downloading dependency 74 of 225: findutils:armhf=4.10.0-3 Downloading dependency 75 of 225: libk5crypto3:armhf=1.21.3-4 Downloading dependency 76 of 225: libc-bin:armhf=2.41-4 Downloading dependency 77 of 225: libpython3-stdlib:armhf=3.13.2-2 Downloading dependency 78 of 225: python3-jaraco.functools:armhf=4.1.0-1 Downloading dependency 79 of 225: cpp-14:armhf=14.2.0-17 Downloading dependency 80 of 225: zlib1g-dev:armhf=1:1.3.dfsg+really1.3.1-1+b1 Downloading dependency 81 of 225: libreadline8t64:armhf=8.2-6 Downloading dependency 82 of 225: perl:armhf=5.40.1-2 Downloading dependency 83 of 225: gcc-arm-linux-gnueabihf:armhf=4:14.2.0-1 Downloading dependency 84 of 225: libselinux1:armhf=3.8-4 Downloading dependency 85 of 225: libpkgconf3:armhf=1.8.1-4 Downloading dependency 86 of 225: libuv1t64:armhf=1.50.0-2 Downloading dependency 87 of 225: libgomp1:armhf=14.2.0-17 Downloading dependency 88 of 225: python3-debian:armhf=1.0.0 Downloading dependency 89 of 225: gcc:armhf=4:14.2.0-1 Downloading dependency 90 of 225: libfmt10:armhf=10.1.1+ds1-4 Downloading dependency 91 of 225: sed:armhf=4.9-2 Downloading dependency 92 of 225: libabsl-dev:armhf=20240722.0-1.5 Downloading dependency 93 of 225: libasan8:armhf=14.2.0-17 Downloading dependency 94 of 225: libpython3.13-minimal:armhf=3.13.2-1 Downloading dependency 95 of 225: dh-python:armhf=6.20250308 Downloading dependency 96 of 225: libkrb5-3:armhf=1.21.3-4 Downloading dependency 97 of 225: nlohmann-json3-dev:armhf=3.11.3-2 Downloading dependency 98 of 225: grep:armhf=3.11-4 Downloading dependency 99 of 225: libdpkg-perl:armhf=1.22.18 Downloading dependency 100 of 225: libmagic1t64:armhf=1:5.45-3+b1 Downloading dependency 101 of 225: libudev1:armhf=257.4-1 Downloading dependency 102 of 225: python3-pkg-resources:armhf=75.8.0-1 Downloading dependency 103 of 225: bash:armhf=5.2.37-1.1 Downloading dependency 104 of 225: libgssapi-krb5-2:armhf=1.21.3-4 Downloading dependency 105 of 225: libcrypt1:armhf=1:4.4.38-1 Downloading dependency 106 of 225: libacl1:armhf=2.3.2-2+b1 Downloading dependency 107 of 225: libsystemd0:armhf=257.4-1 Downloading dependency 108 of 225: libabsl20240722:armhf=20240722.0-1.5 Downloading dependency 109 of 225: libffi8:armhf=3.4.7-1 Downloading dependency 110 of 225: python3.13:armhf=3.13.2-1 Downloading dependency 111 of 225: libc-dev-bin:armhf=2.41-4 Downloading dependency 112 of 225: libatomic1:armhf=14.2.0-17 Downloading dependency 113 of 225: libc6-dev:armhf=2.41-4 Downloading dependency 114 of 225: binutils-common:armhf=2.44-3 Downloading dependency 115 of 225: libre2-11:armhf=20240702-3+b1 Downloading dependency 116 of 225: file:armhf=1:5.45-3+b1 Downloading dependency 117 of 225: libsqlite3-0:armhf=3.46.1-2 Downloading dependency 118 of 225: libpam0g:armhf=1.7.0-3 Downloading dependency 119 of 225: libpython3.13:armhf=3.13.2-1 Downloading dependency 120 of 225: dh-strip-nondeterminism:armhf=1.14.1-2 Downloading dependency 121 of 225: libjs-underscore:armhf=1.13.4~dfsg+~1.11.4-3 Downloading dependency 122 of 225: po-debconf:armhf=1.0.21+nmu1 Downloading dependency 123 of 225: libcrypt-dev:armhf=1:4.4.38-1 Downloading dependency 124 of 225: cpp-14-arm-linux-gnueabihf:armhf=14.2.0-17 Downloading dependency 125 of 225: python3-setuptools:armhf=75.8.0-1 Downloading dependency 126 of 225: gcc-14-arm-linux-gnueabihf:armhf=14.2.0-17 Downloading dependency 127 of 225: pkg-kde-tools:armhf=0.18.12 Downloading dependency 128 of 225: dpkg-dev:armhf=1.22.18 Downloading dependency 129 of 225: libgcc-s1:armhf=14.2.0-17 Downloading dependency 130 of 225: libsframe1:armhf=2.44-3 Downloading dependency 131 of 225: libsasl2-modules-db:armhf=2.1.28+dfsg1-9 Downloading dependency 132 of 225: linux-libc-dev:armhf=6.12.17-1Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf linux-libc-dev all 6.12.17-1 [2526 kB] Fetched 2526 kB in 0s (73.9 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpciivgcvi/linux-libc-dev_6.12.17-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libexpat1 armhf 2.6.4-1 [83.5 kB] Fetched 83.5 kB in 0s (4425 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmppcd6ic_p/libexpat1_2.6.4-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf gcc-14-base armhf 14.2.0-17 [49.1 kB] Fetched 49.1 kB in 0s (2410 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpra8qvghs/gcc-14-base_14.2.0-17_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf bsdutils armhf 1:2.40.4-5 [98.0 kB] Fetched 98.0 kB in 0s (4389 kB/s) dpkg-name: info: moved 'bsdutils_1%3a2.40.4-5_armhf.deb' to '/srv/rebuilderd/tmp/tmpqr8ba8ul/bsdutils_2.40.4-5_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf g++-14-arm-linux-gnueabihf armhf 14.2.0-17 [9061 kB] Fetched 9061 kB in 0s (117 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpy8nlcjvs/g++-14-arm-linux-gnueabihf_14.2.0-17_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf automake all 1:1.17-3 [862 kB] Fetched 862 kB in 0s (31.0 MB/s) dpkg-name: info: moved 'automake_1%3a1.17-3_all.deb' to '/srv/rebuilderd/tmp/tmpsp9fok9u/automake_1.17-3_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libpython3-dev armhf 3.13.2-2 [10.3 kB] Fetched 10.3 kB in 0s (876 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpfnhyx33_/libpython3-dev_3.13.2-2_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libubsan1 armhf 14.2.0-17 [1040 kB] Fetched 1040 kB in 0s (47.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6t7l3og9/libubsan1_14.2.0-17_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf librhash1 armhf 1.4.5-1 [143 kB] Fetched 143 kB in 0s (7356 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3024_7hd/librhash1_1.4.5-1_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf python3-jaraco.context all 6.0.1-1 [8276 B] Fetched 8276 B in 0s (448 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpqrdgc8o2/python3-jaraco.context_6.0.1-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libjs-jquery all 3.6.1+dfsg+~3.5.14-1 [326 kB] Fetched 326 kB in 0s (16.9 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpc4_kk10i/libjs-jquery_3.6.1+dfsg+~3.5.14-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf media-types all 13.0.0 [29.3 kB] Fetched 29.3 kB in 0s (1373 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmplju_5k9b/media-types_13.0.0_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf cmake-data all 3.31.6-1 [2268 kB] Fetched 2268 kB in 0s (61.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpcahtct9u/cmake-data_3.31.6-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main armhf pkgconf armhf 1.8.1-4 [26.1 kB] Fetched 26.1 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0fcx6r9j/pkgconf_1.8.1-4_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf gcc-14 armhf 14.2.0-17 [507 kB] Fetched 507 kB in 0s (24.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpren1svzl/gcc-14_14.2.0-17_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libre2-dev armhf 20240702-3+b1 [205 kB] Fetched 205 kB in 0s (9121 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpq7kuc46s/libre2-dev_20240702-3+b1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf base-passwd armhf 3.6.6 [52.0 kB] Fetched 52.0 kB in 0s (2923 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmphvzwm2mf/base-passwd_3.6.6_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libmount1 armhf 2.40.4-5 [181 kB] Fetched 181 kB in 0s (16.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpa508mdzt/libmount1_2.40.4-5_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libpcre2-8-0 armhf 10.45-1 [259 kB] Fetched 259 kB in 0s (12.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpajyr2nfb/libpcre2-8-0_10.45-1_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf rpcsvc-proto armhf 1.4.3-1 [58.7 kB] Fetched 58.7 kB in 0s (5719 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpdire3bu0/rpcsvc-proto_1.4.3-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf gettext-base armhf 0.23.1-1 [238 kB] Fetched 238 kB in 0s (20.9 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp21tfwlvr/gettext-base_0.23.1-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf autopoint all 0.23.1-1 [770 kB] Fetched 770 kB in 0s (33.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp5u0vrhj3/autopoint_0.23.1-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main armhf libxxhash0 armhf 0.8.3-2 [31.2 kB] Fetched 31.2 kB in 0s (1804 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpkhyvwkp3/libxxhash0_0.8.3-2_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf libmd0 armhf 1.1.0-2+b1 [31.9 kB] Fetched 31.9 kB in 0s (2024 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3a_xhho9/libmd0_1.1.0-2+b1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libstdc++-14-dev armhf 14.2.0-17 [2378 kB] Fetched 2378 kB in 0s (65.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpsmw0hmnj/libstdc++-14-dev_14.2.0-17_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libkeyutils1 armhf 1.6.3-4 [8096 B] Fetched 8096 B in 0s (519 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp7qa2mcxg/libkeyutils1_1.6.3-4_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf pybind11-dev all 2.13.6-2 [205 kB] Fetched 205 kB in 0s (10.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3od86si6/pybind11-dev_2.13.6-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf init-system-helpers all 1.68 [38.7 kB] Fetched 38.7 kB in 0s (2126 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpns2l7w63/init-system-helpers_1.68_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf util-linux armhf 2.40.4-5 [1114 kB] Fetched 1114 kB in 0s (42.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjs_f6prf/util-linux_2.40.4-5_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf bsdextrautils armhf 2.40.4-5 [84.9 kB] Fetched 84.9 kB in 0s (2759 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmppw6zr52a/bsdextrautils_2.40.4-5_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libfile-stripnondeterminism-perl all 1.14.1-2 [19.7 kB] Fetched 19.7 kB in 0s (370 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0zotix24/libfile-stripnondeterminism-perl_1.14.1-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf g++-arm-linux-gnueabihf armhf 4:14.2.0-1 [1204 B] Fetched 1204 B in 0s (73.2 kB/s) dpkg-name: info: moved 'g++-arm-linux-gnueabihf_4%3a14.2.0-1_armhf.deb' to '/srv/rebuilderd/tmp/tmp51xf9fgw/g++-arm-linux-gnueabihf_14.2.0-1_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf dash armhf 0.5.12-12 [90.4 kB] Fetched 90.4 kB in 0s (5214 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp41n_qe12/dash_0.5.12-12_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf bzip2 armhf 1.0.8-6 [39.4 kB] Fetched 39.4 kB in 0s (2334 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3e2wf_2s/bzip2_1.0.8-6_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libjs-sphinxdoc all 8.1.3-5 [30.5 kB] Fetched 30.5 kB in 0s (2449 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpmn_1i34w/libjs-sphinxdoc_8.1.3-5_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libcom-err2 armhf 1.47.2-1 [23.3 kB] Fetched 23.3 kB in 0s (1412 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp9b8ak3ph/libcom-err2_1.47.2-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libcurl4t64 armhf 8.12.1-3 [320 kB] Fetched 320 kB in 0s (16.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp_ly_g4zj/libcurl4t64_8.12.1-3_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf g++-14 armhf 14.2.0-17 [22.1 kB] Fetched 22.1 kB in 0s (1347 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0u_26vs1/g++-14_14.2.0-17_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf liblzma5 armhf 5.6.4-1 [267 kB] Fetched 267 kB in 0s (14.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpt6r3wfll/liblzma5_5.6.4-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libbinutils armhf 2.44-3 [339 kB] Fetched 339 kB in 0s (17.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpipp8xq8o/libbinutils_2.44-3_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libjsoncpp26 armhf 1.9.6-3 [69.9 kB] Fetched 69.9 kB in 0s (3970 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp00uwrvq1/libjsoncpp26_1.9.6-3_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libnettle8t64 armhf 3.10.1-1 [312 kB] Fetched 312 kB in 0s (16.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6lppsq1s/libnettle8t64_3.10.1-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf xz-utils armhf 5.6.4-1 [553 kB] Fetched 553 kB in 0s (25.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpkwvg7u1k/xz-utils_5.6.4-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf python3-more-itertools all 10.6.0-1 [65.3 kB] Fetched 65.3 kB in 0s (3899 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpiptubjrh/python3-more-itertools_10.6.0-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf diffutils armhf 1:3.10-2 [370 kB] Fetched 370 kB in 0s (18.0 MB/s) dpkg-name: info: moved 'diffutils_1%3a3.10-2_armhf.deb' to '/srv/rebuilderd/tmp/tmp5mcruo73/diffutils_3.10-2_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf libpsl5t64 armhf 0.21.2-1.1+b1 [55.8 kB] Fetched 55.8 kB in 0s (3312 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp2_p61ura/libpsl5t64_0.21.2-1.1+b1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libpython3.13-dev armhf 3.13.2-1 [3788 kB] Fetched 3788 kB in 0s (79.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpis_9_c2c/libpython3.13-dev_3.13.2-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf procps armhf 2:4.0.4-7 [866 kB] Fetched 866 kB in 0s (35.9 MB/s) dpkg-name: info: moved 'procps_2%3a4.0.4-7_armhf.deb' to '/srv/rebuilderd/tmp/tmp_9_ahwq7/procps_4.0.4-7_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libblkid1 armhf 2.40.4-5 [153 kB] Fetched 153 kB in 0s (8731 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpewin6wfq/libblkid1_2.40.4-5_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf python3-minimal armhf 3.13.2-2 [27.1 kB] Fetched 27.1 kB in 0s (1588 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpm9qz_4h0/python3-minimal_3.13.2-2_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf libarchive-zip-perl all 1.68-1 [104 kB] Fetched 104 kB in 0s (5775 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp23haqew9/libarchive-zip-perl_1.68-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libctf0 armhf 2.44-3 [61.6 kB] Fetched 61.6 kB in 0s (3588 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp_6hm6zly/libctf0_2.44-3_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf mawk armhf 1.3.4.20250131-1 [131 kB] Fetched 131 kB in 0s (6955 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpkvz3pt5w/mawk_1.3.4.20250131-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf python3 armhf 3.13.2-2 [28.1 kB] Fetched 28.1 kB in 0s (1592 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpeezxnuu8/python3_3.13.2-2_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf python3-jaraco.text all 4.0.0-1 [11.4 kB] Fetched 11.4 kB in 0s (681 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpmw9e8rw1/python3-jaraco.text_4.0.0-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main armhf libcap-ng0 armhf 0.8.5-4+b1 [16.1 kB] Fetched 16.1 kB in 0s (917 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpu98_aqo9/libcap-ng0_0.8.5-4+b1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libperl5.40 armhf 5.40.1-2 [3613 kB] Fetched 3613 kB in 0s (77.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpr0a86ugc/libperl5.40_5.40.1-2_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libsasl2-2 armhf 2.1.28+dfsg1-9 [50.4 kB] Fetched 50.4 kB in 0s (2916 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpt9_jdach/libsasl2-2_2.1.28+dfsg1-9_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf ncurses-base all 6.5+20250216-2 [273 kB] Fetched 273 kB in 0s (17.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6fahm6r1/ncurses-base_6.5+20250216-2_all.deb' Get:1 http://deb.debian.org/debian unstable/main armhf gzip armhf 1.13-1 [134 kB] Fetched 134 kB in 0s (7456 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmplc0m_ail/gzip_1.13-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libgmp10 armhf 2:6.3.0+dfsg-3 [512 kB] Fetched 512 kB in 0s (45.5 MB/s) dpkg-name: info: moved 'libgmp10_2%3a6.3.0+dfsg-3_armhf.deb' to '/srv/rebuilderd/tmp/tmp551kdh_z/libgmp10_6.3.0+dfsg-3_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf sysvinit-utils armhf 3.14-3 [32.8 kB] Fetched 32.8 kB in 0s (1932 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp7lti574c/sysvinit-utils_3.14-3_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libtinfo6 armhf 6.5+20250216-2 [333 kB] Fetched 333 kB in 0s (30.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp2cs7sgan/libtinfo6_6.5+20250216-2_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libproc2-0 armhf 2:4.0.4-7 [56.3 kB] Fetched 56.3 kB in 0s (3272 kB/s) dpkg-name: info: moved 'libproc2-0_2%3a4.0.4-7_armhf.deb' to '/srv/rebuilderd/tmp/tmpxhd_7662/libproc2-0_4.0.4-7_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libp11-kit0 armhf 0.25.5-3 [385 kB] Fetched 385 kB in 0s (24.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpwz1pfz8x/libp11-kit0_0.25.5-3_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libdebconfclient0 armhf 0.277 [10.0 kB] Fetched 10.0 kB in 0s (620 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmppdwb6mbm/libdebconfclient0_0.277_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf python3-autocommand all 2.2.2-3 [13.6 kB] Fetched 13.6 kB in 0s (828 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpc5na30tn/python3-autocommand_2.2.2-3_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf python3-typeguard all 4.4.2-1 [37.3 kB] Fetched 37.3 kB in 0s (2241 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpprc21a24/python3-typeguard_4.4.2-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main armhf hostname armhf 3.25 [10.0 kB] Fetched 10.0 kB in 0s (610 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpnbafd4zk/hostname_3.25_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libncursesw6 armhf 6.5+20250216-2 [110 kB] Fetched 110 kB in 0s (6263 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpu8tujq9y/libncursesw6_6.5+20250216-2_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf cpp-arm-linux-gnueabihf armhf 4:14.2.0-1 [4844 B] Fetched 4844 B in 0s (280 kB/s) dpkg-name: info: moved 'cpp-arm-linux-gnueabihf_4%3a14.2.0-1_armhf.deb' to '/srv/rebuilderd/tmp/tmpz96qdl_n/cpp-arm-linux-gnueabihf_14.2.0-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libcap2 armhf 1:2.75-1 [23.6 kB] Fetched 23.6 kB in 0s (0 B/s) dpkg-name: info: moved 'libcap2_1%3a2.75-1_armhf.deb' to '/srv/rebuilderd/tmp/tmptohdfnfj/libcap2_2.75-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf openssl-provider-legacy armhf 3.4.1-1 [293 kB] Fetched 293 kB in 0s (15.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpujt8h2o5/openssl-provider-legacy_3.4.1-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libicu72 armhf 72.1-6 [9086 kB] Fetched 9086 kB in 0s (109 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpqu5wdt5m/libicu72_72.1-6_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libldap2 armhf 2.6.9+dfsg-1 [167 kB] Fetched 167 kB in 0s (11.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpnj_487ow/libldap2_2.6.9+dfsg-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libaudit1 armhf 1:4.0.2-2+b2 [49.2 kB] Fetched 49.2 kB in 0s (2758 kB/s) dpkg-name: info: moved 'libaudit1_1%3a4.0.2-2+b2_armhf.deb' to '/srv/rebuilderd/tmp/tmp32uq5w73/libaudit1_4.0.2-2+b2_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libmpfr6 armhf 4.2.1-1+b2 [599 kB] Fetched 599 kB in 0s (27.9 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpn4b4rung/libmpfr6_4.2.1-1+b2_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf libtasn1-6 armhf 4.20.0-2 [44.4 kB] Fetched 44.4 kB in 0s (3240 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpmmk7l6as/libtasn1-6_4.20.0-2_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libgdbm-compat4t64 armhf 1.24-2 [50.0 kB] Fetched 50.0 kB in 0s (3020 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpbg4rpoi9/libgdbm-compat4t64_1.24-2_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf librtmp1 armhf 2.4+20151223.gitfa8646d.1-2+b5 [53.2 kB] Fetched 53.2 kB in 0s (3194 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6ubbjzkp/librtmp1_2.4+20151223.gitfa8646d.1-2+b5_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf libjansson4 armhf 2.14-2+b3 [35.5 kB] Fetched 35.5 kB in 0s (0 B/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpi1fls6o0/libjansson4_2.14-2+b3_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf libattr1 armhf 1:2.5.2-3 [22.0 kB] Fetched 22.0 kB in 0s (1331 kB/s) dpkg-name: info: moved 'libattr1_1%3a2.5.2-3_armhf.deb' to '/srv/rebuilderd/tmp/tmpzxqe6zi5/libattr1_2.5.2-3_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf autoconf all 2.72-3 [493 kB] Fetched 493 kB in 0s (23.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpgbpa07o0/autoconf_2.72-3_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libctf-nobfd0 armhf 2.44-3 [128 kB] Fetched 128 kB in 0s (7030 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpiqc7u8xr/libctf-nobfd0_2.44-3_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libcc1-0 armhf 14.2.0-17 [36.5 kB] Fetched 36.5 kB in 0s (2199 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpuzq_0jc1/libcc1-0_14.2.0-17_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf m4 armhf 1.4.19-7 [272 kB] Fetched 272 kB in 0s (14.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpctc78rxo/m4_1.4.19-7_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf autotools-dev all 20220109.1 [51.6 kB] Fetched 51.6 kB in 0s (3003 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp36kqs1k0/autotools-dev_20220109.1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf python3-yaml armhf 6.0.2-1+b2 [126 kB] Fetched 126 kB in 0s (7231 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp24x9sbri/python3-yaml_6.0.2-1+b2_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf libbrotli1 armhf 1.1.0-2+b7 [284 kB] Fetched 284 kB in 0s (14.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpdck_ni3n/libbrotli1_1.1.0-2+b7_armhf.deb' Get:1 http://deb.debian.org/debian unstable/main armhf libpog-dev all 0.5.3-3 [29.7 kB] Fetched 29.7 kB in 0s (1755 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmphkfn8qrt/libpog-dev_0.5.3-3_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf perl-modules-5.40 all 5.40.1-2 [3017 kB] Fetched 3017 kB in 0s (73.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3x9twaog/perl-modules-5.40_5.40.1-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf libmagic-mgc armhf 1:5.45-3+b1 [314 kB] Fetched 314 kB in 0s (19.6 MB/s) dpkg-name: info: moved 'libmagic-mgc_1%3a5.45-3+b1_armhf.deb' to '/srv/rebuilderd/tmp/tmp1y64hjcw/libmagic-mgc_5.45-3+b1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf cpp armhf 4:14.2.0-1 [1572 B] Fetched 1572 B in 0s (90.7 kB/s) dpkg-name: info: moved 'cpp_4%3a14.2.0-1_armhf.deb' to '/srv/rebuilderd/tmp/tmpyoxvemfh/cpp_14.2.0-1_armhf.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main armhf perl-base armhf 5.40.1-2 [1516 kB] Fetched 1516 kB in 0s (45.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpj1fexc_g/perl-base_5.40.1-2_armhf.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-buildpackage: info: host architecture arm64 dpkg-source --before-build . 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_arm64.buildinfo dpkg-genchanges --build=binary -O../debootsnap-dummy_1.0_arm64.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/tmpwv0tnti7/cache directory, not in ".." as indicated by the message above! I: automatically chosen mode: unshare I: armhf is different from arm64 but can be executed natively I: using /srv/rebuilderd/tmp/mmdebstrap.j_B2cTZa5v as tempdir I: running --setup-hook directly: /usr/share/mmdebstrap/hooks/maybe-merged-usr/setup00.sh /srv/rebuilderd/tmp/mmdebstrap.j_B2cTZa5v 127.0.0.1 - - [28/Nov/2025 21:03:04] code 404, message File not found 127.0.0.1 - - [28/Nov/2025 21:03:04] "GET /./InRelease HTTP/1.1" 404 - Ign:1 http://localhost:37591 ./ InRelease 127.0.0.1 - - [28/Nov/2025 21:03:04] "GET /./Release HTTP/1.1" 200 - Get:2 http://localhost:37591 ./ Release [462 B] 127.0.0.1 - - [28/Nov/2025 21:03:04] code 404, message File not found 127.0.0.1 - - [28/Nov/2025 21:03:04] "GET /./Release.gpg HTTP/1.1" 404 - Ign:3 http://localhost:37591 ./ Release.gpg 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./Packages HTTP/1.1" 200 - Get:4 http://localhost:37591 ./ Packages [278 kB] Fetched 278 kB in 0s (7453 kB/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 - - [28/Nov/2025 21:03:05] "GET /./gcc-14-base_14.2.0-17_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libc6_2.41-4_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libgcc-s1_14.2.0-17_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./mawk_1.3.4.20250131-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./base-files_13.7_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libtinfo6_6.5%2b20250216-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./debianutils_5.21_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./bash_5.2.37-1.1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libcap2_2.75-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libsystemd0_257.4-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./bsdutils_2.40.4-5_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libacl1_2.3.2-2%2bb1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libattr1_2.5.2-3_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libgmp10_6.3.0%2bdfsg-3_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libpcre2-8-0_10.45-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libselinux1_3.8-4_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libzstd1_1.5.6%2bdfsg-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./zlib1g_1.3.dfsg%2breally1.3.1-1%2bb1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libssl3t64_3.4.1-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./openssl-provider-legacy_3.4.1-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./coreutils_9.5-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./dash_0.5.12-12_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./diffutils_3.10-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libbz2-1.0_1.0.8-6_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./liblzma5_5.6.4-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libmd0_1.1.0-2%2bb1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./tar_1.35%2bdfsg-3.1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./dpkg_1.22.18_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./findutils_4.10.0-3_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./grep_3.11-4_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./gzip_1.13-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./hostname_3.25_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./ncurses-bin_6.5%2b20250216-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libcrypt1_4.4.38-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./perl-base_5.40.1-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./sed_4.9-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libaudit-common_4.0.2-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libcap-ng0_0.8.5-4%2bb1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libaudit1_4.0.2-2%2bb2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libdb5.3t64_5.3.28%2bdfsg2-9_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./debconf_1.5.90_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libpam0g_1.7.0-3_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libpam-modules-bin_1.7.0-3_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libpam-modules_1.7.0-3_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libpam-runtime_1.7.0-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libblkid1_2.40.4-5_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libmount1_2.40.4-5_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libsmartcols1_2.40.4-5_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libudev1_257.4-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libuuid1_2.40.4-5_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./util-linux_2.40.4-5_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libdebconfclient0_0.277_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./base-passwd_3.6.6_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./init-system-helpers_1.68_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./libc-bin_2.41-4_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./ncurses-base_6.5%2b20250216-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:05] "GET /./sysvinit-utils_3.14-3_armhf.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.j_B2cTZa5v 127.0.0.1 - - [28/Nov/2025 21:03:08] code 404, message File not found 127.0.0.1 - - [28/Nov/2025 21:03:08] "GET /./InRelease HTTP/1.1" 404 - Ign:1 http://localhost:37591 ./ InRelease 127.0.0.1 - - [28/Nov/2025 21:03:08] "GET /./Release HTTP/1.1" 304 - Hit:2 http://localhost:37591 ./ Release 127.0.0.1 - - [28/Nov/2025 21:03:08] code 404, message File not found 127.0.0.1 - - [28/Nov/2025 21:03:08] "GET /./Release.gpg HTTP/1.1" 404 - Ign:3 http://localhost:37591 ./ 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.j_B2cTZa5v 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 - - [28/Nov/2025 21:03:15] "GET /./libpython3.13-minimal_3.13.2-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libexpat1_2.6.4-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./python3.13-minimal_3.13.2-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./python3-minimal_3.13.2-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./media-types_13.0.0_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./netbase_6.4_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./tzdata_2025a-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libffi8_3.4.7-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libncursesw6_6.5%2b20250216-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./readline-common_8.2-6_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libreadline8t64_8.2-6_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libsqlite3-0_3.46.1-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libpython3.13-stdlib_3.13.2-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./python3.13_3.13.2-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libpython3-stdlib_3.13.2-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./python3_3.13.2-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./sensible-utils_0.0.24_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libstdc%2b%2b6_14.2.0-17_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libuchardet0_0.0.8-1%2bb2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./groff-base_1.23.0-7_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./bsdextrautils_2.40.4-5_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libgdbm6t64_1.24-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libpipeline1_1.5.8-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libseccomp2_2.5.5-2%2bb1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./man-db_2.13.0-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libproc2-0_4.0.4-7_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./procps_4.0.4-7_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./bzip2_1.0.8-6_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libmagic-mgc_5.45-3%2bb1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libmagic1t64_5.45-3%2bb1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./file_5.45-3%2bb1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./gettext-base_0.23.1-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./perl-modules-5.40_5.40.1-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libgdbm-compat4t64_1.24-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libperl5.40_5.40.1-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./perl_5.40.1-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./xz-utils_5.6.4-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./m4_1.4.19-7_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./autoconf_2.72-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./autotools-dev_20220109.1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./automake_1.17-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./autopoint_0.23.1-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./binutils-common_2.44-3_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libsframe1_2.44-3_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libbinutils_2.44-3_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libctf-nobfd0_2.44-3_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libctf0_2.44-3_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libjansson4_2.14-2%2bb3_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./binutils-arm-linux-gnueabihf_2.44-3_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./binutils_2.44-3_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libc-dev-bin_2.41-4_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./linux-libc-dev_6.12.17-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libcrypt-dev_4.4.38-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./rpcsvc-proto_1.4.3-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libc6-dev_2.41-4_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libisl23_0.27-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libmpfr6_4.2.1-1%2bb2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libmpc3_1.3.1-1%2bb3_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./cpp-14-arm-linux-gnueabihf_14.2.0-17_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./cpp-14_14.2.0-17_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./cpp-arm-linux-gnueabihf_14.2.0-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./cpp_14.2.0-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libcc1-0_14.2.0-17_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libgomp1_14.2.0-17_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libatomic1_14.2.0-17_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libasan8_14.2.0-17_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libubsan1_14.2.0-17_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libgcc-14-dev_14.2.0-17_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./gcc-14-arm-linux-gnueabihf_14.2.0-17_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./gcc-14_14.2.0-17_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./gcc-arm-linux-gnueabihf_14.2.0-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./gcc_14.2.0-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libstdc%2b%2b-14-dev_14.2.0-17_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./g%2b%2b-14-arm-linux-gnueabihf_14.2.0-17_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./g%2b%2b-14_14.2.0-17_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./g%2b%2b-arm-linux-gnueabihf_14.2.0-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./g%2b%2b_14.2.0-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./make_4.4.1-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libdpkg-perl_1.22.18_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./patch_2.7.6-7_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./dpkg-dev_1.22.18_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./build-essential_12.12_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./cmake-data_3.31.6-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libxxhash0_0.8.3-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./liblz4-1_1.10.0-4_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libnettle8t64_3.10.1-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:16] "GET /./libicu72_72.1-6_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libxml2_2.12.7%2bdfsg%2breally2.9.14-0.2%2bb2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libarchive13t64_3.7.4-1.1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libbrotli1_1.1.0-2%2bb7_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libkrb5support0_1.21.3-4_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libcom-err2_1.47.2-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libk5crypto3_1.21.3-4_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libkeyutils1_1.6.3-4_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libkrb5-3_1.21.3-4_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libgssapi-krb5-2_1.21.3-4_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libunistring5_1.3-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libidn2-0_2.3.8-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libsasl2-modules-db_2.1.28%2bdfsg1-9_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libsasl2-2_2.1.28%2bdfsg1-9_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libldap2_2.6.9%2bdfsg-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libnghttp2-14_1.64.0-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libnghttp3-9_1.8.0-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libpsl5t64_0.21.2-1.1%2bb1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libhogweed6t64_3.10.1-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libp11-kit0_0.25.5-3_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libtasn1-6_4.20.0-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libgnutls30t64_3.8.9-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./librtmp1_2.4%2b20151223.gitfa8646d.1-2%2bb5_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libssh2-1t64_1.11.1-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libcurl4t64_8.12.1-3_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libjsoncpp26_1.9.6-3_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./librhash1_1.4.5-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libuv1t64_1.50.0-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./cmake_3.31.6-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libdebhelper-perl_13.24.1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libtool_2.5.4-4_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./dh-autoreconf_20_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libarchive-zip-perl_1.68-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libfile-stripnondeterminism-perl_1.14.1-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./dh-strip-nondeterminism_1.14.1-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libelf1t64_0.192-4_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./dwz_0.15-1%2bb2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./gettext_0.23.1-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./intltool-debian_0.35.0%2b20060710.6_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./po-debconf_1.0.21%2bnmu1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./debhelper_13.24.1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./python3-more-itertools_10.6.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./python3-typing-extensions_4.12.2-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./python3-typeguard_4.4.2-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./python3-inflect_7.3.1-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libpkgconf3_1.8.1-4_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./pkgconf-bin_1.8.1-4_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libyaml-0-2_0.2.5-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libpython3.13_3.13.2-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libexpat1-dev_2.6.4-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./zlib1g-dev_1.3.dfsg%2breally1.3.1-1%2bb1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libpython3.13-dev_3.13.2-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./python3.13-dev_3.13.2-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./python3-zipp_3.21.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libpython3-dev_3.13.2-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libjs-jquery_3.6.1%2bdfsg%2b%7e3.5.14-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libjs-underscore_1.13.4%7edfsg%2b%7e1.11.4-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libjs-sphinxdoc_8.1.3-5_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./python3-dev_3.13.2-2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libfmt10_10.1.1%2bds1-4_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libfmt-dev_10.1.1%2bds1-4_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./python3-charset-normalizer_3.4.1-1%2bb1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./googletest_1.16.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libgtest-dev_1.16.0-1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./python3-jaraco.functools_4.1.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./python3-debian_1.0.0_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libabsl20240722_20240722.0-1.5_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libabsl-dev_20240722.0-1.5_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./dh-python_6.20250308_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./nlohmann-json3-dev_3.11.3-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./python3-autocommand_2.2.2-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./python3-jaraco.text_4.0.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./python3-setuptools_75.8.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./python3-jaraco.context_6.0.1-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./python3-pkg-resources_75.8.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libre2-11_20240702-3%2bb1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./python3-yaml_6.0.2-1%2bb2_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./pkg-kde-tools_0.18.12_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./pkgconf_1.8.1-4_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libre2-dev_20240702-3%2bb1_armhf.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./pybind11-dev_2.13.6-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./libpog-dev_0.5.3-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [28/Nov/2025 21:03:17] "GET /./debootsnap-dummy_1.0_all.deb HTTP/1.1" 200 - I: running --customize-hook directly: /srv/rebuilderd/tmp/tmpwv0tnti7/apt_install.sh /srv/rebuilderd/tmp/mmdebstrap.j_B2cTZa5v Reading package lists... Building dependency tree... Reading state information... man-db is already the newest version (2.13.0-1). man-db set to manually installed. intltool-debian is already the newest version (0.35.0+20060710.6). intltool-debian set to manually installed. libpam-runtime is already the newest version (1.7.0-3). make is already the newest version (4.4.1-1). make set to manually installed. libseccomp2 is already the newest version (2.5.5-2+b1). libseccomp2 set to manually installed. libsmartcols1 is already the newest version (2.40.4-5). python3.13-minimal is already the newest version (3.13.2-1). python3.13-minimal set to manually installed. zlib1g is already the newest version (1:1.3.dfsg+really1.3.1-1+b1). libpam-modules-bin is already the newest version (1.7.0-3). netbase is already the newest version (6.4). netbase set to manually installed. python3-inflect is already the newest version (7.3.1-2). python3-inflect set to manually installed. libssl3t64 is already the newest version (3.4.1-1). libuuid1 is already the newest version (2.40.4-5). pkgconf-bin is already the newest version (1.8.1-4). pkgconf-bin set to manually installed. readline-common is already the newest version (8.2-6). readline-common set to manually installed. build-essential is already the newest version (12.12). build-essential set to manually installed. dpkg is already the newest version (1.22.18). libbz2-1.0 is already the newest version (1.0.8-6). libpython3.13-stdlib is already the newest version (3.13.2-1). libpython3.13-stdlib set to manually installed. libpipeline1 is already the newest version (1.5.8-1). libpipeline1 set to manually installed. libgnutls30t64 is already the newest version (3.8.9-2). libgnutls30t64 set to manually installed. libnghttp3-9 is already the newest version (1.8.0-1). libnghttp3-9 set to manually installed. debianutils is already the newest version (5.21). debhelper is already the newest version (13.24.1). debhelper set to manually installed. liblz4-1 is already the newest version (1.10.0-4). liblz4-1 set to manually installed. libnghttp2-14 is already the newest version (1.64.0-1). libnghttp2-14 set to manually installed. tar is already the newest version (1.35+dfsg-3.1). cmake is already the newest version (3.31.6-1). cmake set to manually installed. libaudit-common is already the newest version (1:4.0.2-2). libhogweed6t64 is already the newest version (3.10.1-1). libhogweed6t64 set to manually installed. tzdata is already the newest version (2025a-2). tzdata set to manually installed. dh-autoreconf is already the newest version (20). dh-autoreconf set to manually installed. libdb5.3t64 is already the newest version (5.3.28+dfsg2-9). libyaml-0-2 is already the newest version (0.2.5-2). libyaml-0-2 set to manually installed. libarchive13t64 is already the newest version (3.7.4-1.1). libarchive13t64 set to manually installed. libssh2-1t64 is already the newest version (1.11.1-1). libssh2-1t64 set to manually installed. binutils-arm-linux-gnueabihf is already the newest version (2.44-3). binutils-arm-linux-gnueabihf set to manually installed. coreutils is already the newest version (9.5-1). gettext is already the newest version (0.23.1-1). gettext set to manually installed. libgdbm6t64 is already the newest version (1.24-2). libgdbm6t64 set to manually installed. libidn2-0 is already the newest version (2.3.8-1). libidn2-0 set to manually installed. libc6 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. libgcc-14-dev is already the newest version (14.2.0-17). libgcc-14-dev set to manually installed. debconf is already the newest version (1.5.90). libisl23 is already the newest version (0.27-1). libisl23 set to manually installed. libdebhelper-perl is already the newest version (13.24.1). libdebhelper-perl set to manually installed. dwz is already the newest version (0.15-1+b2). dwz set to manually installed. python3.13-dev is already the newest version (3.13.2-1). python3.13-dev set to manually installed. python3-zipp is already the newest version (3.21.0-1). python3-zipp set to manually installed. python3-dev is already the newest version (3.13.2-2). python3-dev set to manually installed. binutils is already the newest version (2.44-3). binutils set to manually installed. libkrb5support0 is already the newest version (1.21.3-4). libkrb5support0 set to manually installed. libunistring5 is already the newest version (1.3-1). libunistring5 set to manually installed. ncurses-bin is already the newest version (6.5+20250216-2). libfmt-dev is already the newest version (10.1.1+ds1-4). libfmt-dev set to manually installed. python3-charset-normalizer is already the newest version (3.4.1-1+b1). python3-charset-normalizer set to manually installed. libpam-modules is already the newest version (1.7.0-3). python3-typing-extensions is already the newest version (4.12.2-2). python3-typing-extensions 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. groff-base is already the newest version (1.23.0-7). groff-base set to manually installed. libexpat1-dev is already the newest version (2.6.4-1). libexpat1-dev set to manually installed. googletest is already the newest version (1.16.0-1). googletest set to manually installed. libelf1t64 is already the newest version (0.192-4). libelf1t64 set to manually installed. libgtest-dev is already the newest version (1.16.0-1). libgtest-dev set to manually installed. libuchardet0 is already the newest version (0.0.8-1+b2). libuchardet0 set to manually installed. libzstd1 is already the newest version (1.5.6+dfsg-2). base-files is already the newest version (13.7). libmpc3 is already the newest version (1.3.1-1+b3). libmpc3 set to manually installed. sensible-utils is already the newest version (0.0.24). sensible-utils set to manually installed. g++ is already the newest version (4:14.2.0-1). g++ set to manually installed. patch is already the newest version (2.7.6-7). patch set to manually installed. libtool is already the newest version (2.5.4-4). libtool set to manually installed. findutils is already the newest version (4.10.0-3). libk5crypto3 is already the newest version (1.21.3-4). libk5crypto3 set to manually installed. libc-bin is already the newest version (2.41-4). libpython3-stdlib is already the newest version (3.13.2-2). libpython3-stdlib set to manually installed. python3-jaraco.functools is already the newest version (4.1.0-1). python3-jaraco.functools set to manually installed. cpp-14 is already the newest version (14.2.0-17). cpp-14 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. libreadline8t64 is already the newest version (8.2-6). libreadline8t64 set to manually installed. perl is already the newest version (5.40.1-2). perl set to manually installed. gcc-arm-linux-gnueabihf is already the newest version (4:14.2.0-1). gcc-arm-linux-gnueabihf set to manually installed. libselinux1 is already the newest version (3.8-4). libpkgconf3 is already the newest version (1.8.1-4). libpkgconf3 set to manually installed. libuv1t64 is already the newest version (1.50.0-2). libuv1t64 set to manually installed. libgomp1 is already the newest version (14.2.0-17). libgomp1 set to manually installed. python3-debian is already the newest version (1.0.0). python3-debian set to manually installed. gcc is already the newest version (4:14.2.0-1). gcc set to manually installed. libfmt10 is already the newest version (10.1.1+ds1-4). libfmt10 set to manually installed. sed is already the newest version (4.9-2). libabsl-dev is already the newest version (20240722.0-1.5). libabsl-dev set to manually installed. libasan8 is already the newest version (14.2.0-17). libasan8 set to manually installed. libpython3.13-minimal is already the newest version (3.13.2-1). libpython3.13-minimal set to manually installed. dh-python is already the newest version (6.20250308). dh-python set to manually installed. libkrb5-3 is already the newest version (1.21.3-4). libkrb5-3 set to manually installed. nlohmann-json3-dev is already the newest version (3.11.3-2). nlohmann-json3-dev set to manually installed. grep is already the newest version (3.11-4). libdpkg-perl is already the newest version (1.22.18). libdpkg-perl set to manually installed. libmagic1t64 is already the newest version (1:5.45-3+b1). libmagic1t64 set to manually installed. libudev1 is already the newest version (257.4-1). python3-pkg-resources is already the newest version (75.8.0-1). python3-pkg-resources set to manually installed. bash is already the newest version (5.2.37-1.1). libgssapi-krb5-2 is already the newest version (1.21.3-4). libgssapi-krb5-2 set to manually installed. libcrypt1 is already the newest version (1:4.4.38-1). libacl1 is already the newest version (2.3.2-2+b1). libsystemd0 is already the newest version (257.4-1). libabsl20240722 is already the newest version (20240722.0-1.5). libabsl20240722 set to manually installed. libffi8 is already the newest version (3.4.7-1). libffi8 set to manually installed. python3.13 is already the newest version (3.13.2-1). python3.13 set to manually installed. libc-dev-bin is already the newest version (2.41-4). libc-dev-bin set to manually installed. libatomic1 is already the newest version (14.2.0-17). libatomic1 set to manually installed. libc6-dev is already the newest version (2.41-4). libc6-dev set to manually installed. binutils-common is already the newest version (2.44-3). binutils-common set to manually installed. libre2-11 is already the newest version (20240702-3+b1). libre2-11 set to manually installed. file is already the newest version (1:5.45-3+b1). file set to manually installed. libsqlite3-0 is already the newest version (3.46.1-2). libsqlite3-0 set to manually installed. libpam0g is already the newest version (1.7.0-3). libpython3.13 is already the newest version (3.13.2-1). libpython3.13 set to manually installed. dh-strip-nondeterminism is already the newest version (1.14.1-2). dh-strip-nondeterminism 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. po-debconf is already the newest version (1.0.21+nmu1). po-debconf set to manually installed. libcrypt-dev is already the newest version (1:4.4.38-1). libcrypt-dev set to manually installed. cpp-14-arm-linux-gnueabihf is already the newest version (14.2.0-17). cpp-14-arm-linux-gnueabihf set to manually installed. python3-setuptools is already the newest version (75.8.0-1). python3-setuptools set to manually installed. gcc-14-arm-linux-gnueabihf is already the newest version (14.2.0-17). gcc-14-arm-linux-gnueabihf set to manually installed. pkg-kde-tools is already the newest version (0.18.12). pkg-kde-tools set to manually installed. dpkg-dev is already the newest version (1.22.18). dpkg-dev set to manually installed. libgcc-s1 is already the newest version (14.2.0-17). libsframe1 is already the newest version (2.44-3). libsframe1 set to manually installed. libsasl2-modules-db is already the newest version (2.1.28+dfsg1-9). libsasl2-modules-db set to manually installed. linux-libc-dev is already the newest version (6.12.17-1). linux-libc-dev set to manually installed. libexpat1 is already the newest version (2.6.4-1). libexpat1 set to manually installed. gcc-14-base is already the newest version (14.2.0-17). bsdutils is already the newest version (1:2.40.4-5). g++-14-arm-linux-gnueabihf is already the newest version (14.2.0-17). g++-14-arm-linux-gnueabihf set to manually installed. automake is already the newest version (1:1.17-3). automake set to manually installed. libpython3-dev is already the newest version (3.13.2-2). libpython3-dev set to manually installed. libubsan1 is already the newest version (14.2.0-17). libubsan1 set to manually installed. librhash1 is already the newest version (1.4.5-1). librhash1 set to manually installed. python3-jaraco.context is already the newest version (6.0.1-1). python3-jaraco.context 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. media-types is already the newest version (13.0.0). media-types set to manually installed. cmake-data is already the newest version (3.31.6-1). cmake-data set to manually installed. pkgconf is already the newest version (1.8.1-4). pkgconf set to manually installed. gcc-14 is already the newest version (14.2.0-17). gcc-14 set to manually installed. libre2-dev is already the newest version (20240702-3+b1). libre2-dev set to manually installed. base-passwd is already the newest version (3.6.6). libmount1 is already the newest version (2.40.4-5). libpcre2-8-0 is already the newest version (10.45-1). rpcsvc-proto is already the newest version (1.4.3-1). rpcsvc-proto set to manually installed. gettext-base is already the newest version (0.23.1-1). gettext-base set to manually installed. autopoint is already the newest version (0.23.1-1). autopoint set to manually installed. libxxhash0 is already the newest version (0.8.3-2). libxxhash0 set to manually installed. libmd0 is already the newest version (1.1.0-2+b1). libstdc++-14-dev is already the newest version (14.2.0-17). libstdc++-14-dev set to manually installed. libkeyutils1 is already the newest version (1.6.3-4). libkeyutils1 set to manually installed. pybind11-dev is already the newest version (2.13.6-2). pybind11-dev set to manually installed. init-system-helpers is already the newest version (1.68). util-linux is already the newest version (2.40.4-5). bsdextrautils is already the newest version (2.40.4-5). bsdextrautils set to manually installed. libfile-stripnondeterminism-perl is already the newest version (1.14.1-2). libfile-stripnondeterminism-perl set to manually installed. g++-arm-linux-gnueabihf is already the newest version (4:14.2.0-1). g++-arm-linux-gnueabihf set to manually installed. dash is already the newest version (0.5.12-12). bzip2 is already the newest version (1.0.8-6). bzip2 set to manually installed. libjs-sphinxdoc is already the newest version (8.1.3-5). libjs-sphinxdoc set to manually installed. libcom-err2 is already the newest version (1.47.2-1). libcom-err2 set to manually installed. libcurl4t64 is already the newest version (8.12.1-3). libcurl4t64 set to manually installed. g++-14 is already the newest version (14.2.0-17). g++-14 set to manually installed. liblzma5 is already the newest version (5.6.4-1). libbinutils is already the newest version (2.44-3). libbinutils set to manually installed. libjsoncpp26 is already the newest version (1.9.6-3). libjsoncpp26 set to manually installed. libnettle8t64 is already the newest version (3.10.1-1). libnettle8t64 set to manually installed. xz-utils is already the newest version (5.6.4-1). xz-utils set to manually installed. python3-more-itertools is already the newest version (10.6.0-1). python3-more-itertools set to manually installed. diffutils is already the newest version (1:3.10-2). libpsl5t64 is already the newest version (0.21.2-1.1+b1). libpsl5t64 set to manually installed. libpython3.13-dev is already the newest version (3.13.2-1). libpython3.13-dev set to manually installed. procps is already the newest version (2:4.0.4-7). procps set to manually installed. libblkid1 is already the newest version (2.40.4-5). python3-minimal is already the newest version (3.13.2-2). python3-minimal set to manually installed. libarchive-zip-perl is already the newest version (1.68-1). libarchive-zip-perl set to manually installed. libctf0 is already the newest version (2.44-3). libctf0 set to manually installed. mawk is already the newest version (1.3.4.20250131-1). python3 is already the newest version (3.13.2-2). python3 set to manually installed. python3-jaraco.text is already the newest version (4.0.0-1). python3-jaraco.text set to manually installed. libcap-ng0 is already the newest version (0.8.5-4+b1). libperl5.40 is already the newest version (5.40.1-2). libperl5.40 set to manually installed. libsasl2-2 is already the newest version (2.1.28+dfsg1-9). libsasl2-2 set to manually installed. ncurses-base is already the newest version (6.5+20250216-2). gzip is already the newest version (1.13-1). libgmp10 is already the newest version (2:6.3.0+dfsg-3). sysvinit-utils is already the newest version (3.14-3). libtinfo6 is already the newest version (6.5+20250216-2). libproc2-0 is already the newest version (2:4.0.4-7). libproc2-0 set to manually installed. libp11-kit0 is already the newest version (0.25.5-3). libp11-kit0 set to manually installed. libdebconfclient0 is already the newest version (0.277). python3-autocommand is already the newest version (2.2.2-3). python3-autocommand set to manually installed. python3-typeguard is already the newest version (4.4.2-1). python3-typeguard set to manually installed. hostname is already the newest version (3.25). libncursesw6 is already the newest version (6.5+20250216-2). libncursesw6 set to manually installed. cpp-arm-linux-gnueabihf is already the newest version (4:14.2.0-1). cpp-arm-linux-gnueabihf set to manually installed. libcap2 is already the newest version (1:2.75-1). openssl-provider-legacy is already the newest version (3.4.1-1). libicu72 is already the newest version (72.1-6). libicu72 set to manually installed. libldap2 is already the newest version (2.6.9+dfsg-1). libldap2 set to manually installed. libaudit1 is already the newest version (1:4.0.2-2+b2). libmpfr6 is already the newest version (4.2.1-1+b2). libmpfr6 set to manually installed. libtasn1-6 is already the newest version (4.20.0-2). libtasn1-6 set to manually installed. libgdbm-compat4t64 is already the newest version (1.24-2). libgdbm-compat4t64 set to manually installed. librtmp1 is already the newest version (2.4+20151223.gitfa8646d.1-2+b5). librtmp1 set to manually installed. libjansson4 is already the newest version (2.14-2+b3). libjansson4 set to manually installed. libattr1 is already the newest version (1:2.5.2-3). 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. libcc1-0 is already the newest version (14.2.0-17). libcc1-0 set to manually installed. m4 is already the newest version (1.4.19-7). m4 set to manually installed. autotools-dev is already the newest version (20220109.1). autotools-dev set to manually installed. python3-yaml is already the newest version (6.0.2-1+b2). python3-yaml set to manually installed. libbrotli1 is already the newest version (1.1.0-2+b7). libbrotli1 set to manually installed. libpog-dev is already the newest version (0.5.3-3). libpog-dev set to manually installed. perl-modules-5.40 is already the newest version (5.40.1-2). perl-modules-5.40 set to manually installed. libmagic-mgc is already the newest version (1:5.45-3+b1). libmagic-mgc set to manually installed. cpp is already the newest version (4:14.2.0-1). cpp set to manually installed. perl-base is already the newest version (5.40.1-2). 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.j_B2cTZa5v (Reading database ... 22228 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.j_B2cTZa5v I: running special hook: download /pkglist ./pkglist I: running --customize-hook in shell: sh -c 'rm "$1/pkglist"' exec /srv/rebuilderd/tmp/mmdebstrap.j_B2cTZa5v 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.j_B2cTZa5v... I: success in 45.4193 seconds Downloading dependency 133 of 225: libexpat1:armhf=2.6.4-1 Downloading dependency 134 of 225: gcc-14-base:armhf=14.2.0-17 Downloading dependency 135 of 225: bsdutils:armhf=1:2.40.4-5 Downloading dependency 136 of 225: g++-14-arm-linux-gnueabihf:armhf=14.2.0-17 Downloading dependency 137 of 225: automake:armhf=1:1.17-3 Downloading dependency 138 of 225: libpython3-dev:armhf=3.13.2-2 Downloading dependency 139 of 225: libubsan1:armhf=14.2.0-17 Downloading dependency 140 of 225: librhash1:armhf=1.4.5-1 Downloading dependency 141 of 225: python3-jaraco.context:armhf=6.0.1-1 Downloading dependency 142 of 225: libjs-jquery:armhf=3.6.1+dfsg+~3.5.14-1 Downloading dependency 143 of 225: media-types:armhf=13.0.0 Downloading dependency 144 of 225: cmake-data:armhf=3.31.6-1 Downloading dependency 145 of 225: pkgconf:armhf=1.8.1-4 Downloading dependency 146 of 225: gcc-14:armhf=14.2.0-17 Downloading dependency 147 of 225: libre2-dev:armhf=20240702-3+b1 Downloading dependency 148 of 225: base-passwd:armhf=3.6.6 Downloading dependency 149 of 225: libmount1:armhf=2.40.4-5 Downloading dependency 150 of 225: libpcre2-8-0:armhf=10.45-1 Downloading dependency 151 of 225: rpcsvc-proto:armhf=1.4.3-1 Downloading dependency 152 of 225: gettext-base:armhf=0.23.1-1 Downloading dependency 153 of 225: autopoint:armhf=0.23.1-1 Downloading dependency 154 of 225: libxxhash0:armhf=0.8.3-2 Downloading dependency 155 of 225: libmd0:armhf=1.1.0-2+b1 Downloading dependency 156 of 225: libstdc++-14-dev:armhf=14.2.0-17 Downloading dependency 157 of 225: libkeyutils1:armhf=1.6.3-4 Downloading dependency 158 of 225: pybind11-dev:armhf=2.13.6-2 Downloading dependency 159 of 225: init-system-helpers:armhf=1.68 Downloading dependency 160 of 225: util-linux:armhf=2.40.4-5 Downloading dependency 161 of 225: bsdextrautils:armhf=2.40.4-5 Downloading dependency 162 of 225: libfile-stripnondeterminism-perl:armhf=1.14.1-2 Downloading dependency 163 of 225: g++-arm-linux-gnueabihf:armhf=4:14.2.0-1 Downloading dependency 164 of 225: dash:armhf=0.5.12-12 Downloading dependency 165 of 225: bzip2:armhf=1.0.8-6 Downloading dependency 166 of 225: libjs-sphinxdoc:armhf=8.1.3-5 Downloading dependency 167 of 225: libcom-err2:armhf=1.47.2-1 Downloading dependency 168 of 225: libcurl4t64:armhf=8.12.1-3 Downloading dependency 169 of 225: g++-14:armhf=14.2.0-17 Downloading dependency 170 of 225: liblzma5:armhf=5.6.4-1 Downloading dependency 171 of 225: libbinutils:armhf=2.44-3 Downloading dependency 172 of 225: libjsoncpp26:armhf=1.9.6-3 Downloading dependency 173 of 225: libnettle8t64:armhf=3.10.1-1 Downloading dependency 174 of 225: xz-utils:armhf=5.6.4-1 Downloading dependency 175 of 225: python3-more-itertools:armhf=10.6.0-1 Downloading dependency 176 of 225: diffutils:armhf=1:3.10-2 Downloading dependency 177 of 225: libpsl5t64:armhf=0.21.2-1.1+b1 Downloading dependency 178 of 225: libpython3.13-dev:armhf=3.13.2-1 Downloading dependency 179 of 225: procps:armhf=2:4.0.4-7 Downloading dependency 180 of 225: libblkid1:armhf=2.40.4-5 Downloading dependency 181 of 225: python3-minimal:armhf=3.13.2-2 Downloading dependency 182 of 225: libarchive-zip-perl:armhf=1.68-1 Downloading dependency 183 of 225: libctf0:armhf=2.44-3 Downloading dependency 184 of 225: mawk:armhf=1.3.4.20250131-1 Downloading dependency 185 of 225: python3:armhf=3.13.2-2 Downloading dependency 186 of 225: python3-jaraco.text:armhf=4.0.0-1 Downloading dependency 187 of 225: libcap-ng0:armhf=0.8.5-4+b1 Downloading dependency 188 of 225: libperl5.40:armhf=5.40.1-2 Downloading dependency 189 of 225: libsasl2-2:armhf=2.1.28+dfsg1-9 Downloading dependency 190 of 225: ncurses-base:armhf=6.5+20250216-2 Downloading dependency 191 of 225: gzip:armhf=1.13-1 Downloading dependency 192 of 225: libgmp10:armhf=2:6.3.0+dfsg-3 Downloading dependency 193 of 225: sysvinit-utils:armhf=3.14-3 Downloading dependency 194 of 225: libtinfo6:armhf=6.5+20250216-2 Downloading dependency 195 of 225: libproc2-0:armhf=2:4.0.4-7 Downloading dependency 196 of 225: libp11-kit0:armhf=0.25.5-3 Downloading dependency 197 of 225: libdebconfclient0:armhf=0.277 Downloading dependency 198 of 225: python3-autocommand:armhf=2.2.2-3 Downloading dependency 199 of 225: python3-typeguard:armhf=4.4.2-1 Downloading dependency 200 of 225: hostname:armhf=3.25 Downloading dependency 201 of 225: libncursesw6:armhf=6.5+20250216-2 Downloading dependency 202 of 225: cpp-arm-linux-gnueabihf:armhf=4:14.2.0-1 Downloading dependency 203 of 225: libcap2:armhf=1:2.75-1 Downloading dependency 204 of 225: openssl-provider-legacy:armhf=3.4.1-1 Downloading dependency 205 of 225: libicu72:armhf=72.1-6 Downloading dependency 206 of 225: libldap2:armhf=2.6.9+dfsg-1 Downloading dependency 207 of 225: libaudit1:armhf=1:4.0.2-2+b2 Downloading dependency 208 of 225: libmpfr6:armhf=4.2.1-1+b2 Downloading dependency 209 of 225: libtasn1-6:armhf=4.20.0-2 Downloading dependency 210 of 225: libgdbm-compat4t64:armhf=1.24-2 Downloading dependency 211 of 225: librtmp1:armhf=2.4+20151223.gitfa8646d.1-2+b5 Downloading dependency 212 of 225: libjansson4:armhf=2.14-2+b3 Downloading dependency 213 of 225: libattr1:armhf=1:2.5.2-3 Downloading dependency 214 of 225: autoconf:armhf=2.72-3 Downloading dependency 215 of 225: libctf-nobfd0:armhf=2.44-3 Downloading dependency 216 of 225: libcc1-0:armhf=14.2.0-17 Downloading dependency 217 of 225: m4:armhf=1.4.19-7 Downloading dependency 218 of 225: autotools-dev:armhf=20220109.1 Downloading dependency 219 of 225: python3-yaml:armhf=6.0.2-1+b2 Downloading dependency 220 of 225: libbrotli1:armhf=1.1.0-2+b7 Downloading dependency 221 of 225: libpog-dev:armhf=0.5.3-3 Downloading dependency 222 of 225: perl-modules-5.40:armhf=5.40.1-2 Downloading dependency 223 of 225: libmagic-mgc:armhf=1:5.45-3+b1 Downloading dependency 224 of 225: cpp:armhf=4:14.2.0-1 Downloading dependency 225 of 225: perl-base:armhf=5.40.1-2 env --chdir=/srv/rebuilderd/tmp/rebuilderdjhZodZ/out DEB_BUILD_OPTIONS=parallel=8 LANG=C.UTF-8 LC_COLLATE=C.UTF-8 LC_CTYPE=C.UTF-8 SOURCE_DATE_EPOCH=1741691552 SBUILD_CONFIG=/srv/rebuilderd/tmp/debrebuildDHxGoX/debrebuild.sbuildrc.eHyVW8LHPYyz sbuild --build=armhf --host=armhf --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 armhf; no source changes. * Rebuild against blibre2-11-absl20240722. -- arm Build Daemon (arm-conova-01) Tue, 11 Mar 2025 11:12:32 +0000 --chroot=/srv/rebuilderd/tmp/debrebuildDHxGoX/debrebuild.tar.ZC6tDybzmivv --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/rebuilderdjhZodZ/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 codethink01-arm64 +==============================================================================+ | yaramod 3.21.0-1.1+b2 (armhf) Fri, 28 Nov 2025 21:03:50 +0000 | +==============================================================================+ Package: yaramod Version: 3.21.0-1.1+b2 Source Version: 3.21.0-1.1 Distribution: unstable Machine Architecture: arm64 Host Architecture: armhf Build Architecture: armhf Build Type: any I: No tarballs found in /srv/rebuilderd/.cache/sbuild I: Unpacking /srv/rebuilderd/tmp/debrebuildDHxGoX/debrebuild.tar.ZC6tDybzmivv to /srv/rebuilderd/tmp/tmp.sbuild.9njpdx1I1b... I: Setting up the chroot... I: Creating chroot session... I: Setting up log color... I: Setting up apt archive... +------------------------------------------------------------------------------+ | Fetch source files Fri, 28 Nov 2025 21:03:57 +0000 | +------------------------------------------------------------------------------+ Local sources ------------- /srv/rebuilderd/tmp/rebuilderdjhZodZ/inputs/yaramod_3.21.0-1.1.dsc exists in /srv/rebuilderd/tmp/rebuilderdjhZodZ/inputs; copying to chroot sbuild: warning: descr(l1): found blank line where expected first heading +------------------------------------------------------------------------------+ | Install package build dependencies Fri, 28 Nov 2025 21:04:00 +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-vPgEhB/apt_archive/sbuild-build-depends-main-dummy.deb'. Install main build dependencies (apt-based resolver) ---------------------------------------------------- Installing build dependencies +------------------------------------------------------------------------------+ | Check architectures Fri, 28 Nov 2025 21:04:06 +0000 | +------------------------------------------------------------------------------+ Arch check ok (armhf included in any) +------------------------------------------------------------------------------+ | Build environment Fri, 28 Nov 2025 21:04:07 +0000 | +------------------------------------------------------------------------------+ Kernel: Linux 6.12.57+deb13-cloud-arm64 #1 SMP Debian 6.12.57-1 (2025-11-05) arm64 (aarch64) 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-arm-linux-gnueabihf_2.44-3 binutils-common_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 cpp_4:14.2.0-1 cpp-14_14.2.0-17 cpp-14-arm-linux-gnueabihf_14.2.0-17 cpp-arm-linux-gnueabihf_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+b2 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-arm-linux-gnueabihf_14.2.0-17 g++-arm-linux-gnueabihf_4:14.2.0-1 gcc_4:14.2.0-1 gcc-14_14.2.0-17 gcc-14-arm-linux-gnueabihf_14.2.0-17 gcc-14-base_14.2.0-17 gcc-arm-linux-gnueabihf_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 libgssapi-krb5-2_1.21.3-4 libgtest-dev_1.16.0-1 libhogweed6t64_3.10.1-1 libicu72_72.1-6 libidn2-0_2.3.8-1 libisl23_0.27-1 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 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 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 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 Fri, 28 Nov 2025 21:04:07 +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=8 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=1741691552 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 arm Build Daemon (arm-conova-01) dpkg-source --before-build . dpkg-buildpackage: info: host architecture armhf 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-armv7l' 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-arm-linux-gnueabihf && 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/arm-linux-gnueabihf -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/arm-linux-gnueabihf/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/arm-linux-gnueabihf/cmake/GTest/GTestConfig.cmake (found version "1.15.0") -- Found Python: /usr/bin/python3 (found version "3.13.2") found components: Interpreter -- Configuring done (44.0s) -- 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-arm-linux-gnueabihf 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-arm-linux-gnueabihf && make -j8 "INSTALL=install --strip-program=true" VERBOSE=1 make[2]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' /usr/bin/cmake -S/build/reproducible-path/yaramod-3.21.0 -B/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf --check-build-system CMakeFiles/Makefile.cmake 0 /usr/bin/cmake -E cmake_progress_start /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/CMakeFiles /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf//CMakeFiles/progress.marks make -f CMakeFiles/Makefile2 all make[3]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' 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-arm-linux-gnueabihf' cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf && /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-arm-linux-gnueabihf /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/CMakeFiles/modules_wrapping.dir/DependInfo.cmake "--color=" make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf && /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-arm-linux-gnueabihf /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/src /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/src/CMakeFiles/yaramod-obj.dir/DependInfo.cmake "--color=" make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' 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-arm-linux-gnueabihf' make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' 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-arm-linux-gnueabihf' [ 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-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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 [ 8%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/hex_string.cpp.o [ 13%] Building CXX object src/CMakeFiles/yaramod-obj.dir/builder/yara_expression_builder.cpp.o [ 13%] Building CXX object src/CMakeFiles/yaramod-obj.dir/builder/yara_rule_builder.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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 cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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 cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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 [ 18%] Building CXX object src/CMakeFiles/yaramod-obj.dir/parser/parser_driver.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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 /usr/bin/python3 /build/reproducible-path/yaramod-3.21.0/scripts/json_to_array.py -i /build/reproducible-path/yaramod-3.21.0/modules -o /build/reproducible-path/yaramod-3.21.0/include/yaramod/types/modules/generated cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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 [ 21%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/literal.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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 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_dotnet_generated.h from module_dotnet 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_console_generated.h from module_console 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_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_string_generated.h from module_string 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_time_generated.h from module_time 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_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 make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' [ 21%] Built target modules_wrapping [ 24%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/meta.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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 [ 37%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/rule.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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 [ 43%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/token.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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 [ 51%] Building CXX object src/CMakeFiles/yaramod-obj.dir/utils/json.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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 [ 56%] Building CXX object src/CMakeFiles/yaramod-obj.dir/utils/utils.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/utils/utils.cpp.o -MF CMakeFiles/yaramod-obj.dir/utils/utils.cpp.o.d -o CMakeFiles/yaramod-obj.dir/utils/utils.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/utils/utils.cpp [ 59%] Building CXX object src/CMakeFiles/yaramod-obj.dir/yaramod.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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 /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 In file included from /usr/include/c++/14/map:62, from /usr/include/nlohmann/detail/conversions/from_json.hpp:15, from /usr/include/nlohmann/adl_serializer.hpp:14, from /usr/include/nlohmann/json.hpp:34, from /build/reproducible-path/yaramod-3.21.0/include/yaramod/utils/json.h:9, from /build/reproducible-path/yaramod-3.21.0/src/utils/json.cpp:11: /usr/include/c++/14/bits/stl_tree.h: In function ‘std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_emplace_hint_unique(const_iterator, _Args&& ...) [with _Args = {const std::piecewise_construct_t&, std::tuple, std::allocator >&>, std::tuple<>}; _Key = std::__cxx11::basic_string; _Val = std::pair, nlohmann::json_abi_v3_11_3::basic_json<> >; _KeyOfValue = std::_Select1st, nlohmann::json_abi_v3_11_3::basic_json<> > >; _Compare = std::less; _Alloc = std::allocator, nlohmann::json_abi_v3_11_3::basic_json<> > >]’: /usr/include/c++/14/bits/stl_tree.h:2454:7: note: parameter passing for argument of type ‘std::_Rb_tree, std::pair, nlohmann::json_abi_v3_11_3::basic_json<> >, std::_Select1st, nlohmann::json_abi_v3_11_3::basic_json<> > >, std::less, std::allocator, nlohmann::json_abi_v3_11_3::basic_json<> > > >::const_iterator’ changed in GCC 7.1 2454 | _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /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 In file included from /usr/include/c++/14/vector:65, from /usr/include/c++/14/functional:64, from /usr/include/nlohmann/json.hpp:23: /usr/include/c++/14/bits/stl_uninitialized.h: In function ‘_ForwardIterator std::__do_uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator*, vector, allocator > > >; _ForwardIterator = nlohmann::json_abi_v3_11_3::basic_json<>*]’: /usr/include/c++/14/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type ‘__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >’ changed in GCC 7.1 113 | __do_uninit_copy(_InputIterator __first, _InputIterator __last, | ^~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/stl_uninitialized.h:113:5: note: parameter passing for argument of type ‘__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >’ changed in GCC 7.1 In static member function ‘static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >; _ForwardIterator = nlohmann::json_abi_v3_11_3::basic_json<>*; bool _TrivialValueTypes = false]’, inlined from ‘_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator*, vector, allocator > > >; _ForwardIterator = nlohmann::json_abi_v3_11_3::basic_json<>*]’ at /usr/include/c++/14/bits/stl_uninitialized.h:185:15, inlined from ‘_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator*, vector, allocator > > >; _ForwardIterator = nlohmann::json_abi_v3_11_3::basic_json<>*; _Tp = nlohmann::json_abi_v3_11_3::basic_json<>]’ at /usr/include/c++/14/bits/stl_uninitialized.h:373:37, inlined from ‘std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = nlohmann::json_abi_v3_11_3::basic_json<>; _Alloc = std::allocator >]’ at /usr/include/c++/14/bits/stl_vector.h:606:31, inlined from ‘void std::__new_allocator<_Tp>::construct(_Up*, _Args&& ...) [with _Up = std::vector, std::allocator > >; _Args = {const std::vector, std::allocator >, bool, long long int, long long unsigned int, double, std::allocator, nlohmann::json_abi_v3_11_3::adl_serializer, std::vector >, void>, std::allocator, std::allocator >, bool, long long int, long long unsigned int, double, std::allocator, nlohmann::json_abi_v3_11_3::adl_serializer, std::vector >, void> > >&}; _Tp = std::vector, std::allocator > >]’ at /usr/include/c++/14/bits/new_allocator.h:191:4, inlined from ‘static void std::allocator_traits >::construct(allocator_type&, _Up*, _Args&& ...) [with _Up = std::vector, std::allocator > >; _Args = {const std::vector, std::allocator >, bool, long long int, long long unsigned int, double, std::allocator, nlohmann::json_abi_v3_11_3::adl_serializer, std::vector >, void>, std::allocator, std::allocator >, bool, long long int, long long unsigned int, double, std::allocator, nlohmann::json_abi_v3_11_3::adl_serializer, std::vector >, void> > >&}; _Tp = std::vector, std::allocator > >]’ at /usr/include/c++/14/bits/alloc_traits.h:575:17, inlined from ‘static T* nlohmann::json_abi_v3_11_3::basic_json::create(Args&& ...) [with T = std::vector, std::allocator > >; Args = {const std::vector, std::allocator >, bool, long long int, long long unsigned int, double, std::allocator, nlohmann::json_abi_v3_11_3::adl_serializer, std::vector >, void>, std::allocator, std::allocator >, bool, long long int, long long unsigned int, double, std::allocator, nlohmann::json_abi_v3_11_3::adl_serializer, std::vector >, void> > >&}; ObjectType = std::map; ArrayType = std::vector; StringType = std::__cxx11::basic_string; BooleanType = bool; NumberIntegerType = long long int; NumberUnsignedType = long long unsigned int; NumberFloatType = double; AllocatorType = std::allocator; JSONSerializer = nlohmann::json_abi_v3_11_3::adl_serializer; BinaryType = std::vector; CustomBaseClass = void]’ at /usr/include/nlohmann/json.hpp:388:35, inlined from ‘nlohmann::json_abi_v3_11_3::basic_json::json_value::json_value(const nlohmann::json_abi_v3_11_3::basic_json::array_t&) [with ObjectType = std::map; ArrayType = std::vector; StringType = std::__cxx11::basic_string; BooleanType = bool; NumberIntegerType = long long int; NumberUnsignedType = long long unsigned int; NumberFloatType = double; AllocatorType = std::allocator; JSONSerializer = nlohmann::json_abi_v3_11_3::adl_serializer; BinaryType = std::vector; CustomBaseClass = void]’ at /usr/include/nlohmann/json.hpp:537:65, inlined from ‘nlohmann::json_abi_v3_11_3::basic_json::basic_json(const nlohmann::json_abi_v3_11_3::basic_json&) [with ObjectType = std::map; ArrayType = std::vector; StringType = std::__cxx11::basic_string; BooleanType = bool; NumberIntegerType = long long int; NumberUnsignedType = long long unsigned int; NumberFloatType = double; AllocatorType = std::allocator; JSONSerializer = nlohmann::json_abi_v3_11_3::adl_serializer; BinaryType = std::vector; CustomBaseClass = void]’ at /usr/include/nlohmann/json.hpp:1162:32: /usr/include/c++/14/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type ‘__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >’ changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/14/map:63: In member function ‘std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = std::__cxx11::basic_string; _Tp = nlohmann::json_abi_v3_11_3::basic_json<>; _Compare = std::less; _Alloc = std::allocator, nlohmann::json_abi_v3_11_3::basic_json<> > >]’, inlined from ‘bool nlohmann::json_abi_v3_11_3::detail::json_sax_dom_callback_parser::key(string_t&) [with BasicJsonType = nlohmann::json_abi_v3_11_3::basic_json<>]’ at /usr/include/nlohmann/detail/input/json_sax.hpp:441:83: /usr/include/c++/14/bits/stl_map.h:513:44: note: parameter passing for argument of type ‘std::_Rb_tree, std::pair, nlohmann::json_abi_v3_11_3::basic_json<> >, std::_Select1st, nlohmann::json_abi_v3_11_3::basic_json<> > >, std::less, std::allocator, nlohmann::json_abi_v3_11_3::basic_json<> > > >::const_iterator’ changed in GCC 7.1 513 | __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 514 | std::tuple(__k), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 515 | std::tuple<>()); | ~~~~~~~~~~~~~~~ /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 In static member function ‘static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >; _ForwardIterator = nlohmann::json_abi_v3_11_3::basic_json<>*; bool _TrivialValueTypes = false]’, inlined from ‘_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator*, vector, allocator > > >; _ForwardIterator = nlohmann::json_abi_v3_11_3::basic_json<>*]’ at /usr/include/c++/14/bits/stl_uninitialized.h:185:15, inlined from ‘_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator*, vector, allocator > > >; _ForwardIterator = nlohmann::json_abi_v3_11_3::basic_json<>*; _Tp = nlohmann::json_abi_v3_11_3::basic_json<>]’ at /usr/include/c++/14/bits/stl_uninitialized.h:373:37, inlined from ‘std::vector<_Tp, _Alloc>::pointer std::vector<_Tp, _Alloc>::_M_allocate_and_copy(size_type, _ForwardIterator, _ForwardIterator) [with _ForwardIterator = __gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >; _Tp = nlohmann::json_abi_v3_11_3::basic_json<>; _Alloc = std::allocator >]’ at /usr/include/c++/14/bits/stl_vector.h:1624:35, inlined from ‘std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&) [with _Tp = nlohmann::json_abi_v3_11_3::basic_json<>; _Alloc = std::allocator >]’ at /usr/include/c++/14/bits/vector.tcc:238:44, inlined from ‘void nlohmann::json_abi_v3_11_3::detail::from_json_array_impl(const BasicJsonType&, typename BasicJsonType::array_t&, priority_tag<3>) [with BasicJsonType = nlohmann::json_abi_v3_11_3::basic_json<>]’ at /usr/include/nlohmann/detail/conversions/from_json.hpp:196:9, inlined from ‘decltype (((nlohmann::json_abi_v3_11_3::detail::from_json_array_impl(j, arr, nlohmann::json_abi_v3_11_3::detail::priority_tag<3>{}), j.get()), void())) nlohmann::json_abi_v3_11_3::detail::from_json(const BasicJsonType&, ConstructibleArrayType&) [with BasicJsonType = nlohmann::json_abi_v3_11_3::basic_json<>; ConstructibleArrayType = std::vector, std::allocator > >; typename std::enable_if<((((is_constructible_array_type::value && (! is_constructible_object_type::value)) && (! is_constructible_string_type::value)) && (! std::is_same::value)) && (! is_basic_json::value)), int>::type = 0]’ at /usr/include/nlohmann/detail/conversions/from_json.hpp:273:25: /usr/include/c++/14/bits/stl_uninitialized.h:137:39: note: parameter passing for argument of type ‘__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >’ changed in GCC 7.1 137 | { return std::__do_uninit_copy(__first, __last, __result); } | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ In member function ‘std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = std::__cxx11::basic_string; _Tp = nlohmann::json_abi_v3_11_3::basic_json<>; _Compare = std::less; _Alloc = std::allocator, nlohmann::json_abi_v3_11_3::basic_json<> > >]’, inlined from ‘bool nlohmann::json_abi_v3_11_3::detail::json_sax_dom_parser::key(string_t&) [with BasicJsonType = nlohmann::json_abi_v3_11_3::basic_json<>]’ at /usr/include/nlohmann/detail/input/json_sax.hpp:246:79, inlined from ‘bool nlohmann::json_abi_v3_11_3::detail::parser::sax_parse_internal(SAX*) [with SAX = nlohmann::json_abi_v3_11_3::detail::json_sax_dom_parser >; BasicJsonType = nlohmann::json_abi_v3_11_3::basic_json<>; InputAdapterType = nlohmann::json_abi_v3_11_3::detail::iterator_input_adapter<__gnu_cxx::__normal_iterator > >]’ at /usr/include/nlohmann/detail/input/parser.hpp:219:29: /usr/include/c++/14/bits/stl_map.h:513:44: note: parameter passing for argument of type ‘std::_Rb_tree, std::pair, nlohmann::json_abi_v3_11_3::basic_json<> >, std::_Select1st, nlohmann::json_abi_v3_11_3::basic_json<> > >, std::less, std::allocator, nlohmann::json_abi_v3_11_3::basic_json<> > > >::const_iterator’ changed in GCC 7.1 513 | __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 514 | std::tuple(__k), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 515 | std::tuple<>()); | ~~~~~~~~~~~~~~~ In member function ‘std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = std::__cxx11::basic_string; _Tp = nlohmann::json_abi_v3_11_3::basic_json<>; _Compare = std::less; _Alloc = std::allocator, nlohmann::json_abi_v3_11_3::basic_json<> > >]’, inlined from ‘bool nlohmann::json_abi_v3_11_3::detail::json_sax_dom_parser::key(string_t&) [with BasicJsonType = nlohmann::json_abi_v3_11_3::basic_json<>]’ at /usr/include/nlohmann/detail/input/json_sax.hpp:246:79, inlined from ‘bool nlohmann::json_abi_v3_11_3::detail::parser::sax_parse_internal(SAX*) [with SAX = nlohmann::json_abi_v3_11_3::detail::json_sax_dom_parser >; BasicJsonType = nlohmann::json_abi_v3_11_3::basic_json<>; InputAdapterType = nlohmann::json_abi_v3_11_3::detail::iterator_input_adapter<__gnu_cxx::__normal_iterator > >]’ at /usr/include/nlohmann/detail/input/parser.hpp:430:21: /usr/include/c++/14/bits/stl_map.h:513:44: note: parameter passing for argument of type ‘std::_Rb_tree, std::pair, nlohmann::json_abi_v3_11_3::basic_json<> >, std::_Select1st, nlohmann::json_abi_v3_11_3::basic_json<> > >, std::less, std::allocator, nlohmann::json_abi_v3_11_3::basic_json<> > > >::const_iterator’ changed in GCC 7.1 513 | __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 514 | std::tuple(__k), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 515 | std::tuple<>()); | ~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:190 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[15], const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[4], const char (&)[15], const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1290:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~~ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ 1290 | .production( | ~~~~~~~~~~~^ 1291 | "FOR", "for_expression", "OF", "string_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1292 | if (isInStringLoop()) | ~~~~~~~~~~~~~~~~~~~~~ 1293 | error_handle(args[0].getTokenIt()->getLocation(), "Nesting of for-loop over strings is not allowed"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1294 | stringLoopEnter(); | ~~~~~~~~~~~~~~~~~~ 1295 | return {}; | ~~~~~~~~~~ 1296 | }, | ~~ 1297 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1298 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1299 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1300 | TokenIt of = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1301 | auto set = std::move(args[3].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1302 | | 1303 | TokenIt lp = args[6].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1304 | auto expr = args[7].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1305 | TokenIt rp = args[8].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1306 | | 1307 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1308 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1309 | auto output = std::make_shared(for_token, std::move(for_expr), of, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1310 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1311 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1312 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1313 | stringLoopLeave(); | ~~~~~~~~~~~~~~~~~~ 1314 | return output; | ~~~~~~~~~~~~~~ 1315 | } | ~ 1316 | ) | ~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1299:38: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1299 | auto for_expr = std::move(args[1].getExpression()); | ^~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1299:38: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1301:38: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1301 | auto set = std::move(args[3].getExpression()); | ^~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1301:38: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:184 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[3], const char (&)[19], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[15], const char (&)[3], const char (&)[3], const char (&)[19], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[4], const char (&)[15], const char (&)[3], const char (&)[3], const char (&)[19], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1143:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~^ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1152:38: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1152 | auto for_expr = std::move(args[1].getExpression()); | ^~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1152:38: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1156:38: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1156 | auto set = std::move(args[4].getExpression()); | ^~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1156:38: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:186 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[15], const char (&)[3], const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[4], const char (&)[15], const char (&)[3], const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1171:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~^ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1208:38: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1208 | auto for_expr = std::move(args[1].getExpression()); | ^~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1208:38: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1211:38: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1211 | auto array = std::move(args[4].getExpression()); | ^~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1211:38: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp: In instantiation of ‘yaramod::ParserDriver::defineGrammar():: [with auto:188 = std::vector]’: /usr/include/c++/14/bits/invoke.h:61:36: required from ‘constexpr _Res std::__invoke_impl(__invoke_other, _Fn&&, _Args&& ...) [with _Res = yaramod::Value; _Fn = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}]’ 61 | { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/invoke.h:114:35: required from ‘constexpr std::enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> std::__invoke_r(_Callable&&, _Args&& ...) [with _Res = yaramod::Value; _Callable = yaramod::ParserDriver::defineGrammar()::&; _Args = {vector >}; enable_if_t<((bool)is_invocable_r_v<_Res, _Callable, _Args ...>), _Res> = yaramod::Value]’ 114 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 115 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/14/bits/std_function.h:290:30: required from ‘static _Res std::_Function_handler<_Res(_ArgTypes ...), _Functor>::_M_invoke(const std::_Any_data&, _ArgTypes&& ...) [with _Res = yaramod::Value; _Functor = yaramod::ParserDriver::defineGrammar()::; _ArgTypes = {std::vector >&&}]’ 290 | return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 | std::forward<_ArgTypes>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ 118 | _production(sa, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:118:14: recursively required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[3], const char (&)[6], const char (&)[3], const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:118:14: required from ‘void pog::RuleBuilder::_production(std::vector&, const std::string&, Args&& ...) [with Args = {const char (&)[15], const char (&)[3], const char (&)[6], const char (&)[3], const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value; std::string = std::__cxx11::basic_string]’ /usr/include/pog/rule_builder.h:101:14: required from ‘pog::RuleBuilder& pog::RuleBuilder::production(Args&& ...) [with Args = {const char (&)[4], const char (&)[15], const char (&)[3], const char (&)[6], const char (&)[3], const char (&)[3], const char (&)[11], yaramod::ParserDriver::defineGrammar()::, const char (&)[6], const char (&)[3], const char (&)[11], const char (&)[3], yaramod::ParserDriver::defineGrammar()::}; ValueT = yaramod::Value]’ 101 | _production(_rhss.back().symbols_and_action, std::forward(args)...); | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1227:14: required from here 1090 | auto& expr = _parser.rule("expression") // Expression::Ptr | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1091 | .production("boolean", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1092 | auto output = std::make_shared(currentTokenStream(), args[0].getTokenIt()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1093 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1094 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1095 | return output; | ~~~~~~~~~~~~~~ 1096 | }) | ~~ 1097 | .production("STRING_ID", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1098 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1099 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1100 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1101 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1102 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1103 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1104 | auto output = std::make_shared(std::move(id)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1105 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1106 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1107 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1108 | return output; | ~~~~~~~~~~~~~~ 1109 | }) | ~~ 1110 | .production("STRING_ID", "AT", "primary_expression", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1111 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1112 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1113 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1114 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1115 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1116 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1117 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1118 | Expression::Ptr expr = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119 | if (!expr->isInt()) | ~~~~~~~~~~~~~~~~~~~ 1120 | error_handle(args[1].getTokenIt()->getLocation(), "Operator 'at' expects integer on the right-hand side of the expression"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1121 | auto output = std::make_shared(id, op, std::move(expr)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1122 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1123 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1124 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1125 | return output; | ~~~~~~~~~~~~~~ 1126 | }) | ~~ 1127 | .production("STRING_ID", "IN", "range", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1128 | TokenIt id = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1129 | assert(id->isString()); | ~~~~~~~~~~~~~~~~~~~~~~~ 1130 | if (!stringExists(id->getString())) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1131 | error_handle(id->getLocation(), "Reference to undefined string '" + id->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1132 | if (id->getString().size() > 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 | id->setValue(findStringDefinition(id->getString())); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1134 | TokenIt op = args[1].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1135 | Expression::Ptr range = args[2].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1136 | | 1137 | auto output = std::make_shared(id, op, std::move(range)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1138 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1139 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1140 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1141 | return output; | ~~~~~~~~~~~~~~ 1142 | }) | ~~ 1143 | .production( | ~~~~~~~~~~~~ 1144 | "FOR", "for_expression", "ID", "IN", "for_expression_set", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1145 | auto symbol = std::make_shared(args[2].getTokenIt()->getString(), Expression::Type::Int); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1146 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1147 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1148 | return {}; | ~~~~~~~~~~ 1149 | }, | ~~ 1150 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1151 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1152 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1153 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1154 | | 1155 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1156 | auto set = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1157 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1158 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1160 | | 1161 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1162 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1163 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1164 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(set), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1165 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1166 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1167 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1168 | return output; | ~~~~~~~~~~~~~~ 1169 | } | ~ 1170 | ) | ~ 1171 | .production( | ~~~~~~~~~~~~ 1172 | "FOR", "for_expression", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1173 | const auto& iterable = args[4].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1174 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1175 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1176 | if (!parentSymbol->isArray()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 | { | ~ 1178 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1179 | error_handle((++args[3].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an array"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1180 | else | ~~~~ 1181 | { | ~ 1182 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1183 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1184 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1185 | } | ~ 1186 | } | ~ 1187 | | 1188 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1189 | | 1190 | std::shared_ptr symbol; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1191 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1192 | { | ~ 1193 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1194 | symbol = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1195 | symbol->setName(args[2].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1196 | } | ~ 1197 | else | ~~~~ 1198 | { | ~ 1199 | symbol = std::make_shared(args[2].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1200 | } | ~ 1201 | | 1202 | if (!addLocalSymbol(symbol)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1203 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1204 | return {}; | ~~~~~~~~~~ 1205 | }, | ~~ 1206 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1207 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1208 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1209 | TokenIt id = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1210 | TokenIt op_in = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1211 | auto array = std::move(args[4].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1212 | | 1213 | TokenIt lp = args[7].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1214 | auto expr = args[8].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1215 | TokenIt rp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1216 | | 1217 | removeLocalSymbol(id->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1218 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1219 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1220 | auto output = std::make_shared(for_token, std::move(for_expr), id, op_in, std::move(array), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1221 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1222 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1223 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1224 | return output; | ~~~~~~~~~~~~~~ 1225 | } | ~ 1226 | ) | ~ 1227 | .production( | ~~~~~~~~~~~^ 1228 | "FOR", "for_expression", "ID", "COMMA", "ID", "IN", "identifier", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1229 | const auto& iterable = args[6].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1230 | std::shared_ptr parentSymbol = std::static_pointer_cast(iterable)->getSymbol(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1231 | assert(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~ 1232 | if (!parentSymbol->isDictionary()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 | { | ~ 1234 | if (!incompleteMode() || !parentSymbol->isUndefined()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1235 | error_handle((++args[5].getTokenIt())->getLocation(), "Identifier '" + parentSymbol->getName() + "' is not an dictionary"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1236 | else | ~~~~ 1237 | { | ~ 1238 | auto parentExpr = std::static_pointer_cast(iterable); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1239 | const auto& parentTokenText = parentExpr->getSymbolToken()->getText(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1240 | parentExpr->setSymbol(std::make_shared(parentTokenText, ExpressionType::Undefined)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1241 | } | ~ 1242 | } | ~ 1243 | | 1244 | std::shared_ptr symbol1 = std::make_shared(args[2].getTokenIt()->getString(), ExpressionType::String); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1245 | if (!addLocalSymbol(symbol1)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1246 | error_handle(args[2].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[2].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1247 | | 1248 | std::shared_ptr iterParentSymbol = std::static_pointer_cast(parentSymbol); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1249 | | 1250 | std::shared_ptr symbol2; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1251 | if (iterParentSymbol->isStructured()) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1252 | { | ~ 1253 | auto s = std::static_pointer_cast(iterParentSymbol->getStructuredElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1254 | symbol2 = std::make_shared(*s); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1255 | symbol2->setName(args[4].getTokenIt()->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1256 | } | ~ 1257 | else | ~~~~ 1258 | { | ~ 1259 | symbol2 = std::make_shared(args[4].getTokenIt()->getString(), iterParentSymbol->getElementType()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1260 | } | ~ 1261 | | 1262 | if (!addLocalSymbol(symbol2)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1263 | error_handle(args[4].getTokenIt()->getLocation(), "Redefinition of identifier '" + args[4].getTokenIt()->getString() + "'"); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1264 | return {}; | ~~~~~~~~~~ 1265 | }, | ~~ 1266 | "COLON", "LP", "expression", "RP", [&](auto&& args) -> Value { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1267 | TokenIt for_token = args[0].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1268 | auto for_expr = std::move(args[1].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1269 | TokenIt id1 = args[2].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1270 | TokenIt comma = args[3].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1271 | TokenIt id2 = args[4].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1272 | TokenIt op_in = args[5].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1273 | auto dict = std::move(args[6].getExpression()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1274 | | 1275 | TokenIt lp = args[9].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1276 | auto expr = args[10].getExpression(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1277 | TokenIt rp = args[11].getTokenIt(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1278 | | 1279 | removeLocalSymbol(id1->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1280 | removeLocalSymbol(id2->getString()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1281 | lp->setType(TokenType::LP_WITH_SPACE_AFTER); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1282 | rp->setType(TokenType::RP_WITH_SPACE_BEFORE); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1283 | auto output = std::make_shared(for_token, std::move(for_expr), id1, comma, id2, op_in, std::move(dict), lp, std::move(expr), rp); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1284 | output->setType(Expression::Type::Bool); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1285 | output->setTokenStream(currentTokenStream()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1286 | output->setUid(_uidGen.next()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1287 | return output; | ~~~~~~~~~~~~~~ 1288 | } | ~ 1289 | ) | ~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1268:38: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1268 | auto for_expr = std::move(args[1].getExpression()); | ^~~~~~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1268:38: note: remove ‘std::move’ call /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1273:38: warning: moving a temporary object prevents copy elision [-Wpessimizing-move] 1273 | auto dict = std::move(args[6].getExpression()); | ^~~~ /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp:1273:38: note: remove ‘std::move’ call make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' [ 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-arm-linux-gnueabihf' cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf && /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-arm-linux-gnueabihf /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/src /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/src/CMakeFiles/yaramod-static.dir/DependInfo.cmake "--color=" make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf && /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-arm-linux-gnueabihf /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/src /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/src/CMakeFiles/yaramod.dir/DependInfo.cmake "--color=" make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' make -f src/CMakeFiles/yaramod-static.dir/build.make src/CMakeFiles/yaramod-static.dir/build make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' 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-arm-linux-gnueabihf' make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' [ 62%] Linking CXX static library libyaramod.a cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src && /usr/bin/cmake -E cmake_link_script CMakeFiles/yaramod.dir/link.txt --verbose=1 cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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 -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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/arm-linux-gnueabihf/libre2.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_check_op.so /usr/lib/arm-linux-gnueabihf/libabsl_log_severity.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_conditions.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_message.so /usr/lib/arm-linux-gnueabihf/libabsl_examine_stack.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_format.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_proto.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_nullguard.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_log_sink_set.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_globals.so /usr/lib/arm-linux-gnueabihf/libabsl_log_globals.so /usr/lib/arm-linux-gnueabihf/libabsl_log_sink.so /usr/lib/arm-linux-gnueabihf/libabsl_log_entry.so /usr/lib/arm-linux-gnueabihf/libabsl_strerror.so /usr/lib/arm-linux-gnueabihf/libabsl_vlog_config_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_fnmatch.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_marshalling.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_reflection.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_private_handle_accessor.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_commandlineflag.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_commandlineflag_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_config.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_program_name.so /usr/lib/arm-linux-gnueabihf/libabsl_raw_logging_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_cord.so /usr/lib/arm-linux-gnueabihf/libabsl_cordz_info.so /usr/lib/arm-linux-gnueabihf/libabsl_cord_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_cordz_functions.so /usr/lib/arm-linux-gnueabihf/libabsl_cordz_handle.so /usr/lib/arm-linux-gnueabihf/libabsl_crc_cord_state.so /usr/lib/arm-linux-gnueabihf/libabsl_crc32c.so /usr/lib/arm-linux-gnueabihf/libabsl_crc_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_crc_cpu_detect.so /usr/lib/arm-linux-gnueabihf/libabsl_raw_hash_set.so /usr/lib/arm-linux-gnueabihf/libabsl_hashtablez_sampler.so /usr/lib/arm-linux-gnueabihf/libabsl_exponential_biased.so /usr/lib/arm-linux-gnueabihf/libabsl_hash.so /usr/lib/arm-linux-gnueabihf/libabsl_city.so /usr/lib/arm-linux-gnueabihf/libabsl_bad_variant_access.so /usr/lib/arm-linux-gnueabihf/libabsl_low_level_hash.so /usr/lib/arm-linux-gnueabihf/libabsl_throw_delegate.so /usr/lib/arm-linux-gnueabihf/libabsl_bad_optional_access.so /usr/lib/arm-linux-gnueabihf/libabsl_str_format_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_synchronization.so /usr/lib/arm-linux-gnueabihf/libabsl_graphcycles_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_kernel_timeout_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_stacktrace.so /usr/lib/arm-linux-gnueabihf/libabsl_symbolize.so /usr/lib/arm-linux-gnueabihf/libabsl_debugging_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_demangle_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_demangle_rust.so /usr/lib/arm-linux-gnueabihf/libabsl_decode_rust_punycode.so /usr/lib/arm-linux-gnueabihf/libabsl_utf8_for_code_point.so /usr/lib/arm-linux-gnueabihf/libabsl_malloc_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_time.so /usr/lib/arm-linux-gnueabihf/libabsl_civil_time.so /usr/lib/arm-linux-gnueabihf/libabsl_strings.so /usr/lib/arm-linux-gnueabihf/libabsl_strings_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_string_view.so /usr/lib/arm-linux-gnueabihf/libabsl_base.so -latomic /usr/lib/arm-linux-gnueabihf/librt.a /usr/lib/arm-linux-gnueabihf/libabsl_spinlock_wait.so /usr/lib/arm-linux-gnueabihf/libabsl_int128.so /usr/lib/arm-linux-gnueabihf/libabsl_log_severity.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_conditions.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_message.so /usr/lib/arm-linux-gnueabihf/libabsl_examine_stack.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_format.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_proto.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_nullguard.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_log_sink_set.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_globals.so /usr/lib/arm-linux-gnueabihf/libabsl_log_globals.so /usr/lib/arm-linux-gnueabihf/libabsl_log_sink.so /usr/lib/arm-linux-gnueabihf/libabsl_log_entry.so /usr/lib/arm-linux-gnueabihf/libabsl_strerror.so /usr/lib/arm-linux-gnueabihf/libabsl_vlog_config_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_fnmatch.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_marshalling.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_reflection.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_private_handle_accessor.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_commandlineflag.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_commandlineflag_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_config.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_program_name.so /usr/lib/arm-linux-gnueabihf/libabsl_raw_logging_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_cord.so /usr/lib/arm-linux-gnueabihf/libabsl_cordz_info.so /usr/lib/arm-linux-gnueabihf/libabsl_cord_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_cordz_functions.so /usr/lib/arm-linux-gnueabihf/libabsl_cordz_handle.so /usr/lib/arm-linux-gnueabihf/libabsl_crc_cord_state.so /usr/lib/arm-linux-gnueabihf/libabsl_crc32c.so /usr/lib/arm-linux-gnueabihf/libabsl_crc_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_crc_cpu_detect.so /usr/lib/arm-linux-gnueabihf/libabsl_raw_hash_set.so /usr/lib/arm-linux-gnueabihf/libabsl_hashtablez_sampler.so /usr/lib/arm-linux-gnueabihf/libabsl_exponential_biased.so /usr/lib/arm-linux-gnueabihf/libabsl_hash.so /usr/lib/arm-linux-gnueabihf/libabsl_city.so /usr/lib/arm-linux-gnueabihf/libabsl_bad_variant_access.so /usr/lib/arm-linux-gnueabihf/libabsl_low_level_hash.so /usr/lib/arm-linux-gnueabihf/libabsl_throw_delegate.so /usr/lib/arm-linux-gnueabihf/libabsl_bad_optional_access.so /usr/lib/arm-linux-gnueabihf/libabsl_str_format_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_synchronization.so /usr/lib/arm-linux-gnueabihf/libabsl_graphcycles_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_kernel_timeout_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_stacktrace.so /usr/lib/arm-linux-gnueabihf/libabsl_symbolize.so /usr/lib/arm-linux-gnueabihf/libabsl_debugging_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_demangle_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_demangle_rust.so /usr/lib/arm-linux-gnueabihf/libabsl_decode_rust_punycode.so /usr/lib/arm-linux-gnueabihf/l/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-arm-linux-gnueabihf' [ 64%] Built target yaramod-static ibabsl_utf8_for_code_point.so /usr/lib/arm-linux-gnueabihf/libabsl_malloc_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_time.so /usr/lib/arm-linux-gnueabihf/libabsl_civil_time.so /usr/lib/arm-linux-gnueabihf/libabsl_strings.so /usr/lib/arm-linux-gnueabihf/libabsl_strings_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_string_view.so /usr/lib/arm-linux-gnueabihf/libabsl_base.so -latomic /usr/lib/arm-linux-gnueabihf/librt.a /usr/lib/arm-linux-gnueabihf/libabsl_spinlock_wait.so /usr/lib/arm-linux-gnueabihf/libabsl_int128.so /usr/lib/arm-linux-gnueabihf/libabsl_time_zone.so cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/src && /usr/bin/cmake -E cmake_symlink_library libyaramod.so.3.21.0 libyaramod.so.0 libyaramod.so make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' [ 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-arm-linux-gnueabihf' cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf && /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-arm-linux-gnueabihf /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/src/python /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/src/python/CMakeFiles/yaramod-python.dir/DependInfo.cmake "--color=" make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf && /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-arm-linux-gnueabihf /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/tests/cpp /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/tests/cpp/CMakeFiles/yaramod_tests.dir/DependInfo.cmake "--color=" make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' 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-arm-linux-gnueabihf' make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' 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-arm-linux-gnueabihf' [ 70%] Building CXX object src/python/CMakeFiles/yaramod-python.dir/yaramod_python.cpp.o [ 70%] Building CXX object src/python/CMakeFiles/yaramod-python.dir/py_visitor.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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 cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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 [ 72%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/tokenstream_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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/parser_tests.cpp.o [ 78%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/trie_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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 [ 81%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/builder_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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 [ 83%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/utils_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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 [ 86%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/representation_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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 [ 89%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/visitor_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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 /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); } | ^~~~~~~~ [ 91%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/yara_file_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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-arm-linux-gnueabihf/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-arm-linux-gnueabihf/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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-arm-linux-gnueabihf/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 -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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-arm-linux-gnueabihf/src ../../src/libyaramod.so.3.21.0 /usr/lib/arm-linux-gnueabihf/libre2.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_check_op.so /usr/lib/arm-linux-gnueabihf/libabsl_log_severity.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_conditions.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_message.so /usr/lib/arm-linux-gnueabihf/libabsl_examine_stack.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_format.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_proto.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_nullguard.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_log_sink_set.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_globals.so /usr/lib/arm-linux-gnueabihf/libabsl_log_globals.so /usr/lib/arm-linux-gnueabihf/libabsl_log_sink.so /usr/lib/arm-linux-gnueabihf/libabsl_log_entry.so /usr/lib/arm-linux-gnueabihf/libabsl_strerror.so /usr/lib/arm-linux-gnueabihf/libabsl_vlog_config_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_fnmatch.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_marshalling.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_reflection.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_private_handle_accessor.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_commandlineflag.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_commandlineflag_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_config.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_program_name.so /usr/lib/arm-linux-gnueabihf/libabsl_raw_logging_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_cord.so /usr/lib/arm-linux-gnueabihf/libabsl_cordz_info.so /usr/lib/arm-linux-gnueabihf/libabsl_cord_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_cordz_functions.so /usr/lib/arm-linux-gnueabihf/libabsl_cordz_handle.so /usr/lib/arm-linux-gnueabihf/libabsl_crc_cord_state.so /usr/lib/arm-linux-gnueabihf/libabsl_crc32c.so /usr/lib/arm-linux-gnueabihf/libabsl_crc_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_crc_cpu_detect.so /usr/lib/arm-linux-gnueabihf/libabsl_raw_hash_set.so /usr/lib/arm-linux-gnueabihf/libabsl_hashtablez_sampler.so /usr/lib/arm-linux-gnueabihf/libabsl_exponential_biased.so /usr/lib/arm-linux-gnueabihf/libabsl_hash.so /usr/lib/arm-linux-gnueabihf/libabsl_city.so /usr/lib/arm-linux-gnueabihf/libabsl_bad_variant_access.so /usr/lib/arm-linux-gnueabihf/libabsl_low_level_hash.so /usr/lib/arm-linux-gnueabihf/libabsl_throw_delegate.so /usr/lib/arm-linux-gnueabihf/libabsl_bad_optional_access.so /usr/lib/arm-linux-gnueabihf/libabsl_str_format_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_synchronization.so /usr/lib/arm-linux-gnueabihf/libabsl_graphcycles_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_kernel_timeout_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_stacktrace.so /usr/lib/arm-linux-gnueabihf/libabsl_symbolize.so /usr/lib/arm-linux-gnueabihf/libabsl_debugging_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_demangle_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_demangle_rust.so /usr/lib/arm-linux-gnueabihf/libabsl_decode_rust_punycode.so /usr/lib/arm-linux-gnueabihf/libabsl_utf8_for_code_point.so /usr/lib/arm-linux-gnueabihf/libabsl_malloc_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_time.so /usr/lib/arm-linux-gnueabihf/libabsl_civil_time.so /usr/lib/arm-linux-gnueabihf/libabsl_strings.so /usr/lib/arm-linux-gnueabihf/libabsl_strings_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_string_view.so /usr/lib/arm-linux-gnueabihf/libabsl_base.so -latomic /usr/lib/arm-linux-gnueabihf/librt.a /usr/lib/arm-linux-gnueabihf/libabsl_spinlock_wait.so /usr/lib/arm-linux-gnueabihf/libabsl_int128.so /usr/lib/arm-linux-gnueabihf/libabsl_log_severity.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_conditions.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_message.so /usr/lib/arm-linux-gnueabihf/libabsl_examine_stack.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_format.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_proto.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_nullguard.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_log_sink_set.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_globals.so /usr/lib/arm-linux-gnueabihf/libabsl_log_globals.so /usr/lib/arm-linux-gnueabihf/libabsl_log_sink.so /usr/lib/arm-linux-gnueabihf/libabsl_log_entry.so /usr/lib/arm-linux-gnueabihf/libabsl_strerror.so /usr/lib/arm-linux-gnueabihf/libabsl_vlog_config_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_fnmatch.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_marshalling.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_reflection.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_private_handle_accessor.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_commandlineflag.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_commandlineflag_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_config.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_program_name.so /usr/lib/arm-linux-gnueabihf/libabsl_raw_logging_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_cord.so /usr/lib/arm-linux-gnueabihf/libabsl_cordz_info.so /usr/lib/arm-linux-gnueabihf/libabsl_cord_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_cordz_functions.so /usr/lib/arm-linux-gnueabihf/libabsl_cordz_handle.so /usr/lib/arm-linux-gnueabihf/libabsl_crc_cord_state.so /usr/lib/arm-linux-gnueabihf/libabsl_crc32c.so /usr/lib/arm-linux-gnueabihf/libabsl_crc_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_crc_cpu_detect.so /usr/lib/arm-linux-gnueabihf/libabsl_raw_hash_set.so /usr/lib/arm-linux-gnueabihf/libabsl_hashtablez_sampler.so /usr/lib/arm-linux-gnueabihf/libabsl_exponential_biased.so /usr/lib/arm-linux-gnueabihf/libabsl_hash.so /usr/lib/arm-linux-gnueabihf/libabsl_city.so /usr/lib/arm-linux-gnueabihf/libabsl_bad_variant_access.so /usr/lib/arm-linux-gnueabihf/libabsl_low_level_hash.so /usr/lib/arm-linux-gnueabihf/libabsl_throw_delegate.so /usr/lib/arm-linux-gnueabihf/libabsl_bad_optional_access.so /usr/lib/arm-linux-gnueabihf/libabsl_str_format_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_synchronization.so /usr/lib/arm-linux-gnueabihf/libabsl_graphcycles_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_kernel_timeout_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_stacktrace.so /usr/lib/arm-linux-gnueabihf/libabsl_symbolize.so /usr/lib/arm-linux-gnueabihf/libabsl_debugging_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_demangle_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_demangle_rust.so /usr/lib/arm-linux-gnueabihf/libabsl_decode_rust_punycode.so /usr/lib/arm-linux-gnueabihf/libabsl_utf8_for_code_point.so /usr/lib/arm-linux-gnueabihf/libabsl_malloc_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_time.so /usr/lib/arm-linux-gnueabihf/libabsl_civil_time.so /usr/lib/arm-linux-gnueabihf/libabsl_strings.so /usr/lib/arm-linux-gnueabihf/libabsl_strings_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_string_view.so /usr/lib/arm-linux-gnueabihf/libabsl_base.so -latomic /usr/lib/arm-linux-gnueabihf/librt.a /usr/lib/arm-linux-gnueabihf/libabsl_spinlock_wait.so /usr/lib/arm-linux-gnueabihf/libabsl_int128.so /usr/lib/arm-linux-gnueabihf/libabsl_time_zone.so /usr/lib/arm-linux-gnueabihf/libfmt.so.10.1.0 /usr/lib/arm-linux-gnueabihf/libgtest_main.a /usr/lib/arm-linux-gnueabihf/libgtest.a make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' [ 97%] Built target yaramod_tests [100%] Linking CXX shared module yaramod.cpython-313-arm-linux-gnueabihf.so cd /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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 -Wall -pedantic -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64 -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-arm-linux-gnueabihf.so "CMakeFiles/yaramod-python.dir/yaramod_python.cpp.o" "CMakeFiles/yaramod-python.dir/py_visitor.cpp.o" ../libyaramod.so.3.21.0 /usr/lib/arm-linux-gnueabihf/libre2.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_check_op.so /usr/lib/arm-linux-gnueabihf/libabsl_log_severity.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_conditions.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_message.so /usr/lib/arm-linux-gnueabihf/libabsl_examine_stack.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_format.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_proto.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_nullguard.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_log_sink_set.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_globals.so /usr/lib/arm-linux-gnueabihf/libabsl_log_globals.so /usr/lib/arm-linux-gnueabihf/libabsl_log_sink.so /usr/lib/arm-linux-gnueabihf/libabsl_log_entry.so /usr/lib/arm-linux-gnueabihf/libabsl_strerror.so /usr/lib/arm-linux-gnueabihf/libabsl_vlog_config_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_fnmatch.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_marshalling.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_reflection.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_private_handle_accessor.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_commandlineflag.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_commandlineflag_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_config.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_program_name.so /usr/lib/arm-linux-gnueabihf/libabsl_raw_logging_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_cord.so /usr/lib/arm-linux-gnueabihf/libabsl_cordz_info.so /usr/lib/arm-linux-gnueabihf/libabsl_cord_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_cordz_functions.so /usr/lib/arm-linux-gnueabihf/libabsl_cordz_handle.so /usr/lib/arm-linux-gnueabihf/libabsl_crc_cord_state.so /usr/lib/arm-linux-gnueabihf/libabsl_crc32c.so /usr/lib/arm-linux-gnueabihf/libabsl_crc_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_crc_cpu_detect.so /usr/lib/arm-linux-gnueabihf/libabsl_raw_hash_set.so /usr/lib/arm-linux-gnueabihf/libabsl_hashtablez_sampler.so /usr/lib/arm-linux-gnueabihf/libabsl_exponential_biased.so /usr/lib/arm-linux-gnueabihf/libabsl_hash.so /usr/lib/arm-linux-gnueabihf/libabsl_city.so /usr/lib/arm-linux-gnueabihf/libabsl_bad_variant_access.so /usr/lib/arm-linux-gnueabihf/libabsl_low_level_hash.so /usr/lib/arm-linux-gnueabihf/libabsl_throw_delegate.so /usr/lib/arm-linux-gnueabihf/libabsl_bad_optional_access.so /usr/lib/arm-linux-gnueabihf/libabsl_str_format_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_synchronization.so /usr/lib/arm-linux-gnueabihf/libabsl_graphcycles_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_kernel_timeout_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_stacktrace.so /usr/lib/arm-linux-gnueabihf/libabsl_symbolize.so /usr/lib/arm-linux-gnueabihf/libabsl_debugging_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_demangle_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_demangle_rust.so /usr/lib/arm-linux-gnueabihf/libabsl_decode_rust_punycode.so /usr/lib/arm-linux-gnueabihf/libabsl_utf8_for_code_point.so /usr/lib/arm-linux-gnueabihf/libabsl_malloc_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_time.so /usr/lib/arm-linux-gnueabihf/libabsl_civil_time.so /usr/lib/arm-linux-gnueabihf/libabsl_strings.so /usr/lib/arm-linux-gnueabihf/libabsl_strings_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_string_view.so /usr/lib/arm-linux-gnueabihf/libabsl_base.so -latomic /usr/lib/arm-linux-gnueabihf/librt.a /usr/lib/arm-linux-gnueabihf/libabsl_spinlock_wait.so /usr/lib/arm-linux-gnueabihf/libabsl_int128.so /usr/lib/arm-linux-gnueabihf/libabsl_log_severity.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_conditions.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_message.so /usr/lib/arm-linux-gnueabihf/libabsl_examine_stack.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_format.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_proto.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_nullguard.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_log_sink_set.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_globals.so /usr/lib/arm-linux-gnueabihf/libabsl_log_globals.so /usr/lib/arm-linux-gnueabihf/libabsl_log_sink.so /usr/lib/arm-linux-gnueabihf/libabsl_log_entry.so /usr/lib/arm-linux-gnueabihf/libabsl_strerror.so /usr/lib/arm-linux-gnueabihf/libabsl_vlog_config_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_log_internal_fnmatch.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_marshalling.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_reflection.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_private_handle_accessor.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_commandlineflag.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_commandlineflag_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_config.so /usr/lib/arm-linux-gnueabihf/libabsl_flags_program_name.so /usr/lib/arm-linux-gnueabihf/libabsl_raw_logging_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_cord.so /usr/lib/arm-linux-gnueabihf/libabsl_cordz_info.so /usr/lib/arm-linux-gnueabihf/libabsl_cord_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_cordz_functions.so /usr/lib/arm-linux-gnueabihf/libabsl_cordz_handle.so /usr/lib/arm-linux-gnueabihf/libabsl_crc_cord_state.so /usr/lib/arm-linux-gnueabihf/libabsl_crc32c.so /usr/lib/arm-linux-gnueabihf/libabsl_crc_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_crc_cpu_detect.so /usr/lib/arm-linux-gnueabihf/libabsl_raw_hash_set.so /usr/lib/arm-linux-gnueabihf/libabsl_hashtablez_sampler.so /usr/lib/arm-linux-gnueabihf/libabsl_exponential_biased.so /usr/lib/arm-linux-gnueabihf/libabsl_hash.so /usr/lib/arm-linux-gnueabihf/libabsl_city.so /usr/lib/arm-linux-gnueabihf/libabsl_bad_variant_access.so /usr/lib/arm-linux-gnueabihf/libabsl_low_level_hash.so /usr/lib/arm-linux-gnueabihf/libabsl_throw_delegate.so /usr/lib/arm-linux-gnueabihf/libabsl_bad_optional_access.so /usr/lib/arm-linux-gnueabihf/libabsl_str_format_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_synchronization.so /usr/lib/arm-linux-gnueabihf/libabsl_graphcycles_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_kernel_timeout_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_stacktrace.so /usr/lib/arm-linux-gnueabihf/libabsl_symbolize.so /usr/lib/arm-linux-gnueabihf/libabsl_debugging_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_demangle_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_demangle_rust.so /usr/lib/arm-linux-gnueabihf/libabsl_decode_rust_punycode.so /usr/lib/arm-linux-gnueabihf/libabsl_utf8_for_code_point.so /usr/lib/arm-linux-gnueabihf/libabsl_malloc_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_time.so /usr/lib/arm-linux-gnueabihf/libabsl_civil_time.so /usr/lib/arm-linux-gnueabihf/libabsl_strings.so /usr/lib/arm-linux-gnueabihf/libabsl_strings_internal.so /usr/lib/arm-linux-gnueabihf/libabsl_string_view.so /usr/lib/arm-linux-gnueabihf/libabsl_base.so -latomic /usr/lib/arm-linux-gnueabihf/librt.a /usr/lib/arm-linux-gnueabihf/libabsl_spinlock_wait.so /usr/lib/arm-linux-gnueabihf/libabsl_int128.so /usr/lib/arm-linux-gnueabihf/libabsl_time_zone.so /usr/lib/arm-linux-gnueabihf/libfmt.so.10.1.0 make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' [100%] Built target yaramod-python make[3]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' /usr/bin/cmake -E cmake_progress_start /build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/CMakeFiles 0 make[2]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' cp obj-arm-linux-gnueabihf/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-arm-linux-gnueabihf/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 (1 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 (83 ms) [ RUN ] BuilderTests.PureImportsWorks [ OK ] BuilderTests.PureImportsWorks (44 ms) [ RUN ] BuilderTests.PureImportsComplicateWorks [ OK ] BuilderTests.PureImportsComplicateWorks (40 ms) [ RUN ] BuilderTests.UnnamedRuleWorks [ OK ] BuilderTests.UnnamedRuleWorks (63 ms) [ RUN ] BuilderTests.UnnamedRuleWithImportsWorks [ OK ] BuilderTests.UnnamedRuleWithImportsWorks (63 ms) [ RUN ] BuilderTests.UnnamedRuleWithImportsWorks2 [ OK ] BuilderTests.UnnamedRuleWithImportsWorks2 (61 ms) [ RUN ] BuilderTests.RuleWithCustomNameWorks [ OK ] BuilderTests.RuleWithCustomNameWorks (40 ms) [ RUN ] BuilderTests.RuleWithMetasWorks [ OK ] BuilderTests.RuleWithMetasWorks (62 ms) [ RUN ] BuilderTests.RuleWithVariablesWorks [ OK ] BuilderTests.RuleWithVariablesWorks (62 ms) [ RUN ] BuilderTests.RuleWithEmptyStringMetaValueWorks [ OK ] BuilderTests.RuleWithEmptyStringMetaValueWorks (62 ms) [ RUN ] BuilderTests.RuleWithTagsWorks [ OK ] BuilderTests.RuleWithTagsWorks (40 ms) [ RUN ] BuilderTests.RuleWithModifierWorks [ OK ] BuilderTests.RuleWithModifierWorks (61 ms) [ RUN ] BuilderTests.RuleWithOnelineCommentWorks [ OK ] BuilderTests.RuleWithOnelineCommentWorks (40 ms) [ RUN ] BuilderTests.RuleWithMultilineCommentWorks [ OK ] BuilderTests.RuleWithMultilineCommentWorks (39 ms) [ RUN ] BuilderTests.RuleWithPlainStringWorks [ OK ] BuilderTests.RuleWithPlainStringWorks (40 ms) [ RUN ] BuilderTests.RuleWithPlainStringPureWideWorks [ OK ] BuilderTests.RuleWithPlainStringPureWideWorks (61 ms) [ RUN ] BuilderTests.MultipleRulesWorks [ OK ] BuilderTests.MultipleRulesWorks (40 ms) [ RUN ] BuilderTests.RuleWithCustomConditionWorks [ OK ] BuilderTests.RuleWithCustomConditionWorks (62 ms) [ RUN ] BuilderTests.RuleWithConditionWithSymbolsWorks [ OK ] BuilderTests.RuleWithConditionWithSymbolsWorks (40 ms) [ RUN ] BuilderTests.RuleWithHexStringWorks [ OK ] BuilderTests.RuleWithHexStringWorks (62 ms) [ RUN ] BuilderTests.RuleWithDictForConditionWorks [ OK ] BuilderTests.RuleWithDictForConditionWorks (40 ms) [ RUN ] BuilderTests.RuleWithStringForConditionWorks [ OK ] BuilderTests.RuleWithStringForConditionWorks (40 ms) [ RUN ] BuilderTests.RuleWithOfWorks [ OK ] BuilderTests.RuleWithOfWorks (62 ms) [ RUN ] BuilderTests.RuleWithRangeWorks [ OK ] BuilderTests.RuleWithRangeWorks (40 ms) [ RUN ] BuilderTests.RuleWithOfAtWorks [ OK ] BuilderTests.RuleWithOfAtWorks (61 ms) [ RUN ] BuilderTests.RuleWithStructureWorks [ OK ] BuilderTests.RuleWithStructureWorks (62 ms) [ RUN ] BuilderTests.RuleWithConditionWithOnelineComment [ OK ] BuilderTests.RuleWithConditionWithOnelineComment (62 ms) [ RUN ] BuilderTests.RuleWithConditionWithMultilineComment [ OK ] BuilderTests.RuleWithConditionWithMultilineComment (62 ms) [ RUN ] BuilderTests.RuleWithArrayAndStructureWorks [ OK ] BuilderTests.RuleWithArrayAndStructureWorks (40 ms) [ RUN ] BuilderTests.RuleWithFunctionCallWorks [ OK ] BuilderTests.RuleWithFunctionCallWorks (62 ms) [ RUN ] BuilderTests.RuleWithIntFunctionWorks [ OK ] BuilderTests.RuleWithIntFunctionWorks (39 ms) [ RUN ] BuilderTests.RuleWithArithmeticOperationsWorks [ OK ] BuilderTests.RuleWithArithmeticOperationsWorks (62 ms) [ RUN ] BuilderTests.RuleWithArithmeticOperationsWithDoubleValuesWorks [ OK ] BuilderTests.RuleWithArithmeticOperationsWithDoubleValuesWorks (40 ms) [ RUN ] BuilderTests.RuleWithBitwiseOperationsWorks [ OK ] BuilderTests.RuleWithBitwiseOperationsWorks (63 ms) [ RUN ] BuilderTests.RuleWithLogicOperationsWorks [ OK ] BuilderTests.RuleWithLogicOperationsWorks (40 ms) [ RUN ] BuilderTests.RuleWithIntMultpliersWorks [ OK ] BuilderTests.RuleWithIntMultpliersWorks (62 ms) [ RUN ] BuilderTests.RuleWithStringOperatorsWorks [ OK ] BuilderTests.RuleWithStringOperatorsWorks (40 ms) [ RUN ] BuilderTests.RuleWithRegexpWorks [ OK ] BuilderTests.RuleWithRegexpWorks (62 ms) [ RUN ] BuilderTests.RuleWithRegexpInConditionWorks [ OK ] BuilderTests.RuleWithRegexpInConditionWorks (40 ms) [ RUN ] BuilderTests.RuleWithConjunctionInConditionWorks [ OK ] BuilderTests.RuleWithConjunctionInConditionWorks (62 ms) [ RUN ] BuilderTests.RuleWithDisjunctionInConditionWorks [ OK ] BuilderTests.RuleWithDisjunctionInConditionWorks (40 ms) [ RUN ] BuilderTests.RuleWithConjunctionWithLinebreaksInConditionWorks [ OK ] BuilderTests.RuleWithConjunctionWithLinebreaksInConditionWorks (62 ms) [ RUN ] BuilderTests.RuleWithDisjunctionWithLinebreaksInConditionWorks [ OK ] BuilderTests.RuleWithDisjunctionWithLinebreaksInConditionWorks (40 ms) [ RUN ] BuilderTests.RuleWithCommentedConjunctionInConditionWorks [ OK ] BuilderTests.RuleWithCommentedConjunctionInConditionWorks (63 ms) [ RUN ] BuilderTests.RuleWithCommentedDisjunctionInConditionWorks [ OK ] BuilderTests.RuleWithCommentedDisjunctionInConditionWorks (41 ms) [ RUN ] BuilderTests.RuleWithParenthesesWithLinebreaksInConditionWorks [ OK ] BuilderTests.RuleWithParenthesesWithLinebreaksInConditionWorks (62 ms) [ RUN ] BuilderTests.RuleWithEscapedSequencesWorks [ OK ] BuilderTests.RuleWithEscapedSequencesWorks (41 ms) [ RUN ] BuilderTests.RuleWithNoneOfThemExpression [ OK ] BuilderTests.RuleWithNoneOfThemExpression (62 ms) [ RUN ] BuilderTests.RuleWithNoneOfThemInRangeWorks [ OK ] BuilderTests.RuleWithNoneOfThemInRangeWorks (40 ms) [ RUN ] BuilderTests.RuleWithStringsWithDifferentKindsOfModifiers [ OK ] BuilderTests.RuleWithStringsWithDifferentKindsOfModifiers (63 ms) [ RUN ] BuilderTests.RuleWithXorStringModifierOutOfBounds [ OK ] BuilderTests.RuleWithXorStringModifierOutOfBounds (31 ms) [ RUN ] BuilderTests.RuleWithXorStringModifierOutOfBoundsLowerKey [ OK ] BuilderTests.RuleWithXorStringModifierOutOfBoundsLowerKey (31 ms) [ RUN ] BuilderTests.RuleWithXorStringModifierOutOfBoundsHigherKey [ OK ] BuilderTests.RuleWithXorStringModifierOutOfBoundsHigherKey (31 ms) [ RUN ] BuilderTests.RuleWithXorStringModifierLowerBoundGreaterThanHigherBound [ OK ] BuilderTests.RuleWithXorStringModifierLowerBoundGreaterThanHigherBound (30 ms) [ RUN ] BuilderTests.ConjunctionWithSingleTerm [ OK ] BuilderTests.ConjunctionWithSingleTerm (61 ms) [ RUN ] BuilderTests.DefinedTerm [ OK ] BuilderTests.DefinedTerm (63 ms) [ RUN ] BuilderTests.PercentageOfStringSet [ OK ] BuilderTests.PercentageOfStringSet (63 ms) [ RUN ] BuilderTests.FloatValueWorks [ OK ] BuilderTests.FloatValueWorks (61 ms) [ RUN ] BuilderTests.IequalsWorks [ OK ] BuilderTests.IequalsWorks (61 ms) [ RUN ] BuilderTests.IdWildcardWorks [ OK ] BuilderTests.IdWildcardWorks (62 ms) [ RUN ] BuilderTests.StringAsBoolInConditionWorks [ OK ] BuilderTests.StringAsBoolInConditionWorks (62 ms) [ RUN ] BuilderTests.IcontainsWorks [ OK ] BuilderTests.IcontainsWorks (61 ms) [ RUN ] BuilderTests.IendsWithWorks [ OK ] BuilderTests.IendsWithWorks (61 ms) [ RUN ] BuilderTests.IstartsWithWorks [ OK ] BuilderTests.IstartsWithWorks (62 ms) [ RUN ] BuilderTests.StartsWithWorks [ OK ] BuilderTests.StartsWithWorks (62 ms) [ RUN ] BuilderTests.EndsWithWorks [ OK ] BuilderTests.EndsWithWorks (61 ms) [----------] 66 tests from BuilderTests (3514 ms total) [----------] 256 tests from ParserTests [ RUN ] ParserTests.EmptyInputWorks [ OK ] ParserTests.EmptyInputWorks (30 ms) [ RUN ] ParserTests.EmptyRuleWorks [ OK ] ParserTests.EmptyRuleWorks (31 ms) [ RUN ] ParserTests.RulesWithSameNameForbidden [ OK ] ParserTests.RulesWithSameNameForbidden (30 ms) [ RUN ] ParserTests.RuleWithTagsWorks [ OK ] ParserTests.RuleWithTagsWorks (31 ms) [ RUN ] ParserTests.RuleWithMetasWorks [ OK ] ParserTests.RuleWithMetasWorks (31 ms) [ RUN ] ParserTests.RuleWithRepetitiveMetasWorks [ OK ] ParserTests.RuleWithRepetitiveMetasWorks (31 ms) [ RUN ] ParserTests.HexAndDecimalIntegersArePreservedWorks [ OK ] ParserTests.HexAndDecimalIntegersArePreservedWorks (31 ms) [ RUN ] ParserTests.RuleWithVariablesWorks [ OK ] ParserTests.RuleWithVariablesWorks (31 ms) [ RUN ] ParserTests.VariableInConditionWorks [ OK ] ParserTests.VariableInConditionWorks (31 ms) [ RUN ] ParserTests.RuleWithNoStringsDoesntWork [ OK ] ParserTests.RuleWithNoStringsDoesntWork (30 ms) [ RUN ] ParserTests.RuleWithPlainTextStringsWorks [ OK ] ParserTests.RuleWithPlainTextStringsWorks (31 ms) [ RUN ] ParserTests.MultipleRulesWorks [ OK ] ParserTests.MultipleRulesWorks (31 ms) [ RUN ] ParserTests.RuleWithPlainTextStringWithModifiersWorks [ OK ] ParserTests.RuleWithPlainTextStringWithModifiersWorks (31 ms) [ RUN ] ParserTests.DuplicatedStringModifierForbidden [ OK ] ParserTests.DuplicatedStringModifierForbidden (31 ms) [ RUN ] ParserTests.InvalidStringModifiersCombination [ OK ] ParserTests.InvalidStringModifiersCombination (32 ms) [ RUN ] ParserTests.MultipleBase64AlphabetsForbidden [ OK ] ParserTests.MultipleBase64AlphabetsForbidden (31 ms) [ RUN ] ParserTests.HexStringWithPlainNibbleWorks [ OK ] ParserTests.HexStringWithPlainNibbleWorks (31 ms) [ RUN ] ParserTests.HexStringWithPlainNibblesWorks [ OK ] ParserTests.HexStringWithPlainNibblesWorks (31 ms) [ RUN ] ParserTests.HexStringWithLowHighJumpWorks [ OK ] ParserTests.HexStringWithLowHighJumpWorks (30 ms) [ RUN ] ParserTests.HexStringWithLowJumpWorks [ OK ] ParserTests.HexStringWithLowJumpWorks (31 ms) [ RUN ] ParserTests.HexStringWithUnrestrictedJumpWorks [ OK ] ParserTests.HexStringWithUnrestrictedJumpWorks (31 ms) [ RUN ] ParserTests.HexStringWithConstantJumpWorks [ OK ] ParserTests.HexStringWithConstantJumpWorks (31 ms) [ RUN ] ParserTests.HexStringWithSimpleOrWorks [ OK ] ParserTests.HexStringWithSimpleOrWorks (31 ms) [ RUN ] ParserTests.HexStringWithMultibyteSimpleOrWorks [ OK ] ParserTests.HexStringWithMultibyteSimpleOrWorks (31 ms) [ RUN ] ParserTests.HexStringWithNestedOrWorks [ OK ] ParserTests.HexStringWithNestedOrWorks (31 ms) [ RUN ] ParserTests.HexStringWithOrAndJumpWorks [ OK ] ParserTests.HexStringWithOrAndJumpWorks (31 ms) [ RUN ] ParserTests.HexStringWithOrOnTheBeginningAndEnd [ OK ] ParserTests.HexStringWithOrOnTheBeginningAndEnd (31 ms) [ RUN ] ParserTests.HexStringWithJumpAtBeginningForbidden [ OK ] ParserTests.HexStringWithJumpAtBeginningForbidden (31 ms) [ RUN ] ParserTests.HexStringWithJumpAtEndForbidden [ OK ] ParserTests.HexStringWithJumpAtEndForbidden (31 ms) [ RUN ] ParserTests.MultipleRulesWithHexStrings [ OK ] ParserTests.MultipleRulesWithHexStrings (31 ms) [ RUN ] ParserTests.InvalidHexStringAtom1 [ OK ] ParserTests.InvalidHexStringAtom1 (30 ms) [ RUN ] ParserTests.InvalidHexStringAtom2 [ OK ] ParserTests.InvalidHexStringAtom2 (31 ms) [ RUN ] ParserTests.InvalidHexStringOr [ OK ] ParserTests.InvalidHexStringOr (30 ms) [ RUN ] ParserTests.RegexpWithJustCharsWorks [ OK ] ParserTests.RegexpWithJustCharsWorks (32 ms) [ RUN ] ParserTests.MultipleRegexpsWithJustCharsWorks [ OK ] ParserTests.MultipleRegexpsWithJustCharsWorks (30 ms) [ RUN ] ParserTests.RegexpLimitedToWholeLineWorks [ OK ] ParserTests.RegexpLimitedToWholeLineWorks (31 ms) [ RUN ] ParserTests.RegexpWithPredefinedClassesWorks [ OK ] ParserTests.RegexpWithPredefinedClassesWorks (31 ms) [ RUN ] ParserTests.RegexpWithCustomClassWorks [ OK ] ParserTests.RegexpWithCustomClassWorks (31 ms) [ RUN ] ParserTests.RegexpWithCustomNegativeClassWorks [ OK ] ParserTests.RegexpWithCustomNegativeClassWorks (31 ms) [ RUN ] ParserTests.RegexpWithOptionalEscapedCharsWorks [ OK ] ParserTests.RegexpWithOptionalEscapedCharsWorks (31 ms) [ RUN ] ParserTests.RegexpWithEscapedSquareBracketsInsideClassWorks [ OK ] ParserTests.RegexpWithEscapedSquareBracketsInsideClassWorks (32 ms) [ RUN ] ParserTests.RegexpWithUnescapedSquareBracketsInsideClassWorks [ OK ] ParserTests.RegexpWithUnescapedSquareBracketsInsideClassWorks (31 ms) [ RUN ] ParserTests.RegexpWithEmptyAlternationGroupWorks [ OK ] ParserTests.RegexpWithEmptyAlternationGroupWorks (31 ms) [ RUN ] ParserTests.InvalidCuckooRuleAccessTokenStream [ OK ] ParserTests.InvalidCuckooRuleAccessTokenStream (31 ms) [ RUN ] ParserTests.ComplicatedRegexpClassWorks [ OK ] ParserTests.ComplicatedRegexpClassWorks (31 ms) [ RUN ] ParserTests.RegexpWithIterationWorks [ OK ] ParserTests.RegexpWithIterationWorks (30 ms) [ RUN ] ParserTests.RegexpWithPositiveIterationWorks [ OK ] ParserTests.RegexpWithPositiveIterationWorks (31 ms) [ RUN ] ParserTests.RegexpWithOptionalWorks [ OK ] ParserTests.RegexpWithOptionalWorks (31 ms) [ RUN ] ParserTests.RegexpWithRangesWorks [ OK ] ParserTests.RegexpWithRangesWorks (30 ms) [ RUN ] ParserTests.RegexpWithGreedyOperatorsWorks [ OK ] ParserTests.RegexpWithGreedyOperatorsWorks (32 ms) [ RUN ] ParserTests.RegexpWithGroupsWorks [ OK ] ParserTests.RegexpWithGroupsWorks (30 ms) [ RUN ] ParserTests.RegexpWithOrWorks [ OK ] ParserTests.RegexpWithOrWorks (32 ms) [ RUN ] ParserTests.RegexpWithModifiersWorks [ OK ] ParserTests.RegexpWithModifiersWorks (30 ms) [ RUN ] ParserTests.RegexpWithUndefinedRangeForbidden [ OK ] ParserTests.RegexpWithUndefinedRangeForbidden (32 ms) [ RUN ] ParserTests.RegexpWithInvalidRangeForbidden [ OK ] ParserTests.RegexpWithInvalidRangeForbidden (31 ms) [ RUN ] ParserTests.RulesWithVariablesAndStringsWork [ OK ] ParserTests.RulesWithVariablesAndStringsWork (31 ms) [ RUN ] ParserTests.RuleWithUnorderedSections [ OK ] ParserTests.RuleWithUnorderedSections (30 ms) [ RUN ] ParserTests.GlobalRuleModifierWorks [ OK ] ParserTests.GlobalRuleModifierWorks (31 ms) [ RUN ] ParserTests.PrivateRuleModifierWorks [ OK ] ParserTests.PrivateRuleModifierWorks (30 ms) [ RUN ] ParserTests.PrivateGlobalRuleModifierWorks [ OK ] ParserTests.PrivateGlobalRuleModifierWorks (31 ms) [ RUN ] ParserTests.SetRuleModifierWorks [ OK ] ParserTests.SetRuleModifierWorks (32 ms) [ RUN ] ParserTests.SetRuleModifierWorksWithDeleting [ OK ] ParserTests.SetRuleModifierWorksWithDeleting (30 ms) [ RUN ] ParserTests.ImportWorks [ OK ] ParserTests.ImportWorks (32 ms) [ RUN ] ParserTests.ImportOfUnrecognizedModuleForbidden [ OK ] ParserTests.ImportOfUnrecognizedModuleForbidden (31 ms) [ RUN ] ParserTests.TrueConditionWorks [ OK ] ParserTests.TrueConditionWorks (30 ms) [ RUN ] ParserTests.FalseConditionWorks [ OK ] ParserTests.FalseConditionWorks (31 ms) [ RUN ] ParserTests.StringIdConditionWorks [ OK ] ParserTests.StringIdConditionWorks (30 ms) [ RUN ] ParserTests.StringAtEntryPointConditionWorks [ OK ] ParserTests.StringAtEntryPointConditionWorks (32 ms) [ RUN ] ParserTests.StringInRangeConditionWorks [ OK ] ParserTests.StringInRangeConditionWorks (31 ms) [ RUN ] ParserTests.StringInRangeConditionWorks2 [ OK ] ParserTests.StringInRangeConditionWorks2 (31 ms) [ RUN ] ParserTests.NotConditionWorks [ OK ] ParserTests.NotConditionWorks (30 ms) [ RUN ] ParserTests.AndConditionWorks [ OK ] ParserTests.AndConditionWorks (31 ms) [ RUN ] ParserTests.AndConditionWorks2 [ OK ] ParserTests.AndConditionWorks2 (32 ms) [ RUN ] ParserTests.OrConditionWorks [ OK ] ParserTests.OrConditionWorks (30 ms) [ RUN ] ParserTests.EscapedOrConditionWorks [ OK ] ParserTests.EscapedOrConditionWorks (31 ms) [ RUN ] ParserTests.RelationalConditionWorks [ OK ] ParserTests.RelationalConditionWorks (31 ms) [ RUN ] ParserTests.ParenthesesConditionWorks [ OK ] ParserTests.ParenthesesConditionWorks (31 ms) [ RUN ] ParserTests.ArithmeticOpConditionWorksSimple [ OK ] ParserTests.ArithmeticOpConditionWorksSimple (32 ms) [ RUN ] ParserTests.ArithmeticOpConditionWorks [ OK ] ParserTests.ArithmeticOpConditionWorks (31 ms) [ RUN ] ParserTests.ArithmeticOpConditionWorks2 [ OK ] ParserTests.ArithmeticOpConditionWorks2 (32 ms) [ RUN ] ParserTests.BitwiseOpConditionNegation [ OK ] ParserTests.BitwiseOpConditionNegation (30 ms) [ RUN ] ParserTests.BitwiseOpConditionWorks [ OK ] ParserTests.BitwiseOpConditionWorks (32 ms) [ RUN ] ParserTests.IntFunctionConditionWorks [ OK ] ParserTests.IntFunctionConditionWorks (31 ms) [ RUN ] ParserTests.DoubleInConditionWorks [ OK ] ParserTests.DoubleInConditionWorks (31 ms) [ RUN ] ParserTests.ContainsInConditionWorks [ OK ] ParserTests.ContainsInConditionWorks (30 ms) [ RUN ] ParserTests.MatchesInConditionWorks [ OK ] ParserTests.MatchesInConditionWorks (31 ms) [ RUN ] ParserTests.StringCountConditionWorks [ OK ] ParserTests.StringCountConditionWorks (31 ms) [ RUN ] ParserTests.StringOffsetConditionWorks [ OK ] ParserTests.StringOffsetConditionWorks (32 ms) [ RUN ] ParserTests.HexadecimalNumbersInConditionWorks [ OK ] ParserTests.HexadecimalNumbersInConditionWorks (31 ms) [ RUN ] ParserTests.StringLengthConditionWorks [ OK ] ParserTests.StringLengthConditionWorks (31 ms) [ RUN ] ParserTests.FunctionCallConditionWorks [ OK ] ParserTests.FunctionCallConditionWorks (31 ms) [ RUN ] ParserTests.StructureAccessConditionWorks [ OK ] ParserTests.StructureAccessConditionWorks (31 ms) [ RUN ] ParserTests.ArrayAccessConditionWorks1 [ OK ] ParserTests.ArrayAccessConditionWorks1 (31 ms) [ RUN ] ParserTests.ArrayAccessConditionWorks2 [ OK ] ParserTests.ArrayAccessConditionWorks2 (30 ms) [ RUN ] ParserTests.ForIntegerSetConditionWorks [ OK ] ParserTests.ForIntegerSetConditionWorks (31 ms) [ RUN ] ParserTests.ForArrayConditionWorks [ OK ] ParserTests.ForArrayConditionWorks (31 ms) [ RUN ] ParserTests.NestedForArrayConditionWorks [ OK ] ParserTests.NestedForArrayConditionWorks (32 ms) [ RUN ] ParserTests.UserDefinedArrayWorks [ OK ] ParserTests.UserDefinedArrayWorks (31 ms) [ RUN ] ParserTests.ForDictConditionWorks [ OK ] ParserTests.ForDictConditionWorks (32 ms) [ RUN ] ParserTests.ForStringSetConditionWorks [ OK ] ParserTests.ForStringSetConditionWorks (31 ms) [ RUN ] ParserTests.ForStringLiteralSetConditionWorks [ OK ] ParserTests.ForStringLiteralSetConditionWorks (31 ms) [ RUN ] ParserTests.ForStringLiteralSetWithOneStringConditionWorks [ OK ] ParserTests.ForStringLiteralSetWithOneStringConditionWorks (30 ms) [ RUN ] ParserTests.ForStringLiteralSetWithStringSymbolsConditionWorks [ OK ] ParserTests.ForStringLiteralSetWithStringSymbolsConditionWorks (31 ms) [ RUN ] ParserTests.ForExpressionSetWithItemsVariousTypesForbidden [ OK ] ParserTests.ForExpressionSetWithItemsVariousTypesForbidden (32 ms) [ RUN ] ParserTests.NoneOfThemConditionWorks [ OK ] ParserTests.NoneOfThemConditionWorks (31 ms) [ RUN ] ParserTests.NoneOfSetConditionWorks [ OK ] ParserTests.NoneOfSetConditionWorks (31 ms) [ RUN ] ParserTests.OfConditionWorks [ OK ] ParserTests.OfConditionWorks (31 ms) [ RUN ] ParserTests.OfAtConditionWorks [ OK ] ParserTests.OfAtConditionWorks (31 ms) [ RUN ] ParserTests.OfAtWithStringSetConditionWorks [ OK ] ParserTests.OfAtWithStringSetConditionWorks (31 ms) [ RUN ] ParserTests.OfWithStringSetAndAtWithExpressionConditionWorks [ OK ] ParserTests.OfWithStringSetAndAtWithExpressionConditionWorks (31 ms) [ RUN ] ParserTests.EmptyStringMetaValue [ OK ] ParserTests.EmptyStringMetaValue (30 ms) [ RUN ] ParserTests.EmptyPlainStringValue [ OK ] ParserTests.EmptyPlainStringValue (30 ms) [ RUN ] ParserTests.EmptyStringInConditionWorks [ OK ] ParserTests.EmptyStringInConditionWorks (32 ms) [ RUN ] ParserTests.StringsAndArithmeticOperationsForbidden [ OK ] ParserTests.StringsAndArithmeticOperationsForbidden (31 ms) [ RUN ] ParserTests.BoolAndArithmeticOperationsForbidden [ OK ] ParserTests.BoolAndArithmeticOperationsForbidden (30 ms) [ RUN ] ParserTests.ContainsAndNonStringForbidden [ OK ] ParserTests.ContainsAndNonStringForbidden (31 ms) [ RUN ] ParserTests.UndefinedStringReferenceForbidden [ OK ] ParserTests.UndefinedStringReferenceForbidden (30 ms) [ RUN ] ParserTests.StringWildcardConditionWorks [ OK ] ParserTests.StringWildcardConditionWorks (31 ms) [ RUN ] ParserTests.StringWildcardConditionWithNoMatchingStringForbidden [ OK ] ParserTests.StringWildcardConditionWithNoMatchingStringForbidden (31 ms) [ RUN ] ParserTests.SameVariableInNestedForLoopsForbidden [ OK ] ParserTests.SameVariableInNestedForLoopsForbidden (31 ms) [ RUN ] ParserTests.FloatValueWorks [ OK ] ParserTests.FloatValueWorks (31 ms) [ RUN ] ParserTests.FloatValueWorks2 [ OK ] ParserTests.FloatValueWorks2 (31 ms) [ RUN ] ParserTests.ConsoleModuleWorks [ OK ] ParserTests.ConsoleModuleWorks (30 ms) [ RUN ] ParserTests.CuckooModuleWorks [ OK ] ParserTests.CuckooModuleWorks (32 ms) [ RUN ] ParserTests.DotnetModuleWorks [ OK ] ParserTests.DotnetModuleWorks (33 ms) [ RUN ] ParserTests.DexModuleWorks [ OK ] ParserTests.DexModuleWorks (30 ms) [ RUN ] ParserTests.ElfModuleWorks [ OK ] ParserTests.ElfModuleWorks (32 ms) [ RUN ] ParserTests.HashModuleWorks [ OK ] ParserTests.HashModuleWorks (31 ms) [ RUN ] ParserTests.MagicModuleWorks [ OK ] ParserTests.MagicModuleWorks (31 ms) [ RUN ] ParserTests.MathModuleWorks1 [ OK ] ParserTests.MathModuleWorks1 (31 ms) [ RUN ] ParserTests.MathModuleWorks2 [ OK ] ParserTests.MathModuleWorks2 (32 ms) [ RUN ] ParserTests.PeModuleWorks1 [ OK ] ParserTests.PeModuleWorks1 (31 ms) [ RUN ] ParserTests.PeModuleWorks2 [ OK ] ParserTests.PeModuleWorks2 (31 ms) [ RUN ] ParserTests.PeModuleWorks3 [ OK ] ParserTests.PeModuleWorks3 (32 ms) [ RUN ] ParserTests.VirusTotalSymbolsWork [ OK ] ParserTests.VirusTotalSymbolsWork (30 ms) [ RUN ] ParserTests.TransformationToTextWorks [ OK ] ParserTests.TransformationToTextWorks (33 ms) [ RUN ] ParserTests.RemoveLineBeforeAndWorks [ OK ] ParserTests.RemoveLineBeforeAndWorks (31 ms) [ RUN ] ParserTests.RemoveLineBeforeAndWithCommentsWorks [ OK ] ParserTests.RemoveLineBeforeAndWithCommentsWorks (31 ms) [ RUN ] ParserTests.RemoveLineBeforeAndWithComments2Works [ OK ] ParserTests.RemoveLineBeforeAndWithComments2Works (33 ms) [ RUN ] ParserTests.MultipleRulesWorks2 [ OK ] ParserTests.MultipleRulesWorks2 (32 ms) [ RUN ] ParserTests.KbMbIntegerMultipliersWorks [ OK ] ParserTests.KbMbIntegerMultipliersWorks (31 ms) [ RUN ] ParserTests.ReferencingRuleFromOtherRuleWorks [ OK ] ParserTests.ReferencingRuleFromOtherRuleWorks (30 ms) [ RUN ] ParserTests.RegexpWithSuffixModifierWorks [ OK ] ParserTests.RegexpWithSuffixModifierWorks (32 ms) [ RUN ] ParserTests.GlobalVariablesWorks [ OK ] ParserTests.GlobalVariablesWorks (31 ms) [ RUN ] ParserTests.LengthOfHexStringWorks [ OK ] ParserTests.LengthOfHexStringWorks (31 ms) [ RUN ] ParserTests.HexStringWithSpacesInJumpWorks [ OK ] ParserTests.HexStringWithSpacesInJumpWorks (31 ms) [ RUN ] ParserTests.ComplicatedHexStringAlterationWorks [ OK ] ParserTests.ComplicatedHexStringAlterationWorks (31 ms) [ RUN ] ParserTests.ComplicatedHexStringWorks [ OK ] ParserTests.ComplicatedHexStringWorks (31 ms) [ RUN ] ParserTests.NibbleGetterWorks [ OK ] ParserTests.NibbleGetterWorks (31 ms) [ RUN ] ParserTests.HexEscapeWorks [ OK ] ParserTests.HexEscapeWorks (31 ms) [ RUN ] ParserTests.EscapedSequencesInMetaWorks [ OK ] ParserTests.EscapedSequencesInMetaWorks (32 ms) [ RUN ] ParserTests.EscapedSequencesWorks [ OK ] ParserTests.EscapedSequencesWorks (30 ms) [ RUN ] ParserTests.InvalidEscapedSequence1 [ OK ] ParserTests.InvalidEscapedSequence1 (31 ms) [ RUN ] ParserTests.InvalidEscapedSequence2 [ OK ] ParserTests.InvalidEscapedSequence2 (32 ms) [ RUN ] ParserTests.NewlineInHexString [ OK ] ParserTests.NewlineInHexString (31 ms) [ RUN ] ParserTests.ErrorWhenUnknownTokenAfterImport [ OK ] ParserTests.ErrorWhenUnknownTokenAfterImport (31 ms) [ RUN ] ParserTests.PeDataDirectoryIsArray [ OK ] ParserTests.PeDataDirectoryIsArray (30 ms) [ RUN ] ParserTests.AnonymousStrings [ OK ] ParserTests.AnonymousStrings (31 ms) [ RUN ] ParserTests.AllOfThemInOperator [ OK ] ParserTests.AllOfThemInOperator (32 ms) [ RUN ] ParserTests.AllOfInOperatorAndAnyOfInOperator [ OK ] ParserTests.AllOfInOperatorAndAnyOfInOperator (31 ms) [ RUN ] ParserTests.StringCountInRange [ OK ] ParserTests.StringCountInRange (31 ms) [ RUN ] ParserTests.CommentsInCommonLocations [ OK ] ParserTests.CommentsInCommonLocations (31 ms) [ RUN ] ParserTests.CommentsInHexString [ OK ] ParserTests.CommentsInHexString (31 ms) [ RUN ] ParserTests.CommentsInCondition [ OK ] ParserTests.CommentsInCondition (32 ms) [ RUN ] ParserTests.ForCycleMultipleRows [ OK ] ParserTests.ForCycleMultipleRows (32 ms) [ RUN ] ParserTests.ForCycleMultipleRowsWithCRLF [ OK ] ParserTests.ForCycleMultipleRowsWithCRLF (32 ms) [ RUN ] ParserTests.OneMoreTest [ OK ] ParserTests.OneMoreTest (32 ms) [ RUN ] ParserTests.NonUTFmetaWorks [ OK ] ParserTests.NonUTFmetaWorks (30 ms) [ RUN ] ParserTests.NonUTFconditionWorks [ OK ] ParserTests.NonUTFconditionWorks (32 ms) [ RUN ] ParserTests.NonUTFcommentWorks [ OK ] ParserTests.NonUTFcommentWorks (30 ms) [ RUN ] ParserTests.NonUTFcommentsWork [ OK ] ParserTests.NonUTFcommentsWork (32 ms) [ RUN ] ParserTests.RemoveTrailingWhitespacesFromComments [ OK ] ParserTests.RemoveTrailingWhitespacesFromComments (31 ms) [ RUN ] ParserTests.AddMetaAfterParse [ OK ] ParserTests.AddMetaAfterParse (30 ms) [ RUN ] ParserTests.SetTagsAfterParse [ OK ] ParserTests.SetTagsAfterParse (30 ms) [ RUN ] ParserTests.RemoveMetasAfterParse [ OK ] ParserTests.RemoveMetasAfterParse (32 ms) [ RUN ] ParserTests.ParseIncompleteUnknownImport [ OK ] ParserTests.ParseIncompleteUnknownImport (31 ms) [ RUN ] ParserTests.ParseIncompleteReferenceUnknownSymbol [ OK ] ParserTests.ParseIncompleteReferenceUnknownSymbol (31 ms) [ RUN ] ParserTests.ParseIncompleteUnknownObjectSymbol [ OK ] ParserTests.ParseIncompleteUnknownObjectSymbol (31 ms) [ RUN ] ParserTests.ParseIncompleteUnknownObjectSymbolFromKnownModule [ OK ] ParserTests.ParseIncompleteUnknownObjectSymbolFromKnownModule (31 ms) [ RUN ] ParserTests.ParseIncompleteUnknownArraySymbol [ OK ] ParserTests.ParseIncompleteUnknownArraySymbol (31 ms) [ RUN ] ParserTests.ParseIncompleteUnknownArraySymbolFromKnownModule [ OK ] ParserTests.ParseIncompleteUnknownArraySymbolFromKnownModule (31 ms) [ RUN ] ParserTests.ParseIncompleteUnknownArraySymbolFromUnknownModule [ OK ] ParserTests.ParseIncompleteUnknownArraySymbolFromUnknownModule (30 ms) [ RUN ] ParserTests.ParseIncompleteUnknownObjectSymbolFromUnknownModule [ OK ] ParserTests.ParseIncompleteUnknownObjectSymbolFromUnknownModule (31 ms) [ RUN ] ParserTests.ParseIncompleteUnknownForDict [ OK ] ParserTests.ParseIncompleteUnknownForDict (30 ms) [ RUN ] ParserTests.ParseIncompleteUnknownForDictFromKnownModule [ OK ] ParserTests.ParseIncompleteUnknownForDictFromKnownModule (32 ms) [ RUN ] ParserTests.ParseIncompleteUnknownForDictFromUnknownModule [ OK ] ParserTests.ParseIncompleteUnknownForDictFromUnknownModule (31 ms) [ RUN ] ParserTests.ParseIncompleteUnknownFor [ OK ] ParserTests.ParseIncompleteUnknownFor (31 ms) [ RUN ] ParserTests.ParseIncompleteUnknownForFromKnownModule [ OK ] ParserTests.ParseIncompleteUnknownForFromKnownModule (30 ms) [ RUN ] ParserTests.ParseIncompleteUnknownForFromUnknownModule [ OK ] ParserTests.ParseIncompleteUnknownForFromUnknownModule (31 ms) [ RUN ] ParserTests.ParseIncompleteUnknownFunctionCall [ OK ] ParserTests.ParseIncompleteUnknownFunctionCall (31 ms) [ RUN ] ParserTests.ParseIncompleteUnknownFunctionCallFromKnownModule [ OK ] ParserTests.ParseIncompleteUnknownFunctionCallFromKnownModule (31 ms) [ RUN ] ParserTests.ParseIncompleteUnknownFunctionCallFromUnknownModule [ OK ] ParserTests.ParseIncompleteUnknownFunctionCallFromUnknownModule (30 ms) [ RUN ] ParserTests.ParseIncompleteUnknownFunctionOverloadOfKnownFunction [ OK ] ParserTests.ParseIncompleteUnknownFunctionOverloadOfKnownFunction (32 ms) [ RUN ] ParserTests.ParseIncompleteRuleNotFinished [ OK ] ParserTests.ParseIncompleteRuleNotFinished (31 ms) [ RUN ] ParserTests.AutoformattingClosingBracket [ OK ] ParserTests.AutoformattingClosingBracket (31 ms) [ RUN ] ParserTests.AutoformattingClosingDoubleBracket [ OK ] ParserTests.AutoformattingClosingDoubleBracket (31 ms) [ RUN ] ParserTests.AutoformattingClosingBracketWithOtherBracketsInside [ OK ] ParserTests.AutoformattingClosingBracketWithOtherBracketsInside (32 ms) [ RUN ] ParserTests.AutoformattingMultipleLineBrackets [ OK ] ParserTests.AutoformattingMultipleLineBrackets (31 ms) [ RUN ] ParserTests.AutoformattingProperAlignment [ OK ] ParserTests.AutoformattingProperAlignment (30 ms) [ RUN ] ParserTests.AutoformattingProperAlignmentOrStatement [ OK ] ParserTests.AutoformattingProperAlignmentOrStatement (31 ms) [ RUN ] ParserTests.AutoformattingAddNewlinesMinimal [ OK ] ParserTests.AutoformattingAddNewlinesMinimal (31 ms) [ RUN ] ParserTests.AutoformattingAddNewLines [ OK ] ParserTests.AutoformattingAddNewLines (31 ms) [ RUN ] ParserTests.AutoformattingAddNewlinesToBothSides [ OK ] ParserTests.AutoformattingAddNewlinesToBothSides (31 ms) [ RUN ] ParserTests.AutoformattingAddCRLF [ OK ] ParserTests.AutoformattingAddCRLF (32 ms) [ RUN ] ParserTests.AutoformattingNoSpaceBeforeArrayAccess [ OK ] ParserTests.AutoformattingNoSpaceBeforeArrayAccess (30 ms) [ RUN ] ParserTests.AutoformattingSpaceBeforeComments [ OK ] ParserTests.AutoformattingSpaceBeforeComments (32 ms) [ RUN ] ParserTests.AutoformattingRegexpClasses [ OK ] ParserTests.AutoformattingRegexpClasses (32 ms) [ RUN ] ParserTests.AutoformattingAlignedComments1 [ OK ] ParserTests.AutoformattingAlignedComments1 (31 ms) [ RUN ] ParserTests.AutoformattingAlignedComments2 [ OK ] ParserTests.AutoformattingAlignedComments2 (32 ms) [ RUN ] ParserTests.AutoformattingAlignedComments3 [ OK ] ParserTests.AutoformattingAlignedComments3 (31 ms) [ RUN ] ParserTests.AutoformattingNewlinesMultipleRules [ OK ] ParserTests.AutoformattingNewlinesMultipleRules (32 ms) [ RUN ] ParserTests.AutoformattingRemoveRedundantBlankLines [ OK ] ParserTests.AutoformattingRemoveRedundantBlankLines (30 ms) [ RUN ] ParserTests.AutoformattingRemoveRedundantBlankLines2 [ OK ] ParserTests.AutoformattingRemoveRedundantBlankLines2 (32 ms) [ RUN ] ParserTests.AutoformattingCommentInsideHexstringOnNewline [ OK ] ParserTests.AutoformattingCommentInsideHexstringOnNewline (31 ms) [ RUN ] ParserTests.AutoformattingNoSpaceBeforeNewLine [ OK ] ParserTests.AutoformattingNoSpaceBeforeNewLine (31 ms) [ RUN ] ParserTests.AutoformattingOfOnelineRule [ OK ] ParserTests.AutoformattingOfOnelineRule (31 ms) [ RUN ] ParserTests.AutoformattingOfTwoOnelineRules [ OK ] ParserTests.AutoformattingOfTwoOnelineRules (31 ms) [ RUN ] ParserTests.AutoformattingVariableInCondition [ OK ] ParserTests.AutoformattingVariableInCondition (31 ms) [ RUN ] ParserTests.RenameReferencedRuleWorks [ OK ] ParserTests.RenameReferencedRuleWorks (31 ms) [ RUN ] ParserTests.RenameStringWorks1 [ OK ] ParserTests.RenameStringWorks1 (32 ms) [ RUN ] ParserTests.RenameStringWorks2 [ OK ] ParserTests.RenameStringWorks2 (31 ms) [ RUN ] ParserTests.RenameStringWorks3 [ OK ] ParserTests.RenameStringWorks3 (31 ms) [ RUN ] ParserTests.StringXorModifierWithArguments [ OK ] ParserTests.StringXorModifierWithArguments (31 ms) [ RUN ] ParserTests.StringXorModifierWithOutOfBoundsKey [ OK ] ParserTests.StringXorModifierWithOutOfBoundsKey (31 ms) [ RUN ] ParserTests.StringXorModifierWithOutOfBoundsLowerKey [ OK ] ParserTests.StringXorModifierWithOutOfBoundsLowerKey (32 ms) [ RUN ] ParserTests.StringXorModifierWithOutOfBoundsHigherKey [ OK ] ParserTests.StringXorModifierWithOutOfBoundsHigherKey (31 ms) [ RUN ] ParserTests.StringXorModifierWithLowerBoundGreaterThanHigherBound [ OK ] ParserTests.StringXorModifierWithLowerBoundGreaterThanHigherBound (30 ms) [ RUN ] ParserTests.PrivateStringModifier [ OK ] ParserTests.PrivateStringModifier (31 ms) [ RUN ] ParserTests.UnexpectedEndOfFile [ OK ] ParserTests.UnexpectedEndOfFile (31 ms) [ RUN ] ParserTests.ReuseOfParserAfterError [ OK ] ParserTests.ReuseOfParserAfterError (31 ms) [ RUN ] ParserTests.DefinedExpression [ OK ] ParserTests.DefinedExpression (32 ms) [ RUN ] ParserTests.IequalsExpression [ OK ] ParserTests.IequalsExpression (30 ms) [ RUN ] ParserTests.ParsePeSignaturesXAlgorithmOID [ OK ] ParserTests.ParsePeSignaturesXAlgorithmOID (31 ms) [ RUN ] ParserTests.ParseELFDynsym [ OK ] ParserTests.ParseELFDynsym (31 ms) [ RUN ] ParserTests.ParsePercentage1Error [ OK ] ParserTests.ParsePercentage1Error (31 ms) [ RUN ] ParserTests.ParsePercentage2Error [ OK ] ParserTests.ParsePercentage2Error (32 ms) [ RUN ] ParserTests.ParsePercentage3 [ OK ] ParserTests.ParsePercentage3 (31 ms) [ RUN ] ParserTests.ParsePercentage4 [ OK ] ParserTests.ParsePercentage4 (30 ms) [ RUN ] ParserTests.ParsePercentage5 [ OK ] ParserTests.ParsePercentage5 (31 ms) [ RUN ] ParserTests.ParsePercentage6 [ OK ] ParserTests.ParsePercentage6 (31 ms) [ RUN ] ParserTests.ParsePercentage7 [ OK ] ParserTests.ParsePercentage7 (31 ms) [ RUN ] ParserTests.ParseOfRule [ OK ] ParserTests.ParseOfRule (31 ms) [ RUN ] ParserTests.ParseOfRuleInvalid [ OK ] ParserTests.ParseOfRuleInvalid (31 ms) [ RUN ] ParserTests.ParseOfRuleWildcard [ OK ] ParserTests.ParseOfRuleWildcard (31 ms) [ RUN ] ParserTests.ParseOfRuleWildcardInvalid [ OK ] ParserTests.ParseOfRuleWildcardInvalid (31 ms) [ RUN ] ParserTests.ParseAmbiguousWithIdWildcard [ OK ] ParserTests.ParseAmbiguousWithIdWildcard (30 ms) [ RUN ] ParserTests.ExpressionUids [ OK ] ParserTests.ExpressionUids (31 ms) [ RUN ] ParserTests.OctalIntegerWorks [ OK ] ParserTests.OctalIntegerWorks (30 ms) [ RUN ] ParserTests.Yara423FunctionsWorks [ OK ] ParserTests.Yara423FunctionsWorks (31 ms) [ RUN ] ParserTests.HexStringNotWorks [ OK ] ParserTests.HexStringNotWorks (31 ms) [ RUN ] ParserTests.IcontainsExpression [ OK ] ParserTests.IcontainsExpression (31 ms) [ RUN ] ParserTests.IendsWithExpression [ OK ] ParserTests.IendsWithExpression (30 ms) [ RUN ] ParserTests.IstartsWithExpression [ OK ] ParserTests.IstartsWithExpression (31 ms) [ RUN ] ParserTests.StartsWithExpression [ OK ] ParserTests.StartsWithExpression (31 ms) [ RUN ] ParserTests.EndsWithExpression [ OK ] ParserTests.EndsWithExpression (31 ms) [ RUN ] ParserTests.StringModuleWorks [ OK ] ParserTests.StringModuleWorks (31 ms) [----------] 256 tests from ParserTests (8081 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 (31 ms) [ RUN ] VisitorTests.RegexpModifyingVisitorInpactOnTokenStream [ OK ] VisitorTests.RegexpModifyingVisitorInpactOnTokenStream (31 ms) [ RUN ] VisitorTests.BoolModifyingVisitorInpactOnTokenStream1 [ OK ] VisitorTests.BoolModifyingVisitorInpactOnTokenStream1 (30 ms) [ RUN ] VisitorTests.BoolModifyingVisitorInpactOnTokenStream2 [ OK ] VisitorTests.BoolModifyingVisitorInpactOnTokenStream2 (31 ms) [ RUN ] VisitorTests.IntLiteralModifyingVisitorInpactOnTokenStream [ OK ] VisitorTests.IntLiteralModifyingVisitorInpactOnTokenStream (30 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerBoolLiteralExpression [ OK ] VisitorTests.CuckooFunctionReplacerBoolLiteralExpression (31 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerCuckooSyncEvent [ OK ] VisitorTests.CuckooFunctionReplacerCuckooSyncEvent (31 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerOrExpression1 [ OK ] VisitorTests.CuckooFunctionReplacerOrExpression1 (31 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerOrExpression2 [ OK ] VisitorTests.CuckooFunctionReplacerOrExpression2 (31 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerOrExpression3 [ OK ] VisitorTests.CuckooFunctionReplacerOrExpression3 (31 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerOrExpression4 [ OK ] VisitorTests.CuckooFunctionReplacerOrExpression4 (32 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerAndExpression1 [ OK ] VisitorTests.CuckooFunctionReplacerAndExpression1 (31 ms) [ RUN ] VisitorTests.IterableModifyingVisitorImpactOnTokenStream [ OK ] VisitorTests.IterableModifyingVisitorImpactOnTokenStream (31 ms) [ RUN ] VisitorTests.AndExpressionSwitcherAndExpression1 [ OK ] VisitorTests.AndExpressionSwitcherAndExpression1 (31 ms) [ RUN ] VisitorTests.AndExpressionSwitcherAndExpression2 [ OK ] VisitorTests.AndExpressionSwitcherAndExpression2 (31 ms) [ RUN ] VisitorTests.OrExpressionSwitcherOrExpression1 [ OK ] VisitorTests.OrExpressionSwitcherOrExpression1 (31 ms) [ RUN ] VisitorTests.OrExpressionSwitcherOrExpression2 [ OK ] VisitorTests.OrExpressionSwitcherOrExpression2 (32 ms) [ RUN ] VisitorTests.EqExpressionSwitcher [ OK ] VisitorTests.EqExpressionSwitcher (31 ms) [ RUN ] VisitorTests.DeletingVisitor1 [ OK ] VisitorTests.DeletingVisitor1 (30 ms) [ RUN ] VisitorTests.RuleModifierWorksWhenDeletingRules [ OK ] VisitorTests.RuleModifierWorksWhenDeletingRules (31 ms) [ RUN ] VisitorTests.DeletingVisitor2 [ OK ] VisitorTests.DeletingVisitor2 (31 ms) [ RUN ] VisitorTests.DeletingVisitor3 [ OK ] VisitorTests.DeletingVisitor3 (30 ms) [----------] 22 tests from VisitorTests (692 ms total) [----------] 1 test from YaraFileTests [ RUN ] YaraFileTests.ExpandRuleFromOrigin [ OK ] YaraFileTests.ExpandRuleFromOrigin (31 ms) [----------] 1 test from YaraFileTests (31 ms total) [----------] 4 tests from YaramodTests [ RUN ] YaramodTests.MultipleParsePhasesWithSingleYaramod [ OK ] YaramodTests.MultipleParsePhasesWithSingleYaramod (32 ms) [ RUN ] YaramodTests.AddMeta [ OK ] YaramodTests.AddMeta (31 ms) [ RUN ] YaramodTests.AddMetaToRulesWithComments [ OK ] YaramodTests.AddMetaToRulesWithComments (31 ms) [ RUN ] YaramodTests.SetMeta [ OK ] YaramodTests.SetMeta (31 ms) [----------] 4 tests from YaramodTests (126 ms total) [----------] Global test environment tear-down [==========] 398 tests from 9 test suites ran. (12448 ms total) [ PASSED ] 398 tests. # tests.python.test_parser.ParserTests bug LD_LIBRARY_PATH=/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf/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 12.986s 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-arm-linux-gnueabihf && make -j8 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-arm-linux-gnueabihf' /usr/bin/cmake -S/build/reproducible-path/yaramod-3.21.0 -B/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf --check-build-system CMakeFiles/Makefile.cmake 0 make -f CMakeFiles/Makefile2 preinstall make[3]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' make[3]: Nothing to be done for 'preinstall'. make[3]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' 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/arm-linux-gnueabihf/libyaramod.so.3.21.0 -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/arm-linux-gnueabihf/libyaramod.so.0 -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/arm-linux-gnueabihf/libyaramod.so -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/arm-linux-gnueabihf/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/parser -- 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/value.h -- 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/parser_driver.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/yaramod_error.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/token_stream.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/types/symbols.h -- 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/sections_summary.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/meta.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/literal.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/modules -- 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_list.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_cuckoo_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_pe_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_dex_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/generated/module_dotnet_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_console_generated.h -- 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/module_pool.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/modules/module.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/expression.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/regexp.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/variable.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/token.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/features.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_hex_string_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/builder/yara_file_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/yaramod.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/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_result.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/json.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/filesystem.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/observing_visitor.h -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/arm-linux-gnueabihf/pkgconfig/yaramod.pc make[2]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-arm-linux-gnueabihf' 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/__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/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.cpython-313-arm-linux-gnueabihf.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: /lib/ld-linux-armhf.so.3 dpkg-shlibdeps: warning: diversions involved - output may be incorrect diversion by libc6 to: /lib/ld-linux-armhf.so.3.usr-is-merged dpkg-shlibdeps: warning: diversions involved - output may be incorrect diversion by libc6 from: /lib/ld-linux-armhf.so.3 dpkg-shlibdeps: warning: diversions involved - output may be incorrect diversion by libc6 to: /lib/ld-linux-armhf.so.3.usr-is-merged dpkg-shlibdeps: warning: symbol __aeabi_atexit@CXXABI_ARM_1.3.3 used by debian/libyaramod0/usr/lib/arm-linux-gnueabihf/libyaramod.so.3.21.0 found in none of the libraries 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_armhf.deb'. dpkg-deb: building package 'libyaramod0' in '../libyaramod0_3.21.0-1.1+b2_armhf.deb'. dpkg-deb: building package 'libyaramod0-dbgsym' in '../libyaramod0-dbgsym_3.21.0-1.1+b2_armhf.deb'. dpkg-deb: building package 'python3-yaramod-dbgsym' in '../python3-yaramod-dbgsym_3.21.0-1.1+b2_armhf.deb'. dpkg-deb: building package 'python3-yaramod' in '../python3-yaramod_3.21.0-1.1+b2_armhf.deb'. dpkg-genbuildinfo --build=any -O../yaramod_3.21.0-1.1+b2_armhf.buildinfo dpkg-genchanges --build=any -O../yaramod_3.21.0-1.1+b2_armhf.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-28T21:08:29Z Finished -------- I: Built successfully +------------------------------------------------------------------------------+ | Changes Fri, 28 Nov 2025 21:08:31 +0000 | +------------------------------------------------------------------------------+ yaramod_3.21.0-1.1+b2_armhf.changes: ------------------------------------ Format: 1.8 Date: Tue, 11 Mar 2025 11:12:32 +0000 Source: yaramod (3.21.0-1.1) Binary: libyaramod-dev libyaramod0 libyaramod0-dbgsym python3-yaramod python3-yaramod-dbgsym Binary-Only: yes Architecture: armhf Version: 3.21.0-1.1+b2 Distribution: unstable Urgency: low Maintainer: Yangfl Changed-By: arm Build Daemon (arm-conova-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 armhf; no source changes. * Rebuild against blibre2-11-absl20240722. Checksums-Sha1: 94ce7f99df3ad3820e9bef74aaab29c484f11b93 737968 libyaramod-dev_3.21.0-1.1+b2_armhf.deb 51a129c0735f8aa29cb51f1bfd21ef709c372e02 12287052 libyaramod0-dbgsym_3.21.0-1.1+b2_armhf.deb 73ef7c9a94b3d15943a4ec2cae1304d2f93fb8cb 460396 libyaramod0_3.21.0-1.1+b2_armhf.deb 96a924b6959e6ae4cc74ab3406ccff3984d520ca 10355640 python3-yaramod-dbgsym_3.21.0-1.1+b2_armhf.deb b60faa0ee85b9065904a52622a8d4cb0ce1d5cf7 379500 python3-yaramod_3.21.0-1.1+b2_armhf.deb ee8d4627ad514b4278918daf4ea8045a5256729e 8633 yaramod_3.21.0-1.1+b2_armhf.buildinfo Checksums-Sha256: a6967f85b65324193b80f10f7268c0ab3a7a05e636c4b9ef6d79ad1814432d5e 737968 libyaramod-dev_3.21.0-1.1+b2_armhf.deb b97a335356b3de43c8028c25dd4266ee943dc0f7186866b29a41d9e55687d3b7 12287052 libyaramod0-dbgsym_3.21.0-1.1+b2_armhf.deb 5c59b734cf644563048c8552d73cccb9b2a203321405f4ee2bdd213574f21ae5 460396 libyaramod0_3.21.0-1.1+b2_armhf.deb 6bd1a35c792871a879423aedba77a361a92545719658bfc6d3f5bbbc4811ff04 10355640 python3-yaramod-dbgsym_3.21.0-1.1+b2_armhf.deb 06e6201c2e6f1d6531db221e94779ab1681a1d55d7ed8f4203a52046e830f9a7 379500 python3-yaramod_3.21.0-1.1+b2_armhf.deb 084ef88d08d3efdd2d1744aada070ef2a78911ba0824753ee362c45587da1590 8633 yaramod_3.21.0-1.1+b2_armhf.buildinfo Files: 2d9f6ba9659450139c03fe77715d0b94 737968 libdevel optional libyaramod-dev_3.21.0-1.1+b2_armhf.deb 8dfcc810908c3d51270a393b5678b22f 12287052 debug optional libyaramod0-dbgsym_3.21.0-1.1+b2_armhf.deb d11f853e09344ff7fcf3e110bcf02738 460396 libs optional libyaramod0_3.21.0-1.1+b2_armhf.deb 61676293d1e31784e845335ba18fcacd 10355640 debug optional python3-yaramod-dbgsym_3.21.0-1.1+b2_armhf.deb ec1eefe61809d4c8fd037176b46ffd65 379500 python optional python3-yaramod_3.21.0-1.1+b2_armhf.deb 995fdfc88d8581b6c99b61fb0fed99b0 8633 libs optional yaramod_3.21.0-1.1+b2_armhf.buildinfo +------------------------------------------------------------------------------+ | Buildinfo Fri, 28 Nov 2025 21:08:32 +0000 | +------------------------------------------------------------------------------+ Format: 1.0 Source: yaramod (3.21.0-1.1) Binary: libyaramod-dev libyaramod0 libyaramod0-dbgsym python3-yaramod python3-yaramod-dbgsym Architecture: armhf 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 armhf; no source changes. * Rebuild against blibre2-11-absl20240722. . -- arm Build Daemon (arm-conova-01) Tue, 11 Mar 2025 11:12:32 +0000 Checksums-Md5: 2d9f6ba9659450139c03fe77715d0b94 737968 libyaramod-dev_3.21.0-1.1+b2_armhf.deb 8dfcc810908c3d51270a393b5678b22f 12287052 libyaramod0-dbgsym_3.21.0-1.1+b2_armhf.deb d11f853e09344ff7fcf3e110bcf02738 460396 libyaramod0_3.21.0-1.1+b2_armhf.deb 61676293d1e31784e845335ba18fcacd 10355640 python3-yaramod-dbgsym_3.21.0-1.1+b2_armhf.deb ec1eefe61809d4c8fd037176b46ffd65 379500 python3-yaramod_3.21.0-1.1+b2_armhf.deb Checksums-Sha1: 94ce7f99df3ad3820e9bef74aaab29c484f11b93 737968 libyaramod-dev_3.21.0-1.1+b2_armhf.deb 51a129c0735f8aa29cb51f1bfd21ef709c372e02 12287052 libyaramod0-dbgsym_3.21.0-1.1+b2_armhf.deb 73ef7c9a94b3d15943a4ec2cae1304d2f93fb8cb 460396 libyaramod0_3.21.0-1.1+b2_armhf.deb 96a924b6959e6ae4cc74ab3406ccff3984d520ca 10355640 python3-yaramod-dbgsym_3.21.0-1.1+b2_armhf.deb b60faa0ee85b9065904a52622a8d4cb0ce1d5cf7 379500 python3-yaramod_3.21.0-1.1+b2_armhf.deb Checksums-Sha256: a6967f85b65324193b80f10f7268c0ab3a7a05e636c4b9ef6d79ad1814432d5e 737968 libyaramod-dev_3.21.0-1.1+b2_armhf.deb b97a335356b3de43c8028c25dd4266ee943dc0f7186866b29a41d9e55687d3b7 12287052 libyaramod0-dbgsym_3.21.0-1.1+b2_armhf.deb 5c59b734cf644563048c8552d73cccb9b2a203321405f4ee2bdd213574f21ae5 460396 libyaramod0_3.21.0-1.1+b2_armhf.deb 6bd1a35c792871a879423aedba77a361a92545719658bfc6d3f5bbbc4811ff04 10355640 python3-yaramod-dbgsym_3.21.0-1.1+b2_armhf.deb 06e6201c2e6f1d6531db221e94779ab1681a1d55d7ed8f4203a52046e830f9a7 379500 python3-yaramod_3.21.0-1.1+b2_armhf.deb Build-Origin: Debian Build-Architecture: armhf Build-Date: Fri, 28 Nov 2025 21:08: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-arm-linux-gnueabihf (= 2.44-3), binutils-common (= 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), cpp (= 4:14.2.0-1), cpp-14 (= 14.2.0-17), cpp-14-arm-linux-gnueabihf (= 14.2.0-17), cpp-arm-linux-gnueabihf (= 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+b2), 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-arm-linux-gnueabihf (= 14.2.0-17), g++-arm-linux-gnueabihf (= 4:14.2.0-1), gcc (= 4:14.2.0-1), gcc-14 (= 14.2.0-17), gcc-14-arm-linux-gnueabihf (= 14.2.0-17), gcc-14-base (= 14.2.0-17), gcc-arm-linux-gnueabihf (= 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), libgssapi-krb5-2 (= 1.21.3-4), libgtest-dev (= 1.16.0-1), libhogweed6t64 (= 3.10.1-1), libicu72 (= 72.1-6), libidn2-0 (= 2.3.8-1), libisl23 (= 0.27-1), 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), 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), 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), 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=8" LANG="C.UTF-8" LC_COLLATE="C.UTF-8" LC_CTYPE="C.UTF-8" SOURCE_DATE_EPOCH="1741691552" +------------------------------------------------------------------------------+ | Package contents Fri, 28 Nov 2025 21:08:32 +0000 | +------------------------------------------------------------------------------+ libyaramod-dev_3.21.0-1.1+b2_armhf.deb -------------------------------------- new Debian package, version 2.0. size 737968 bytes: control archive=2664 bytes. 612 bytes, 17 lines control 6106 bytes, 73 lines md5sums Package: libyaramod-dev Source: yaramod (3.21.0-1.1) Version: 3.21.0-1.1+b2 Architecture: armhf Maintainer: Yangfl Installed-Size: 7086 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 11:12 ./ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/include/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/include/yaramod/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./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 11:12 ./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 11:12 ./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 11:12 ./usr/include/yaramod/types/modules/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/include/yaramod/types/modules/generated/ -rw-r--r-- root/root 21379 2025-03-11 11:12 ./usr/include/yaramod/types/modules/generated/module_console_generated.h -rw-r--r-- root/root 4321 2025-03-11 11:12 ./usr/include/yaramod/types/modules/generated/module_cuckoo_deprecated_generated.h -rw-r--r-- root/root 43587 2025-03-11 11:12 ./usr/include/yaramod/types/modules/generated/module_cuckoo_generated.h -rw-r--r-- root/root 156820 2025-03-11 11:12 ./usr/include/yaramod/types/modules/generated/module_dex_generated.h -rw-r--r-- root/root 100101 2025-03-11 11:12 ./usr/include/yaramod/types/modules/generated/module_dotnet_generated.h -rw-r--r-- root/root 141897 2025-03-11 11:12 ./usr/include/yaramod/types/modules/generated/module_elf_generated.h -rw-r--r-- root/root 28745 2025-03-11 11:12 ./usr/include/yaramod/types/modules/generated/module_hash_generated.h -rw-r--r-- root/root 1151 2025-03-11 11:12 ./usr/include/yaramod/types/modules/generated/module_list.h -rw-r--r-- root/root 222853 2025-03-11 11:12 ./usr/include/yaramod/types/modules/generated/module_macho_generated.h -rw-r--r-- root/root 4698 2025-03-11 11:12 ./usr/include/yaramod/types/modules/generated/module_magic_generated.h -rw-r--r-- root/root 84731 2025-03-11 11:12 ./usr/include/yaramod/types/modules/generated/module_math_generated.h -rw-r--r-- root/root 396231 2025-03-11 11:12 ./usr/include/yaramod/types/modules/generated/module_pe_generated.h -rw-r--r-- root/root 11493 2025-03-11 11:12 ./usr/include/yaramod/types/modules/generated/module_string_generated.h -rw-r--r-- root/root 2834 2025-03-11 11:12 ./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 11:12 ./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 11:12 ./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 11:12 ./usr/lib/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/lib/arm-linux-gnueabihf/ -rw-r--r-- root/root 5648948 2025-03-11 11:12 ./usr/lib/arm-linux-gnueabihf/libyaramod.a lrwxrwxrwx root/root 0 2025-03-11 11:12 ./usr/lib/arm-linux-gnueabihf/libyaramod.so -> libyaramod.so.0 drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/lib/arm-linux-gnueabihf/pkgconfig/ -rw-r--r-- root/root 212 2025-03-11 11:12 ./usr/lib/arm-linux-gnueabihf/pkgconfig/yaramod.pc drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/share/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/share/doc/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/share/doc/libyaramod-dev/ -rw-r--r-- root/root 231 2025-03-11 11:12 ./usr/share/doc/libyaramod-dev/changelog.Debian.armhf.gz -rw-r--r-- root/root 480 2025-03-11 11:12 ./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 11:12 ./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_armhf.deb ------------------------------------------ new Debian package, version 2.0. size 12287052 bytes: control archive=544 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: armhf Maintainer: Yangfl Installed-Size: 12887 Depends: libyaramod0 (= 3.21.0-1.1+b2) Section: debug Priority: optional Multi-Arch: same Description: debug symbols for libyaramod0 Build-Ids: 9c3c2d75e6d586d9dbea227b8b62f5300ba71165 drwxr-xr-x root/root 0 2025-03-11 11:12 ./ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/lib/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/lib/debug/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/lib/debug/.build-id/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/lib/debug/.build-id/9c/ -rw-r--r-- root/root 13185940 2025-03-11 11:12 ./usr/lib/debug/.build-id/9c/3c2d75e6d586d9dbea227b8b62f5300ba71165.debug drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/share/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/share/doc/ lrwxrwxrwx root/root 0 2025-03-11 11:12 ./usr/share/doc/libyaramod0-dbgsym -> libyaramod0 libyaramod0_3.21.0-1.1+b2_armhf.deb ----------------------------------- new Debian package, version 2.0. size 460396 bytes: control archive=948 bytes. 611 bytes, 17 lines control 392 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: armhf Maintainer: Yangfl Installed-Size: 1690 Depends: libc6 (>= 2.38), libgcc-s1 (>= 3.5), 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 11:12 ./ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/lib/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/lib/arm-linux-gnueabihf/ lrwxrwxrwx root/root 0 2025-03-11 11:12 ./usr/lib/arm-linux-gnueabihf/libyaramod.so.0 -> libyaramod.so.3.21.0 -rw-r--r-- root/root 1705380 2025-03-11 11:12 ./usr/lib/arm-linux-gnueabihf/libyaramod.so.3.21.0 drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/share/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/share/doc/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/share/doc/libyaramod0/ -rw-r--r-- root/root 231 2025-03-11 11:12 ./usr/share/doc/libyaramod0/changelog.Debian.armhf.gz -rw-r--r-- root/root 480 2025-03-11 11:12 ./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_armhf.deb ---------------------------------------------- new Debian package, version 2.0. size 10355640 bytes: control archive=544 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: armhf Maintainer: Yangfl Installed-Size: 12103 Depends: python3-yaramod (= 3.21.0-1.1+b2) Section: debug Priority: optional Multi-Arch: same Description: debug symbols for python3-yaramod Build-Ids: 27e37f4921f291e26a3fc384ad731ea6b9232765 drwxr-xr-x root/root 0 2025-03-11 11:12 ./ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/lib/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/lib/debug/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/lib/debug/.build-id/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/lib/debug/.build-id/27/ -rw-r--r-- root/root 12382920 2025-03-11 11:12 ./usr/lib/debug/.build-id/27/e37f4921f291e26a3fc384ad731ea6b9232765.debug drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/share/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/share/doc/ lrwxrwxrwx root/root 0 2025-03-11 11:12 ./usr/share/doc/python3-yaramod-dbgsym -> python3-yaramod python3-yaramod_3.21.0-1.1+b2_armhf.deb --------------------------------------- new Debian package, version 2.0. size 379500 bytes: control archive=1060 bytes. 707 bytes, 17 lines control 906 bytes, 10 lines md5sums Package: python3-yaramod Source: yaramod (3.21.0-1.1) Version: 3.21.0-1.1+b2 Architecture: armhf Maintainer: Yangfl Installed-Size: 1642 Depends: libc6 (>= 2.32), libgcc-s1 (>= 3.5), 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 11:12 ./ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/lib/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/lib/python3/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/lib/python3/dist-packages/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/lib/python3/dist-packages/yaramod-3.21.0.egg-info/ -rw-r--r-- root/root 991 2025-03-11 11:12 ./usr/lib/python3/dist-packages/yaramod-3.21.0.egg-info/PKG-INFO -rw-r--r-- root/root 1 2025-03-11 11:12 ./usr/lib/python3/dist-packages/yaramod-3.21.0.egg-info/dependency_links.txt -rw-r--r-- root/root 8 2025-03-11 11:12 ./usr/lib/python3/dist-packages/yaramod-3.21.0.egg-info/top_level.txt -rw-r--r-- root/root 1574392 2025-03-11 11:12 ./usr/lib/python3/dist-packages/yaramod.cpython-313-arm-linux-gnueabihf.so drwxr-xr-x root/root 0 2025-03-11 11:12 ./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 11:12 ./usr/share/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/share/doc/ drwxr-xr-x root/root 0 2025-03-11 11:12 ./usr/share/doc/python3-yaramod/ -rw-r--r-- root/root 231 2025-03-11 11:12 ./usr/share/doc/python3-yaramod/changelog.Debian.armhf.gz -rw-r--r-- root/root 480 2025-03-11 11:12 ./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 Fri, 28 Nov 2025 21:08:37 +0000 | +------------------------------------------------------------------------------+ +------------------------------------------------------------------------------+ | Cleanup Fri, 28 Nov 2025 21:08:37 +0000 | +------------------------------------------------------------------------------+ Purging /build/reproducible-path Not cleaning session: cloned chroot in use +------------------------------------------------------------------------------+ | Summary Fri, 28 Nov 2025 21:08:39 +0000 | +------------------------------------------------------------------------------+ Build Architecture: armhf Build Type: any Build-Space: 675448 Build-Time: 259 Distribution: unstable Host Architecture: armhf Install-Time: 6 Job: /srv/rebuilderd/tmp/rebuilderdjhZodZ/inputs/yaramod_3.21.0-1.1.dsc Machine Architecture: arm64 Package: yaramod Package-Time: 279 Source-Version: 3.21.0-1.1 Space: 675448 Status: successful Version: 3.21.0-1.1+b2 -------------------------------------------------------------------------------- Finished at 2025-11-28T21:08:29Z Build needed 00:04:39, 675448k disk space build artifacts stored in /srv/rebuilderd/tmp/rebuilderdjhZodZ/out checking libyaramod-dev_3.21.0-1.1+b2_armhf.deb: size differs for libyaramod-dev_3.21.0-1.1+b2_armhf.deb