Latest Repo Discovered
AlgoScanArtifacts
·
MIT License
Top Contributor of the Month
10836 commits in all time
Jan 20, 2026 07:28 – Apr 20, 2026 07:28 UTC
fix: emit an error if substring start is greater than end, this aligns with algod assemble behaviour
c87e6368
main
3/63 ++ 2 --
fix: emit an error if substring start is greater than end, this aligns with algod assemble behaviour
8512f83f
pull/710/head
3/63 ++ 2 --
Merge f1cdc0ce3d310635945e8723f9c396c647ca7a05 into de2875716c4b0a25ecca03e30d9c8a7baaff790c
2159605d
pull/566/merge
2/35 ++ 91 --
Merge 1eeb0bfbc437cbadc46f0d38175f96c744e7d85b into 8e6d4058a6721482bde5f837ced5d3aa4d64411d
e8c31a46
pull/26/merge
3/293 ++ 1 --
Merge de292d3c646151e29eba10b27c53dbcedae761c7 into 12ce2bb3eee8bf19b323666c3747f230798f2d10
90457a79
pull/358/merge
4/235 ++ 150 --
Merge 75c57e2e3d58033e8b2b554d27b3ce766ec3d95c into 8e6d4058a6721482bde5f837ced5d3aa4d64411d
a48ad032
pull/30/merge
3/418 ++ 1 --
test: cover runtime-bytes / runtime-uint64 bit and byte op branches
Adds runtime-argument calls for getbit/setbit/getbyte/setbyte with constant indices large enough to be statically impossible, restoring 100% line coverage after the generic-index branches were added.
c3c4d817
feat/statically-failing-op-validator
1/8 ++ 3 --
refactor: apply generic constant-index handling to setbit, getbyte, setbyte
Mirrors the recent getbit change: match a constant-bytes shape first (tight bound against the constant length), then fall through to a generic case that catches cases where the index is known constant but the first arg is runtime — index >= 8 * MAX_BYTES_LENGTH (or MAX_BYTES_LENGTH for byte ops) is statically impossible regardless of the runtime value.
70f8ac59
feat/statically-failing-op-validator
1/24 ++ 7 --
refactor: make validator warning messages generic
Drop specific constant values from the reason strings so they describe the class of failure rather than the specific bad inputs, e.g.
+: 18446744073709551615 + 1 overflows uint64; will fail at runtime if reached
becomes
uint64 addition of constants overflows; will fail at runtime if reached
Specific values were useful while the validator was being bootstrapped but add noise for end users who can see the literal values at the source location anyway. Also drops the leading `{op.code}:` prefix since the op name is now folded into the reason text.
003aebcd
feat/statically-failing-op-validator
1/29 ++ 45 --
refactor: split substring/substring3 and replace2/replace3 into separate cases
Same treatment as extract/extract3: each op has a fixed arg shape, so matching them separately lets the pattern encode the shape. Removes `_substring_start_end` and `_replace_start_and_bytes` helpers and their `*rest` unpacking plumbing. Revealed a missing OP test case, so added coverage.
4e0d82d0
feat/statically-failing-op-validator
52/1,518 ++ 1,323 --
refactor: split extract/extract3 into separate cases
Each op has a fixed arg shape so matching them separately means the pattern itself encodes the shape — no `*rest` unpacking, no post-hoc `is not None` guards, and the `_extract_start_length` helper becomes dead and is removed.
5bd5ee8d
feat/statically-failing-op-validator
1/23 ++ 29 --
test: add coverage test case for StaticallyFailingOpValidator
Exercises every warning-emitting branch in statically_failing_op.py (both the top-level `_check` match arms and the three helpers' immediate-form / stack-form / None-fallthrough paths). Hits 100% line coverage of the validator via a single test case: coverage run -m pytest tests/test_compile.py -k statically_failing_ops -o addopts="" coverage report -m --include="src/puya/ir/validation/statically_failing_op.py" Overlaps deliberately with a handful of the existing regression_tests cases since this is targeted at coverage completeness rather than regression pinning.
e4396587
feat/statically-failing-op-validator
55/7,680 ++ 0 --