=============================================================================== 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/rebuilderdyrdFvc/inputs/yaramod_3.21.0-1.1+b2_arm64.buildinfo Source: yaramod Version: 3.21.0-1.1 rebuilderd-worker node: codethink02-arm64 +------------------------------------------------------------------------------+ | Downloading sources Thu, 27 Nov 2025 10:52:06 +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/main Sources [94.2 kB] Get:12 https://deb.debian.org/debian-security trixie-security/non-free-firmware Sources [696 B] 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/non-free-firmware Sources [1032 B] Get:16 https://deb.debian.org/debian trixie-backports/main Sources [104 kB] Get:17 https://deb.debian.org/debian forky/main Sources [10.7 MB] Get:18 https://deb.debian.org/debian forky/non-free-firmware Sources [7408 B] 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 [9388 B] Get:21 https://deb.debian.org/debian experimental/main Sources [371 kB] Get:22 https://deb.debian.org/debian experimental/non-free-firmware Sources [3332 B] Fetched 33.8 MB in 31s (1081 kB/s) Reading package lists... 'https://deb.debian.org/debian/pool/main/y/yaramod/yaramod_3.21.0-1.1.dsc' yaramod_3.21.0-1.1.dsc 2205 SHA256:d3852e587b04192d177516e5cb2e13bcd5dbde1d477f877c1636c4bea07a6d62 'https://deb.debian.org/debian/pool/main/y/yaramod/yaramod_3.21.0.orig.tar.gz' yaramod_3.21.0.orig.tar.gz 965418 SHA256:095aee2946f1636b01653a1b67f84973eeb7ce733b17350dfb911bc74fa4cb9e 'https://deb.debian.org/debian/pool/main/y/yaramod/yaramod_3.21.0-1.1.debian.tar.xz' yaramod_3.21.0-1.1.debian.tar.xz 6360 SHA256:07f88a705ab951273e865dad08732f09cd589230f56ea414bb63a599986678bc 095aee2946f1636b01653a1b67f84973eeb7ce733b17350dfb911bc74fa4cb9e yaramod_3.21.0.orig.tar.gz 07f88a705ab951273e865dad08732f09cd589230f56ea414bb63a599986678bc yaramod_3.21.0-1.1.debian.tar.xz d3852e587b04192d177516e5cb2e13bcd5dbde1d477f877c1636c4bea07a6d62 yaramod_3.21.0-1.1.dsc +------------------------------------------------------------------------------+ | Calling debrebuild Thu, 27 Nov 2025 10:52:38 +0000 | +------------------------------------------------------------------------------+ Rebuilding yaramod=3.21.0-1.1 in /srv/rebuilderd/tmp/rebuilderdyrdFvc/inputs now. + nice /usr/bin/debrebuild --buildresult=/srv/rebuilderd/tmp/rebuilderdyrdFvc/out --builder=sbuild+unshare --cache=/srv/rebuilderd/cache -- /srv/rebuilderd/tmp/rebuilderdyrdFvc/inputs/yaramod_3.21.0-1.1+b2_arm64.buildinfo /srv/rebuilderd/tmp/rebuilderdyrdFvc/inputs/yaramod_3.21.0-1.1+b2_arm64.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 arm64 Packages [10.2 MB] Get:4 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 Packages [10.0 MB] Fetched 20.6 MB in 2s (10.2 MB/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 arm64 libreadline8t64 arm64 8.2-6 [159 kB] Fetched 159 kB in 0s (14.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpbtucgghs/libreadline8t64_8.2-6_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libjs-jquery all 3.6.1+dfsg+~3.5.14-1 [326 kB] Fetched 326 kB in 0s (18.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0i75lrx8/libjs-jquery_3.6.1+dfsg+~3.5.14-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libbinutils arm64 2.44-3 [660 kB] Fetched 660 kB in 0s (51.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpzi9vfaat/libbinutils_2.44-3_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 binutils-common arm64 2.44-3 [2509 kB] Fetched 2509 kB in 0s (67.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpaqsnuhcr/binutils-common_2.44-3_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libperl5.40 arm64 5.40.1-2 [4143 kB] Fetched 4143 kB in 0s (85.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp4zpgfrz7/libperl5.40_5.40.1-2_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 rpcsvc-proto arm64 1.4.3-1+b1 [60.5 kB] Fetched 60.5 kB in 0s (3691 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmptd92hf5v/rpcsvc-proto_1.4.3-1+b1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libicu72 arm64 72.1-6 [9239 kB] Fetched 9239 kB in 0s (112 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpc9wp2tr6/libicu72_72.1-6_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libpam-modules-bin arm64 1.7.0-3 [48.0 kB] Fetched 48.0 kB in 0s (2986 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp01p0jg2i/libpam-modules-bin_1.7.0-3_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 gcc-14-aarch64-linux-gnu arm64 14.2.0-17 [17.7 MB] Fetched 17.7 MB in 0s (212 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp60epx_q6/gcc-14-aarch64-linux-gnu_14.2.0-17_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libctf-nobfd0 arm64 2.44-3 [152 kB] Fetched 152 kB in 0s (8722 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpx18r8ajl/libctf-nobfd0_2.44-3_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 libjansson4 arm64 2.14-2+b3 [39.2 kB] Fetched 39.2 kB in 0s (2407 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmps3uhe12y/libjansson4_2.14-2+b3_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libcap2 arm64 1:2.75-1 [27.1 kB] Fetched 27.1 kB in 0s (2146 kB/s) dpkg-name: info: moved 'libcap2_1%3a2.75-1_arm64.deb' to '/srv/rebuilderd/tmp/tmpnopztqsa/libcap2_2.75-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 python3-minimal arm64 3.13.2-2 [27.1 kB] Fetched 27.1 kB in 0s (1681 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp7q8fpiim/python3-minimal_3.13.2-2_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 libssh2-1t64 arm64 1.11.1-1 [235 kB] Fetched 235 kB in 0s (12.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpiomrv2my/libssh2-1t64_1.11.1-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 diffutils arm64 1:3.10-2 [378 kB] Fetched 378 kB in 0s (19.6 MB/s) dpkg-name: info: moved 'diffutils_1%3a3.10-2_arm64.deb' to '/srv/rebuilderd/tmp/tmpdk0zlbje/diffutils_3.10-2_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libseccomp2 arm64 2.5.5-2+b1 [47.4 kB] Fetched 47.4 kB in 0s (2868 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0p62wb2t/libseccomp2_2.5.5-2+b1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 python3-pkg-resources all 75.8.0-1 [222 kB] Fetched 222 kB in 0s (12.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp7xuksrqo/python3-pkg-resources_75.8.0-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libgnutls30t64 arm64 3.8.9-2 [1374 kB] Fetched 1374 kB in 0s (83.9 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpva10k648/libgnutls30t64_3.8.9-2_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 dh-python all 6.20250308 [115 kB] Fetched 115 kB in 0s (6412 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp8l1yc_9r/dh-python_6.20250308_all.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 libyaml-0-2 arm64 0.2.5-2 [49.2 kB] Fetched 49.2 kB in 0s (2923 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpb4mzcahk/libyaml-0-2_0.2.5-2_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 cpp-14 arm64 14.2.0-17 [1280 B] Fetched 1280 B in 0s (73.7 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpue1lmf9w/cpp-14_14.2.0-17_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libuchardet0 arm64 0.0.8-1+b2 [69.2 kB] Fetched 69.2 kB in 0s (3834 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpoo9wtmwk/libuchardet0_0.0.8-1+b2_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 g++ arm64 4:14.2.0-1 [1332 B] Fetched 1332 B in 0s (76.4 kB/s) dpkg-name: info: moved 'g++_4%3a14.2.0-1_arm64.deb' to '/srv/rebuilderd/tmp/tmpd_fzcof1/g++_14.2.0-1_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 zlib1g-dev arm64 1:1.3.dfsg+really1.3.1-1+b1 [917 kB] Fetched 917 kB in 0s (35.8 MB/s) dpkg-name: info: moved 'zlib1g-dev_1%3a1.3.dfsg+really1.3.1-1+b1_arm64.deb' to '/srv/rebuilderd/tmp/tmpvt8lc6rs/zlib1g-dev_1.3.dfsg+really1.3.1-1+b1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 gcc-14 arm64 14.2.0-17 [527 kB] Fetched 527 kB in 0s (24.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjyin1tw_/gcc-14_14.2.0-17_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libselinux1 arm64 3.8-4 [79.2 kB] Fetched 79.2 kB in 0s (4178 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp1tsexoa0/libselinux1_3.8-4_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 file arm64 1:5.45-3+b1 [43.4 kB] Fetched 43.4 kB in 0s (2594 kB/s) dpkg-name: info: moved 'file_1%3a5.45-3+b1_arm64.deb' to '/srv/rebuilderd/tmp/tmp9o6e1vw4/file_5.45-3+b1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libpython3.13-dev arm64 3.13.2-1 [4678 kB] Fetched 4678 kB in 0s (85.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpp3pqcyhh/libpython3.13-dev_3.13.2-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 python3 arm64 3.13.2-2 [28.1 kB] Fetched 28.1 kB in 0s (1288 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpmmf9qur9/python3_3.13.2-2_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libstdc++6 arm64 14.2.0-17 [637 kB] Fetched 637 kB in 0s (28.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmptww18vog/libstdc++6_14.2.0-17_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 bsdutils arm64 1:2.40.4-5 [105 kB] Fetched 105 kB in 0s (5867 kB/s) dpkg-name: info: moved 'bsdutils_1%3a2.40.4-5_arm64.deb' to '/srv/rebuilderd/tmp/tmp9h8zk2aw/bsdutils_2.40.4-5_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 pkgconf-bin arm64 1.8.1-4 [29.6 kB] Fetched 29.6 kB in 0s (1809 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0z1t48d_/pkgconf-bin_1.8.1-4_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 liblsan0 arm64 14.2.0-17 [1162 kB] Fetched 1162 kB in 0s (43.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpzz1lhd_s/liblsan0_14.2.0-17_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 googletest all 1.16.0-1 [517 kB] Fetched 517 kB in 0s (24.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmplpzuobf6/googletest_1.16.0-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libgcc-s1 arm64 14.2.0-17 [54.1 kB] Fetched 54.1 kB in 0s (3464 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp_49vt53d/libgcc-s1_14.2.0-17_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 python3-typeguard all 4.4.2-1 [37.3 kB] Fetched 37.3 kB in 0s (1784 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpnraatvgw/python3-typeguard_4.4.2-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 base-passwd arm64 3.6.6 [52.9 kB] Fetched 52.9 kB in 0s (2925 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp40stppom/base-passwd_3.6.6_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libgtest-dev arm64 1.16.0-1 [246 kB] Fetched 246 kB in 0s (12.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpozmqjg8u/libgtest-dev_1.16.0-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 make arm64 4.4.1-1 [453 kB] Fetched 453 kB in 0s (20.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpt_zu87ra/make_4.4.1-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 init-system-helpers all 1.68 [38.7 kB] Fetched 38.7 kB in 0s (2234 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0rni5mz5/init-system-helpers_1.68_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 ncurses-bin arm64 6.5+20250216-2 [432 kB] Fetched 432 kB in 0s (19.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpxquebzmw/ncurses-bin_6.5+20250216-2_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libncursesw6 arm64 6.5+20250216-2 [124 kB] Fetched 124 kB in 0s (6595 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpi3t7dj0b/libncursesw6_6.5+20250216-2_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libpam-runtime all 1.7.0-3 [248 kB] Fetched 248 kB in 0s (12.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpbnwwp1ff/libpam-runtime_1.7.0-3_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libzstd1 arm64 1.5.6+dfsg-2 [261 kB] Fetched 261 kB in 0s (16.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmplzftmata/libzstd1_1.5.6+dfsg-2_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libsmartcols1 arm64 2.40.4-5 [136 kB] Fetched 136 kB in 0s (12.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpnr40fi54/libsmartcols1_2.40.4-5_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 man-db arm64 2.13.0-1 [1404 kB] Fetched 1404 kB in 0s (49.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpyyu083io/man-db_2.13.0-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libpython3.13-stdlib arm64 3.13.2-1 [1914 kB] Fetched 1914 kB in 0s (58.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpy_833j17/libpython3.13-stdlib_3.13.2-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 dwz arm64 0.15-1+b1 [102 kB] Fetched 102 kB in 0s (5333 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpnq0a93sw/dwz_0.15-1+b1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libhwasan0 arm64 14.2.0-17 [1443 kB] Fetched 1443 kB in 0s (48.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpafdou8r_/libhwasan0_14.2.0-17_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 libcap-ng0 arm64 0.8.5-4+b1 [17.0 kB] Fetched 17.0 kB in 0s (965 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6eysa9y4/libcap-ng0_0.8.5-4+b1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libpython3.13 arm64 3.13.2-1 [1970 kB] Fetched 1970 kB in 0s (29.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpn06ktwy8/libpython3.13_3.13.2-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 pkg-kde-tools all 0.18.12 [89.1 kB] Fetched 89.1 kB in 0s (5765 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpx7v3wh2s/pkg-kde-tools_0.18.12_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libatomic1 arm64 14.2.0-17 [10.1 kB] Fetched 10.1 kB in 0s (148 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpu9q7nsbq/libatomic1_14.2.0-17_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 autoconf all 2.72-3 [493 kB] Fetched 493 kB in 0s (20.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmplu9dx842/autoconf_2.72-3_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libpython3-stdlib arm64 3.13.2-2 [10.1 kB] Fetched 10.1 kB in 0s (184 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp_21tt0rj/libpython3-stdlib_3.13.2-2_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libc-dev-bin arm64 2.41-4 [57.5 kB] Fetched 57.5 kB in 0s (2349 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjro1z_3d/libc-dev-bin_2.41-4_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libuv1t64 arm64 1.50.0-2 [148 kB] Fetched 148 kB in 0s (8283 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpv1tpigzu/libuv1t64_1.50.0-2_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libtinfo6 arm64 6.5+20250216-2 [341 kB] Fetched 341 kB in 0s (16.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpaepwsr2w/libtinfo6_6.5+20250216-2_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libgomp1 arm64 14.2.0-17 [124 kB] Fetched 124 kB in 0s (6488 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpdzcdn3ed/libgomp1_14.2.0-17_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libdebconfclient0 arm64 0.277 [10.5 kB] Fetched 10.5 kB in 0s (591 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpn9mgek01/libdebconfclient0_0.277_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libpam-modules arm64 1.7.0-3 [170 kB] Fetched 170 kB in 0s (1291 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpb63wwccx/libpam-modules_1.7.0-3_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libubsan1 arm64 14.2.0-17 [1039 kB] Fetched 1039 kB in 0s (38.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpkhypd57k/libubsan1_14.2.0-17_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 g++-aarch64-linux-gnu arm64 4:14.2.0-1 [1200 B] Fetched 1200 B in 0s (17.9 kB/s) dpkg-name: info: moved 'g++-aarch64-linux-gnu_4%3a14.2.0-1_arm64.deb' to '/srv/rebuilderd/tmp/tmpi_35p31t/g++-aarch64-linux-gnu_14.2.0-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 liblzma5 arm64 5.6.4-1 [274 kB] Fetched 274 kB in 0s (13.9 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpiccg5n_9/liblzma5_5.6.4-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libproc2-0 arm64 2:4.0.4-7 [62.4 kB] Fetched 62.4 kB in 0s (3591 kB/s) dpkg-name: info: moved 'libproc2-0_2%3a4.0.4-7_arm64.deb' to '/srv/rebuilderd/tmp/tmpphfr_jb4/libproc2-0_4.0.4-7_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 autopoint all 0.23.1-1 [770 kB] Fetched 770 kB in 0s (3619 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpe2fu8hxf/autopoint_0.23.1-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 debconf all 1.5.90 [121 kB] Fetched 121 kB in 0s (6266 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpmq63rvzd/debconf_1.5.90_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 cpp-aarch64-linux-gnu arm64 4:14.2.0-1 [4832 B] Fetched 4832 B in 0s (259 kB/s) dpkg-name: info: moved 'cpp-aarch64-linux-gnu_4%3a14.2.0-1_arm64.deb' to '/srv/rebuilderd/tmp/tmpp77opw2g/cpp-aarch64-linux-gnu_14.2.0-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libexpat1-dev arm64 2.6.4-1 [143 kB] Fetched 143 kB in 0s (976 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp_gly_sw0/libexpat1-dev_2.6.4-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 cpp arm64 4:14.2.0-1 [1568 B] Fetched 1568 B in 0s (30.8 kB/s) dpkg-name: info: moved 'cpp_4%3a14.2.0-1_arm64.deb' to '/srv/rebuilderd/tmp/tmpq5l4nhp0/cpp_14.2.0-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libsqlite3-0 arm64 3.46.1-2 [852 kB] Fetched 852 kB in 0s (33.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp4lbhz4uc/libsqlite3-0_3.46.1-2_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libnghttp3-9 arm64 1.8.0-1 [63.2 kB] Fetched 63.2 kB in 0s (562 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpd7idre5a/libnghttp3-9_1.8.0-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 python3.13-dev arm64 3.13.2-1 [505 kB] Fetched 505 kB in 0s (15.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmphlzku9f2/python3.13-dev_3.13.2-1_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 libfmt10 arm64 10.1.1+ds1-4 [121 kB] Fetched 121 kB in 0s (6429 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmppedf66hy/libfmt10_10.1.1+ds1-4_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 sed arm64 4.9-2+b1 [326 kB] Fetched 326 kB in 0s (15.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpm3x32ds7/sed_4.9-2+b1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 perl-modules-5.40 all 5.40.1-2 [3017 kB] Fetched 3017 kB in 0s (71.9 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpdqgl5ldd/perl-modules-5.40_5.40.1-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libdb5.3t64 arm64 5.3.28+dfsg2-9 [629 kB] Fetched 629 kB in 0s (28.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpytox5lmx/libdb5.3t64_5.3.28+dfsg2-9_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 libbz2-1.0 arm64 1.0.8-6 [37.8 kB] Fetched 37.8 kB in 0s (2050 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpxhwsv4cu/libbz2-1.0_1.0.8-6_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libc-bin arm64 2.41-4 [549 kB] Fetched 549 kB in 0s (24.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp17o8v9ur/libc-bin_2.41-4_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 readline-common all 8.2-6 [69.4 kB] Fetched 69.4 kB in 0s (3914 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpdften2ev/readline-common_8.2-6_all.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 po-debconf all 1.0.21+nmu1 [248 kB] Fetched 248 kB in 0s (12.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjugnyqiw/po-debconf_1.0.21+nmu1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libgprofng0 arm64 2.44-3 [668 kB] Fetched 668 kB in 0s (15.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpsphes6lr/libgprofng0_2.44-3_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 gcc-aarch64-linux-gnu arm64 4:14.2.0-1 [1440 B] Fetched 1440 B in 0s (84.2 kB/s) dpkg-name: info: moved 'gcc-aarch64-linux-gnu_4%3a14.2.0-1_arm64.deb' to '/srv/rebuilderd/tmp/tmpttteaye3/gcc-aarch64-linux-gnu_14.2.0-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libc6-dev arm64 2.41-4 [1620 kB] Fetched 1620 kB in 0s (54.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmptu6keox0/libc6-dev_2.41-4_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libaudit-common all 1:4.0.2-2 [12.7 kB] Fetched 12.7 kB in 0s (735 kB/s) dpkg-name: info: moved 'libaudit-common_1%3a4.0.2-2_all.deb' to '/srv/rebuilderd/tmp/tmp_06cupgi/libaudit-common_4.0.2-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libhogweed6t64 arm64 3.10.1-1 [332 kB] Fetched 332 kB in 0s (15.9 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpf5je5nlw/libhogweed6t64_3.10.1-1_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 libjs-underscore all 1.13.4~dfsg+~1.11.4-3 [116 kB] Fetched 116 kB in 0s (6536 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpts70orn6/libjs-underscore_1.13.4~dfsg+~1.11.4-3_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libsasl2-2 arm64 2.1.28+dfsg1-9 [55.6 kB] Fetched 55.6 kB in 0s (2102 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpeupmoubm/libsasl2-2_2.1.28+dfsg1-9_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 bash arm64 5.2.37-1.1 [1455 kB] Fetched 1455 kB in 0s (46.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp_xqgdxr_/bash_5.2.37-1.1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libblkid1 arm64 2.40.4-5 [164 kB] Fetched 164 kB in 0s (8911 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpnurpn3k5/libblkid1_2.40.4-5_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libpipeline1 arm64 1.5.8-1 [40.2 kB] Fetched 40.2 kB in 0s (2331 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpb2npebbg/libpipeline1_1.5.8-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libsframe1 arm64 2.44-3 [77.8 kB] Fetched 77.8 kB in 0s (4495 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpr774t587/libsframe1_2.44-3_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libitm1 arm64 14.2.0-17 [24.2 kB] Fetched 24.2 kB in 0s (1318 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpahwmi_w7/libitm1_14.2.0-17_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libmagic-mgc arm64 1:5.45-3+b1 [314 kB] Fetched 314 kB in 0s (16.1 MB/s) dpkg-name: info: moved 'libmagic-mgc_1%3a5.45-3+b1_arm64.deb' to '/srv/rebuilderd/tmp/tmpig191olg/libmagic-mgc_5.45-3+b1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 procps arm64 2:4.0.4-7 [868 kB] Fetched 868 kB in 0s (25.0 MB/s) dpkg-name: info: moved 'procps_2%3a4.0.4-7_arm64.deb' to '/srv/rebuilderd/tmp/tmpzop0taes/procps_4.0.4-7_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libjs-sphinxdoc all 8.1.3-5 [30.5 kB] Fetched 30.5 kB in 0s (1544 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmptuhsx2lu/libjs-sphinxdoc_8.1.3-5_all.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 libfmt-dev arm64 10.1.1+ds1-4 [177 kB] Fetched 177 kB in 0s (6850 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpy0x5i42q/libfmt-dev_10.1.1+ds1-4_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 linux-libc-dev all 6.12.17-1 [2526 kB] Fetched 2526 kB in 0s (65.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpbgqmzl11/linux-libc-dev_6.12.17-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 python3-zipp all 3.21.0-1 [10.6 kB] Fetched 10.6 kB in 0s (624 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmptmwv9iwx/python3-zipp_3.21.0-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libpython3.13-minimal arm64 3.13.2-1 [853 kB] Fetched 853 kB in 0s (36.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp5pj7ttbm/libpython3.13-minimal_3.13.2-1_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 libarchive-zip-perl all 1.68-1 [104 kB] Fetched 104 kB in 0s (5676 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmprl7wr6a8/libarchive-zip-perl_1.68-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 sysvinit-utils arm64 3.14-3 [33.9 kB] Fetched 33.9 kB in 0s (1940 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp2j0ctz05/sysvinit-utils_3.14-3_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 python3-more-itertools all 10.6.0-1 [65.3 kB] Fetched 65.3 kB in 0s (3344 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpppecevka/python3-more-itertools_10.6.0-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libaudit1 arm64 1:4.0.2-2+b2 [54.6 kB] Fetched 54.6 kB in 0s (2922 kB/s) dpkg-name: info: moved 'libaudit1_1%3a4.0.2-2+b2_arm64.deb' to '/srv/rebuilderd/tmp/tmpr1hb1jdq/libaudit1_4.0.2-2+b2_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libabsl20240722 arm64 20240722.0-1.5 [452 kB] Fetched 452 kB in 0s (7607 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0djaormz/libabsl20240722_20240722.0-1.5_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 g++-14 arm64 14.2.0-17 [22.1 kB] Fetched 22.1 kB in 0s (1106 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp8rz9qdcj/g++-14_14.2.0-17_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 python3-dev arm64 3.13.2-2 [26.1 kB] Fetched 26.1 kB in 0s (1424 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp8sjjb4_8/python3-dev_3.13.2-2_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 build-essential arm64 12.12 [4624 B] Fetched 4624 B in 0s (173 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpgvoai8yr/build-essential_12.12_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libcom-err2 arm64 1.47.2-1 [23.9 kB] Fetched 23.9 kB in 0s (1420 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpoh91iisz/libcom-err2_1.47.2-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libcurl4t64 arm64 8.12.1-3 [339 kB] Fetched 339 kB in 0s (15.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpg5_lu1w0/libcurl4t64_8.12.1-3_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libexpat1 arm64 2.6.4-1 [90.7 kB] Fetched 90.7 kB in 0s (2371 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpyvw9jlln/libexpat1_2.6.4-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libssl3t64 arm64 3.4.1-1 [2636 kB] Fetched 2636 kB in 0s (69.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpp0tluhv3/libssl3t64_3.4.1-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 xz-utils arm64 5.6.4-1 [553 kB] Fetched 553 kB in 0s (18.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpdflm37mq/xz-utils_5.6.4-1_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 libattr1 arm64 1:2.5.2-3 [22.7 kB] Fetched 22.7 kB in 0s (1073 kB/s) dpkg-name: info: moved 'libattr1_1%3a2.5.2-3_arm64.deb' to '/srv/rebuilderd/tmp/tmpu50xa_fc/libattr1_2.5.2-3_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 base-files arm64 13.7 [72.9 kB] Fetched 72.9 kB in 0s (3734 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjreeupa_/base-files_13.7_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 m4 arm64 1.4.19-7 [285 kB] Fetched 285 kB in 0s (13.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpidto6psw/m4_1.4.19-7_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libxml2 arm64 2.12.7+dfsg+really2.9.14-0.2+b2 [630 kB] Fetched 630 kB in 0s (23.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpx2ispc0r/libxml2_2.12.7+dfsg+really2.9.14-0.2+b2_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 python3-autocommand all 2.2.2-3 [13.6 kB] Fetched 13.6 kB in 0s (710 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0w9u919z/python3-autocommand_2.2.2-3_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libsystemd0 arm64 257.4-1 [420 kB] Fetched 420 kB in 0s (6475 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp547e3xoe/libsystemd0_257.4-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 python3-inflect all 7.3.1-2 [32.4 kB] Fetched 32.4 kB in 0s (813 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmppif8vfdb/python3-inflect_7.3.1-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 sensible-utils all 0.0.24 [24.8 kB] Fetched 24.8 kB in 0s (1399 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp5jou7co1/sensible-utils_0.0.24_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 python3-setuptools all 75.8.0-1 [724 kB] Fetched 724 kB in 0s (23.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp5rsr9txn/python3-setuptools_75.8.0-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 libpog-dev all 0.5.3-3 [29.7 kB] Fetched 29.7 kB in 0s (284 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6rmghoaw/libpog-dev_0.5.3-3_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 netbase all 6.4 [12.8 kB] Fetched 12.8 kB in 0s (770 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp4yd75l7o/netbase_6.4_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libkeyutils1 arm64 1.6.3-4 [9352 B] Fetched 9352 B in 0s (505 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp41dxg3gf/libkeyutils1_1.6.3-4_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libnghttp2-14 arm64 1.64.0-1 [71.3 kB] Fetched 71.3 kB in 0s (4078 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp5t2pbx8h/libnghttp2-14_1.64.0-1_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 libxxhash0 arm64 0.8.3-2 [22.3 kB] Fetched 22.3 kB in 0s (1331 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjon1y07t/libxxhash0_0.8.3-2_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libk5crypto3 arm64 1.21.3-4 [81.5 kB] Fetched 81.5 kB in 0s (4474 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp3tomq1ha/libk5crypto3_1.21.3-4_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 libtasn1-6 arm64 4.20.0-2 [47.3 kB] Fetched 47.3 kB in 0s (2720 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpnbqf33z6/libtasn1-6_4.20.0-2_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libjsoncpp26 arm64 1.9.6-3 [72.9 kB] Fetched 72.9 kB in 0s (3979 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp7pamt95v/libjsoncpp26_1.9.6-3_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libudev1 arm64 257.4-1 [141 kB] Fetched 141 kB in 0s (8354 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6ri57umc/libudev1_257.4-1_arm64.deb' Downloading dependency 1 of 230: libreadline8t64:arm64=8.2-6 Downloading dependency 2 of 230: libjs-jquery:arm64=3.6.1+dfsg+~3.5.14-1 Downloading dependency 3 of 230: libbinutils:arm64=2.44-3 Downloading dependency 4 of 230: binutils-common:arm64=2.44-3 Downloading dependency 5 of 230: libperl5.40:arm64=5.40.1-2 Downloading dependency 6 of 230: rpcsvc-proto:arm64=1.4.3-1+b1 Downloading dependency 7 of 230: libicu72:arm64=72.1-6 Downloading dependency 8 of 230: libpam-modules-bin:arm64=1.7.0-3 Downloading dependency 9 of 230: gcc-14-aarch64-linux-gnu:arm64=14.2.0-17 Downloading dependency 10 of 230: libctf-nobfd0:arm64=2.44-3 Downloading dependency 11 of 230: libjansson4:arm64=2.14-2+b3 Downloading dependency 12 of 230: libcap2:arm64=1:2.75-1 Downloading dependency 13 of 230: python3-minimal:arm64=3.13.2-2 Downloading dependency 14 of 230: libssh2-1t64:arm64=1.11.1-1 Downloading dependency 15 of 230: diffutils:arm64=1:3.10-2 Downloading dependency 16 of 230: libseccomp2:arm64=2.5.5-2+b1 Downloading dependency 17 of 230: python3-pkg-resources:arm64=75.8.0-1 Downloading dependency 18 of 230: libgnutls30t64:arm64=3.8.9-2 Downloading dependency 19 of 230: dh-python:arm64=6.20250308 Downloading dependency 20 of 230: libyaml-0-2:arm64=0.2.5-2 Downloading dependency 21 of 230: cpp-14:arm64=14.2.0-17 Downloading dependency 22 of 230: libuchardet0:arm64=0.0.8-1+b2 Downloading dependency 23 of 230: g++:arm64=4:14.2.0-1 Downloading dependency 24 of 230: zlib1g-dev:arm64=1:1.3.dfsg+really1.3.1-1+b1 Downloading dependency 25 of 230: gcc-14:arm64=14.2.0-17 Downloading dependency 26 of 230: libselinux1:arm64=3.8-4 Downloading dependency 27 of 230: file:arm64=1:5.45-3+b1 Downloading dependency 28 of 230: libpython3.13-dev:arm64=3.13.2-1 Downloading dependency 29 of 230: python3:arm64=3.13.2-2 Downloading dependency 30 of 230: libstdc++6:arm64=14.2.0-17 Downloading dependency 31 of 230: bsdutils:arm64=1:2.40.4-5 Downloading dependency 32 of 230: pkgconf-bin:arm64=1.8.1-4 Downloading dependency 33 of 230: liblsan0:arm64=14.2.0-17 Downloading dependency 34 of 230: googletest:arm64=1.16.0-1 Downloading dependency 35 of 230: libgcc-s1:arm64=14.2.0-17 Downloading dependency 36 of 230: python3-typeguard:arm64=4.4.2-1 Downloading dependency 37 of 230: base-passwd:arm64=3.6.6 Downloading dependency 38 of 230: libgtest-dev:arm64=1.16.0-1 Downloading dependency 39 of 230: make:arm64=4.4.1-1 Downloading dependency 40 of 230: init-system-helpers:arm64=1.68 Downloading dependency 41 of 230: ncurses-bin:arm64=6.5+20250216-2 Downloading dependency 42 of 230: libncursesw6:arm64=6.5+20250216-2 Downloading dependency 43 of 230: libpam-runtime:arm64=1.7.0-3 Downloading dependency 44 of 230: libzstd1:arm64=1.5.6+dfsg-2 Downloading dependency 45 of 230: libsmartcols1:arm64=2.40.4-5 Downloading dependency 46 of 230: man-db:arm64=2.13.0-1 Downloading dependency 47 of 230: libpython3.13-stdlib:arm64=3.13.2-1 Downloading dependency 48 of 230: dwz:arm64=0.15-1+b1 Downloading dependency 49 of 230: libhwasan0:arm64=14.2.0-17 Downloading dependency 50 of 230: libcap-ng0:arm64=0.8.5-4+b1 Downloading dependency 51 of 230: libpython3.13:arm64=3.13.2-1 Downloading dependency 52 of 230: pkg-kde-tools:arm64=0.18.12 Downloading dependency 53 of 230: libatomic1:arm64=14.2.0-17 Downloading dependency 54 of 230: autoconf:arm64=2.72-3 Downloading dependency 55 of 230: libpython3-stdlib:arm64=3.13.2-2 Downloading dependency 56 of 230: libc-dev-bin:arm64=2.41-4 Downloading dependency 57 of 230: libuv1t64:arm64=1.50.0-2 Downloading dependency 58 of 230: libtinfo6:arm64=6.5+20250216-2 Downloading dependency 59 of 230: libgomp1:arm64=14.2.0-17 Downloading dependency 60 of 230: libdebconfclient0:arm64=0.277 Downloading dependency 61 of 230: libpam-modules:arm64=1.7.0-3 Downloading dependency 62 of 230: libubsan1:arm64=14.2.0-17 Downloading dependency 63 of 230: g++-aarch64-linux-gnu:arm64=4:14.2.0-1 Downloading dependency 64 of 230: liblzma5:arm64=5.6.4-1 Downloading dependency 65 of 230: libproc2-0:arm64=2:4.0.4-7 Downloading dependency 66 of 230: autopoint:arm64=0.23.1-1 Downloading dependency 67 of 230: debconf:arm64=1.5.90 Downloading dependency 68 of 230: cpp-aarch64-linux-gnu:arm64=4:14.2.0-1 Downloading dependency 69 of 230: libexpat1-dev:arm64=2.6.4-1 Downloading dependency 70 of 230: cpp:arm64=4:14.2.0-1 Downloading dependency 71 of 230: libsqlite3-0:arm64=3.46.1-2 Downloading dependency 72 of 230: libnghttp3-9:arm64=1.8.0-1 Downloading dependency 73 of 230: python3.13-dev:arm64=3.13.2-1 Downloading dependency 74 of 230: libfmt10:arm64=10.1.1+ds1-4 Downloading dependency 75 of 230: sed:arm64=4.9-2+b1 Downloading dependency 76 of 230: perl-modules-5.40:arm64=5.40.1-2 Downloading dependency 77 of 230: libdb5.3t64:arm64=5.3.28+dfsg2-9 Downloading dependency 78 of 230: libbz2-1.0:arm64=1.0.8-6 Downloading dependency 79 of 230: libc-bin:arm64=2.41-4 Downloading dependency 80 of 230: readline-common:arm64=8.2-6 Downloading dependency 81 of 230: po-debconf:arm64=1.0.21+nmu1 Downloading dependency 82 of 230: libgprofng0:arm64=2.44-3 Downloading dependency 83 of 230: gcc-aarch64-linux-gnu:arm64=4:14.2.0-1 Downloading dependency 84 of 230: libc6-dev:arm64=2.41-4 Downloading dependency 85 of 230: libaudit-common:arm64=1:4.0.2-2 Downloading dependency 86 of 230: libhogweed6t64:arm64=3.10.1-1 Downloading dependency 87 of 230: libjs-underscore:arm64=1.13.4~dfsg+~1.11.4-3 Downloading dependency 88 of 230: libsasl2-2:arm64=2.1.28+dfsg1-9 Downloading dependency 89 of 230: bash:arm64=5.2.37-1.1 Downloading dependency 90 of 230: libblkid1:arm64=2.40.4-5 Downloading dependency 91 of 230: libpipeline1:arm64=1.5.8-1 Downloading dependency 92 of 230: libsframe1:arm64=2.44-3 Downloading dependency 93 of 230: libitm1:arm64=14.2.0-17 Downloading dependency 94 of 230: libmagic-mgc:arm64=1:5.45-3+b1 Downloading dependency 95 of 230: procps:arm64=2:4.0.4-7 Downloading dependency 96 of 230: libjs-sphinxdoc:arm64=8.1.3-5 Downloading dependency 97 of 230: libfmt-dev:arm64=10.1.1+ds1-4 Downloading dependency 98 of 230: linux-libc-dev:arm64=6.12.17-1 Downloading dependency 99 of 230: python3-zipp:arm64=3.21.0-1 Downloading dependency 100 of 230: libpython3.13-minimal:arm64=3.13.2-1 Downloading dependency 101 of 230: libarchive-zip-perl:arm64=1.68-1 Downloading dependency 102 of 230: sysvinit-utils:arm64=3.14-3 Downloading dependency 103 of 230: python3-more-itertools:arm64=10.6.0-1 Downloading dependency 104 of 230: libaudit1:arm64=1:4.0.2-2+b2 Downloading dependency 105 of 230: libabsl20240722:arm64=20240722.0-1.5 Downloading dependency 106 of 230: g++-14:arm64=14.2.0-17 Downloading dependency 107 of 230: python3-dev:arm64=3.13.2-2 Downloading dependency 108 of 230: build-essential:arm64=12.12 Downloading dependency 109 of 230: libcom-err2:arm64=1.47.2-1 Downloading dependency 110 of 230: libcurl4t64:arm64=8.12.1-3 Downloading dependency 111 of 230: libexpat1:arm64=2.6.4-1 Downloading dependency 112 of 230: libssl3t64:arm64=3.4.1-1 Downloading dependency 113 of 230: xz-utils:arm64=5.6.4-1 Downloading dependency 114 of 230: libattr1:arm64=1:2.5.2-3 Downloading dependency 115 of 230: base-files:arm64=13.7 Downloading dependency 116 of 230: m4:arm64=1.4.19-7 Downloading dependency 117 of 230: libxml2:arm64=2.12.7+dfsg+really2.9.14-0.2+b2 Downloading dependency 118 of 230: python3-autocommand:arm64=2.2.2-3 Downloading dependency 119 of 230: libsystemd0:arm64=257.4-1 Downloading dependency 120 of 230: python3-inflect:arm64=7.3.1-2 Downloading dependency 121 of 230: sensible-utils:arm64=0.0.24 Downloading dependency 122 of 230: python3-setuptools:arm64=75.8.0-1 Downloading dependency 123 of 230: libpog-dev:arm64=0.5.3-3 Downloading dependency 124 of 230: netbase:arm64=6.4 Downloading dependency 125 of 230: libkeyutils1:arm64=1.6.3-4 Downloading dependency 126 of 230: libnghttp2-14:arm64=1.64.0-1 Downloading dependency 127 of 230: libxxhash0:arm64=0.8.3-2 Downloading dependency 128 of 230: libk5crypto3:arm64=1.21.3-4 Downloading dependency 129 of 230: libtasn1-6:arm64=4.20.0-2 Downloading dependency 130 of 230: libjsoncpp26:arm64=1.9.6-3 Downloading dependency 131 of 230: libudev1:arm64=257.4-1 Downloading dependency 132 of 230: liblz4-1:arm64=1.10.0-4Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 liblz4-1 arm64 1.10.0-4 [60.0 kB] Fetched 60.0 kB in 0s (2536 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpg4nea0i3/liblz4-1_1.10.0-4_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 libbrotli1 arm64 1.1.0-2+b7 [308 kB] Fetched 308 kB in 0s (6337 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpfb4mhc5z/libbrotli1_1.1.0-2+b7_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 dpkg-dev all 1.22.18 [1338 kB] Fetched 1338 kB in 0s (44.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmppjqppiy3/dpkg-dev_1.22.18_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libuuid1 arm64 2.40.4-5 [36.4 kB] Fetched 36.4 kB in 0s (2101 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpns7f8_za/libuuid1_2.40.4-5_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 gzip arm64 1.13-1 [135 kB] Fetched 135 kB in 0s (5410 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpey25xbyd/gzip_1.13-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 g++-14-aarch64-linux-gnu arm64 14.2.0-17 [10.1 MB] Fetched 10.1 MB in 0s (67.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpxd0fcmss/g++-14-aarch64-linux-gnu_14.2.0-17_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 pybind11-dev all 2.13.6-2 [205 kB] Fetched 205 kB in 0s (8046 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpz7363nw8/pybind11-dev_2.13.6-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 binutils-aarch64-linux-gnu arm64 2.44-3 [820 kB] Fetched 820 kB in 0s (32.9 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpvy_67f3k/binutils-aarch64-linux-gnu_2.44-3_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 gcc arm64 4:14.2.0-1 [5136 B] Fetched 5136 B in 0s (291 kB/s) dpkg-name: info: moved 'gcc_4%3a14.2.0-1_arm64.deb' to '/srv/rebuilderd/tmp/tmp4p_628n1/gcc_14.2.0-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 python3-yaml arm64 6.0.2-1+b2 [122 kB] Fetched 122 kB in 0s (6066 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpfn9a29u3/python3-yaml_6.0.2-1+b2_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 python3.13 arm64 3.13.2-1 [745 kB] Fetched 745 kB in 0s (21.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp5r_reasj/python3.13_3.13.2-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 util-linux arm64 2.40.4-5 [1166 kB] Fetched 1166 kB in 0s (43.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpgcogzidl/util-linux_2.40.4-5_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libmpc3 arm64 1.3.1-1+b3 [50.5 kB] Fetched 50.5 kB in 0s (2149 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmps199mpyr/libmpc3_1.3.1-1+b3_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 automake all 1:1.17-3 [862 kB] Fetched 862 kB in 0s (35.5 MB/s) dpkg-name: info: moved 'automake_1%3a1.17-3_all.deb' to '/srv/rebuilderd/tmp/tmp7o4ohftq/automake_1.17-3_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libunistring5 arm64 1.3-1 [449 kB] Fetched 449 kB in 0s (19.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmprrnrjzq9/libunistring5_1.3-1_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 libisl23 arm64 0.27-1 [601 kB] Fetched 601 kB in 0s (26.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmppczi9slq/libisl23_0.27-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 bsdextrautils arm64 2.40.4-5 [92.0 kB] Fetched 92.0 kB in 0s (5042 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjh5z6yga/bsdextrautils_2.40.4-5_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 gcc-14-base arm64 14.2.0-17 [49.1 kB] Fetched 49.1 kB in 0s (2077 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp037gskit/gcc-14-base_14.2.0-17_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libp11-kit0 arm64 0.25.5-3 [409 kB] Fetched 409 kB in 0s (19.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp9sz1cxu1/libp11-kit0_0.25.5-3_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 tar arm64 1.35+dfsg-3.1 [802 kB] Fetched 802 kB in 0s (33.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpd9rwjpbk/tar_1.35+dfsg-3.1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libtool all 2.5.4-4 [539 kB] Fetched 539 kB in 0s (24.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpof959giv/libtool_2.5.4-4_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libffi8 arm64 3.4.7-1 [21.2 kB] Fetched 21.2 kB in 0s (1099 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpixal19b_/libffi8_3.4.7-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 debhelper all 13.24.1 [920 kB] Fetched 920 kB in 0s (36.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6z7zxn0w/debhelper_13.24.1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libc6 arm64 2.41-4 [2484 kB] Fetched 2484 kB in 0s (14.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0tnow48p/libc6_2.41-4_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libdebhelper-perl all 13.24.1 [90.9 kB] Fetched 90.9 kB in 0s (883 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpvh2u3tup/libdebhelper-perl_13.24.1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 coreutils arm64 9.5-1+b1 [2858 kB] Fetched 2858 kB in 0s (11.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmplzyygqsk/coreutils_9.5-1+b1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libcrypt-dev arm64 1:4.4.38-1 [123 kB] Fetched 123 kB in 0s (6449 kB/s) dpkg-name: info: moved 'libcrypt-dev_1%3a4.4.38-1_arm64.deb' to '/srv/rebuilderd/tmp/tmp9nbg0w3_/libcrypt-dev_4.4.38-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 dh-autoreconf all 20 [17.1 kB] Fetched 17.1 kB in 0s (964 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0k7e18dy/dh-autoreconf_20_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 dpkg arm64 1.22.18 [1529 kB] Fetched 1529 kB in 0s (50.9 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmputwni6d0/dpkg_1.22.18_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libdpkg-perl all 1.22.18 [649 kB] Fetched 649 kB in 0s (28.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmphtd7ae1r/libdpkg-perl_1.22.18_all.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 pkgconf arm64 1.8.1-4 [26.1 kB] Fetched 26.1 kB in 0s (1357 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmprp8sk6wx/pkgconf_1.8.1-4_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 nlohmann-json3-dev all 3.11.3-2 [262 kB] Fetched 262 kB in 0s (12.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmppaz341uv/nlohmann-json3-dev_3.11.3-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 cpp-14-aarch64-linux-gnu arm64 14.2.0-17 [9169 kB] Fetched 9169 kB in 0s (58.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpopg04o4w/cpp-14-aarch64-linux-gnu_14.2.0-17_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 gettext-base arm64 0.23.1-1 [241 kB] Fetched 241 kB in 0s (9247 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmphmpt1tlg/gettext-base_0.23.1-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libarchive13t64 arm64 3.7.4-1.1 [323 kB] Fetched 323 kB in 0s (15.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpfr2qpuw6/libarchive13t64_3.7.4-1.1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libgssapi-krb5-2 arm64 1.21.3-4 [127 kB] Fetched 127 kB in 0s (6839 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpastt3od9/libgssapi-krb5-2_1.21.3-4_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 perl arm64 5.40.1-2 [267 kB] Fetched 267 kB in 0s (13.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpcjlv94g_/perl_5.40.1-2_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 python3-typing-extensions all 4.12.2-2 [73.0 kB] Fetched 73.0 kB in 0s (3997 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpfgvykbul/python3-typing-extensions_4.12.2-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 media-types all 13.0.0 [29.3 kB] Fetched 29.3 kB in 0s (1635 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpjut2gm13/media-types_13.0.0_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libmagic1t64 arm64 1:5.45-3+b1 [102 kB] Fetched 102 kB in 0s (5593 kB/s) dpkg-name: info: moved 'libmagic1t64_1%3a5.45-3+b1_arm64.deb' to '/srv/rebuilderd/tmp/tmpe7n9lue2/libmagic1t64_5.45-3+b1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libcc1-0 arm64 14.2.0-17 [42.2 kB] Fetched 42.2 kB in 0s (2271 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpcxbnwng3/libcc1-0_14.2.0-17_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 dh-strip-nondeterminism all 1.14.1-2 [8620 B] Fetched 8620 B in 0s (486 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpapc5xh4n/dh-strip-nondeterminism_1.14.1-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libelf1t64 arm64 0.192-4 [189 kB] Fetched 189 kB in 0s (9437 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpj2v4gxcb/libelf1t64_0.192-4_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libkrb5support0 arm64 1.21.3-4 [32.2 kB] Fetched 32.2 kB in 0s (1815 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmptbewxlgb/libkrb5support0_1.21.3-4_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libgmp10 arm64 2:6.3.0+dfsg-3 [535 kB] Fetched 535 kB in 0s (21.0 MB/s) dpkg-name: info: moved 'libgmp10_2%3a6.3.0+dfsg-3_arm64.deb' to '/srv/rebuilderd/tmp/tmp2khsu9zb/libgmp10_6.3.0+dfsg-3_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 findutils arm64 4.10.0-3 [696 kB] Fetched 696 kB in 0s (29.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpu3th9ex5/findutils_4.10.0-3_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libmount1 arm64 2.40.4-5 [191 kB] Fetched 191 kB in 0s (9602 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpf1t492eo/libmount1_2.40.4-5_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 libpkgconf3 arm64 1.8.1-4 [35.3 kB] Fetched 35.3 kB in 0s (2039 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpqwnm6um4/libpkgconf3_1.8.1-4_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 intltool-debian all 0.35.0+20060710.6 [22.9 kB] Fetched 22.9 kB in 0s (1249 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp655_mesw/intltool-debian_0.35.0+20060710.6_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libldap2 arm64 2.6.9+dfsg-1 [179 kB] Fetched 179 kB in 0s (8991 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpadqydeof/libldap2_2.6.9+dfsg-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 tzdata all 2025a-2 [259 kB] Fetched 259 kB in 0s (12.9 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpq0oespw0/tzdata_2025a-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 cmake arm64 3.31.6-1 [9912 kB] Fetched 9912 kB in 0s (92.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp98zs468n/cmake_3.31.6-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 python3-debian all 1.0.0 [120 kB] Fetched 120 kB in 0s (317 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpxmcp1mhi/python3-debian_1.0.0_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libctf0 arm64 2.44-3 [84.2 kB] Fetched 84.2 kB in 0s (4735 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpiwf8hyml/libctf0_2.44-3_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libfile-stripnondeterminism-perl all 1.14.1-2 [19.7 kB] Fetched 19.7 kB in 0s (1081 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpj7t41uwe/libfile-stripnondeterminism-perl_1.14.1-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libmpfr6 arm64 4.2.1-1+b2 [680 kB] Fetched 680 kB in 0s (29.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpzjo6csd8/libmpfr6_4.2.1-1+b2_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 binutils arm64 2.44-3 [262 kB] Fetched 262 kB in 0s (13.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp31jv4w0u/binutils_2.44-3_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 librhash1 arm64 1.4.5-1 [129 kB] Fetched 129 kB in 0s (6855 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp7sy4p4uv/librhash1_1.4.5-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libpython3-dev arm64 3.13.2-2 [10.3 kB] Fetched 10.3 kB in 0s (543 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpswnvz43z/libpython3-dev_3.13.2-2_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 python3-jaraco.context all 6.0.1-1 [8276 B] Fetched 8276 B in 0s (457 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmphq_1oray/python3-jaraco.context_6.0.1-1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libpcre2-8-0 arm64 10.45-1 [262 kB] Fetched 262 kB in 0s (13.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp5n6hkhs3/libpcre2-8-0_10.45-1_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 zlib1g arm64 1:1.3.dfsg+really1.3.1-1+b1 [85.1 kB] Fetched 85.1 kB in 0s (4713 kB/s) dpkg-name: info: moved 'zlib1g_1%3a1.3.dfsg+really1.3.1-1+b1_arm64.deb' to '/srv/rebuilderd/tmp/tmp4_384cbm/zlib1g_1.3.dfsg+really1.3.1-1+b1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 python3.13-minimal arm64 3.13.2-1 [1997 kB] Fetched 1997 kB in 0s (58.5 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpigj5_jgl/python3.13-minimal_3.13.2-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libgcc-14-dev arm64 14.2.0-17 [2362 kB] Fetched 2362 kB in 0s (62.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp_hiyvh5y/libgcc-14-dev_14.2.0-17_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 bzip2 arm64 1.0.8-6 [39.5 kB] Fetched 39.5 kB in 0s (2173 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpv6d66l7e/bzip2_1.0.8-6_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 librtmp1 arm64 2.4+20151223.gitfa8646d.1-2+b5 [56.8 kB] Fetched 56.8 kB in 0s (3204 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpykvuhaho/librtmp1_2.4+20151223.gitfa8646d.1-2+b5_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libsasl2-modules-db arm64 2.1.28+dfsg1-9 [20.1 kB] Fetched 20.1 kB in 0s (1158 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpif_cdui2/libsasl2-modules-db_2.1.28+dfsg1-9_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libasan8 arm64 14.2.0-17 [2580 kB] Fetched 2580 kB in 0s (43.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmplvomtpzq/libasan8_14.2.0-17_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 cmake-data all 3.31.6-1 [2268 kB] Fetched 2268 kB in 0s (63.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp4x_nhj5i/cmake-data_3.31.6-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 libpsl5t64 arm64 0.21.2-1.1+b1 [57.1 kB] Fetched 57.1 kB in 0s (2833 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmplv8zoh5p/libpsl5t64_0.21.2-1.1+b1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 patch arm64 2.7.6-7+b1 [118 kB] Fetched 118 kB in 0s (6512 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp0oycouyi/patch_2.7.6-7+b1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 gettext arm64 0.23.1-1 [1610 kB] Fetched 1610 kB in 0s (52.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpy6whwxzt/gettext_0.23.1-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 groff-base arm64 1.23.0-7 [1129 kB] Fetched 1129 kB in 0s (41.7 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpdoypynuc/groff-base_1.23.0-7_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 libacl1 arm64 2.3.2-2+b1 [32.2 kB] Fetched 32.2 kB in 0s (1825 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmprtcc_77q/libacl1_2.3.2-2+b1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libgdbm6t64 arm64 1.24-2 [74.0 kB] Fetched 74.0 kB in 0s (4140 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpixxsc36a/libgdbm6t64_1.24-2_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 python3-jaraco.functools all 4.1.0-1 [12.0 kB] Fetched 12.0 kB in 0s (633 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp_bbngmcn/python3-jaraco.functools_4.1.0-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 libmd0 arm64 1.1.0-2+b1 [33.7 kB] Fetched 33.7 kB in 0s (1908 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpnzccawg5/libmd0_1.1.0-2+b1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libre2-dev arm64 20240702-3+b1 [212 kB] Fetched 212 kB in 0s (9851 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp4znkksf0/libre2-dev_20240702-3+b1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libpam0g arm64 1.7.0-3 [68.6 kB] Fetched 68.6 kB in 0s (3892 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpi4ecc_ri/libpam0g_1.7.0-3_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libtsan2 arm64 14.2.0-17 [2385 kB] Fetched 2385 kB in 0s (65.1 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmptzk066hu/libtsan2_14.2.0-17_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 hostname arm64 3.25 [10.8 kB] Fetched 10.8 kB in 0s (584 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpyfe3cle_/hostname_3.25_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 python3-jaraco.text all 4.0.0-1 [11.4 kB] Fetched 11.4 kB in 0s (645 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp4stob3q8/python3-jaraco.text_4.0.0-1_all.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 mawk arm64 1.3.4.20250131-1 [134 kB] Fetched 134 kB in 0s (7039 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpk7ygdeb2/mawk_1.3.4.20250131-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libre2-11 arm64 20240702-3+b1 [149 kB] Fetched 149 kB in 0s (8201 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpf8cy59x7/libre2-11_20240702-3+b1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 ncurses-base all 6.5+20250216-2 [273 kB] Fetched 273 kB in 0s (14.2 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpceotkbwv/ncurses-base_6.5+20250216-2_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libkrb5-3 arm64 1.21.3-4 [308 kB] Fetched 308 kB in 0s (14.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpzg_dqe_e/libkrb5-3_1.21.3-4_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 perl-base arm64 5.40.1-2 [1525 kB] Fetched 1525 kB in 0s (52.3 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp6yp1et1i/perl-base_5.40.1-2_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libabsl-dev arm64 20240722.0-1.5 [1222 kB] Fetched 1222 kB in 0s (45.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp1_d_rpqg/libabsl-dev_20240722.0-1.5_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 debianutils arm64 5.21 [92.1 kB] Fetched 92.1 kB in 0s (5046 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp2zoupbkg/debianutils_5.21_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libidn2-0 arm64 2.3.8-1 [107 kB] Fetched 107 kB in 0s (5689 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpifuq5bcc/libidn2-0_2.3.8-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libcrypt1 arm64 1:4.4.38-1 [91.8 kB] Fetched 91.8 kB in 0s (5125 kB/s) dpkg-name: info: moved 'libcrypt1_1%3a4.4.38-1_arm64.deb' to '/srv/rebuilderd/tmp/tmp7atr7qyw/libcrypt1_4.4.38-1_arm64.deb' Get:1 http://deb.debian.org/debian unstable/main arm64 dash arm64 0.5.12-12 [95.6 kB] Fetched 95.6 kB in 0s (5018 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmphlab85tc/dash_0.5.12-12_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 openssl-provider-legacy arm64 3.4.1-1 [300 kB] Fetched 300 kB in 0s (14.4 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpnm98wk22/openssl-provider-legacy_3.4.1-1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 grep arm64 3.11-4+b1 [426 kB] Fetched 426 kB in 0s (20.8 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpvk22qhdg/grep_3.11-4+b1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 python3-charset-normalizer arm64 3.4.1-1+b1 [119 kB] Fetched 119 kB in 0s (7150 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmp76ui84xr/python3-charset-normalizer_3.4.1-1+b1_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libgdbm-compat4t64 arm64 1.24-2 [50.3 kB] Fetched 50.3 kB in 0s (2853 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpv8ciwj90/libgdbm-compat4t64_1.24-2_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libstdc++-14-dev arm64 14.2.0-17 [2292 kB] Fetched 2292 kB in 0s (62.0 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmptv9wi1h4/libstdc++-14-dev_14.2.0-17_arm64.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 autotools-dev all 20220109.1 [51.6 kB] Fetched 51.6 kB in 0s (2866 kB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpod3iz0ob/autotools-dev_20220109.1_all.deb' Get:1 http://snapshot.debian.org/archive/debian/20250310T101857Z sid/main arm64 libnettle8t64 arm64 3.10.1-1 [311 kB] Fetched 311 kB in 0s (15.6 MB/s) dpkg-name: warning: skipping '/srv/rebuilderd/tmp/tmpwf6m443e/libnettle8t64_3.10.1-1_arm64.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/tmpqs_rqx_v/cache directory, not in ".." as indicated by the message above! I: automatically chosen mode: unshare I: chroot architecture arm64 is equal to the host's architecture I: using /srv/rebuilderd/tmp/mmdebstrap.I_1y9oS4JC as tempdir I: running --setup-hook directly: /usr/share/mmdebstrap/hooks/maybe-merged-usr/setup00.sh /srv/rebuilderd/tmp/mmdebstrap.I_1y9oS4JC 127.0.0.1 - - [27/Nov/2025 10:55:11] code 404, message File not found 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./InRelease HTTP/1.1" 404 - Ign:1 http://localhost:37483 ./ InRelease 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./Release HTTP/1.1" 200 - Get:2 http://localhost:37483 ./ Release [462 B] 127.0.0.1 - - [27/Nov/2025 10:55:11] code 404, message File not found 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./Release.gpg HTTP/1.1" 404 - Ign:3 http://localhost:37483 ./ Release.gpg 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./Packages HTTP/1.1" 200 - Get:4 http://localhost:37483 ./ Packages [283 kB] Fetched 283 kB in 0s (4544 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 - - [27/Nov/2025 10:55:11] "GET /./gcc-14-base_14.2.0-17_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libc6_2.41-4_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libgcc-s1_14.2.0-17_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./mawk_1.3.4.20250131-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./base-files_13.7_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libtinfo6_6.5%2b20250216-2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./debianutils_5.21_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./bash_5.2.37-1.1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libcap2_2.75-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libsystemd0_257.4-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./bsdutils_2.40.4-5_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libacl1_2.3.2-2%2bb1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libattr1_2.5.2-3_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libgmp10_6.3.0%2bdfsg-3_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libpcre2-8-0_10.45-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libselinux1_3.8-4_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libzstd1_1.5.6%2bdfsg-2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./zlib1g_1.3.dfsg%2breally1.3.1-1%2bb1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libssl3t64_3.4.1-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./openssl-provider-legacy_3.4.1-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./coreutils_9.5-1%2bb1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./dash_0.5.12-12_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./diffutils_3.10-2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libbz2-1.0_1.0.8-6_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./liblzma5_5.6.4-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libmd0_1.1.0-2%2bb1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./tar_1.35%2bdfsg-3.1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./dpkg_1.22.18_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./findutils_4.10.0-3_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./grep_3.11-4%2bb1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./gzip_1.13-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./hostname_3.25_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./ncurses-bin_6.5%2b20250216-2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libcrypt1_4.4.38-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./perl-base_5.40.1-2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./sed_4.9-2%2bb1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libaudit-common_4.0.2-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libcap-ng0_0.8.5-4%2bb1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libaudit1_4.0.2-2%2bb2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libdb5.3t64_5.3.28%2bdfsg2-9_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./debconf_1.5.90_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libpam0g_1.7.0-3_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libpam-modules-bin_1.7.0-3_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libpam-modules_1.7.0-3_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libpam-runtime_1.7.0-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libblkid1_2.40.4-5_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libmount1_2.40.4-5_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libsmartcols1_2.40.4-5_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libudev1_257.4-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libuuid1_2.40.4-5_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./util-linux_2.40.4-5_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libdebconfclient0_0.277_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./base-passwd_3.6.6_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./init-system-helpers_1.68_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./libc-bin_2.41-4_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./ncurses-base_6.5%2b20250216-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:11] "GET /./sysvinit-utils_3.14-3_arm64.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.I_1y9oS4JC 127.0.0.1 - - [27/Nov/2025 10:55:15] code 404, message File not found 127.0.0.1 - - [27/Nov/2025 10:55:15] "GET /./InRelease HTTP/1.1" 404 - Ign:1 http://localhost:37483 ./ InRelease 127.0.0.1 - - [27/Nov/2025 10:55:15] "GET /./Release HTTP/1.1" 304 - Hit:2 http://localhost:37483 ./ Release 127.0.0.1 - - [27/Nov/2025 10:55:15] code 404, message File not found 127.0.0.1 - - [27/Nov/2025 10:55:15] "GET /./Release.gpg HTTP/1.1" 404 - Ign:3 http://localhost:37483 ./ 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.I_1y9oS4JC 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 - - [27/Nov/2025 10:55:23] "GET /./libpython3.13-minimal_3.13.2-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libexpat1_2.6.4-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./python3.13-minimal_3.13.2-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./python3-minimal_3.13.2-2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./media-types_13.0.0_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./netbase_6.4_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./tzdata_2025a-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libffi8_3.4.7-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libncursesw6_6.5%2b20250216-2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./readline-common_8.2-6_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libreadline8t64_8.2-6_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libsqlite3-0_3.46.1-2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libpython3.13-stdlib_3.13.2-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./python3.13_3.13.2-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libpython3-stdlib_3.13.2-2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./python3_3.13.2-2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./sensible-utils_0.0.24_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libstdc%2b%2b6_14.2.0-17_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libuchardet0_0.0.8-1%2bb2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./groff-base_1.23.0-7_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./bsdextrautils_2.40.4-5_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libgdbm6t64_1.24-2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libpipeline1_1.5.8-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libseccomp2_2.5.5-2%2bb1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./man-db_2.13.0-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libproc2-0_4.0.4-7_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./procps_4.0.4-7_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./bzip2_1.0.8-6_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libmagic-mgc_5.45-3%2bb1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libmagic1t64_5.45-3%2bb1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./file_5.45-3%2bb1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./gettext-base_0.23.1-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./perl-modules-5.40_5.40.1-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libgdbm-compat4t64_1.24-2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libperl5.40_5.40.1-2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./perl_5.40.1-2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./xz-utils_5.6.4-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./m4_1.4.19-7_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./autoconf_2.72-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./autotools-dev_20220109.1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./automake_1.17-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./autopoint_0.23.1-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libsframe1_2.44-3_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./binutils-common_2.44-3_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libbinutils_2.44-3_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libgprofng0_2.44-3_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libctf-nobfd0_2.44-3_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libctf0_2.44-3_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libjansson4_2.14-2%2bb3_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./binutils-aarch64-linux-gnu_2.44-3_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./binutils_2.44-3_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libc-dev-bin_2.41-4_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./linux-libc-dev_6.12.17-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libcrypt-dev_4.4.38-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./rpcsvc-proto_1.4.3-1%2bb1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libc6-dev_2.41-4_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libisl23_0.27-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libmpfr6_4.2.1-1%2bb2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libmpc3_1.3.1-1%2bb3_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./cpp-14-aarch64-linux-gnu_14.2.0-17_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./cpp-14_14.2.0-17_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./cpp-aarch64-linux-gnu_14.2.0-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./cpp_14.2.0-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libcc1-0_14.2.0-17_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libgomp1_14.2.0-17_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libitm1_14.2.0-17_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libatomic1_14.2.0-17_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libasan8_14.2.0-17_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./liblsan0_14.2.0-17_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libtsan2_14.2.0-17_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libubsan1_14.2.0-17_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libhwasan0_14.2.0-17_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libgcc-14-dev_14.2.0-17_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./gcc-14-aarch64-linux-gnu_14.2.0-17_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./gcc-14_14.2.0-17_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./gcc-aarch64-linux-gnu_14.2.0-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./gcc_14.2.0-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libstdc%2b%2b-14-dev_14.2.0-17_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./g%2b%2b-14-aarch64-linux-gnu_14.2.0-17_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./g%2b%2b-14_14.2.0-17_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./g%2b%2b-aarch64-linux-gnu_14.2.0-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./g%2b%2b_14.2.0-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./make_4.4.1-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./libdpkg-perl_1.22.18_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./patch_2.7.6-7%2bb1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:23] "GET /./dpkg-dev_1.22.18_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./build-essential_12.12_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./cmake-data_3.31.6-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libxxhash0_0.8.3-2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./liblz4-1_1.10.0-4_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libnettle8t64_3.10.1-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libicu72_72.1-6_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libxml2_2.12.7%2bdfsg%2breally2.9.14-0.2%2bb2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libarchive13t64_3.7.4-1.1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libbrotli1_1.1.0-2%2bb7_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libkrb5support0_1.21.3-4_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libcom-err2_1.47.2-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libk5crypto3_1.21.3-4_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libkeyutils1_1.6.3-4_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libkrb5-3_1.21.3-4_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libgssapi-krb5-2_1.21.3-4_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libunistring5_1.3-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libidn2-0_2.3.8-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libsasl2-modules-db_2.1.28%2bdfsg1-9_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libsasl2-2_2.1.28%2bdfsg1-9_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libldap2_2.6.9%2bdfsg-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libnghttp2-14_1.64.0-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libnghttp3-9_1.8.0-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libpsl5t64_0.21.2-1.1%2bb1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libhogweed6t64_3.10.1-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libp11-kit0_0.25.5-3_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libtasn1-6_4.20.0-2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libgnutls30t64_3.8.9-2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./librtmp1_2.4%2b20151223.gitfa8646d.1-2%2bb5_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libssh2-1t64_1.11.1-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libcurl4t64_8.12.1-3_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libjsoncpp26_1.9.6-3_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./librhash1_1.4.5-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libuv1t64_1.50.0-2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./cmake_3.31.6-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libdebhelper-perl_13.24.1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libtool_2.5.4-4_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./dh-autoreconf_20_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libarchive-zip-perl_1.68-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libfile-stripnondeterminism-perl_1.14.1-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./dh-strip-nondeterminism_1.14.1-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libelf1t64_0.192-4_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./dwz_0.15-1%2bb1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./gettext_0.23.1-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./intltool-debian_0.35.0%2b20060710.6_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./po-debconf_1.0.21%2bnmu1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./debhelper_13.24.1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libjs-jquery_3.6.1%2bdfsg%2b%7e3.5.14-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./python3-autocommand_2.2.2-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./python3-more-itertools_10.6.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./python3-typing-extensions_4.12.2-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./python3-typeguard_4.4.2-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./python3-inflect_7.3.1-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./python3-jaraco.functools_4.1.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./python3-jaraco.text_4.0.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./python3-zipp_3.21.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./python3-setuptools_75.8.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./python3-jaraco.context_6.0.1-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./python3-pkg-resources_75.8.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./dh-python_6.20250308_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libyaml-0-2_0.2.5-2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./zlib1g-dev_1.3.dfsg%2breally1.3.1-1%2bb1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libpython3.13_3.13.2-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libexpat1-dev_2.6.4-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libpython3.13-dev_3.13.2-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libpkgconf3_1.8.1-4_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./pkgconf-bin_1.8.1-4_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./googletest_1.16.0-1_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libgtest-dev_1.16.0-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./python3-charset-normalizer_3.4.1-1%2bb1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./python3-debian_1.0.0_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./python3-yaml_6.0.2-1%2bb2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./pkg-kde-tools_0.18.12_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./python3.13-dev_3.13.2-1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libfmt10_10.1.1%2bds1-4_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libjs-underscore_1.13.4%7edfsg%2b%7e1.11.4-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libjs-sphinxdoc_8.1.3-5_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libfmt-dev_10.1.1%2bds1-4_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libabsl20240722_20240722.0-1.5_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libpython3-dev_3.13.2-2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./python3-dev_3.13.2-2_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libabsl-dev_20240722.0-1.5_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libre2-11_20240702-3%2bb1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libre2-dev_20240702-3%2bb1_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./libpog-dev_0.5.3-3_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./pybind11-dev_2.13.6-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./pkgconf_1.8.1-4_arm64.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./nlohmann-json3-dev_3.11.3-2_all.deb HTTP/1.1" 200 - 127.0.0.1 - - [27/Nov/2025 10:55:24] "GET /./debootsnap-dummy_1.0_all.deb HTTP/1.1" 200 - I: running --customize-hook directly: /srv/rebuilderd/tmp/tmpqs_rqx_v/apt_install.sh /srv/rebuilderd/tmp/mmdebstrap.I_1y9oS4JC Reading package lists... Building dependency tree... Reading state information... libreadline8t64 is already the newest version (8.2-6). libreadline8t64 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. libbinutils is already the newest version (2.44-3). libbinutils set to manually installed. binutils-common is already the newest version (2.44-3). binutils-common set to manually installed. libperl5.40 is already the newest version (5.40.1-2). libperl5.40 set to manually installed. rpcsvc-proto is already the newest version (1.4.3-1+b1). rpcsvc-proto set to manually installed. libicu72 is already the newest version (72.1-6). libicu72 set to manually installed. libpam-modules-bin is already the newest version (1.7.0-3). gcc-14-aarch64-linux-gnu is already the newest version (14.2.0-17). gcc-14-aarch64-linux-gnu set to manually installed. libctf-nobfd0 is already the newest version (2.44-3). libctf-nobfd0 set to manually installed. libjansson4 is already the newest version (2.14-2+b3). libjansson4 set to manually installed. libcap2 is already the newest version (1:2.75-1). python3-minimal is already the newest version (3.13.2-2). python3-minimal set to manually installed. libssh2-1t64 is already the newest version (1.11.1-1). libssh2-1t64 set to manually installed. diffutils is already the newest version (1:3.10-2). libseccomp2 is already the newest version (2.5.5-2+b1). libseccomp2 set to manually installed. python3-pkg-resources is already the newest version (75.8.0-1). python3-pkg-resources set to manually installed. libgnutls30t64 is already the newest version (3.8.9-2). libgnutls30t64 set to manually installed. dh-python is already the newest version (6.20250308). dh-python set to manually installed. libyaml-0-2 is already the newest version (0.2.5-2). libyaml-0-2 set to manually installed. cpp-14 is already the newest version (14.2.0-17). cpp-14 set to manually installed. libuchardet0 is already the newest version (0.0.8-1+b2). libuchardet0 set to manually installed. g++ is already the newest version (4:14.2.0-1). g++ 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. gcc-14 is already the newest version (14.2.0-17). gcc-14 set to manually installed. libselinux1 is already the newest version (3.8-4). file is already the newest version (1:5.45-3+b1). file set to manually installed. libpython3.13-dev is already the newest version (3.13.2-1). libpython3.13-dev set to manually installed. python3 is already the newest version (3.13.2-2). python3 set to manually installed. libstdc++6 is already the newest version (14.2.0-17). libstdc++6 set to manually installed. bsdutils is already the newest version (1:2.40.4-5). pkgconf-bin is already the newest version (1.8.1-4). pkgconf-bin set to manually installed. liblsan0 is already the newest version (14.2.0-17). liblsan0 set to manually installed. googletest is already the newest version (1.16.0-1). googletest set to manually installed. libgcc-s1 is already the newest version (14.2.0-17). python3-typeguard is already the newest version (4.4.2-1). python3-typeguard set to manually installed. base-passwd is already the newest version (3.6.6). libgtest-dev is already the newest version (1.16.0-1). libgtest-dev set to manually installed. make is already the newest version (4.4.1-1). make set to manually installed. init-system-helpers is already the newest version (1.68). ncurses-bin is already the newest version (6.5+20250216-2). libncursesw6 is already the newest version (6.5+20250216-2). libncursesw6 set to manually installed. libpam-runtime is already the newest version (1.7.0-3). libzstd1 is already the newest version (1.5.6+dfsg-2). libsmartcols1 is already the newest version (2.40.4-5). man-db is already the newest version (2.13.0-1). man-db set to manually installed. libpython3.13-stdlib is already the newest version (3.13.2-1). libpython3.13-stdlib set to manually installed. dwz is already the newest version (0.15-1+b1). dwz set to manually installed. libhwasan0 is already the newest version (14.2.0-17). libhwasan0 set to manually installed. libcap-ng0 is already the newest version (0.8.5-4+b1). libpython3.13 is already the newest version (3.13.2-1). libpython3.13 set to manually installed. pkg-kde-tools is already the newest version (0.18.12). pkg-kde-tools set to manually installed. libatomic1 is already the newest version (14.2.0-17). libatomic1 set to manually installed. autoconf is already the newest version (2.72-3). autoconf set to manually installed. libpython3-stdlib is already the newest version (3.13.2-2). libpython3-stdlib set to manually installed. libc-dev-bin is already the newest version (2.41-4). libc-dev-bin set to manually installed. libuv1t64 is already the newest version (1.50.0-2). libuv1t64 set to manually installed. libtinfo6 is already the newest version (6.5+20250216-2). libgomp1 is already the newest version (14.2.0-17). libgomp1 set to manually installed. libdebconfclient0 is already the newest version (0.277). libpam-modules is already the newest version (1.7.0-3). libubsan1 is already the newest version (14.2.0-17). libubsan1 set to manually installed. g++-aarch64-linux-gnu is already the newest version (4:14.2.0-1). g++-aarch64-linux-gnu set to manually installed. liblzma5 is already the newest version (5.6.4-1). libproc2-0 is already the newest version (2:4.0.4-7). libproc2-0 set to manually installed. autopoint is already the newest version (0.23.1-1). autopoint set to manually installed. debconf is already the newest version (1.5.90). cpp-aarch64-linux-gnu is already the newest version (4:14.2.0-1). cpp-aarch64-linux-gnu set to manually installed. libexpat1-dev is already the newest version (2.6.4-1). libexpat1-dev set to manually installed. cpp is already the newest version (4:14.2.0-1). cpp set to manually installed. libsqlite3-0 is already the newest version (3.46.1-2). libsqlite3-0 set to manually installed. libnghttp3-9 is already the newest version (1.8.0-1). libnghttp3-9 set to manually installed. python3.13-dev is already the newest version (3.13.2-1). python3.13-dev 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+b1). perl-modules-5.40 is already the newest version (5.40.1-2). perl-modules-5.40 set to manually installed. libdb5.3t64 is already the newest version (5.3.28+dfsg2-9). libbz2-1.0 is already the newest version (1.0.8-6). libc-bin is already the newest version (2.41-4). readline-common is already the newest version (8.2-6). readline-common set to manually installed. po-debconf is already the newest version (1.0.21+nmu1). po-debconf set to manually installed. libgprofng0 is already the newest version (2.44-3). libgprofng0 set to manually installed. gcc-aarch64-linux-gnu is already the newest version (4:14.2.0-1). gcc-aarch64-linux-gnu set to manually installed. libc6-dev is already the newest version (2.41-4). libc6-dev 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. libjs-underscore is already the newest version (1.13.4~dfsg+~1.11.4-3). libjs-underscore set to manually installed. libsasl2-2 is already the newest version (2.1.28+dfsg1-9). libsasl2-2 set to manually installed. bash is already the newest version (5.2.37-1.1). libblkid1 is already the newest version (2.40.4-5). libpipeline1 is already the newest version (1.5.8-1). libpipeline1 set to manually installed. libsframe1 is already the newest version (2.44-3). libsframe1 set to manually installed. libitm1 is already the newest version (14.2.0-17). libitm1 set to manually installed. libmagic-mgc is already the newest version (1:5.45-3+b1). libmagic-mgc set to manually installed. procps is already the newest version (2:4.0.4-7). procps set to manually installed. libjs-sphinxdoc is already the newest version (8.1.3-5). libjs-sphinxdoc set to manually installed. libfmt-dev is already the newest version (10.1.1+ds1-4). libfmt-dev set to manually installed. linux-libc-dev is already the newest version (6.12.17-1). linux-libc-dev set to manually installed. python3-zipp is already the newest version (3.21.0-1). python3-zipp set to manually installed. libpython3.13-minimal is already the newest version (3.13.2-1). libpython3.13-minimal set to manually installed. libarchive-zip-perl is already the newest version (1.68-1). libarchive-zip-perl set to manually installed. sysvinit-utils is already the newest version (3.14-3). python3-more-itertools is already the newest version (10.6.0-1). python3-more-itertools set to manually installed. libaudit1 is already the newest version (1:4.0.2-2+b2). libabsl20240722 is already the newest version (20240722.0-1.5). libabsl20240722 set to manually installed. g++-14 is already the newest version (14.2.0-17). g++-14 set to manually installed. python3-dev is already the newest version (3.13.2-2). python3-dev set to manually installed. build-essential is already the newest version (12.12). build-essential 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. libexpat1 is already the newest version (2.6.4-1). libexpat1 set to manually installed. libssl3t64 is already the newest version (3.4.1-1). xz-utils is already the newest version (5.6.4-1). xz-utils set to manually installed. libattr1 is already the newest version (1:2.5.2-3). base-files is already the newest version (13.7). m4 is already the newest version (1.4.19-7). m4 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. python3-autocommand is already the newest version (2.2.2-3). python3-autocommand set to manually installed. libsystemd0 is already the newest version (257.4-1). python3-inflect is already the newest version (7.3.1-2). python3-inflect set to manually installed. sensible-utils is already the newest version (0.0.24). sensible-utils set to manually installed. python3-setuptools is already the newest version (75.8.0-1). python3-setuptools set to manually installed. libpog-dev is already the newest version (0.5.3-3). libpog-dev set to manually installed. netbase is already the newest version (6.4). netbase set to manually installed. libkeyutils1 is already the newest version (1.6.3-4). libkeyutils1 set to manually installed. libnghttp2-14 is already the newest version (1.64.0-1). libnghttp2-14 set to manually installed. libxxhash0 is already the newest version (0.8.3-2). libxxhash0 set to manually installed. libk5crypto3 is already the newest version (1.21.3-4). libk5crypto3 set to manually installed. libtasn1-6 is already the newest version (4.20.0-2). libtasn1-6 set to manually installed. libjsoncpp26 is already the newest version (1.9.6-3). libjsoncpp26 set to manually installed. libudev1 is already the newest version (257.4-1). liblz4-1 is already the newest version (1.10.0-4). liblz4-1 set to manually installed. libbrotli1 is already the newest version (1.1.0-2+b7). libbrotli1 set to manually installed. dpkg-dev is already the newest version (1.22.18). dpkg-dev set to manually installed. libuuid1 is already the newest version (2.40.4-5). gzip is already the newest version (1.13-1). g++-14-aarch64-linux-gnu is already the newest version (14.2.0-17). g++-14-aarch64-linux-gnu set to manually installed. pybind11-dev is already the newest version (2.13.6-2). pybind11-dev set to manually installed. binutils-aarch64-linux-gnu is already the newest version (2.44-3). binutils-aarch64-linux-gnu set to manually installed. gcc is already the newest version (4:14.2.0-1). gcc set to manually installed. python3-yaml is already the newest version (6.0.2-1+b2). python3-yaml set to manually installed. python3.13 is already the newest version (3.13.2-1). python3.13 set to manually installed. util-linux is already the newest version (2.40.4-5). libmpc3 is already the newest version (1.3.1-1+b3). libmpc3 set to manually installed. automake is already the newest version (1:1.17-3). automake set to manually installed. libunistring5 is already the newest version (1.3-1). libunistring5 set to manually installed. libisl23 is already the newest version (0.27-1). libisl23 set to manually installed. bsdextrautils is already the newest version (2.40.4-5). bsdextrautils set to manually installed. gcc-14-base is already the newest version (14.2.0-17). libp11-kit0 is already the newest version (0.25.5-3). libp11-kit0 set to manually installed. tar is already the newest version (1.35+dfsg-3.1). libtool is already the newest version (2.5.4-4). libtool set to manually installed. libffi8 is already the newest version (3.4.7-1). libffi8 set to manually installed. debhelper is already the newest version (13.24.1). debhelper set to manually installed. libc6 is already the newest version (2.41-4). libdebhelper-perl is already the newest version (13.24.1). libdebhelper-perl set to manually installed. coreutils is already the newest version (9.5-1+b1). libcrypt-dev is already the newest version (1:4.4.38-1). libcrypt-dev set to manually installed. dh-autoreconf is already the newest version (20). dh-autoreconf set to manually installed. dpkg is already the newest version (1.22.18). libdpkg-perl is already the newest version (1.22.18). libdpkg-perl set to manually installed. pkgconf is already the newest version (1.8.1-4). pkgconf set to manually installed. nlohmann-json3-dev is already the newest version (3.11.3-2). nlohmann-json3-dev set to manually installed. cpp-14-aarch64-linux-gnu is already the newest version (14.2.0-17). cpp-14-aarch64-linux-gnu set to manually installed. gettext-base is already the newest version (0.23.1-1). gettext-base set to manually installed. libarchive13t64 is already the newest version (3.7.4-1.1). libarchive13t64 set to manually installed. libgssapi-krb5-2 is already the newest version (1.21.3-4). libgssapi-krb5-2 set to manually installed. perl is already the newest version (5.40.1-2). perl set to manually installed. python3-typing-extensions is already the newest version (4.12.2-2). python3-typing-extensions set to manually installed. media-types is already the newest version (13.0.0). media-types set to manually installed. libmagic1t64 is already the newest version (1:5.45-3+b1). libmagic1t64 set to manually installed. libcc1-0 is already the newest version (14.2.0-17). libcc1-0 set to manually installed. dh-strip-nondeterminism is already the newest version (1.14.1-2). dh-strip-nondeterminism set to manually installed. libelf1t64 is already the newest version (0.192-4). libelf1t64 set to manually installed. libkrb5support0 is already the newest version (1.21.3-4). libkrb5support0 set to manually installed. libgmp10 is already the newest version (2:6.3.0+dfsg-3). findutils is already the newest version (4.10.0-3). libmount1 is already the newest version (2.40.4-5). libpkgconf3 is already the newest version (1.8.1-4). libpkgconf3 set to manually installed. intltool-debian is already the newest version (0.35.0+20060710.6). intltool-debian set to manually installed. libldap2 is already the newest version (2.6.9+dfsg-1). libldap2 set to manually installed. tzdata is already the newest version (2025a-2). tzdata set to manually installed. cmake is already the newest version (3.31.6-1). cmake set to manually installed. python3-debian is already the newest version (1.0.0). python3-debian set to manually installed. libctf0 is already the newest version (2.44-3). libctf0 set to manually installed. libfile-stripnondeterminism-perl is already the newest version (1.14.1-2). libfile-stripnondeterminism-perl set to manually installed. libmpfr6 is already the newest version (4.2.1-1+b2). libmpfr6 set to manually installed. binutils is already the newest version (2.44-3). binutils set to manually installed. librhash1 is already the newest version (1.4.5-1). librhash1 set to manually installed. libpython3-dev is already the newest version (3.13.2-2). libpython3-dev set to manually installed. python3-jaraco.context is already the newest version (6.0.1-1). python3-jaraco.context set to manually installed. libpcre2-8-0 is already the newest version (10.45-1). zlib1g is already the newest version (1:1.3.dfsg+really1.3.1-1+b1). python3.13-minimal is already the newest version (3.13.2-1). python3.13-minimal set to manually installed. libgcc-14-dev is already the newest version (14.2.0-17). libgcc-14-dev set to manually installed. bzip2 is already the newest version (1.0.8-6). bzip2 set to manually installed. librtmp1 is already the newest version (2.4+20151223.gitfa8646d.1-2+b5). librtmp1 set to manually installed. libsasl2-modules-db is already the newest version (2.1.28+dfsg1-9). libsasl2-modules-db set to manually installed. libasan8 is already the newest version (14.2.0-17). libasan8 set to manually installed. cmake-data is already the newest version (3.31.6-1). cmake-data set to manually installed. libpsl5t64 is already the newest version (0.21.2-1.1+b1). libpsl5t64 set to manually installed. patch is already the newest version (2.7.6-7+b1). patch set to manually installed. gettext is already the newest version (0.23.1-1). gettext set to manually installed. groff-base is already the newest version (1.23.0-7). groff-base set to manually installed. libacl1 is already the newest version (2.3.2-2+b1). libgdbm6t64 is already the newest version (1.24-2). libgdbm6t64 set to manually installed. python3-jaraco.functools is already the newest version (4.1.0-1). python3-jaraco.functools set to manually installed. libmd0 is already the newest version (1.1.0-2+b1). libre2-dev is already the newest version (20240702-3+b1). libre2-dev set to manually installed. libpam0g is already the newest version (1.7.0-3). libtsan2 is already the newest version (14.2.0-17). libtsan2 set to manually installed. hostname is already the newest version (3.25). python3-jaraco.text is already the newest version (4.0.0-1). python3-jaraco.text set to manually installed. mawk is already the newest version (1.3.4.20250131-1). libre2-11 is already the newest version (20240702-3+b1). libre2-11 set to manually installed. ncurses-base is already the newest version (6.5+20250216-2). libkrb5-3 is already the newest version (1.21.3-4). libkrb5-3 set to manually installed. perl-base is already the newest version (5.40.1-2). libabsl-dev is already the newest version (20240722.0-1.5). libabsl-dev set to manually installed. debianutils is already the newest version (5.21). libidn2-0 is already the newest version (2.3.8-1). libidn2-0 set to manually installed. libcrypt1 is already the newest version (1:4.4.38-1). dash is already the newest version (0.5.12-12). openssl-provider-legacy is already the newest version (3.4.1-1). grep is already the newest version (3.11-4+b1). python3-charset-normalizer is already the newest version (3.4.1-1+b1). python3-charset-normalizer set to manually installed. libgdbm-compat4t64 is already the newest version (1.24-2). libgdbm-compat4t64 set to manually installed. libstdc++-14-dev is already the newest version (14.2.0-17). libstdc++-14-dev set to manually installed. autotools-dev is already the newest version (20220109.1). autotools-dev set to manually installed. libnettle8t64 is already the newest version (3.10.1-1). libnettle8t64 set to manually installed. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. I: running --customize-hook in shell: sh -c 'chroot "$1" dpkg -r debootsnap-dummy' exec /srv/rebuilderd/tmp/mmdebstrap.I_1y9oS4JC (Reading database ... 22617 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.I_1y9oS4JC I: running special hook: download /pkglist ./pkglist I: running --customize-hook in shell: sh -c 'rm "$1/pkglist"' exec /srv/rebuilderd/tmp/mmdebstrap.I_1y9oS4JC 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.I_1y9oS4JC... I: success in 50.9250 seconds Downloading dependency 133 of 230: libbrotli1:arm64=1.1.0-2+b7 Downloading dependency 134 of 230: dpkg-dev:arm64=1.22.18 Downloading dependency 135 of 230: libuuid1:arm64=2.40.4-5 Downloading dependency 136 of 230: gzip:arm64=1.13-1 Downloading dependency 137 of 230: g++-14-aarch64-linux-gnu:arm64=14.2.0-17 Downloading dependency 138 of 230: pybind11-dev:arm64=2.13.6-2 Downloading dependency 139 of 230: binutils-aarch64-linux-gnu:arm64=2.44-3 Downloading dependency 140 of 230: gcc:arm64=4:14.2.0-1 Downloading dependency 141 of 230: python3-yaml:arm64=6.0.2-1+b2 Downloading dependency 142 of 230: python3.13:arm64=3.13.2-1 Downloading dependency 143 of 230: util-linux:arm64=2.40.4-5 Downloading dependency 144 of 230: libmpc3:arm64=1.3.1-1+b3 Downloading dependency 145 of 230: automake:arm64=1:1.17-3 Downloading dependency 146 of 230: libunistring5:arm64=1.3-1 Downloading dependency 147 of 230: libisl23:arm64=0.27-1 Downloading dependency 148 of 230: bsdextrautils:arm64=2.40.4-5 Downloading dependency 149 of 230: gcc-14-base:arm64=14.2.0-17 Downloading dependency 150 of 230: libp11-kit0:arm64=0.25.5-3 Downloading dependency 151 of 230: tar:arm64=1.35+dfsg-3.1 Downloading dependency 152 of 230: libtool:arm64=2.5.4-4 Downloading dependency 153 of 230: libffi8:arm64=3.4.7-1 Downloading dependency 154 of 230: debhelper:arm64=13.24.1 Downloading dependency 155 of 230: libc6:arm64=2.41-4 Downloading dependency 156 of 230: libdebhelper-perl:arm64=13.24.1 Downloading dependency 157 of 230: coreutils:arm64=9.5-1+b1 Downloading dependency 158 of 230: libcrypt-dev:arm64=1:4.4.38-1 Downloading dependency 159 of 230: dh-autoreconf:arm64=20 Downloading dependency 160 of 230: dpkg:arm64=1.22.18 Downloading dependency 161 of 230: libdpkg-perl:arm64=1.22.18 Downloading dependency 162 of 230: pkgconf:arm64=1.8.1-4 Downloading dependency 163 of 230: nlohmann-json3-dev:arm64=3.11.3-2 Downloading dependency 164 of 230: cpp-14-aarch64-linux-gnu:arm64=14.2.0-17 Downloading dependency 165 of 230: gettext-base:arm64=0.23.1-1 Downloading dependency 166 of 230: libarchive13t64:arm64=3.7.4-1.1 Downloading dependency 167 of 230: libgssapi-krb5-2:arm64=1.21.3-4 Downloading dependency 168 of 230: perl:arm64=5.40.1-2 Downloading dependency 169 of 230: python3-typing-extensions:arm64=4.12.2-2 Downloading dependency 170 of 230: media-types:arm64=13.0.0 Downloading dependency 171 of 230: libmagic1t64:arm64=1:5.45-3+b1 Downloading dependency 172 of 230: libcc1-0:arm64=14.2.0-17 Downloading dependency 173 of 230: dh-strip-nondeterminism:arm64=1.14.1-2 Downloading dependency 174 of 230: libelf1t64:arm64=0.192-4 Downloading dependency 175 of 230: libkrb5support0:arm64=1.21.3-4 Downloading dependency 176 of 230: libgmp10:arm64=2:6.3.0+dfsg-3 Downloading dependency 177 of 230: findutils:arm64=4.10.0-3 Downloading dependency 178 of 230: libmount1:arm64=2.40.4-5 Downloading dependency 179 of 230: libpkgconf3:arm64=1.8.1-4 Downloading dependency 180 of 230: intltool-debian:arm64=0.35.0+20060710.6 Downloading dependency 181 of 230: libldap2:arm64=2.6.9+dfsg-1 Downloading dependency 182 of 230: tzdata:arm64=2025a-2 Downloading dependency 183 of 230: cmake:arm64=3.31.6-1 Downloading dependency 184 of 230: python3-debian:arm64=1.0.0 Downloading dependency 185 of 230: libctf0:arm64=2.44-3 Downloading dependency 186 of 230: libfile-stripnondeterminism-perl:arm64=1.14.1-2 Downloading dependency 187 of 230: libmpfr6:arm64=4.2.1-1+b2 Downloading dependency 188 of 230: binutils:arm64=2.44-3 Downloading dependency 189 of 230: librhash1:arm64=1.4.5-1 Downloading dependency 190 of 230: libpython3-dev:arm64=3.13.2-2 Downloading dependency 191 of 230: python3-jaraco.context:arm64=6.0.1-1 Downloading dependency 192 of 230: libpcre2-8-0:arm64=10.45-1 Downloading dependency 193 of 230: zlib1g:arm64=1:1.3.dfsg+really1.3.1-1+b1 Downloading dependency 194 of 230: python3.13-minimal:arm64=3.13.2-1 Downloading dependency 195 of 230: libgcc-14-dev:arm64=14.2.0-17 Downloading dependency 196 of 230: bzip2:arm64=1.0.8-6 Downloading dependency 197 of 230: librtmp1:arm64=2.4+20151223.gitfa8646d.1-2+b5 Downloading dependency 198 of 230: libsasl2-modules-db:arm64=2.1.28+dfsg1-9 Downloading dependency 199 of 230: libasan8:arm64=14.2.0-17 Downloading dependency 200 of 230: cmake-data:arm64=3.31.6-1 Downloading dependency 201 of 230: libpsl5t64:arm64=0.21.2-1.1+b1 Downloading dependency 202 of 230: patch:arm64=2.7.6-7+b1 Downloading dependency 203 of 230: gettext:arm64=0.23.1-1 Downloading dependency 204 of 230: groff-base:arm64=1.23.0-7 Downloading dependency 205 of 230: libacl1:arm64=2.3.2-2+b1 Downloading dependency 206 of 230: libgdbm6t64:arm64=1.24-2 Downloading dependency 207 of 230: python3-jaraco.functools:arm64=4.1.0-1 Downloading dependency 208 of 230: libmd0:arm64=1.1.0-2+b1 Downloading dependency 209 of 230: libre2-dev:arm64=20240702-3+b1 Downloading dependency 210 of 230: libpam0g:arm64=1.7.0-3 Downloading dependency 211 of 230: libtsan2:arm64=14.2.0-17 Downloading dependency 212 of 230: hostname:arm64=3.25 Downloading dependency 213 of 230: python3-jaraco.text:arm64=4.0.0-1 Downloading dependency 214 of 230: mawk:arm64=1.3.4.20250131-1 Downloading dependency 215 of 230: libre2-11:arm64=20240702-3+b1 Downloading dependency 216 of 230: ncurses-base:arm64=6.5+20250216-2 Downloading dependency 217 of 230: libkrb5-3:arm64=1.21.3-4 Downloading dependency 218 of 230: perl-base:arm64=5.40.1-2 Downloading dependency 219 of 230: libabsl-dev:arm64=20240722.0-1.5 Downloading dependency 220 of 230: debianutils:arm64=5.21 Downloading dependency 221 of 230: libidn2-0:arm64=2.3.8-1 Downloading dependency 222 of 230: libcrypt1:arm64=1:4.4.38-1 Downloading dependency 223 of 230: dash:arm64=0.5.12-12 Downloading dependency 224 of 230: openssl-provider-legacy:arm64=3.4.1-1 Downloading dependency 225 of 230: grep:arm64=3.11-4+b1 Downloading dependency 226 of 230: python3-charset-normalizer:arm64=3.4.1-1+b1 Downloading dependency 227 of 230: libgdbm-compat4t64:arm64=1.24-2 Downloading dependency 228 of 230: libstdc++-14-dev:arm64=14.2.0-17 Downloading dependency 229 of 230: autotools-dev:arm64=20220109.1 Downloading dependency 230 of 230: libnettle8t64:arm64=3.10.1-1 env --chdir=/srv/rebuilderd/tmp/rebuilderdyrdFvc/out DEB_BUILD_OPTIONS=parallel=8 LANG=C.UTF-8 LC_COLLATE=C.UTF-8 LC_CTYPE=C.UTF-8 SOURCE_DATE_EPOCH=1741690625 SBUILD_CONFIG=/srv/rebuilderd/tmp/debrebuildEW9kUL/debrebuild.sbuildrc.v5jTy5IpoP_w sbuild --build=arm64 --host=arm64 --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 arm64; no source changes. * Rebuild against blibre2-11-absl20240722. -- arm Build Daemon (arm-conova-04) Tue, 11 Mar 2025 10:57:05 +0000 --chroot=/srv/rebuilderd/tmp/debrebuildEW9kUL/debrebuild.tar.0Jr3MXsqVLNH --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/rebuilderdyrdFvc/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 codethink02-arm64 +==============================================================================+ | yaramod 3.21.0-1.1+b2 (arm64) Thu, 27 Nov 2025 10:56:03 +0000 | +==============================================================================+ Package: yaramod Version: 3.21.0-1.1+b2 Source Version: 3.21.0-1.1 Distribution: unstable Machine Architecture: arm64 Host Architecture: arm64 Build Architecture: arm64 Build Type: any I: No tarballs found in /srv/rebuilderd/.cache/sbuild I: Unpacking /srv/rebuilderd/tmp/debrebuildEW9kUL/debrebuild.tar.0Jr3MXsqVLNH to /srv/rebuilderd/tmp/tmp.sbuild.xmHrw29pnE... I: Setting up the chroot... I: Creating chroot session... I: Setting up log color... I: Setting up apt archive... +------------------------------------------------------------------------------+ | Fetch source files Thu, 27 Nov 2025 10:56:11 +0000 | +------------------------------------------------------------------------------+ Local sources ------------- /srv/rebuilderd/tmp/rebuilderdyrdFvc/inputs/yaramod_3.21.0-1.1.dsc exists in /srv/rebuilderd/tmp/rebuilderdyrdFvc/inputs; copying to chroot sbuild: warning: descr(l1): found blank line where expected first heading +------------------------------------------------------------------------------+ | Install package build dependencies Thu, 27 Nov 2025 10:56:13 +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-Uvb6vD/apt_archive/sbuild-build-depends-main-dummy.deb'. Install main build dependencies (apt-based resolver) ---------------------------------------------------- Installing build dependencies +------------------------------------------------------------------------------+ | Check architectures Thu, 27 Nov 2025 10:56:19 +0000 | +------------------------------------------------------------------------------+ Arch check ok (arm64 included in any) +------------------------------------------------------------------------------+ | Build environment Thu, 27 Nov 2025 10:56:20 +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-aarch64-linux-gnu_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+b1 cpp_4:14.2.0-1 cpp-14_14.2.0-17 cpp-14-aarch64-linux-gnu_14.2.0-17 cpp-aarch64-linux-gnu_4:14.2.0-1 dash_0.5.12-12 debconf_1.5.90 debhelper_13.24.1 debianutils_5.21 dh-autoreconf_20 dh-python_6.20250308 dh-strip-nondeterminism_1.14.1-2 diffutils_1:3.10-2 dpkg_1.22.18 dpkg-dev_1.22.18 dwz_0.15-1+b1 file_1:5.45-3+b1 findutils_4.10.0-3 g++_4:14.2.0-1 g++-14_14.2.0-17 g++-14-aarch64-linux-gnu_14.2.0-17 g++-aarch64-linux-gnu_4:14.2.0-1 gcc_4:14.2.0-1 gcc-14_14.2.0-17 gcc-14-aarch64-linux-gnu_14.2.0-17 gcc-14-base_14.2.0-17 gcc-aarch64-linux-gnu_4:14.2.0-1 gettext_0.23.1-1 gettext-base_0.23.1-1 googletest_1.16.0-1 grep_3.11-4+b1 groff-base_1.23.0-7 gzip_1.13-1 hostname_3.25 init-system-helpers_1.68 intltool-debian_0.35.0+20060710.6 libabsl-dev_20240722.0-1.5 libabsl20240722_20240722.0-1.5 libacl1_2.3.2-2+b1 libarchive-zip-perl_1.68-1 libarchive13t64_3.7.4-1.1 libasan8_14.2.0-17 libatomic1_14.2.0-17 libattr1_1:2.5.2-3 libaudit-common_1:4.0.2-2 libaudit1_1:4.0.2-2+b2 libbinutils_2.44-3 libblkid1_2.40.4-5 libbrotli1_1.1.0-2+b7 libbz2-1.0_1.0.8-6 libc-bin_2.41-4 libc-dev-bin_2.41-4 libc6_2.41-4 libc6-dev_2.41-4 libcap-ng0_0.8.5-4+b1 libcap2_1:2.75-1 libcc1-0_14.2.0-17 libcom-err2_1.47.2-1 libcrypt-dev_1:4.4.38-1 libcrypt1_1:4.4.38-1 libctf-nobfd0_2.44-3 libctf0_2.44-3 libcurl4t64_8.12.1-3 libdb5.3t64_5.3.28+dfsg2-9 libdebconfclient0_0.277 libdebhelper-perl_13.24.1 libdpkg-perl_1.22.18 libelf1t64_0.192-4 libexpat1_2.6.4-1 libexpat1-dev_2.6.4-1 libffi8_3.4.7-1 libfile-stripnondeterminism-perl_1.14.1-2 libfmt-dev_10.1.1+ds1-4 libfmt10_10.1.1+ds1-4 libgcc-14-dev_14.2.0-17 libgcc-s1_14.2.0-17 libgdbm-compat4t64_1.24-2 libgdbm6t64_1.24-2 libgmp10_2:6.3.0+dfsg-3 libgnutls30t64_3.8.9-2 libgomp1_14.2.0-17 libgprofng0_2.44-3 libgssapi-krb5-2_1.21.3-4 libgtest-dev_1.16.0-1 libhogweed6t64_3.10.1-1 libhwasan0_14.2.0-17 libicu72_72.1-6 libidn2-0_2.3.8-1 libisl23_0.27-1 libitm1_14.2.0-17 libjansson4_2.14-2+b3 libjs-jquery_3.6.1+dfsg+~3.5.14-1 libjs-sphinxdoc_8.1.3-5 libjs-underscore_1.13.4~dfsg+~1.11.4-3 libjsoncpp26_1.9.6-3 libk5crypto3_1.21.3-4 libkeyutils1_1.6.3-4 libkrb5-3_1.21.3-4 libkrb5support0_1.21.3-4 libldap2_2.6.9+dfsg-1 liblsan0_14.2.0-17 liblz4-1_1.10.0-4 liblzma5_5.6.4-1 libmagic-mgc_1:5.45-3+b1 libmagic1t64_1:5.45-3+b1 libmd0_1.1.0-2+b1 libmount1_2.40.4-5 libmpc3_1.3.1-1+b3 libmpfr6_4.2.1-1+b2 libncursesw6_6.5+20250216-2 libnettle8t64_3.10.1-1 libnghttp2-14_1.64.0-1 libnghttp3-9_1.8.0-1 libp11-kit0_0.25.5-3 libpam-modules_1.7.0-3 libpam-modules-bin_1.7.0-3 libpam-runtime_1.7.0-3 libpam0g_1.7.0-3 libpcre2-8-0_10.45-1 libperl5.40_5.40.1-2 libpipeline1_1.5.8-1 libpkgconf3_1.8.1-4 libpog-dev_0.5.3-3 libproc2-0_2:4.0.4-7 libpsl5t64_0.21.2-1.1+b1 libpython3-dev_3.13.2-2 libpython3-stdlib_3.13.2-2 libpython3.13_3.13.2-1 libpython3.13-dev_3.13.2-1 libpython3.13-minimal_3.13.2-1 libpython3.13-stdlib_3.13.2-1 libre2-11_20240702-3+b1 libre2-dev_20240702-3+b1 libreadline8t64_8.2-6 librhash1_1.4.5-1 librtmp1_2.4+20151223.gitfa8646d.1-2+b5 libsasl2-2_2.1.28+dfsg1-9 libsasl2-modules-db_2.1.28+dfsg1-9 libseccomp2_2.5.5-2+b1 libselinux1_3.8-4 libsframe1_2.44-3 libsmartcols1_2.40.4-5 libsqlite3-0_3.46.1-2 libssh2-1t64_1.11.1-1 libssl3t64_3.4.1-1 libstdc++-14-dev_14.2.0-17 libstdc++6_14.2.0-17 libsystemd0_257.4-1 libtasn1-6_4.20.0-2 libtinfo6_6.5+20250216-2 libtool_2.5.4-4 libtsan2_14.2.0-17 libubsan1_14.2.0-17 libuchardet0_0.0.8-1+b2 libudev1_257.4-1 libunistring5_1.3-1 libuuid1_2.40.4-5 libuv1t64_1.50.0-2 libxml2_2.12.7+dfsg+really2.9.14-0.2+b2 libxxhash0_0.8.3-2 libyaml-0-2_0.2.5-2 libzstd1_1.5.6+dfsg-2 linux-libc-dev_6.12.17-1 m4_1.4.19-7 make_4.4.1-1 man-db_2.13.0-1 mawk_1.3.4.20250131-1 media-types_13.0.0 ncurses-base_6.5+20250216-2 ncurses-bin_6.5+20250216-2 netbase_6.4 nlohmann-json3-dev_3.11.3-2 openssl-provider-legacy_3.4.1-1 patch_2.7.6-7+b1 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+b1 sed_4.9-2+b1 sensible-utils_0.0.24 sysvinit-utils_3.14-3 tar_1.35+dfsg-3.1 tzdata_2025a-2 util-linux_2.40.4-5 xz-utils_5.6.4-1 zlib1g_1:1.3.dfsg+really1.3.1-1+b1 zlib1g-dev_1:1.3.dfsg+really1.3.1-1+b1 +------------------------------------------------------------------------------+ | Build Thu, 27 Nov 2025 10:56:20 +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=1741690625 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-04) dpkg-source --before-build . dpkg-buildpackage: info: host architecture arm64 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-aarch64' 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-aarch64-linux-gnu && DEB_PYTHON_INSTALL_LAYOUT=deb PKG_CONFIG=/usr/bin/pkg-config cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_SYSCONFDIR=/etc -DCMAKE_INSTALL_LOCALSTATEDIR=/var -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON -DCMAKE_FIND_USE_PACKAGE_REGISTRY=OFF -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON -DFETCHCONTENT_FULLY_DISCONNECTED=ON -DCMAKE_INSTALL_RUNSTATEDIR=/run -DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON "-GUnix Makefiles" -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_INSTALL_LIBDIR=lib/aarch64-linux-gnu -DYARAMOD_VERSION=3.21.0 -DPYTHON_EXECUTABLE=/usr/bin/python3 -DYARAMOD_TESTS=ON -DYARAMOD_PYTHON=ON -DCMAKE_STRIP=OFF .. CMake Deprecation Warning at CMakeLists.txt:5 (cmake_minimum_required): Compatibility with CMake < 3.10 will be removed from a future version of CMake. Update the VERSION argument value. Or, use the ... syntax to tell CMake that the project requires at least but has been updated to work with policies introduced by or earlier. -- The CXX compiler identification is GNU 14.2.0 -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Found PkgConfig: /usr/bin/pkg-config (found version "1.8.1") -- Checking for module 're2' -- Found re2, version 11.0.0 CMake Warning (dev) at /usr/lib/cmake/pybind11/FindPythonLibsNew.cmake:101 (message): Policy CMP0148 is not set: The FindPythonInterp and FindPythonLibs modules are removed. Run "cmake --help-policy CMP0148" for policy details. Use the cmake_policy command to set the policy and suppress this warning, or preferably upgrade to using FindPython, either by calling it explicitly before pybind11, or by setting PYBIND11_FINDPYTHON ON before pybind11. Call Stack (most recent call first): /usr/lib/cmake/pybind11/pybind11Tools.cmake:50 (find_package) /usr/lib/cmake/pybind11/pybind11Common.cmake:228 (include) /usr/lib/cmake/pybind11/pybind11Config.cmake:250 (include) src/python/CMakeLists.txt:1 (find_package) This warning is for project developers. Use -Wno-dev to suppress it. -- Found PythonInterp: /usr/bin/python3 (found suitable version "3.13.2", minimum required is "3.7") -- Found PythonLibs: /usr/lib/aarch64-linux-gnu/libpython3.13.so -- Performing Test HAS_FLTO -- Performing Test HAS_FLTO - Success -- Found pybind11: /usr/include (found version "2.13.6") -- Performing Test CMAKE_HAVE_LIBC_PTHREAD -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success -- Found Threads: TRUE -- Found GTest: /usr/lib/aarch64-linux-gnu/cmake/GTest/GTestConfig.cmake (found version "1.15.0") -- Found Python: /usr/bin/python3 (found version "3.13.2") found components: Interpreter -- Configuring done (48.3s) -- Generating done (0.1s) CMake Warning: Manually-specified variables were not used by the project: CMAKE_EXPORT_NO_PACKAGE_REGISTRY CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY FETCHCONTENT_FULLY_DISCONNECTED -- Build files have been written to: /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu dh_auto_configure -a -O--buildsystem=pybuild I: pybuild base:311: python3.13 setup.py config /usr/lib/python3/dist-packages/setuptools/dist.py:493: SetuptoolsDeprecationWarning: Invalid dash-separated options !! ******************************************************************************** Usage of dash-separated 'description-file' will not be supported in future versions. Please use the underscore name 'description_file' instead. This deprecation is overdue, please update your project and remove deprecated calls to avoid build errors in the future. See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details. ******************************************************************************** !! opt = self.warn_dash_deprecation(opt, section) running config make[1]: Leaving directory '/build/reproducible-path/yaramod-3.21.0' debian/rules override_dh_auto_build-arch make[1]: Entering directory '/build/reproducible-path/yaramod-3.21.0' dh_auto_build -a -O--buildsystem=cmake cd obj-aarch64-linux-gnu && make -j8 "INSTALL=install --strip-program=true" VERBOSE=1 make[2]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' /usr/bin/cmake -S/build/reproducible-path/yaramod-3.21.0 -B/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu --check-build-system CMakeFiles/Makefile.cmake 0 /usr/bin/cmake -E cmake_progress_start /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/CMakeFiles /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu//CMakeFiles/progress.marks make -f CMakeFiles/Makefile2 all make[3]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' make -f CMakeFiles/modules_wrapping.dir/build.make CMakeFiles/modules_wrapping.dir/depend make -f src/CMakeFiles/yaramod-obj.dir/build.make src/CMakeFiles/yaramod-obj.dir/depend make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /build/reproducible-path/yaramod-3.21.0 /build/reproducible-path/yaramod-3.21.0/src /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src/CMakeFiles/yaramod-obj.dir/DependInfo.cmake "--color=" cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /build/reproducible-path/yaramod-3.21.0 /build/reproducible-path/yaramod-3.21.0 /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/CMakeFiles/modules_wrapping.dir/DependInfo.cmake "--color=" make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' make -f src/CMakeFiles/yaramod-obj.dir/build.make src/CMakeFiles/yaramod-obj.dir/build make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' make -f CMakeFiles/modules_wrapping.dir/build.make CMakeFiles/modules_wrapping.dir/build make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' [ 2%] Building CXX object src/CMakeFiles/yaramod-obj.dir/builder/yara_expression_builder.cpp.o [ 5%] Building CXX object src/CMakeFiles/yaramod-obj.dir/builder/yara_hex_string_builder.cpp.o [ 8%] Building CXX object src/CMakeFiles/yaramod-obj.dir/builder/yara_file_builder.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/builder/yara_expression_builder.cpp.o -MF CMakeFiles/yaramod-obj.dir/builder/yara_expression_builder.cpp.o.d -o CMakeFiles/yaramod-obj.dir/builder/yara_expression_builder.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/builder/yara_expression_builder.cpp cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/builder/yara_file_builder.cpp.o -MF CMakeFiles/yaramod-obj.dir/builder/yara_file_builder.cpp.o.d -o CMakeFiles/yaramod-obj.dir/builder/yara_file_builder.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/builder/yara_file_builder.cpp [ 10%] Converting yaramod modules from JSON to byte arrays in .cpp files /usr/bin/python3 /build/reproducible-path/yaramod-3.21.0/scripts/json_to_array.py -i /build/reproducible-path/yaramod-3.21.0/modules -o /build/reproducible-path/yaramod-3.21.0/include/yaramod/types/modules/generated cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/builder/yara_hex_string_builder.cpp.o -MF CMakeFiles/yaramod-obj.dir/builder/yara_hex_string_builder.cpp.o.d -o CMakeFiles/yaramod-obj.dir/builder/yara_hex_string_builder.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/builder/yara_hex_string_builder.cpp [ 13%] Building CXX object src/CMakeFiles/yaramod-obj.dir/builder/yara_rule_builder.cpp.o [ 16%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/literal.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/builder/yara_rule_builder.cpp.o -MF CMakeFiles/yaramod-obj.dir/builder/yara_rule_builder.cpp.o.d -o CMakeFiles/yaramod-obj.dir/builder/yara_rule_builder.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/builder/yara_rule_builder.cpp cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/literal.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/literal.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/literal.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/literal.cpp [ 18%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/hex_string.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/hex_string.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/hex_string.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/hex_string.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/hex_string.cpp [ 21%] Building CXX object src/CMakeFiles/yaramod-obj.dir/parser/parser_driver.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/parser/parser_driver.cpp.o -MF CMakeFiles/yaramod-obj.dir/parser/parser_driver.cpp.o.d -o CMakeFiles/yaramod-obj.dir/parser/parser_driver.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/parser/parser_driver.cpp 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-aarch64-linux-gnu' [ 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-aarch64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/meta.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/meta.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/meta.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/meta.cpp [ 27%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/variable.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/variable.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/variable.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/variable.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/variable.cpp [ 29%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/modules/module.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/modules/module.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/modules/module.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/modules/module.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/modules/module.cpp [ 32%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/modules/module_pool.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/modules/module_pool.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/modules/module_pool.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/modules/module_pool.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/modules/module_pool.cpp [ 35%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/plain_string.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/plain_string.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/plain_string.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/plain_string.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/plain_string.cpp [ 37%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/rule.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/rule.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/rule.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/rule.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/rule.cpp [ 40%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/sections_summary.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/sections_summary.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/sections_summary.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/sections_summary.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/sections_summary.cpp [ 43%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/token.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/token.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/token.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/token.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/token.cpp [ 45%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/token_stream.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/token_stream.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/token_stream.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/token_stream.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/token_stream.cpp [ 48%] Building CXX object src/CMakeFiles/yaramod-obj.dir/types/yara_file.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/types/yara_file.cpp.o -MF CMakeFiles/yaramod-obj.dir/types/yara_file.cpp.o.d -o CMakeFiles/yaramod-obj.dir/types/yara_file.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/types/yara_file.cpp [ 51%] Building CXX object src/CMakeFiles/yaramod-obj.dir/utils/json.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/utils/json.cpp.o -MF CMakeFiles/yaramod-obj.dir/utils/json.cpp.o.d -o CMakeFiles/yaramod-obj.dir/utils/json.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/utils/json.cpp [ 54%] Building CXX object src/CMakeFiles/yaramod-obj.dir/utils/filesystem_operations.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/utils/filesystem_operations.cpp.o -MF CMakeFiles/yaramod-obj.dir/utils/filesystem_operations.cpp.o.d -o CMakeFiles/yaramod-obj.dir/utils/filesystem_operations.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/utils/filesystem_operations.cpp [ 56%] Building CXX object src/CMakeFiles/yaramod-obj.dir/utils/utils.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/utils/utils.cpp.o -MF CMakeFiles/yaramod-obj.dir/utils/utils.cpp.o.d -o CMakeFiles/yaramod-obj.dir/utils/utils.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/utils/utils.cpp [ 59%] Building CXX object src/CMakeFiles/yaramod-obj.dir/yaramod.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/c++ -DFMT_SHARED -DYARAMOD_OS_LINUX -I/build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/CMakeFiles/yaramod-obj.dir/yaramod.cpp.o -MF CMakeFiles/yaramod-obj.dir/yaramod.cpp.o.d -o CMakeFiles/yaramod-obj.dir/yaramod.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/yaramod.cpp /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 /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 /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 /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-aarch64-linux-gnu' [ 59%] Built target yaramod-obj make -f src/CMakeFiles/yaramod-static.dir/build.make src/CMakeFiles/yaramod-static.dir/depend make -f src/CMakeFiles/yaramod.dir/build.make src/CMakeFiles/yaramod.dir/depend make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /build/reproducible-path/yaramod-3.21.0 /build/reproducible-path/yaramod-3.21.0/src /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src/CMakeFiles/yaramod-static.dir/DependInfo.cmake "--color=" make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /build/reproducible-path/yaramod-3.21.0 /build/reproducible-path/yaramod-3.21.0/src /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src/CMakeFiles/yaramod.dir/DependInfo.cmake "--color=" make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' make -f src/CMakeFiles/yaramod-static.dir/build.make src/CMakeFiles/yaramod-static.dir/build make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' make -f src/CMakeFiles/yaramod.dir/build.make src/CMakeFiles/yaramod.dir/build make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' [ 62%] Linking CXX static library libyaramod.a cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/cmake -P CMakeFiles/yaramod-static.dir/cmake_clean_target.cmake cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/cmake -E cmake_link_script CMakeFiles/yaramod-static.dir/link.txt --verbose=1 [ 64%] Linking CXX shared library libyaramod.so cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/cmake -E cmake_link_script CMakeFiles/yaramod.dir/link.txt --verbose=1 /usr/bin/c++ -fPIC -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -pthread -Wl,--push-state,--as-needed -Wl,--pop-state -Wl,--dependency-file=CMakeFiles/yaramod.dir/link.d -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libyaramod.so.0 -o libyaramod.so.3.21.0 "CMakeFiles/yaramod-obj.dir/builder/yara_expression_builder.cpp.o" "CMakeFiles/yaramod-obj.dir/builder/yara_file_builder.cpp.o" "CMakeFiles/yaramod-obj.dir/builder/yara_hex_string_builder.cpp.o" "CMakeFiles/yaramod-obj.dir/builder/yara_rule_builder.cpp.o" "CMakeFiles/yaramod-obj.dir/parser/parser_driver.cpp.o" "CMakeFiles/yaramod-obj.dir/types/hex_string.cpp.o" "CMakeFiles/yaramod-obj.dir/types/literal.cpp.o" "CMakeFiles/yaramod-obj.dir/types/meta.cpp.o" "CMakeFiles/yaramod-obj.dir/types/variable.cpp.o" "CMakeFiles/yaramod-obj.dir/types/modules/module.cpp.o" "CMakeFiles/yaramod-obj.dir/types/modules/module_pool.cpp.o" "CMakeFiles/yaramod-obj.dir/types/plain_string.cpp.o" "CMakeFiles/yaramod-obj.dir/types/rule.cpp.o" "CMakeFiles/yaramod-obj.dir/types/sections_summary.cpp.o" "CMakeFiles/yaramod-obj.dir/types/token.cpp.o" "CMakeFiles/yaramod-obj.dir/types/token_stream.cpp.o" "CMakeFiles/yaramod-obj.dir/types/yara_file.cpp.o" "CMakeFiles/yaramod-obj.dir/utils/json.cpp.o" "CMakeFiles/yaramod-obj.dir/utils/filesystem_operations.cpp.o" "CMakeFiles/yaramod-obj.dir/utils/utils.cpp.o" "CMakeFiles/yaramod-obj.dir/yaramod.cpp.o" /usr/lib/aarch64-linux-gnu/libre2.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_check_op.so /usr/lib/aarch64-linux-gnu/libabsl_log_severity.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_conditions.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_message.so /usr/lib/aarch64-linux-gnu/libabsl_examine_stack.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_format.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_proto.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_nullguard.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_log_sink_set.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_globals.so /usr/lib/aarch64-linux-gnu/libabsl_log_globals.so /usr/lib/aarch64-linux-gnu/libabsl_log_sink.so /usr/lib/aarch64-linux-gnu/libabsl_log_entry.so /usr/lib/aarch64-linux-gnu/libabsl_strerror.so /usr/lib/aarch64-linux-gnu/libabsl_vlog_config_internal.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_fnmatch.so /usr/lib/aarch64-linux-gnu/libabsl_flags_internal.so /usr/lib/aarch64-linux-gnu/libabsl_flags_marshalling.so /usr/lib/aarch64-linux-gnu/libabsl_flags_reflection.so /usr/lib/aarch64-linux-gnu/libabsl_flags_private_handle_accessor.so /usr/lib/aarch64-linux-gnu/libabsl_flags_commandlineflag.so /usr/lib/aarch64-linux-gnu/libabsl_flags_commandlineflag_internal.so /usr/lib/aarch64-linux-gnu/libabsl_flags_config.so /usr/lib/aarch64-linux-gnu/libabsl_flags_program_name.so /usr/lib/aarch64-linux-gnu/libabsl_raw_logging_internal.so /usr/lib/aarch64-linux-gnu/libabsl_cord.so /usr/lib/aarch64-linux-gnu/libabsl_cordz_info.so /usr/lib/aarch64-linux-gnu/libabsl_cord_internal.so /usr/lib/aarch64-linux-gnu/libabsl_cordz_functions.so /usr/lib/aarch64-linux-gnu/libabsl_cordz_handle.so /usr/lib/aarch64-linux-gnu/libabsl_crc_cord_state.so /usr/lib/aarch64-linux-gnu/libabsl_crc32c.so /usr/lib/aarch64-linux-gnu/libabsl_crc_internal.so /usr/lib/aarch64-linux-gnu/libabsl_crc_cpu_detect.so /usr/lib/aarch64-linux-gnu/libabsl_raw_hash_set.so /usr/lib/aarch64-linux-gnu/libabsl_hashtablez_sampler.so /usr/lib/aarch64-linux-gnu/libabsl_exponential_biased.so /usr/lib/aarch64-linux-gnu/libabsl_hash.so /usr/lib/aarch64-linux-gnu/libabsl_city.so /usr/lib/aarch64-linux-gnu/libabsl_bad_variant_access.so /usr/lib/aarch64-linux-gnu/libabsl_low_level_hash.so /usr/lib/aarch64-linux-gnu/libabsl_throw_delegate.so /usr/lib/aarch64-linux-gnu/libabsl_bad_optional_access.so /usr/lib/aarch64-linux-gnu/libabsl_str_format_internal.so /usr/lib/aarch64-linux-gnu/libabsl_synchronization.so /usr/lib/aarch64-linux-gnu/libabsl_graphcycles_internal.so /usr/lib/aarch64-linux-gnu/libabsl_kernel_timeout_internal.so /usr/lib/aarch64-linux-gnu/libabsl_stacktrace.so /usr/lib/aarch64-linux-gnu/libabsl_symbolize.so /usr/lib/aarch64-linux-gnu/libabsl_debugging_internal.so /usr/lib/aarch64-linux-gnu/libabsl_demangle_internal.so /usr/lib/aarch64-linux-gnu/libabsl_demangle_rust.so /usr/lib/aarch64-linux-gnu/libabsl_decode_rust_punycode.so /usr/lib/aarch64-linux-gnu/libabsl_utf8_for_code_point.so /usr/lib/aarch64-linux-gnu/libabsl_malloc_internal.so /usr/lib/aarch64-linux-gnu/libabsl_time.so /usr/lib/aarch64-linux-gnu/libabsl_civil_time.so /usr/lib/aarch64-linux-gnu/libabsl_strings.so /usr/lib/aarch64-linux-gnu/libabsl_strings_internal.so /usr/lib/aarch64-linux-gnu/libabsl_string_view.so /usr/lib/aarch64-linux-gnu/libabsl_base.so -latomic /usr/lib/aarch64-linux-gnu/librt.a /usr/lib/aarch64-linux-gnu/libabsl_spinlock_wait.so /usr/lib/aarch64-linux-gnu/libabsl_int128.so /usr/lib/aarch64-linux-gnu/libabsl_log_severity.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_conditions.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_message.so /usr/lib/aarch64-linux-gnu/libabsl_examine_stack.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_format.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_proto.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_nullguard.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_log_sink_set.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_globals.so /usr/lib/aarch64-linux-gnu/libabsl_log_globals.so /usr/lib/aarch64-linux-gnu/libabsl_log_sink.so /usr/lib/aarch64-linux-gnu/libabsl_log_entry.so /usr/lib/aarch64-linux-gnu/libabsl_strerror.so /usr/lib/aarch64-linux-gnu/libabsl_vlog_config_internal.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_fnmatch.so /usr/lib/aarch64-linux-gnu/libabsl_flags_internal.so /usr/lib/aarch64-linux-gnu/libabsl_flags_marshalling.so /usr/lib/aarch64-linux-gnu/libabsl_flags_reflection.so /usr/lib/aarch64-linux-gnu/libabsl_flags_private_handle_accessor.so /usr/lib/aarch64-linux-gnu/libabsl_flags_commandlineflag.so /usr/lib/aarch64-linux-gnu/libabsl_flags_commandlineflag_internal.so /usr/lib/aarch64-linux-gnu/libabsl_flags_config.so /usr/lib/aarch64-linux-gnu/libabsl_flags_program_name.so /usr/lib/aarch64-linux-gnu/libabsl_raw_logging_internal.so /usr/lib/aarch64-linux-gnu/libabsl_cord.so /usr/lib/aarch64-linux-gnu/libabsl_cordz_info.so /usr/lib/aarch64-linux-gnu/libabsl_cord_internal.so /usr/lib/aarch64-linux-gnu/libabsl_cordz_functions.so /usr/lib/aarch64-linux-gnu/libabsl_cordz_handle.so /usr/lib/aarch64-linux-gnu/libabsl_crc_cord_state.so /usr/lib/aarch64-linux-gnu/libabsl_crc32c.so /usr/lib/aarch64-linux-gnu/libabsl_crc_internal.so /usr/lib/aarch64-linux-gnu/libabsl_crc_cpu_detect.so /usr/lib/aarch64-linux-gnu/libabsl_raw_hash_set.so /usr/lib/aarch64-linux-gnu/libabsl_hashtablez_sampler.so /usr/lib/aarch64-linux-gnu/libabsl_exponential_biased.so /usr/lib/aarch64-linux-gnu/libabsl_hash.so /usr/lib/aarch64-linux-gnu/libabsl_city.so /usr/lib/aarch64-linux-gnu/libabsl_bad_variant_access.so /usr/lib/aarch64-linux-gnu/libabsl_low_level_hash.so /usr/lib/aarch64-linux-gnu/libabsl_throw_delegate.so /usr/lib/aarch64-linux-gnu/libabsl_bad_optional_access.so /usr/lib/aarch64-linux-gnu/libabsl_str_format_internal.so /usr/lib/aarch64-linux-gnu/libabsl_synchronization.so /usr/lib/aarch64-linux-gnu/libabsl_graphcycles_internal.so /usr/lib/aarch64-linux-gnu/libabsl_kernel_timeout_internal.so /usr/lib/aarch64-linux-gnu/libabsl_stacktrace.so /usr/lib/aarch64-linux-gnu/libabsl_symbolize.so /usr/lib/aarch64-linux-gnu/libabsl_debugging_internal.so /usr/lib/aarch64-linux-gnu/libabsl_demangle_internal.so /usr/lib/aarch64-linux-gnu/libabsl_demangle_rust.so /usr/lib/aarch64-linux-gnu/libabsl_decode_rust_punycode.so /usr/lib/aarch64-linux-gnu/libabsl_utf8_for_code_point.so /usr/lib/aarch64-linux-gnu/libabsl_malloc_internal.so /usr/lib/aarch64-linux-gnu/libabsl_time.so /usr/lib/aarch64-linux-gnu/libabsl_civil_time.so /usr/lib/aarch64-linux-gnu/libabsl_strings.so /usr/lib/aarch64-linux-gnu/libabsl_strings_i/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-aarch64-linux-gnu' [ 64%] Built target yaramod-static nternal.so /usr/lib/aarch64-linux-gnu/libabsl_string_view.so /usr/lib/aarch64-linux-gnu/libabsl_base.so -latomic /usr/lib/aarch64-linux-gnu/librt.a /usr/lib/aarch64-linux-gnu/libabsl_spinlock_wait.so /usr/lib/aarch64-linux-gnu/libabsl_int128.so /usr/lib/aarch64-linux-gnu/libabsl_time_zone.so cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src && /usr/bin/cmake -E cmake_symlink_library libyaramod.so.3.21.0 libyaramod.so.0 libyaramod.so make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' [ 64%] Built target yaramod make -f src/python/CMakeFiles/yaramod-python.dir/build.make src/python/CMakeFiles/yaramod-python.dir/depend make -f tests/cpp/CMakeFiles/yaramod_tests.dir/build.make tests/cpp/CMakeFiles/yaramod_tests.dir/depend make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /build/reproducible-path/yaramod-3.21.0 /build/reproducible-path/yaramod-3.21.0/src/python /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src/python /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src/python/CMakeFiles/yaramod-python.dir/DependInfo.cmake "--color=" make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /build/reproducible-path/yaramod-3.21.0 /build/reproducible-path/yaramod-3.21.0/tests/cpp /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/tests/cpp /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/tests/cpp/CMakeFiles/yaramod_tests.dir/DependInfo.cmake "--color=" make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' make -f src/python/CMakeFiles/yaramod-python.dir/build.make src/python/CMakeFiles/yaramod-python.dir/build make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' make -f tests/cpp/CMakeFiles/yaramod_tests.dir/build.make tests/cpp/CMakeFiles/yaramod_tests.dir/build make[4]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' [ 67%] Building CXX object src/python/CMakeFiles/yaramod-python.dir/py_visitor.cpp.o [ 72%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/tokenstream_tests.cpp.o [ 70%] Building CXX object src/python/CMakeFiles/yaramod-python.dir/yaramod_python.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src/python && /usr/bin/c++ -DFMT_SHARED -Dyaramod_python_EXPORTS -isystem /usr/include/python3.13 -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -fvisibility=hidden -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/python/CMakeFiles/yaramod-python.dir/yaramod_python.cpp.o -MF CMakeFiles/yaramod-python.dir/yaramod_python.cpp.o.d -o CMakeFiles/yaramod-python.dir/yaramod_python.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/python/yaramod_python.cpp [ 75%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/representation_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/tests/cpp && /usr/bin/c++ -DFMT_SHARED -I/build/reproducible-path/yaramod-3.21.0/tests/cpp -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIE -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -DGTEST_HAS_PTHREAD=1 -MD -MT tests/cpp/CMakeFiles/yaramod_tests.dir/representation_tests.cpp.o -MF CMakeFiles/yaramod_tests.dir/representation_tests.cpp.o.d -o CMakeFiles/yaramod_tests.dir/representation_tests.cpp.o -c /build/reproducible-path/yaramod-3.21.0/tests/cpp/representation_tests.cpp cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src/python && /usr/bin/c++ -DFMT_SHARED -Dyaramod_python_EXPORTS -isystem /usr/include/python3.13 -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIC -fvisibility=hidden -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -MD -MT src/python/CMakeFiles/yaramod-python.dir/py_visitor.cpp.o -MF CMakeFiles/yaramod-python.dir/py_visitor.cpp.o.d -o CMakeFiles/yaramod-python.dir/py_visitor.cpp.o -c /build/reproducible-path/yaramod-3.21.0/src/python/py_visitor.cpp [ 78%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/builder_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/tests/cpp && /usr/bin/c++ -DFMT_SHARED -I/build/reproducible-path/yaramod-3.21.0/tests/cpp -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIE -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -DGTEST_HAS_PTHREAD=1 -MD -MT tests/cpp/CMakeFiles/yaramod_tests.dir/tokenstream_tests.cpp.o -MF CMakeFiles/yaramod_tests.dir/tokenstream_tests.cpp.o.d -o CMakeFiles/yaramod_tests.dir/tokenstream_tests.cpp.o -c /build/reproducible-path/yaramod-3.21.0/tests/cpp/tokenstream_tests.cpp [ 81%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/trie_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/tests/cpp && /usr/bin/c++ -DFMT_SHARED -I/build/reproducible-path/yaramod-3.21.0/tests/cpp -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIE -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -DGTEST_HAS_PTHREAD=1 -MD -MT tests/cpp/CMakeFiles/yaramod_tests.dir/builder_tests.cpp.o -MF CMakeFiles/yaramod_tests.dir/builder_tests.cpp.o.d -o CMakeFiles/yaramod_tests.dir/builder_tests.cpp.o -c /build/reproducible-path/yaramod-3.21.0/tests/cpp/builder_tests.cpp cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/tests/cpp && /usr/bin/c++ -DFMT_SHARED -I/build/reproducible-path/yaramod-3.21.0/tests/cpp -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIE -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -DGTEST_HAS_PTHREAD=1 -MD -MT tests/cpp/CMakeFiles/yaramod_tests.dir/trie_tests.cpp.o -MF CMakeFiles/yaramod_tests.dir/trie_tests.cpp.o.d -o CMakeFiles/yaramod_tests.dir/trie_tests.cpp.o -c /build/reproducible-path/yaramod-3.21.0/tests/cpp/trie_tests.cpp [ 86%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/utils_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/tests/cpp && /usr/bin/c++ -DFMT_SHARED -I/build/reproducible-path/yaramod-3.21.0/tests/cpp -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIE -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -DGTEST_HAS_PTHREAD=1 -MD -MT tests/cpp/CMakeFiles/yaramod_tests.dir/utils_tests.cpp.o -MF CMakeFiles/yaramod_tests.dir/utils_tests.cpp.o.d -o CMakeFiles/yaramod_tests.dir/utils_tests.cpp.o -c /build/reproducible-path/yaramod-3.21.0/tests/cpp/utils_tests.cpp [ 83%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/parser_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/tests/cpp && /usr/bin/c++ -DFMT_SHARED -I/build/reproducible-path/yaramod-3.21.0/tests/cpp -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIE -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -DGTEST_HAS_PTHREAD=1 -MD -MT tests/cpp/CMakeFiles/yaramod_tests.dir/parser_tests.cpp.o -MF CMakeFiles/yaramod_tests.dir/parser_tests.cpp.o.d -o CMakeFiles/yaramod_tests.dir/parser_tests.cpp.o -c /build/reproducible-path/yaramod-3.21.0/tests/cpp/parser_tests.cpp [ 89%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/visitor_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/tests/cpp && /usr/bin/c++ -DFMT_SHARED -I/build/reproducible-path/yaramod-3.21.0/tests/cpp -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIE -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -DGTEST_HAS_PTHREAD=1 -MD -MT tests/cpp/CMakeFiles/yaramod_tests.dir/visitor_tests.cpp.o -MF CMakeFiles/yaramod_tests.dir/visitor_tests.cpp.o.d -o CMakeFiles/yaramod_tests.dir/visitor_tests.cpp.o -c /build/reproducible-path/yaramod-3.21.0/tests/cpp/visitor_tests.cpp /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-aarch64-linux-gnu/tests/cpp && /usr/bin/c++ -DFMT_SHARED -I/build/reproducible-path/yaramod-3.21.0/tests/cpp -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIE -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -DGTEST_HAS_PTHREAD=1 -MD -MT tests/cpp/CMakeFiles/yaramod_tests.dir/yara_file_tests.cpp.o -MF CMakeFiles/yaramod_tests.dir/yara_file_tests.cpp.o.d -o CMakeFiles/yaramod_tests.dir/yara_file_tests.cpp.o -c /build/reproducible-path/yaramod-3.21.0/tests/cpp/yara_file_tests.cpp [ 94%] Building CXX object tests/cpp/CMakeFiles/yaramod_tests.dir/yaramod_tests.cpp.o cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/tests/cpp && /usr/bin/c++ -DFMT_SHARED -I/build/reproducible-path/yaramod-3.21.0/tests/cpp -isystem /build/reproducible-path/yaramod-3.21.0/include -isystem /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -std=gnu++17 -fPIE -Wall -Wextra -Wno-empty-body -pthread -DNOMINMAX -DGTEST_HAS_PTHREAD=1 -MD -MT tests/cpp/CMakeFiles/yaramod_tests.dir/yaramod_tests.cpp.o -MF CMakeFiles/yaramod_tests.dir/yaramod_tests.cpp.o.d -o CMakeFiles/yaramod_tests.dir/yaramod_tests.cpp.o -c /build/reproducible-path/yaramod-3.21.0/tests/cpp/yaramod_tests.cpp [ 97%] Linking CXX executable yaramod_tests cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/tests/cpp && /usr/bin/cmake -E cmake_link_script CMakeFiles/yaramod_tests.dir/link.txt --verbose=1 /usr/bin/c++ -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -Wl,-z,relro -Wl,-z,now -pthread -Wl,--push-state,--as-needed -Wl,--pop-state -Wl,--dependency-file=CMakeFiles/yaramod_tests.dir/link.d CMakeFiles/yaramod_tests.dir/tokenstream_tests.cpp.o CMakeFiles/yaramod_tests.dir/representation_tests.cpp.o CMakeFiles/yaramod_tests.dir/builder_tests.cpp.o CMakeFiles/yaramod_tests.dir/parser_tests.cpp.o CMakeFiles/yaramod_tests.dir/trie_tests.cpp.o CMakeFiles/yaramod_tests.dir/utils_tests.cpp.o CMakeFiles/yaramod_tests.dir/visitor_tests.cpp.o CMakeFiles/yaramod_tests.dir/yara_file_tests.cpp.o CMakeFiles/yaramod_tests.dir/yaramod_tests.cpp.o -o yaramod_tests -Wl,-rpath,/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src ../../src/libyaramod.so.3.21.0 /usr/lib/aarch64-linux-gnu/libre2.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_check_op.so /usr/lib/aarch64-linux-gnu/libabsl_log_severity.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_conditions.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_message.so /usr/lib/aarch64-linux-gnu/libabsl_examine_stack.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_format.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_proto.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_nullguard.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_log_sink_set.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_globals.so /usr/lib/aarch64-linux-gnu/libabsl_log_globals.so /usr/lib/aarch64-linux-gnu/libabsl_log_sink.so /usr/lib/aarch64-linux-gnu/libabsl_log_entry.so /usr/lib/aarch64-linux-gnu/libabsl_strerror.so /usr/lib/aarch64-linux-gnu/libabsl_vlog_config_internal.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_fnmatch.so /usr/lib/aarch64-linux-gnu/libabsl_flags_internal.so /usr/lib/aarch64-linux-gnu/libabsl_flags_marshalling.so /usr/lib/aarch64-linux-gnu/libabsl_flags_reflection.so /usr/lib/aarch64-linux-gnu/libabsl_flags_private_handle_accessor.so /usr/lib/aarch64-linux-gnu/libabsl_flags_commandlineflag.so /usr/lib/aarch64-linux-gnu/libabsl_flags_commandlineflag_internal.so /usr/lib/aarch64-linux-gnu/libabsl_flags_config.so /usr/lib/aarch64-linux-gnu/libabsl_flags_program_name.so /usr/lib/aarch64-linux-gnu/libabsl_raw_logging_internal.so /usr/lib/aarch64-linux-gnu/libabsl_cord.so /usr/lib/aarch64-linux-gnu/libabsl_cordz_info.so /usr/lib/aarch64-linux-gnu/libabsl_cord_internal.so /usr/lib/aarch64-linux-gnu/libabsl_cordz_functions.so /usr/lib/aarch64-linux-gnu/libabsl_cordz_handle.so /usr/lib/aarch64-linux-gnu/libabsl_crc_cord_state.so /usr/lib/aarch64-linux-gnu/libabsl_crc32c.so /usr/lib/aarch64-linux-gnu/libabsl_crc_internal.so /usr/lib/aarch64-linux-gnu/libabsl_crc_cpu_detect.so /usr/lib/aarch64-linux-gnu/libabsl_raw_hash_set.so /usr/lib/aarch64-linux-gnu/libabsl_hashtablez_sampler.so /usr/lib/aarch64-linux-gnu/libabsl_exponential_biased.so /usr/lib/aarch64-linux-gnu/libabsl_hash.so /usr/lib/aarch64-linux-gnu/libabsl_city.so /usr/lib/aarch64-linux-gnu/libabsl_bad_variant_access.so /usr/lib/aarch64-linux-gnu/libabsl_low_level_hash.so /usr/lib/aarch64-linux-gnu/libabsl_throw_delegate.so /usr/lib/aarch64-linux-gnu/libabsl_bad_optional_access.so /usr/lib/aarch64-linux-gnu/libabsl_str_format_internal.so /usr/lib/aarch64-linux-gnu/libabsl_synchronization.so /usr/lib/aarch64-linux-gnu/libabsl_graphcycles_internal.so /usr/lib/aarch64-linux-gnu/libabsl_kernel_timeout_internal.so /usr/lib/aarch64-linux-gnu/libabsl_stacktrace.so /usr/lib/aarch64-linux-gnu/libabsl_symbolize.so /usr/lib/aarch64-linux-gnu/libabsl_debugging_internal.so /usr/lib/aarch64-linux-gnu/libabsl_demangle_internal.so /usr/lib/aarch64-linux-gnu/libabsl_demangle_rust.so /usr/lib/aarch64-linux-gnu/libabsl_decode_rust_punycode.so /usr/lib/aarch64-linux-gnu/libabsl_utf8_for_code_point.so /usr/lib/aarch64-linux-gnu/libabsl_malloc_internal.so /usr/lib/aarch64-linux-gnu/libabsl_time.so /usr/lib/aarch64-linux-gnu/libabsl_civil_time.so /usr/lib/aarch64-linux-gnu/libabsl_strings.so /usr/lib/aarch64-linux-gnu/libabsl_strings_internal.so /usr/lib/aarch64-linux-gnu/libabsl_string_view.so /usr/lib/aarch64-linux-gnu/libabsl_base.so -latomic /usr/lib/aarch64-linux-gnu/librt.a /usr/lib/aarch64-linux-gnu/libabsl_spinlock_wait.so /usr/lib/aarch64-linux-gnu/libabsl_int128.so /usr/lib/aarch64-linux-gnu/libabsl_log_severity.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_conditions.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_message.so /usr/lib/aarch64-linux-gnu/libabsl_examine_stack.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_format.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_proto.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_nullguard.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_log_sink_set.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_globals.so /usr/lib/aarch64-linux-gnu/libabsl_log_globals.so /usr/lib/aarch64-linux-gnu/libabsl_log_sink.so /usr/lib/aarch64-linux-gnu/libabsl_log_entry.so /usr/lib/aarch64-linux-gnu/libabsl_strerror.so /usr/lib/aarch64-linux-gnu/libabsl_vlog_config_internal.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_fnmatch.so /usr/lib/aarch64-linux-gnu/libabsl_flags_internal.so /usr/lib/aarch64-linux-gnu/libabsl_flags_marshalling.so /usr/lib/aarch64-linux-gnu/libabsl_flags_reflection.so /usr/lib/aarch64-linux-gnu/libabsl_flags_private_handle_accessor.so /usr/lib/aarch64-linux-gnu/libabsl_flags_commandlineflag.so /usr/lib/aarch64-linux-gnu/libabsl_flags_commandlineflag_internal.so /usr/lib/aarch64-linux-gnu/libabsl_flags_config.so /usr/lib/aarch64-linux-gnu/libabsl_flags_program_name.so /usr/lib/aarch64-linux-gnu/libabsl_raw_logging_internal.so /usr/lib/aarch64-linux-gnu/libabsl_cord.so /usr/lib/aarch64-linux-gnu/libabsl_cordz_info.so /usr/lib/aarch64-linux-gnu/libabsl_cord_internal.so /usr/lib/aarch64-linux-gnu/libabsl_cordz_functions.so /usr/lib/aarch64-linux-gnu/libabsl_cordz_handle.so /usr/lib/aarch64-linux-gnu/libabsl_crc_cord_state.so /usr/lib/aarch64-linux-gnu/libabsl_crc32c.so /usr/lib/aarch64-linux-gnu/libabsl_crc_internal.so /usr/lib/aarch64-linux-gnu/libabsl_crc_cpu_detect.so /usr/lib/aarch64-linux-gnu/libabsl_raw_hash_set.so /usr/lib/aarch64-linux-gnu/libabsl_hashtablez_sampler.so /usr/lib/aarch64-linux-gnu/libabsl_exponential_biased.so /usr/lib/aarch64-linux-gnu/libabsl_hash.so /usr/lib/aarch64-linux-gnu/libabsl_city.so /usr/lib/aarch64-linux-gnu/libabsl_bad_variant_access.so /usr/lib/aarch64-linux-gnu/libabsl_low_level_hash.so /usr/lib/aarch64-linux-gnu/libabsl_throw_delegate.so /usr/lib/aarch64-linux-gnu/libabsl_bad_optional_access.so /usr/lib/aarch64-linux-gnu/libabsl_str_format_internal.so /usr/lib/aarch64-linux-gnu/libabsl_synchronization.so /usr/lib/aarch64-linux-gnu/libabsl_graphcycles_internal.so /usr/lib/aarch64-linux-gnu/libabsl_kernel_timeout_internal.so /usr/lib/aarch64-linux-gnu/libabsl_stacktrace.so /usr/lib/aarch64-linux-gnu/libabsl_symbolize.so /usr/lib/aarch64-linux-gnu/libabsl_debugging_internal.so /usr/lib/aarch64-linux-gnu/libabsl_demangle_internal.so /usr/lib/aarch64-linux-gnu/libabsl_demangle_rust.so /usr/lib/aarch64-linux-gnu/libabsl_decode_rust_punycode.so /usr/lib/aarch64-linux-gnu/libabsl_utf8_for_code_point.so /usr/lib/aarch64-linux-gnu/libabsl_malloc_internal.so /usr/lib/aarch64-linux-gnu/libabsl_time.so /usr/lib/aarch64-linux-gnu/libabsl_civil_time.so /usr/lib/aarch64-linux-gnu/libabsl_strings.so /usr/lib/aarch64-linux-gnu/libabsl_strings_internal.so /usr/lib/aarch64-linux-gnu/libabsl_string_view.so /usr/lib/aarch64-linux-gnu/libabsl_base.so -latomic /usr/lib/aarch64-linux-gnu/librt.a /usr/lib/aarch64-linux-gnu/libabsl_spinlock_wait.so /usr/lib/aarch64-linux-gnu/libabsl_int128.so /usr/lib/aarch64-linux-gnu/libabsl_time_zone.so /usr/lib/aarch64-linux-gnu/libfmt.so.10.1.0 /usr/lib/aarch64-linux-gnu/libgtest_main.a /usr/lib/aarch64-linux-gnu/libgtest.a make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' [ 97%] Built target yaramod_tests [100%] Linking CXX shared module yaramod.cpython-313-aarch64-linux-gnu.so cd /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src/python && /usr/bin/cmake -E cmake_link_script CMakeFiles/yaramod-python.dir/link.txt --verbose=1 /usr/bin/c++ -fPIC -g -O2 -ffile-prefix-map=/build/reproducible-path/yaramod-3.21.0=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -Wall -pedantic -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -pthread -Wl,--push-state,--as-needed -Wl,--pop-state -Wl,--dependency-file=CMakeFiles/yaramod-python.dir/link.d -Wl,-z,relro -Wl,-z,now -shared -o yaramod.cpython-313-aarch64-linux-gnu.so "CMakeFiles/yaramod-python.dir/yaramod_python.cpp.o" "CMakeFiles/yaramod-python.dir/py_visitor.cpp.o" ../libyaramod.so.3.21.0 /usr/lib/aarch64-linux-gnu/libre2.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_check_op.so /usr/lib/aarch64-linux-gnu/libabsl_log_severity.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_conditions.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_message.so /usr/lib/aarch64-linux-gnu/libabsl_examine_stack.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_format.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_proto.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_nullguard.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_log_sink_set.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_globals.so /usr/lib/aarch64-linux-gnu/libabsl_log_globals.so /usr/lib/aarch64-linux-gnu/libabsl_log_sink.so /usr/lib/aarch64-linux-gnu/libabsl_log_entry.so /usr/lib/aarch64-linux-gnu/libabsl_strerror.so /usr/lib/aarch64-linux-gnu/libabsl_vlog_config_internal.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_fnmatch.so /usr/lib/aarch64-linux-gnu/libabsl_flags_internal.so /usr/lib/aarch64-linux-gnu/libabsl_flags_marshalling.so /usr/lib/aarch64-linux-gnu/libabsl_flags_reflection.so /usr/lib/aarch64-linux-gnu/libabsl_flags_private_handle_accessor.so /usr/lib/aarch64-linux-gnu/libabsl_flags_commandlineflag.so /usr/lib/aarch64-linux-gnu/libabsl_flags_commandlineflag_internal.so /usr/lib/aarch64-linux-gnu/libabsl_flags_config.so /usr/lib/aarch64-linux-gnu/libabsl_flags_program_name.so /usr/lib/aarch64-linux-gnu/libabsl_raw_logging_internal.so /usr/lib/aarch64-linux-gnu/libabsl_cord.so /usr/lib/aarch64-linux-gnu/libabsl_cordz_info.so /usr/lib/aarch64-linux-gnu/libabsl_cord_internal.so /usr/lib/aarch64-linux-gnu/libabsl_cordz_functions.so /usr/lib/aarch64-linux-gnu/libabsl_cordz_handle.so /usr/lib/aarch64-linux-gnu/libabsl_crc_cord_state.so /usr/lib/aarch64-linux-gnu/libabsl_crc32c.so /usr/lib/aarch64-linux-gnu/libabsl_crc_internal.so /usr/lib/aarch64-linux-gnu/libabsl_crc_cpu_detect.so /usr/lib/aarch64-linux-gnu/libabsl_raw_hash_set.so /usr/lib/aarch64-linux-gnu/libabsl_hashtablez_sampler.so /usr/lib/aarch64-linux-gnu/libabsl_exponential_biased.so /usr/lib/aarch64-linux-gnu/libabsl_hash.so /usr/lib/aarch64-linux-gnu/libabsl_city.so /usr/lib/aarch64-linux-gnu/libabsl_bad_variant_access.so /usr/lib/aarch64-linux-gnu/libabsl_low_level_hash.so /usr/lib/aarch64-linux-gnu/libabsl_throw_delegate.so /usr/lib/aarch64-linux-gnu/libabsl_bad_optional_access.so /usr/lib/aarch64-linux-gnu/libabsl_str_format_internal.so /usr/lib/aarch64-linux-gnu/libabsl_synchronization.so /usr/lib/aarch64-linux-gnu/libabsl_graphcycles_internal.so /usr/lib/aarch64-linux-gnu/libabsl_kernel_timeout_internal.so /usr/lib/aarch64-linux-gnu/libabsl_stacktrace.so /usr/lib/aarch64-linux-gnu/libabsl_symbolize.so /usr/lib/aarch64-linux-gnu/libabsl_debugging_internal.so /usr/lib/aarch64-linux-gnu/libabsl_demangle_internal.so /usr/lib/aarch64-linux-gnu/libabsl_demangle_rust.so /usr/lib/aarch64-linux-gnu/libabsl_decode_rust_punycode.so /usr/lib/aarch64-linux-gnu/libabsl_utf8_for_code_point.so /usr/lib/aarch64-linux-gnu/libabsl_malloc_internal.so /usr/lib/aarch64-linux-gnu/libabsl_time.so /usr/lib/aarch64-linux-gnu/libabsl_civil_time.so /usr/lib/aarch64-linux-gnu/libabsl_strings.so /usr/lib/aarch64-linux-gnu/libabsl_strings_internal.so /usr/lib/aarch64-linux-gnu/libabsl_string_view.so /usr/lib/aarch64-linux-gnu/libabsl_base.so -latomic /usr/lib/aarch64-linux-gnu/librt.a /usr/lib/aarch64-linux-gnu/libabsl_spinlock_wait.so /usr/lib/aarch64-linux-gnu/libabsl_int128.so /usr/lib/aarch64-linux-gnu/libabsl_log_severity.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_conditions.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_message.so /usr/lib/aarch64-linux-gnu/libabsl_examine_stack.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_format.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_proto.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_nullguard.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_log_sink_set.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_globals.so /usr/lib/aarch64-linux-gnu/libabsl_log_globals.so /usr/lib/aarch64-linux-gnu/libabsl_log_sink.so /usr/lib/aarch64-linux-gnu/libabsl_log_entry.so /usr/lib/aarch64-linux-gnu/libabsl_strerror.so /usr/lib/aarch64-linux-gnu/libabsl_vlog_config_internal.so /usr/lib/aarch64-linux-gnu/libabsl_log_internal_fnmatch.so /usr/lib/aarch64-linux-gnu/libabsl_flags_internal.so /usr/lib/aarch64-linux-gnu/libabsl_flags_marshalling.so /usr/lib/aarch64-linux-gnu/libabsl_flags_reflection.so /usr/lib/aarch64-linux-gnu/libabsl_flags_private_handle_accessor.so /usr/lib/aarch64-linux-gnu/libabsl_flags_commandlineflag.so /usr/lib/aarch64-linux-gnu/libabsl_flags_commandlineflag_internal.so /usr/lib/aarch64-linux-gnu/libabsl_flags_config.so /usr/lib/aarch64-linux-gnu/libabsl_flags_program_name.so /usr/lib/aarch64-linux-gnu/libabsl_raw_logging_internal.so /usr/lib/aarch64-linux-gnu/libabsl_cord.so /usr/lib/aarch64-linux-gnu/libabsl_cordz_info.so /usr/lib/aarch64-linux-gnu/libabsl_cord_internal.so /usr/lib/aarch64-linux-gnu/libabsl_cordz_functions.so /usr/lib/aarch64-linux-gnu/libabsl_cordz_handle.so /usr/lib/aarch64-linux-gnu/libabsl_crc_cord_state.so /usr/lib/aarch64-linux-gnu/libabsl_crc32c.so /usr/lib/aarch64-linux-gnu/libabsl_crc_internal.so /usr/lib/aarch64-linux-gnu/libabsl_crc_cpu_detect.so /usr/lib/aarch64-linux-gnu/libabsl_raw_hash_set.so /usr/lib/aarch64-linux-gnu/libabsl_hashtablez_sampler.so /usr/lib/aarch64-linux-gnu/libabsl_exponential_biased.so /usr/lib/aarch64-linux-gnu/libabsl_hash.so /usr/lib/aarch64-linux-gnu/libabsl_city.so /usr/lib/aarch64-linux-gnu/libabsl_bad_variant_access.so /usr/lib/aarch64-linux-gnu/libabsl_low_level_hash.so /usr/lib/aarch64-linux-gnu/libabsl_throw_delegate.so /usr/lib/aarch64-linux-gnu/libabsl_bad_optional_access.so /usr/lib/aarch64-linux-gnu/libabsl_str_format_internal.so /usr/lib/aarch64-linux-gnu/libabsl_synchronization.so /usr/lib/aarch64-linux-gnu/libabsl_graphcycles_internal.so /usr/lib/aarch64-linux-gnu/libabsl_kernel_timeout_internal.so /usr/lib/aarch64-linux-gnu/libabsl_stacktrace.so /usr/lib/aarch64-linux-gnu/libabsl_symbolize.so /usr/lib/aarch64-linux-gnu/libabsl_debugging_internal.so /usr/lib/aarch64-linux-gnu/libabsl_demangle_internal.so /usr/lib/aarch64-linux-gnu/libabsl_demangle_rust.so /usr/lib/aarch64-linux-gnu/libabsl_decode_rust_punycode.so /usr/lib/aarch64-linux-gnu/libabsl_utf8_for_code_point.so /usr/lib/aarch64-linux-gnu/libabsl_malloc_internal.so /usr/lib/aarch64-linux-gnu/libabsl_time.so /usr/lib/aarch64-linux-gnu/libabsl_civil_time.so /usr/lib/aarch64-linux-gnu/libabsl_strings.so /usr/lib/aarch64-linux-gnu/libabsl_strings_internal.so /usr/lib/aarch64-linux-gnu/libabsl_string_view.so /usr/lib/aarch64-linux-gnu/libabsl_base.so -latomic /usr/lib/aarch64-linux-gnu/librt.a /usr/lib/aarch64-linux-gnu/libabsl_spinlock_wait.so /usr/lib/aarch64-linux-gnu/libabsl_int128.so /usr/lib/aarch64-linux-gnu/libabsl_time_zone.so /usr/lib/aarch64-linux-gnu/libfmt.so.10.1.0 make[4]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' [100%] Built target yaramod-python make[3]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' /usr/bin/cmake -E cmake_progress_start /build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/CMakeFiles 0 make[2]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' cp obj-aarch64-linux-gnu/src/python/yaramod.cpython-*.so .pybuild/cpython3_*/build/ dh_auto_build -a -O--buildsystem=pybuild I: pybuild base:311: /usr/bin/python3 setup.py build /usr/lib/python3/dist-packages/setuptools/dist.py:493: SetuptoolsDeprecationWarning: Invalid dash-separated options !! ******************************************************************************** Usage of dash-separated 'description-file' will not be supported in future versions. Please use the underscore name 'description_file' instead. This deprecation is overdue, please update your project and remove deprecated calls to avoid build errors in the future. See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details. ******************************************************************************** !! opt = self.warn_dash_deprecation(opt, section) running build running build_py creating /build/reproducible-path/yaramod-3.21.0/.pybuild/cpython3_3.13/build/yaramod copying src/python/typings/__init__.pyi -> /build/reproducible-path/yaramod-3.21.0/.pybuild/cpython3_3.13/build/yaramod copying src/python/typings/py.typed -> /build/reproducible-path/yaramod-3.21.0/.pybuild/cpython3_3.13/build/yaramod running build_ext make[1]: Leaving directory '/build/reproducible-path/yaramod-3.21.0' debian/rules override_dh_auto_test-arch make[1]: Entering directory '/build/reproducible-path/yaramod-3.21.0' ./obj-aarch64-linux-gnu/tests/cpp/yaramod_tests Running main() from ./googletest/src/gtest_main.cc [==========] Running 398 tests from 9 test suites. [----------] Global test environment set-up. [----------] 19 tests from TokenStreamTests [ RUN ] TokenStreamTests.BoolLiteral [ OK ] TokenStreamTests.BoolLiteral (0 ms) [ RUN ] TokenStreamTests.TokenStreamFindSimple [ OK ] TokenStreamTests.TokenStreamFindSimple (0 ms) [ RUN ] TokenStreamTests.TokenStreamFind [ OK ] TokenStreamTests.TokenStreamFind (0 ms) [ RUN ] TokenStreamTests.TokenStreamFindBackwardsSimple [ OK ] TokenStreamTests.TokenStreamFindBackwardsSimple (0 ms) [ RUN ] TokenStreamTests.TokenStreamFindBackwards [ OK ] TokenStreamTests.TokenStreamFindBackwards (0 ms) [ RUN ] TokenStreamTests.TokenStreamEmplaceBack [ OK ] TokenStreamTests.TokenStreamEmplaceBack (0 ms) [ RUN ] TokenStreamTests.TokenStreamEmplace [ OK ] TokenStreamTests.TokenStreamEmplace (0 ms) [ RUN ] TokenStreamTests.TokenStreamPushBack [ OK ] TokenStreamTests.TokenStreamPushBack (0 ms) [ RUN ] TokenStreamTests.TokenStreamErase [ OK ] TokenStreamTests.TokenStreamErase (0 ms) [ RUN ] TokenStreamTests.TokenStreamSwapTokensWithDifferentTokenStreams [ OK ] TokenStreamTests.TokenStreamSwapTokensWithDifferentTokenStreams (0 ms) [ RUN ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusion1 [ OK ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusion1 (0 ms) [ RUN ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusion2 [ OK ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusion2 (0 ms) [ RUN ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusionTouching1 [ OK ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusionTouching1 (0 ms) [ RUN ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusionTouching2 [ OK ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusionTouching2 (0 ms) [ RUN ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusionInvalid [ OK ] TokenStreamTests.TokenStreamSwapTokensWithinTheSameTokenStreamInclusionInvalid (1 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 (21 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 (93 ms) [ RUN ] BuilderTests.PureImportsWorks [ OK ] BuilderTests.PureImportsWorks (89 ms) [ RUN ] BuilderTests.PureImportsComplicateWorks [ OK ] BuilderTests.PureImportsComplicateWorks (77 ms) [ RUN ] BuilderTests.UnnamedRuleWorks [ OK ] BuilderTests.UnnamedRuleWorks (125 ms) [ RUN ] BuilderTests.UnnamedRuleWithImportsWorks [ OK ] BuilderTests.UnnamedRuleWithImportsWorks (120 ms) [ RUN ] BuilderTests.UnnamedRuleWithImportsWorks2 [ OK ] BuilderTests.UnnamedRuleWithImportsWorks2 (116 ms) [ RUN ] BuilderTests.RuleWithCustomNameWorks [ OK ] BuilderTests.RuleWithCustomNameWorks (85 ms) [ RUN ] BuilderTests.RuleWithMetasWorks [ OK ] BuilderTests.RuleWithMetasWorks (117 ms) [ RUN ] BuilderTests.RuleWithVariablesWorks [ OK ] BuilderTests.RuleWithVariablesWorks (121 ms) [ RUN ] BuilderTests.RuleWithEmptyStringMetaValueWorks [ OK ] BuilderTests.RuleWithEmptyStringMetaValueWorks (117 ms) [ RUN ] BuilderTests.RuleWithTagsWorks [ OK ] BuilderTests.RuleWithTagsWorks (59 ms) [ RUN ] BuilderTests.RuleWithModifierWorks [ OK ] BuilderTests.RuleWithModifierWorks (75 ms) [ RUN ] BuilderTests.RuleWithOnelineCommentWorks [ OK ] BuilderTests.RuleWithOnelineCommentWorks (56 ms) [ RUN ] BuilderTests.RuleWithMultilineCommentWorks [ OK ] BuilderTests.RuleWithMultilineCommentWorks (48 ms) [ RUN ] BuilderTests.RuleWithPlainStringWorks [ OK ] BuilderTests.RuleWithPlainStringWorks (61 ms) [ RUN ] BuilderTests.RuleWithPlainStringPureWideWorks [ OK ] BuilderTests.RuleWithPlainStringPureWideWorks (79 ms) [ RUN ] BuilderTests.MultipleRulesWorks [ OK ] BuilderTests.MultipleRulesWorks (77 ms) [ RUN ] BuilderTests.RuleWithCustomConditionWorks [ OK ] BuilderTests.RuleWithCustomConditionWorks (120 ms) [ RUN ] BuilderTests.RuleWithConditionWithSymbolsWorks [ OK ] BuilderTests.RuleWithConditionWithSymbolsWorks (85 ms) [ RUN ] BuilderTests.RuleWithHexStringWorks [ OK ] BuilderTests.RuleWithHexStringWorks (129 ms) [ RUN ] BuilderTests.RuleWithDictForConditionWorks [ OK ] BuilderTests.RuleWithDictForConditionWorks (112 ms) [ RUN ] BuilderTests.RuleWithStringForConditionWorks [ OK ] BuilderTests.RuleWithStringForConditionWorks (85 ms) [ RUN ] BuilderTests.RuleWithOfWorks [ OK ] BuilderTests.RuleWithOfWorks (81 ms) [ RUN ] BuilderTests.RuleWithRangeWorks [ OK ] BuilderTests.RuleWithRangeWorks (56 ms) [ RUN ] BuilderTests.RuleWithOfAtWorks [ OK ] BuilderTests.RuleWithOfAtWorks (81 ms) [ RUN ] BuilderTests.RuleWithStructureWorks [ OK ] BuilderTests.RuleWithStructureWorks (81 ms) [ RUN ] BuilderTests.RuleWithConditionWithOnelineComment [ OK ] BuilderTests.RuleWithConditionWithOnelineComment (80 ms) [ RUN ] BuilderTests.RuleWithConditionWithMultilineComment [ OK ] BuilderTests.RuleWithConditionWithMultilineComment (76 ms) [ RUN ] BuilderTests.RuleWithArrayAndStructureWorks [ OK ] BuilderTests.RuleWithArrayAndStructureWorks (57 ms) [ RUN ] BuilderTests.RuleWithFunctionCallWorks [ OK ] BuilderTests.RuleWithFunctionCallWorks (73 ms) [ RUN ] BuilderTests.RuleWithIntFunctionWorks [ OK ] BuilderTests.RuleWithIntFunctionWorks (55 ms) [ RUN ] BuilderTests.RuleWithArithmeticOperationsWorks [ OK ] BuilderTests.RuleWithArithmeticOperationsWorks (81 ms) [ RUN ] BuilderTests.RuleWithArithmeticOperationsWithDoubleValuesWorks [ OK ] BuilderTests.RuleWithArithmeticOperationsWithDoubleValuesWorks (53 ms) [ RUN ] BuilderTests.RuleWithBitwiseOperationsWorks [ OK ] BuilderTests.RuleWithBitwiseOperationsWorks (81 ms) [ RUN ] BuilderTests.RuleWithLogicOperationsWorks [ OK ] BuilderTests.RuleWithLogicOperationsWorks (65 ms) [ RUN ] BuilderTests.RuleWithIntMultpliersWorks [ OK ] BuilderTests.RuleWithIntMultpliersWorks (80 ms) [ RUN ] BuilderTests.RuleWithStringOperatorsWorks [ OK ] BuilderTests.RuleWithStringOperatorsWorks (57 ms) [ RUN ] BuilderTests.RuleWithRegexpWorks [ OK ] BuilderTests.RuleWithRegexpWorks (81 ms) [ RUN ] BuilderTests.RuleWithRegexpInConditionWorks [ OK ] BuilderTests.RuleWithRegexpInConditionWorks (61 ms) [ RUN ] BuilderTests.RuleWithConjunctionInConditionWorks [ OK ] BuilderTests.RuleWithConjunctionInConditionWorks (81 ms) [ RUN ] BuilderTests.RuleWithDisjunctionInConditionWorks [ OK ] BuilderTests.RuleWithDisjunctionInConditionWorks (59 ms) [ RUN ] BuilderTests.RuleWithConjunctionWithLinebreaksInConditionWorks [ OK ] BuilderTests.RuleWithConjunctionWithLinebreaksInConditionWorks (80 ms) [ RUN ] BuilderTests.RuleWithDisjunctionWithLinebreaksInConditionWorks [ OK ] BuilderTests.RuleWithDisjunctionWithLinebreaksInConditionWorks (82 ms) [ RUN ] BuilderTests.RuleWithCommentedConjunctionInConditionWorks [ OK ] BuilderTests.RuleWithCommentedConjunctionInConditionWorks (117 ms) [ RUN ] BuilderTests.RuleWithCommentedDisjunctionInConditionWorks [ OK ] BuilderTests.RuleWithCommentedDisjunctionInConditionWorks (53 ms) [ RUN ] BuilderTests.RuleWithParenthesesWithLinebreaksInConditionWorks [ OK ] BuilderTests.RuleWithParenthesesWithLinebreaksInConditionWorks (65 ms) [ RUN ] BuilderTests.RuleWithEscapedSequencesWorks [ OK ] BuilderTests.RuleWithEscapedSequencesWorks (54 ms) [ RUN ] BuilderTests.RuleWithNoneOfThemExpression [ OK ] BuilderTests.RuleWithNoneOfThemExpression (77 ms) [ RUN ] BuilderTests.RuleWithNoneOfThemInRangeWorks [ OK ] BuilderTests.RuleWithNoneOfThemInRangeWorks (54 ms) [ RUN ] BuilderTests.RuleWithStringsWithDifferentKindsOfModifiers [ OK ] BuilderTests.RuleWithStringsWithDifferentKindsOfModifiers (84 ms) [ RUN ] BuilderTests.RuleWithXorStringModifierOutOfBounds [ OK ] BuilderTests.RuleWithXorStringModifierOutOfBounds (39 ms) [ RUN ] BuilderTests.RuleWithXorStringModifierOutOfBoundsLowerKey [ OK ] BuilderTests.RuleWithXorStringModifierOutOfBoundsLowerKey (40 ms) [ RUN ] BuilderTests.RuleWithXorStringModifierOutOfBoundsHigherKey [ OK ] BuilderTests.RuleWithXorStringModifierOutOfBoundsHigherKey (39 ms) [ RUN ] BuilderTests.RuleWithXorStringModifierLowerBoundGreaterThanHigherBound [ OK ] BuilderTests.RuleWithXorStringModifierLowerBoundGreaterThanHigherBound (40 ms) [ RUN ] BuilderTests.ConjunctionWithSingleTerm [ OK ] BuilderTests.ConjunctionWithSingleTerm (77 ms) [ RUN ] BuilderTests.DefinedTerm [ OK ] BuilderTests.DefinedTerm (76 ms) [ RUN ] BuilderTests.PercentageOfStringSet [ OK ] BuilderTests.PercentageOfStringSet (80 ms) [ RUN ] BuilderTests.FloatValueWorks [ OK ] BuilderTests.FloatValueWorks (80 ms) [ RUN ] BuilderTests.IequalsWorks [ OK ] BuilderTests.IequalsWorks (77 ms) [ RUN ] BuilderTests.IdWildcardWorks [ OK ] BuilderTests.IdWildcardWorks (76 ms) [ RUN ] BuilderTests.StringAsBoolInConditionWorks [ OK ] BuilderTests.StringAsBoolInConditionWorks (137 ms) [ RUN ] BuilderTests.IcontainsWorks [ OK ] BuilderTests.IcontainsWorks (80 ms) [ RUN ] BuilderTests.IendsWithWorks [ OK ] BuilderTests.IendsWithWorks (80 ms) [ RUN ] BuilderTests.IstartsWithWorks [ OK ] BuilderTests.IstartsWithWorks (91 ms) [ RUN ] BuilderTests.StartsWithWorks [ OK ] BuilderTests.StartsWithWorks (119 ms) [ RUN ] BuilderTests.EndsWithWorks [ OK ] BuilderTests.EndsWithWorks (120 ms) [----------] 66 tests from BuilderTests (5516 ms total) [----------] 256 tests from ParserTests [ RUN ] ParserTests.EmptyInputWorks [ OK ] ParserTests.EmptyInputWorks (59 ms) [ RUN ] ParserTests.EmptyRuleWorks [ OK ] ParserTests.EmptyRuleWorks (60 ms) [ RUN ] ParserTests.RulesWithSameNameForbidden [ OK ] ParserTests.RulesWithSameNameForbidden (56 ms) [ RUN ] ParserTests.RuleWithTagsWorks [ OK ] ParserTests.RuleWithTagsWorks (60 ms) [ RUN ] ParserTests.RuleWithMetasWorks [ OK ] ParserTests.RuleWithMetasWorks (62 ms) [ RUN ] ParserTests.RuleWithRepetitiveMetasWorks [ OK ] ParserTests.RuleWithRepetitiveMetasWorks (61 ms) [ RUN ] ParserTests.HexAndDecimalIntegersArePreservedWorks [ OK ] ParserTests.HexAndDecimalIntegersArePreservedWorks (56 ms) [ RUN ] ParserTests.RuleWithVariablesWorks [ OK ] ParserTests.RuleWithVariablesWorks (68 ms) [ RUN ] ParserTests.VariableInConditionWorks [ OK ] ParserTests.VariableInConditionWorks (76 ms) [ RUN ] ParserTests.RuleWithNoStringsDoesntWork [ OK ] ParserTests.RuleWithNoStringsDoesntWork (71 ms) [ RUN ] ParserTests.RuleWithPlainTextStringsWorks [ OK ] ParserTests.RuleWithPlainTextStringsWorks (54 ms) [ RUN ] ParserTests.MultipleRulesWorks [ OK ] ParserTests.MultipleRulesWorks (60 ms) [ RUN ] ParserTests.RuleWithPlainTextStringWithModifiersWorks [ OK ] ParserTests.RuleWithPlainTextStringWithModifiersWorks (59 ms) [ RUN ] ParserTests.DuplicatedStringModifierForbidden [ OK ] ParserTests.DuplicatedStringModifierForbidden (61 ms) [ RUN ] ParserTests.InvalidStringModifiersCombination [ OK ] ParserTests.InvalidStringModifiersCombination (60 ms) [ RUN ] ParserTests.MultipleBase64AlphabetsForbidden [ OK ] ParserTests.MultipleBase64AlphabetsForbidden (62 ms) [ RUN ] ParserTests.HexStringWithPlainNibbleWorks [ OK ] ParserTests.HexStringWithPlainNibbleWorks (80 ms) [ RUN ] ParserTests.HexStringWithPlainNibblesWorks [ OK ] ParserTests.HexStringWithPlainNibblesWorks (80 ms) [ RUN ] ParserTests.HexStringWithLowHighJumpWorks [ OK ] ParserTests.HexStringWithLowHighJumpWorks (80 ms) [ RUN ] ParserTests.HexStringWithLowJumpWorks [ OK ] ParserTests.HexStringWithLowJumpWorks (80 ms) [ RUN ] ParserTests.HexStringWithUnrestrictedJumpWorks [ OK ] ParserTests.HexStringWithUnrestrictedJumpWorks (80 ms) [ RUN ] ParserTests.HexStringWithConstantJumpWorks [ OK ] ParserTests.HexStringWithConstantJumpWorks (80 ms) [ RUN ] ParserTests.HexStringWithSimpleOrWorks [ OK ] ParserTests.HexStringWithSimpleOrWorks (80 ms) [ RUN ] ParserTests.HexStringWithMultibyteSimpleOrWorks [ OK ] ParserTests.HexStringWithMultibyteSimpleOrWorks (81 ms) [ RUN ] ParserTests.HexStringWithNestedOrWorks [ OK ] ParserTests.HexStringWithNestedOrWorks (80 ms) [ RUN ] ParserTests.HexStringWithOrAndJumpWorks [ OK ] ParserTests.HexStringWithOrAndJumpWorks (81 ms) [ RUN ] ParserTests.HexStringWithOrOnTheBeginningAndEnd [ OK ] ParserTests.HexStringWithOrOnTheBeginningAndEnd (80 ms) [ RUN ] ParserTests.HexStringWithJumpAtBeginningForbidden [ OK ] ParserTests.HexStringWithJumpAtBeginningForbidden (79 ms) [ RUN ] ParserTests.HexStringWithJumpAtEndForbidden [ OK ] ParserTests.HexStringWithJumpAtEndForbidden (80 ms) [ RUN ] ParserTests.MultipleRulesWithHexStrings [ OK ] ParserTests.MultipleRulesWithHexStrings (79 ms) [ RUN ] ParserTests.InvalidHexStringAtom1 [ OK ] ParserTests.InvalidHexStringAtom1 (87 ms) [ RUN ] ParserTests.InvalidHexStringAtom2 [ OK ] ParserTests.InvalidHexStringAtom2 (80 ms) [ RUN ] ParserTests.InvalidHexStringOr [ OK ] ParserTests.InvalidHexStringOr (100 ms) [ RUN ] ParserTests.RegexpWithJustCharsWorks [ OK ] ParserTests.RegexpWithJustCharsWorks (52 ms) [ RUN ] ParserTests.MultipleRegexpsWithJustCharsWorks [ OK ] ParserTests.MultipleRegexpsWithJustCharsWorks (57 ms) [ RUN ] ParserTests.RegexpLimitedToWholeLineWorks [ OK ] ParserTests.RegexpLimitedToWholeLineWorks (69 ms) [ RUN ] ParserTests.RegexpWithPredefinedClassesWorks [ OK ] ParserTests.RegexpWithPredefinedClassesWorks (80 ms) [ RUN ] ParserTests.RegexpWithCustomClassWorks [ OK ] ParserTests.RegexpWithCustomClassWorks (80 ms) [ RUN ] ParserTests.RegexpWithCustomNegativeClassWorks [ OK ] ParserTests.RegexpWithCustomNegativeClassWorks (81 ms) [ RUN ] ParserTests.RegexpWithOptionalEscapedCharsWorks [ OK ] ParserTests.RegexpWithOptionalEscapedCharsWorks (76 ms) [ RUN ] ParserTests.RegexpWithEscapedSquareBracketsInsideClassWorks [ OK ] ParserTests.RegexpWithEscapedSquareBracketsInsideClassWorks (80 ms) [ RUN ] ParserTests.RegexpWithUnescapedSquareBracketsInsideClassWorks [ OK ] ParserTests.RegexpWithUnescapedSquareBracketsInsideClassWorks (80 ms) [ RUN ] ParserTests.RegexpWithEmptyAlternationGroupWorks [ OK ] ParserTests.RegexpWithEmptyAlternationGroupWorks (81 ms) [ RUN ] ParserTests.InvalidCuckooRuleAccessTokenStream [ OK ] ParserTests.InvalidCuckooRuleAccessTokenStream (80 ms) [ RUN ] ParserTests.ComplicatedRegexpClassWorks [ OK ] ParserTests.ComplicatedRegexpClassWorks (81 ms) [ RUN ] ParserTests.RegexpWithIterationWorks [ OK ] ParserTests.RegexpWithIterationWorks (76 ms) [ RUN ] ParserTests.RegexpWithPositiveIterationWorks [ OK ] ParserTests.RegexpWithPositiveIterationWorks (80 ms) [ RUN ] ParserTests.RegexpWithOptionalWorks [ OK ] ParserTests.RegexpWithOptionalWorks (80 ms) [ RUN ] ParserTests.RegexpWithRangesWorks [ OK ] ParserTests.RegexpWithRangesWorks (81 ms) [ RUN ] ParserTests.RegexpWithGreedyOperatorsWorks [ OK ] ParserTests.RegexpWithGreedyOperatorsWorks (80 ms) [ RUN ] ParserTests.RegexpWithGroupsWorks [ OK ] ParserTests.RegexpWithGroupsWorks (75 ms) [ RUN ] ParserTests.RegexpWithOrWorks [ OK ] ParserTests.RegexpWithOrWorks (81 ms) [ RUN ] ParserTests.RegexpWithModifiersWorks [ OK ] ParserTests.RegexpWithModifiersWorks (80 ms) [ RUN ] ParserTests.RegexpWithUndefinedRangeForbidden [ OK ] ParserTests.RegexpWithUndefinedRangeForbidden (89 ms) [ RUN ] ParserTests.RegexpWithInvalidRangeForbidden [ OK ] ParserTests.RegexpWithInvalidRangeForbidden (101 ms) [ RUN ] ParserTests.RulesWithVariablesAndStringsWork [ OK ] ParserTests.RulesWithVariablesAndStringsWork (80 ms) [ RUN ] ParserTests.RuleWithUnorderedSections [ OK ] ParserTests.RuleWithUnorderedSections (80 ms) [ RUN ] ParserTests.GlobalRuleModifierWorks [ OK ] ParserTests.GlobalRuleModifierWorks (72 ms) [ RUN ] ParserTests.PrivateRuleModifierWorks [ OK ] ParserTests.PrivateRuleModifierWorks (81 ms) [ RUN ] ParserTests.PrivateGlobalRuleModifierWorks [ OK ] ParserTests.PrivateGlobalRuleModifierWorks (80 ms) [ RUN ] ParserTests.SetRuleModifierWorks [ OK ] ParserTests.SetRuleModifierWorks (76 ms) [ RUN ] ParserTests.SetRuleModifierWorksWithDeleting [ OK ] ParserTests.SetRuleModifierWorksWithDeleting (81 ms) [ RUN ] ParserTests.ImportWorks [ OK ] ParserTests.ImportWorks (69 ms) [ RUN ] ParserTests.ImportOfUnrecognizedModuleForbidden [ OK ] ParserTests.ImportOfUnrecognizedModuleForbidden (81 ms) [ RUN ] ParserTests.TrueConditionWorks [ OK ] ParserTests.TrueConditionWorks (80 ms) [ RUN ] ParserTests.FalseConditionWorks [ OK ] ParserTests.FalseConditionWorks (80 ms) [ RUN ] ParserTests.StringIdConditionWorks [ OK ] ParserTests.StringIdConditionWorks (81 ms) [ RUN ] ParserTests.StringAtEntryPointConditionWorks [ OK ] ParserTests.StringAtEntryPointConditionWorks (80 ms) [ RUN ] ParserTests.StringInRangeConditionWorks [ OK ] ParserTests.StringInRangeConditionWorks (81 ms) [ RUN ] ParserTests.StringInRangeConditionWorks2 [ OK ] ParserTests.StringInRangeConditionWorks2 (76 ms) [ RUN ] ParserTests.NotConditionWorks [ OK ] ParserTests.NotConditionWorks (66 ms) [ RUN ] ParserTests.AndConditionWorks [ OK ] ParserTests.AndConditionWorks (61 ms) [ RUN ] ParserTests.AndConditionWorks2 [ OK ] ParserTests.AndConditionWorks2 (57 ms) [ RUN ] ParserTests.OrConditionWorks [ OK ] ParserTests.OrConditionWorks (61 ms) [ RUN ] ParserTests.EscapedOrConditionWorks [ OK ] ParserTests.EscapedOrConditionWorks (56 ms) [ RUN ] ParserTests.RelationalConditionWorks [ OK ] ParserTests.RelationalConditionWorks (65 ms) [ RUN ] ParserTests.ParenthesesConditionWorks [ OK ] ParserTests.ParenthesesConditionWorks (59 ms) [ RUN ] ParserTests.ArithmeticOpConditionWorksSimple [ OK ] ParserTests.ArithmeticOpConditionWorksSimple (68 ms) [ RUN ] ParserTests.ArithmeticOpConditionWorks [ OK ] ParserTests.ArithmeticOpConditionWorks (52 ms) [ RUN ] ParserTests.ArithmeticOpConditionWorks2 [ OK ] ParserTests.ArithmeticOpConditionWorks2 (61 ms) [ RUN ] ParserTests.BitwiseOpConditionNegation [ OK ] ParserTests.BitwiseOpConditionNegation (60 ms) [ RUN ] ParserTests.BitwiseOpConditionWorks [ OK ] ParserTests.BitwiseOpConditionWorks (57 ms) [ RUN ] ParserTests.IntFunctionConditionWorks [ OK ] ParserTests.IntFunctionConditionWorks (61 ms) [ RUN ] ParserTests.DoubleInConditionWorks [ OK ] ParserTests.DoubleInConditionWorks (60 ms) [ RUN ] ParserTests.ContainsInConditionWorks [ OK ] ParserTests.ContainsInConditionWorks (61 ms) [ RUN ] ParserTests.MatchesInConditionWorks [ OK ] ParserTests.MatchesInConditionWorks (60 ms) [ RUN ] ParserTests.StringCountConditionWorks [ OK ] ParserTests.StringCountConditionWorks (45 ms) [ RUN ] ParserTests.StringOffsetConditionWorks [ OK ] ParserTests.StringOffsetConditionWorks (36 ms) [ RUN ] ParserTests.HexadecimalNumbersInConditionWorks [ OK ] ParserTests.HexadecimalNumbersInConditionWorks (41 ms) [ RUN ] ParserTests.StringLengthConditionWorks [ OK ] ParserTests.StringLengthConditionWorks (40 ms) [ RUN ] ParserTests.FunctionCallConditionWorks [ OK ] ParserTests.FunctionCallConditionWorks (41 ms) [ RUN ] ParserTests.StructureAccessConditionWorks [ OK ] ParserTests.StructureAccessConditionWorks (40 ms) [ RUN ] ParserTests.ArrayAccessConditionWorks1 [ OK ] ParserTests.ArrayAccessConditionWorks1 (40 ms) [ RUN ] ParserTests.ArrayAccessConditionWorks2 [ OK ] ParserTests.ArrayAccessConditionWorks2 (40 ms) [ RUN ] ParserTests.ForIntegerSetConditionWorks [ OK ] ParserTests.ForIntegerSetConditionWorks (40 ms) [ RUN ] ParserTests.ForArrayConditionWorks [ OK ] ParserTests.ForArrayConditionWorks (41 ms) [ RUN ] ParserTests.NestedForArrayConditionWorks [ OK ] ParserTests.NestedForArrayConditionWorks (39 ms) [ RUN ] ParserTests.UserDefinedArrayWorks [ OK ] ParserTests.UserDefinedArrayWorks (39 ms) [ RUN ] ParserTests.ForDictConditionWorks [ OK ] ParserTests.ForDictConditionWorks (33 ms) [ RUN ] ParserTests.ForStringSetConditionWorks [ OK ] ParserTests.ForStringSetConditionWorks (36 ms) [ RUN ] ParserTests.ForStringLiteralSetConditionWorks [ OK ] ParserTests.ForStringLiteralSetConditionWorks (37 ms) [ RUN ] ParserTests.ForStringLiteralSetWithOneStringConditionWorks [ OK ] ParserTests.ForStringLiteralSetWithOneStringConditionWorks (45 ms) [ RUN ] ParserTests.ForStringLiteralSetWithStringSymbolsConditionWorks [ OK ] ParserTests.ForStringLiteralSetWithStringSymbolsConditionWorks (31 ms) [ RUN ] ParserTests.ForExpressionSetWithItemsVariousTypesForbidden [ OK ] ParserTests.ForExpressionSetWithItemsVariousTypesForbidden (41 ms) [ RUN ] ParserTests.NoneOfThemConditionWorks [ OK ] ParserTests.NoneOfThemConditionWorks (40 ms) [ RUN ] ParserTests.NoneOfSetConditionWorks [ OK ] ParserTests.NoneOfSetConditionWorks (40 ms) [ RUN ] ParserTests.OfConditionWorks [ OK ] ParserTests.OfConditionWorks (36 ms) [ RUN ] ParserTests.OfAtConditionWorks [ OK ] ParserTests.OfAtConditionWorks (39 ms) [ RUN ] ParserTests.OfAtWithStringSetConditionWorks [ OK ] ParserTests.OfAtWithStringSetConditionWorks (40 ms) [ RUN ] ParserTests.OfWithStringSetAndAtWithExpressionConditionWorks [ OK ] ParserTests.OfWithStringSetAndAtWithExpressionConditionWorks (40 ms) [ RUN ] ParserTests.EmptyStringMetaValue [ OK ] ParserTests.EmptyStringMetaValue (37 ms) [ RUN ] ParserTests.EmptyPlainStringValue [ OK ] ParserTests.EmptyPlainStringValue (40 ms) [ RUN ] ParserTests.EmptyStringInConditionWorks [ OK ] ParserTests.EmptyStringInConditionWorks (40 ms) [ RUN ] ParserTests.StringsAndArithmeticOperationsForbidden [ OK ] ParserTests.StringsAndArithmeticOperationsForbidden (45 ms) [ RUN ] ParserTests.BoolAndArithmeticOperationsForbidden [ OK ] ParserTests.BoolAndArithmeticOperationsForbidden (38 ms) [ RUN ] ParserTests.ContainsAndNonStringForbidden [ OK ] ParserTests.ContainsAndNonStringForbidden (40 ms) [ RUN ] ParserTests.UndefinedStringReferenceForbidden [ OK ] ParserTests.UndefinedStringReferenceForbidden (41 ms) [ RUN ] ParserTests.StringWildcardConditionWorks [ OK ] ParserTests.StringWildcardConditionWorks (31 ms) [ RUN ] ParserTests.StringWildcardConditionWithNoMatchingStringForbidden [ OK ] ParserTests.StringWildcardConditionWithNoMatchingStringForbidden (41 ms) [ RUN ] ParserTests.SameVariableInNestedForLoopsForbidden [ OK ] ParserTests.SameVariableInNestedForLoopsForbidden (36 ms) [ RUN ] ParserTests.FloatValueWorks [ OK ] ParserTests.FloatValueWorks (41 ms) [ RUN ] ParserTests.FloatValueWorks2 [ OK ] ParserTests.FloatValueWorks2 (40 ms) [ RUN ] ParserTests.ConsoleModuleWorks [ OK ] ParserTests.ConsoleModuleWorks (37 ms) [ RUN ] ParserTests.CuckooModuleWorks [ OK ] ParserTests.CuckooModuleWorks (40 ms) [ RUN ] ParserTests.DotnetModuleWorks [ OK ] ParserTests.DotnetModuleWorks (38 ms) [ RUN ] ParserTests.DexModuleWorks [ OK ] ParserTests.DexModuleWorks (37 ms) [ RUN ] ParserTests.ElfModuleWorks [ OK ] ParserTests.ElfModuleWorks (40 ms) [ RUN ] ParserTests.HashModuleWorks [ OK ] ParserTests.HashModuleWorks (19 ms) [ RUN ] ParserTests.MagicModuleWorks [ OK ] ParserTests.MagicModuleWorks (19 ms) [ RUN ] ParserTests.MathModuleWorks1 [ OK ] ParserTests.MathModuleWorks1 (19 ms) [ RUN ] ParserTests.MathModuleWorks2 [ OK ] ParserTests.MathModuleWorks2 (20 ms) [ RUN ] ParserTests.PeModuleWorks1 [ OK ] ParserTests.PeModuleWorks1 (20 ms) [ RUN ] ParserTests.PeModuleWorks2 [ OK ] ParserTests.PeModuleWorks2 (19 ms) [ RUN ] ParserTests.PeModuleWorks3 [ OK ] ParserTests.PeModuleWorks3 (19 ms) [ RUN ] ParserTests.VirusTotalSymbolsWork [ OK ] ParserTests.VirusTotalSymbolsWork (20 ms) [ RUN ] ParserTests.TransformationToTextWorks [ OK ] ParserTests.TransformationToTextWorks (20 ms) [ RUN ] ParserTests.RemoveLineBeforeAndWorks [ OK ] ParserTests.RemoveLineBeforeAndWorks (19 ms) [ RUN ] ParserTests.RemoveLineBeforeAndWithCommentsWorks [ OK ] ParserTests.RemoveLineBeforeAndWithCommentsWorks (19 ms) [ RUN ] ParserTests.RemoveLineBeforeAndWithComments2Works [ OK ] ParserTests.RemoveLineBeforeAndWithComments2Works (58 ms) [ RUN ] ParserTests.MultipleRulesWorks2 [ OK ] ParserTests.MultipleRulesWorks2 (59 ms) [ RUN ] ParserTests.KbMbIntegerMultipliersWorks [ OK ] ParserTests.KbMbIntegerMultipliersWorks (61 ms) [ RUN ] ParserTests.ReferencingRuleFromOtherRuleWorks [ OK ] ParserTests.ReferencingRuleFromOtherRuleWorks (60 ms) [ RUN ] ParserTests.RegexpWithSuffixModifierWorks [ OK ] ParserTests.RegexpWithSuffixModifierWorks (51 ms) [ RUN ] ParserTests.GlobalVariablesWorks [ OK ] ParserTests.GlobalVariablesWorks (20 ms) [ RUN ] ParserTests.LengthOfHexStringWorks [ OK ] ParserTests.LengthOfHexStringWorks (21 ms) [ RUN ] ParserTests.HexStringWithSpacesInJumpWorks [ OK ] ParserTests.HexStringWithSpacesInJumpWorks (19 ms) [ RUN ] ParserTests.ComplicatedHexStringAlterationWorks [ OK ] ParserTests.ComplicatedHexStringAlterationWorks (20 ms) [ RUN ] ParserTests.ComplicatedHexStringWorks [ OK ] ParserTests.ComplicatedHexStringWorks (19 ms) [ RUN ] ParserTests.NibbleGetterWorks [ OK ] ParserTests.NibbleGetterWorks (19 ms) [ RUN ] ParserTests.HexEscapeWorks [ OK ] ParserTests.HexEscapeWorks (28 ms) [ RUN ] ParserTests.EscapedSequencesInMetaWorks [ OK ] ParserTests.EscapedSequencesInMetaWorks (38 ms) [ RUN ] ParserTests.EscapedSequencesWorks [ OK ] ParserTests.EscapedSequencesWorks (36 ms) [ RUN ] ParserTests.InvalidEscapedSequence1 [ OK ] ParserTests.InvalidEscapedSequence1 (37 ms) [ RUN ] ParserTests.InvalidEscapedSequence2 [ OK ] ParserTests.InvalidEscapedSequence2 (36 ms) [ RUN ] ParserTests.NewlineInHexString [ OK ] ParserTests.NewlineInHexString (40 ms) [ RUN ] ParserTests.ErrorWhenUnknownTokenAfterImport [ OK ] ParserTests.ErrorWhenUnknownTokenAfterImport (40 ms) [ RUN ] ParserTests.PeDataDirectoryIsArray [ OK ] ParserTests.PeDataDirectoryIsArray (40 ms) [ RUN ] ParserTests.AnonymousStrings [ OK ] ParserTests.AnonymousStrings (40 ms) [ RUN ] ParserTests.AllOfThemInOperator [ OK ] ParserTests.AllOfThemInOperator (39 ms) [ RUN ] ParserTests.AllOfInOperatorAndAnyOfInOperator [ OK ] ParserTests.AllOfInOperatorAndAnyOfInOperator (46 ms) [ RUN ] ParserTests.StringCountInRange [ OK ] ParserTests.StringCountInRange (39 ms) [ RUN ] ParserTests.CommentsInCommonLocations [ OK ] ParserTests.CommentsInCommonLocations (41 ms) [ RUN ] ParserTests.CommentsInHexString [ OK ] ParserTests.CommentsInHexString (48 ms) [ RUN ] ParserTests.CommentsInCondition [ OK ] ParserTests.CommentsInCondition (46 ms) [ RUN ] ParserTests.ForCycleMultipleRows [ OK ] ParserTests.ForCycleMultipleRows (41 ms) [ RUN ] ParserTests.ForCycleMultipleRowsWithCRLF [ OK ] ParserTests.ForCycleMultipleRowsWithCRLF (40 ms) [ RUN ] ParserTests.OneMoreTest [ OK ] ParserTests.OneMoreTest (43 ms) [ RUN ] ParserTests.NonUTFmetaWorks [ OK ] ParserTests.NonUTFmetaWorks (45 ms) [ RUN ] ParserTests.NonUTFconditionWorks [ OK ] ParserTests.NonUTFconditionWorks (40 ms) [ RUN ] ParserTests.NonUTFcommentWorks [ OK ] ParserTests.NonUTFcommentWorks (31 ms) [ RUN ] ParserTests.NonUTFcommentsWork [ OK ] ParserTests.NonUTFcommentsWork (73 ms) [ RUN ] ParserTests.RemoveTrailingWhitespacesFromComments [ OK ] ParserTests.RemoveTrailingWhitespacesFromComments (84 ms) [ RUN ] ParserTests.AddMetaAfterParse [ OK ] ParserTests.AddMetaAfterParse (84 ms) [ RUN ] ParserTests.SetTagsAfterParse [ OK ] ParserTests.SetTagsAfterParse (101 ms) [ RUN ] ParserTests.RemoveMetasAfterParse [ OK ] ParserTests.RemoveMetasAfterParse (73 ms) [ RUN ] ParserTests.ParseIncompleteUnknownImport [ OK ] ParserTests.ParseIncompleteUnknownImport (40 ms) [ RUN ] ParserTests.ParseIncompleteReferenceUnknownSymbol [ OK ] ParserTests.ParseIncompleteReferenceUnknownSymbol (37 ms) [ RUN ] ParserTests.ParseIncompleteUnknownObjectSymbol [ OK ] ParserTests.ParseIncompleteUnknownObjectSymbol (40 ms) [ RUN ] ParserTests.ParseIncompleteUnknownObjectSymbolFromKnownModule [ OK ] ParserTests.ParseIncompleteUnknownObjectSymbolFromKnownModule (43 ms) [ RUN ] ParserTests.ParseIncompleteUnknownArraySymbol [ OK ] ParserTests.ParseIncompleteUnknownArraySymbol (41 ms) [ RUN ] ParserTests.ParseIncompleteUnknownArraySymbolFromKnownModule [ OK ] ParserTests.ParseIncompleteUnknownArraySymbolFromKnownModule (39 ms) [ RUN ] ParserTests.ParseIncompleteUnknownArraySymbolFromUnknownModule [ OK ] ParserTests.ParseIncompleteUnknownArraySymbolFromUnknownModule (38 ms) [ RUN ] ParserTests.ParseIncompleteUnknownObjectSymbolFromUnknownModule [ OK ] ParserTests.ParseIncompleteUnknownObjectSymbolFromUnknownModule (38 ms) [ RUN ] ParserTests.ParseIncompleteUnknownForDict [ OK ] ParserTests.ParseIncompleteUnknownForDict (39 ms) [ RUN ] ParserTests.ParseIncompleteUnknownForDictFromKnownModule [ OK ] ParserTests.ParseIncompleteUnknownForDictFromKnownModule (42 ms) [ RUN ] ParserTests.ParseIncompleteUnknownForDictFromUnknownModule [ OK ] ParserTests.ParseIncompleteUnknownForDictFromUnknownModule (38 ms) [ RUN ] ParserTests.ParseIncompleteUnknownFor [ OK ] ParserTests.ParseIncompleteUnknownFor (36 ms) [ RUN ] ParserTests.ParseIncompleteUnknownForFromKnownModule [ OK ] ParserTests.ParseIncompleteUnknownForFromKnownModule (38 ms) [ RUN ] ParserTests.ParseIncompleteUnknownForFromUnknownModule [ OK ] ParserTests.ParseIncompleteUnknownForFromUnknownModule (30 ms) [ RUN ] ParserTests.ParseIncompleteUnknownFunctionCall [ OK ] ParserTests.ParseIncompleteUnknownFunctionCall (42 ms) [ RUN ] ParserTests.ParseIncompleteUnknownFunctionCallFromKnownModule [ OK ] ParserTests.ParseIncompleteUnknownFunctionCallFromKnownModule (40 ms) [ RUN ] ParserTests.ParseIncompleteUnknownFunctionCallFromUnknownModule [ OK ] ParserTests.ParseIncompleteUnknownFunctionCallFromUnknownModule (36 ms) [ RUN ] ParserTests.ParseIncompleteUnknownFunctionOverloadOfKnownFunction [ OK ] ParserTests.ParseIncompleteUnknownFunctionOverloadOfKnownFunction (50 ms) [ RUN ] ParserTests.ParseIncompleteRuleNotFinished [ OK ] ParserTests.ParseIncompleteRuleNotFinished (56 ms) [ RUN ] ParserTests.AutoformattingClosingBracket [ OK ] ParserTests.AutoformattingClosingBracket (20 ms) [ RUN ] ParserTests.AutoformattingClosingDoubleBracket [ OK ] ParserTests.AutoformattingClosingDoubleBracket (18 ms) [ RUN ] ParserTests.AutoformattingClosingBracketWithOtherBracketsInside [ OK ] ParserTests.AutoformattingClosingBracketWithOtherBracketsInside (20 ms) [ RUN ] ParserTests.AutoformattingMultipleLineBrackets [ OK ] ParserTests.AutoformattingMultipleLineBrackets (21 ms) [ RUN ] ParserTests.AutoformattingProperAlignment [ OK ] ParserTests.AutoformattingProperAlignment (28 ms) [ RUN ] ParserTests.AutoformattingProperAlignmentOrStatement [ OK ] ParserTests.AutoformattingProperAlignmentOrStatement (39 ms) [ RUN ] ParserTests.AutoformattingAddNewlinesMinimal [ OK ] ParserTests.AutoformattingAddNewlinesMinimal (41 ms) [ RUN ] ParserTests.AutoformattingAddNewLines [ OK ] ParserTests.AutoformattingAddNewLines (39 ms) [ RUN ] ParserTests.AutoformattingAddNewlinesToBothSides [ OK ] ParserTests.AutoformattingAddNewlinesToBothSides (46 ms) [ RUN ] ParserTests.AutoformattingAddCRLF [ OK ] ParserTests.AutoformattingAddCRLF (38 ms) [ RUN ] ParserTests.AutoformattingNoSpaceBeforeArrayAccess [ OK ] ParserTests.AutoformattingNoSpaceBeforeArrayAccess (42 ms) [ RUN ] ParserTests.AutoformattingSpaceBeforeComments [ OK ] ParserTests.AutoformattingSpaceBeforeComments (44 ms) [ RUN ] ParserTests.AutoformattingRegexpClasses [ OK ] ParserTests.AutoformattingRegexpClasses (41 ms) [ RUN ] ParserTests.AutoformattingAlignedComments1 [ OK ] ParserTests.AutoformattingAlignedComments1 (40 ms) [ RUN ] ParserTests.AutoformattingAlignedComments2 [ OK ] ParserTests.AutoformattingAlignedComments2 (40 ms) [ RUN ] ParserTests.AutoformattingAlignedComments3 [ OK ] ParserTests.AutoformattingAlignedComments3 (37 ms) [ RUN ] ParserTests.AutoformattingNewlinesMultipleRules [ OK ] ParserTests.AutoformattingNewlinesMultipleRules (38 ms) [ RUN ] ParserTests.AutoformattingRemoveRedundantBlankLines [ OK ] ParserTests.AutoformattingRemoveRedundantBlankLines (38 ms) [ RUN ] ParserTests.AutoformattingRemoveRedundantBlankLines2 [ OK ] ParserTests.AutoformattingRemoveRedundantBlankLines2 (46 ms) [ RUN ] ParserTests.AutoformattingCommentInsideHexstringOnNewline [ OK ] ParserTests.AutoformattingCommentInsideHexstringOnNewline (40 ms) [ RUN ] ParserTests.AutoformattingNoSpaceBeforeNewLine [ OK ] ParserTests.AutoformattingNoSpaceBeforeNewLine (46 ms) [ RUN ] ParserTests.AutoformattingOfOnelineRule [ OK ] ParserTests.AutoformattingOfOnelineRule (40 ms) [ RUN ] ParserTests.AutoformattingOfTwoOnelineRules [ OK ] ParserTests.AutoformattingOfTwoOnelineRules (41 ms) [ RUN ] ParserTests.AutoformattingVariableInCondition [ OK ] ParserTests.AutoformattingVariableInCondition (39 ms) [ RUN ] ParserTests.RenameReferencedRuleWorks [ OK ] ParserTests.RenameReferencedRuleWorks (45 ms) [ RUN ] ParserTests.RenameStringWorks1 [ OK ] ParserTests.RenameStringWorks1 (40 ms) [ RUN ] ParserTests.RenameStringWorks2 [ OK ] ParserTests.RenameStringWorks2 (40 ms) [ RUN ] ParserTests.RenameStringWorks3 [ OK ] ParserTests.RenameStringWorks3 (42 ms) [ RUN ] ParserTests.StringXorModifierWithArguments [ OK ] ParserTests.StringXorModifierWithArguments (42 ms) [ RUN ] ParserTests.StringXorModifierWithOutOfBoundsKey [ OK ] ParserTests.StringXorModifierWithOutOfBoundsKey (40 ms) [ RUN ] ParserTests.StringXorModifierWithOutOfBoundsLowerKey [ OK ] ParserTests.StringXorModifierWithOutOfBoundsLowerKey (41 ms) [ RUN ] ParserTests.StringXorModifierWithOutOfBoundsHigherKey [ OK ] ParserTests.StringXorModifierWithOutOfBoundsHigherKey (41 ms) [ RUN ] ParserTests.StringXorModifierWithLowerBoundGreaterThanHigherBound [ OK ] ParserTests.StringXorModifierWithLowerBoundGreaterThanHigherBound (37 ms) [ RUN ] ParserTests.PrivateStringModifier [ OK ] ParserTests.PrivateStringModifier (40 ms) [ RUN ] ParserTests.UnexpectedEndOfFile [ OK ] ParserTests.UnexpectedEndOfFile (41 ms) [ RUN ] ParserTests.ReuseOfParserAfterError [ OK ] ParserTests.ReuseOfParserAfterError (41 ms) [ RUN ] ParserTests.DefinedExpression [ OK ] ParserTests.DefinedExpression (40 ms) [ RUN ] ParserTests.IequalsExpression [ OK ] ParserTests.IequalsExpression (40 ms) [ RUN ] ParserTests.ParsePeSignaturesXAlgorithmOID [ OK ] ParserTests.ParsePeSignaturesXAlgorithmOID (39 ms) [ RUN ] ParserTests.ParseELFDynsym [ OK ] ParserTests.ParseELFDynsym (31 ms) [ RUN ] ParserTests.ParsePercentage1Error [ OK ] ParserTests.ParsePercentage1Error (41 ms) [ RUN ] ParserTests.ParsePercentage2Error [ OK ] ParserTests.ParsePercentage2Error (40 ms) [ RUN ] ParserTests.ParsePercentage3 [ OK ] ParserTests.ParsePercentage3 (45 ms) [ RUN ] ParserTests.ParsePercentage4 [ OK ] ParserTests.ParsePercentage4 (41 ms) [ RUN ] ParserTests.ParsePercentage5 [ OK ] ParserTests.ParsePercentage5 (41 ms) [ RUN ] ParserTests.ParsePercentage6 [ OK ] ParserTests.ParsePercentage6 (41 ms) [ RUN ] ParserTests.ParsePercentage7 [ OK ] ParserTests.ParsePercentage7 (48 ms) [ RUN ] ParserTests.ParseOfRule [ OK ] ParserTests.ParseOfRule (62 ms) [ RUN ] ParserTests.ParseOfRuleInvalid [ OK ] ParserTests.ParseOfRuleInvalid (54 ms) [ RUN ] ParserTests.ParseOfRuleWildcard [ OK ] ParserTests.ParseOfRuleWildcard (52 ms) [ RUN ] ParserTests.ParseOfRuleWildcardInvalid [ OK ] ParserTests.ParseOfRuleWildcardInvalid (59 ms) [ RUN ] ParserTests.ParseAmbiguousWithIdWildcard [ OK ] ParserTests.ParseAmbiguousWithIdWildcard (60 ms) [ RUN ] ParserTests.ExpressionUids [ OK ] ParserTests.ExpressionUids (60 ms) [ RUN ] ParserTests.OctalIntegerWorks [ OK ] ParserTests.OctalIntegerWorks (66 ms) [ RUN ] ParserTests.Yara423FunctionsWorks [ OK ] ParserTests.Yara423FunctionsWorks (73 ms) [ RUN ] ParserTests.HexStringNotWorks [ OK ] ParserTests.HexStringNotWorks (109 ms) [ RUN ] ParserTests.IcontainsExpression [ OK ] ParserTests.IcontainsExpression (100 ms) [ RUN ] ParserTests.IendsWithExpression [ OK ] ParserTests.IendsWithExpression (69 ms) [ RUN ] ParserTests.IstartsWithExpression [ OK ] ParserTests.IstartsWithExpression (64 ms) [ RUN ] ParserTests.StartsWithExpression [ OK ] ParserTests.StartsWithExpression (56 ms) [ RUN ] ParserTests.EndsWithExpression [ OK ] ParserTests.EndsWithExpression (61 ms) [ RUN ] ParserTests.StringModuleWorks [ OK ] ParserTests.StringModuleWorks (63 ms) [----------] 256 tests from ParserTests (13991 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 (64 ms) [ RUN ] VisitorTests.RegexpModifyingVisitorInpactOnTokenStream [ OK ] VisitorTests.RegexpModifyingVisitorInpactOnTokenStream (54 ms) [ RUN ] VisitorTests.BoolModifyingVisitorInpactOnTokenStream1 [ OK ] VisitorTests.BoolModifyingVisitorInpactOnTokenStream1 (62 ms) [ RUN ] VisitorTests.BoolModifyingVisitorInpactOnTokenStream2 [ OK ] VisitorTests.BoolModifyingVisitorInpactOnTokenStream2 (60 ms) [ RUN ] VisitorTests.IntLiteralModifyingVisitorInpactOnTokenStream [ OK ] VisitorTests.IntLiteralModifyingVisitorInpactOnTokenStream (45 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerBoolLiteralExpression [ OK ] VisitorTests.CuckooFunctionReplacerBoolLiteralExpression (36 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerCuckooSyncEvent [ OK ] VisitorTests.CuckooFunctionReplacerCuckooSyncEvent (41 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerOrExpression1 [ OK ] VisitorTests.CuckooFunctionReplacerOrExpression1 (40 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerOrExpression2 [ OK ] VisitorTests.CuckooFunctionReplacerOrExpression2 (52 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerOrExpression3 [ OK ] VisitorTests.CuckooFunctionReplacerOrExpression3 (61 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerOrExpression4 [ OK ] VisitorTests.CuckooFunctionReplacerOrExpression4 (60 ms) [ RUN ] VisitorTests.CuckooFunctionReplacerAndExpression1 [ OK ] VisitorTests.CuckooFunctionReplacerAndExpression1 (62 ms) [ RUN ] VisitorTests.IterableModifyingVisitorImpactOnTokenStream [ OK ] VisitorTests.IterableModifyingVisitorImpactOnTokenStream (54 ms) [ RUN ] VisitorTests.AndExpressionSwitcherAndExpression1 [ OK ] VisitorTests.AndExpressionSwitcherAndExpression1 (61 ms) [ RUN ] VisitorTests.AndExpressionSwitcherAndExpression2 [ OK ] VisitorTests.AndExpressionSwitcherAndExpression2 (73 ms) [ RUN ] VisitorTests.OrExpressionSwitcherOrExpression1 [ OK ] VisitorTests.OrExpressionSwitcherOrExpression1 (80 ms) [ RUN ] VisitorTests.OrExpressionSwitcherOrExpression2 [ OK ] VisitorTests.OrExpressionSwitcherOrExpression2 (61 ms) [ RUN ] VisitorTests.EqExpressionSwitcher [ OK ] VisitorTests.EqExpressionSwitcher (61 ms) [ RUN ] VisitorTests.DeletingVisitor1 [ OK ] VisitorTests.DeletingVisitor1 (61 ms) [ RUN ] VisitorTests.RuleModifierWorksWhenDeletingRules [ OK ] VisitorTests.RuleModifierWorksWhenDeletingRules (61 ms) [ RUN ] VisitorTests.DeletingVisitor2 [ OK ] VisitorTests.DeletingVisitor2 (59 ms) [ RUN ] VisitorTests.DeletingVisitor3 [ OK ] VisitorTests.DeletingVisitor3 (61 ms) [----------] 22 tests from VisitorTests (1345 ms total) [----------] 1 test from YaraFileTests [ RUN ] YaraFileTests.ExpandRuleFromOrigin [ OK ] YaraFileTests.ExpandRuleFromOrigin (56 ms) [----------] 1 test from YaraFileTests (61 ms total) [----------] 4 tests from YaramodTests [ RUN ] YaramodTests.MultipleParsePhasesWithSingleYaramod [ OK ] YaramodTests.MultipleParsePhasesWithSingleYaramod (64 ms) [ RUN ] YaramodTests.AddMeta [ OK ] YaramodTests.AddMeta (49 ms) [ RUN ] YaramodTests.AddMetaToRulesWithComments [ OK ] YaramodTests.AddMetaToRulesWithComments (60 ms) [ RUN ] YaramodTests.SetMeta [ OK ] YaramodTests.SetMeta (76 ms) [----------] 4 tests from YaramodTests (255 ms total) [----------] Global test environment tear-down [==========] 398 tests from 9 test suites ran. (21194 ms total) [ PASSED ] 398 tests. # tests.python.test_parser.ParserTests bug LD_LIBRARY_PATH=/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu/src:$LD_LIBRARY_PATH dh_auto_test -a -O--buildsystem=pybuild I: pybuild base:311: cd /build/reproducible-path/yaramod-3.21.0/.pybuild/cpython3_3.13/build; python3.13 -m unittest discover -v test_empty_file (tests.python.test_builder.BuilderTests.test_empty_file) ... ok test_empty_rule (tests.python.test_builder.BuilderTests.test_empty_rule) ... ok test_multiple_rules (tests.python.test_builder.BuilderTests.test_multiple_rules) ... ok test_pure_imports (tests.python.test_builder.BuilderTests.test_pure_imports) ... ok test_rule_with_and_condition (tests.python.test_builder.BuilderTests.test_rule_with_and_condition) ... ok test_rule_with_and_condition_with_comments (tests.python.test_builder.BuilderTests.test_rule_with_and_condition_with_comments) ... ok test_rule_with_and_condition_with_comments_behind (tests.python.test_builder.BuilderTests.test_rule_with_and_condition_with_comments_behind) ... ok test_rule_with_array_access_condition (tests.python.test_builder.BuilderTests.test_rule_with_array_access_condition) ... ok test_rule_with_bitwise_and_condition (tests.python.test_builder.BuilderTests.test_rule_with_bitwise_and_condition) ... ok test_rule_with_bitwise_not_condition (tests.python.test_builder.BuilderTests.test_rule_with_bitwise_not_condition) ... ok test_rule_with_bitwise_or_condition (tests.python.test_builder.BuilderTests.test_rule_with_bitwise_or_condition) ... ok test_rule_with_comments (tests.python.test_builder.BuilderTests.test_rule_with_comments) ... ok test_rule_with_complex_condition (tests.python.test_builder.BuilderTests.test_rule_with_complex_condition) ... ok test_rule_with_custom_modules (tests.python.test_builder.BuilderTests.test_rule_with_custom_modules) ... ok test_rule_with_defined_condition (tests.python.test_builder.BuilderTests.test_rule_with_defined_condition) ... ok test_rule_with_dictionary_access_condition (tests.python.test_builder.BuilderTests.test_rule_with_dictionary_access_condition) ... ok test_rule_with_divide_condition (tests.python.test_builder.BuilderTests.test_rule_with_divide_condition) ... ok test_rule_with_double_values (tests.python.test_builder.BuilderTests.test_rule_with_double_values) ... ok test_rule_with_eq_condition (tests.python.test_builder.BuilderTests.test_rule_with_eq_condition) ... ok test_rule_with_for_loop_over_dictionary (tests.python.test_builder.BuilderTests.test_rule_with_for_loop_over_dictionary) ... ok test_rule_with_function_call_and_oneline_comment (tests.python.test_builder.BuilderTests.test_rule_with_function_call_and_oneline_comment) ... ok test_rule_with_function_call_condition (tests.python.test_builder.BuilderTests.test_rule_with_function_call_condition) ... ok test_rule_with_ge_condition (tests.python.test_builder.BuilderTests.test_rule_with_ge_condition) ... ok test_rule_with_gt_condition (tests.python.test_builder.BuilderTests.test_rule_with_gt_condition) ... ok test_rule_with_hex_string (tests.python.test_builder.BuilderTests.test_rule_with_hex_string) ... ok test_rule_with_le_condition (tests.python.test_builder.BuilderTests.test_rule_with_le_condition) ... ok test_rule_with_lt_condition (tests.python.test_builder.BuilderTests.test_rule_with_lt_condition) ... ok test_rule_with_match_count_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_count_condition) ... ok test_rule_with_match_in_range_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_in_range_condition) ... ok test_rule_with_match_length_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_length_condition) ... ok test_rule_with_match_length_with_index_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_length_with_index_condition) ... ok test_rule_with_match_offset_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_offset_condition) ... ok test_rule_with_match_offset_with_index_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_offset_with_index_condition) ... ok test_rule_with_metas (tests.python.test_builder.BuilderTests.test_rule_with_metas) ... ok test_rule_with_minus_condition (tests.python.test_builder.BuilderTests.test_rule_with_minus_condition) ... ok test_rule_with_modifiers (tests.python.test_builder.BuilderTests.test_rule_with_modifiers) ... ok test_rule_with_modulo_condition (tests.python.test_builder.BuilderTests.test_rule_with_modulo_condition) ... ok test_rule_with_multiply_condition (tests.python.test_builder.BuilderTests.test_rule_with_multiply_condition) ... ok test_rule_with_neq_condition (tests.python.test_builder.BuilderTests.test_rule_with_neq_condition) ... ok test_rule_with_not_condition (tests.python.test_builder.BuilderTests.test_rule_with_not_condition) ... ok test_rule_with_of_at_offset_condition (tests.python.test_builder.BuilderTests.test_rule_with_of_at_offset_condition) ... ok test_rule_with_of_in_range_condition (tests.python.test_builder.BuilderTests.test_rule_with_of_in_range_condition) ... ok test_rule_with_or_condition (tests.python.test_builder.BuilderTests.test_rule_with_or_condition) ... ok test_rule_with_or_condition_with_comments (tests.python.test_builder.BuilderTests.test_rule_with_or_condition_with_comments) ... ok test_rule_with_or_condition_with_single_comment (tests.python.test_builder.BuilderTests.test_rule_with_or_condition_with_single_comment) ... ok test_rule_with_pe_int_constants_condition (tests.python.test_builder.BuilderTests.test_rule_with_pe_int_constants_condition) ... ok test_rule_with_percentage_of_stringset (tests.python.test_builder.BuilderTests.test_rule_with_percentage_of_stringset) ... ok test_rule_with_plain_string (tests.python.test_builder.BuilderTests.test_rule_with_plain_string) ... ok test_rule_with_plus_condition (tests.python.test_builder.BuilderTests.test_rule_with_plus_condition) ... ok test_rule_with_regexp (tests.python.test_builder.BuilderTests.test_rule_with_regexp) ... ok test_rule_with_shift_left_condition (tests.python.test_builder.BuilderTests.test_rule_with_shift_left_condition) ... ok test_rule_with_shift_right_condition (tests.python.test_builder.BuilderTests.test_rule_with_shift_right_condition) ... ok test_rule_with_string_at_condition (tests.python.test_builder.BuilderTests.test_rule_with_string_at_condition) ... ok test_rule_with_string_id_condition (tests.python.test_builder.BuilderTests.test_rule_with_string_id_condition) ... ok test_rule_with_string_literal_set (tests.python.test_builder.BuilderTests.test_rule_with_string_literal_set) ... ok test_rule_with_string_modifiers (tests.python.test_builder.BuilderTests.test_rule_with_string_modifiers) ... ok test_rule_with_structure_access_condition (tests.python.test_builder.BuilderTests.test_rule_with_structure_access_condition) ... ok test_rule_with_tags (tests.python.test_builder.BuilderTests.test_rule_with_tags) ... ok test_rule_with_unary_minus_condition (tests.python.test_builder.BuilderTests.test_rule_with_unary_minus_condition) ... ok test_rule_with_variable_id_condition (tests.python.test_builder.BuilderTests.test_rule_with_variable_id_condition) ... ok test_rule_with_variables (tests.python.test_builder.BuilderTests.test_rule_with_variables) ... ok test_rule_with_xor_condition (tests.python.test_builder.BuilderTests.test_rule_with_xor_condition) ... ok test_add_meta (tests.python.test_parser.ParserTests.test_add_meta) ... ok test_and_condition (tests.python.test_parser.ParserTests.test_and_condition) ... ok test_array_access_condition (tests.python.test_parser.ParserTests.test_array_access_condition) ... ok test_bitwise_and_condition (tests.python.test_parser.ParserTests.test_bitwise_and_condition) ... ok test_bitwise_not_condition (tests.python.test_parser.ParserTests.test_bitwise_not_condition) ... ok test_bitwise_or_condition (tests.python.test_parser.ParserTests.test_bitwise_or_condition) ... ok test_bool_literal_condition (tests.python.test_parser.ParserTests.test_bool_literal_condition) ... ok test_complex_regular_expression_in_fnc_call (tests.python.test_parser.ParserTests.test_complex_regular_expression_in_fnc_call) ... ok test_complex_regular_expression_in_strings (tests.python.test_parser.ParserTests.test_complex_regular_expression_in_strings) ... ok test_contains_condition (tests.python.test_parser.ParserTests.test_contains_condition) ... ok test_divide_condition (tests.python.test_parser.ParserTests.test_divide_condition) ... ok test_double_literal_condition (tests.python.test_parser.ParserTests.test_double_literal_condition) ... ok test_empty_input (tests.python.test_parser.ParserTests.test_empty_input) ... ok test_empty_rule (tests.python.test_parser.ParserTests.test_empty_rule) ... ok test_equal_condition (tests.python.test_parser.ParserTests.test_equal_condition) ... ok test_expression_uids (tests.python.test_parser.ParserTests.test_expression_uids) ... ok test_for_array_condition (tests.python.test_parser.ParserTests.test_for_array_condition) ... ok test_for_dict_condition (tests.python.test_parser.ParserTests.test_for_dict_condition) ... ok test_for_integer_set_condition (tests.python.test_parser.ParserTests.test_for_integer_set_condition) ... ok test_for_string_literal_set_condition (tests.python.test_parser.ParserTests.test_for_string_literal_set_condition) ... ok test_for_string_set_condition (tests.python.test_parser.ParserTests.test_for_string_set_condition) ... ok test_function_call_condition (tests.python.test_parser.ParserTests.test_function_call_condition) ... ok test_global_private_rule (tests.python.test_parser.ParserTests.test_global_private_rule) ... ok test_global_rule (tests.python.test_parser.ParserTests.test_global_rule) ... ok test_greater_equal_condition (tests.python.test_parser.ParserTests.test_greater_equal_condition) ... ok test_greater_than_condition (tests.python.test_parser.ParserTests.test_greater_than_condition) ... ok test_import (tests.python.test_parser.ParserTests.test_import) ... ok test_include_file (tests.python.test_parser.ParserTests.test_include_file) ... ok test_include_file_2 (tests.python.test_parser.ParserTests.test_include_file_2) ... ok test_include_file_and_import_in_regular_mode (tests.python.test_parser.ParserTests.test_include_file_and_import_in_regular_mode) ... ok test_include_undefined_file_and_import_in_incomplete_mode (tests.python.test_parser.ParserTests.test_include_undefined_file_and_import_in_incomplete_mode) ... ok test_include_undefined_file_in_incomplete_mode (tests.python.test_parser.ParserTests.test_include_undefined_file_in_incomplete_mode) ... ok test_int_function_condition (tests.python.test_parser.ParserTests.test_int_function_condition) ... ok test_int_literal_condition (tests.python.test_parser.ParserTests.test_int_literal_condition) ... ok test_less_equal_condition (tests.python.test_parser.ParserTests.test_less_equal_condition) ... ok test_less_than_condition (tests.python.test_parser.ParserTests.test_less_than_condition) ... ok test_links_between_rules_after_rename (tests.python.test_parser.ParserTests.test_links_between_rules_after_rename) ... ok test_match_count_condition (tests.python.test_parser.ParserTests.test_match_count_condition) ... ok test_match_length_condition (tests.python.test_parser.ParserTests.test_match_length_condition) ... ok test_match_length_with_index_condition (tests.python.test_parser.ParserTests.test_match_length_with_index_condition) ... ok test_match_offset_condition (tests.python.test_parser.ParserTests.test_match_offset_condition) ... ok test_match_offset_with_index_condition (tests.python.test_parser.ParserTests.test_match_offset_with_index_condition) ... ok test_matches_condition (tests.python.test_parser.ParserTests.test_matches_condition) ... ok test_math_module (tests.python.test_parser.ParserTests.test_math_module) ... ok test_minus_condition (tests.python.test_parser.ParserTests.test_minus_condition) ... ok test_modify_meta (tests.python.test_parser.ParserTests.test_modify_meta) ... ok test_modulo_condition (tests.python.test_parser.ParserTests.test_modulo_condition) ... ok test_multiple_parse_phases_with_single_yaramod_instance (tests.python.test_parser.ParserTests.test_multiple_parse_phases_with_single_yaramod_instance) ... ok test_multiple_rules (tests.python.test_parser.ParserTests.test_multiple_rules) ... ok test_multiply_condition (tests.python.test_parser.ParserTests.test_multiply_condition) ... ok test_nonutf_comments (tests.python.test_parser.ParserTests.test_nonutf_comments) ... ok test_not_condition (tests.python.test_parser.ParserTests.test_not_condition) ... ok test_not_equal_condition (tests.python.test_parser.ParserTests.test_not_equal_condition) ... ok test_of_at_condition (tests.python.test_parser.ParserTests.test_of_at_condition) ... ok test_of_at_with_string_set_condition (tests.python.test_parser.ParserTests.test_of_at_with_string_set_condition) ... ok test_of_condition (tests.python.test_parser.ParserTests.test_of_condition) ... ok test_or_condition (tests.python.test_parser.ParserTests.test_or_condition) ... ok test_parentheses_condition (tests.python.test_parser.ParserTests.test_parentheses_condition) ... ok test_parse_elf_dynsym (tests.python.test_parser.ParserTests.test_parse_elf_dynsym) ... ok test_parse_pe_signatures_x_algorithm_oid (tests.python.test_parser.ParserTests.test_parse_pe_signatures_x_algorithm_oid) ... ok test_parse_percentage (tests.python.test_parser.ParserTests.test_parse_percentage) ... ok test_parser_error (tests.python.test_parser.ParserTests.test_parser_error) ... ok test_pe_delayed_imports (tests.python.test_parser.ParserTests.test_pe_delayed_imports) ... ok test_pe_imports (tests.python.test_parser.ParserTests.test_pe_imports) ... ok test_pe_number_of_imported_functions (tests.python.test_parser.ParserTests.test_pe_number_of_imported_functions) ... ok test_plain_strings_with_modifiers (tests.python.test_parser.ParserTests.test_plain_strings_with_modifiers) ... ok test_plus_condition (tests.python.test_parser.ParserTests.test_plus_condition) ... ok test_private_rule (tests.python.test_parser.ParserTests.test_private_rule) ... ok test_regular_expression_character_classes (tests.python.test_parser.ParserTests.test_regular_expression_character_classes) ... ok test_regular_expression_escape_sequences (tests.python.test_parser.ParserTests.test_regular_expression_escape_sequences) ... ok test_regular_expression_meta_characters (tests.python.test_parser.ParserTests.test_regular_expression_meta_characters) ... ok test_regular_expression_quantifiers (tests.python.test_parser.ParserTests.test_regular_expression_quantifiers) ... ok test_regular_expression_quantifiers_nongreedy (tests.python.test_parser.ParserTests.test_regular_expression_quantifiers_nongreedy) ... ok test_regular_expression_suffix_modifiers (tests.python.test_parser.ParserTests.test_regular_expression_suffix_modifiers) ... ok test_remove_import (tests.python.test_parser.ParserTests.test_remove_import) ... ok test_rule_locations (tests.python.test_parser.ParserTests.test_rule_locations) ... ok test_rule_with_hex_string (tests.python.test_parser.ParserTests.test_rule_with_hex_string) ... ok test_rule_with_metas (tests.python.test_parser.ParserTests.test_rule_with_metas) ... ok test_rule_with_plain_strings (tests.python.test_parser.ParserTests.test_rule_with_plain_strings) ... ok test_rule_with_regexp (tests.python.test_parser.ParserTests.test_rule_with_regexp) ... ok test_rule_with_tags (tests.python.test_parser.ParserTests.test_rule_with_tags) ... ok test_rule_with_unordered_sections (tests.python.test_parser.ParserTests.test_rule_with_unordered_sections) ... ok test_rule_with_variable_and_string (tests.python.test_parser.ParserTests.test_rule_with_variable_and_string) ... ok test_rule_with_variables (tests.python.test_parser.ParserTests.test_rule_with_variables) ... ok test_shift_left_condition (tests.python.test_parser.ParserTests.test_shift_left_condition) ... ok test_shift_right_condition (tests.python.test_parser.ParserTests.test_shift_right_condition) ... ok test_simple_regular_expression_in_strings (tests.python.test_parser.ParserTests.test_simple_regular_expression_in_strings) ... ok test_string_at_condition (tests.python.test_parser.ParserTests.test_string_at_condition) ... ok test_string_condition (tests.python.test_parser.ParserTests.test_string_condition) ... ok test_string_in_range_condition (tests.python.test_parser.ParserTests.test_string_in_range_condition) ... ok test_string_locations (tests.python.test_parser.ParserTests.test_string_locations) ... ok test_string_with_invalid_utf8_sequences (tests.python.test_parser.ParserTests.test_string_with_invalid_utf8_sequences) ... ok test_structure_access_condition (tests.python.test_parser.ParserTests.test_structure_access_condition) ... ok test_unary_minus_condition (tests.python.test_parser.ParserTests.test_unary_minus_condition) ... ok test_variable_condition (tests.python.test_parser.ParserTests.test_variable_condition) ... ok test_xor_condition (tests.python.test_parser.ParserTests.test_xor_condition) ... ok test_empty_file (tests.python.test_builder.BuilderTests.test_empty_file) ... ok test_empty_rule (tests.python.test_builder.BuilderTests.test_empty_rule) ... ok test_multiple_rules (tests.python.test_builder.BuilderTests.test_multiple_rules) ... ok test_pure_imports (tests.python.test_builder.BuilderTests.test_pure_imports) ... ok test_rule_with_and_condition (tests.python.test_builder.BuilderTests.test_rule_with_and_condition) ... ok test_rule_with_and_condition_with_comments (tests.python.test_builder.BuilderTests.test_rule_with_and_condition_with_comments) ... ok test_rule_with_and_condition_with_comments_behind (tests.python.test_builder.BuilderTests.test_rule_with_and_condition_with_comments_behind) ... ok test_rule_with_array_access_condition (tests.python.test_builder.BuilderTests.test_rule_with_array_access_condition) ... ok test_rule_with_bitwise_and_condition (tests.python.test_builder.BuilderTests.test_rule_with_bitwise_and_condition) ... ok test_rule_with_bitwise_not_condition (tests.python.test_builder.BuilderTests.test_rule_with_bitwise_not_condition) ... ok test_rule_with_bitwise_or_condition (tests.python.test_builder.BuilderTests.test_rule_with_bitwise_or_condition) ... ok test_rule_with_comments (tests.python.test_builder.BuilderTests.test_rule_with_comments) ... ok test_rule_with_complex_condition (tests.python.test_builder.BuilderTests.test_rule_with_complex_condition) ... ok test_rule_with_custom_modules (tests.python.test_builder.BuilderTests.test_rule_with_custom_modules) ... ok test_rule_with_defined_condition (tests.python.test_builder.BuilderTests.test_rule_with_defined_condition) ... ok test_rule_with_dictionary_access_condition (tests.python.test_builder.BuilderTests.test_rule_with_dictionary_access_condition) ... ok test_rule_with_divide_condition (tests.python.test_builder.BuilderTests.test_rule_with_divide_condition) ... ok test_rule_with_double_values (tests.python.test_builder.BuilderTests.test_rule_with_double_values) ... ok test_rule_with_eq_condition (tests.python.test_builder.BuilderTests.test_rule_with_eq_condition) ... ok test_rule_with_for_loop_over_dictionary (tests.python.test_builder.BuilderTests.test_rule_with_for_loop_over_dictionary) ... ok test_rule_with_function_call_and_oneline_comment (tests.python.test_builder.BuilderTests.test_rule_with_function_call_and_oneline_comment) ... ok test_rule_with_function_call_condition (tests.python.test_builder.BuilderTests.test_rule_with_function_call_condition) ... ok test_rule_with_ge_condition (tests.python.test_builder.BuilderTests.test_rule_with_ge_condition) ... ok test_rule_with_gt_condition (tests.python.test_builder.BuilderTests.test_rule_with_gt_condition) ... ok test_rule_with_hex_string (tests.python.test_builder.BuilderTests.test_rule_with_hex_string) ... ok test_rule_with_le_condition (tests.python.test_builder.BuilderTests.test_rule_with_le_condition) ... ok test_rule_with_lt_condition (tests.python.test_builder.BuilderTests.test_rule_with_lt_condition) ... ok test_rule_with_match_count_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_count_condition) ... ok test_rule_with_match_in_range_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_in_range_condition) ... ok test_rule_with_match_length_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_length_condition) ... ok test_rule_with_match_length_with_index_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_length_with_index_condition) ... ok test_rule_with_match_offset_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_offset_condition) ... ok test_rule_with_match_offset_with_index_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_offset_with_index_condition) ... ok test_rule_with_metas (tests.python.test_builder.BuilderTests.test_rule_with_metas) ... ok test_rule_with_minus_condition (tests.python.test_builder.BuilderTests.test_rule_with_minus_condition) ... ok test_rule_with_modifiers (tests.python.test_builder.BuilderTests.test_rule_with_modifiers) ... ok test_rule_with_modulo_condition (tests.python.test_builder.BuilderTests.test_rule_with_modulo_condition) ... ok test_rule_with_multiply_condition (tests.python.test_builder.BuilderTests.test_rule_with_multiply_condition) ... ok test_rule_with_neq_condition (tests.python.test_builder.BuilderTests.test_rule_with_neq_condition) ... ok test_rule_with_not_condition (tests.python.test_builder.BuilderTests.test_rule_with_not_condition) ... ok test_rule_with_of_at_offset_condition (tests.python.test_builder.BuilderTests.test_rule_with_of_at_offset_condition) ... ok test_rule_with_of_in_range_condition (tests.python.test_builder.BuilderTests.test_rule_with_of_in_range_condition) ... ok test_rule_with_or_condition (tests.python.test_builder.BuilderTests.test_rule_with_or_condition) ... ok test_rule_with_or_condition_with_comments (tests.python.test_builder.BuilderTests.test_rule_with_or_condition_with_comments) ... ok test_rule_with_or_condition_with_single_comment (tests.python.test_builder.BuilderTests.test_rule_with_or_condition_with_single_comment) ... ok test_rule_with_pe_int_constants_condition (tests.python.test_builder.BuilderTests.test_rule_with_pe_int_constants_condition) ... ok test_rule_with_percentage_of_stringset (tests.python.test_builder.BuilderTests.test_rule_with_percentage_of_stringset) ... ok test_rule_with_plain_string (tests.python.test_builder.BuilderTests.test_rule_with_plain_string) ... ok test_rule_with_plus_condition (tests.python.test_builder.BuilderTests.test_rule_with_plus_condition) ... ok test_rule_with_regexp (tests.python.test_builder.BuilderTests.test_rule_with_regexp) ... ok test_rule_with_shift_left_condition (tests.python.test_builder.BuilderTests.test_rule_with_shift_left_condition) ... ok test_rule_with_shift_right_condition (tests.python.test_builder.BuilderTests.test_rule_with_shift_right_condition) ... ok test_rule_with_string_at_condition (tests.python.test_builder.BuilderTests.test_rule_with_string_at_condition) ... ok test_rule_with_string_id_condition (tests.python.test_builder.BuilderTests.test_rule_with_string_id_condition) ... ok test_rule_with_string_literal_set (tests.python.test_builder.BuilderTests.test_rule_with_string_literal_set) ... ok test_rule_with_string_modifiers (tests.python.test_builder.BuilderTests.test_rule_with_string_modifiers) ... ok test_rule_with_structure_access_condition (tests.python.test_builder.BuilderTests.test_rule_with_structure_access_condition) ... ok test_rule_with_tags (tests.python.test_builder.BuilderTests.test_rule_with_tags) ... ok test_rule_with_unary_minus_condition (tests.python.test_builder.BuilderTests.test_rule_with_unary_minus_condition) ... ok test_rule_with_variable_id_condition (tests.python.test_builder.BuilderTests.test_rule_with_variable_id_condition) ... ok test_rule_with_variables (tests.python.test_builder.BuilderTests.test_rule_with_variables) ... ok test_rule_with_xor_condition (tests.python.test_builder.BuilderTests.test_rule_with_xor_condition) ... ok test_add_meta (tests.python.test_parser.ParserTests.test_add_meta) ... ok test_and_condition (tests.python.test_parser.ParserTests.test_and_condition) ... ok test_array_access_condition (tests.python.test_parser.ParserTests.test_array_access_condition) ... ok test_bitwise_and_condition (tests.python.test_parser.ParserTests.test_bitwise_and_condition) ... ok test_bitwise_not_condition (tests.python.test_parser.ParserTests.test_bitwise_not_condition) ... ok test_bitwise_or_condition (tests.python.test_parser.ParserTests.test_bitwise_or_condition) ... ok test_bool_literal_condition (tests.python.test_parser.ParserTests.test_bool_literal_condition) ... ok test_complex_regular_expression_in_fnc_call (tests.python.test_parser.ParserTests.test_complex_regular_expression_in_fnc_call) ... ok test_complex_regular_expression_in_strings (tests.python.test_parser.ParserTests.test_complex_regular_expression_in_strings) ... ok test_contains_condition (tests.python.test_parser.ParserTests.test_contains_condition) ... ok test_divide_condition (tests.python.test_parser.ParserTests.test_divide_condition) ... ok test_double_literal_condition (tests.python.test_parser.ParserTests.test_double_literal_condition) ... ok test_empty_input (tests.python.test_parser.ParserTests.test_empty_input) ... ok test_empty_rule (tests.python.test_parser.ParserTests.test_empty_rule) ... ok test_equal_condition (tests.python.test_parser.ParserTests.test_equal_condition) ... ok test_expression_uids (tests.python.test_parser.ParserTests.test_expression_uids) ... ok test_for_array_condition (tests.python.test_parser.ParserTests.test_for_array_condition) ... ok test_for_dict_condition (tests.python.test_parser.ParserTests.test_for_dict_condition) ... ok test_for_integer_set_condition (tests.python.test_parser.ParserTests.test_for_integer_set_condition) ... ok test_for_string_literal_set_condition (tests.python.test_parser.ParserTests.test_for_string_literal_set_condition) ... ok test_for_string_set_condition (tests.python.test_parser.ParserTests.test_for_string_set_condition) ... ok test_function_call_condition (tests.python.test_parser.ParserTests.test_function_call_condition) ... ok test_global_private_rule (tests.python.test_parser.ParserTests.test_global_private_rule) ... ok test_global_rule (tests.python.test_parser.ParserTests.test_global_rule) ... ok test_greater_equal_condition (tests.python.test_parser.ParserTests.test_greater_equal_condition) ... ok test_greater_than_condition (tests.python.test_parser.ParserTests.test_greater_than_condition) ... ok test_import (tests.python.test_parser.ParserTests.test_import) ... ok test_include_file (tests.python.test_parser.ParserTests.test_include_file) ... ok test_include_file_2 (tests.python.test_parser.ParserTests.test_include_file_2) ... ok test_include_file_and_import_in_regular_mode (tests.python.test_parser.ParserTests.test_include_file_and_import_in_regular_mode) ... ok test_include_undefined_file_and_import_in_incomplete_mode (tests.python.test_parser.ParserTests.test_include_undefined_file_and_import_in_incomplete_mode) ... ok test_include_undefined_file_in_incomplete_mode (tests.python.test_parser.ParserTests.test_include_undefined_file_in_incomplete_mode) ... ok test_int_function_condition (tests.python.test_parser.ParserTests.test_int_function_condition) ... ok test_int_literal_condition (tests.python.test_parser.ParserTests.test_int_literal_condition) ... ok test_less_equal_condition (tests.python.test_parser.ParserTests.test_less_equal_condition) ... ok test_less_than_condition (tests.python.test_parser.ParserTests.test_less_than_condition) ... ok test_links_between_rules_after_rename (tests.python.test_parser.ParserTests.test_links_between_rules_after_rename) ... ok test_match_count_condition (tests.python.test_parser.ParserTests.test_match_count_condition) ... ok test_match_length_condition (tests.python.test_parser.ParserTests.test_match_length_condition) ... ok test_match_length_with_index_condition (tests.python.test_parser.ParserTests.test_match_length_with_index_condition) ... ok test_match_offset_condition (tests.python.test_parser.ParserTests.test_match_offset_condition) ... ok test_match_offset_with_index_condition (tests.python.test_parser.ParserTests.test_match_offset_with_index_condition) ... ok test_matches_condition (tests.python.test_parser.ParserTests.test_matches_condition) ... ok test_math_module (tests.python.test_parser.ParserTests.test_math_module) ... ok test_minus_condition (tests.python.test_parser.ParserTests.test_minus_condition) ... ok test_modify_meta (tests.python.test_parser.ParserTests.test_modify_meta) ... ok test_modulo_condition (tests.python.test_parser.ParserTests.test_modulo_condition) ... ok test_multiple_parse_phases_with_single_yaramod_instance (tests.python.test_parser.ParserTests.test_multiple_parse_phases_with_single_yaramod_instance) ... ok test_multiple_rules (tests.python.test_parser.ParserTests.test_multiple_rules) ... ok test_multiply_condition (tests.python.test_parser.ParserTests.test_multiply_condition) ... ok test_nonutf_comments (tests.python.test_parser.ParserTests.test_nonutf_comments) ... ok test_not_condition (tests.python.test_parser.ParserTests.test_not_condition) ... ok test_not_equal_condition (tests.python.test_parser.ParserTests.test_not_equal_condition) ... ok test_of_at_condition (tests.python.test_parser.ParserTests.test_of_at_condition) ... ok test_of_at_with_string_set_condition (tests.python.test_parser.ParserTests.test_of_at_with_string_set_condition) ... ok test_of_condition (tests.python.test_parser.ParserTests.test_of_condition) ... ok test_or_condition (tests.python.test_parser.ParserTests.test_or_condition) ... ok test_parentheses_condition (tests.python.test_parser.ParserTests.test_parentheses_condition) ... ok test_parse_elf_dynsym (tests.python.test_parser.ParserTests.test_parse_elf_dynsym) ... ok test_parse_pe_signatures_x_algorithm_oid (tests.python.test_parser.ParserTests.test_parse_pe_signatures_x_algorithm_oid) ... ok test_parse_percentage (tests.python.test_parser.ParserTests.test_parse_percentage) ... ok test_parser_error (tests.python.test_parser.ParserTests.test_parser_error) ... ok test_pe_delayed_imports (tests.python.test_parser.ParserTests.test_pe_delayed_imports) ... ok test_pe_imports (tests.python.test_parser.ParserTests.test_pe_imports) ... ok test_pe_number_of_imported_functions (tests.python.test_parser.ParserTests.test_pe_number_of_imported_functions) ... ok test_plain_strings_with_modifiers (tests.python.test_parser.ParserTests.test_plain_strings_with_modifiers) ... ok test_plus_condition (tests.python.test_parser.ParserTests.test_plus_condition) ... ok test_private_rule (tests.python.test_parser.ParserTests.test_private_rule) ... ok test_regular_expression_character_classes (tests.python.test_parser.ParserTests.test_regular_expression_character_classes) ... ok test_regular_expression_escape_sequences (tests.python.test_parser.ParserTests.test_regular_expression_escape_sequences) ... ok test_regular_expression_meta_characters (tests.python.test_parser.ParserTests.test_regular_expression_meta_characters) ... ok test_regular_expression_quantifiers (tests.python.test_parser.ParserTests.test_regular_expression_quantifiers) ... ok test_regular_expression_quantifiers_nongreedy (tests.python.test_parser.ParserTests.test_regular_expression_quantifiers_nongreedy) ... ok test_regular_expression_suffix_modifiers (tests.python.test_parser.ParserTests.test_regular_expression_suffix_modifiers) ... ok test_remove_import (tests.python.test_parser.ParserTests.test_remove_import) ... ok test_rule_locations (tests.python.test_parser.ParserTests.test_rule_locations) ... ok test_rule_with_hex_string (tests.python.test_parser.ParserTests.test_rule_with_hex_string) ... ok test_rule_with_metas (tests.python.test_parser.ParserTests.test_rule_with_metas) ... ok test_rule_with_plain_strings (tests.python.test_parser.ParserTests.test_rule_with_plain_strings) ... ok test_rule_with_regexp (tests.python.test_parser.ParserTests.test_rule_with_regexp) ... ok test_rule_with_tags (tests.python.test_parser.ParserTests.test_rule_with_tags) ... ok test_rule_with_unordered_sections (tests.python.test_parser.ParserTests.test_rule_with_unordered_sections) ... ok test_rule_with_variable_and_string (tests.python.test_parser.ParserTests.test_rule_with_variable_and_string) ... ok test_rule_with_variables (tests.python.test_parser.ParserTests.test_rule_with_variables) ... ok test_shift_left_condition (tests.python.test_parser.ParserTests.test_shift_left_condition) ... ok test_shift_right_condition (tests.python.test_parser.ParserTests.test_shift_right_condition) ... ok test_simple_regular_expression_in_strings (tests.python.test_parser.ParserTests.test_simple_regular_expression_in_strings) ... ok test_string_at_condition (tests.python.test_parser.ParserTests.test_string_at_condition) ... ok test_string_condition (tests.python.test_parser.ParserTests.test_string_condition) ... ok test_string_in_range_condition (tests.python.test_parser.ParserTests.test_string_in_range_condition) ... ok test_string_locations (tests.python.test_parser.ParserTests.test_string_locations) ... ok test_string_with_invalid_utf8_sequences (tests.python.test_parser.ParserTests.test_string_with_invalid_utf8_sequences) ... ok test_structure_access_condition (tests.python.test_parser.ParserTests.test_structure_access_condition) ... ok test_unary_minus_condition (tests.python.test_parser.ParserTests.test_unary_minus_condition) ... ok test_variable_condition (tests.python.test_parser.ParserTests.test_variable_condition) ... ok test_xor_condition (tests.python.test_parser.ParserTests.test_xor_condition) ... ok test_change_meta_of_rule (tests.python.test_representation.RepresentationTests.test_change_meta_of_rule) ... ok test_custom_module_enhancing_known_module (tests.python.test_representation.RepresentationTests.test_custom_module_enhancing_known_module) ... ok test_custom_module_interface (tests.python.test_representation.RepresentationTests.test_custom_module_interface) ... ok test_get_modulepool (tests.python.test_representation.RepresentationTests.test_get_modulepool) ... ok test_get_string_modifiers (tests.python.test_representation.RepresentationTests.test_get_string_modifiers) ... ok test_get_tokenstream (tests.python.test_representation.RepresentationTests.test_get_tokenstream) ... ok test_get_tokenstream_after_syntax_error_1 (tests.python.test_representation.RepresentationTests.test_get_tokenstream_after_syntax_error_1) ... ok test_get_tokenstream_after_syntax_error_2 (tests.python.test_representation.RepresentationTests.test_get_tokenstream_after_syntax_error_2) ... ok test_get_tokenstream_after_unknown_identifier_error (tests.python.test_representation.RepresentationTests.test_get_tokenstream_after_unknown_identifier_error) ... ok test_get_tokenstream_after_unknown_module_error (tests.python.test_representation.RepresentationTests.test_get_tokenstream_after_unknown_module_error) ... ok test_literals (tests.python.test_representation.RepresentationTests.test_literals) ... ok test_meta_values_interface (tests.python.test_representation.RepresentationTests.test_meta_values_interface) ... ok test_module_interface (tests.python.test_representation.RepresentationTests.test_module_interface) ... ok test_remove_string_modifiers (tests.python.test_representation.RepresentationTests.test_remove_string_modifiers) ... ok test_set_tags_on_a_rule_with_tags (tests.python.test_representation.RepresentationTests.test_set_tags_on_a_rule_with_tags) ... ok test_set_tags_on_a_rule_without_tags (tests.python.test_representation.RepresentationTests.test_set_tags_on_a_rule_without_tags) ... ok test_set_tags_to_empty_list (tests.python.test_representation.RepresentationTests.test_set_tags_to_empty_list) ... ok test_set_tags_to_empty_list_on_a_rule_without_tags (tests.python.test_representation.RepresentationTests.test_set_tags_to_empty_list_on_a_rule_without_tags) ... ok test_cuckoo_function_replacer (tests.python.test_visitor.VisitorTests.test_cuckoo_function_replacer) ... ok test_modifying_visitor_delete_rules (tests.python.test_visitor.VisitorTests.test_modifying_visitor_delete_rules) ... ok test_modifying_visitor_eq_expression (tests.python.test_visitor.VisitorTests.test_modifying_visitor_eq_expression) ... ok test_modifying_visitor_inpact_on_regexp_expression (tests.python.test_visitor.VisitorTests.test_modifying_visitor_inpact_on_regexp_expression) ... ok test_modifying_visitor_or_deleter (tests.python.test_visitor.VisitorTests.test_modifying_visitor_or_deleter) ... ok test_pe_iconhash_deleter (tests.python.test_visitor.VisitorTests.test_pe_iconhash_deleter) ... ok test_rule_inserter (tests.python.test_visitor.VisitorTests.test_rule_inserter) ... ok test_simple_modifying_visitor (tests.python.test_visitor.VisitorTests.test_simple_modifying_visitor) ... ok test_empty_file (tests.python.test_builder.BuilderTests.test_empty_file) ... ok test_empty_rule (tests.python.test_builder.BuilderTests.test_empty_rule) ... ok test_multiple_rules (tests.python.test_builder.BuilderTests.test_multiple_rules) ... ok test_pure_imports (tests.python.test_builder.BuilderTests.test_pure_imports) ... ok test_rule_with_and_condition (tests.python.test_builder.BuilderTests.test_rule_with_and_condition) ... ok test_rule_with_and_condition_with_comments (tests.python.test_builder.BuilderTests.test_rule_with_and_condition_with_comments) ... ok test_rule_with_and_condition_with_comments_behind (tests.python.test_builder.BuilderTests.test_rule_with_and_condition_with_comments_behind) ... ok test_rule_with_array_access_condition (tests.python.test_builder.BuilderTests.test_rule_with_array_access_condition) ... ok test_rule_with_bitwise_and_condition (tests.python.test_builder.BuilderTests.test_rule_with_bitwise_and_condition) ... ok test_rule_with_bitwise_not_condition (tests.python.test_builder.BuilderTests.test_rule_with_bitwise_not_condition) ... ok test_rule_with_bitwise_or_condition (tests.python.test_builder.BuilderTests.test_rule_with_bitwise_or_condition) ... ok test_rule_with_comments (tests.python.test_builder.BuilderTests.test_rule_with_comments) ... ok test_rule_with_complex_condition (tests.python.test_builder.BuilderTests.test_rule_with_complex_condition) ... ok test_rule_with_custom_modules (tests.python.test_builder.BuilderTests.test_rule_with_custom_modules) ... ok test_rule_with_defined_condition (tests.python.test_builder.BuilderTests.test_rule_with_defined_condition) ... ok test_rule_with_dictionary_access_condition (tests.python.test_builder.BuilderTests.test_rule_with_dictionary_access_condition) ... ok test_rule_with_divide_condition (tests.python.test_builder.BuilderTests.test_rule_with_divide_condition) ... ok test_rule_with_double_values (tests.python.test_builder.BuilderTests.test_rule_with_double_values) ... ok test_rule_with_eq_condition (tests.python.test_builder.BuilderTests.test_rule_with_eq_condition) ... ok test_rule_with_for_loop_over_dictionary (tests.python.test_builder.BuilderTests.test_rule_with_for_loop_over_dictionary) ... ok test_rule_with_function_call_and_oneline_comment (tests.python.test_builder.BuilderTests.test_rule_with_function_call_and_oneline_comment) ... ok test_rule_with_function_call_condition (tests.python.test_builder.BuilderTests.test_rule_with_function_call_condition) ... ok test_rule_with_ge_condition (tests.python.test_builder.BuilderTests.test_rule_with_ge_condition) ... ok test_rule_with_gt_condition (tests.python.test_builder.BuilderTests.test_rule_with_gt_condition) ... ok test_rule_with_hex_string (tests.python.test_builder.BuilderTests.test_rule_with_hex_string) ... ok test_rule_with_le_condition (tests.python.test_builder.BuilderTests.test_rule_with_le_condition) ... ok test_rule_with_lt_condition (tests.python.test_builder.BuilderTests.test_rule_with_lt_condition) ... ok test_rule_with_match_count_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_count_condition) ... ok test_rule_with_match_in_range_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_in_range_condition) ... ok test_rule_with_match_length_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_length_condition) ... ok test_rule_with_match_length_with_index_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_length_with_index_condition) ... ok test_rule_with_match_offset_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_offset_condition) ... ok test_rule_with_match_offset_with_index_condition (tests.python.test_builder.BuilderTests.test_rule_with_match_offset_with_index_condition) ... ok test_rule_with_metas (tests.python.test_builder.BuilderTests.test_rule_with_metas) ... ok test_rule_with_minus_condition (tests.python.test_builder.BuilderTests.test_rule_with_minus_condition) ... ok test_rule_with_modifiers (tests.python.test_builder.BuilderTests.test_rule_with_modifiers) ... ok test_rule_with_modulo_condition (tests.python.test_builder.BuilderTests.test_rule_with_modulo_condition) ... ok test_rule_with_multiply_condition (tests.python.test_builder.BuilderTests.test_rule_with_multiply_condition) ... ok test_rule_with_neq_condition (tests.python.test_builder.BuilderTests.test_rule_with_neq_condition) ... ok test_rule_with_not_condition (tests.python.test_builder.BuilderTests.test_rule_with_not_condition) ... ok test_rule_with_of_at_offset_condition (tests.python.test_builder.BuilderTests.test_rule_with_of_at_offset_condition) ... ok test_rule_with_of_in_range_condition (tests.python.test_builder.BuilderTests.test_rule_with_of_in_range_condition) ... ok test_rule_with_or_condition (tests.python.test_builder.BuilderTests.test_rule_with_or_condition) ... ok test_rule_with_or_condition_with_comments (tests.python.test_builder.BuilderTests.test_rule_with_or_condition_with_comments) ... ok test_rule_with_or_condition_with_single_comment (tests.python.test_builder.BuilderTests.test_rule_with_or_condition_with_single_comment) ... ok test_rule_with_pe_int_constants_condition (tests.python.test_builder.BuilderTests.test_rule_with_pe_int_constants_condition) ... ok test_rule_with_percentage_of_stringset (tests.python.test_builder.BuilderTests.test_rule_with_percentage_of_stringset) ... ok test_rule_with_plain_string (tests.python.test_builder.BuilderTests.test_rule_with_plain_string) ... ok test_rule_with_plus_condition (tests.python.test_builder.BuilderTests.test_rule_with_plus_condition) ... ok test_rule_with_regexp (tests.python.test_builder.BuilderTests.test_rule_with_regexp) ... ok test_rule_with_shift_left_condition (tests.python.test_builder.BuilderTests.test_rule_with_shift_left_condition) ... ok test_rule_with_shift_right_condition (tests.python.test_builder.BuilderTests.test_rule_with_shift_right_condition) ... ok test_rule_with_string_at_condition (tests.python.test_builder.BuilderTests.test_rule_with_string_at_condition) ... ok test_rule_with_string_id_condition (tests.python.test_builder.BuilderTests.test_rule_with_string_id_condition) ... ok test_rule_with_string_literal_set (tests.python.test_builder.BuilderTests.test_rule_with_string_literal_set) ... ok test_rule_with_string_modifiers (tests.python.test_builder.BuilderTests.test_rule_with_string_modifiers) ... ok test_rule_with_structure_access_condition (tests.python.test_builder.BuilderTests.test_rule_with_structure_access_condition) ... ok test_rule_with_tags (tests.python.test_builder.BuilderTests.test_rule_with_tags) ... ok test_rule_with_unary_minus_condition (tests.python.test_builder.BuilderTests.test_rule_with_unary_minus_condition) ... ok test_rule_with_variable_id_condition (tests.python.test_builder.BuilderTests.test_rule_with_variable_id_condition) ... ok test_rule_with_variables (tests.python.test_builder.BuilderTests.test_rule_with_variables) ... ok test_rule_with_xor_condition (tests.python.test_builder.BuilderTests.test_rule_with_xor_condition) ... ok test_add_meta (tests.python.test_parser.ParserTests.test_add_meta) ... ok test_and_condition (tests.python.test_parser.ParserTests.test_and_condition) ... ok test_array_access_condition (tests.python.test_parser.ParserTests.test_array_access_condition) ... ok test_bitwise_and_condition (tests.python.test_parser.ParserTests.test_bitwise_and_condition) ... ok test_bitwise_not_condition (tests.python.test_parser.ParserTests.test_bitwise_not_condition) ... ok test_bitwise_or_condition (tests.python.test_parser.ParserTests.test_bitwise_or_condition) ... ok test_bool_literal_condition (tests.python.test_parser.ParserTests.test_bool_literal_condition) ... ok test_complex_regular_expression_in_fnc_call (tests.python.test_parser.ParserTests.test_complex_regular_expression_in_fnc_call) ... ok test_complex_regular_expression_in_strings (tests.python.test_parser.ParserTests.test_complex_regular_expression_in_strings) ... ok test_contains_condition (tests.python.test_parser.ParserTests.test_contains_condition) ... ok test_divide_condition (tests.python.test_parser.ParserTests.test_divide_condition) ... ok test_double_literal_condition (tests.python.test_parser.ParserTests.test_double_literal_condition) ... ok test_empty_input (tests.python.test_parser.ParserTests.test_empty_input) ... ok test_empty_rule (tests.python.test_parser.ParserTests.test_empty_rule) ... ok test_equal_condition (tests.python.test_parser.ParserTests.test_equal_condition) ... ok test_expression_uids (tests.python.test_parser.ParserTests.test_expression_uids) ... ok test_for_array_condition (tests.python.test_parser.ParserTests.test_for_array_condition) ... ok test_for_dict_condition (tests.python.test_parser.ParserTests.test_for_dict_condition) ... ok test_for_integer_set_condition (tests.python.test_parser.ParserTests.test_for_integer_set_condition) ... ok test_for_string_literal_set_condition (tests.python.test_parser.ParserTests.test_for_string_literal_set_condition) ... ok test_for_string_set_condition (tests.python.test_parser.ParserTests.test_for_string_set_condition) ... ok test_function_call_condition (tests.python.test_parser.ParserTests.test_function_call_condition) ... ok test_global_private_rule (tests.python.test_parser.ParserTests.test_global_private_rule) ... ok test_global_rule (tests.python.test_parser.ParserTests.test_global_rule) ... ok test_greater_equal_condition (tests.python.test_parser.ParserTests.test_greater_equal_condition) ... ok test_greater_than_condition (tests.python.test_parser.ParserTests.test_greater_than_condition) ... ok test_import (tests.python.test_parser.ParserTests.test_import) ... ok test_include_file (tests.python.test_parser.ParserTests.test_include_file) ... ok test_include_file_2 (tests.python.test_parser.ParserTests.test_include_file_2) ... ok test_include_file_and_import_in_regular_mode (tests.python.test_parser.ParserTests.test_include_file_and_import_in_regular_mode) ... ok test_include_undefined_file_and_import_in_incomplete_mode (tests.python.test_parser.ParserTests.test_include_undefined_file_and_import_in_incomplete_mode) ... ok test_include_undefined_file_in_incomplete_mode (tests.python.test_parser.ParserTests.test_include_undefined_file_in_incomplete_mode) ... ok test_int_function_condition (tests.python.test_parser.ParserTests.test_int_function_condition) ... ok test_int_literal_condition (tests.python.test_parser.ParserTests.test_int_literal_condition) ... ok test_less_equal_condition (tests.python.test_parser.ParserTests.test_less_equal_condition) ... ok test_less_than_condition (tests.python.test_parser.ParserTests.test_less_than_condition) ... ok test_links_between_rules_after_rename (tests.python.test_parser.ParserTests.test_links_between_rules_after_rename) ... ok test_match_count_condition (tests.python.test_parser.ParserTests.test_match_count_condition) ... ok test_match_length_condition (tests.python.test_parser.ParserTests.test_match_length_condition) ... ok test_match_length_with_index_condition (tests.python.test_parser.ParserTests.test_match_length_with_index_condition) ... ok test_match_offset_condition (tests.python.test_parser.ParserTests.test_match_offset_condition) ... ok test_match_offset_with_index_condition (tests.python.test_parser.ParserTests.test_match_offset_with_index_condition) ... ok test_matches_condition (tests.python.test_parser.ParserTests.test_matches_condition) ... ok test_math_module (tests.python.test_parser.ParserTests.test_math_module) ... ok test_minus_condition (tests.python.test_parser.ParserTests.test_minus_condition) ... ok test_modify_meta (tests.python.test_parser.ParserTests.test_modify_meta) ... ok test_modulo_condition (tests.python.test_parser.ParserTests.test_modulo_condition) ... ok test_multiple_parse_phases_with_single_yaramod_instance (tests.python.test_parser.ParserTests.test_multiple_parse_phases_with_single_yaramod_instance) ... ok test_multiple_rules (tests.python.test_parser.ParserTests.test_multiple_rules) ... ok test_multiply_condition (tests.python.test_parser.ParserTests.test_multiply_condition) ... ok test_nonutf_comments (tests.python.test_parser.ParserTests.test_nonutf_comments) ... ok test_not_condition (tests.python.test_parser.ParserTests.test_not_condition) ... ok test_not_equal_condition (tests.python.test_parser.ParserTests.test_not_equal_condition) ... ok test_of_at_condition (tests.python.test_parser.ParserTests.test_of_at_condition) ... ok test_of_at_with_string_set_condition (tests.python.test_parser.ParserTests.test_of_at_with_string_set_condition) ... ok test_of_condition (tests.python.test_parser.ParserTests.test_of_condition) ... ok test_or_condition (tests.python.test_parser.ParserTests.test_or_condition) ... ok test_parentheses_condition (tests.python.test_parser.ParserTests.test_parentheses_condition) ... ok test_parse_elf_dynsym (tests.python.test_parser.ParserTests.test_parse_elf_dynsym) ... ok test_parse_pe_signatures_x_algorithm_oid (tests.python.test_parser.ParserTests.test_parse_pe_signatures_x_algorithm_oid) ... ok test_parse_percentage (tests.python.test_parser.ParserTests.test_parse_percentage) ... ok test_parser_error (tests.python.test_parser.ParserTests.test_parser_error) ... ok test_pe_delayed_imports (tests.python.test_parser.ParserTests.test_pe_delayed_imports) ... ok test_pe_imports (tests.python.test_parser.ParserTests.test_pe_imports) ... ok test_pe_number_of_imported_functions (tests.python.test_parser.ParserTests.test_pe_number_of_imported_functions) ... ok test_plain_strings_with_modifiers (tests.python.test_parser.ParserTests.test_plain_strings_with_modifiers) ... ok test_plus_condition (tests.python.test_parser.ParserTests.test_plus_condition) ... ok test_private_rule (tests.python.test_parser.ParserTests.test_private_rule) ... ok test_regular_expression_character_classes (tests.python.test_parser.ParserTests.test_regular_expression_character_classes) ... ok test_regular_expression_escape_sequences (tests.python.test_parser.ParserTests.test_regular_expression_escape_sequences) ... ok test_regular_expression_meta_characters (tests.python.test_parser.ParserTests.test_regular_expression_meta_characters) ... ok test_regular_expression_quantifiers (tests.python.test_parser.ParserTests.test_regular_expression_quantifiers) ... ok test_regular_expression_quantifiers_nongreedy (tests.python.test_parser.ParserTests.test_regular_expression_quantifiers_nongreedy) ... ok test_regular_expression_suffix_modifiers (tests.python.test_parser.ParserTests.test_regular_expression_suffix_modifiers) ... ok test_remove_import (tests.python.test_parser.ParserTests.test_remove_import) ... ok test_rule_locations (tests.python.test_parser.ParserTests.test_rule_locations) ... ok test_rule_with_hex_string (tests.python.test_parser.ParserTests.test_rule_with_hex_string) ... ok test_rule_with_metas (tests.python.test_parser.ParserTests.test_rule_with_metas) ... ok test_rule_with_plain_strings (tests.python.test_parser.ParserTests.test_rule_with_plain_strings) ... ok test_rule_with_regexp (tests.python.test_parser.ParserTests.test_rule_with_regexp) ... ok test_rule_with_tags (tests.python.test_parser.ParserTests.test_rule_with_tags) ... ok test_rule_with_unordered_sections (tests.python.test_parser.ParserTests.test_rule_with_unordered_sections) ... ok test_rule_with_variable_and_string (tests.python.test_parser.ParserTests.test_rule_with_variable_and_string) ... ok test_rule_with_variables (tests.python.test_parser.ParserTests.test_rule_with_variables) ... ok test_shift_left_condition (tests.python.test_parser.ParserTests.test_shift_left_condition) ... ok test_shift_right_condition (tests.python.test_parser.ParserTests.test_shift_right_condition) ... ok test_simple_regular_expression_in_strings (tests.python.test_parser.ParserTests.test_simple_regular_expression_in_strings) ... ok test_string_at_condition (tests.python.test_parser.ParserTests.test_string_at_condition) ... ok test_string_condition (tests.python.test_parser.ParserTests.test_string_condition) ... ok test_string_in_range_condition (tests.python.test_parser.ParserTests.test_string_in_range_condition) ... ok test_string_locations (tests.python.test_parser.ParserTests.test_string_locations) ... ok test_string_with_invalid_utf8_sequences (tests.python.test_parser.ParserTests.test_string_with_invalid_utf8_sequences) ... ok test_structure_access_condition (tests.python.test_parser.ParserTests.test_structure_access_condition) ... ok test_unary_minus_condition (tests.python.test_parser.ParserTests.test_unary_minus_condition) ... ok test_variable_condition (tests.python.test_parser.ParserTests.test_variable_condition) ... ok test_xor_condition (tests.python.test_parser.ParserTests.test_xor_condition) ... ok test_change_meta_of_rule (tests.python.test_representation.RepresentationTests.test_change_meta_of_rule) ... ok test_custom_module_enhancing_known_module (tests.python.test_representation.RepresentationTests.test_custom_module_enhancing_known_module) ... ok test_custom_module_interface (tests.python.test_representation.RepresentationTests.test_custom_module_interface) ... ok test_get_modulepool (tests.python.test_representation.RepresentationTests.test_get_modulepool) ... ok test_get_string_modifiers (tests.python.test_representation.RepresentationTests.test_get_string_modifiers) ... ok test_get_tokenstream (tests.python.test_representation.RepresentationTests.test_get_tokenstream) ... ok test_get_tokenstream_after_syntax_error_1 (tests.python.test_representation.RepresentationTests.test_get_tokenstream_after_syntax_error_1) ... ok test_get_tokenstream_after_syntax_error_2 (tests.python.test_representation.RepresentationTests.test_get_tokenstream_after_syntax_error_2) ... ok test_get_tokenstream_after_unknown_identifier_error (tests.python.test_representation.RepresentationTests.test_get_tokenstream_after_unknown_identifier_error) ... ok test_get_tokenstream_after_unknown_module_error (tests.python.test_representation.RepresentationTests.test_get_tokenstream_after_unknown_module_error) ... ok test_literals (tests.python.test_representation.RepresentationTests.test_literals) ... ok test_meta_values_interface (tests.python.test_representation.RepresentationTests.test_meta_values_interface) ... ok test_module_interface (tests.python.test_representation.RepresentationTests.test_module_interface) ... ok test_remove_string_modifiers (tests.python.test_representation.RepresentationTests.test_remove_string_modifiers) ... ok test_set_tags_on_a_rule_with_tags (tests.python.test_representation.RepresentationTests.test_set_tags_on_a_rule_with_tags) ... ok test_set_tags_on_a_rule_without_tags (tests.python.test_representation.RepresentationTests.test_set_tags_on_a_rule_without_tags) ... ok test_set_tags_to_empty_list (tests.python.test_representation.RepresentationTests.test_set_tags_to_empty_list) ... ok test_set_tags_to_empty_list_on_a_rule_without_tags (tests.python.test_representation.RepresentationTests.test_set_tags_to_empty_list_on_a_rule_without_tags) ... ok test_find_token (tests.python.test_tokenstream.TokenStreamTests.test_find_token) ... ok test_iteration (tests.python.test_tokenstream.TokenStreamTests.test_iteration) ... ok test_modify_stream (tests.python.test_tokenstream.TokenStreamTests.test_modify_stream) ... ok test_mypy (tests.python.test_typing_stub.TypingStubTests.test_mypy) ... skipped 'MyPy not installed.' test_cuckoo_function_replacer (tests.python.test_visitor.VisitorTests.test_cuckoo_function_replacer) ... ok test_modifying_visitor_delete_rules (tests.python.test_visitor.VisitorTests.test_modifying_visitor_delete_rules) ... ok test_modifying_visitor_eq_expression (tests.python.test_visitor.VisitorTests.test_modifying_visitor_eq_expression) ... ok test_modifying_visitor_inpact_on_regexp_expression (tests.python.test_visitor.VisitorTests.test_modifying_visitor_inpact_on_regexp_expression) ... ok test_modifying_visitor_or_deleter (tests.python.test_visitor.VisitorTests.test_modifying_visitor_or_deleter) ... ok test_pe_iconhash_deleter (tests.python.test_visitor.VisitorTests.test_pe_iconhash_deleter) ... ok test_rule_inserter (tests.python.test_visitor.VisitorTests.test_rule_inserter) ... ok test_simple_modifying_visitor (tests.python.test_visitor.VisitorTests.test_simple_modifying_visitor) ... ok ---------------------------------------------------------------------- Ran 530 tests in 23.317s 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-aarch64-linux-gnu && 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-aarch64-linux-gnu' /usr/bin/cmake -S/build/reproducible-path/yaramod-3.21.0 -B/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu --check-build-system CMakeFiles/Makefile.cmake 0 make -f CMakeFiles/Makefile2 preinstall make[3]: Entering directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' make[3]: Nothing to be done for 'preinstall'. make[3]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' Install the project... /usr/bin/cmake -P cmake_install.cmake -- Install configuration: "None" -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/aarch64-linux-gnu/libyaramod.so.3.21.0 -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/aarch64-linux-gnu/libyaramod.so.0 -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/aarch64-linux-gnu/libyaramod.so -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/aarch64-linux-gnu/libyaramod.a -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod -- Installing: /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/include/yaramod/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/aarch64-linux-gnu/pkgconfig/yaramod.pc make[2]: Leaving directory '/build/reproducible-path/yaramod-3.21.0/obj-aarch64-linux-gnu' dh_auto_install -a -O--buildsystem=pybuild I: pybuild base:311: /usr/bin/python3 setup.py install --root /build/reproducible-path/yaramod-3.21.0/debian/tmp /usr/lib/python3/dist-packages/setuptools/dist.py:493: SetuptoolsDeprecationWarning: Invalid dash-separated options !! ******************************************************************************** Usage of dash-separated 'description-file' will not be supported in future versions. Please use the underscore name 'description_file' instead. This deprecation is overdue, please update your project and remove deprecated calls to avoid build errors in the future. See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details. ******************************************************************************** !! opt = self.warn_dash_deprecation(opt, section) running install /usr/lib/python3/dist-packages/setuptools/_distutils/cmd.py:79: SetuptoolsDeprecationWarning: setup.py install is deprecated. !! ******************************************************************************** Please avoid running ``setup.py`` directly. Instead, use pypa/build, pypa/installer or other standards-based tools. See https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html for details. ******************************************************************************** !! self.initialize_options() running build running build_py running build_ext running install_lib creating /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/python3.13/dist-packages creating /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/python3.13/dist-packages/yaramod copying /build/reproducible-path/yaramod-3.21.0/.pybuild/cpython3_3.13/build/yaramod/__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-aarch64-linux-gnu.so -> /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/python3.13/dist-packages running install_egg_info running egg_info creating yaramod.egg-info writing yaramod.egg-info/PKG-INFO writing dependency_links to yaramod.egg-info/dependency_links.txt writing top-level names to yaramod.egg-info/top_level.txt writing manifest file 'yaramod.egg-info/SOURCES.txt' reading manifest file 'yaramod.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' adding license file 'LICENSE' writing manifest file 'yaramod.egg-info/SOURCES.txt' Copying yaramod.egg-info to /build/reproducible-path/yaramod-3.21.0/debian/tmp/usr/lib/python3.13/dist-packages/yaramod-3.21.0.egg-info Skipping SOURCES.txt running install_scripts make[1]: Leaving directory '/build/reproducible-path/yaramod-3.21.0' dh_install -a dh_installdocs -a dh_installchangelogs -a dh_installexamples -a dh_python3 -a dh_perl -a dh_link -a dh_strip_nondeterminism -a dh_compress -a dh_fixperms -a dh_missing -a dh_dwz -a dh_strip -a dh_makeshlibs -a dh_shlibdeps -a dpkg-shlibdeps: warning: diversions involved - output may be incorrect diversion by libc6 from: /lib/ld-linux-aarch64.so.1 dpkg-shlibdeps: warning: diversions involved - output may be incorrect diversion by libc6 to: /lib/ld-linux-aarch64.so.1.usr-is-merged dpkg-shlibdeps: warning: diversions involved - output may be incorrect diversion by libc6 from: /lib/ld-linux-aarch64.so.1 dpkg-shlibdeps: warning: diversions involved - output may be incorrect diversion by libc6 to: /lib/ld-linux-aarch64.so.1.usr-is-merged dh_installdeb -a dh_gencontrol -a dpkg-gencontrol: warning: Provides field of package python3-yaramod: substitution variable ${python3:Provides} used, but is not defined dpkg-gencontrol: warning: Provides field of package python3-yaramod: substitution variable ${python3:Provides} used, but is not defined dh_md5sums -a dh_builddeb -a dpkg-deb: building package 'libyaramod0-dbgsym' in '../libyaramod0-dbgsym_3.21.0-1.1+b2_arm64.deb'. dpkg-deb: building package 'libyaramod-dev' in '../libyaramod-dev_3.21.0-1.1+b2_arm64.deb'. dpkg-deb: building package 'libyaramod0' in '../libyaramod0_3.21.0-1.1+b2_arm64.deb'. dpkg-deb: building package 'python3-yaramod' in '../python3-yaramod_3.21.0-1.1+b2_arm64.deb'. dpkg-deb: building package 'python3-yaramod-dbgsym' in '../python3-yaramod-dbgsym_3.21.0-1.1+b2_arm64.deb'. dpkg-genbuildinfo --build=any -O../yaramod_3.21.0-1.1+b2_arm64.buildinfo dpkg-genchanges --build=any -O../yaramod_3.21.0-1.1+b2_arm64.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-27T11:02:59Z Finished -------- I: Built successfully +------------------------------------------------------------------------------+ | Changes Thu, 27 Nov 2025 11:03:01 +0000 | +------------------------------------------------------------------------------+ yaramod_3.21.0-1.1+b2_arm64.changes: ------------------------------------ Format: 1.8 Date: Tue, 11 Mar 2025 10:57:05 +0000 Source: yaramod (3.21.0-1.1) Binary: libyaramod-dev libyaramod0 libyaramod0-dbgsym python3-yaramod python3-yaramod-dbgsym Binary-Only: yes Architecture: arm64 Version: 3.21.0-1.1+b2 Distribution: unstable Urgency: low Maintainer: Yangfl Changed-By: arm Build Daemon (arm-conova-04) 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 arm64; no source changes. * Rebuild against blibre2-11-absl20240722. Checksums-Sha1: edadb1a98bed5adb07229148889d321c6ce081e0 682184 libyaramod-dev_3.21.0-1.1+b2_arm64.deb 506d12bfa3f621fcfb1ab38901c5d82a547f38b2 12343472 libyaramod0-dbgsym_3.21.0-1.1+b2_arm64.deb 1ba54df91772305a25e3f4ae6d5e3574d9e811d7 460596 libyaramod0_3.21.0-1.1+b2_arm64.deb e4bc14a2a17f40be5baeb1d1155d147e19c5fa1f 10334064 python3-yaramod-dbgsym_3.21.0-1.1+b2_arm64.deb 3cf4ec832b013105f61cead8bde7891f1ca5cc40 368040 python3-yaramod_3.21.0-1.1+b2_arm64.deb 3d30599c70a81e20a61b71aff307ae4e0d819854 8760 yaramod_3.21.0-1.1+b2_arm64.buildinfo Checksums-Sha256: cef3b50e4812882afb25e5eec36aab268f5077c0a30a2aaa2923d26456153fa3 682184 libyaramod-dev_3.21.0-1.1+b2_arm64.deb a190b345b65fcc4e1d8aa64e28b6d69d2c879edad43c2856f6b5b43fb65d0e2b 12343472 libyaramod0-dbgsym_3.21.0-1.1+b2_arm64.deb f70168912653506ea1263d980ce5e0cfc00481701af91a77852a7b0c4b224a50 460596 libyaramod0_3.21.0-1.1+b2_arm64.deb eadb2eed63fc95709644b8f65f03915d620687c75aa1e098bbddcd7ed1774776 10334064 python3-yaramod-dbgsym_3.21.0-1.1+b2_arm64.deb ec80d2929ff4206ed092915b03cbd52da3db1974f13a6518afb6f9e32095a6fd 368040 python3-yaramod_3.21.0-1.1+b2_arm64.deb 82b8269097986870ae577696b52b55946e0d36fe1a441bec65e45cb425172141 8760 yaramod_3.21.0-1.1+b2_arm64.buildinfo Files: 515c6f3eaca4f5d9b6542eea07456cca 682184 libdevel optional libyaramod-dev_3.21.0-1.1+b2_arm64.deb 21a9307b18a648bb889a3322615ae6ff 12343472 debug optional libyaramod0-dbgsym_3.21.0-1.1+b2_arm64.deb a9d6a81eb2e10e68fc95820cc2c80e36 460596 libs optional libyaramod0_3.21.0-1.1+b2_arm64.deb 8b3730840530ad805203d6f2194d64e2 10334064 debug optional python3-yaramod-dbgsym_3.21.0-1.1+b2_arm64.deb 88fe73f21a3c1bbf249e7785cec3262f 368040 python optional python3-yaramod_3.21.0-1.1+b2_arm64.deb 6ba054841864ab005af414425270dad5 8760 libs optional yaramod_3.21.0-1.1+b2_arm64.buildinfo +------------------------------------------------------------------------------+ | Buildinfo Thu, 27 Nov 2025 11:03:02 +0000 | +------------------------------------------------------------------------------+ Format: 1.0 Source: yaramod (3.21.0-1.1) Binary: libyaramod-dev libyaramod0 libyaramod0-dbgsym python3-yaramod python3-yaramod-dbgsym Architecture: arm64 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 arm64; no source changes. * Rebuild against blibre2-11-absl20240722. . -- arm Build Daemon (arm-conova-04) Tue, 11 Mar 2025 10:57:05 +0000 Checksums-Md5: 515c6f3eaca4f5d9b6542eea07456cca 682184 libyaramod-dev_3.21.0-1.1+b2_arm64.deb 21a9307b18a648bb889a3322615ae6ff 12343472 libyaramod0-dbgsym_3.21.0-1.1+b2_arm64.deb a9d6a81eb2e10e68fc95820cc2c80e36 460596 libyaramod0_3.21.0-1.1+b2_arm64.deb 8b3730840530ad805203d6f2194d64e2 10334064 python3-yaramod-dbgsym_3.21.0-1.1+b2_arm64.deb 88fe73f21a3c1bbf249e7785cec3262f 368040 python3-yaramod_3.21.0-1.1+b2_arm64.deb Checksums-Sha1: edadb1a98bed5adb07229148889d321c6ce081e0 682184 libyaramod-dev_3.21.0-1.1+b2_arm64.deb 506d12bfa3f621fcfb1ab38901c5d82a547f38b2 12343472 libyaramod0-dbgsym_3.21.0-1.1+b2_arm64.deb 1ba54df91772305a25e3f4ae6d5e3574d9e811d7 460596 libyaramod0_3.21.0-1.1+b2_arm64.deb e4bc14a2a17f40be5baeb1d1155d147e19c5fa1f 10334064 python3-yaramod-dbgsym_3.21.0-1.1+b2_arm64.deb 3cf4ec832b013105f61cead8bde7891f1ca5cc40 368040 python3-yaramod_3.21.0-1.1+b2_arm64.deb Checksums-Sha256: cef3b50e4812882afb25e5eec36aab268f5077c0a30a2aaa2923d26456153fa3 682184 libyaramod-dev_3.21.0-1.1+b2_arm64.deb a190b345b65fcc4e1d8aa64e28b6d69d2c879edad43c2856f6b5b43fb65d0e2b 12343472 libyaramod0-dbgsym_3.21.0-1.1+b2_arm64.deb f70168912653506ea1263d980ce5e0cfc00481701af91a77852a7b0c4b224a50 460596 libyaramod0_3.21.0-1.1+b2_arm64.deb eadb2eed63fc95709644b8f65f03915d620687c75aa1e098bbddcd7ed1774776 10334064 python3-yaramod-dbgsym_3.21.0-1.1+b2_arm64.deb ec80d2929ff4206ed092915b03cbd52da3db1974f13a6518afb6f9e32095a6fd 368040 python3-yaramod_3.21.0-1.1+b2_arm64.deb Build-Origin: Debian Build-Architecture: arm64 Build-Date: Thu, 27 Nov 2025 11:02:58 +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-aarch64-linux-gnu (= 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+b1), cpp (= 4:14.2.0-1), cpp-14 (= 14.2.0-17), cpp-14-aarch64-linux-gnu (= 14.2.0-17), cpp-aarch64-linux-gnu (= 4:14.2.0-1), dash (= 0.5.12-12), debconf (= 1.5.90), debhelper (= 13.24.1), debianutils (= 5.21), dh-autoreconf (= 20), dh-python (= 6.20250308), dh-strip-nondeterminism (= 1.14.1-2), diffutils (= 1:3.10-2), dpkg (= 1.22.18), dpkg-dev (= 1.22.18), dwz (= 0.15-1+b1), file (= 1:5.45-3+b1), findutils (= 4.10.0-3), g++ (= 4:14.2.0-1), g++-14 (= 14.2.0-17), g++-14-aarch64-linux-gnu (= 14.2.0-17), g++-aarch64-linux-gnu (= 4:14.2.0-1), gcc (= 4:14.2.0-1), gcc-14 (= 14.2.0-17), gcc-14-aarch64-linux-gnu (= 14.2.0-17), gcc-14-base (= 14.2.0-17), gcc-aarch64-linux-gnu (= 4:14.2.0-1), gettext (= 0.23.1-1), gettext-base (= 0.23.1-1), googletest (= 1.16.0-1), grep (= 3.11-4+b1), groff-base (= 1.23.0-7), gzip (= 1.13-1), hostname (= 3.25), init-system-helpers (= 1.68), intltool-debian (= 0.35.0+20060710.6), libabsl-dev (= 20240722.0-1.5), libabsl20240722 (= 20240722.0-1.5), libacl1 (= 2.3.2-2+b1), libarchive-zip-perl (= 1.68-1), libarchive13t64 (= 3.7.4-1.1), libasan8 (= 14.2.0-17), libatomic1 (= 14.2.0-17), libattr1 (= 1:2.5.2-3), libaudit-common (= 1:4.0.2-2), libaudit1 (= 1:4.0.2-2+b2), libbinutils (= 2.44-3), libblkid1 (= 2.40.4-5), libbrotli1 (= 1.1.0-2+b7), libbz2-1.0 (= 1.0.8-6), libc-bin (= 2.41-4), libc-dev-bin (= 2.41-4), libc6 (= 2.41-4), libc6-dev (= 2.41-4), libcap-ng0 (= 0.8.5-4+b1), libcap2 (= 1:2.75-1), libcc1-0 (= 14.2.0-17), libcom-err2 (= 1.47.2-1), libcrypt-dev (= 1:4.4.38-1), libcrypt1 (= 1:4.4.38-1), libctf-nobfd0 (= 2.44-3), libctf0 (= 2.44-3), libcurl4t64 (= 8.12.1-3), libdb5.3t64 (= 5.3.28+dfsg2-9), libdebconfclient0 (= 0.277), libdebhelper-perl (= 13.24.1), libdpkg-perl (= 1.22.18), libelf1t64 (= 0.192-4), libexpat1 (= 2.6.4-1), libexpat1-dev (= 2.6.4-1), libffi8 (= 3.4.7-1), libfile-stripnondeterminism-perl (= 1.14.1-2), libfmt-dev (= 10.1.1+ds1-4), libfmt10 (= 10.1.1+ds1-4), libgcc-14-dev (= 14.2.0-17), libgcc-s1 (= 14.2.0-17), libgdbm-compat4t64 (= 1.24-2), libgdbm6t64 (= 1.24-2), libgmp10 (= 2:6.3.0+dfsg-3), libgnutls30t64 (= 3.8.9-2), libgomp1 (= 14.2.0-17), libgprofng0 (= 2.44-3), libgssapi-krb5-2 (= 1.21.3-4), libgtest-dev (= 1.16.0-1), libhogweed6t64 (= 3.10.1-1), libhwasan0 (= 14.2.0-17), libicu72 (= 72.1-6), libidn2-0 (= 2.3.8-1), libisl23 (= 0.27-1), libitm1 (= 14.2.0-17), libjansson4 (= 2.14-2+b3), libjs-jquery (= 3.6.1+dfsg+~3.5.14-1), libjs-sphinxdoc (= 8.1.3-5), libjs-underscore (= 1.13.4~dfsg+~1.11.4-3), libjsoncpp26 (= 1.9.6-3), libk5crypto3 (= 1.21.3-4), libkeyutils1 (= 1.6.3-4), libkrb5-3 (= 1.21.3-4), libkrb5support0 (= 1.21.3-4), libldap2 (= 2.6.9+dfsg-1), liblsan0 (= 14.2.0-17), liblz4-1 (= 1.10.0-4), liblzma5 (= 5.6.4-1), libmagic-mgc (= 1:5.45-3+b1), libmagic1t64 (= 1:5.45-3+b1), libmd0 (= 1.1.0-2+b1), libmount1 (= 2.40.4-5), libmpc3 (= 1.3.1-1+b3), libmpfr6 (= 4.2.1-1+b2), libncursesw6 (= 6.5+20250216-2), libnettle8t64 (= 3.10.1-1), libnghttp2-14 (= 1.64.0-1), libnghttp3-9 (= 1.8.0-1), libp11-kit0 (= 0.25.5-3), libpam-modules (= 1.7.0-3), libpam-modules-bin (= 1.7.0-3), libpam-runtime (= 1.7.0-3), libpam0g (= 1.7.0-3), libpcre2-8-0 (= 10.45-1), libperl5.40 (= 5.40.1-2), libpipeline1 (= 1.5.8-1), libpkgconf3 (= 1.8.1-4), libpog-dev (= 0.5.3-3), libproc2-0 (= 2:4.0.4-7), libpsl5t64 (= 0.21.2-1.1+b1), libpython3-dev (= 3.13.2-2), libpython3-stdlib (= 3.13.2-2), libpython3.13 (= 3.13.2-1), libpython3.13-dev (= 3.13.2-1), libpython3.13-minimal (= 3.13.2-1), libpython3.13-stdlib (= 3.13.2-1), libre2-11 (= 20240702-3+b1), libre2-dev (= 20240702-3+b1), libreadline8t64 (= 8.2-6), librhash1 (= 1.4.5-1), librtmp1 (= 2.4+20151223.gitfa8646d.1-2+b5), libsasl2-2 (= 2.1.28+dfsg1-9), libsasl2-modules-db (= 2.1.28+dfsg1-9), libseccomp2 (= 2.5.5-2+b1), libselinux1 (= 3.8-4), libsframe1 (= 2.44-3), libsmartcols1 (= 2.40.4-5), libsqlite3-0 (= 3.46.1-2), libssh2-1t64 (= 1.11.1-1), libssl3t64 (= 3.4.1-1), libstdc++-14-dev (= 14.2.0-17), libstdc++6 (= 14.2.0-17), libsystemd0 (= 257.4-1), libtasn1-6 (= 4.20.0-2), libtinfo6 (= 6.5+20250216-2), libtool (= 2.5.4-4), libtsan2 (= 14.2.0-17), libubsan1 (= 14.2.0-17), libuchardet0 (= 0.0.8-1+b2), libudev1 (= 257.4-1), libunistring5 (= 1.3-1), libuuid1 (= 2.40.4-5), libuv1t64 (= 1.50.0-2), libxml2 (= 2.12.7+dfsg+really2.9.14-0.2+b2), libxxhash0 (= 0.8.3-2), libyaml-0-2 (= 0.2.5-2), libzstd1 (= 1.5.6+dfsg-2), linux-libc-dev (= 6.12.17-1), m4 (= 1.4.19-7), make (= 4.4.1-1), man-db (= 2.13.0-1), mawk (= 1.3.4.20250131-1), media-types (= 13.0.0), ncurses-base (= 6.5+20250216-2), ncurses-bin (= 6.5+20250216-2), netbase (= 6.4), nlohmann-json3-dev (= 3.11.3-2), openssl-provider-legacy (= 3.4.1-1), patch (= 2.7.6-7+b1), 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+b1), sed (= 4.9-2+b1), 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="1741690625" +------------------------------------------------------------------------------+ | Package contents Thu, 27 Nov 2025 11:03:03 +0000 | +------------------------------------------------------------------------------+ libyaramod-dev_3.21.0-1.1+b2_arm64.deb -------------------------------------- new Debian package, version 2.0. size 682184 bytes: control archive=2660 bytes. 612 bytes, 17 lines control 6102 bytes, 73 lines md5sums Package: libyaramod-dev Source: yaramod (3.21.0-1.1) Version: 3.21.0-1.1+b2 Architecture: arm64 Maintainer: Yangfl Installed-Size: 8046 Depends: libyaramod0 (= 3.21.0-1.1+b2), libpog-dev Section: libdevel Priority: optional Multi-Arch: same Homepage: https://github.com/avast/yaramod Description: YARA parser for C++ (development headers) yaramod is a library that provides parsing of YARA rules into AST and a C++ programming interface to build new YARA rulesets. yaramod also comes with Python bindings and can be installed using pip. . This package contains the development headers. drwxr-xr-x root/root 0 2025-03-11 10:57 ./ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/include/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/include/yaramod/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/include/yaramod/builder/ -rw-r--r-- root/root 11617 2024-01-04 20:03 ./usr/include/yaramod/builder/yara_expression_builder.h -rw-r--r-- root/root 2211 2024-01-04 20:03 ./usr/include/yaramod/builder/yara_file_builder.h -rw-r--r-- root/root 5016 2024-01-04 20:03 ./usr/include/yaramod/builder/yara_hex_string_builder.h -rw-r--r-- root/root 4607 2024-01-04 20:03 ./usr/include/yaramod/builder/yara_rule_builder.h drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/include/yaramod/parser/ -rw-r--r-- root/root 1415 2024-01-04 20:03 ./usr/include/yaramod/parser/file_context.h -rw-r--r-- root/root 2898 2024-01-04 20:03 ./usr/include/yaramod/parser/location.h -rw-r--r-- root/root 7539 2024-01-04 20:03 ./usr/include/yaramod/parser/parser_driver.h -rw-r--r-- root/root 626 2024-01-04 20:03 ./usr/include/yaramod/parser/uid_generator.h -rw-r--r-- root/root 5246 2024-01-04 20:03 ./usr/include/yaramod/parser/value.h drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/include/yaramod/types/ -rw-r--r-- root/root 4502 2024-01-04 20:03 ./usr/include/yaramod/types/expression.h -rw-r--r-- root/root 320 2024-01-04 20:03 ./usr/include/yaramod/types/expression_type.h -rw-r--r-- root/root 65093 2024-01-04 20:03 ./usr/include/yaramod/types/expressions.h -rw-r--r-- root/root 1040 2024-01-04 20:03 ./usr/include/yaramod/types/features.h -rw-r--r-- root/root 9970 2024-01-04 20:03 ./usr/include/yaramod/types/hex_string.h -rw-r--r-- root/root 5178 2024-01-04 20:03 ./usr/include/yaramod/types/literal.h -rw-r--r-- root/root 1051 2024-01-04 20:03 ./usr/include/yaramod/types/meta.h drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/include/yaramod/types/modules/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/include/yaramod/types/modules/generated/ -rw-r--r-- root/root 21379 2025-03-11 10:57 ./usr/include/yaramod/types/modules/generated/module_console_generated.h -rw-r--r-- root/root 4321 2025-03-11 10:57 ./usr/include/yaramod/types/modules/generated/module_cuckoo_deprecated_generated.h -rw-r--r-- root/root 43587 2025-03-11 10:57 ./usr/include/yaramod/types/modules/generated/module_cuckoo_generated.h -rw-r--r-- root/root 156820 2025-03-11 10:57 ./usr/include/yaramod/types/modules/generated/module_dex_generated.h -rw-r--r-- root/root 100101 2025-03-11 10:57 ./usr/include/yaramod/types/modules/generated/module_dotnet_generated.h -rw-r--r-- root/root 141897 2025-03-11 10:57 ./usr/include/yaramod/types/modules/generated/module_elf_generated.h -rw-r--r-- root/root 28745 2025-03-11 10:57 ./usr/include/yaramod/types/modules/generated/module_hash_generated.h -rw-r--r-- root/root 1151 2025-03-11 10:57 ./usr/include/yaramod/types/modules/generated/module_list.h -rw-r--r-- root/root 222853 2025-03-11 10:57 ./usr/include/yaramod/types/modules/generated/module_macho_generated.h -rw-r--r-- root/root 4698 2025-03-11 10:57 ./usr/include/yaramod/types/modules/generated/module_magic_generated.h -rw-r--r-- root/root 84731 2025-03-11 10:57 ./usr/include/yaramod/types/modules/generated/module_math_generated.h -rw-r--r-- root/root 396231 2025-03-11 10:57 ./usr/include/yaramod/types/modules/generated/module_pe_generated.h -rw-r--r-- root/root 11493 2025-03-11 10:57 ./usr/include/yaramod/types/modules/generated/module_string_generated.h -rw-r--r-- root/root 2834 2025-03-11 10:57 ./usr/include/yaramod/types/modules/generated/module_time_generated.h -rw-r--r-- root/root 2501 2024-01-04 20:03 ./usr/include/yaramod/types/modules/module.h -rw-r--r-- root/root 898 2024-01-04 20:03 ./usr/include/yaramod/types/modules/module_content.h -rw-r--r-- root/root 1767 2024-01-04 20:03 ./usr/include/yaramod/types/modules/module_pool.h -rw-r--r-- root/root 1185 2024-01-04 20:03 ./usr/include/yaramod/types/plain_string.h -rw-r--r-- root/root 18065 2024-01-04 20:03 ./usr/include/yaramod/types/regexp.h -rw-r--r-- root/root 3717 2024-01-04 20:03 ./usr/include/yaramod/types/rule.h -rw-r--r-- root/root 1551 2024-01-04 20:03 ./usr/include/yaramod/types/sections_summary.h -rw-r--r-- root/root 7772 2024-01-04 20:03 ./usr/include/yaramod/types/string.h -rw-r--r-- root/root 6158 2024-01-04 20:03 ./usr/include/yaramod/types/string_modifier.h -rw-r--r-- root/root 2905 2024-01-04 20:03 ./usr/include/yaramod/types/symbol.h -rw-r--r-- root/root 10093 2024-01-04 20:03 ./usr/include/yaramod/types/symbols.h -rw-r--r-- root/root 5922 2024-01-04 20:03 ./usr/include/yaramod/types/token.h -rw-r--r-- root/root 6711 2024-01-04 20:03 ./usr/include/yaramod/types/token_stream.h -rw-r--r-- root/root 2227 2024-01-04 20:03 ./usr/include/yaramod/types/token_type.h -rw-r--r-- root/root 1136 2024-01-04 20:03 ./usr/include/yaramod/types/variable.h -rw-r--r-- root/root 4105 2024-01-04 20:03 ./usr/include/yaramod/types/yara_file.h drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/include/yaramod/utils/ -rw-r--r-- root/root 566 2024-01-04 20:03 ./usr/include/yaramod/utils/filesystem.h -rw-r--r-- root/root 482 2024-01-04 20:03 ./usr/include/yaramod/utils/filesystem_operations.h -rw-r--r-- root/root 702 2025-03-11 10:57 ./usr/include/yaramod/utils/json.h -rw-r--r-- root/root 24258 2024-01-04 20:03 ./usr/include/yaramod/utils/modifying_visitor.h -rw-r--r-- root/root 11973 2024-01-04 20:03 ./usr/include/yaramod/utils/observing_visitor.h -rw-r--r-- root/root 9429 2024-01-04 20:03 ./usr/include/yaramod/utils/trie.h -rw-r--r-- root/root 3652 2024-01-04 20:03 ./usr/include/yaramod/utils/utils.h -rw-r--r-- root/root 8104 2024-01-04 20:03 ./usr/include/yaramod/utils/visitor.h -rw-r--r-- root/root 918 2024-01-04 20:03 ./usr/include/yaramod/utils/visitor_result.h -rw-r--r-- root/root 2254 2024-01-04 20:03 ./usr/include/yaramod/yaramod.h -rw-r--r-- root/root 799 2024-01-04 20:03 ./usr/include/yaramod/yaramod_error.h drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/lib/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/lib/aarch64-linux-gnu/ -rw-r--r-- root/root 6631886 2025-03-11 10:57 ./usr/lib/aarch64-linux-gnu/libyaramod.a lrwxrwxrwx root/root 0 2025-03-11 10:57 ./usr/lib/aarch64-linux-gnu/libyaramod.so -> libyaramod.so.0 drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/lib/aarch64-linux-gnu/pkgconfig/ -rw-r--r-- root/root 210 2025-03-11 10:57 ./usr/lib/aarch64-linux-gnu/pkgconfig/yaramod.pc drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/share/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/share/doc/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/share/doc/libyaramod-dev/ -rw-r--r-- root/root 230 2025-03-11 10:57 ./usr/share/doc/libyaramod-dev/changelog.Debian.arm64.gz -rw-r--r-- root/root 480 2025-03-11 10:57 ./usr/share/doc/libyaramod-dev/changelog.Debian.gz -rw-r--r-- root/root 6302 2024-01-04 20:03 ./usr/share/doc/libyaramod-dev/changelog.gz -rw-r--r-- root/root 3733 2024-06-02 03:14 ./usr/share/doc/libyaramod-dev/copyright drwxr-xr-x root/root 0 2025-03-11 10:57 ./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_arm64.deb ------------------------------------------ new Debian package, version 2.0. size 12343472 bytes: control archive=540 bytes. 381 bytes, 13 lines control 106 bytes, 1 lines md5sums Package: libyaramod0-dbgsym Source: yaramod (3.21.0-1.1) Version: 3.21.0-1.1+b2 Auto-Built-Package: debug-symbols Architecture: arm64 Maintainer: Yangfl Installed-Size: 12944 Depends: libyaramod0 (= 3.21.0-1.1+b2) Section: debug Priority: optional Multi-Arch: same Description: debug symbols for libyaramod0 Build-Ids: 176ff6a1e72b8ffc97b8a8fc91025c095d09bc46 drwxr-xr-x root/root 0 2025-03-11 10:57 ./ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/lib/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/lib/debug/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/lib/debug/.build-id/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/lib/debug/.build-id/17/ -rw-r--r-- root/root 13244384 2025-03-11 10:57 ./usr/lib/debug/.build-id/17/6ff6a1e72b8ffc97b8a8fc91025c095d09bc46.debug drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/share/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/share/doc/ lrwxrwxrwx root/root 0 2025-03-11 10:57 ./usr/share/doc/libyaramod0-dbgsym -> libyaramod0 libyaramod0_3.21.0-1.1+b2_arm64.deb ----------------------------------- new Debian package, version 2.0. size 460596 bytes: control archive=944 bytes. 611 bytes, 17 lines control 390 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: arm64 Maintainer: Yangfl Installed-Size: 2331 Depends: libc6 (>= 2.38), libgcc-s1 (>= 4.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 10:57 ./ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/lib/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/lib/aarch64-linux-gnu/ lrwxrwxrwx root/root 0 2025-03-11 10:57 ./usr/lib/aarch64-linux-gnu/libyaramod.so.0 -> libyaramod.so.3.21.0 -rw-r--r-- root/root 2361384 2025-03-11 10:57 ./usr/lib/aarch64-linux-gnu/libyaramod.so.3.21.0 drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/share/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/share/doc/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/share/doc/libyaramod0/ -rw-r--r-- root/root 230 2025-03-11 10:57 ./usr/share/doc/libyaramod0/changelog.Debian.arm64.gz -rw-r--r-- root/root 480 2025-03-11 10:57 ./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_arm64.deb ---------------------------------------------- new Debian package, version 2.0. size 10334064 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: arm64 Maintainer: Yangfl Installed-Size: 12120 Depends: python3-yaramod (= 3.21.0-1.1+b2) Section: debug Priority: optional Multi-Arch: same Description: debug symbols for python3-yaramod Build-Ids: c172cfd5fd6811120d078231bee7135734f457f2 drwxr-xr-x root/root 0 2025-03-11 10:57 ./ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/lib/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/lib/debug/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/lib/debug/.build-id/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/lib/debug/.build-id/c1/ -rw-r--r-- root/root 12400224 2025-03-11 10:57 ./usr/lib/debug/.build-id/c1/72cfd5fd6811120d078231bee7135734f457f2.debug drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/share/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/share/doc/ lrwxrwxrwx root/root 0 2025-03-11 10:57 ./usr/share/doc/python3-yaramod-dbgsym -> python3-yaramod python3-yaramod_3.21.0-1.1+b2_arm64.deb --------------------------------------- new Debian package, version 2.0. size 368040 bytes: control archive=1060 bytes. 707 bytes, 17 lines control 904 bytes, 10 lines md5sums Package: python3-yaramod Source: yaramod (3.21.0-1.1) Version: 3.21.0-1.1+b2 Architecture: arm64 Maintainer: Yangfl Installed-Size: 2411 Depends: libc6 (>= 2.32), libgcc-s1 (>= 3.0), libre2-11-absl20240722, libstdc++6 (>= 14), libyaramod0 (>= 3.21.0), python3 (<< 3.14), python3 (>= 3.13~) Section: python Priority: optional Multi-Arch: same Homepage: https://github.com/avast/yaramod Description: YARA parser for C++ (Python 3 binding) yaramod is a library that provides parsing of YARA rules into AST and a C++ programming interface to build new YARA rulesets. yaramod also comes with Python bindings and can be installed using pip. . This package contains the Python 3 binding. drwxr-xr-x root/root 0 2025-03-11 10:57 ./ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/lib/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/lib/python3/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/lib/python3/dist-packages/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/lib/python3/dist-packages/yaramod-3.21.0.egg-info/ -rw-r--r-- root/root 991 2025-03-11 10:57 ./usr/lib/python3/dist-packages/yaramod-3.21.0.egg-info/PKG-INFO -rw-r--r-- root/root 1 2025-03-11 10:57 ./usr/lib/python3/dist-packages/yaramod-3.21.0.egg-info/dependency_links.txt -rw-r--r-- root/root 8 2025-03-11 10:57 ./usr/lib/python3/dist-packages/yaramod-3.21.0.egg-info/top_level.txt -rw-r--r-- root/root 2361632 2025-03-11 10:57 ./usr/lib/python3/dist-packages/yaramod.cpython-313-aarch64-linux-gnu.so drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/lib/python3/dist-packages/yaramod/ -rw-r--r-- root/root 78420 2024-01-04 20:03 ./usr/lib/python3/dist-packages/yaramod/__init__.pyi -rw-r--r-- root/root 0 2024-01-04 20:03 ./usr/lib/python3/dist-packages/yaramod/py.typed drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/share/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/share/doc/ drwxr-xr-x root/root 0 2025-03-11 10:57 ./usr/share/doc/python3-yaramod/ -rw-r--r-- root/root 230 2025-03-11 10:57 ./usr/share/doc/python3-yaramod/changelog.Debian.arm64.gz -rw-r--r-- root/root 480 2025-03-11 10:57 ./usr/share/doc/python3-yaramod/changelog.Debian.gz -rw-r--r-- root/root 6302 2024-01-04 20:03 ./usr/share/doc/python3-yaramod/changelog.gz -rw-r--r-- root/root 3733 2024-06-02 03:14 ./usr/share/doc/python3-yaramod/copyright +------------------------------------------------------------------------------+ | Post Build Thu, 27 Nov 2025 11:03:08 +0000 | +------------------------------------------------------------------------------+ +------------------------------------------------------------------------------+ | Cleanup Thu, 27 Nov 2025 11:03:08 +0000 | +------------------------------------------------------------------------------+ Purging /build/reproducible-path Not cleaning session: cloned chroot in use +------------------------------------------------------------------------------+ | Summary Thu, 27 Nov 2025 11:03:11 +0000 | +------------------------------------------------------------------------------+ Build Architecture: arm64 Build Type: any Build-Space: 866992 Build-Time: 396 Distribution: unstable Host Architecture: arm64 Install-Time: 6 Job: /srv/rebuilderd/tmp/rebuilderdyrdFvc/inputs/yaramod_3.21.0-1.1.dsc Machine Architecture: arm64 Package: yaramod Package-Time: 416 Source-Version: 3.21.0-1.1 Space: 866992 Status: successful Version: 3.21.0-1.1+b2 -------------------------------------------------------------------------------- Finished at 2025-11-27T11:02:59Z Build needed 00:06:56, 866992k disk space build artifacts stored in /srv/rebuilderd/tmp/rebuilderdyrdFvc/out checking libyaramod-dev_3.21.0-1.1+b2_arm64.deb: size differs for libyaramod-dev_3.21.0-1.1+b2_arm64.deb