From c02079b5d84af851ed2fdab2d649eb26a41d2619 Mon Sep 17 00:00:00 2001 From: Adam Chidlow Date: Fri, 22 Mar 2024 12:11:16 +0800 Subject: [PATCH] feat: empty constructor for BigUInt() defaults to zero chore: address minor TODO regarding source locations --- examples/sizes.txt | 2 +- src/puya/awst_build/eb/biguint.py | 13 +- src/puyapy-stubs/_primitives.pyi | 2 +- .../out/UIntNOrdering.approval.mir | 72 ++++---- .../out/BiguintBinaryOps.approval.mir | 20 +-- .../contains/out/MyContract.approval.mir | 10 +- test_cases/log/out/MyContract.approval.mir | 36 ++-- test_cases/match/out/MyContract.approval.mir | 2 +- test_cases/stubs/biguint.py | 1 + .../stubs/out/BigUIntContract.approval.mir | 158 +++++++++--------- .../stubs/out/BigUIntContract.approval.teal | 28 ++-- .../stubs/out/BigUIntContract.clear.mir | 4 +- .../stubs/out/BigUIntContract.clear.teal | 2 +- .../stubs/out/BigUIntContract.destructured.ir | 6 +- test_cases/stubs/out/BigUIntContract.ssa.ir | 8 +- .../out/BigUIntContract.ssa.opt_pass_1.ir | 8 +- .../out/BigUIntContract.ssa.opt_pass_2.ir | 6 +- test_cases/stubs/out/biguint.awst | 1 + .../out_O2/BigUIntContract.destructured.ir | 6 +- .../BigUIntContract.approval.teal | 42 ++--- .../BigUIntContract.clear.teal | 6 + .../BigUIntContract.destructured.ir | 8 +- test_cases/stubs/puya.log | 38 +++-- .../out/Baddie.approval.mir | 4 +- 24 files changed, 250 insertions(+), 233 deletions(-) diff --git a/examples/sizes.txt b/examples/sizes.txt index 8da47ccfe8..5060f55640 100644 --- a/examples/sizes.txt +++ b/examples/sizes.txt @@ -68,7 +68,7 @@ state_proxies/StateProxy 87 83 4 83 0 state_totals 46 34 12 34 0 string_ops 157 152 5 152 0 - stubs/BigUInt 172 112 60 112 0 + stubs/BigUInt 179 112 67 112 0 stubs/Bytes 1769 253 1516 253 0 stubs/String 777 141 636 141 0 stubs/Uint64 378 8 370 8 0 diff --git a/src/puya/awst_build/eb/biguint.py b/src/puya/awst_build/eb/biguint.py index 947952c50d..b0fb266d6f 100644 --- a/src/puya/awst_build/eb/biguint.py +++ b/src/puya/awst_build/eb/biguint.py @@ -12,6 +12,7 @@ BigUIntBinaryOperation, BigUIntBinaryOperator, BigUIntConstant, + Expression, Literal, NumericComparison, NumericComparisonExpression, @@ -52,15 +53,15 @@ def call( location: SourceLocation, ) -> ExpressionBuilder: match args: + case []: + value: Expression = BigUIntConstant(value=0, source_location=location) + case [Literal(value=int(int_value))]: + value = BigUIntConstant(value=int_value, source_location=location) case [ExpressionBuilder() as eb]: - itob_call = uint64_to_biguint(eb, location) - return var_expression(itob_call) - case [Literal(value=int(int_value), source_location=loc)]: - # TODO: replace with loc with location - const = BigUIntConstant(value=int_value, source_location=loc) - return var_expression(const) + value = uint64_to_biguint(eb, location) case _: raise CodeError("Invalid/unhandled arguments", location) + return var_expression(value) class BigUIntExpressionBuilder(ValueExpressionBuilder): diff --git a/src/puyapy-stubs/_primitives.pyi b/src/puyapy-stubs/_primitives.pyi index 183d83e2f8..29de71bc70 100644 --- a/src/puyapy-stubs/_primitives.pyi +++ b/src/puyapy-stubs/_primitives.pyi @@ -298,7 +298,7 @@ class BigUInt(BytesBacked): # TODO: consider how to handle cases where sizes exceeds 512, which can happen on + or *, # but the result is no longer usable with any further ops. # ~~~ https://docs.python.org/3/reference/datamodel.html#basic-customization ~~~ - def __init__(self, value: UInt64 | int, /) -> None: + def __init__(self, value: UInt64 | int = 0, /) -> None: """A BigUInt can be initialized with a UInt64, a Python int literal, or an int variable declared at the module level""" # TODO: mypy suggests due to Liskov below should be other: object diff --git a/test_cases/arc4_numeric_comparisons/out/UIntNOrdering.approval.mir b/test_cases/arc4_numeric_comparisons/out/UIntNOrdering.approval.mir index cf3b085aaf..9b701b5371 100644 --- a/test_cases/arc4_numeric_comparisons/out/UIntNOrdering.approval.mir +++ b/test_cases/arc4_numeric_comparisons/out/UIntNOrdering.approval.mir @@ -38,7 +38,7 @@ check_both_uint_n_block@0: // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%4#0 assert one == one_uint64 arc4_numeric_comparisons/uint_n.py:29 assert // (𝕡) one#0,two#0 | tmp%3#0 assert one == one_uint64 arc4_numeric_comparisons/uint_n.py:29 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,one#0 one == one_biguint arc4_numeric_comparisons/uint_n.py:30 - byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,one#0,0x01 1 arc4_numeric_comparisons/uint_n.py:21 + byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,one#0,0x01 BigUInt(1) arc4_numeric_comparisons/uint_n.py:21 b== // (𝕡) one#0,two#0 | tmp%3#0,{b==} one == one_biguint arc4_numeric_comparisons/uint_n.py:30 // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%5#0 one == one_biguint arc4_numeric_comparisons/uint_n.py:30 // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%5#0 assert one == one_biguint arc4_numeric_comparisons/uint_n.py:30 @@ -74,7 +74,7 @@ check_both_uint_n_block@0: // virtual: load tmp%12#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%12#0 assert not (one == two_uint64) arc4_numeric_comparisons/uint_n.py:33 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert not (one == two_uint64) arc4_numeric_comparisons/uint_n.py:33 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one == two_biguint) arc4_numeric_comparisons/uint_n.py:34 - byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 2 arc4_numeric_comparisons/uint_n.py:24 + byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 BigUInt(2) arc4_numeric_comparisons/uint_n.py:24 b== // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b==} one == two_biguint) arc4_numeric_comparisons/uint_n.py:34 // virtual: store tmp%13#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%13#0 one == two_biguint) arc4_numeric_comparisons/uint_n.py:34 // virtual: load tmp%13#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%13#0 not (one == two_biguint) arc4_numeric_comparisons/uint_n.py:34 @@ -101,7 +101,7 @@ check_both_uint_n_block@0: // virtual: load tmp%23#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%23#0 assert not (one != one_uint64) arc4_numeric_comparisons/uint_n.py:39 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert not (one != one_uint64) arc4_numeric_comparisons/uint_n.py:39 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one != one_biguint) arc4_numeric_comparisons/uint_n.py:40 - byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 1 arc4_numeric_comparisons/uint_n.py:21 + byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 BigUInt(1) arc4_numeric_comparisons/uint_n.py:21 b!= // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b!=} one != one_biguint) arc4_numeric_comparisons/uint_n.py:40 // virtual: store tmp%24#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%24#0 one != one_biguint) arc4_numeric_comparisons/uint_n.py:40 // virtual: load tmp%24#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%24#0 not (one != one_biguint) arc4_numeric_comparisons/uint_n.py:40 @@ -128,7 +128,7 @@ check_both_uint_n_block@0: // virtual: load tmp%29#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%29#0 assert one != two_uint64 arc4_numeric_comparisons/uint_n.py:43 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert one != two_uint64 arc4_numeric_comparisons/uint_n.py:43 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one != two_biguint arc4_numeric_comparisons/uint_n.py:44 - byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 2 arc4_numeric_comparisons/uint_n.py:24 + byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 BigUInt(2) arc4_numeric_comparisons/uint_n.py:24 b!= // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b!=} one != two_biguint arc4_numeric_comparisons/uint_n.py:44 // virtual: store tmp%30#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%30#0 one != two_biguint arc4_numeric_comparisons/uint_n.py:44 // virtual: load tmp%30#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%30#0 assert one != two_biguint arc4_numeric_comparisons/uint_n.py:44 @@ -152,7 +152,7 @@ check_both_uint_n_block@0: // virtual: load tmp%35#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%35#0 assert one <= one_uint64 arc4_numeric_comparisons/uint_n.py:49 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert one <= one_uint64 arc4_numeric_comparisons/uint_n.py:49 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one <= one_biguint arc4_numeric_comparisons/uint_n.py:50 - byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 1 arc4_numeric_comparisons/uint_n.py:21 + byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 BigUInt(1) arc4_numeric_comparisons/uint_n.py:21 b<= // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b<=} one <= one_biguint arc4_numeric_comparisons/uint_n.py:50 // virtual: store tmp%36#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%36#0 one <= one_biguint arc4_numeric_comparisons/uint_n.py:50 // virtual: load tmp%36#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%36#0 assert one <= one_biguint arc4_numeric_comparisons/uint_n.py:50 @@ -176,7 +176,7 @@ check_both_uint_n_block@0: // virtual: load tmp%40#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%40#0 assert one <= two_uint64 arc4_numeric_comparisons/uint_n.py:53 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert one <= two_uint64 arc4_numeric_comparisons/uint_n.py:53 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one <= two_biguint arc4_numeric_comparisons/uint_n.py:54 - byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 2 arc4_numeric_comparisons/uint_n.py:24 + byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 BigUInt(2) arc4_numeric_comparisons/uint_n.py:24 b<= // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b<=} one <= two_biguint arc4_numeric_comparisons/uint_n.py:54 // virtual: store tmp%41#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%41#0 one <= two_biguint arc4_numeric_comparisons/uint_n.py:54 // virtual: load tmp%41#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%41#0 assert one <= two_biguint arc4_numeric_comparisons/uint_n.py:54 @@ -209,7 +209,7 @@ check_both_uint_n_block@0: // virtual: load tmp%50#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%50#0 assert not (one < one_uint64) arc4_numeric_comparisons/uint_n.py:59 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert not (one < one_uint64) arc4_numeric_comparisons/uint_n.py:59 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one < one_biguint) arc4_numeric_comparisons/uint_n.py:60 - byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 1 arc4_numeric_comparisons/uint_n.py:21 + byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 BigUInt(1) arc4_numeric_comparisons/uint_n.py:21 b< // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b<} one < one_biguint) arc4_numeric_comparisons/uint_n.py:60 // virtual: store tmp%51#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%51#0 one < one_biguint) arc4_numeric_comparisons/uint_n.py:60 // virtual: load tmp%51#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%51#0 not (one < one_biguint) arc4_numeric_comparisons/uint_n.py:60 @@ -236,7 +236,7 @@ check_both_uint_n_block@0: // virtual: load tmp%56#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%56#0 assert one < two_uint64 arc4_numeric_comparisons/uint_n.py:63 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert one < two_uint64 arc4_numeric_comparisons/uint_n.py:63 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one < two_biguint arc4_numeric_comparisons/uint_n.py:64 - byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 2 arc4_numeric_comparisons/uint_n.py:24 + byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 BigUInt(2) arc4_numeric_comparisons/uint_n.py:24 b< // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b<} one < two_biguint arc4_numeric_comparisons/uint_n.py:64 // virtual: store tmp%57#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%57#0 one < two_biguint arc4_numeric_comparisons/uint_n.py:64 // virtual: load tmp%57#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%57#0 assert one < two_biguint arc4_numeric_comparisons/uint_n.py:64 @@ -248,7 +248,7 @@ check_both_uint_n_block@0: // virtual: load tmp%62#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%62#0 assert one >= one_uint64 arc4_numeric_comparisons/uint_n.py:69 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert one >= one_uint64 arc4_numeric_comparisons/uint_n.py:69 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one >= one_biguint arc4_numeric_comparisons/uint_n.py:70 - byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 1 arc4_numeric_comparisons/uint_n.py:21 + byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 BigUInt(1) arc4_numeric_comparisons/uint_n.py:21 b>= // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b>=} one >= one_biguint arc4_numeric_comparisons/uint_n.py:70 // virtual: store tmp%63#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%63#0 one >= one_biguint arc4_numeric_comparisons/uint_n.py:70 // virtual: load tmp%63#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%63#0 assert one >= one_biguint arc4_numeric_comparisons/uint_n.py:70 @@ -281,7 +281,7 @@ check_both_uint_n_block@0: // virtual: load tmp%70#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%70#0 assert not (one >= two_uint64) arc4_numeric_comparisons/uint_n.py:73 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert not (one >= two_uint64) arc4_numeric_comparisons/uint_n.py:73 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one >= two_biguint) arc4_numeric_comparisons/uint_n.py:74 - byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 2 arc4_numeric_comparisons/uint_n.py:24 + byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 BigUInt(2) arc4_numeric_comparisons/uint_n.py:24 b>= // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b>=} one >= two_biguint) arc4_numeric_comparisons/uint_n.py:74 // virtual: store tmp%71#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%71#0 one >= two_biguint) arc4_numeric_comparisons/uint_n.py:74 // virtual: load tmp%71#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%71#0 not (one >= two_biguint) arc4_numeric_comparisons/uint_n.py:74 @@ -299,7 +299,7 @@ check_both_uint_n_block@0: // virtual: load tmp%81#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%10#0,tmp%81#0 assert not (one > one_uint64) arc4_numeric_comparisons/uint_n.py:79 assert // (𝕡) one#0,two#0 | tmp%10#0 assert not (one > one_uint64) arc4_numeric_comparisons/uint_n.py:79 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%10#0,one#0 one > one_biguint) arc4_numeric_comparisons/uint_n.py:80 - byte 0x01 // (𝕡) one#0,two#0 | tmp%10#0,one#0,0x01 1 arc4_numeric_comparisons/uint_n.py:21 + byte 0x01 // (𝕡) one#0,two#0 | tmp%10#0,one#0,0x01 BigUInt(1) arc4_numeric_comparisons/uint_n.py:21 b> // (𝕡) one#0,two#0 | tmp%10#0,{b>} one > one_biguint) arc4_numeric_comparisons/uint_n.py:80 // virtual: store tmp%82#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%10#0,tmp%82#0 one > one_biguint) arc4_numeric_comparisons/uint_n.py:80 // virtual: load tmp%82#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%10#0,tmp%82#0 not (one > one_biguint) arc4_numeric_comparisons/uint_n.py:80 @@ -335,7 +335,7 @@ check_both_uint_n_block@0: // virtual: load tmp%90#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%90#0 assert not (one > two_uint64) arc4_numeric_comparisons/uint_n.py:83 assert // (𝕡) one#0,two#0 | assert not (one > two_uint64) arc4_numeric_comparisons/uint_n.py:83 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | one#0 one > two_biguint) arc4_numeric_comparisons/uint_n.py:84 - byte 0x02 // (𝕡) one#0,two#0 | one#0,0x02 2 arc4_numeric_comparisons/uint_n.py:24 + byte 0x02 // (𝕡) one#0,two#0 | one#0,0x02 BigUInt(2) arc4_numeric_comparisons/uint_n.py:24 b> // (𝕡) one#0,two#0 | {b>} one > two_biguint) arc4_numeric_comparisons/uint_n.py:84 // virtual: store tmp%91#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%91#0 one > two_biguint) arc4_numeric_comparisons/uint_n.py:84 // virtual: load tmp%91#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%91#0 not (one > two_biguint) arc4_numeric_comparisons/uint_n.py:84 @@ -367,7 +367,7 @@ check_mixed_block@0: // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%4#0 assert one == one_uint64 arc4_numeric_comparisons/uint_n.py:98 assert // (𝕡) one#0,two#0 | tmp%3#0 assert one == one_uint64 arc4_numeric_comparisons/uint_n.py:98 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,one#0 one == one_biguint arc4_numeric_comparisons/uint_n.py:99 - byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,one#0,0x01 1 arc4_numeric_comparisons/uint_n.py:90 + byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,one#0,0x01 BigUInt(1) arc4_numeric_comparisons/uint_n.py:90 b== // (𝕡) one#0,two#0 | tmp%3#0,{b==} one == one_biguint arc4_numeric_comparisons/uint_n.py:99 // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%5#0 one == one_biguint arc4_numeric_comparisons/uint_n.py:99 // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%5#0 assert one == one_biguint arc4_numeric_comparisons/uint_n.py:99 @@ -403,7 +403,7 @@ check_mixed_block@0: // virtual: load tmp%12#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%12#0 assert not (one == two_uint64) arc4_numeric_comparisons/uint_n.py:102 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert not (one == two_uint64) arc4_numeric_comparisons/uint_n.py:102 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one == two_biguint) arc4_numeric_comparisons/uint_n.py:103 - byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 2 arc4_numeric_comparisons/uint_n.py:93 + byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 BigUInt(2) arc4_numeric_comparisons/uint_n.py:93 b== // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b==} one == two_biguint) arc4_numeric_comparisons/uint_n.py:103 // virtual: store tmp%13#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%13#0 one == two_biguint) arc4_numeric_comparisons/uint_n.py:103 // virtual: load tmp%13#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%13#0 not (one == two_biguint) arc4_numeric_comparisons/uint_n.py:103 @@ -430,7 +430,7 @@ check_mixed_block@0: // virtual: load tmp%23#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%23#0 assert not (one != one_uint64) arc4_numeric_comparisons/uint_n.py:108 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert not (one != one_uint64) arc4_numeric_comparisons/uint_n.py:108 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one != one_biguint) arc4_numeric_comparisons/uint_n.py:109 - byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 1 arc4_numeric_comparisons/uint_n.py:90 + byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 BigUInt(1) arc4_numeric_comparisons/uint_n.py:90 b!= // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b!=} one != one_biguint) arc4_numeric_comparisons/uint_n.py:109 // virtual: store tmp%24#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%24#0 one != one_biguint) arc4_numeric_comparisons/uint_n.py:109 // virtual: load tmp%24#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%24#0 not (one != one_biguint) arc4_numeric_comparisons/uint_n.py:109 @@ -457,7 +457,7 @@ check_mixed_block@0: // virtual: load tmp%29#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%29#0 assert one != two_uint64 arc4_numeric_comparisons/uint_n.py:112 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert one != two_uint64 arc4_numeric_comparisons/uint_n.py:112 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one != two_biguint arc4_numeric_comparisons/uint_n.py:113 - byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 2 arc4_numeric_comparisons/uint_n.py:93 + byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 BigUInt(2) arc4_numeric_comparisons/uint_n.py:93 b!= // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b!=} one != two_biguint arc4_numeric_comparisons/uint_n.py:113 // virtual: store tmp%30#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%30#0 one != two_biguint arc4_numeric_comparisons/uint_n.py:113 // virtual: load tmp%30#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%30#0 assert one != two_biguint arc4_numeric_comparisons/uint_n.py:113 @@ -481,7 +481,7 @@ check_mixed_block@0: // virtual: load tmp%35#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%35#0 assert one <= one_uint64 arc4_numeric_comparisons/uint_n.py:118 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert one <= one_uint64 arc4_numeric_comparisons/uint_n.py:118 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one <= one_biguint arc4_numeric_comparisons/uint_n.py:119 - byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 1 arc4_numeric_comparisons/uint_n.py:90 + byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 BigUInt(1) arc4_numeric_comparisons/uint_n.py:90 b<= // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b<=} one <= one_biguint arc4_numeric_comparisons/uint_n.py:119 // virtual: store tmp%36#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%36#0 one <= one_biguint arc4_numeric_comparisons/uint_n.py:119 // virtual: load tmp%36#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%36#0 assert one <= one_biguint arc4_numeric_comparisons/uint_n.py:119 @@ -505,7 +505,7 @@ check_mixed_block@0: // virtual: load tmp%40#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%40#0 assert one <= two_uint64 arc4_numeric_comparisons/uint_n.py:122 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert one <= two_uint64 arc4_numeric_comparisons/uint_n.py:122 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one <= two_biguint arc4_numeric_comparisons/uint_n.py:123 - byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 2 arc4_numeric_comparisons/uint_n.py:93 + byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 BigUInt(2) arc4_numeric_comparisons/uint_n.py:93 b<= // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b<=} one <= two_biguint arc4_numeric_comparisons/uint_n.py:123 // virtual: store tmp%41#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%41#0 one <= two_biguint arc4_numeric_comparisons/uint_n.py:123 // virtual: load tmp%41#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%41#0 assert one <= two_biguint arc4_numeric_comparisons/uint_n.py:123 @@ -538,7 +538,7 @@ check_mixed_block@0: // virtual: load tmp%50#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%50#0 assert not (one < one_uint64) arc4_numeric_comparisons/uint_n.py:128 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert not (one < one_uint64) arc4_numeric_comparisons/uint_n.py:128 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one < one_biguint) arc4_numeric_comparisons/uint_n.py:129 - byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 1 arc4_numeric_comparisons/uint_n.py:90 + byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 BigUInt(1) arc4_numeric_comparisons/uint_n.py:90 b< // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b<} one < one_biguint) arc4_numeric_comparisons/uint_n.py:129 // virtual: store tmp%51#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%51#0 one < one_biguint) arc4_numeric_comparisons/uint_n.py:129 // virtual: load tmp%51#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%51#0 not (one < one_biguint) arc4_numeric_comparisons/uint_n.py:129 @@ -565,7 +565,7 @@ check_mixed_block@0: // virtual: load tmp%56#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%56#0 assert one < two_uint64 arc4_numeric_comparisons/uint_n.py:132 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert one < two_uint64 arc4_numeric_comparisons/uint_n.py:132 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one < two_biguint arc4_numeric_comparisons/uint_n.py:133 - byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 2 arc4_numeric_comparisons/uint_n.py:93 + byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 BigUInt(2) arc4_numeric_comparisons/uint_n.py:93 b< // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b<} one < two_biguint arc4_numeric_comparisons/uint_n.py:133 // virtual: store tmp%57#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%57#0 one < two_biguint arc4_numeric_comparisons/uint_n.py:133 // virtual: load tmp%57#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%57#0 assert one < two_biguint arc4_numeric_comparisons/uint_n.py:133 @@ -577,7 +577,7 @@ check_mixed_block@0: // virtual: load tmp%62#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%62#0 assert one >= one_uint64 arc4_numeric_comparisons/uint_n.py:138 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert one >= one_uint64 arc4_numeric_comparisons/uint_n.py:138 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one >= one_biguint arc4_numeric_comparisons/uint_n.py:139 - byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 1 arc4_numeric_comparisons/uint_n.py:90 + byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 BigUInt(1) arc4_numeric_comparisons/uint_n.py:90 b>= // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b>=} one >= one_biguint arc4_numeric_comparisons/uint_n.py:139 // virtual: store tmp%63#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%63#0 one >= one_biguint arc4_numeric_comparisons/uint_n.py:139 // virtual: load tmp%63#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%63#0 assert one >= one_biguint arc4_numeric_comparisons/uint_n.py:139 @@ -610,7 +610,7 @@ check_mixed_block@0: // virtual: load tmp%70#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%70#0 assert not (one >= two_uint64) arc4_numeric_comparisons/uint_n.py:142 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert not (one >= two_uint64) arc4_numeric_comparisons/uint_n.py:142 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one >= two_biguint) arc4_numeric_comparisons/uint_n.py:143 - byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 2 arc4_numeric_comparisons/uint_n.py:93 + byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 BigUInt(2) arc4_numeric_comparisons/uint_n.py:93 b>= // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b>=} one >= two_biguint) arc4_numeric_comparisons/uint_n.py:143 // virtual: store tmp%71#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%71#0 one >= two_biguint) arc4_numeric_comparisons/uint_n.py:143 // virtual: load tmp%71#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%71#0 not (one >= two_biguint) arc4_numeric_comparisons/uint_n.py:143 @@ -628,7 +628,7 @@ check_mixed_block@0: // virtual: load tmp%81#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%10#0,tmp%81#0 assert not (one > one_uint64) arc4_numeric_comparisons/uint_n.py:148 assert // (𝕡) one#0,two#0 | tmp%10#0 assert not (one > one_uint64) arc4_numeric_comparisons/uint_n.py:148 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%10#0,one#0 one > one_biguint) arc4_numeric_comparisons/uint_n.py:149 - byte 0x01 // (𝕡) one#0,two#0 | tmp%10#0,one#0,0x01 1 arc4_numeric_comparisons/uint_n.py:90 + byte 0x01 // (𝕡) one#0,two#0 | tmp%10#0,one#0,0x01 BigUInt(1) arc4_numeric_comparisons/uint_n.py:90 b> // (𝕡) one#0,two#0 | tmp%10#0,{b>} one > one_biguint) arc4_numeric_comparisons/uint_n.py:149 // virtual: store tmp%82#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%10#0,tmp%82#0 one > one_biguint) arc4_numeric_comparisons/uint_n.py:149 // virtual: load tmp%82#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%10#0,tmp%82#0 not (one > one_biguint) arc4_numeric_comparisons/uint_n.py:149 @@ -664,7 +664,7 @@ check_mixed_block@0: // virtual: load tmp%90#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%90#0 assert not (one > two_uint64) arc4_numeric_comparisons/uint_n.py:152 assert // (𝕡) one#0,two#0 | assert not (one > two_uint64) arc4_numeric_comparisons/uint_n.py:152 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | one#0 one > two_biguint) arc4_numeric_comparisons/uint_n.py:153 - byte 0x02 // (𝕡) one#0,two#0 | one#0,0x02 2 arc4_numeric_comparisons/uint_n.py:93 + byte 0x02 // (𝕡) one#0,two#0 | one#0,0x02 BigUInt(2) arc4_numeric_comparisons/uint_n.py:93 b> // (𝕡) one#0,two#0 | {b>} one > two_biguint) arc4_numeric_comparisons/uint_n.py:153 // virtual: store tmp%91#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%91#0 one > two_biguint) arc4_numeric_comparisons/uint_n.py:153 // virtual: load tmp%91#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%91#0 not (one > two_biguint) arc4_numeric_comparisons/uint_n.py:153 @@ -696,7 +696,7 @@ check_both_big_uint_n_block@0: // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%4#0 assert one == one_uint64 arc4_numeric_comparisons/uint_n.py:167 assert // (𝕡) one#0,two#0 | tmp%3#0 assert one == one_uint64 arc4_numeric_comparisons/uint_n.py:167 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,one#0 one == one_biguint arc4_numeric_comparisons/uint_n.py:168 - byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,one#0,0x01 1 arc4_numeric_comparisons/uint_n.py:159 + byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,one#0,0x01 BigUInt(1) arc4_numeric_comparisons/uint_n.py:159 b== // (𝕡) one#0,two#0 | tmp%3#0,{b==} one == one_biguint arc4_numeric_comparisons/uint_n.py:168 // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%5#0 one == one_biguint arc4_numeric_comparisons/uint_n.py:168 // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%5#0 assert one == one_biguint arc4_numeric_comparisons/uint_n.py:168 @@ -732,7 +732,7 @@ check_both_big_uint_n_block@0: // virtual: load tmp%12#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%12#0 assert not (one == two_uint64) arc4_numeric_comparisons/uint_n.py:171 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert not (one == two_uint64) arc4_numeric_comparisons/uint_n.py:171 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one == two_biguint) arc4_numeric_comparisons/uint_n.py:172 - byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 2 arc4_numeric_comparisons/uint_n.py:162 + byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 BigUInt(2) arc4_numeric_comparisons/uint_n.py:162 b== // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b==} one == two_biguint) arc4_numeric_comparisons/uint_n.py:172 // virtual: store tmp%13#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%13#0 one == two_biguint) arc4_numeric_comparisons/uint_n.py:172 // virtual: load tmp%13#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%13#0 not (one == two_biguint) arc4_numeric_comparisons/uint_n.py:172 @@ -759,7 +759,7 @@ check_both_big_uint_n_block@0: // virtual: load tmp%23#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%23#0 assert not (one != one_uint64) arc4_numeric_comparisons/uint_n.py:177 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert not (one != one_uint64) arc4_numeric_comparisons/uint_n.py:177 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one != one_biguint) arc4_numeric_comparisons/uint_n.py:178 - byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 1 arc4_numeric_comparisons/uint_n.py:159 + byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 BigUInt(1) arc4_numeric_comparisons/uint_n.py:159 b!= // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b!=} one != one_biguint) arc4_numeric_comparisons/uint_n.py:178 // virtual: store tmp%24#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%24#0 one != one_biguint) arc4_numeric_comparisons/uint_n.py:178 // virtual: load tmp%24#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%24#0 not (one != one_biguint) arc4_numeric_comparisons/uint_n.py:178 @@ -786,7 +786,7 @@ check_both_big_uint_n_block@0: // virtual: load tmp%29#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%29#0 assert one != two_uint64 arc4_numeric_comparisons/uint_n.py:181 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert one != two_uint64 arc4_numeric_comparisons/uint_n.py:181 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one != two_biguint arc4_numeric_comparisons/uint_n.py:182 - byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 2 arc4_numeric_comparisons/uint_n.py:162 + byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 BigUInt(2) arc4_numeric_comparisons/uint_n.py:162 b!= // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b!=} one != two_biguint arc4_numeric_comparisons/uint_n.py:182 // virtual: store tmp%30#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%30#0 one != two_biguint arc4_numeric_comparisons/uint_n.py:182 // virtual: load tmp%30#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%30#0 assert one != two_biguint arc4_numeric_comparisons/uint_n.py:182 @@ -810,7 +810,7 @@ check_both_big_uint_n_block@0: // virtual: load tmp%35#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%35#0 assert one <= one_uint64 arc4_numeric_comparisons/uint_n.py:187 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert one <= one_uint64 arc4_numeric_comparisons/uint_n.py:187 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one <= one_biguint arc4_numeric_comparisons/uint_n.py:188 - byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 1 arc4_numeric_comparisons/uint_n.py:159 + byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 BigUInt(1) arc4_numeric_comparisons/uint_n.py:159 b<= // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b<=} one <= one_biguint arc4_numeric_comparisons/uint_n.py:188 // virtual: store tmp%36#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%36#0 one <= one_biguint arc4_numeric_comparisons/uint_n.py:188 // virtual: load tmp%36#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%36#0 assert one <= one_biguint arc4_numeric_comparisons/uint_n.py:188 @@ -834,7 +834,7 @@ check_both_big_uint_n_block@0: // virtual: load tmp%40#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%40#0 assert one <= two_uint64 arc4_numeric_comparisons/uint_n.py:191 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert one <= two_uint64 arc4_numeric_comparisons/uint_n.py:191 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one <= two_biguint arc4_numeric_comparisons/uint_n.py:192 - byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 2 arc4_numeric_comparisons/uint_n.py:162 + byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 BigUInt(2) arc4_numeric_comparisons/uint_n.py:162 b<= // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b<=} one <= two_biguint arc4_numeric_comparisons/uint_n.py:192 // virtual: store tmp%41#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%41#0 one <= two_biguint arc4_numeric_comparisons/uint_n.py:192 // virtual: load tmp%41#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%41#0 assert one <= two_biguint arc4_numeric_comparisons/uint_n.py:192 @@ -867,7 +867,7 @@ check_both_big_uint_n_block@0: // virtual: load tmp%50#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%50#0 assert not (one < one_uint64) arc4_numeric_comparisons/uint_n.py:197 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert not (one < one_uint64) arc4_numeric_comparisons/uint_n.py:197 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one < one_biguint) arc4_numeric_comparisons/uint_n.py:198 - byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 1 arc4_numeric_comparisons/uint_n.py:159 + byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 BigUInt(1) arc4_numeric_comparisons/uint_n.py:159 b< // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b<} one < one_biguint) arc4_numeric_comparisons/uint_n.py:198 // virtual: store tmp%51#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%51#0 one < one_biguint) arc4_numeric_comparisons/uint_n.py:198 // virtual: load tmp%51#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%51#0 not (one < one_biguint) arc4_numeric_comparisons/uint_n.py:198 @@ -894,7 +894,7 @@ check_both_big_uint_n_block@0: // virtual: load tmp%56#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%56#0 assert one < two_uint64 arc4_numeric_comparisons/uint_n.py:201 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert one < two_uint64 arc4_numeric_comparisons/uint_n.py:201 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one < two_biguint arc4_numeric_comparisons/uint_n.py:202 - byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 2 arc4_numeric_comparisons/uint_n.py:162 + byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 BigUInt(2) arc4_numeric_comparisons/uint_n.py:162 b< // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b<} one < two_biguint arc4_numeric_comparisons/uint_n.py:202 // virtual: store tmp%57#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%57#0 one < two_biguint arc4_numeric_comparisons/uint_n.py:202 // virtual: load tmp%57#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%57#0 assert one < two_biguint arc4_numeric_comparisons/uint_n.py:202 @@ -906,7 +906,7 @@ check_both_big_uint_n_block@0: // virtual: load tmp%62#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%62#0 assert one >= one_uint64 arc4_numeric_comparisons/uint_n.py:207 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert one >= one_uint64 arc4_numeric_comparisons/uint_n.py:207 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one >= one_biguint arc4_numeric_comparisons/uint_n.py:208 - byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 1 arc4_numeric_comparisons/uint_n.py:159 + byte 0x01 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x01 BigUInt(1) arc4_numeric_comparisons/uint_n.py:159 b>= // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b>=} one >= one_biguint arc4_numeric_comparisons/uint_n.py:208 // virtual: store tmp%63#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%63#0 one >= one_biguint arc4_numeric_comparisons/uint_n.py:208 // virtual: load tmp%63#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%63#0 assert one >= one_biguint arc4_numeric_comparisons/uint_n.py:208 @@ -939,7 +939,7 @@ check_both_big_uint_n_block@0: // virtual: load tmp%70#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%70#0 assert not (one >= two_uint64) arc4_numeric_comparisons/uint_n.py:211 assert // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0 assert not (one >= two_uint64) arc4_numeric_comparisons/uint_n.py:211 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0 one >= two_biguint) arc4_numeric_comparisons/uint_n.py:212 - byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 2 arc4_numeric_comparisons/uint_n.py:162 + byte 0x02 // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,one#0,0x02 BigUInt(2) arc4_numeric_comparisons/uint_n.py:162 b>= // (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,{b>=} one >= two_biguint) arc4_numeric_comparisons/uint_n.py:212 // virtual: store tmp%71#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%71#0 one >= two_biguint) arc4_numeric_comparisons/uint_n.py:212 // virtual: load tmp%71#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0,tmp%10#0,tmp%71#0 not (one >= two_biguint) arc4_numeric_comparisons/uint_n.py:212 @@ -957,7 +957,7 @@ check_both_big_uint_n_block@0: // virtual: load tmp%81#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%10#0,tmp%81#0 assert not (one > one_uint64) arc4_numeric_comparisons/uint_n.py:217 assert // (𝕡) one#0,two#0 | tmp%10#0 assert not (one > one_uint64) arc4_numeric_comparisons/uint_n.py:217 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%10#0,one#0 one > one_biguint) arc4_numeric_comparisons/uint_n.py:218 - byte 0x01 // (𝕡) one#0,two#0 | tmp%10#0,one#0,0x01 1 arc4_numeric_comparisons/uint_n.py:159 + byte 0x01 // (𝕡) one#0,two#0 | tmp%10#0,one#0,0x01 BigUInt(1) arc4_numeric_comparisons/uint_n.py:159 b> // (𝕡) one#0,two#0 | tmp%10#0,{b>} one > one_biguint) arc4_numeric_comparisons/uint_n.py:218 // virtual: store tmp%82#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%10#0,tmp%82#0 one > one_biguint) arc4_numeric_comparisons/uint_n.py:218 // virtual: load tmp%82#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%10#0,tmp%82#0 not (one > one_biguint) arc4_numeric_comparisons/uint_n.py:218 @@ -993,7 +993,7 @@ check_both_big_uint_n_block@0: // virtual: load tmp%90#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%90#0 assert not (one > two_uint64) arc4_numeric_comparisons/uint_n.py:221 assert // (𝕡) one#0,two#0 | assert not (one > two_uint64) arc4_numeric_comparisons/uint_n.py:221 frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | one#0 one > two_biguint) arc4_numeric_comparisons/uint_n.py:222 - byte 0x02 // (𝕡) one#0,two#0 | one#0,0x02 2 arc4_numeric_comparisons/uint_n.py:162 + byte 0x02 // (𝕡) one#0,two#0 | one#0,0x02 BigUInt(2) arc4_numeric_comparisons/uint_n.py:162 b> // (𝕡) one#0,two#0 | {b>} one > two_biguint) arc4_numeric_comparisons/uint_n.py:222 // virtual: store tmp%91#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%91#0 one > two_biguint) arc4_numeric_comparisons/uint_n.py:222 // virtual: load tmp%91#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%91#0 not (one > two_biguint) arc4_numeric_comparisons/uint_n.py:222 diff --git a/test_cases/biguint_binary_ops/out/BiguintBinaryOps.approval.mir b/test_cases/biguint_binary_ops/out/BiguintBinaryOps.approval.mir index c2ca3c164e..c2ad2cd8a2 100644 --- a/test_cases/biguint_binary_ops/out/BiguintBinaryOps.approval.mir +++ b/test_cases/biguint_binary_ops/out/BiguintBinaryOps.approval.mir @@ -4,8 +4,8 @@ // test_cases.biguint_binary_ops.contract.BiguintBinaryOps.approval_program() -> uint64: main_block@0: - byte 0x032b1c8c1227a00180 // 0x032b1c8c1227a00180 58446744073709552000 biguint_binary_ops/contract.py:21 - byte 0x010000000000000180 // 0x032b1c8c1227a00180,0x010000000000000180 18446744073709552000 biguint_binary_ops/contract.py:21 + byte 0x032b1c8c1227a00180 // 0x032b1c8c1227a00180 BigUInt(58446744073709552000) biguint_binary_ops/contract.py:21 + byte 0x010000000000000180 // 0x032b1c8c1227a00180,0x010000000000000180 BigUInt(18446744073709552000) biguint_binary_ops/contract.py:21 callsub do_some_ops // {do_some_ops}.0,{do_some_ops}.1,{do_some_ops}.2,{do_some_ops}.3,{do_some_ops}.4,{do_some_ops}.5,{do_some_ops}.6,{do_some_ops}.7,{do_some_ops}.8,{do_some_ops}.9,{do_some_ops}.10,{do_some_ops}.11,{do_some_ops}.12,{do_some_ops}.13 do_some_ops(BigUInt(58446744073709552000), BigUInt(18446744073709552000)) biguint_binary_ops/contract.py:21 cover 13 // store b_xor#0 to l-stack (no copy) b_xor#0,{do_some_ops}.0,{do_some_ops}.1,{do_some_ops}.2,{do_some_ops}.3,{do_some_ops}.4,{do_some_ops}.5,{do_some_ops}.6,{do_some_ops}.7,{do_some_ops}.8,{do_some_ops}.9,{do_some_ops}.10,{do_some_ops}.11,{do_some_ops}.12 do_some_ops(BigUInt(58446744073709552000), BigUInt(18446744073709552000)) biguint_binary_ops/contract.py:21 cover 12 // store b_and#0 to l-stack (no copy) b_xor#0,b_and#0,{do_some_ops}.0,{do_some_ops}.1,{do_some_ops}.2,{do_some_ops}.3,{do_some_ops}.4,{do_some_ops}.5,{do_some_ops}.6,{do_some_ops}.7,{do_some_ops}.8,{do_some_ops}.9,{do_some_ops}.10,{do_some_ops}.11 do_some_ops(BigUInt(58446744073709552000), BigUInt(18446744073709552000)) biguint_binary_ops/contract.py:21 @@ -22,31 +22,31 @@ main_block@0: swap // store subtract#0 to l-stack (no copy) b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,multiply#0,subtract#0,{do_some_ops}.0 do_some_ops(BigUInt(58446744073709552000), BigUInt(18446744073709552000)) biguint_binary_ops/contract.py:21 // virtual: store add#0 to l-stack (no copy) b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,multiply#0,subtract#0,add#0 do_some_ops(BigUInt(58446744073709552000), BigUInt(18446744073709552000)) biguint_binary_ops/contract.py:21 // virtual: load add#0 from l-stack (no copy) b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,multiply#0,subtract#0,add#0 add == BigUInt(76893488147419104000) biguint_binary_ops/contract.py:23 - byte 0x042b1c8c1227a00300 // b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,multiply#0,subtract#0,add#0,0x042b1c8c1227a00300 76893488147419104000 biguint_binary_ops/contract.py:23 + byte 0x042b1c8c1227a00300 // b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,multiply#0,subtract#0,add#0,0x042b1c8c1227a00300 BigUInt(76893488147419104000) biguint_binary_ops/contract.py:23 b== // b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,multiply#0,subtract#0,{b==} add == BigUInt(76893488147419104000) biguint_binary_ops/contract.py:23 // virtual: store tmp%14#0 to l-stack (no copy) b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,multiply#0,subtract#0,tmp%14#0 add == BigUInt(76893488147419104000) biguint_binary_ops/contract.py:23 // virtual: load tmp%14#0 from l-stack (no copy) b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,multiply#0,subtract#0,tmp%14#0 assert add == BigUInt(76893488147419104000) biguint_binary_ops/contract.py:23 assert // b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,multiply#0,subtract#0 assert add == BigUInt(76893488147419104000) biguint_binary_ops/contract.py:23 // virtual: load subtract#0 from l-stack (no copy) b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,multiply#0,subtract#0 subtract == BigUInt(40000000000000000000) biguint_binary_ops/contract.py:24 - byte 0x022b1c8c1227a00000 // b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,multiply#0,subtract#0,0x022b1c8c1227a00000 40000000000000000000 biguint_binary_ops/contract.py:24 + byte 0x022b1c8c1227a00000 // b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,multiply#0,subtract#0,0x022b1c8c1227a00000 BigUInt(40000000000000000000) biguint_binary_ops/contract.py:24 b== // b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,multiply#0,{b==} subtract == BigUInt(40000000000000000000) biguint_binary_ops/contract.py:24 // virtual: store tmp%15#0 to l-stack (no copy) b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,multiply#0,tmp%15#0 subtract == BigUInt(40000000000000000000) biguint_binary_ops/contract.py:24 // virtual: load tmp%15#0 from l-stack (no copy) b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,multiply#0,tmp%15#0 assert subtract == BigUInt(40000000000000000000) biguint_binary_ops/contract.py:24 assert // b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,multiply#0 assert subtract == BigUInt(40000000000000000000) biguint_binary_ops/contract.py:24 // virtual: load multiply#0 from l-stack (no copy) b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,multiply#0 multiply == BigUInt(1078152129869320557630474056040704000000) biguint_binary_ops/contract.py:25 - byte 0x032b1c8c1227a00640aad21b3b70024000 // b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,multiply#0,0x032b1c8c1227a00640aad21b3b70024000 1078152129869320557630474056040704000000 biguint_binary_ops/contract.py:25 + byte 0x032b1c8c1227a00640aad21b3b70024000 // b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,multiply#0,0x032b1c8c1227a00640aad21b3b70024000 BigUInt(1078152129869320557630474056040704000000) biguint_binary_ops/contract.py:25 b== // b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,{b==} multiply == BigUInt(1078152129869320557630474056040704000000) biguint_binary_ops/contract.py:25 // virtual: store tmp%16#0 to l-stack (no copy) b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,tmp%16#0 multiply == BigUInt(1078152129869320557630474056040704000000) biguint_binary_ops/contract.py:25 // virtual: load tmp%16#0 from l-stack (no copy) b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,tmp%16#0 assert multiply == BigUInt(1078152129869320557630474056040704000000) biguint_binary_ops/contract.py:25 assert // b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0 assert multiply == BigUInt(1078152129869320557630474056040704000000) biguint_binary_ops/contract.py:25 // virtual: load divide#0 from l-stack (no copy) b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0 divide == BigUInt(3) biguint_binary_ops/contract.py:26 - byte 0x03 // b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,0x03 3 biguint_binary_ops/contract.py:26 + byte 0x03 // b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,divide#0,0x03 BigUInt(3) biguint_binary_ops/contract.py:26 b== // b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,{b==} divide == BigUInt(3) biguint_binary_ops/contract.py:26 // virtual: store tmp%17#0 to l-stack (no copy) b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,tmp%17#0 divide == BigUInt(3) biguint_binary_ops/contract.py:26 // virtual: load tmp%17#0 from l-stack (no copy) b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,tmp%17#0 assert divide == BigUInt(3) biguint_binary_ops/contract.py:26 assert // b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0 assert divide == BigUInt(3) biguint_binary_ops/contract.py:26 // virtual: load mod#0 from l-stack (no copy) b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0 mod == BigUInt(3106511852580896000) biguint_binary_ops/contract.py:27 - byte 0x2b1c8c12279ffd00 // b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,0x2b1c8c12279ffd00 3106511852580896000 biguint_binary_ops/contract.py:27 + byte 0x2b1c8c12279ffd00 // b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,mod#0,0x2b1c8c12279ffd00 BigUInt(3106511852580896000) biguint_binary_ops/contract.py:27 b== // b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,{b==} mod == BigUInt(3106511852580896000) biguint_binary_ops/contract.py:27 // virtual: store tmp%18#0 to l-stack (no copy) b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,tmp%18#0 mod == BigUInt(3106511852580896000) biguint_binary_ops/contract.py:27 // virtual: load tmp%18#0 from l-stack (no copy) b_xor#0,b_and#0,b_or#0,neq#0,eq#0,gte#0,gt#0,lte#0,lt#0,tmp%18#0 assert mod == BigUInt(3106511852580896000) biguint_binary_ops/contract.py:27 @@ -73,19 +73,19 @@ main_block@0: // virtual: load neq#0 from l-stack (no copy) b_xor#0,b_and#0,b_or#0,neq#0 assert neq biguint_binary_ops/contract.py:33 assert // b_xor#0,b_and#0,b_or#0 assert neq biguint_binary_ops/contract.py:33 // virtual: load b_or#0 from l-stack (no copy) b_xor#0,b_and#0,b_or#0 b_or == BigUInt(58446744073709552000) biguint_binary_ops/contract.py:34 - byte 0x032b1c8c1227a00180 // b_xor#0,b_and#0,b_or#0,0x032b1c8c1227a00180 58446744073709552000 biguint_binary_ops/contract.py:34 + byte 0x032b1c8c1227a00180 // b_xor#0,b_and#0,b_or#0,0x032b1c8c1227a00180 BigUInt(58446744073709552000) biguint_binary_ops/contract.py:34 b== // b_xor#0,b_and#0,{b==} b_or == BigUInt(58446744073709552000) biguint_binary_ops/contract.py:34 // virtual: store tmp%22#0 to l-stack (no copy) b_xor#0,b_and#0,tmp%22#0 b_or == BigUInt(58446744073709552000) biguint_binary_ops/contract.py:34 // virtual: load tmp%22#0 from l-stack (no copy) b_xor#0,b_and#0,tmp%22#0 assert b_or == BigUInt(58446744073709552000) biguint_binary_ops/contract.py:34 assert // b_xor#0,b_and#0 assert b_or == BigUInt(58446744073709552000) biguint_binary_ops/contract.py:34 // virtual: load b_and#0 from l-stack (no copy) b_xor#0,b_and#0 b_and == BigUInt(18446744073709552000) biguint_binary_ops/contract.py:35 - byte 0x010000000000000180 // b_xor#0,b_and#0,0x010000000000000180 18446744073709552000 biguint_binary_ops/contract.py:35 + byte 0x010000000000000180 // b_xor#0,b_and#0,0x010000000000000180 BigUInt(18446744073709552000) biguint_binary_ops/contract.py:35 b== // b_xor#0,{b==} b_and == BigUInt(18446744073709552000) biguint_binary_ops/contract.py:35 // virtual: store tmp%23#0 to l-stack (no copy) b_xor#0,tmp%23#0 b_and == BigUInt(18446744073709552000) biguint_binary_ops/contract.py:35 // virtual: load tmp%23#0 from l-stack (no copy) b_xor#0,tmp%23#0 assert b_and == BigUInt(18446744073709552000) biguint_binary_ops/contract.py:35 assert // b_xor#0 assert b_and == BigUInt(18446744073709552000) biguint_binary_ops/contract.py:35 // virtual: load b_xor#0 from l-stack (no copy) b_xor#0 b_xor == BigUInt(40000000000000000000) biguint_binary_ops/contract.py:36 - byte 0x022b1c8c1227a00000 // b_xor#0,0x022b1c8c1227a00000 40000000000000000000 biguint_binary_ops/contract.py:36 + byte 0x022b1c8c1227a00000 // b_xor#0,0x022b1c8c1227a00000 BigUInt(40000000000000000000) biguint_binary_ops/contract.py:36 b== // {b==} b_xor == BigUInt(40000000000000000000) biguint_binary_ops/contract.py:36 // virtual: store tmp%24#0 to l-stack (no copy) tmp%24#0 b_xor == BigUInt(40000000000000000000) biguint_binary_ops/contract.py:36 // virtual: load tmp%24#0 from l-stack (no copy) tmp%24#0 assert b_xor == BigUInt(40000000000000000000) biguint_binary_ops/contract.py:36 diff --git a/test_cases/contains/out/MyContract.approval.mir b/test_cases/contains/out/MyContract.approval.mir index 23d46aa498..67a2faa50a 100644 --- a/test_cases/contains/out/MyContract.approval.mir +++ b/test_cases/contains/out/MyContract.approval.mir @@ -42,14 +42,14 @@ main_block@0: // virtual: store tmp%1#0 to l-stack (no copy) tmp%1#0 not two_false contains/contract.py:22 // virtual: load tmp%1#0 from l-stack (no copy) tmp%1#0 assert not two_false, "Should be false" contains/contract.py:22 assert // Should be false // assert not two_false, "Should be false" contains/contract.py:22 - byte 0x1d65e22bcbbf // 0x1d65e22bcbbf 32323423423423 contains/contract.py:25 - byte 0x1d65e22bcbbf // 0x1d65e22bcbbf,0x1d65e22bcbbf 32323423423423 contains/contract.py:25 - byte 0x07acf5cae41e // 0x1d65e22bcbbf,0x1d65e22bcbbf,0x07acf5cae41e 8439439483934 contains/contract.py:25 + byte 0x1d65e22bcbbf // 0x1d65e22bcbbf BigUInt(32323423423423) contains/contract.py:25 + byte 0x1d65e22bcbbf // 0x1d65e22bcbbf,0x1d65e22bcbbf BigUInt(32323423423423) contains/contract.py:25 + byte 0x07acf5cae41e // 0x1d65e22bcbbf,0x1d65e22bcbbf,0x07acf5cae41e BigUInt(8439439483934) contains/contract.py:25 callsub is_in_tuple_3 // {is_in_tuple_3} self.is_in_tuple_3(\nBigUInt(32323423423423), (BigUInt(32323423423423), BigUInt(8439439483934))\n) contains/contract.py:24-26 // virtual: store three_true#0 to l-stack (no copy) three_true#0 three_true = self.is_in_tuple_3(\nBigUInt(32323423423423), (BigUInt(32323423423423), BigUInt(8439... contains/contract.py:24-26 byte 0x3acbc457977e // three_true#0,0x3acbc457977e BigUInt(32323423423423) + BigUInt(32323423423423) contains/contract.py:28 - byte 0x1d65e22bcbbf // three_true#0,0x3acbc457977e,0x1d65e22bcbbf 32323423423423 contains/contract.py:29 - byte 0x07acf5cae41e // three_true#0,0x3acbc457977e,0x1d65e22bcbbf,0x07acf5cae41e 8439439483934 contains/contract.py:29 + byte 0x1d65e22bcbbf // three_true#0,0x3acbc457977e,0x1d65e22bcbbf BigUInt(32323423423423) contains/contract.py:29 + byte 0x07acf5cae41e // three_true#0,0x3acbc457977e,0x1d65e22bcbbf,0x07acf5cae41e BigUInt(8439439483934) contains/contract.py:29 callsub is_in_tuple_3 // three_true#0,{is_in_tuple_3} self.is_in_tuple_3(\nBigUInt(32323423423423) + BigUInt(32323423423423),\n(BigUInt(32323423423423)... contains/contract.py:27-30 // virtual: store three_false#0 to l-stack (no copy) three_true#0,three_false#0 three_false = self.is_in_tuple_3(\nBigUInt(32323423423423) + BigUInt(32323423423423),\n(BigUInt(3... contains/contract.py:27-30 swap // load three_true#0 from l-stack (no copy) three_false#0,three_true#0 assert three_true, "Should be true" contains/contract.py:31 diff --git a/test_cases/log/out/MyContract.approval.mir b/test_cases/log/out/MyContract.approval.mir index a6409f6a07..ea8d324209 100644 --- a/test_cases/log/out/MyContract.approval.mir +++ b/test_cases/log/out/MyContract.approval.mir @@ -60,10 +60,10 @@ main_ternary_merge@3: swap // load tmp%12#0 from l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | 0x350000000000000006,tmp%12#0 op.Txn.num_app_args + 7 log/contract.py:14 concat // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | {concat} op.Txn.num_app_args + 7 log/contract.py:14 // virtual: store tmp%13#0 to l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%13#0 op.Txn.num_app_args + 7 log/contract.py:14 - // virtual: load tmp%13#0 from l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%13#0 8 log/contract.py:15 - byte 0x08 // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%13#0,0x08 8 log/contract.py:15 - concat // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | {concat} 8 log/contract.py:15 - bury 3 // store tmp%15#0 to f-stack (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | 8 log/contract.py:15 + // virtual: load tmp%13#0 from l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%13#0 BigUInt(8) log/contract.py:15 + byte 0x08 // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%13#0,0x08 BigUInt(8) log/contract.py:15 + concat // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | {concat} BigUInt(8) log/contract.py:15 + bury 3 // store tmp%15#0 to f-stack (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | BigUInt(8) log/contract.py:15 txn NumAppArgs // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | {txn} op.Txn.num_app_args log/contract.py:16 // virtual: store tmp%17#0 to l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%17#0 op.Txn.num_app_args log/contract.py:16 // virtual: load tmp%17#0 from l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%17#0 Bytes(b"9") if op.Txn.num_app_args else Bytes() log/contract.py:16 @@ -100,14 +100,14 @@ main_ternary_merge@6: swap // load tmp%26#0 from l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | 0x355f00000000000000065f,tmp%26#0 op.Txn.num_app_args + 7 log/contract.py:21 concat // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | {concat} op.Txn.num_app_args + 7 log/contract.py:21 // virtual: store tmp%27#0 to l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%27#0 op.Txn.num_app_args + 7 log/contract.py:21 - // virtual: load tmp%27#0 from l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%27#0 8 log/contract.py:22 + // virtual: load tmp%27#0 from l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%27#0 BigUInt(8) log/contract.py:22 byte "_" // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%27#0,"_" b"_" log/contract.py:24 - concat // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | {concat} 8 log/contract.py:22 - // virtual: store tmp%28#0 to l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%28#0 8 log/contract.py:22 - // virtual: load tmp%28#0 from l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%28#0 8 log/contract.py:22 - byte 0x08 // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%28#0,0x08 8 log/contract.py:22 - concat // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | {concat} 8 log/contract.py:22 - // virtual: store tmp%29#0 to l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%29#0 8 log/contract.py:22 + concat // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | {concat} BigUInt(8) log/contract.py:22 + // virtual: store tmp%28#0 to l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%28#0 BigUInt(8) log/contract.py:22 + // virtual: load tmp%28#0 from l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%28#0 BigUInt(8) log/contract.py:22 + byte 0x08 // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%28#0,0x08 BigUInt(8) log/contract.py:22 + concat // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | {concat} BigUInt(8) log/contract.py:22 + // virtual: store tmp%29#0 to l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%29#0 BigUInt(8) log/contract.py:22 // virtual: load tmp%29#0 from l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%29#0 Bytes(b"9") if op.Txn.num_app_args else Bytes() log/contract.py:23 byte "_" // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%29#0,"_" b"_" log/contract.py:24 concat // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | {concat} Bytes(b"9") if op.Txn.num_app_args else Bytes() log/contract.py:23 @@ -148,14 +148,14 @@ main_ternary_merge@9: swap // load tmp%40#0 from l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | 0x355f00000000000000065f,tmp%40#0 op.Txn.num_app_args + 7 log/contract.py:29 concat // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | {concat} op.Txn.num_app_args + 7 log/contract.py:29 // virtual: store tmp%41#0 to l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%41#0 op.Txn.num_app_args + 7 log/contract.py:29 - // virtual: load tmp%41#0 from l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%41#0 8 log/contract.py:30 + // virtual: load tmp%41#0 from l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%41#0 BigUInt(8) log/contract.py:30 byte "_" // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%41#0,"_" "_" log/contract.py:32 - concat // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | {concat} 8 log/contract.py:30 - // virtual: store tmp%42#0 to l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%42#0 8 log/contract.py:30 - // virtual: load tmp%42#0 from l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%42#0 8 log/contract.py:30 - byte 0x08 // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%42#0,0x08 8 log/contract.py:30 - concat // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | {concat} 8 log/contract.py:30 - // virtual: store tmp%43#0 to l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%43#0 8 log/contract.py:30 + concat // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | {concat} BigUInt(8) log/contract.py:30 + // virtual: store tmp%42#0 to l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%42#0 BigUInt(8) log/contract.py:30 + // virtual: load tmp%42#0 from l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%42#0 BigUInt(8) log/contract.py:30 + byte 0x08 // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%42#0,0x08 BigUInt(8) log/contract.py:30 + concat // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | {concat} BigUInt(8) log/contract.py:30 + // virtual: store tmp%43#0 to l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%43#0 BigUInt(8) log/contract.py:30 // virtual: load tmp%43#0 from l-stack (no copy) (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%43#0 Bytes(b"9") if op.Txn.num_app_args else Bytes() log/contract.py:31 byte "_" // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | tmp%43#0,"_" "_" log/contract.py:32 concat // (𝕗) tmp%15#0,tmp%30#0,tmp%44#0 | {concat} Bytes(b"9") if op.Txn.num_app_args else Bytes() log/contract.py:31 diff --git a/test_cases/match/out/MyContract.approval.mir b/test_cases/match/out/MyContract.approval.mir index 6841c272f3..0335f18d6b 100644 --- a/test_cases/match/out/MyContract.approval.mir +++ b/test_cases/match/out/MyContract.approval.mir @@ -58,7 +58,7 @@ match_biguint_block@0: itob // {itob} puyapy.op.Txn.num_app_args * puyapy.BigUInt(10) match/contract.py:40 // virtual: store tmp%1#0 to l-stack (no copy) tmp%1#0 puyapy.op.Txn.num_app_args * puyapy.BigUInt(10) match/contract.py:40 // virtual: load tmp%1#0 from l-stack (no copy) tmp%1#0 n = puyapy.op.Txn.num_app_args * puyapy.BigUInt(10) match/contract.py:40 - byte 0x0a // tmp%1#0,0x0a 10 match/contract.py:40 + byte 0x0a // tmp%1#0,0x0a puyapy.BigUInt(10) match/contract.py:40 b* // {b*} puyapy.op.Txn.num_app_args * puyapy.BigUInt(10) match/contract.py:40 // virtual: store n#0 to l-stack (no copy) n#0 n = puyapy.op.Txn.num_app_args * puyapy.BigUInt(10) match/contract.py:40 byte 0x // n#0,0x 0 match/contract.py:42 diff --git a/test_cases/stubs/biguint.py b/test_cases/stubs/biguint.py index 7a67773aa8..f7da5e5aae 100644 --- a/test_cases/stubs/biguint.py +++ b/test_cases/stubs/biguint.py @@ -9,6 +9,7 @@ def approval_program(self) -> bool: return True def clear_state_program(self) -> bool: + assert BigUInt() == 0 return True diff --git a/test_cases/stubs/out/BigUIntContract.approval.mir b/test_cases/stubs/out/BigUIntContract.approval.mir index 568597c727..54144fe78a 100644 --- a/test_cases/stubs/out/BigUIntContract.approval.mir +++ b/test_cases/stubs/out/BigUIntContract.approval.mir @@ -4,14 +4,14 @@ // test_cases.stubs.biguint.BigUIntContract.approval_program() -> uint64: main_block@0: - byte 0x01 // 0x01 1 stubs/biguint.py:6 - byte 0x02 // 0x01,0x02 2 stubs/biguint.py:6 + byte 0x01 // 0x01 BigUInt(1) stubs/biguint.py:6 + byte 0x02 // 0x01,0x02 BigUInt(2) stubs/biguint.py:6 callsub compare_biguints // compare_biguints(BigUInt(1), BigUInt(2)) stubs/biguint.py:6 - byte 0x01 // 0x01 1 stubs/biguint.py:7 + byte 0x01 // 0x01 BigUInt(1) stubs/biguint.py:7 int 2 // 0x01,2 UInt64(2) stubs/biguint.py:7 callsub compare_biguint_vs_uint64 // compare_biguint_vs_uint64(BigUInt(1), UInt64(2)) stubs/biguint.py:7 int 1 // 1 UInt64(1) stubs/biguint.py:8 - byte 0x02 // 1,0x02 2 stubs/biguint.py:8 + byte 0x02 // 1,0x02 BigUInt(2) stubs/biguint.py:8 callsub compare_uint64_vs_biguint // compare_uint64_vs_biguint(UInt64(1), BigUInt(2)) stubs/biguint.py:8 int 1 // 1 True stubs/biguint.py:9 return // return True stubs/biguint.py:9 @@ -19,96 +19,96 @@ main_block@0: // test_cases.stubs.biguint.compare_biguints(one: bytes, two: bytes) -> void: compare_biguints: - proto 2 0 // (𝕡) one#0,two#0 | @subroutine\ndef compare_biguints(one: BigUInt, two: BigUInt) -> None: stubs/biguint.py:15-16 + proto 2 0 // (𝕡) one#0,two#0 | @subroutine\ndef compare_biguints(one: BigUInt, two: BigUInt) -> None: stubs/biguint.py:16-17 compare_biguints_block@0: - frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | one#0 one < two stubs/biguint.py:17 - frame_dig -1 // load two#0 from parameters (𝕡) one#0,two#0 | one#0,two#0 one < two stubs/biguint.py:17 - b< // (𝕡) one#0,two#0 | {b<} one < two stubs/biguint.py:17 - // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0 one < two stubs/biguint.py:17 - // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0 assert one < two stubs/biguint.py:17 - assert // (𝕡) one#0,two#0 | assert one < two stubs/biguint.py:17 - frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | one#0 one <= two stubs/biguint.py:18 - frame_dig -1 // load two#0 from parameters (𝕡) one#0,two#0 | one#0,two#0 one <= two stubs/biguint.py:18 - b<= // (𝕡) one#0,two#0 | {b<=} one <= two stubs/biguint.py:18 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%1#0 one <= two stubs/biguint.py:18 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%1#0 assert one <= two stubs/biguint.py:18 - assert // (𝕡) one#0,two#0 | assert one <= two stubs/biguint.py:18 - frame_dig -1 // load two#0 from parameters (𝕡) one#0,two#0 | two#0 two > one stubs/biguint.py:20 - frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | two#0,one#0 two > one stubs/biguint.py:20 - b> // (𝕡) one#0,two#0 | {b>} two > one stubs/biguint.py:20 - // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0 two > one stubs/biguint.py:20 - // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0 assert two > one stubs/biguint.py:20 - assert // (𝕡) one#0,two#0 | assert two > one stubs/biguint.py:20 - frame_dig -1 // load two#0 from parameters (𝕡) one#0,two#0 | two#0 two >= one stubs/biguint.py:21 - frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | two#0,one#0 two >= one stubs/biguint.py:21 - b>= // (𝕡) one#0,two#0 | {b>=} two >= one stubs/biguint.py:21 - // virtual: store tmp%4#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%4#0 two >= one stubs/biguint.py:21 - // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%4#0 assert two >= one stubs/biguint.py:21 - assert // (𝕡) one#0,two#0 | assert two >= one stubs/biguint.py:21 - frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | one#0 one != two stubs/biguint.py:22 - frame_dig -1 // load two#0 from parameters (𝕡) one#0,two#0 | one#0,two#0 one != two stubs/biguint.py:22 - b!= // (𝕡) one#0,two#0 | {b!=} one != two stubs/biguint.py:22 - // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%5#0 one != two stubs/biguint.py:22 - // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%5#0 assert one != two stubs/biguint.py:22 - assert // (𝕡) one#0,two#0 | assert one != two stubs/biguint.py:22 + frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | one#0 one < two stubs/biguint.py:18 + frame_dig -1 // load two#0 from parameters (𝕡) one#0,two#0 | one#0,two#0 one < two stubs/biguint.py:18 + b< // (𝕡) one#0,two#0 | {b<} one < two stubs/biguint.py:18 + // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0 one < two stubs/biguint.py:18 + // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0 assert one < two stubs/biguint.py:18 + assert // (𝕡) one#0,two#0 | assert one < two stubs/biguint.py:18 + frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | one#0 one <= two stubs/biguint.py:19 + frame_dig -1 // load two#0 from parameters (𝕡) one#0,two#0 | one#0,two#0 one <= two stubs/biguint.py:19 + b<= // (𝕡) one#0,two#0 | {b<=} one <= two stubs/biguint.py:19 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%1#0 one <= two stubs/biguint.py:19 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%1#0 assert one <= two stubs/biguint.py:19 + assert // (𝕡) one#0,two#0 | assert one <= two stubs/biguint.py:19 + frame_dig -1 // load two#0 from parameters (𝕡) one#0,two#0 | two#0 two > one stubs/biguint.py:21 + frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | two#0,one#0 two > one stubs/biguint.py:21 + b> // (𝕡) one#0,two#0 | {b>} two > one stubs/biguint.py:21 + // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0 two > one stubs/biguint.py:21 + // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%3#0 assert two > one stubs/biguint.py:21 + assert // (𝕡) one#0,two#0 | assert two > one stubs/biguint.py:21 + frame_dig -1 // load two#0 from parameters (𝕡) one#0,two#0 | two#0 two >= one stubs/biguint.py:22 + frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | two#0,one#0 two >= one stubs/biguint.py:22 + b>= // (𝕡) one#0,two#0 | {b>=} two >= one stubs/biguint.py:22 + // virtual: store tmp%4#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%4#0 two >= one stubs/biguint.py:22 + // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%4#0 assert two >= one stubs/biguint.py:22 + assert // (𝕡) one#0,two#0 | assert two >= one stubs/biguint.py:22 + frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | one#0 one != two stubs/biguint.py:23 + frame_dig -1 // load two#0 from parameters (𝕡) one#0,two#0 | one#0,two#0 one != two stubs/biguint.py:23 + b!= // (𝕡) one#0,two#0 | {b!=} one != two stubs/biguint.py:23 + // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%5#0 one != two stubs/biguint.py:23 + // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%5#0 assert one != two stubs/biguint.py:23 + assert // (𝕡) one#0,two#0 | assert one != two stubs/biguint.py:23 retsub // // test_cases.stubs.biguint.compare_biguint_vs_uint64(one: bytes, two: uint64) -> void: compare_biguint_vs_uint64: - proto 2 0 // (𝕡) one#0,two#0 | @subroutine\ndef compare_biguint_vs_uint64(one: BigUInt, two: UInt64) -> None: stubs/biguint.py:25-26 + proto 2 0 // (𝕡) one#0,two#0 | @subroutine\ndef compare_biguint_vs_uint64(one: BigUInt, two: UInt64) -> None: stubs/biguint.py:26-27 compare_biguint_vs_uint64_block@0: - frame_dig -1 // load two#0 from parameters (𝕡) one#0,two#0 | two#0 one < two stubs/biguint.py:27 - itob // (𝕡) one#0,two#0 | {itob} one < two stubs/biguint.py:27 - // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0 one < two stubs/biguint.py:27 - frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%0#0,one#0 one < two stubs/biguint.py:27 - dig 1 // load tmp%0#0 from l-stack (copy) (𝕡) one#0,two#0 | tmp%0#0,one#0,tmp%0#0 one < two stubs/biguint.py:27 - b< // (𝕡) one#0,two#0 | tmp%0#0,{b<} one < two stubs/biguint.py:27 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0,tmp%1#0 one < two stubs/biguint.py:27 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0,tmp%1#0 assert one < two stubs/biguint.py:27 - assert // (𝕡) one#0,two#0 | tmp%0#0 assert one < two stubs/biguint.py:27 - frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%0#0,one#0 one <= two stubs/biguint.py:28 - dig 1 // load tmp%0#0 from l-stack (copy) (𝕡) one#0,two#0 | tmp%0#0,one#0,tmp%0#0 one <= two stubs/biguint.py:28 - b<= // (𝕡) one#0,two#0 | tmp%0#0,{b<=} one <= two stubs/biguint.py:28 - // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0,tmp%3#0 one <= two stubs/biguint.py:28 - // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0,tmp%3#0 assert one <= two stubs/biguint.py:28 - assert // (𝕡) one#0,two#0 | tmp%0#0 assert one <= two stubs/biguint.py:28 - frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%0#0,one#0 one != two stubs/biguint.py:32 - swap // load tmp%0#0 from l-stack (no copy) (𝕡) one#0,two#0 | one#0,tmp%0#0 one != two stubs/biguint.py:32 - b!= // (𝕡) one#0,two#0 | {b!=} one != two stubs/biguint.py:32 - // virtual: store tmp%10#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%10#0 one != two stubs/biguint.py:32 - // virtual: load tmp%10#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%10#0 assert one != two stubs/biguint.py:32 - assert // (𝕡) one#0,two#0 | assert one != two stubs/biguint.py:32 + frame_dig -1 // load two#0 from parameters (𝕡) one#0,two#0 | two#0 one < two stubs/biguint.py:28 + itob // (𝕡) one#0,two#0 | {itob} one < two stubs/biguint.py:28 + // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0 one < two stubs/biguint.py:28 + frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%0#0,one#0 one < two stubs/biguint.py:28 + dig 1 // load tmp%0#0 from l-stack (copy) (𝕡) one#0,two#0 | tmp%0#0,one#0,tmp%0#0 one < two stubs/biguint.py:28 + b< // (𝕡) one#0,two#0 | tmp%0#0,{b<} one < two stubs/biguint.py:28 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0,tmp%1#0 one < two stubs/biguint.py:28 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0,tmp%1#0 assert one < two stubs/biguint.py:28 + assert // (𝕡) one#0,two#0 | tmp%0#0 assert one < two stubs/biguint.py:28 + frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%0#0,one#0 one <= two stubs/biguint.py:29 + dig 1 // load tmp%0#0 from l-stack (copy) (𝕡) one#0,two#0 | tmp%0#0,one#0,tmp%0#0 one <= two stubs/biguint.py:29 + b<= // (𝕡) one#0,two#0 | tmp%0#0,{b<=} one <= two stubs/biguint.py:29 + // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0,tmp%3#0 one <= two stubs/biguint.py:29 + // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0,tmp%3#0 assert one <= two stubs/biguint.py:29 + assert // (𝕡) one#0,two#0 | tmp%0#0 assert one <= two stubs/biguint.py:29 + frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | tmp%0#0,one#0 one != two stubs/biguint.py:33 + swap // load tmp%0#0 from l-stack (no copy) (𝕡) one#0,two#0 | one#0,tmp%0#0 one != two stubs/biguint.py:33 + b!= // (𝕡) one#0,two#0 | {b!=} one != two stubs/biguint.py:33 + // virtual: store tmp%10#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%10#0 one != two stubs/biguint.py:33 + // virtual: load tmp%10#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%10#0 assert one != two stubs/biguint.py:33 + assert // (𝕡) one#0,two#0 | assert one != two stubs/biguint.py:33 retsub // // test_cases.stubs.biguint.compare_uint64_vs_biguint(one: uint64, two: bytes) -> void: compare_uint64_vs_biguint: - proto 2 0 // (𝕡) one#0,two#0 | @subroutine\ndef compare_uint64_vs_biguint(one: UInt64, two: BigUInt) -> None: stubs/biguint.py:35-36 + proto 2 0 // (𝕡) one#0,two#0 | @subroutine\ndef compare_uint64_vs_biguint(one: UInt64, two: BigUInt) -> None: stubs/biguint.py:36-37 compare_uint64_vs_biguint_block@0: - frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | one#0 one < two stubs/biguint.py:37 - itob // (𝕡) one#0,two#0 | {itob} one < two stubs/biguint.py:37 - // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0 one < two stubs/biguint.py:37 - frame_dig -1 // load two#0 from parameters (𝕡) one#0,two#0 | tmp%0#0,two#0 one < two stubs/biguint.py:37 - dig 1 // load tmp%0#0 from l-stack (copy) (𝕡) one#0,two#0 | tmp%0#0,two#0,tmp%0#0 one < two stubs/biguint.py:37 - b> // (𝕡) one#0,two#0 | tmp%0#0,{b>} one < two stubs/biguint.py:37 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0,tmp%1#0 one < two stubs/biguint.py:37 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0,tmp%1#0 assert one < two stubs/biguint.py:37 - assert // (𝕡) one#0,two#0 | tmp%0#0 assert one < two stubs/biguint.py:37 - frame_dig -1 // load two#0 from parameters (𝕡) one#0,two#0 | tmp%0#0,two#0 one <= two stubs/biguint.py:38 - dig 1 // load tmp%0#0 from l-stack (copy) (𝕡) one#0,two#0 | tmp%0#0,two#0,tmp%0#0 one <= two stubs/biguint.py:38 - b>= // (𝕡) one#0,two#0 | tmp%0#0,{b>=} one <= two stubs/biguint.py:38 - // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0,tmp%3#0 one <= two stubs/biguint.py:38 - // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0,tmp%3#0 assert one <= two stubs/biguint.py:38 - assert // (𝕡) one#0,two#0 | tmp%0#0 assert one <= two stubs/biguint.py:38 - frame_dig -1 // load two#0 from parameters (𝕡) one#0,two#0 | tmp%0#0,two#0 one != two stubs/biguint.py:42 - swap // load tmp%0#0 from l-stack (no copy) (𝕡) one#0,two#0 | two#0,tmp%0#0 one != two stubs/biguint.py:42 - b!= // (𝕡) one#0,two#0 | {b!=} one != two stubs/biguint.py:42 - // virtual: store tmp%10#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%10#0 one != two stubs/biguint.py:42 - // virtual: load tmp%10#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%10#0 assert one != two stubs/biguint.py:42 - assert // (𝕡) one#0,two#0 | assert one != two stubs/biguint.py:42 + frame_dig -2 // load one#0 from parameters (𝕡) one#0,two#0 | one#0 one < two stubs/biguint.py:38 + itob // (𝕡) one#0,two#0 | {itob} one < two stubs/biguint.py:38 + // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0 one < two stubs/biguint.py:38 + frame_dig -1 // load two#0 from parameters (𝕡) one#0,two#0 | tmp%0#0,two#0 one < two stubs/biguint.py:38 + dig 1 // load tmp%0#0 from l-stack (copy) (𝕡) one#0,two#0 | tmp%0#0,two#0,tmp%0#0 one < two stubs/biguint.py:38 + b> // (𝕡) one#0,two#0 | tmp%0#0,{b>} one < two stubs/biguint.py:38 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0,tmp%1#0 one < two stubs/biguint.py:38 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0,tmp%1#0 assert one < two stubs/biguint.py:38 + assert // (𝕡) one#0,two#0 | tmp%0#0 assert one < two stubs/biguint.py:38 + frame_dig -1 // load two#0 from parameters (𝕡) one#0,two#0 | tmp%0#0,two#0 one <= two stubs/biguint.py:39 + dig 1 // load tmp%0#0 from l-stack (copy) (𝕡) one#0,two#0 | tmp%0#0,two#0,tmp%0#0 one <= two stubs/biguint.py:39 + b>= // (𝕡) one#0,two#0 | tmp%0#0,{b>=} one <= two stubs/biguint.py:39 + // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0,tmp%3#0 one <= two stubs/biguint.py:39 + // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%0#0,tmp%3#0 assert one <= two stubs/biguint.py:39 + assert // (𝕡) one#0,two#0 | tmp%0#0 assert one <= two stubs/biguint.py:39 + frame_dig -1 // load two#0 from parameters (𝕡) one#0,two#0 | tmp%0#0,two#0 one != two stubs/biguint.py:43 + swap // load tmp%0#0 from l-stack (no copy) (𝕡) one#0,two#0 | two#0,tmp%0#0 one != two stubs/biguint.py:43 + b!= // (𝕡) one#0,two#0 | {b!=} one != two stubs/biguint.py:43 + // virtual: store tmp%10#0 to l-stack (no copy) (𝕡) one#0,two#0 | tmp%10#0 one != two stubs/biguint.py:43 + // virtual: load tmp%10#0 from l-stack (no copy) (𝕡) one#0,two#0 | tmp%10#0 assert one != two stubs/biguint.py:43 + assert // (𝕡) one#0,two#0 | assert one != two stubs/biguint.py:43 retsub // diff --git a/test_cases/stubs/out/BigUIntContract.approval.teal b/test_cases/stubs/out/BigUIntContract.approval.teal index 0fdaa825d3..f29c73eab6 100644 --- a/test_cases/stubs/out/BigUIntContract.approval.teal +++ b/test_cases/stubs/out/BigUIntContract.approval.teal @@ -24,35 +24,35 @@ test_cases.stubs.biguint.BigUIntContract.approval_program: // test_cases.stubs.biguint.compare_biguints(one: bytes, two: bytes) -> void: compare_biguints: - // stubs/biguint.py:15-16 + // stubs/biguint.py:16-17 // @subroutine // def compare_biguints(one: BigUInt, two: BigUInt) -> None: proto 2 0 - // stubs/biguint.py:17 + // stubs/biguint.py:18 // assert one < two frame_dig -2 frame_dig -1 b< assert - // stubs/biguint.py:18 + // stubs/biguint.py:19 // assert one <= two frame_dig -2 frame_dig -1 b<= assert - // stubs/biguint.py:20 + // stubs/biguint.py:21 // assert two > one frame_dig -1 frame_dig -2 b> assert - // stubs/biguint.py:21 + // stubs/biguint.py:22 // assert two >= one frame_dig -1 frame_dig -2 b>= assert - // stubs/biguint.py:22 + // stubs/biguint.py:23 // assert one != two frame_dig -2 frame_dig -1 @@ -63,11 +63,11 @@ compare_biguints: // test_cases.stubs.biguint.compare_biguint_vs_uint64(one: bytes, two: uint64) -> void: compare_biguint_vs_uint64: - // stubs/biguint.py:25-26 + // stubs/biguint.py:26-27 // @subroutine // def compare_biguint_vs_uint64(one: BigUInt, two: UInt64) -> None: proto 2 0 - // stubs/biguint.py:27 + // stubs/biguint.py:28 // assert one < two frame_dig -1 itob @@ -75,13 +75,13 @@ compare_biguint_vs_uint64: dig 1 b< assert - // stubs/biguint.py:28 + // stubs/biguint.py:29 // assert one <= two frame_dig -2 dig 1 b<= assert - // stubs/biguint.py:32 + // stubs/biguint.py:33 // assert one != two frame_dig -2 b!= @@ -91,11 +91,11 @@ compare_biguint_vs_uint64: // test_cases.stubs.biguint.compare_uint64_vs_biguint(one: uint64, two: bytes) -> void: compare_uint64_vs_biguint: - // stubs/biguint.py:35-36 + // stubs/biguint.py:36-37 // @subroutine // def compare_uint64_vs_biguint(one: UInt64, two: BigUInt) -> None: proto 2 0 - // stubs/biguint.py:37 + // stubs/biguint.py:38 // assert one < two frame_dig -2 itob @@ -103,13 +103,13 @@ compare_uint64_vs_biguint: dig 1 b> assert - // stubs/biguint.py:38 + // stubs/biguint.py:39 // assert one <= two frame_dig -1 dig 1 b>= assert - // stubs/biguint.py:42 + // stubs/biguint.py:43 // assert one != two frame_dig -1 b!= diff --git a/test_cases/stubs/out/BigUIntContract.clear.mir b/test_cases/stubs/out/BigUIntContract.clear.mir index abab8129c4..96463ba069 100644 --- a/test_cases/stubs/out/BigUIntContract.clear.mir +++ b/test_cases/stubs/out/BigUIntContract.clear.mir @@ -4,6 +4,6 @@ // test_cases.stubs.biguint.BigUIntContract.clear_state_program() -> uint64: main_block@0: - int 1 // 1 True stubs/biguint.py:12 - return // return True stubs/biguint.py:12 + int 1 // 1 True stubs/biguint.py:13 + return // return True stubs/biguint.py:13 diff --git a/test_cases/stubs/out/BigUIntContract.clear.teal b/test_cases/stubs/out/BigUIntContract.clear.teal index 4c55c60059..a13b68c1ba 100644 --- a/test_cases/stubs/out/BigUIntContract.clear.teal +++ b/test_cases/stubs/out/BigUIntContract.clear.teal @@ -1,7 +1,7 @@ #pragma version 10 test_cases.stubs.biguint.BigUIntContract.clear_state_program: - // stubs/biguint.py:12 + // stubs/biguint.py:13 // return True int 1 return diff --git a/test_cases/stubs/out/BigUIntContract.destructured.ir b/test_cases/stubs/out/BigUIntContract.destructured.ir index bc3af835e4..b80764053e 100644 --- a/test_cases/stubs/out/BigUIntContract.destructured.ir +++ b/test_cases/stubs/out/BigUIntContract.destructured.ir @@ -8,7 +8,7 @@ contract test_cases.stubs.biguint.BigUIntContract: return 1u subroutine test_cases.stubs.biguint.compare_biguints(one: bytes, two: bytes) -> void: - block@0: // L15 + block@0: // L16 let tmp%0#0: uint64 = (b< one#0 two#0) (assert tmp%0#0) let tmp%1#0: uint64 = (b<= one#0 two#0) @@ -22,7 +22,7 @@ contract test_cases.stubs.biguint.BigUIntContract: return subroutine test_cases.stubs.biguint.compare_biguint_vs_uint64(one: bytes, two: uint64) -> void: - block@0: // L25 + block@0: // L26 let tmp%0#0: bytes = (itob two#0) let tmp%1#0: uint64 = (b< one#0 tmp%0#0) (assert tmp%1#0) @@ -33,7 +33,7 @@ contract test_cases.stubs.biguint.BigUIntContract: return subroutine test_cases.stubs.biguint.compare_uint64_vs_biguint(one: uint64, two: bytes) -> void: - block@0: // L35 + block@0: // L36 let tmp%0#0: bytes = (itob one#0) let tmp%1#0: uint64 = (b> two#0 tmp%0#0) (assert tmp%1#0) diff --git a/test_cases/stubs/out/BigUIntContract.ssa.ir b/test_cases/stubs/out/BigUIntContract.ssa.ir index 0f4d9345bf..4df162c63a 100644 --- a/test_cases/stubs/out/BigUIntContract.ssa.ir +++ b/test_cases/stubs/out/BigUIntContract.ssa.ir @@ -8,7 +8,7 @@ contract test_cases.stubs.biguint.BigUIntContract: return 1u subroutine test_cases.stubs.biguint.compare_biguints(one: bytes, two: bytes) -> void: - block@0: // L15 + block@0: // L16 let tmp%0#0: uint64 = (b< one#0 two#0) (assert tmp%0#0) let tmp%1#0: uint64 = (b<= one#0 two#0) @@ -24,7 +24,7 @@ contract test_cases.stubs.biguint.BigUIntContract: return subroutine test_cases.stubs.biguint.compare_biguint_vs_uint64(one: bytes, two: uint64) -> void: - block@0: // L25 + block@0: // L26 let tmp%0#0: bytes = (itob two#0) let tmp%1#0: uint64 = (b< one#0 tmp%0#0) (assert tmp%1#0) @@ -45,7 +45,7 @@ contract test_cases.stubs.biguint.BigUIntContract: return subroutine test_cases.stubs.biguint.compare_uint64_vs_biguint(one: uint64, two: bytes) -> void: - block@0: // L35 + block@0: // L36 let tmp%0#0: bytes = (itob one#0) let tmp%1#0: uint64 = (b> two#0 tmp%0#0) (assert tmp%1#0) @@ -68,4 +68,6 @@ contract test_cases.stubs.biguint.BigUIntContract: program clear-state: subroutine test_cases.stubs.biguint.BigUIntContract.clear_state_program() -> uint64: block@0: // L11 + let tmp%0#0: uint64 = (b== 0b 0b) + (assert tmp%0#0) return 1u \ No newline at end of file diff --git a/test_cases/stubs/out/BigUIntContract.ssa.opt_pass_1.ir b/test_cases/stubs/out/BigUIntContract.ssa.opt_pass_1.ir index 3b9e9c4900..4833ba4dce 100644 --- a/test_cases/stubs/out/BigUIntContract.ssa.opt_pass_1.ir +++ b/test_cases/stubs/out/BigUIntContract.ssa.opt_pass_1.ir @@ -8,7 +8,7 @@ contract test_cases.stubs.biguint.BigUIntContract: return 1u subroutine test_cases.stubs.biguint.compare_biguints(one: bytes, two: bytes) -> void: - block@0: // L15 + block@0: // L16 let tmp%0#0: uint64 = (b< one#0 two#0) (assert tmp%0#0) let tmp%1#0: uint64 = (b<= one#0 two#0) @@ -24,7 +24,7 @@ contract test_cases.stubs.biguint.BigUIntContract: return subroutine test_cases.stubs.biguint.compare_biguint_vs_uint64(one: bytes, two: uint64) -> void: - block@0: // L25 + block@0: // L26 let tmp%0#0: bytes = (itob two#0) let tmp%1#0: uint64 = (b< one#0 tmp%0#0) (assert tmp%1#0) @@ -37,7 +37,7 @@ contract test_cases.stubs.biguint.BigUIntContract: return subroutine test_cases.stubs.biguint.compare_uint64_vs_biguint(one: uint64, two: bytes) -> void: - block@0: // L35 + block@0: // L36 let tmp%0#0: bytes = (itob one#0) let tmp%1#0: uint64 = (b> two#0 tmp%0#0) (assert tmp%1#0) @@ -52,4 +52,6 @@ contract test_cases.stubs.biguint.BigUIntContract: program clear-state: subroutine test_cases.stubs.biguint.BigUIntContract.clear_state_program() -> uint64: block@0: // L11 + let tmp%0#0: uint64 = 1u + (assert tmp%0#0) return 1u \ No newline at end of file diff --git a/test_cases/stubs/out/BigUIntContract.ssa.opt_pass_2.ir b/test_cases/stubs/out/BigUIntContract.ssa.opt_pass_2.ir index bc3af835e4..b80764053e 100644 --- a/test_cases/stubs/out/BigUIntContract.ssa.opt_pass_2.ir +++ b/test_cases/stubs/out/BigUIntContract.ssa.opt_pass_2.ir @@ -8,7 +8,7 @@ contract test_cases.stubs.biguint.BigUIntContract: return 1u subroutine test_cases.stubs.biguint.compare_biguints(one: bytes, two: bytes) -> void: - block@0: // L15 + block@0: // L16 let tmp%0#0: uint64 = (b< one#0 two#0) (assert tmp%0#0) let tmp%1#0: uint64 = (b<= one#0 two#0) @@ -22,7 +22,7 @@ contract test_cases.stubs.biguint.BigUIntContract: return subroutine test_cases.stubs.biguint.compare_biguint_vs_uint64(one: bytes, two: uint64) -> void: - block@0: // L25 + block@0: // L26 let tmp%0#0: bytes = (itob two#0) let tmp%1#0: uint64 = (b< one#0 tmp%0#0) (assert tmp%1#0) @@ -33,7 +33,7 @@ contract test_cases.stubs.biguint.BigUIntContract: return subroutine test_cases.stubs.biguint.compare_uint64_vs_biguint(one: uint64, two: bytes) -> void: - block@0: // L35 + block@0: // L36 let tmp%0#0: bytes = (itob one#0) let tmp%1#0: uint64 = (b> two#0 tmp%0#0) (assert tmp%1#0) diff --git a/test_cases/stubs/out/biguint.awst b/test_cases/stubs/out/biguint.awst index da9602d615..0faac24b48 100644 --- a/test_cases/stubs/out/biguint.awst +++ b/test_cases/stubs/out/biguint.awst @@ -10,6 +10,7 @@ contract BigUIntContract clear_state_program(): bool { + assert(0n == 0n) return true } } diff --git a/test_cases/stubs/out_O2/BigUIntContract.destructured.ir b/test_cases/stubs/out_O2/BigUIntContract.destructured.ir index bc3af835e4..b80764053e 100644 --- a/test_cases/stubs/out_O2/BigUIntContract.destructured.ir +++ b/test_cases/stubs/out_O2/BigUIntContract.destructured.ir @@ -8,7 +8,7 @@ contract test_cases.stubs.biguint.BigUIntContract: return 1u subroutine test_cases.stubs.biguint.compare_biguints(one: bytes, two: bytes) -> void: - block@0: // L15 + block@0: // L16 let tmp%0#0: uint64 = (b< one#0 two#0) (assert tmp%0#0) let tmp%1#0: uint64 = (b<= one#0 two#0) @@ -22,7 +22,7 @@ contract test_cases.stubs.biguint.BigUIntContract: return subroutine test_cases.stubs.biguint.compare_biguint_vs_uint64(one: bytes, two: uint64) -> void: - block@0: // L25 + block@0: // L26 let tmp%0#0: bytes = (itob two#0) let tmp%1#0: uint64 = (b< one#0 tmp%0#0) (assert tmp%1#0) @@ -33,7 +33,7 @@ contract test_cases.stubs.biguint.BigUIntContract: return subroutine test_cases.stubs.biguint.compare_uint64_vs_biguint(one: uint64, two: bytes) -> void: - block@0: // L35 + block@0: // L36 let tmp%0#0: bytes = (itob one#0) let tmp%1#0: uint64 = (b> two#0 tmp%0#0) (assert tmp%1#0) diff --git a/test_cases/stubs/out_unoptimized/BigUIntContract.approval.teal b/test_cases/stubs/out_unoptimized/BigUIntContract.approval.teal index 95154925c8..6d69242daf 100644 --- a/test_cases/stubs/out_unoptimized/BigUIntContract.approval.teal +++ b/test_cases/stubs/out_unoptimized/BigUIntContract.approval.teal @@ -24,41 +24,41 @@ test_cases.stubs.biguint.BigUIntContract.approval_program: // test_cases.stubs.biguint.compare_biguints(one: bytes, two: bytes) -> void: compare_biguints: - // stubs/biguint.py:15-16 + // stubs/biguint.py:16-17 // @subroutine // def compare_biguints(one: BigUInt, two: BigUInt) -> None: proto 2 0 - // stubs/biguint.py:17 + // stubs/biguint.py:18 // assert one < two frame_dig -2 frame_dig -1 b< assert - // stubs/biguint.py:18 + // stubs/biguint.py:19 // assert one <= two frame_dig -2 frame_dig -1 b<= assert - // stubs/biguint.py:19 + // stubs/biguint.py:20 // assert one == one # noqa: PLR0124 frame_dig -2 frame_dig -2 b== assert - // stubs/biguint.py:20 + // stubs/biguint.py:21 // assert two > one frame_dig -1 frame_dig -2 b> assert - // stubs/biguint.py:21 + // stubs/biguint.py:22 // assert two >= one frame_dig -1 frame_dig -2 b>= assert - // stubs/biguint.py:22 + // stubs/biguint.py:23 // assert one != two frame_dig -2 frame_dig -1 @@ -69,11 +69,11 @@ compare_biguints: // test_cases.stubs.biguint.compare_biguint_vs_uint64(one: bytes, two: uint64) -> void: compare_biguint_vs_uint64: - // stubs/biguint.py:25-26 + // stubs/biguint.py:26-27 // @subroutine // def compare_biguint_vs_uint64(one: BigUInt, two: UInt64) -> None: proto 2 0 - // stubs/biguint.py:27 + // stubs/biguint.py:28 // assert one < two frame_dig -1 itob @@ -81,7 +81,7 @@ compare_biguint_vs_uint64: swap b< assert - // stubs/biguint.py:28 + // stubs/biguint.py:29 // assert one <= two frame_dig -1 itob @@ -89,13 +89,13 @@ compare_biguint_vs_uint64: swap b<= assert - // stubs/biguint.py:29 + // stubs/biguint.py:30 // assert one == one # noqa: PLR0124 frame_dig -2 frame_dig -2 b== assert - // stubs/biguint.py:30 + // stubs/biguint.py:31 // assert two > one frame_dig -1 itob @@ -103,7 +103,7 @@ compare_biguint_vs_uint64: swap b< assert - // stubs/biguint.py:31 + // stubs/biguint.py:32 // assert two >= one frame_dig -1 itob @@ -111,7 +111,7 @@ compare_biguint_vs_uint64: swap b<= assert - // stubs/biguint.py:32 + // stubs/biguint.py:33 // assert one != two frame_dig -1 itob @@ -124,11 +124,11 @@ compare_biguint_vs_uint64: // test_cases.stubs.biguint.compare_uint64_vs_biguint(one: uint64, two: bytes) -> void: compare_uint64_vs_biguint: - // stubs/biguint.py:35-36 + // stubs/biguint.py:36-37 // @subroutine // def compare_uint64_vs_biguint(one: UInt64, two: BigUInt) -> None: proto 2 0 - // stubs/biguint.py:37 + // stubs/biguint.py:38 // assert one < two frame_dig -2 itob @@ -136,7 +136,7 @@ compare_uint64_vs_biguint: swap b> assert - // stubs/biguint.py:38 + // stubs/biguint.py:39 // assert one <= two frame_dig -2 itob @@ -144,13 +144,13 @@ compare_uint64_vs_biguint: swap b>= assert - // stubs/biguint.py:39 + // stubs/biguint.py:40 // assert one == one # noqa: PLR0124 frame_dig -2 frame_dig -2 == assert - // stubs/biguint.py:40 + // stubs/biguint.py:41 // assert two > one frame_dig -2 itob @@ -158,7 +158,7 @@ compare_uint64_vs_biguint: swap b> assert - // stubs/biguint.py:41 + // stubs/biguint.py:42 // assert two >= one frame_dig -2 itob @@ -166,7 +166,7 @@ compare_uint64_vs_biguint: swap b>= assert - // stubs/biguint.py:42 + // stubs/biguint.py:43 // assert one != two frame_dig -2 itob diff --git a/test_cases/stubs/out_unoptimized/BigUIntContract.clear.teal b/test_cases/stubs/out_unoptimized/BigUIntContract.clear.teal index 4c55c60059..dda43598be 100644 --- a/test_cases/stubs/out_unoptimized/BigUIntContract.clear.teal +++ b/test_cases/stubs/out_unoptimized/BigUIntContract.clear.teal @@ -2,6 +2,12 @@ test_cases.stubs.biguint.BigUIntContract.clear_state_program: // stubs/biguint.py:12 + // assert BigUInt() == 0 + byte 0x + byte 0x + b== + assert + // stubs/biguint.py:13 // return True int 1 return diff --git a/test_cases/stubs/out_unoptimized/BigUIntContract.destructured.ir b/test_cases/stubs/out_unoptimized/BigUIntContract.destructured.ir index 0f4d9345bf..4df162c63a 100644 --- a/test_cases/stubs/out_unoptimized/BigUIntContract.destructured.ir +++ b/test_cases/stubs/out_unoptimized/BigUIntContract.destructured.ir @@ -8,7 +8,7 @@ contract test_cases.stubs.biguint.BigUIntContract: return 1u subroutine test_cases.stubs.biguint.compare_biguints(one: bytes, two: bytes) -> void: - block@0: // L15 + block@0: // L16 let tmp%0#0: uint64 = (b< one#0 two#0) (assert tmp%0#0) let tmp%1#0: uint64 = (b<= one#0 two#0) @@ -24,7 +24,7 @@ contract test_cases.stubs.biguint.BigUIntContract: return subroutine test_cases.stubs.biguint.compare_biguint_vs_uint64(one: bytes, two: uint64) -> void: - block@0: // L25 + block@0: // L26 let tmp%0#0: bytes = (itob two#0) let tmp%1#0: uint64 = (b< one#0 tmp%0#0) (assert tmp%1#0) @@ -45,7 +45,7 @@ contract test_cases.stubs.biguint.BigUIntContract: return subroutine test_cases.stubs.biguint.compare_uint64_vs_biguint(one: uint64, two: bytes) -> void: - block@0: // L35 + block@0: // L36 let tmp%0#0: bytes = (itob one#0) let tmp%1#0: uint64 = (b> two#0 tmp%0#0) (assert tmp%1#0) @@ -68,4 +68,6 @@ contract test_cases.stubs.biguint.BigUIntContract: program clear-state: subroutine test_cases.stubs.biguint.BigUIntContract.clear_state_program() -> uint64: block@0: // L11 + let tmp%0#0: uint64 = (b== 0b 0b) + (assert tmp%0#0) return 1u \ No newline at end of file diff --git a/test_cases/stubs/puya.log b/test_cases/stubs/puya.log index 70c42faae5..c14060c815 100644 --- a/test_cases/stubs/puya.log +++ b/test_cases/stubs/puya.log @@ -285,12 +285,12 @@ debug: Deleting Phi assignment: let sequence#1: bytes = φ(sequence#0 <- block@0 debug: Replaced trivial Phi node: let sequence#1: bytes = φ(sequence#0 <- block@0, sequence#1 <- block@4) (sequence#1) with sequence#0 in current definition for 3 blocks debug: Sealing block@None: // after_while_L11 debug: Terminated block@5: // after_while_L11 -debug: Sealing block@0: // L15 -debug: Terminated block@0: // L15 -debug: Sealing block@0: // L25 -debug: Terminated block@0: // L25 -debug: Sealing block@0: // L35 -debug: Terminated block@0: // L35 +debug: Sealing block@0: // L16 +debug: Terminated block@0: // L16 +debug: Sealing block@0: // L26 +debug: Terminated block@0: // L26 +debug: Sealing block@0: // L36 +debug: Terminated block@0: // L36 debug: Sealing block@0: // L5 debug: Terminated block@0: // L5 debug: Sealing block@0: // L11 @@ -1068,14 +1068,14 @@ debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination -debug: Replacing redundant declaration let tmp%2#0: bytes = (itob two#0) with copy of existing registers [Register(atype=bytes, name='tmp%0', version=0, source_location=stubs/biguint.py:27:11)] -debug: Replacing redundant declaration let tmp%5#0: bytes = (itob two#0) with copy of existing registers [Register(atype=bytes, name='tmp%0', version=0, source_location=stubs/biguint.py:27:11)] -debug: Replacing redundant declaration let tmp%7#0: bytes = (itob two#0) with copy of existing registers [Register(atype=bytes, name='tmp%0', version=0, source_location=stubs/biguint.py:27:11)] -debug: Replacing redundant declaration let tmp%9#0: bytes = (itob two#0) with copy of existing registers [Register(atype=bytes, name='tmp%0', version=0, source_location=stubs/biguint.py:27:11)] +debug: Replacing redundant declaration let tmp%2#0: bytes = (itob two#0) with copy of existing registers [Register(atype=bytes, name='tmp%0', version=0, source_location=stubs/biguint.py:28:11)] +debug: Replacing redundant declaration let tmp%5#0: bytes = (itob two#0) with copy of existing registers [Register(atype=bytes, name='tmp%0', version=0, source_location=stubs/biguint.py:28:11)] +debug: Replacing redundant declaration let tmp%7#0: bytes = (itob two#0) with copy of existing registers [Register(atype=bytes, name='tmp%0', version=0, source_location=stubs/biguint.py:28:11)] +debug: Replacing redundant declaration let tmp%9#0: bytes = (itob two#0) with copy of existing registers [Register(atype=bytes, name='tmp%0', version=0, source_location=stubs/biguint.py:28:11)] debug: Found equivalence set: tmp%0#0, tmp%2#0, tmp%5#0, tmp%7#0, tmp%9#0 debug: Replacing {tmp%2#0, tmp%5#0, tmp%7#0, tmp%9#0} with tmp%0#0 made 4 modifications -debug: Replacing redundant declaration let tmp%6#0: uint64 = (b< one#0 tmp%0#0) with copy of existing registers [Register(atype=uint64, name='tmp%1', version=0, source_location=stubs/biguint.py:27:11)] -debug: Replacing redundant declaration let tmp%8#0: uint64 = (b<= one#0 tmp%0#0) with copy of existing registers [Register(atype=uint64, name='tmp%3', version=0, source_location=stubs/biguint.py:28:11)] +debug: Replacing redundant declaration let tmp%6#0: uint64 = (b< one#0 tmp%0#0) with copy of existing registers [Register(atype=uint64, name='tmp%1', version=0, source_location=stubs/biguint.py:28:11)] +debug: Replacing redundant declaration let tmp%8#0: uint64 = (b<= one#0 tmp%0#0) with copy of existing registers [Register(atype=uint64, name='tmp%3', version=0, source_location=stubs/biguint.py:29:11)] debug: Found equivalence set: tmp%1#0, tmp%6#0 debug: Replacing {tmp%6#0} with tmp%1#0 made 1 modifications debug: Found equivalence set: tmp%3#0, tmp%8#0 @@ -1094,14 +1094,14 @@ debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination -debug: Replacing redundant declaration let tmp%2#0: bytes = (itob one#0) with copy of existing registers [Register(atype=bytes, name='tmp%0', version=0, source_location=stubs/biguint.py:37:11)] -debug: Replacing redundant declaration let tmp%5#0: bytes = (itob one#0) with copy of existing registers [Register(atype=bytes, name='tmp%0', version=0, source_location=stubs/biguint.py:37:11)] -debug: Replacing redundant declaration let tmp%7#0: bytes = (itob one#0) with copy of existing registers [Register(atype=bytes, name='tmp%0', version=0, source_location=stubs/biguint.py:37:11)] -debug: Replacing redundant declaration let tmp%9#0: bytes = (itob one#0) with copy of existing registers [Register(atype=bytes, name='tmp%0', version=0, source_location=stubs/biguint.py:37:11)] +debug: Replacing redundant declaration let tmp%2#0: bytes = (itob one#0) with copy of existing registers [Register(atype=bytes, name='tmp%0', version=0, source_location=stubs/biguint.py:38:11)] +debug: Replacing redundant declaration let tmp%5#0: bytes = (itob one#0) with copy of existing registers [Register(atype=bytes, name='tmp%0', version=0, source_location=stubs/biguint.py:38:11)] +debug: Replacing redundant declaration let tmp%7#0: bytes = (itob one#0) with copy of existing registers [Register(atype=bytes, name='tmp%0', version=0, source_location=stubs/biguint.py:38:11)] +debug: Replacing redundant declaration let tmp%9#0: bytes = (itob one#0) with copy of existing registers [Register(atype=bytes, name='tmp%0', version=0, source_location=stubs/biguint.py:38:11)] debug: Found equivalence set: tmp%0#0, tmp%2#0, tmp%5#0, tmp%7#0, tmp%9#0 debug: Replacing {tmp%2#0, tmp%5#0, tmp%7#0, tmp%9#0} with tmp%0#0 made 4 modifications -debug: Replacing redundant declaration let tmp%6#0: uint64 = (b> two#0 tmp%0#0) with copy of existing registers [Register(atype=uint64, name='tmp%1', version=0, source_location=stubs/biguint.py:37:11)] -debug: Replacing redundant declaration let tmp%8#0: uint64 = (b>= two#0 tmp%0#0) with copy of existing registers [Register(atype=uint64, name='tmp%3', version=0, source_location=stubs/biguint.py:38:11)] +debug: Replacing redundant declaration let tmp%6#0: uint64 = (b> two#0 tmp%0#0) with copy of existing registers [Register(atype=uint64, name='tmp%1', version=0, source_location=stubs/biguint.py:38:11)] +debug: Replacing redundant declaration let tmp%8#0: uint64 = (b>= two#0 tmp%0#0) with copy of existing registers [Register(atype=uint64, name='tmp%3', version=0, source_location=stubs/biguint.py:39:11)] debug: Found equivalence set: tmp%1#0, tmp%6#0 debug: Replacing {tmp%6#0} with tmp%1#0 made 1 modifications debug: Found equivalence set: tmp%3#0, tmp%8#0 @@ -1113,6 +1113,7 @@ debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier +debug: Simplified (b== 0b 0b) to 1u debug: Optimizer: Remove Unused Variables debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump @@ -1169,6 +1170,7 @@ debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier debug: Optimizer: Remove Unused Variables +debug: Removing unused variable tmp%0#0 debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks diff --git a/test_cases/undefined_phi_args/out/Baddie.approval.mir b/test_cases/undefined_phi_args/out/Baddie.approval.mir index a314f10ea7..256b3b4f49 100644 --- a/test_cases/undefined_phi_args/out/Baddie.approval.mir +++ b/test_cases/undefined_phi_args/out/Baddie.approval.mir @@ -273,7 +273,7 @@ test_bytes_undefined_block@0: // Implicit fall through to test_bytes_undefined_if_body@1 // (𝕡) x#0,y#0 | (𝕗) a#0 | if x: undefined_phi_args/baddie.py:54 test_bytes_undefined_if_body@1: - byte 0x07 // (𝕡) x#0,y#0 | (𝕗) a#0 | 0x07 7 undefined_phi_args/baddie.py:55 + byte 0x07 // (𝕡) x#0,y#0 | (𝕗) a#0 | 0x07 BigUInt(7) undefined_phi_args/baddie.py:55 frame_bury 0 // store a#0 to f-stack (𝕡) x#0,y#0 | (𝕗) a#0 | a = BigUInt(7) undefined_phi_args/baddie.py:55 // Implicit fall through to test_bytes_undefined_after_if_else@2 // (𝕡) x#0,y#0 | (𝕗) a#0 | @@ -325,7 +325,7 @@ test_mixed_undefined_if_body@6: itob // (𝕡) x#0,y#0 | (𝕗) a#0 | {itob} BigUInt(a) undefined_phi_args/baddie.py:76 // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) x#0,y#0 | (𝕗) a#0 | tmp%0#0 BigUInt(a) undefined_phi_args/baddie.py:76 // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) x#0,y#0 | (𝕗) a#0 | tmp%0#0 c = BigUInt(a) + BigUInt(1) undefined_phi_args/baddie.py:76 - byte 0x01 // (𝕡) x#0,y#0 | (𝕗) a#0 | tmp%0#0,0x01 1 undefined_phi_args/baddie.py:76 + byte 0x01 // (𝕡) x#0,y#0 | (𝕗) a#0 | tmp%0#0,0x01 BigUInt(1) undefined_phi_args/baddie.py:76 b+ // (𝕡) x#0,y#0 | (𝕗) a#0 | {b+} BigUInt(a) + BigUInt(1) undefined_phi_args/baddie.py:76 // virtual: store c#0 to x-stack (no copy) (𝕡) x#0,y#0 | (𝕗) a#0 | (𝕏) c#0 | c = BigUInt(a) + BigUInt(1) undefined_phi_args/baddie.py:76 b test_mixed_undefined_after_if_else@8 // (𝕡) x#0,y#0 | (𝕗) a#0 | (𝕏) c#0 | c#0