This does not work:
defrequire(requirement: bool, error_message: str):
ifnotrequirement:
raiseException("ASR verify failed: "+error_message)
defverify(asr: Transactions):
t: Transactionfortinasr.transactions:
require(len(t.items) >=2, "len(items) >= 2")
total=0foritemint.items:
require(item.account_idx>=0anditem.account_idx<len(asr.accounts),
"0 <= account_idx < len(accounts)")
require(item.commodity=="$", 'commodity == "$"')
total+=item.amountrequire(total==0, "sum(items[:].amount) == 0")Here are the workarounds that make it work today:
defverify(asr: Transactions):
i: i32foriinrange(len(asr.transactions)):
t: Transaction=asr.transactions[i]
require(len(t.items) >=2, "len(items) >= 2")
total: i64=i64(0)
j: i32forjinrange(len(t.items)):
item: TransactionItem=t.items[j]
require(item.account_idx>=i64(0)
anditem.account_idx<i64(len(asr.accounts)),
"0 <= account_idx < len(accounts)")
require(item.commodity=="$", 'commodity == "$"')
total+=item.amountrequire(total==i64(0), "sum(items[:].amount) == 0")
There are several issues:
- Allowing the loops
for t in asr.transactions and for item in t.items - Allowing to declare
t: Translation without initializing it, since it is initialized in the loop
This does not work:
Here are the workarounds that make it work today:
There are several issues:
for t in asr.transactionsandfor item in t.itemst: Translationwithout initializing it, since it is initialized in the loop