diff --git a/.claude/board/entries/2026-11-11-cg5-defuse-probe.md b/.claude/board/entries/2026-11-11-cg5-defuse-probe.md new file mode 100644 index 000000000..8b45439e7 --- /dev/null +++ b/.claude/board/entries/2026-11-11-cg5-defuse-probe.md @@ -0,0 +1,21 @@ +# 2026-11-11 — CG-5: def-use rows classify division sites; loop nesting does not + +**Status:** MEASURED (probe). `.claude/probes/2026-11-11-cg5-defuse/`, `crates/cg-defuse-probe`. Board: EXO-237. + +Def-use rows from Charon LLBC (783 rows, 16 `Div`/`Rem` sites in `foundry-parity-lab`) were closed +three ways: egglog in proofs mode, a plain fixpoint, and a source-only scan. All three give the +answer fixed beforehand on EXO-237: `method.rs:58` and `arm_b.rs:245` are scalar thresholds, +`arm_a.rs:75` and `oracle.rs:62` are per-element quotients. egglog and the fixpoint agree on all 63 +sites of the four fixtures. + +**Finding:** loop nesting of the LLBC statement is wrong on `arm_b.rs:245` (Charon copies the tail +of `cook_ops` into the loop's exit paths) and on mutant m3 (scalar division moved into the loop). +Operand provenance is right on both. + +Mutants: division by the loop element flips the class; removing the division removes the site. +24 disable runs, 24 red. + +Cost, reported and not a gate: egglog 1.65 to 2.10 s cold per crate with proofs; plain fixpoint +about 1 ms. egglog adds the proof, not the answer. + +OPEN: def-use rows as a store row kind (CG-3 format decision, EXO-235); interprocedural provenance. diff --git a/.claude/board/entries/README.md b/.claude/board/entries/README.md index ce2923250..af8d1dca6 100644 --- a/.claude/board/entries/README.md +++ b/.claude/board/entries/README.md @@ -25,12 +25,13 @@ index row, (3) no duplicate entry id. Checks 1 and 2 are deliberately opposite directions; the stranding this convention prevents shows up in exactly one of them, never both. -599 entries, 2026-08-06 .. 2026-11-11. +600 entries, 2026-08-06 .. 2026-11-11. | date | entry id | finding | file | |---|---|---|---| | 2026-11-11 | `codegraph-recon-2` | | [2026-11-11-codegraph-recon-2.md](2026-11-11-codegraph-recon-2.md) | | 2026-11-11 | `codegraph-recon-1` | | [2026-11-11-codegraph-recon-1.md](2026-11-11-codegraph-recon-1.md) | +| 2026-11-11 | `cg5-defuse-probe` | | [2026-11-11-cg5-defuse-probe.md](2026-11-11-cg5-defuse-probe.md) | | 2026-11-11 | `cg-beh-1` | | [2026-11-11-cg-beh-1.md](2026-11-11-cg-beh-1.md) | | 2026-11-10 | `lab-resolve-borrow-all` | | [2026-11-10-lab-resolve-borrow-all.md](2026-11-10-lab-resolve-borrow-all.md) | | 2026-11-10 | `int8-direct-packed-b` | | [2026-11-10-int8-direct-packed-b.md](2026-11-10-int8-direct-packed-b.md) | diff --git a/.claude/probes/2026-11-11-cg5-defuse/REPORT.md b/.claude/probes/2026-11-11-cg5-defuse/REPORT.md new file mode 100644 index 000000000..c8b06499d --- /dev/null +++ b/.claude/probes/2026-11-11-cg5-defuse/REPORT.md @@ -0,0 +1,115 @@ +# CG-5 probe: def-use rows separate a scalar threshold from a per-element quotient + +Slice: CG-5 (Linear EXO-237), after CG-8 (EXO-241). Ruling: D-CODEGRAPH-BOARD-RULING-2 allowed one +bounded, read-only probe on the ndarray PR 422 case. Status: MEASURED. Nothing here is a production +path; no row format, opcode, lowering or rewrite is added. + +## Question + +`foundry-parity-lab` has four `/` sites. Two build one threshold before any row is read +(`(q + per_staff - 1) / per_staff`); two divide once per recipe ingredient (`v / d`). The effects rows +of CG-8 find all four and say nothing about which kind each is. Does a def-use derivation tell them +apart, with a proof, and does it move when the code moves? + +The expected answer was posted on EXO-237 before any derivation existed: + +| site | expected | +|---|---| +| `src/method.rs:58` (`can_cook_guard`) | scalar threshold | +| `src/arm_b.rs:245` (`cook_ops`) | scalar threshold | +| `src/arm_a.rs:75` (`can_cook`) | per-element quotient | +| `src/oracle.rs:62` (`can_cook`) | per-element quotient | + +## Method + +1. `charon cargo --no-dedup-serialized-ast -- --lib` on the crate (Charon 0.1.297). +2. `extract_defuse.py` reads the LLBC and writes rows for every function holding a `Div` or `Rem`: + `ARG`, `DEF` (one per defining statement, with the locals it reads), `ELEM` (result of an iterator + `next` call inside a loop), `INDEX` (value read through an index projection), `SITE` (the operator, + its file, line, loop depth and two operands). The rows are flow-insensitive. 783 rows, 16 sites + (5 `Div` statements at 4 source lines, 11 `Rem`). +3. `crates/cg-defuse-probe` answers each site three ways: + - **egglog** (`derive`): the rows as terms, eight rules, proofs mode, stepped to a fixpoint. + A class is reported only with the proof egglog checked. + - **plain fixpoint** (`fixpoint`): the same two closures as Rust loops. Shares the rows only. + - **source scan** (`source_class`): reads the source line and the open `for` headers. Shares + neither rows nor rules. + Loop nesting of the statement (`nesting_class`) is the cheap comparator. + +Rules, per function: a site is per-element when an operand depends on an element source through any +chain of definitions. A local is scalar when it is an argument, or is not an element source, has +exactly one definition, and that definition reads only scalar locals. A site is a scalar threshold +when both operands are scalar or literals. Everything else is unknown. + +## Result + +All three arms give the expected table. From `cargo run --release --example report`: + +| site | egglog | plain fixpoint | source scan | loop nesting | +|---|---|---|---|---| +| `method.rs:58` | scalar | scalar | scalar | scalar | +| `arm_b.rs:245` (two LLBC copies) | scalar | scalar | scalar | **per-element (wrong)** | +| `arm_a.rs:75` | per-element | per-element | per-element | per-element | +| `oracle.rs:62` | per-element | per-element | per-element | per-element | + +- Loop nesting is wrong on one of four real sites. `arm_b.rs:245` stands after the source loop, and + Charon copies the tail of `cook_ops` into the loop's exit paths, so the statement appears twice + inside a `Loop` node. +- Of the 11 `Rem` sites in `fixture.rs`, 8 are scalar and 3 are unknown: their divisor is a global + place, which the rules do not classify. Unknown carries no proof. +- egglog and the plain fixpoint agree on all 63 sites of the four fixtures. +- The proof for `method.rs:58` is 62,654 bytes; for `arm_a.rs:75`, 2,838 bytes. + +## Mutation control + +`mutate.py` writes three variants of `src/method.rs`; each is run through Charon again. + +| mutant | change | egglog | source scan | loop nesting | +|---|---|---|---|---| +| m1 | division moved into the loop, divisor is the element `d` | per-element | per-element | per-element | +| m2 | division removed | no site (16 → 15 sites) | no operator on the line | — | +| m3 | division moved into the loop, operands unchanged | scalar | scalar | **per-element (wrong)** | + +m1 flips the class, m2 removes the row, and m3 shows the classes follow the operands and not the +position of the statement. + +## Cost (reported, not a gate) + +One cold derivation over 783 rows, release build: egglog 1.65 to 2.10 s (1,654,062 to 2,101,388 µs, +26 steps), including the proofs of all sites. The plain fixpoint over the same rows: 912 to 1,190 µs. +The derivation runs once per program and never per query. + +## What this does and does not show + +- It shows that operand provenance from LLBC decides this case where loop nesting does not, and that + egglog can carry the closure with a checked proof per site. +- The plain fixpoint gets the same classes about 1,800 times faster. What egglog adds is the proof, + not the answer. Whether a proof per site is worth two seconds per crate is open. +- The source scan also gets all seven cases right. It is a line scan with `for` headers; it would + miss a divisor that reaches the line through a helper or a renamed binding. No such case is in the + crate, so that limit is not measured here. +- "Per element" means per item of the loop the operand comes from. In this crate that loop is over + recipe ingredients, not store rows. Dependence on the row argument is a different question and + was not asked. +- The rows are flow-insensitive and intraprocedural. A call result is scalar when its arguments are. + A value written through a `&mut` passed to a call counts as a second definition. +- One crate, four division sites, three mutants. + +## Open + +- Should def-use rows become a store row kind? That is the format decision of CG-3 (EXO-235) and is + not made here; the rows live in this probe's fixtures only. +- Interprocedural provenance (is the divisor `fixture.rs:105`'s `per_staff`?) needs field-level + def-use across the `recipe` call. Not attempted. + +## Reproduce + +``` +cd crates/cg-defuse-probe && cargo test --release # 18 tests +cargo run --release --example report -- tests/data/m0.defuse.tsv src/method.rs:58 +CHARON= .claude/probes/2026-11-11-cg5-defuse/regenerate.sh # rewrites tests/data +python3 .claude/probes/2026-11-11-cg5-defuse/disable_runs.py # 24 guards, receipt: 24 red +``` + +`regenerate.sh` was run after the fixtures were committed and changed no byte. The crate has its own +workspace root and no CI workflow. diff --git a/.claude/probes/2026-11-11-cg5-defuse/disable_runs.py b/.claude/probes/2026-11-11-cg5-defuse/disable_runs.py new file mode 100644 index 000000000..ff3e4f91a --- /dev/null +++ b/.claude/probes/2026-11-11-cg5-defuse/disable_runs.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 +"""Disable runs for crates/cg-defuse-probe/src/lib.rs. + +Each guard is patched out (the anchor must occur exactly once, or the run is reported as +ANCHOR-MISSING and counts as a failure), `cargo test --release` is run in the crate, and +the file is restored. A guard is load-bearing when its run is RED. + +Run from the repository root on a clean tree: python3 +Exit 0 only when every guard is RED. Writes the receipt next to this file. +""" +import re, subprocess, sys +from pathlib import Path + +CRATE = Path(__file__).resolve().parents[3] / "crates/cg-defuse-probe" +P = CRATE / "src/lib.rs" +RECEIPT = Path(__file__).with_name("disable_runs.receipt.tsv") +G = [ + ("egglog-flow-rule", "(rule ((= f (Flow a b)) (= (Elem a) (T)))\n ((union (Elem b) (T))) :ruleset defuse)\n", ""), + ("egglog-site-elem-lhs", "(rule ((= s (Site f n a b)) (= (Elem a) (T)))\n ((union (ClassOf f n) (PerElement))) :ruleset defuse)\n", ""), + ("egglog-site-elem-rhs", "(rule ((= s (Site f n a b)) (= (Elem b) (T)))\n ((union (ClassOf f n) (PerElement))) :ruleset defuse)\n", ""), + ("egglog-site-scalar-both", "(rule ((= s (Site f n a b)) (= (Scalar a) (T)) (= (Scalar b) (T)))", "(rule ((= s (Site f n a b)) (= (Scalar a) (T)))"), + ("egglog-all-scalar-head", "(rule ((= l (Cons v r)) (= (Scalar v) (T)) (= (AllScalar r) (T)))", "(rule ((= l (Cons v r)) (= (AllScalar r) (T)))"), + ("egglog-all-scalar-tail", "(rule ((= l (Cons v r)) (= (Scalar v) (T)) (= (AllScalar r) (T)))", "(rule ((= l (Cons v r)) (= (Scalar v) (T)))"), + ("egglog-const-scalar", "(union (Scalar (K)) (T))\n", ""), + ("encode-sole-def", " if defs.len() == 1\n && !facts.args.contains(&(f.clone(), *l))", " if !defs.is_empty()\n && !facts.args.contains(&(f.clone(), *l))"), + ("encode-elem-not-scalar", " && !facts.elems.contains(&(f.clone(), *l))\n && let Some(d)", " && let Some(d)"), + ("encode-global-operand", " Operand::Global => None,\n }\n}\n\n/// The rows as egglog facts.", " Operand::Global => Some(\"(K)\".to_string()),\n }\n}\n\n/// The rows as egglog facts."), + ("derive-conflict", " if prove(&mut egraph, \"(= (PerElement) (ScalarThreshold))\").is_some() {", " if false {"), + ("derive-fuel", " if iterations == fuel {", " if false {"), + ("fixpoint-flow", ".any(|d| d.2.iter().any(|s| elem.contains(&(func.clone(), *s))))", ".any(|d| d.2.iter().any(|s| false && elem.contains(&(func.clone(), *s))))"), + ("fixpoint-sole-def", " && defs.len() == 1\n && defs\n .iter()\n .all(", " && defs\n .iter()\n .all("), + ("fixpoint-global", " Operand::Global => false,", " Operand::Global => true,"), + ("parse-version", " Some((_, \"#version 1\")) => {}\n _ => return Err(FactsRefusal::Version),", " Some(_) => {}\n _ => return Err(FactsRefusal::Version),"), + ("parse-unknown-kind", " _ => return Err(FactsRefusal::Row(n)),", " _ => {}"), + ("parse-short-site", " need(9)?;\n", ""), + ("parse-index-is-elem", " \"ELEM\" | \"INDEX\" => {", " \"ELEM\" => {\n facts.elems.insert((func, num(f[2], n)?));\n }\n \"INDEX\" if false => {"), + ("source-bound-names", "used.iter().any(|w| bound.contains(w))", "used.iter().any(|w| false && bound.contains(w))"), + ("source-loop-close", " if open.last().is_some_and(|(d, _)| *d == depth) {\n open.pop();\n }\n", ""), + ("source-index", " if target.contains('[') || ", " if "), + ("source-comment", " let code = |l: &str| l.split(\"//\").next().unwrap_or(\"\").to_string();", " let code = |l: &str| l.to_string();"), + ("source-no-operator", " if !target.contains('/') && !target.contains('%') {\n return None;\n }\n", ""), +] + +def main(): + if subprocess.run(["git", "diff", "--quiet", "--", str(P)]).returncode != 0: + sys.exit(f"{P} has local changes; commit first (the restore would not be exact)") + orig = P.read_text() + bad = 0 + lines = ["guard\tresult\tfailing tests"] + try: + for name, old, new in G: + if orig.count(old) != 1: + lines.append(f"{name}\tANCHOR-MISSING({orig.count(old)})\t") + bad += 1 + continue + P.write_text(orig.replace(old, new)) + out = subprocess.run(["cargo", "test", "--release"], cwd=CRATE, + capture_output=True, text=True) + text = out.stdout + out.stderr + failed = sorted(set(re.findall(r"^test (\S+) \.\.\. FAILED", text, re.M))) + if out.returncode == 0: + res = "GREEN"; bad += 1 + elif failed: + res = "RED" + else: + res = "RED(build)" if "error" in text else "RED(?)" + bad += 1 + lines.append(f"{name}\t{res}\t{','.join(failed)}") + print(lines[-1], flush=True) + finally: + P.write_text(orig) + RECEIPT.write_text("\n".join(lines) + f"\n# {len(G)} guards, {bad} not red\n") + sys.exit(1 if bad else 0) + +main() diff --git a/.claude/probes/2026-11-11-cg5-defuse/disable_runs.receipt.tsv b/.claude/probes/2026-11-11-cg5-defuse/disable_runs.receipt.tsv new file mode 100644 index 000000000..1121982d4 --- /dev/null +++ b/.claude/probes/2026-11-11-cg5-defuse/disable_runs.receipt.tsv @@ -0,0 +1,26 @@ +guard result failing tests +egglog-flow-rule RED a_division_by_the_loop_element_flips_to_per_element_in_every_arm,a_scalar_division_inside_the_loop_stays_scalar_where_nesting_gets_it_wrong,dependence_on_an_element_is_followed_through_a_chain,egglog_and_the_plain_fixpoint_agree_on_every_site_of_every_fixture,every_classified_site_carries_a_proof_and_unknown_carries_none,removing_the_division_removes_the_site,the_derivation_gives_the_preregistered_answer +egglog-site-elem-lhs RED a_site_that_would_be_both_is_refused,a_value_read_through_an_index_is_an_element_source +egglog-site-elem-rhs RED dependence_on_an_element_is_followed_through_a_chain +egglog-site-scalar-both RED dependence_on_an_element_is_followed_through_a_chain,egglog_and_the_plain_fixpoint_agree_on_every_site_of_every_fixture,every_classified_site_carries_a_proof_and_unknown_carries_none +egglog-all-scalar-head RED a_division_by_the_loop_element_flips_to_per_element_in_every_arm,a_scalar_division_inside_the_loop_stays_scalar_where_nesting_gets_it_wrong,dependence_on_an_element_is_followed_through_a_chain,egglog_and_the_plain_fixpoint_agree_on_every_site_of_every_fixture,every_classified_site_carries_a_proof_and_unknown_carries_none,one_non_scalar_source_anywhere_in_a_definition_blocks_scalar,removing_the_division_removes_the_site,the_derivation_gives_the_preregistered_answer +egglog-all-scalar-tail RED one_non_scalar_source_anywhere_in_a_definition_blocks_scalar +egglog-const-scalar RED a_site_that_would_be_both_is_refused,a_statement_copied_by_charon_is_one_definition,egglog_and_the_plain_fixpoint_agree_on_every_site_of_every_fixture,every_classified_site_carries_a_proof_and_unknown_carries_none +encode-sole-def RED a_local_with_two_different_definitions_is_not_scalar,one_non_scalar_source_anywhere_in_a_definition_blocks_scalar +encode-elem-not-scalar RED a_value_read_through_an_index_is_an_element_source,dependence_on_an_element_is_followed_through_a_chain +encode-global-operand RED egglog_and_the_plain_fixpoint_agree_on_every_site_of_every_fixture,every_classified_site_carries_a_proof_and_unknown_carries_none +derive-conflict RED a_site_that_would_be_both_is_refused +derive-fuel RED running_out_of_fuel_is_a_refusal_not_a_partial_answer +fixpoint-flow RED dependence_on_an_element_is_followed_through_a_chain,egglog_and_the_plain_fixpoint_agree_on_every_site_of_every_fixture +fixpoint-sole-def RED a_local_with_two_different_definitions_is_not_scalar,one_non_scalar_source_anywhere_in_a_definition_blocks_scalar +fixpoint-global RED egglog_and_the_plain_fixpoint_agree_on_every_site_of_every_fixture +parse-version RED malformed_rows_are_refused +parse-unknown-kind RED malformed_rows_are_refused +parse-short-site RED malformed_rows_are_refused +parse-index-is-elem RED a_value_read_through_an_index_is_an_element_source +source-bound-names RED a_division_by_the_loop_element_flips_to_per_element_in_every_arm,the_source_scan_agrees_on_the_four_sites_without_reading_any_row,the_source_scan_ignores_a_loop_that_has_closed +source-loop-close RED the_source_scan_ignores_a_loop_that_has_closed +source-index RED the_source_scan_treats_an_indexed_read_as_per_element +source-comment RED the_source_scan_treats_an_indexed_read_as_per_element +source-no-operator RED removing_the_division_removes_the_site +# 24 guards, 0 not red diff --git a/.claude/probes/2026-11-11-cg5-defuse/extract_defuse.py b/.claude/probes/2026-11-11-cg5-defuse/extract_defuse.py new file mode 100644 index 000000000..51d44ac46 --- /dev/null +++ b/.claude/probes/2026-11-11-cg5-defuse/extract_defuse.py @@ -0,0 +1,188 @@ +#!/usr/bin/env python3 +"""LLBC -> def-use rows for every function that holds a Div or Rem. + +Usage: extract_defuse.py + +Rows (tab separated, one per fact), per function `fn`: + ARG fn local name + DEF fn local stmt kind line loop_depth src,src,... (one row per defining statement) + ELEM fn local stmt callee (dest of a call to an iterator `next`) + INDEX fn local stmt (def reads through an index projection) + SITE fn stmt op file line loop_depth lhs rhs (operands: local id or `const`) +`kind` is assign | call | mutcall (a local reached through a `&mut` passed to a call). +Flow-insensitive: a local with two DEF rows has two definitions. +""" +import json, sys + +def name_of(f): + out = [] + for seg in f['item_meta']['name']: + if 'Ident' in seg: + out.append(seg['Ident'][0]) + else: + out.append('{impl}') + return '::'.join(out) + +def span(st): + sp = st['span']; sp = sp.get('Untagged', sp) + return sp['data'] + +def base_local(place): + k = place['kind'] + while 'Projection' in k: + k = k['Projection'][0]['kind'] + return k.get('Local') + +def place_locals(place, acc, idx): + """Locals a place READ depends on: its base and any index operand.""" + k = place['kind'] + while 'Projection' in k: + inner, elem = k['Projection'] + if isinstance(elem, dict) and ('Index' in elem or 'Subslice' in elem): + idx.append(True) + collect(elem, acc, idx) + k = inner['kind'] + if 'Local' in k: + acc.add(k['Local']) + +def collect(o, acc, idx): + """Every local read anywhere inside an rvalue / operand tree.""" + if isinstance(o, dict): + if 'kind' in o and 'ty' in o and isinstance(o['kind'], dict) and ( + 'Local' in o['kind'] or 'Projection' in o['kind']): + place_locals(o, acc, idx) + return + for v in o.values(): + collect(v, acc, idx) + elif isinstance(o, list): + for v in o: + collect(v, acc, idx) + +def operand_id(op): + for tag in ('Copy', 'Move'): + if tag in op: + b = base_local(op[tag]) + return 'global' if b is None else str(b) + return 'const' + +def find_binop(o): + if isinstance(o, dict): + if 'BinaryOp' in o: + return o['BinaryOp'] + for v in o.values(): + r = find_binop(v) + if r: return r + elif isinstance(o, list): + for v in o: + r = find_binop(v) + if r: return r + return None + +def blocks_in(o): + """Nested blocks of a statement kind payload, with whether a Loop was crossed.""" + if isinstance(o, dict): + if 'statements' in o and isinstance(o['statements'], list): + yield o + return + for v in o.values(): + yield from blocks_in(v) + elif isinstance(o, list): + for v in o: + yield from blocks_in(v) + +def main(): + d = json.load(open(sys.argv[1])) + t = d['translated'] + fd = t['fun_decls'] + files = t['files'] + rows = [] + for f in fd: + if not f or not isinstance(f.get('body'), dict) or 'Structured' not in f['body']: + continue + s = f['body']['Structured'] + if not any(k in json.dumps(s['body']) for k in ('"Div"', '"Rem"')): + continue + fn = name_of(f) + local_rows = [] + nargs = s['locals']['arg_count'] + for l in s['locals']['locals']: + if 1 <= l['index'] <= nargs: + local_rows.append(('ARG', fn, l['index'], l.get('name') or '_')) + mutref = {} # ref local -> borrowed local + counter = [0] + def walk(block, depth): + for st in block['statements']: + k = st['kind'] + counter[0] += 1 + sid = counter[0] + if isinstance(k, str): + continue + (tag, val), = k.items() + line = span(st)['beg']['line'] + if tag == 'Assign': + place, rv = val + dest = base_local(place) + acc, idx = set(), [] + collect(rv, acc, idx) + if 'Projection' in place['kind']: + # a write through a projection keeps the old value too + ps, _ = set(), [] + place_locals(place, ps, _) + acc |= ps + local_rows.append(('DEF', fn, dest, sid, 'assign', line, depth, + ','.join(map(str, sorted(acc))) or '-')) + if idx: + local_rows.append(('INDEX', fn, dest, sid)) + if isinstance(rv, dict) and 'Ref' in rv: + r = rv['Ref'] + if 'Mut' in json.dumps(r.get('kind', r))[:40]: + b = base_local(r['place']) + if b is not None: + mutref[dest] = b + bo = find_binop(rv) + if bo: + op = bo[0] + opname = op if isinstance(op, str) else next(iter(op)) + if opname in ('Div', 'Rem'): + fid = span(st)['file_id'] + local_rows.append(('SITE', fn, sid, opname, fid, line, depth, + operand_id(bo[1]), operand_id(bo[2]))) + elif tag == 'Call': + call = val['call'] if 'call' in val else val + dest = base_local(call['dest']) + acc, idx = set(), [] + collect(call['args'], acc, idx) + callee = '?' + try: + fid = call['func']['Regular']['kind']['Fun'] + callee = name_of(fd[fid]) if isinstance(fid, int) and fd[fid] else str(fid) + except (KeyError, TypeError): + try: + callee = 'trait::' + json.dumps(call['func']['Regular']['kind'])[:0] + \ + str(call['func']['Regular']['kind']['Trait'][1]) + except (KeyError, TypeError): + pass + local_rows.append(('DEF', fn, dest, sid, 'call', line, depth, + ','.join(map(str, sorted(acc))) or '-')) + if callee.split('::')[-1] == 'next' and depth > 0: + local_rows.append(('ELEM', fn, dest, sid, callee)) + for a in sorted(acc): + if a in mutref: + local_rows.append(('DEF', fn, mutref[a], sid, 'mutcall', line, depth, + ','.join(map(str, sorted(acc))) or '-')) + else: + for b in blocks_in(val): + walk(b, depth + (1 if tag == 'Loop' else 0)) + walk(s['body'], 0) + rows.extend(local_rows) + with open(sys.argv[2], 'w') as out: + out.write('#version 1\n#schema kind\tfn\tfields\n') + for r in rows: + if r[0] == 'SITE': + r = list(r) + nm = files[r[4]]['name'] + r[4] = nm.get('Local') or nm.get('Virtual') or json.dumps(nm) + out.write('\t'.join(map(str, r)) + '\n') + print(len(rows), 'rows') + +main() diff --git a/.claude/probes/2026-11-11-cg5-defuse/mutate.py b/.claude/probes/2026-11-11-cg5-defuse/mutate.py new file mode 100644 index 000000000..95f9ffbd4 --- /dev/null +++ b/.claude/probes/2026-11-11-cg5-defuse/mutate.py @@ -0,0 +1,21 @@ +import sys +p='src/method.rs'; s=open(p).read() +LOOP=""" all.push(SetExpr::i32((STOCK0 + k) as u16, Cmp::Ge, d * q)); + } + // staff · per_staff ≥ q ⇔ staff ≥ ⌈q / per_staff⌉ for positive per_staff. + let staff = (q + r.per_staff - 1) / r.per_staff; +""" +HEAD=" for &(k, d) in &r.demand {\n all.push(SetExpr::Sym((KNOWN0 + k) as u32));" +DIV=" let staff = (q + r.per_staff - 1) / r.per_staff;\n" +m=sys.argv[1] +def rep(old,new): + global s + assert s.count(old)==1, old + s=s.replace(old,new) +if m=='m1': # division moved into the loop, per-element divisor + rep(LOOP, LOOP.split(' }\n')[0]+" staff = (q + d - 1) / d;\n }\n"); rep(HEAD," let mut staff = 0;\n"+HEAD) +elif m=='m2': # division removed + rep(DIV," let staff = q + r.per_staff - 1;\n") +elif m=='m3': # division moved into the loop, operands unchanged + rep(LOOP, LOOP.split(' }\n')[0]+" staff = (q + r.per_staff - 1) / r.per_staff;\n }\n"); rep(HEAD," let mut staff = 0;\n"+HEAD) +open(p,'w').write(s) diff --git a/.claude/probes/2026-11-11-cg5-defuse/regenerate.sh b/.claude/probes/2026-11-11-cg5-defuse/regenerate.sh new file mode 100755 index 000000000..fcfbc1186 --- /dev/null +++ b/.claude/probes/2026-11-11-cg5-defuse/regenerate.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +# Regenerates crates/cg-defuse-probe/tests/data from crates/foundry-parity-lab. +# +# CHARON=/path/to/charon .claude/probes/2026-11-11-cg5-defuse/regenerate.sh +# +# Works in a scratch git worktree, so the checkout is never edited. m0 is the +# crate as committed; m1, m2, m3 are the three mutants of src/method.rs +# written by mutate.py. Needs the Charon binary (not on PATH by default). +set -euo pipefail +: "${CHARON:?set CHARON to the charon binary}" +here=$(cd "$(dirname "$0")" && pwd) +root=$(git -C "$here" rev-parse --show-toplevel) +out=$root/crates/cg-defuse-probe/tests/data +work=$(mktemp -d) +trap 'git -C "$root" worktree remove --force "$work/wt" 2>/dev/null || true; rm -rf "$work"' EXIT +git -C "$root" worktree add --detach "$work/wt" HEAD >/dev/null +cd "$work/wt/crates/foundry-parity-lab" +export CARGO_PROFILE_DEV_DEBUG=0 CARGO_INCREMENTAL=0 CARGO_TARGET_DIR=${CARGO_TARGET_DIR:-$work/target} +for m in m0 m1 m2 m3; do + if [ "$m" != m0 ]; then + python3 "$here/mutate.py" "$m" + mkdir -p "$out/src-$m" + cp src/method.rs "$out/src-$m/method.rs" + fi + "$CHARON" cargo --no-dedup-serialized-ast --dest-file "$work/$m.llbc" -- --lib + python3 "$here/extract_defuse.py" "$work/$m.llbc" "$out/$m.defuse.tsv" + git checkout -q src/method.rs +done diff --git a/crates/cg-defuse-probe/Cargo.toml b/crates/cg-defuse-probe/Cargo.toml new file mode 100644 index 000000000..908617832 --- /dev/null +++ b/crates/cg-defuse-probe/Cargo.toml @@ -0,0 +1,24 @@ +# cg-defuse-probe: CG-5 (Linear EXO-237). Lab only. +# +# One bounded, read-only question on the ndarray PR 422 case: do def-use rows +# from Charon LLBC, closed COLD by egglog (proofs mode, public API only), +# separate a scalar threshold division from a per-element quotient? Compared +# with a source-only scan and with loop nesting. No rewrite, no lowering, no +# per-query path, no opcode. See +# `.claude/probes/2026-11-11-cg5-defuse/REPORT.md`. +# +# Own [workspace] root, like egglog-r2il-probe. Run from THIS directory: +# cargo test --release +[package] +name = "cg-defuse-probe" +version = "0.0.0" +edition = "2024" +publish = false +description = "CG-5 probe: def-use rows from Charon LLBC, closed cold by egglog with proofs, classify division sites as scalar threshold or per-element quotient. Results only; no production path." + +[workspace] + +[dependencies] +# Public API only (EGraph::new_with_proofs, parse_and_run_program, prove). +# Floats on `main`, as in every crate that links egglog. +egglog = { git = "https://github.com/AdaWorldAPI/egglog", branch = "main" } diff --git a/crates/cg-defuse-probe/examples/report.rs b/crates/cg-defuse-probe/examples/report.rs new file mode 100644 index 000000000..0f7a01184 --- /dev/null +++ b/crates/cg-defuse-probe/examples/report.rs @@ -0,0 +1,56 @@ +//! Prints the verdict table of one rows file, the cold cost, and one proof. +//! +//! `cargo run --release --example report -- tests/data/m0.defuse.tsv [file:line]` +//! +//! The times are reported, not gates: the derivation runs once per program, +//! never per query. + +use std::time::Instant; + +use cg_defuse_probe::{derive, fixpoint, nesting_class, parse}; + +fn main() { + let mut args = std::env::args().skip(1); + let path = args.next().expect("rows file"); + let want = args.next(); + let facts = parse(&std::fs::read_to_string(&path).expect("read")).expect("rows"); + let t = Instant::now(); + let d = derive(&facts, 64).expect("derive"); + let cold = t.elapsed(); + let t = Instant::now(); + let plain = fixpoint(&facts); + let plain_cost = t.elapsed(); + println!("rows\t{path}"); + println!("sites\t{}\titerations\t{}", d.verdicts.len(), d.iterations); + println!( + "cold_egglog_us\t{}\tplain_fixpoint_us\t{}\t(reported, not gates)", + cold.as_micros(), + plain_cost.as_micros() + ); + println!("file\tline\top\tfunction\tderived\tfixpoint\tnesting\tproof_bytes"); + for (v, p) in d.verdicts.iter().zip(&plain) { + println!( + "{}\t{}\t{}\t{}\t{:?}\t{:?}\t{:?}\t{}", + v.site.file, + v.site.line, + v.site.op, + v.site.func, + v.class, + p, + nesting_class(&v.site), + v.proof.as_ref().map_or(0, String::len) + ); + } + if let Some(w) = want { + for v in &d.verdicts { + if format!("{}:{}", v.site.file, v.site.line) == w { + println!( + "\nproof for {w} ({:?}):\n{}", + v.class, + v.proof.as_deref().unwrap_or("none") + ); + break; + } + } + } +} diff --git a/crates/cg-defuse-probe/src/lib.rs b/crates/cg-defuse-probe/src/lib.rs new file mode 100644 index 000000000..4b36082ef --- /dev/null +++ b/crates/cg-defuse-probe/src/lib.rs @@ -0,0 +1,497 @@ +//! CG-5 probe (Linear EXO-237): classify division and remainder sites from +//! def-use rows. +//! +//! Three arms answer the same question for one site, "is this a scalar +//! threshold or a per-element quotient?": +//! +//! - [`derive`]: the def-use rows closed by egglog in proofs mode. A verdict +//! other than [`Class::Unknown`] carries the proof egglog checked. +//! - [`fixpoint`]: the same two closures as plain Rust loops. It shares the +//! rows and nothing else, so it checks the egglog encoding. +//! - [`source_class`]: a scan of the source text alone. It shares neither the +//! rows nor the rules. +//! +//! [`nesting_class`] is the cheap comparator: loop nesting of the statement. +//! +//! The rows are written by `.claude/probes/2026-11-11-cg5-defuse/extract_defuse.py` +//! from Charon LLBC. They are flow-insensitive: a local with two different +//! defining statements has two definitions. +//! +//! Meaning of the classes, over the rows of one function: +//! +//! - an *element source* is the result of an iterator `next` call inside a +//! loop, or a value read through an index projection; +//! - a site is [`Class::PerElement`] when an operand depends on an element +//! source through any chain of definitions; +//! - a local is *scalar* when it is an argument, or it is not an element +//! source, has exactly one definition, and every local that definition +//! reads is scalar. A site is +//! [`Class::ScalarThreshold`] when both operands are scalar or constants; +//! - anything else is [`Class::Unknown`]. + +use std::collections::{BTreeMap, BTreeSet}; + +use egglog::{CommandOutput, EGraph}; + +/// One operand of a site. +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] +pub enum Operand { + /// A local of the function. + Local(u32), + /// A literal. + Const, + /// A global or static place. Not classified. + Global, +} + +/// One definition of a local: `(kind, line, locals read)`. +/// +/// Charon can copy a statement into several exit paths of a loop. The copies +/// have the same kind, line and sources, so they are one definition here. +pub type Def = (String, u32, Vec); + +/// One division or remainder statement. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Site { + /// Function holding the statement. + pub func: String, + /// Statement number inside the function body. + pub stmt: u32, + /// `Div` or `Rem`. + pub op: String, + /// Source file, relative to the crate. + pub file: String, + /// One-based source line. + pub line: u32, + /// Number of LLBC `Loop` nodes around the statement. + pub loop_depth: u32, + /// Dividend. + pub lhs: Operand, + /// Divisor. + pub rhs: Operand, +} + +/// The def-use rows of one LLBC file. +#[derive(Debug, Default, Clone)] +pub struct Facts { + /// Arguments, per function. + pub args: BTreeSet<(String, u32)>, + /// Definitions, per `(function, local)`. + pub defs: BTreeMap<(String, u32), BTreeSet>, + /// Element sources: `next` results and index reads. + pub elems: BTreeSet<(String, u32)>, + /// Division and remainder statements, in file order. + pub sites: Vec, +} + +/// Why a rows file was refused. +#[derive(Debug, PartialEq, Eq)] +pub enum FactsRefusal { + /// The first line is not `#version 1`. + Version, + /// A row has an unknown kind or too few fields; the one-based line. + Row(usize), + /// A field that must be a number is not; the one-based line. + Number(usize), +} + +fn num(s: &str, line: usize) -> Result { + s.parse().map_err(|_| FactsRefusal::Number(line)) +} + +fn operand(s: &str, line: usize) -> Result { + Ok(match s { + "const" => Operand::Const, + "global" => Operand::Global, + n => Operand::Local(num(n, line)?), + }) +} + +/// Reads a rows file. +pub fn parse(text: &str) -> Result { + let mut lines = text.lines().enumerate(); + match lines.next() { + Some((_, "#version 1")) => {} + _ => return Err(FactsRefusal::Version), + } + let mut facts = Facts::default(); + for (i, row) in lines { + let n = i + 1; + if row.starts_with('#') || row.is_empty() { + continue; + } + let f: Vec<&str> = row.split('\t').collect(); + let need = |k: usize| { + if f.len() < k { + Err(FactsRefusal::Row(n)) + } else { + Ok(()) + } + }; + need(3)?; + let func = f[1].to_string(); + match f[0] { + "ARG" => { + facts.args.insert((func, num(f[2], n)?)); + } + "DEF" => { + need(8)?; + let mut srcs = Vec::new(); + if f[7] != "-" { + for s in f[7].split(',') { + srcs.push(num(s, n)?); + } + } + facts + .defs + .entry((func, num(f[2], n)?)) + .or_default() + .insert((f[4].to_string(), num(f[5], n)?, srcs)); + } + "ELEM" | "INDEX" => { + facts.elems.insert((func, num(f[2], n)?)); + } + "SITE" => { + need(9)?; + facts.sites.push(Site { + func, + stmt: num(f[2], n)?, + op: f[3].to_string(), + file: f[4].to_string(), + line: num(f[5], n)?, + loop_depth: num(f[6], n)?, + lhs: operand(f[7], n)?, + rhs: operand(f[8], n)?, + }); + } + _ => return Err(FactsRefusal::Row(n)), + } + } + Ok(facts) +} + +/// The answer for one site. +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] +pub enum Class { + /// Both operands are fixed before any element is read. + ScalarThreshold, + /// An operand depends on an element source. + PerElement, + /// Neither could be shown. + Unknown, +} + +/// The plain-Rust arm: both closures as loops to a fixpoint. +/// +/// Dependence on an element is tested first, so this arm needs no rule that +/// keeps element sources out of the scalar set; the egglog arm does, because +/// there a site in both classes merges them ([`DeriveRefusal::Conflict`]). +pub fn fixpoint(facts: &Facts) -> Vec { + let mut elem: BTreeSet<(String, u32)> = facts.elems.clone(); + let mut scalar: BTreeSet<(String, u32)> = facts.args.clone(); + loop { + let mut changed = false; + for (key, defs) in &facts.defs { + let func = &key.0; + if !elem.contains(key) + && defs + .iter() + .any(|d| d.2.iter().any(|s| elem.contains(&(func.clone(), *s)))) + { + elem.insert(key.clone()); + changed = true; + } + if !scalar.contains(key) + && defs.len() == 1 + && defs + .iter() + .all(|d| d.2.iter().all(|s| scalar.contains(&(func.clone(), *s)))) + { + scalar.insert(key.clone()); + changed = true; + } + } + if !changed { + break; + } + } + let is_elem = |f: &str, o: &Operand| match o { + Operand::Local(l) => elem.contains(&(f.to_string(), *l)), + _ => false, + }; + let is_scalar = |f: &str, o: &Operand| match o { + Operand::Local(l) => scalar.contains(&(f.to_string(), *l)), + Operand::Const => true, + Operand::Global => false, + }; + facts + .sites + .iter() + .map(|s| { + if is_elem(&s.func, &s.lhs) || is_elem(&s.func, &s.rhs) { + Class::PerElement + } else if is_scalar(&s.func, &s.lhs) && is_scalar(&s.func, &s.rhs) { + Class::ScalarThreshold + } else { + Class::Unknown + } + }) + .collect() +} + +/// The cheap comparator: a statement inside an LLBC loop is per-element. +pub fn nesting_class(site: &Site) -> Class { + if site.loop_depth > 0 { + Class::PerElement + } else { + Class::ScalarThreshold + } +} + +/// The egglog vocabulary and rules. `T` is the one truth value; a property +/// holds when its term is in `T`'s class. +pub const RULES: &str = r#" +(datatype V (L String i64) (K)) +(datatype Srcs (Nil) (Cons V Srcs)) +(datatype Fact + (T) + (Elem V) + (Scalar V) + (AllScalar Srcs) + (Flow V V) + (SoleDef V Srcs)) +(datatype Class (ClassOf String i64) (PerElement) (ScalarThreshold)) +(datatype SiteFact (Site String i64 V V)) +(ruleset defuse) +(union (Scalar (K)) (T)) +(union (AllScalar (Nil)) (T)) +(rule ((= f (Flow a b)) (= (Elem a) (T))) + ((union (Elem b) (T))) :ruleset defuse) +(rule ((= l (Cons v r)) (= (Scalar v) (T)) (= (AllScalar r) (T))) + ((union (AllScalar l) (T))) :ruleset defuse) +(rule ((= d (SoleDef x s)) (= (AllScalar s) (T))) + ((union (Scalar x) (T))) :ruleset defuse) +(rule ((= s (Site f n a b)) (= (Elem a) (T))) + ((union (ClassOf f n) (PerElement))) :ruleset defuse) +(rule ((= s (Site f n a b)) (= (Elem b) (T))) + ((union (ClassOf f n) (PerElement))) :ruleset defuse) +(rule ((= s (Site f n a b)) (= (Scalar a) (T)) (= (Scalar b) (T))) + ((union (ClassOf f n) (ScalarThreshold))) :ruleset defuse) +"#; + +fn local(func: &str, l: u32) -> String { + format!("(L {func:?} {l})") +} + +fn operand_term(func: &str, o: &Operand) -> Option { + match o { + Operand::Local(l) => Some(local(func, *l)), + Operand::Const => Some("(K)".to_string()), + Operand::Global => None, + } +} + +/// The rows as egglog facts. A site with a global operand gets a fresh local +/// that nothing defines, so no rule can classify it. +pub fn encode(facts: &Facts) -> String { + let mut s = String::from(RULES); + for (f, l) in &facts.args { + s.push_str(&format!("(union (Scalar {}) (T))\n", local(f, *l))); + } + for (f, l) in &facts.elems { + s.push_str(&format!("(union (Elem {}) (T))\n", local(f, *l))); + } + for ((f, l), defs) in &facts.defs { + for d in defs { + for src in &d.2 { + s.push_str(&format!("(Flow {} {})\n", local(f, *src), local(f, *l))); + } + } + if defs.len() == 1 + && !facts.args.contains(&(f.clone(), *l)) + && !facts.elems.contains(&(f.clone(), *l)) + && let Some(d) = defs.iter().next() + { + let mut list = String::from("(Nil)"); + for src in d.2.iter().rev() { + list = format!("(Cons {} {list})", local(f, *src)); + } + s.push_str(&format!("(SoleDef {} {list})\n", local(f, *l))); + } + } + for site in &facts.sites { + let free = |k: u32| format!("(L {:?} {})", format!("{}#global", site.func), k); + let a = operand_term(&site.func, &site.lhs).unwrap_or_else(|| free(site.stmt * 2)); + let b = operand_term(&site.func, &site.rhs).unwrap_or_else(|| free(site.stmt * 2 + 1)); + s.push_str(&format!("(Site {:?} {} {a} {b})\n", site.func, site.stmt)); + } + s +} + +/// One site with its derived class. +#[derive(Debug, Clone)] +pub struct Verdict { + /// The site. + pub site: Site, + /// The derived class. + pub class: Class, + /// The proof egglog checked; `None` for [`Class::Unknown`]. + pub proof: Option, +} + +/// The result of one cold derivation. +#[derive(Debug, Clone)] +pub struct Derivation { + /// One verdict per site, in row order. + pub verdicts: Vec, + /// `(run defuse 1)` steps until nothing changed. + pub iterations: usize, +} + +/// Why a derivation produced no verdicts. +#[derive(Debug, PartialEq, Eq)] +pub enum DeriveRefusal { + /// egglog rejected the program. + Egglog(String), + /// The rules were still changing the e-graph after `fuel` steps. + Fuel(usize), + /// `PerElement` and `ScalarThreshold` were merged: a site got both. + Conflict, +} + +fn step_changed(outs: &[CommandOutput]) -> bool { + for out in outs { + if let CommandOutput::RunSchedule(report) = out { + return report + .iterations + .first() + .map_or(report.updated, |it| it.changed()); + } + } + true +} + +fn prove(egraph: &mut EGraph, goal: &str) -> Option { + let outs = egraph + .parse_and_run_program(None, &format!("(prove {goal})")) + .ok()?; + outs.iter().find_map(|out| match out { + CommandOutput::ProveExists { + proof_store, + proof_id, + } => Some(proof_store.proof_to_string(*proof_id)), + _ => None, + }) +} + +/// The egglog arm: loads the rows, steps the rules to a fixpoint, then asks +/// for a proof of each class of each site. +pub fn derive(facts: &Facts, fuel: usize) -> Result { + let mut egraph = EGraph::new_with_proofs(); + egraph + .parse_and_run_program(None, &encode(facts)) + .map_err(|e| DeriveRefusal::Egglog(e.to_string()))?; + let mut iterations = 0; + loop { + if iterations == fuel { + return Err(DeriveRefusal::Fuel(fuel)); + } + iterations += 1; + let outs = egraph + .parse_and_run_program(None, "(run defuse 1)") + .map_err(|e| DeriveRefusal::Egglog(e.to_string()))?; + if !step_changed(&outs) { + break; + } + } + if prove(&mut egraph, "(= (PerElement) (ScalarThreshold))").is_some() { + return Err(DeriveRefusal::Conflict); + } + let mut verdicts = Vec::with_capacity(facts.sites.len()); + for site in &facts.sites { + let goal = |class: &str| format!("(= (ClassOf {:?} {}) ({class}))", site.func, site.stmt); + let (class, proof) = if let Some(p) = prove(&mut egraph, &goal("PerElement")) { + (Class::PerElement, Some(p)) + } else if let Some(p) = prove(&mut egraph, &goal("ScalarThreshold")) { + (Class::ScalarThreshold, Some(p)) + } else { + (Class::Unknown, None) + }; + verdicts.push(Verdict { + site: site.clone(), + class, + proof, + }); + } + Ok(Derivation { + verdicts, + iterations, + }) +} + +fn idents(text: &str) -> Vec<&str> { + text.split(|c: char| !(c.is_alphanumeric() || c == '_')) + .filter(|w| { + w.chars() + .next() + .is_some_and(|c| c.is_alphabetic() || c == '_') + }) + .collect() +} + +/// The source-only arm. `line` is one-based and must hold a `/` or `%`. +/// +/// Finds the `for PATTERN in` headers whose braces are still open at `line` +/// and collects the names their patterns bind. The site is per-element when +/// the operator's line uses one of those names, or reads through `[`; it is a +/// scalar threshold otherwise. `None` when the line has no `/` or `%` +/// outside a comment. +pub fn source_class(source: &str, line: usize) -> Option { + let lines: Vec<&str> = source.lines().collect(); + let code = |l: &str| l.split("//").next().unwrap_or("").to_string(); + let target = code(lines.get(line.checked_sub(1)?)?); + if !target.contains('/') && !target.contains('%') { + return None; + } + // (brace depth at which the loop body opened, names bound by its pattern) + let mut open: Vec<(i32, Vec)> = Vec::new(); + let mut depth = 0i32; + for raw in &lines[..line - 1] { + let l = code(raw); + let mut header = l.trim_start().strip_prefix("for ").and_then(|rest| { + rest.split_once(" in ").map(|(pat, _)| { + idents(pat) + .into_iter() + .map(String::from) + .collect::>() + }) + }); + for c in l.chars() { + match c { + '{' => { + depth += 1; + if let Some(names) = header.take() { + open.push((depth, names)); + } + } + '}' => { + if open.last().is_some_and(|(d, _)| *d == depth) { + open.pop(); + } + depth -= 1; + } + _ => {} + } + } + } + let bound: BTreeSet<&str> = open + .iter() + .flat_map(|(_, names)| names.iter().map(String::as_str)) + .collect(); + let used = idents(&target); + if target.contains('[') || used.iter().any(|w| bound.contains(w)) { + Some(Class::PerElement) + } else { + Some(Class::ScalarThreshold) + } +} diff --git a/crates/cg-defuse-probe/tests/data/m0.defuse.tsv b/crates/cg-defuse-probe/tests/data/m0.defuse.tsv new file mode 100644 index 000000000..f7e25e4ec --- /dev/null +++ b/crates/cg-defuse-probe/tests/data/m0.defuse.tsv @@ -0,0 +1,785 @@ +#version 1 +#schema kind fn fields +ARG foundry_parity_lab::fixture::recipe 1 m +DEF foundry_parity_lab::fixture::recipe 3 17 assign 82 0 1 +DEF foundry_parity_lab::fixture::recipe 2 18 assign 82 0 3 +DEF foundry_parity_lab::fixture::recipe 12 25 assign 91 0 - +DEF foundry_parity_lab::fixture::recipe 14 28 assign 92 0 1 +DEF foundry_parity_lab::fixture::recipe 13 29 assign 92 0 14 +DEF foundry_parity_lab::fixture::recipe 11 31 call 91 0 12,13 +DEF foundry_parity_lab::fixture::recipe 10 34 call 91 0 11 +DEF foundry_parity_lab::fixture::recipe 18 42 assign 99 0 10 +DEF foundry_parity_lab::fixture::recipe 17 43 call 99 0 18 +DEF foundry_parity_lab::fixture::recipe 10 43 mutcall 99 0 18 +DEF foundry_parity_lab::fixture::recipe 16 44 assign 99 0 17 +DEF foundry_parity_lab::fixture::recipe 15 46 call 99 0 16 +DEF foundry_parity_lab::fixture::recipe 17 46 mutcall 99 0 16 +DEF foundry_parity_lab::fixture::recipe 20 52 assign 100 0 10 +DEF foundry_parity_lab::fixture::recipe 21 54 assign 100 0 - +DEF foundry_parity_lab::fixture::recipe 19 55 call 100 0 20,21 +DEF foundry_parity_lab::fixture::recipe 10 55 mutcall 100 0 20,21 +DEF foundry_parity_lab::fixture::recipe 22 60 assign 102 0 10 +DEF foundry_parity_lab::fixture::recipe 24 63 assign 103 0 1 +DEF foundry_parity_lab::fixture::recipe 25 64 assign 103 0 - +DEF foundry_parity_lab::fixture::recipe 23 71 assign 103 0 24 +SITE foundry_parity_lab::fixture::recipe 71 Rem src/fixture.rs 103 0 24 global +DEF foundry_parity_lab::fixture::recipe 27 75 assign 104 0 1 +DEF foundry_parity_lab::fixture::recipe 28 76 assign 104 0 - +DEF foundry_parity_lab::fixture::recipe 26 83 assign 104 0 27 +SITE foundry_parity_lab::fixture::recipe 83 Rem src/fixture.rs 104 0 27 global +DEF foundry_parity_lab::fixture::recipe 32 89 assign 105 0 1 +DEF foundry_parity_lab::fixture::recipe 31 90 assign 105 0 32 +DEF foundry_parity_lab::fixture::recipe 33 92 assign 105 0 - +DEF foundry_parity_lab::fixture::recipe 34 99 assign 105 0 - +DEF foundry_parity_lab::fixture::recipe 35 100 assign 105 0 31 +DEF foundry_parity_lab::fixture::recipe 36 101 assign 105 0 34,35 +DEF foundry_parity_lab::fixture::recipe 30 108 assign 105 0 31 +SITE foundry_parity_lab::fixture::recipe 108 Rem src/fixture.rs 105 0 31 const +DEF foundry_parity_lab::fixture::recipe 37 110 assign 105 0 30 +DEF foundry_parity_lab::fixture::recipe 29 117 assign 105 0 37 +DEF foundry_parity_lab::fixture::recipe 42 124 assign 106 0 1 +DEF foundry_parity_lab::fixture::recipe 41 125 assign 106 0 42 +DEF foundry_parity_lab::fixture::recipe 43 127 assign 106 0 - +DEF foundry_parity_lab::fixture::recipe 44 134 assign 106 0 - +DEF foundry_parity_lab::fixture::recipe 45 135 assign 106 0 41 +DEF foundry_parity_lab::fixture::recipe 46 136 assign 106 0 44,45 +DEF foundry_parity_lab::fixture::recipe 40 143 assign 106 0 41 +SITE foundry_parity_lab::fixture::recipe 143 Rem src/fixture.rs 106 0 41 const +DEF foundry_parity_lab::fixture::recipe 47 145 assign 106 0 40 +DEF foundry_parity_lab::fixture::recipe 39 152 assign 106 0 47 +DEF foundry_parity_lab::fixture::recipe 48 154 assign 106 0 39 +DEF foundry_parity_lab::fixture::recipe 38 161 assign 106 0 48 +DEF foundry_parity_lab::fixture::recipe 0 163 assign 101 0 22,23,26,29,38 +DEF foundry_parity_lab::fixture::recipe 6 181 call 84 0 - +DEF foundry_parity_lab::fixture::recipe 7 183 assign 84 0 - +DEF foundry_parity_lab::fixture::recipe 8 185 assign 84 0 - +DEF foundry_parity_lab::fixture::recipe 9 187 assign 84 0 - +DEF foundry_parity_lab::fixture::recipe 6 188 assign 84 0 6,7,8,9 +DEF foundry_parity_lab::fixture::recipe 5 192 assign 84 0 6 +DEF foundry_parity_lab::fixture::recipe 4 198 call 84 0 5 +DEF foundry_parity_lab::fixture::recipe 0 200 assign 83 0 4 +ARG foundry_parity_lab::fixture::stock 1 s +ARG foundry_parity_lab::fixture::stock 2 k +ARG foundry_parity_lab::fixture::stock 3 restocked +DEF foundry_parity_lab::fixture::stock 5 6 assign 117 0 1 +DEF foundry_parity_lab::fixture::stock 4 7 call 117 0 5 +DEF foundry_parity_lab::fixture::stock 7 12 assign 117 0 2 +DEF foundry_parity_lab::fixture::stock 6 13 assign 117 0 7 +DEF foundry_parity_lab::fixture::stock 9 18 assign 118 0 1 +DEF foundry_parity_lab::fixture::stock 10 20 assign 118 0 2 +DEF foundry_parity_lab::fixture::stock 8 21 assign 118 0 9,10 +DEF foundry_parity_lab::fixture::stock 0 26 assign 119 0 - +DEF foundry_parity_lab::fixture::stock 0 27 assign 130 0 - +DEF foundry_parity_lab::fixture::stock 0 29 assign 120 0 - +DEF foundry_parity_lab::fixture::stock 0 30 assign 121 0 - +DEF foundry_parity_lab::fixture::stock 11 33 assign 123 0 3 +DEF foundry_parity_lab::fixture::stock 0 35 assign 124 0 - +DEF foundry_parity_lab::fixture::stock 0 36 assign 126 0 - +DEF foundry_parity_lab::fixture::stock 0 38 assign 130 0 - +DEF foundry_parity_lab::fixture::stock 0 40 assign 129 0 - +DEF foundry_parity_lab::fixture::stock 0 41 assign 130 0 - +DEF foundry_parity_lab::fixture::stock 0 42 assign 130 0 - +DEF foundry_parity_lab::fixture::stock 15 55 assign 133 0 1 +DEF foundry_parity_lab::fixture::stock 16 57 assign 133 0 2 +DEF foundry_parity_lab::fixture::stock 14 58 call 133 0 15,16 +DEF foundry_parity_lab::fixture::stock 17 61 assign 133 0 - +DEF foundry_parity_lab::fixture::stock 13 64 assign 133 0 14 +SITE foundry_parity_lab::fixture::stock 64 Rem src/fixture.rs 133 0 14 const +DEF foundry_parity_lab::fixture::stock 12 66 assign 133 0 13 +DEF foundry_parity_lab::fixture::stock 18 68 assign 133 0 12 +DEF foundry_parity_lab::fixture::stock 0 71 assign 133 0 18 +ARG foundry_parity_lab::fixture::unit_cost 1 s +ARG foundry_parity_lab::fixture::unit_cost 2 k +DEF foundry_parity_lab::fixture::unit_cost 6 8 assign 146 0 1 +DEF foundry_parity_lab::fixture::unit_cost 7 10 assign 146 0 2 +DEF foundry_parity_lab::fixture::unit_cost 5 11 call 146 0 6,7 +DEF foundry_parity_lab::fixture::unit_cost 8 14 assign 146 0 - +DEF foundry_parity_lab::fixture::unit_cost 4 17 assign 146 0 5 +SITE foundry_parity_lab::fixture::unit_cost 17 Rem src/fixture.rs 146 0 5 const +DEF foundry_parity_lab::fixture::unit_cost 3 19 assign 146 0 4 +DEF foundry_parity_lab::fixture::unit_cost 9 21 assign 146 0 3 +DEF foundry_parity_lab::fixture::unit_cost 0 24 assign 146 0 9 +ARG foundry_parity_lab::fixture::staff 1 s +ARG foundry_parity_lab::fixture::staff 2 j +DEF foundry_parity_lab::fixture::staff 4 5 assign 159 0 1 +DEF foundry_parity_lab::fixture::staff 3 6 call 159 0 4 +DEF foundry_parity_lab::fixture::staff 6 11 assign 159 0 2 +DEF foundry_parity_lab::fixture::staff 5 12 assign 159 0 6 +DEF foundry_parity_lab::fixture::staff 8 17 assign 160 0 1 +DEF foundry_parity_lab::fixture::staff 7 18 assign 160 0 8 +DEF foundry_parity_lab::fixture::staff 0 21 assign 160 0 - +DEF foundry_parity_lab::fixture::staff 0 23 assign 160 0 - +DEF foundry_parity_lab::fixture::staff 11 35 assign 162 0 1 +DEF foundry_parity_lab::fixture::staff 12 37 assign 162 0 2 +DEF foundry_parity_lab::fixture::staff 10 38 call 162 0 11,12 +DEF foundry_parity_lab::fixture::staff 13 41 assign 162 0 - +DEF foundry_parity_lab::fixture::staff 9 44 assign 162 0 10 +SITE foundry_parity_lab::fixture::staff 44 Rem src/fixture.rs 162 0 10 const +DEF foundry_parity_lab::fixture::staff 0 46 assign 162 0 9 +ARG foundry_parity_lab::fixture::delivery_slots 1 s +DEF foundry_parity_lab::fixture::delivery_slots 3 5 assign 175 0 1 +DEF foundry_parity_lab::fixture::delivery_slots 2 6 call 175 0 3 +DEF foundry_parity_lab::fixture::delivery_slots 6 13 assign 178 0 1 +DEF foundry_parity_lab::fixture::delivery_slots 5 14 call 178 0 6 +DEF foundry_parity_lab::fixture::delivery_slots 7 16 assign 178 0 - +DEF foundry_parity_lab::fixture::delivery_slots 4 19 assign 178 0 5 +SITE foundry_parity_lab::fixture::delivery_slots 19 Rem src/fixture.rs 178 0 5 const +DEF foundry_parity_lab::fixture::delivery_slots 0 21 assign 178 0 4 +DEF foundry_parity_lab::fixture::delivery_slots 0 25 assign 176 0 - +ARG foundry_parity_lab::fixture::delivery_minutes 1 s +DEF foundry_parity_lab::fixture::delivery_minutes 3 6 assign 183 0 1 +DEF foundry_parity_lab::fixture::delivery_minutes 2 7 call 183 0 3 +DEF foundry_parity_lab::fixture::delivery_minutes 7 15 assign 186 0 1 +DEF foundry_parity_lab::fixture::delivery_minutes 6 16 call 186 0 7 +DEF foundry_parity_lab::fixture::delivery_minutes 8 18 assign 186 0 - +DEF foundry_parity_lab::fixture::delivery_minutes 5 21 assign 186 0 6 +SITE foundry_parity_lab::fixture::delivery_minutes 21 Rem src/fixture.rs 186 0 6 const +DEF foundry_parity_lab::fixture::delivery_minutes 4 23 assign 186 0 5 +DEF foundry_parity_lab::fixture::delivery_minutes 9 25 assign 186 0 4 +DEF foundry_parity_lab::fixture::delivery_minutes 0 28 assign 186 0 9 +DEF foundry_parity_lab::fixture::delivery_minutes 0 32 assign 184 0 - +ARG foundry_parity_lab::method::can_cook_guard 1 m +ARG foundry_parity_lab::method::can_cook_guard 2 q +DEF foundry_parity_lab::method::can_cook_guard 4 17 assign 48 0 1 +DEF foundry_parity_lab::method::can_cook_guard 3 18 call 48 0 4 +DEF foundry_parity_lab::method::can_cook_guard 7 24 call 49 0 - +DEF foundry_parity_lab::method::can_cook_guard 11 29 assign 50 0 1 +DEF foundry_parity_lab::method::can_cook_guard 12 30 assign 50 0 11 +DEF foundry_parity_lab::method::can_cook_guard 10 37 assign 50 0 12 +DEF foundry_parity_lab::method::can_cook_guard 9 39 assign 50 0 10 +DEF foundry_parity_lab::method::can_cook_guard 8 41 assign 50 0 9 +DEF foundry_parity_lab::method::can_cook_guard 16 47 assign 51 0 3 +DEF foundry_parity_lab::method::can_cook_guard 17 48 assign 51 0 16 +DEF foundry_parity_lab::method::can_cook_guard 15 57 assign 51 0 17 +DEF foundry_parity_lab::method::can_cook_guard 14 59 assign 51 0 15 +DEF foundry_parity_lab::method::can_cook_guard 13 61 assign 51 0 14 +DEF foundry_parity_lab::method::can_cook_guard 7 63 assign 49 0 7,8,13 +DEF foundry_parity_lab::method::can_cook_guard 6 80 assign 49 0 7 +DEF foundry_parity_lab::method::can_cook_guard 5 88 call 49 0 6 +DEF foundry_parity_lab::method::can_cook_guard 19 93 assign 53 0 3 +DEF foundry_parity_lab::method::can_cook_guard 18 94 call 53 0 19 +DEF foundry_parity_lab::method::can_cook_guard 20 97 assign 53 0 18 +DEF foundry_parity_lab::method::can_cook_guard 23 102 assign 53 1 20 +DEF foundry_parity_lab::method::can_cook_guard 22 103 assign 53 1 23 +DEF foundry_parity_lab::method::can_cook_guard 21 104 call 53 1 22 +ELEM foundry_parity_lab::method::can_cook_guard 21 104 core::slice::iter::{impl}::next +DEF foundry_parity_lab::method::can_cook_guard 23 104 mutcall 53 1 22 +DEF foundry_parity_lab::method::can_cook_guard 24 106 assign 53 1 21 +DEF foundry_parity_lab::method::can_cook_guard 25 112 assign 53 1 21 +DEF foundry_parity_lab::method::can_cook_guard 26 114 assign 53 1 21 +DEF foundry_parity_lab::method::can_cook_guard 28 117 assign 54 1 5 +DEF foundry_parity_lab::method::can_cook_guard 32 122 assign 54 1 25 +DEF foundry_parity_lab::method::can_cook_guard 33 123 assign 54 1 32 +DEF foundry_parity_lab::method::can_cook_guard 31 130 assign 54 1 33 +DEF foundry_parity_lab::method::can_cook_guard 30 132 assign 54 1 31 +DEF foundry_parity_lab::method::can_cook_guard 29 134 assign 54 1 30 +DEF foundry_parity_lab::method::can_cook_guard 27 136 call 54 1 28,29 +DEF foundry_parity_lab::method::can_cook_guard 5 136 mutcall 54 1 28,29 +DEF foundry_parity_lab::method::can_cook_guard 35 142 assign 55 1 5 +DEF foundry_parity_lab::method::can_cook_guard 39 147 assign 55 1 25 +DEF foundry_parity_lab::method::can_cook_guard 40 148 assign 55 1 39 +DEF foundry_parity_lab::method::can_cook_guard 38 155 assign 55 1 40 +DEF foundry_parity_lab::method::can_cook_guard 37 157 assign 55 1 38 +DEF foundry_parity_lab::method::can_cook_guard 41 160 assign 55 1 - +DEF foundry_parity_lab::method::can_cook_guard 43 163 assign 55 1 26 +DEF foundry_parity_lab::method::can_cook_guard 44 165 assign 55 1 2 +DEF foundry_parity_lab::method::can_cook_guard 45 166 assign 55 1 43,44 +DEF foundry_parity_lab::method::can_cook_guard 42 173 assign 55 1 45 +DEF foundry_parity_lab::method::can_cook_guard 36 176 call 55 1 37,41,42 +DEF foundry_parity_lab::method::can_cook_guard 34 180 call 55 1 35,36 +DEF foundry_parity_lab::method::can_cook_guard 5 180 mutcall 55 1 35,36 +DEF foundry_parity_lab::method::can_cook_guard 49 197 assign 58 0 2 +DEF foundry_parity_lab::method::can_cook_guard 50 199 assign 58 0 3 +DEF foundry_parity_lab::method::can_cook_guard 51 200 assign 58 0 49,50 +DEF foundry_parity_lab::method::can_cook_guard 48 207 assign 58 0 51 +DEF foundry_parity_lab::method::can_cook_guard 52 210 assign 58 0 48 +DEF foundry_parity_lab::method::can_cook_guard 47 217 assign 58 0 52 +DEF foundry_parity_lab::method::can_cook_guard 53 220 assign 58 0 3 +DEF foundry_parity_lab::method::can_cook_guard 54 221 assign 58 0 53 +DEF foundry_parity_lab::method::can_cook_guard 55 228 assign 58 0 53 +DEF foundry_parity_lab::method::can_cook_guard 56 229 assign 58 0 47 +DEF foundry_parity_lab::method::can_cook_guard 57 230 assign 58 0 55,56 +DEF foundry_parity_lab::method::can_cook_guard 46 237 assign 58 0 47,53 +SITE foundry_parity_lab::method::can_cook_guard 237 Div src/method.rs 58 0 47 53 +DEF foundry_parity_lab::method::can_cook_guard 59 243 assign 59 0 5 +DEF foundry_parity_lab::method::can_cook_guard 63 248 assign 59 0 3 +DEF foundry_parity_lab::method::can_cook_guard 64 249 assign 59 0 63 +DEF foundry_parity_lab::method::can_cook_guard 62 256 assign 59 0 64 +DEF foundry_parity_lab::method::can_cook_guard 61 258 assign 59 0 62 +DEF foundry_parity_lab::method::can_cook_guard 65 261 assign 59 0 - +DEF foundry_parity_lab::method::can_cook_guard 66 263 assign 59 0 46 +DEF foundry_parity_lab::method::can_cook_guard 60 264 call 59 0 61,65,66 +DEF foundry_parity_lab::method::can_cook_guard 58 268 call 59 0 59,60 +DEF foundry_parity_lab::method::can_cook_guard 5 268 mutcall 59 0 59,60 +DEF foundry_parity_lab::method::can_cook_guard 67 273 assign 60 0 5 +DEF foundry_parity_lab::method::can_cook_guard 0 274 assign 60 0 67 +ARG foundry_parity_lab::arm_a::{impl}::can_cook 1 self +ARG foundry_parity_lab::arm_a::{impl}::can_cook 2 s +ARG foundry_parity_lab::arm_a::{impl}::can_cook 3 m +ARG foundry_parity_lab::arm_a::{impl}::can_cook 4 q +DEF foundry_parity_lab::arm_a::{impl}::can_cook 7 13 assign 67 0 1 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 8 15 assign 67 0 2 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 6 16 call 67 0 7,8 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 5 19 assign 67 0 6 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 10 23 assign 68 0 5 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 9 24 assign 68 0 10 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 0 27 assign 69 0 - +DEF foundry_parity_lab::arm_a::{impl}::can_cook 12 33 assign 71 0 3 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 11 34 call 71 0 12 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 15 40 assign 72 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 14 41 call 72 0 15 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 13 43 call 72 0 14 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 17 48 assign 73 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 16 49 call 73 0 17 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 18 52 assign 73 0 16 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 22 58 assign 73 1 18 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 21 59 assign 73 1 22 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 20 60 call 73 1 21 +ELEM foundry_parity_lab::arm_a::{impl}::can_cook 20 60 core::slice::iter::{impl}::next +DEF foundry_parity_lab::arm_a::{impl}::can_cook 22 60 mutcall 73 1 21 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 23 62 assign 73 1 20 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 24 68 assign 73 1 20 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 25 70 assign 73 1 20 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 27 73 assign 74 1 5 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 28 75 assign 74 1 24 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 26 76 call 74 1 27,28 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 29 80 assign 74 1 26 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 41 83 assign 76 1 24 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 0 84 assign 76 1 41 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 30 106 assign 75 1 26 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 31 108 assign 75 1 13 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 33 111 assign 75 1 24 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 35 114 assign 75 1 30 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 36 116 assign 75 1 25 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 37 117 assign 75 1 36 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 38 124 assign 75 1 36 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 39 125 assign 75 1 35 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 40 126 assign 75 1 38,39 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 34 133 assign 75 1 35,36 +SITE foundry_parity_lab::arm_a::{impl}::can_cook 133 Div src/arm_a.rs 75 1 35 36 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 32 136 assign 75 1 33,34 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 19 139 call 75 1 31,32 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 13 139 mutcall 75 1 31,32 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 47 161 assign 79 0 5 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 48 163 assign 79 0 3 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 46 164 call 79 0 47,48 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 45 165 assign 79 0 46 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 52 173 assign 81 0 5 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 53 175 assign 81 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 51 176 call 81 0 52,53 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 50 177 assign 81 0 51 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 57 184 assign 84 0 - +DEF foundry_parity_lab::arm_a::{impl}::can_cook 56 185 assign 84 0 57 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 59 190 assign 85 0 13 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 58 191 call 85 0 59 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 60 194 assign 85 0 58 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 63 199 assign 85 1 60 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 62 200 assign 85 1 63 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 61 201 call 85 1 62 +ELEM foundry_parity_lab::arm_a::{impl}::can_cook 61 201 alloc::vec::into_iter::{impl}::next +DEF foundry_parity_lab::arm_a::{impl}::can_cook 63 201 mutcall 85 1 62 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 64 203 assign 85 1 61 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 65 207 assign 85 1 61 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 66 209 assign 85 1 61 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 68 212 assign 86 1 66 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 69 214 assign 86 1 56 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 67 215 assign 86 1 68,69 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 70 220 assign 87 1 66 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 72 223 assign 87 1 65 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 71 224 assign 87 1 72 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 56 226 assign 87 1 70,71 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 76 261 assign 90 0 5 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 77 263 assign 90 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 75 264 call 90 0 76,77 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 74 265 assign 90 0 75 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 78 269 assign 90 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 79 270 assign 90 0 74,78 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 73 277 assign 90 0 79 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 81 284 assign 91 0 73 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 82 286 assign 91 0 56 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 80 287 assign 91 0 81,82 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 83 292 assign 92 0 73 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 85 295 assign 92 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 84 296 assign 92 0 85 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 56 298 assign 92 0 83,84 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 44 304 assign 94 0 56 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 55 312 assign 82 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 54 313 assign 82 0 55 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 44 315 assign 82 0 54 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 49 322 assign 80 0 - +DEF foundry_parity_lab::arm_a::{impl}::can_cook 44 323 assign 80 0 49 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 42 327 assign 79 0 44 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 43 329 assign 79 0 44 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 87 333 assign 97 0 42 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 88 335 assign 97 0 4 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 86 336 assign 97 0 87,88 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 89 340 assign 98 0 42 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 90 342 assign 99 0 43 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 0 343 assign 96 0 86,89,90 +ARG foundry_parity_lab::arm_b::{impl}::cook_ops 1 self +ARG foundry_parity_lab::arm_b::{impl}::cook_ops 2 q +ARG foundry_parity_lab::arm_b::{impl}::cook_ops 3 g +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 159 26 assign 207 0 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 5 27 assign 207 0 159 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 7 30 assign 207 0 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 6 31 assign 207 0 7 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 4 32 call 207 0 5,6 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 9 39 assign 208 0 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 8 40 assign 208 0 9 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 42 assign 208 0 8 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 10 51 assign 210 0 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 11 54 assign 211 0 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 12 57 assign 212 0 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 14 61 assign 213 0 11 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 13 62 assign 213 0 14 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 19 70 assign 214 0 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 18 71 call 214 0 19 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 20 73 assign 214 0 18 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 17 76 assign 214 0 20 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 21 78 assign 214 0 17 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 16 81 assign 214 0 21 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 83 call 214 0 16 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 25 90 assign 215 0 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 27 93 assign 215 0 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 28 94 assign 215 0 27 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 26 99 assign 215 0 28 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 24 101 call 215 0 25,26 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 23 104 call 215 0 24 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 29 106 assign 215 0 23 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 32 109 assign 215 0 23 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 22 110 assign 215 0 32 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 36 118 assign 216 0 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 38 121 assign 216 0 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 39 122 assign 216 0 38 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 37 127 assign 216 0 39 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 35 129 call 216 0 36,37 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 34 132 call 216 0 35 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 40 134 assign 216 0 34 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 43 137 assign 216 0 34 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 33 138 assign 216 0 43 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 44 143 assign 217 0 3 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 46 147 assign 218 0 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 50 152 assign 218 0 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 49 153 call 218 0 50 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 48 155 call 218 0 49 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 51 157 assign 218 0 48 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 54 160 assign 218 0 48 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 47 161 assign 218 0 54 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 45 163 call 218 0 46,47 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 163 mutcall 218 0 46,47 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 56 170 assign 219 0 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 58 173 assign 219 0 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 60 176 assign 219 0 22 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 59 177 assign 219 0 60 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 57 178 call 219 0 58,59 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 55 182 call 219 0 56,57 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 182 mutcall 219 0 56,57 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 67 189 assign 227 0 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 69 192 assign 227 0 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 71 195 assign 227 0 33 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 70 196 assign 227 0 71 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 68 197 call 227 0 69,70 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 66 201 call 227 0 67,68 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 201 mutcall 227 0 67,68 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 73 207 assign 228 0 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 72 208 call 228 0 73 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 74 211 assign 228 0 72 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 77 216 assign 228 1 74 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 76 217 assign 228 1 77 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 75 218 call 228 1 76 +ELEM foundry_parity_lab::arm_b::{impl}::cook_ops 75 218 core::slice::iter::{impl}::next +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 77 218 mutcall 228 1 76 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 78 220 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 125 228 assign 242 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 131 235 assign 244 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 133 238 assign 244 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 134 239 assign 244 1 133 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 132 244 assign 244 1 134 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 130 246 call 244 1 131,132 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 129 249 call 244 1 130 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 135 251 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 138 254 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 128 255 assign 244 1 138 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 142 261 assign 245 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 143 263 assign 245 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 144 264 assign 245 1 142,143 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 141 269 assign 245 1 144 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 145 272 assign 245 1 141 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 140 277 assign 245 1 145 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 146 280 assign 245 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 147 281 assign 245 1 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 148 286 assign 245 1 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 149 287 assign 245 1 140 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 150 288 assign 245 1 148,149 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 139 293 assign 245 1 140,146 +SITE foundry_parity_lab::arm_b::{impl}::cook_ops 293 Div src/arm_b.rs 245 1 140 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 127 296 assign 243 1 128,139 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 151 300 assign 247 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 126 301 assign 242 1 127,151 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 124 304 call 242 1 125,126 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 304 mutcall 242 1 125,126 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 153 311 assign 250 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 155 314 assign 250 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 157 317 assign 250 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 156 318 assign 250 1 157 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 154 319 call 250 1 155,156 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 152 323 call 250 1 153,154 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 323 mutcall 250 1 153,154 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 158 328 assign 251 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 329 assign 251 1 158 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 136 346 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 137 348 assign 244 1 136 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 349 call 244 1 137 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 79 362 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 80 364 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 81 366 assign 229 1 3 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 83 370 assign 230 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 85 373 assign 230 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 90 379 assign 230 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 92 382 assign 230 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 93 383 assign 230 1 92 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 91 388 assign 230 1 93 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 89 390 call 230 1 90,91 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 88 393 call 230 1 89 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 94 395 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 97 398 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 87 399 assign 230 1 97 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 86 401 assign 230 1 87 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 84 402 call 230 1 85,86 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 82 406 call 230 1 83,84 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 406 mutcall 230 1 83,84 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 99 414 assign 232 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 105 421 assign 234 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 107 424 assign 234 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 108 425 assign 234 1 107 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 106 430 assign 234 1 108 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 104 432 call 234 1 105,106 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 103 435 call 234 1 104 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 109 437 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 112 440 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 102 441 assign 234 1 112 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 114 445 assign 235 1 80 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 115 447 assign 235 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 116 448 assign 235 1 114,115 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 113 453 assign 235 1 116 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 101 456 assign 233 1 102,113 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 117 460 assign 237 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 100 461 assign 232 1 101,117 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 98 464 call 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 464 mutcall 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 119 471 assign 240 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 121 474 assign 240 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 123 477 assign 240 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 122 478 assign 240 1 123 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 120 479 call 240 1 121,122 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 118 483 call 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 483 mutcall 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 110 493 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 111 495 assign 234 1 110 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 496 call 234 1 111 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 95 515 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 96 517 assign 230 1 95 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 518 call 230 1 96 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 99 541 assign 232 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 105 548 assign 234 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 107 551 assign 234 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 108 552 assign 234 1 107 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 106 557 assign 234 1 108 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 104 559 call 234 1 105,106 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 103 562 call 234 1 104 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 109 564 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 112 567 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 102 568 assign 234 1 112 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 114 572 assign 235 1 80 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 115 574 assign 235 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 116 575 assign 235 1 114,115 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 113 580 assign 235 1 116 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 101 583 assign 233 1 102,113 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 117 587 assign 237 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 100 588 assign 232 1 101,117 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 98 591 call 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 591 mutcall 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 119 598 assign 240 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 121 601 assign 240 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 123 604 assign 240 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 122 605 assign 240 1 123 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 120 606 call 240 1 121,122 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 118 610 call 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 610 mutcall 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 110 620 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 111 622 assign 234 1 110 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 623 call 234 1 111 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 52 644 assign 218 0 48 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 53 646 assign 218 0 52 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 647 call 218 0 53 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 62 659 assign 221 0 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 64 662 assign 222 0 22 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 65 664 assign 223 0 22 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 63 665 assign 221 0 64,65 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 61 668 call 221 0 62,63 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 668 mutcall 221 0 62,63 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 67 675 assign 227 0 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 69 678 assign 227 0 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 71 681 assign 227 0 33 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 70 682 assign 227 0 71 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 68 683 call 227 0 69,70 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 66 687 call 227 0 67,68 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 687 mutcall 227 0 67,68 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 73 693 assign 228 0 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 72 694 call 228 0 73 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 74 697 assign 228 0 72 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 77 702 assign 228 1 74 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 76 703 assign 228 1 77 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 75 704 call 228 1 76 +ELEM foundry_parity_lab::arm_b::{impl}::cook_ops 75 704 core::slice::iter::{impl}::next +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 77 704 mutcall 228 1 76 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 78 706 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 125 714 assign 242 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 131 721 assign 244 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 133 724 assign 244 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 134 725 assign 244 1 133 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 132 730 assign 244 1 134 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 130 732 call 244 1 131,132 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 129 735 call 244 1 130 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 135 737 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 138 740 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 128 741 assign 244 1 138 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 142 747 assign 245 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 143 749 assign 245 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 144 750 assign 245 1 142,143 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 141 755 assign 245 1 144 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 145 758 assign 245 1 141 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 140 763 assign 245 1 145 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 146 766 assign 245 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 147 767 assign 245 1 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 148 772 assign 245 1 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 149 773 assign 245 1 140 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 150 774 assign 245 1 148,149 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 139 779 assign 245 1 140,146 +SITE foundry_parity_lab::arm_b::{impl}::cook_ops 779 Div src/arm_b.rs 245 1 140 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 127 782 assign 243 1 128,139 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 151 786 assign 247 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 126 787 assign 242 1 127,151 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 124 790 call 242 1 125,126 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 790 mutcall 242 1 125,126 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 153 797 assign 250 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 155 800 assign 250 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 157 803 assign 250 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 156 804 assign 250 1 157 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 154 805 call 250 1 155,156 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 152 809 call 250 1 153,154 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 809 mutcall 250 1 153,154 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 158 814 assign 251 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 815 assign 251 1 158 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 136 832 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 137 834 assign 244 1 136 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 835 call 244 1 137 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 79 848 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 80 850 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 81 852 assign 229 1 3 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 83 856 assign 230 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 85 859 assign 230 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 90 865 assign 230 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 92 868 assign 230 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 93 869 assign 230 1 92 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 91 874 assign 230 1 93 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 89 876 call 230 1 90,91 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 88 879 call 230 1 89 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 94 881 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 97 884 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 87 885 assign 230 1 97 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 86 887 assign 230 1 87 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 84 888 call 230 1 85,86 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 82 892 call 230 1 83,84 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 892 mutcall 230 1 83,84 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 99 900 assign 232 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 105 907 assign 234 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 107 910 assign 234 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 108 911 assign 234 1 107 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 106 916 assign 234 1 108 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 104 918 call 234 1 105,106 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 103 921 call 234 1 104 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 109 923 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 112 926 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 102 927 assign 234 1 112 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 114 931 assign 235 1 80 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 115 933 assign 235 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 116 934 assign 235 1 114,115 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 113 939 assign 235 1 116 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 101 942 assign 233 1 102,113 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 117 946 assign 237 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 100 947 assign 232 1 101,117 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 98 950 call 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 950 mutcall 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 119 957 assign 240 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 121 960 assign 240 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 123 963 assign 240 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 122 964 assign 240 1 123 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 120 965 call 240 1 121,122 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 118 969 call 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 969 mutcall 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 110 979 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 111 981 assign 234 1 110 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 982 call 234 1 111 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 95 1001 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 96 1003 assign 230 1 95 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 1004 call 230 1 96 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 99 1027 assign 232 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 105 1034 assign 234 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 107 1037 assign 234 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 108 1038 assign 234 1 107 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 106 1043 assign 234 1 108 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 104 1045 call 234 1 105,106 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 103 1048 call 234 1 104 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 109 1050 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 112 1053 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 102 1054 assign 234 1 112 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 114 1058 assign 235 1 80 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 115 1060 assign 235 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 116 1061 assign 235 1 114,115 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 113 1066 assign 235 1 116 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 101 1069 assign 233 1 102,113 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 117 1073 assign 237 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 100 1074 assign 232 1 101,117 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 98 1077 call 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 1077 mutcall 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 119 1084 assign 240 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 121 1087 assign 240 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 123 1090 assign 240 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 122 1091 assign 240 1 123 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 120 1092 call 240 1 121,122 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 118 1096 call 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 1096 mutcall 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 110 1106 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 111 1108 assign 234 1 110 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 1109 call 234 1 111 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 41 1130 assign 216 0 34 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 42 1132 assign 216 0 41 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 1133 call 216 0 42 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 30 1141 assign 215 0 23 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 31 1143 assign 215 0 30 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 1144 call 215 0 31 +ARG foundry_parity_lab::fixture::recipe::{impl}::call_mut 1 _ +ARG foundry_parity_lab::fixture::recipe::{impl}::call_mut 2 tupled_args +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 3 14 assign 92 0 2 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 8 20 assign 94 0 1 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 9 21 assign 94 0 8 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 7 24 assign 94 0 9 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 11 28 assign 94 0 3 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 12 29 assign 94 0 11 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 10 32 assign 94 0 12 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 13 34 assign 94 0 7,10 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 6 37 assign 94 0 13 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 14 40 assign 94 0 6 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 5 43 assign 94 0 14 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 15 45 assign 94 0 - +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 4 48 assign 94 0 5 +SITE foundry_parity_lab::fixture::recipe::{impl}::call_mut 48 Rem src/fixture.rs 94 0 5 global +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 20 55 assign 95 0 3 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 19 56 assign 95 0 20 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 22 60 assign 95 0 1 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 21 61 assign 95 0 22 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 23 63 assign 95 0 19,21 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 18 66 assign 95 0 23 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 24 69 assign 95 0 - +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 25 72 assign 95 0 - +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 26 73 assign 95 0 18 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 27 74 assign 95 0 25,26 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 17 77 assign 95 0 18 +SITE foundry_parity_lab::fixture::recipe::{impl}::call_mut 77 Rem src/fixture.rs 95 0 18 const +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 28 79 assign 95 0 17 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 16 82 assign 95 0 28 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 0 84 assign 93 0 4,16 +ARG foundry_parity_lab::oracle::{impl}::can_cook 1 self +ARG foundry_parity_lab::oracle::{impl}::can_cook 2 s +ARG foundry_parity_lab::oracle::{impl}::can_cook 3 m +ARG foundry_parity_lab::oracle::{impl}::can_cook 4 q +DEF foundry_parity_lab::oracle::{impl}::can_cook 7 12 assign 46 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 6 13 call 46 0 7 +DEF foundry_parity_lab::oracle::{impl}::can_cook 5 15 assign 46 0 6 +DEF foundry_parity_lab::oracle::{impl}::can_cook 9 21 assign 49 0 3 +DEF foundry_parity_lab::oracle::{impl}::can_cook 8 22 call 49 0 9 +DEF foundry_parity_lab::oracle::{impl}::can_cook 15 31 assign 50 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 14 32 call 50 0 15 +DEF foundry_parity_lab::oracle::{impl}::can_cook 13 33 assign 50 0 14 +DEF foundry_parity_lab::oracle::{impl}::can_cook 12 35 call 50 0 13 +DEF foundry_parity_lab::oracle::{impl}::can_cook 11 36 assign 50 0 12 +DEF foundry_parity_lab::oracle::{impl}::can_cook 17 40 assign 50 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 16 41 assign 50 0 17 +DEF foundry_parity_lab::oracle::{impl}::can_cook 10 43 call 50 0 11,16 +DEF foundry_parity_lab::oracle::{impl}::can_cook 12 43 mutcall 50 0 11,16 +DEF foundry_parity_lab::oracle::{impl}::can_cook 18 46 assign 50 0 10 +DEF foundry_parity_lab::oracle::{impl}::can_cook 25 54 assign 53 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 26 56 assign 53 0 3 +DEF foundry_parity_lab::oracle::{impl}::can_cook 24 57 call 53 0 25,26 +DEF foundry_parity_lab::oracle::{impl}::can_cook 28 63 assign 53 0 1 +DEF foundry_parity_lab::oracle::{impl}::can_cook 30 66 assign 53 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 29 67 assign 53 0 30 +DEF foundry_parity_lab::oracle::{impl}::can_cook 27 68 call 53 0 28,29 +DEF foundry_parity_lab::oracle::{impl}::can_cook 31 74 assign 54 0 - +DEF foundry_parity_lab::oracle::{impl}::can_cook 23 75 assign 54 0 31 +DEF foundry_parity_lab::oracle::{impl}::can_cook 33 82 assign 55 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 34 84 assign 55 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 32 85 call 55 0 33,34 +DEF foundry_parity_lab::oracle::{impl}::can_cook 38 91 assign 60 0 - +DEF foundry_parity_lab::oracle::{impl}::can_cook 37 92 assign 60 0 38 +DEF foundry_parity_lab::oracle::{impl}::can_cook 40 97 assign 61 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 39 98 call 61 0 40 +DEF foundry_parity_lab::oracle::{impl}::can_cook 41 101 assign 61 0 39 +DEF foundry_parity_lab::oracle::{impl}::can_cook 44 106 assign 61 1 41 +DEF foundry_parity_lab::oracle::{impl}::can_cook 43 107 assign 61 1 44 +DEF foundry_parity_lab::oracle::{impl}::can_cook 42 108 call 61 1 43 +ELEM foundry_parity_lab::oracle::{impl}::can_cook 42 108 core::slice::iter::{impl}::next +DEF foundry_parity_lab::oracle::{impl}::can_cook 44 108 mutcall 61 1 43 +DEF foundry_parity_lab::oracle::{impl}::can_cook 45 110 assign 61 1 42 +DEF foundry_parity_lab::oracle::{impl}::can_cook 46 114 assign 61 1 42 +DEF foundry_parity_lab::oracle::{impl}::can_cook 47 116 assign 61 1 42 +DEF foundry_parity_lab::oracle::{impl}::can_cook 50 120 assign 62 1 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 51 122 assign 62 1 46 +DEF foundry_parity_lab::oracle::{impl}::can_cook 52 124 assign 62 1 1 +DEF foundry_parity_lab::oracle::{impl}::can_cook 49 125 call 62 1 50,51,52 +DEF foundry_parity_lab::oracle::{impl}::can_cook 53 130 assign 62 1 47 +DEF foundry_parity_lab::oracle::{impl}::can_cook 54 131 assign 62 1 53 +DEF foundry_parity_lab::oracle::{impl}::can_cook 55 136 assign 62 1 53 +DEF foundry_parity_lab::oracle::{impl}::can_cook 56 137 assign 62 1 49 +DEF foundry_parity_lab::oracle::{impl}::can_cook 57 138 assign 62 1 55,56 +DEF foundry_parity_lab::oracle::{impl}::can_cook 48 143 assign 62 1 49,53 +SITE foundry_parity_lab::oracle::{impl}::can_cook 143 Div src/oracle.rs 62 1 49 53 +DEF foundry_parity_lab::oracle::{impl}::can_cook 59 149 assign 63 1 48 +DEF foundry_parity_lab::oracle::{impl}::can_cook 60 151 assign 63 1 37 +DEF foundry_parity_lab::oracle::{impl}::can_cook 58 152 assign 63 1 59,60 +DEF foundry_parity_lab::oracle::{impl}::can_cook 61 157 assign 64 1 48 +DEF foundry_parity_lab::oracle::{impl}::can_cook 63 160 assign 64 1 46 +DEF foundry_parity_lab::oracle::{impl}::can_cook 62 161 assign 64 1 63 +DEF foundry_parity_lab::oracle::{impl}::can_cook 37 163 assign 64 1 61,62 +DEF foundry_parity_lab::oracle::{impl}::can_cook 66 184 assign 67 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 67 186 assign 67 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 65 187 call 67 0 66,67 +DEF foundry_parity_lab::oracle::{impl}::can_cook 68 191 assign 67 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 69 192 assign 67 0 65,68 +DEF foundry_parity_lab::oracle::{impl}::can_cook 64 197 assign 67 0 69 +DEF foundry_parity_lab::oracle::{impl}::can_cook 71 203 assign 68 0 64 +DEF foundry_parity_lab::oracle::{impl}::can_cook 72 205 assign 68 0 37 +DEF foundry_parity_lab::oracle::{impl}::can_cook 70 206 assign 68 0 71,72 +DEF foundry_parity_lab::oracle::{impl}::can_cook 73 211 assign 69 0 64 +DEF foundry_parity_lab::oracle::{impl}::can_cook 75 214 assign 69 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 74 215 assign 69 0 75 +DEF foundry_parity_lab::oracle::{impl}::can_cook 37 217 assign 69 0 73,74 +DEF foundry_parity_lab::oracle::{impl}::can_cook 23 223 assign 71 0 37 +DEF foundry_parity_lab::oracle::{impl}::can_cook 36 230 assign 56 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 35 231 assign 56 0 36 +DEF foundry_parity_lab::oracle::{impl}::can_cook 23 233 assign 56 0 35 +DEF foundry_parity_lab::oracle::{impl}::can_cook 31 239 assign 54 0 - +DEF foundry_parity_lab::oracle::{impl}::can_cook 23 240 assign 54 0 31 +DEF foundry_parity_lab::oracle::{impl}::can_cook 21 245 assign 53 0 23 +DEF foundry_parity_lab::oracle::{impl}::can_cook 22 247 assign 53 0 23 +DEF foundry_parity_lab::oracle::{impl}::can_cook 77 251 assign 74 0 21 +DEF foundry_parity_lab::oracle::{impl}::can_cook 78 253 assign 74 0 4 +DEF foundry_parity_lab::oracle::{impl}::can_cook 76 254 assign 74 0 77,78 +DEF foundry_parity_lab::oracle::{impl}::can_cook 79 258 assign 75 0 21 +DEF foundry_parity_lab::oracle::{impl}::can_cook 80 260 assign 76 0 22 +DEF foundry_parity_lab::oracle::{impl}::can_cook 0 261 assign 73 0 76,79,80 +DEF foundry_parity_lab::oracle::{impl}::can_cook 19 272 assign 50 0 10 +DEF foundry_parity_lab::oracle::{impl}::can_cook 20 274 assign 51 0 19 +DEF foundry_parity_lab::oracle::{impl}::can_cook 0 275 assign 51 0 20 +DEF foundry_parity_lab::oracle::{impl}::can_cook 0 286 assign 47 0 - diff --git a/crates/cg-defuse-probe/tests/data/m1.defuse.tsv b/crates/cg-defuse-probe/tests/data/m1.defuse.tsv new file mode 100644 index 000000000..c289c1f8a --- /dev/null +++ b/crates/cg-defuse-probe/tests/data/m1.defuse.tsv @@ -0,0 +1,786 @@ +#version 1 +#schema kind fn fields +ARG foundry_parity_lab::fixture::recipe 1 m +DEF foundry_parity_lab::fixture::recipe 3 17 assign 82 0 1 +DEF foundry_parity_lab::fixture::recipe 2 18 assign 82 0 3 +DEF foundry_parity_lab::fixture::recipe 12 25 assign 91 0 - +DEF foundry_parity_lab::fixture::recipe 14 28 assign 92 0 1 +DEF foundry_parity_lab::fixture::recipe 13 29 assign 92 0 14 +DEF foundry_parity_lab::fixture::recipe 11 31 call 91 0 12,13 +DEF foundry_parity_lab::fixture::recipe 10 34 call 91 0 11 +DEF foundry_parity_lab::fixture::recipe 18 42 assign 99 0 10 +DEF foundry_parity_lab::fixture::recipe 17 43 call 99 0 18 +DEF foundry_parity_lab::fixture::recipe 10 43 mutcall 99 0 18 +DEF foundry_parity_lab::fixture::recipe 16 44 assign 99 0 17 +DEF foundry_parity_lab::fixture::recipe 15 46 call 99 0 16 +DEF foundry_parity_lab::fixture::recipe 17 46 mutcall 99 0 16 +DEF foundry_parity_lab::fixture::recipe 20 52 assign 100 0 10 +DEF foundry_parity_lab::fixture::recipe 21 54 assign 100 0 - +DEF foundry_parity_lab::fixture::recipe 19 55 call 100 0 20,21 +DEF foundry_parity_lab::fixture::recipe 10 55 mutcall 100 0 20,21 +DEF foundry_parity_lab::fixture::recipe 22 60 assign 102 0 10 +DEF foundry_parity_lab::fixture::recipe 24 63 assign 103 0 1 +DEF foundry_parity_lab::fixture::recipe 25 64 assign 103 0 - +DEF foundry_parity_lab::fixture::recipe 23 71 assign 103 0 24 +SITE foundry_parity_lab::fixture::recipe 71 Rem src/fixture.rs 103 0 24 global +DEF foundry_parity_lab::fixture::recipe 27 75 assign 104 0 1 +DEF foundry_parity_lab::fixture::recipe 28 76 assign 104 0 - +DEF foundry_parity_lab::fixture::recipe 26 83 assign 104 0 27 +SITE foundry_parity_lab::fixture::recipe 83 Rem src/fixture.rs 104 0 27 global +DEF foundry_parity_lab::fixture::recipe 32 89 assign 105 0 1 +DEF foundry_parity_lab::fixture::recipe 31 90 assign 105 0 32 +DEF foundry_parity_lab::fixture::recipe 33 92 assign 105 0 - +DEF foundry_parity_lab::fixture::recipe 34 99 assign 105 0 - +DEF foundry_parity_lab::fixture::recipe 35 100 assign 105 0 31 +DEF foundry_parity_lab::fixture::recipe 36 101 assign 105 0 34,35 +DEF foundry_parity_lab::fixture::recipe 30 108 assign 105 0 31 +SITE foundry_parity_lab::fixture::recipe 108 Rem src/fixture.rs 105 0 31 const +DEF foundry_parity_lab::fixture::recipe 37 110 assign 105 0 30 +DEF foundry_parity_lab::fixture::recipe 29 117 assign 105 0 37 +DEF foundry_parity_lab::fixture::recipe 42 124 assign 106 0 1 +DEF foundry_parity_lab::fixture::recipe 41 125 assign 106 0 42 +DEF foundry_parity_lab::fixture::recipe 43 127 assign 106 0 - +DEF foundry_parity_lab::fixture::recipe 44 134 assign 106 0 - +DEF foundry_parity_lab::fixture::recipe 45 135 assign 106 0 41 +DEF foundry_parity_lab::fixture::recipe 46 136 assign 106 0 44,45 +DEF foundry_parity_lab::fixture::recipe 40 143 assign 106 0 41 +SITE foundry_parity_lab::fixture::recipe 143 Rem src/fixture.rs 106 0 41 const +DEF foundry_parity_lab::fixture::recipe 47 145 assign 106 0 40 +DEF foundry_parity_lab::fixture::recipe 39 152 assign 106 0 47 +DEF foundry_parity_lab::fixture::recipe 48 154 assign 106 0 39 +DEF foundry_parity_lab::fixture::recipe 38 161 assign 106 0 48 +DEF foundry_parity_lab::fixture::recipe 0 163 assign 101 0 22,23,26,29,38 +DEF foundry_parity_lab::fixture::recipe 6 181 call 84 0 - +DEF foundry_parity_lab::fixture::recipe 7 183 assign 84 0 - +DEF foundry_parity_lab::fixture::recipe 8 185 assign 84 0 - +DEF foundry_parity_lab::fixture::recipe 9 187 assign 84 0 - +DEF foundry_parity_lab::fixture::recipe 6 188 assign 84 0 6,7,8,9 +DEF foundry_parity_lab::fixture::recipe 5 192 assign 84 0 6 +DEF foundry_parity_lab::fixture::recipe 4 198 call 84 0 5 +DEF foundry_parity_lab::fixture::recipe 0 200 assign 83 0 4 +ARG foundry_parity_lab::fixture::stock 1 s +ARG foundry_parity_lab::fixture::stock 2 k +ARG foundry_parity_lab::fixture::stock 3 restocked +DEF foundry_parity_lab::fixture::stock 5 6 assign 117 0 1 +DEF foundry_parity_lab::fixture::stock 4 7 call 117 0 5 +DEF foundry_parity_lab::fixture::stock 7 12 assign 117 0 2 +DEF foundry_parity_lab::fixture::stock 6 13 assign 117 0 7 +DEF foundry_parity_lab::fixture::stock 9 18 assign 118 0 1 +DEF foundry_parity_lab::fixture::stock 10 20 assign 118 0 2 +DEF foundry_parity_lab::fixture::stock 8 21 assign 118 0 9,10 +DEF foundry_parity_lab::fixture::stock 0 26 assign 119 0 - +DEF foundry_parity_lab::fixture::stock 0 27 assign 130 0 - +DEF foundry_parity_lab::fixture::stock 0 29 assign 120 0 - +DEF foundry_parity_lab::fixture::stock 0 30 assign 121 0 - +DEF foundry_parity_lab::fixture::stock 11 33 assign 123 0 3 +DEF foundry_parity_lab::fixture::stock 0 35 assign 124 0 - +DEF foundry_parity_lab::fixture::stock 0 36 assign 126 0 - +DEF foundry_parity_lab::fixture::stock 0 38 assign 130 0 - +DEF foundry_parity_lab::fixture::stock 0 40 assign 129 0 - +DEF foundry_parity_lab::fixture::stock 0 41 assign 130 0 - +DEF foundry_parity_lab::fixture::stock 0 42 assign 130 0 - +DEF foundry_parity_lab::fixture::stock 15 55 assign 133 0 1 +DEF foundry_parity_lab::fixture::stock 16 57 assign 133 0 2 +DEF foundry_parity_lab::fixture::stock 14 58 call 133 0 15,16 +DEF foundry_parity_lab::fixture::stock 17 61 assign 133 0 - +DEF foundry_parity_lab::fixture::stock 13 64 assign 133 0 14 +SITE foundry_parity_lab::fixture::stock 64 Rem src/fixture.rs 133 0 14 const +DEF foundry_parity_lab::fixture::stock 12 66 assign 133 0 13 +DEF foundry_parity_lab::fixture::stock 18 68 assign 133 0 12 +DEF foundry_parity_lab::fixture::stock 0 71 assign 133 0 18 +ARG foundry_parity_lab::fixture::unit_cost 1 s +ARG foundry_parity_lab::fixture::unit_cost 2 k +DEF foundry_parity_lab::fixture::unit_cost 6 8 assign 146 0 1 +DEF foundry_parity_lab::fixture::unit_cost 7 10 assign 146 0 2 +DEF foundry_parity_lab::fixture::unit_cost 5 11 call 146 0 6,7 +DEF foundry_parity_lab::fixture::unit_cost 8 14 assign 146 0 - +DEF foundry_parity_lab::fixture::unit_cost 4 17 assign 146 0 5 +SITE foundry_parity_lab::fixture::unit_cost 17 Rem src/fixture.rs 146 0 5 const +DEF foundry_parity_lab::fixture::unit_cost 3 19 assign 146 0 4 +DEF foundry_parity_lab::fixture::unit_cost 9 21 assign 146 0 3 +DEF foundry_parity_lab::fixture::unit_cost 0 24 assign 146 0 9 +ARG foundry_parity_lab::fixture::staff 1 s +ARG foundry_parity_lab::fixture::staff 2 j +DEF foundry_parity_lab::fixture::staff 4 5 assign 159 0 1 +DEF foundry_parity_lab::fixture::staff 3 6 call 159 0 4 +DEF foundry_parity_lab::fixture::staff 6 11 assign 159 0 2 +DEF foundry_parity_lab::fixture::staff 5 12 assign 159 0 6 +DEF foundry_parity_lab::fixture::staff 8 17 assign 160 0 1 +DEF foundry_parity_lab::fixture::staff 7 18 assign 160 0 8 +DEF foundry_parity_lab::fixture::staff 0 21 assign 160 0 - +DEF foundry_parity_lab::fixture::staff 0 23 assign 160 0 - +DEF foundry_parity_lab::fixture::staff 11 35 assign 162 0 1 +DEF foundry_parity_lab::fixture::staff 12 37 assign 162 0 2 +DEF foundry_parity_lab::fixture::staff 10 38 call 162 0 11,12 +DEF foundry_parity_lab::fixture::staff 13 41 assign 162 0 - +DEF foundry_parity_lab::fixture::staff 9 44 assign 162 0 10 +SITE foundry_parity_lab::fixture::staff 44 Rem src/fixture.rs 162 0 10 const +DEF foundry_parity_lab::fixture::staff 0 46 assign 162 0 9 +ARG foundry_parity_lab::fixture::delivery_slots 1 s +DEF foundry_parity_lab::fixture::delivery_slots 3 5 assign 175 0 1 +DEF foundry_parity_lab::fixture::delivery_slots 2 6 call 175 0 3 +DEF foundry_parity_lab::fixture::delivery_slots 6 13 assign 178 0 1 +DEF foundry_parity_lab::fixture::delivery_slots 5 14 call 178 0 6 +DEF foundry_parity_lab::fixture::delivery_slots 7 16 assign 178 0 - +DEF foundry_parity_lab::fixture::delivery_slots 4 19 assign 178 0 5 +SITE foundry_parity_lab::fixture::delivery_slots 19 Rem src/fixture.rs 178 0 5 const +DEF foundry_parity_lab::fixture::delivery_slots 0 21 assign 178 0 4 +DEF foundry_parity_lab::fixture::delivery_slots 0 25 assign 176 0 - +ARG foundry_parity_lab::fixture::delivery_minutes 1 s +DEF foundry_parity_lab::fixture::delivery_minutes 3 6 assign 183 0 1 +DEF foundry_parity_lab::fixture::delivery_minutes 2 7 call 183 0 3 +DEF foundry_parity_lab::fixture::delivery_minutes 7 15 assign 186 0 1 +DEF foundry_parity_lab::fixture::delivery_minutes 6 16 call 186 0 7 +DEF foundry_parity_lab::fixture::delivery_minutes 8 18 assign 186 0 - +DEF foundry_parity_lab::fixture::delivery_minutes 5 21 assign 186 0 6 +SITE foundry_parity_lab::fixture::delivery_minutes 21 Rem src/fixture.rs 186 0 6 const +DEF foundry_parity_lab::fixture::delivery_minutes 4 23 assign 186 0 5 +DEF foundry_parity_lab::fixture::delivery_minutes 9 25 assign 186 0 4 +DEF foundry_parity_lab::fixture::delivery_minutes 0 28 assign 186 0 9 +DEF foundry_parity_lab::fixture::delivery_minutes 0 32 assign 184 0 - +ARG foundry_parity_lab::method::can_cook_guard 1 m +ARG foundry_parity_lab::method::can_cook_guard 2 q +DEF foundry_parity_lab::method::can_cook_guard 4 17 assign 48 0 1 +DEF foundry_parity_lab::method::can_cook_guard 3 18 call 48 0 4 +DEF foundry_parity_lab::method::can_cook_guard 7 24 call 49 0 - +DEF foundry_parity_lab::method::can_cook_guard 11 29 assign 50 0 1 +DEF foundry_parity_lab::method::can_cook_guard 12 30 assign 50 0 11 +DEF foundry_parity_lab::method::can_cook_guard 10 37 assign 50 0 12 +DEF foundry_parity_lab::method::can_cook_guard 9 39 assign 50 0 10 +DEF foundry_parity_lab::method::can_cook_guard 8 41 assign 50 0 9 +DEF foundry_parity_lab::method::can_cook_guard 16 47 assign 51 0 3 +DEF foundry_parity_lab::method::can_cook_guard 17 48 assign 51 0 16 +DEF foundry_parity_lab::method::can_cook_guard 15 57 assign 51 0 17 +DEF foundry_parity_lab::method::can_cook_guard 14 59 assign 51 0 15 +DEF foundry_parity_lab::method::can_cook_guard 13 61 assign 51 0 14 +DEF foundry_parity_lab::method::can_cook_guard 7 63 assign 49 0 7,8,13 +DEF foundry_parity_lab::method::can_cook_guard 6 80 assign 49 0 7 +DEF foundry_parity_lab::method::can_cook_guard 5 88 call 49 0 6 +DEF foundry_parity_lab::method::can_cook_guard 18 92 assign 53 0 - +DEF foundry_parity_lab::method::can_cook_guard 20 96 assign 54 0 3 +DEF foundry_parity_lab::method::can_cook_guard 19 97 call 54 0 20 +DEF foundry_parity_lab::method::can_cook_guard 21 100 assign 54 0 19 +DEF foundry_parity_lab::method::can_cook_guard 24 105 assign 54 1 21 +DEF foundry_parity_lab::method::can_cook_guard 23 106 assign 54 1 24 +DEF foundry_parity_lab::method::can_cook_guard 22 107 call 54 1 23 +ELEM foundry_parity_lab::method::can_cook_guard 22 107 core::slice::iter::{impl}::next +DEF foundry_parity_lab::method::can_cook_guard 24 107 mutcall 54 1 23 +DEF foundry_parity_lab::method::can_cook_guard 25 109 assign 54 1 22 +DEF foundry_parity_lab::method::can_cook_guard 26 115 assign 54 1 22 +DEF foundry_parity_lab::method::can_cook_guard 27 117 assign 54 1 22 +DEF foundry_parity_lab::method::can_cook_guard 29 120 assign 55 1 5 +DEF foundry_parity_lab::method::can_cook_guard 33 125 assign 55 1 26 +DEF foundry_parity_lab::method::can_cook_guard 34 126 assign 55 1 33 +DEF foundry_parity_lab::method::can_cook_guard 32 133 assign 55 1 34 +DEF foundry_parity_lab::method::can_cook_guard 31 135 assign 55 1 32 +DEF foundry_parity_lab::method::can_cook_guard 30 137 assign 55 1 31 +DEF foundry_parity_lab::method::can_cook_guard 28 139 call 55 1 29,30 +DEF foundry_parity_lab::method::can_cook_guard 5 139 mutcall 55 1 29,30 +DEF foundry_parity_lab::method::can_cook_guard 36 145 assign 56 1 5 +DEF foundry_parity_lab::method::can_cook_guard 40 150 assign 56 1 26 +DEF foundry_parity_lab::method::can_cook_guard 41 151 assign 56 1 40 +DEF foundry_parity_lab::method::can_cook_guard 39 158 assign 56 1 41 +DEF foundry_parity_lab::method::can_cook_guard 38 160 assign 56 1 39 +DEF foundry_parity_lab::method::can_cook_guard 42 163 assign 56 1 - +DEF foundry_parity_lab::method::can_cook_guard 44 166 assign 56 1 27 +DEF foundry_parity_lab::method::can_cook_guard 45 168 assign 56 1 2 +DEF foundry_parity_lab::method::can_cook_guard 46 169 assign 56 1 44,45 +DEF foundry_parity_lab::method::can_cook_guard 43 176 assign 56 1 46 +DEF foundry_parity_lab::method::can_cook_guard 37 179 call 56 1 38,42,43 +DEF foundry_parity_lab::method::can_cook_guard 35 183 call 56 1 36,37 +DEF foundry_parity_lab::method::can_cook_guard 5 183 mutcall 56 1 36,37 +DEF foundry_parity_lab::method::can_cook_guard 49 190 assign 57 1 2 +DEF foundry_parity_lab::method::can_cook_guard 50 192 assign 57 1 27 +DEF foundry_parity_lab::method::can_cook_guard 51 193 assign 57 1 49,50 +DEF foundry_parity_lab::method::can_cook_guard 48 200 assign 57 1 51 +DEF foundry_parity_lab::method::can_cook_guard 52 203 assign 57 1 48 +DEF foundry_parity_lab::method::can_cook_guard 47 210 assign 57 1 52 +DEF foundry_parity_lab::method::can_cook_guard 53 213 assign 57 1 27 +DEF foundry_parity_lab::method::can_cook_guard 54 214 assign 57 1 53 +DEF foundry_parity_lab::method::can_cook_guard 55 221 assign 57 1 53 +DEF foundry_parity_lab::method::can_cook_guard 56 222 assign 57 1 47 +DEF foundry_parity_lab::method::can_cook_guard 57 223 assign 57 1 55,56 +DEF foundry_parity_lab::method::can_cook_guard 18 230 assign 57 1 47,53 +SITE foundry_parity_lab::method::can_cook_guard 230 Div src/method.rs 57 1 47 53 +DEF foundry_parity_lab::method::can_cook_guard 59 244 assign 59 0 5 +DEF foundry_parity_lab::method::can_cook_guard 63 249 assign 59 0 3 +DEF foundry_parity_lab::method::can_cook_guard 64 250 assign 59 0 63 +DEF foundry_parity_lab::method::can_cook_guard 62 257 assign 59 0 64 +DEF foundry_parity_lab::method::can_cook_guard 61 259 assign 59 0 62 +DEF foundry_parity_lab::method::can_cook_guard 65 262 assign 59 0 - +DEF foundry_parity_lab::method::can_cook_guard 66 264 assign 59 0 18 +DEF foundry_parity_lab::method::can_cook_guard 60 265 call 59 0 61,65,66 +DEF foundry_parity_lab::method::can_cook_guard 58 269 call 59 0 59,60 +DEF foundry_parity_lab::method::can_cook_guard 5 269 mutcall 59 0 59,60 +DEF foundry_parity_lab::method::can_cook_guard 67 274 assign 60 0 5 +DEF foundry_parity_lab::method::can_cook_guard 0 275 assign 60 0 67 +ARG foundry_parity_lab::arm_a::{impl}::can_cook 1 self +ARG foundry_parity_lab::arm_a::{impl}::can_cook 2 s +ARG foundry_parity_lab::arm_a::{impl}::can_cook 3 m +ARG foundry_parity_lab::arm_a::{impl}::can_cook 4 q +DEF foundry_parity_lab::arm_a::{impl}::can_cook 7 13 assign 67 0 1 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 8 15 assign 67 0 2 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 6 16 call 67 0 7,8 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 5 19 assign 67 0 6 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 10 23 assign 68 0 5 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 9 24 assign 68 0 10 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 0 27 assign 69 0 - +DEF foundry_parity_lab::arm_a::{impl}::can_cook 12 33 assign 71 0 3 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 11 34 call 71 0 12 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 15 40 assign 72 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 14 41 call 72 0 15 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 13 43 call 72 0 14 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 17 48 assign 73 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 16 49 call 73 0 17 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 18 52 assign 73 0 16 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 22 58 assign 73 1 18 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 21 59 assign 73 1 22 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 20 60 call 73 1 21 +ELEM foundry_parity_lab::arm_a::{impl}::can_cook 20 60 core::slice::iter::{impl}::next +DEF foundry_parity_lab::arm_a::{impl}::can_cook 22 60 mutcall 73 1 21 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 23 62 assign 73 1 20 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 24 68 assign 73 1 20 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 25 70 assign 73 1 20 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 27 73 assign 74 1 5 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 28 75 assign 74 1 24 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 26 76 call 74 1 27,28 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 29 80 assign 74 1 26 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 41 83 assign 76 1 24 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 0 84 assign 76 1 41 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 30 106 assign 75 1 26 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 31 108 assign 75 1 13 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 33 111 assign 75 1 24 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 35 114 assign 75 1 30 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 36 116 assign 75 1 25 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 37 117 assign 75 1 36 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 38 124 assign 75 1 36 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 39 125 assign 75 1 35 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 40 126 assign 75 1 38,39 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 34 133 assign 75 1 35,36 +SITE foundry_parity_lab::arm_a::{impl}::can_cook 133 Div src/arm_a.rs 75 1 35 36 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 32 136 assign 75 1 33,34 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 19 139 call 75 1 31,32 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 13 139 mutcall 75 1 31,32 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 47 161 assign 79 0 5 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 48 163 assign 79 0 3 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 46 164 call 79 0 47,48 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 45 165 assign 79 0 46 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 52 173 assign 81 0 5 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 53 175 assign 81 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 51 176 call 81 0 52,53 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 50 177 assign 81 0 51 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 57 184 assign 84 0 - +DEF foundry_parity_lab::arm_a::{impl}::can_cook 56 185 assign 84 0 57 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 59 190 assign 85 0 13 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 58 191 call 85 0 59 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 60 194 assign 85 0 58 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 63 199 assign 85 1 60 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 62 200 assign 85 1 63 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 61 201 call 85 1 62 +ELEM foundry_parity_lab::arm_a::{impl}::can_cook 61 201 alloc::vec::into_iter::{impl}::next +DEF foundry_parity_lab::arm_a::{impl}::can_cook 63 201 mutcall 85 1 62 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 64 203 assign 85 1 61 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 65 207 assign 85 1 61 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 66 209 assign 85 1 61 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 68 212 assign 86 1 66 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 69 214 assign 86 1 56 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 67 215 assign 86 1 68,69 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 70 220 assign 87 1 66 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 72 223 assign 87 1 65 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 71 224 assign 87 1 72 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 56 226 assign 87 1 70,71 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 76 261 assign 90 0 5 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 77 263 assign 90 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 75 264 call 90 0 76,77 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 74 265 assign 90 0 75 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 78 269 assign 90 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 79 270 assign 90 0 74,78 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 73 277 assign 90 0 79 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 81 284 assign 91 0 73 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 82 286 assign 91 0 56 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 80 287 assign 91 0 81,82 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 83 292 assign 92 0 73 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 85 295 assign 92 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 84 296 assign 92 0 85 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 56 298 assign 92 0 83,84 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 44 304 assign 94 0 56 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 55 312 assign 82 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 54 313 assign 82 0 55 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 44 315 assign 82 0 54 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 49 322 assign 80 0 - +DEF foundry_parity_lab::arm_a::{impl}::can_cook 44 323 assign 80 0 49 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 42 327 assign 79 0 44 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 43 329 assign 79 0 44 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 87 333 assign 97 0 42 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 88 335 assign 97 0 4 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 86 336 assign 97 0 87,88 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 89 340 assign 98 0 42 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 90 342 assign 99 0 43 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 0 343 assign 96 0 86,89,90 +ARG foundry_parity_lab::arm_b::{impl}::cook_ops 1 self +ARG foundry_parity_lab::arm_b::{impl}::cook_ops 2 q +ARG foundry_parity_lab::arm_b::{impl}::cook_ops 3 g +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 159 26 assign 207 0 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 5 27 assign 207 0 159 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 7 30 assign 207 0 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 6 31 assign 207 0 7 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 4 32 call 207 0 5,6 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 9 39 assign 208 0 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 8 40 assign 208 0 9 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 42 assign 208 0 8 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 10 51 assign 210 0 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 11 54 assign 211 0 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 12 57 assign 212 0 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 14 61 assign 213 0 11 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 13 62 assign 213 0 14 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 19 70 assign 214 0 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 18 71 call 214 0 19 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 20 73 assign 214 0 18 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 17 76 assign 214 0 20 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 21 78 assign 214 0 17 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 16 81 assign 214 0 21 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 83 call 214 0 16 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 25 90 assign 215 0 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 27 93 assign 215 0 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 28 94 assign 215 0 27 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 26 99 assign 215 0 28 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 24 101 call 215 0 25,26 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 23 104 call 215 0 24 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 29 106 assign 215 0 23 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 32 109 assign 215 0 23 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 22 110 assign 215 0 32 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 36 118 assign 216 0 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 38 121 assign 216 0 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 39 122 assign 216 0 38 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 37 127 assign 216 0 39 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 35 129 call 216 0 36,37 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 34 132 call 216 0 35 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 40 134 assign 216 0 34 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 43 137 assign 216 0 34 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 33 138 assign 216 0 43 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 44 143 assign 217 0 3 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 46 147 assign 218 0 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 50 152 assign 218 0 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 49 153 call 218 0 50 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 48 155 call 218 0 49 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 51 157 assign 218 0 48 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 54 160 assign 218 0 48 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 47 161 assign 218 0 54 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 45 163 call 218 0 46,47 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 163 mutcall 218 0 46,47 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 56 170 assign 219 0 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 58 173 assign 219 0 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 60 176 assign 219 0 22 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 59 177 assign 219 0 60 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 57 178 call 219 0 58,59 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 55 182 call 219 0 56,57 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 182 mutcall 219 0 56,57 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 67 189 assign 227 0 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 69 192 assign 227 0 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 71 195 assign 227 0 33 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 70 196 assign 227 0 71 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 68 197 call 227 0 69,70 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 66 201 call 227 0 67,68 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 201 mutcall 227 0 67,68 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 73 207 assign 228 0 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 72 208 call 228 0 73 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 74 211 assign 228 0 72 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 77 216 assign 228 1 74 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 76 217 assign 228 1 77 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 75 218 call 228 1 76 +ELEM foundry_parity_lab::arm_b::{impl}::cook_ops 75 218 core::slice::iter::{impl}::next +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 77 218 mutcall 228 1 76 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 78 220 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 125 228 assign 242 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 131 235 assign 244 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 133 238 assign 244 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 134 239 assign 244 1 133 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 132 244 assign 244 1 134 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 130 246 call 244 1 131,132 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 129 249 call 244 1 130 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 135 251 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 138 254 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 128 255 assign 244 1 138 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 142 261 assign 245 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 143 263 assign 245 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 144 264 assign 245 1 142,143 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 141 269 assign 245 1 144 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 145 272 assign 245 1 141 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 140 277 assign 245 1 145 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 146 280 assign 245 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 147 281 assign 245 1 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 148 286 assign 245 1 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 149 287 assign 245 1 140 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 150 288 assign 245 1 148,149 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 139 293 assign 245 1 140,146 +SITE foundry_parity_lab::arm_b::{impl}::cook_ops 293 Div src/arm_b.rs 245 1 140 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 127 296 assign 243 1 128,139 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 151 300 assign 247 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 126 301 assign 242 1 127,151 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 124 304 call 242 1 125,126 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 304 mutcall 242 1 125,126 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 153 311 assign 250 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 155 314 assign 250 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 157 317 assign 250 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 156 318 assign 250 1 157 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 154 319 call 250 1 155,156 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 152 323 call 250 1 153,154 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 323 mutcall 250 1 153,154 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 158 328 assign 251 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 329 assign 251 1 158 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 136 346 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 137 348 assign 244 1 136 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 349 call 244 1 137 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 79 362 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 80 364 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 81 366 assign 229 1 3 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 83 370 assign 230 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 85 373 assign 230 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 90 379 assign 230 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 92 382 assign 230 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 93 383 assign 230 1 92 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 91 388 assign 230 1 93 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 89 390 call 230 1 90,91 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 88 393 call 230 1 89 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 94 395 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 97 398 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 87 399 assign 230 1 97 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 86 401 assign 230 1 87 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 84 402 call 230 1 85,86 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 82 406 call 230 1 83,84 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 406 mutcall 230 1 83,84 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 99 414 assign 232 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 105 421 assign 234 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 107 424 assign 234 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 108 425 assign 234 1 107 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 106 430 assign 234 1 108 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 104 432 call 234 1 105,106 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 103 435 call 234 1 104 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 109 437 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 112 440 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 102 441 assign 234 1 112 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 114 445 assign 235 1 80 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 115 447 assign 235 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 116 448 assign 235 1 114,115 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 113 453 assign 235 1 116 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 101 456 assign 233 1 102,113 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 117 460 assign 237 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 100 461 assign 232 1 101,117 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 98 464 call 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 464 mutcall 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 119 471 assign 240 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 121 474 assign 240 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 123 477 assign 240 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 122 478 assign 240 1 123 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 120 479 call 240 1 121,122 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 118 483 call 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 483 mutcall 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 110 493 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 111 495 assign 234 1 110 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 496 call 234 1 111 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 95 515 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 96 517 assign 230 1 95 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 518 call 230 1 96 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 99 541 assign 232 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 105 548 assign 234 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 107 551 assign 234 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 108 552 assign 234 1 107 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 106 557 assign 234 1 108 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 104 559 call 234 1 105,106 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 103 562 call 234 1 104 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 109 564 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 112 567 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 102 568 assign 234 1 112 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 114 572 assign 235 1 80 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 115 574 assign 235 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 116 575 assign 235 1 114,115 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 113 580 assign 235 1 116 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 101 583 assign 233 1 102,113 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 117 587 assign 237 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 100 588 assign 232 1 101,117 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 98 591 call 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 591 mutcall 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 119 598 assign 240 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 121 601 assign 240 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 123 604 assign 240 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 122 605 assign 240 1 123 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 120 606 call 240 1 121,122 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 118 610 call 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 610 mutcall 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 110 620 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 111 622 assign 234 1 110 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 623 call 234 1 111 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 52 644 assign 218 0 48 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 53 646 assign 218 0 52 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 647 call 218 0 53 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 62 659 assign 221 0 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 64 662 assign 222 0 22 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 65 664 assign 223 0 22 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 63 665 assign 221 0 64,65 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 61 668 call 221 0 62,63 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 668 mutcall 221 0 62,63 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 67 675 assign 227 0 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 69 678 assign 227 0 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 71 681 assign 227 0 33 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 70 682 assign 227 0 71 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 68 683 call 227 0 69,70 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 66 687 call 227 0 67,68 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 687 mutcall 227 0 67,68 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 73 693 assign 228 0 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 72 694 call 228 0 73 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 74 697 assign 228 0 72 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 77 702 assign 228 1 74 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 76 703 assign 228 1 77 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 75 704 call 228 1 76 +ELEM foundry_parity_lab::arm_b::{impl}::cook_ops 75 704 core::slice::iter::{impl}::next +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 77 704 mutcall 228 1 76 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 78 706 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 125 714 assign 242 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 131 721 assign 244 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 133 724 assign 244 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 134 725 assign 244 1 133 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 132 730 assign 244 1 134 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 130 732 call 244 1 131,132 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 129 735 call 244 1 130 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 135 737 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 138 740 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 128 741 assign 244 1 138 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 142 747 assign 245 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 143 749 assign 245 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 144 750 assign 245 1 142,143 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 141 755 assign 245 1 144 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 145 758 assign 245 1 141 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 140 763 assign 245 1 145 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 146 766 assign 245 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 147 767 assign 245 1 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 148 772 assign 245 1 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 149 773 assign 245 1 140 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 150 774 assign 245 1 148,149 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 139 779 assign 245 1 140,146 +SITE foundry_parity_lab::arm_b::{impl}::cook_ops 779 Div src/arm_b.rs 245 1 140 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 127 782 assign 243 1 128,139 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 151 786 assign 247 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 126 787 assign 242 1 127,151 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 124 790 call 242 1 125,126 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 790 mutcall 242 1 125,126 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 153 797 assign 250 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 155 800 assign 250 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 157 803 assign 250 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 156 804 assign 250 1 157 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 154 805 call 250 1 155,156 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 152 809 call 250 1 153,154 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 809 mutcall 250 1 153,154 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 158 814 assign 251 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 815 assign 251 1 158 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 136 832 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 137 834 assign 244 1 136 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 835 call 244 1 137 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 79 848 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 80 850 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 81 852 assign 229 1 3 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 83 856 assign 230 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 85 859 assign 230 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 90 865 assign 230 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 92 868 assign 230 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 93 869 assign 230 1 92 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 91 874 assign 230 1 93 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 89 876 call 230 1 90,91 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 88 879 call 230 1 89 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 94 881 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 97 884 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 87 885 assign 230 1 97 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 86 887 assign 230 1 87 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 84 888 call 230 1 85,86 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 82 892 call 230 1 83,84 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 892 mutcall 230 1 83,84 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 99 900 assign 232 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 105 907 assign 234 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 107 910 assign 234 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 108 911 assign 234 1 107 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 106 916 assign 234 1 108 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 104 918 call 234 1 105,106 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 103 921 call 234 1 104 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 109 923 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 112 926 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 102 927 assign 234 1 112 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 114 931 assign 235 1 80 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 115 933 assign 235 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 116 934 assign 235 1 114,115 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 113 939 assign 235 1 116 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 101 942 assign 233 1 102,113 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 117 946 assign 237 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 100 947 assign 232 1 101,117 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 98 950 call 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 950 mutcall 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 119 957 assign 240 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 121 960 assign 240 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 123 963 assign 240 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 122 964 assign 240 1 123 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 120 965 call 240 1 121,122 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 118 969 call 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 969 mutcall 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 110 979 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 111 981 assign 234 1 110 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 982 call 234 1 111 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 95 1001 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 96 1003 assign 230 1 95 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 1004 call 230 1 96 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 99 1027 assign 232 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 105 1034 assign 234 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 107 1037 assign 234 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 108 1038 assign 234 1 107 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 106 1043 assign 234 1 108 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 104 1045 call 234 1 105,106 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 103 1048 call 234 1 104 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 109 1050 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 112 1053 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 102 1054 assign 234 1 112 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 114 1058 assign 235 1 80 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 115 1060 assign 235 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 116 1061 assign 235 1 114,115 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 113 1066 assign 235 1 116 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 101 1069 assign 233 1 102,113 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 117 1073 assign 237 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 100 1074 assign 232 1 101,117 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 98 1077 call 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 1077 mutcall 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 119 1084 assign 240 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 121 1087 assign 240 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 123 1090 assign 240 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 122 1091 assign 240 1 123 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 120 1092 call 240 1 121,122 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 118 1096 call 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 1096 mutcall 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 110 1106 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 111 1108 assign 234 1 110 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 1109 call 234 1 111 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 41 1130 assign 216 0 34 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 42 1132 assign 216 0 41 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 1133 call 216 0 42 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 30 1141 assign 215 0 23 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 31 1143 assign 215 0 30 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 1144 call 215 0 31 +ARG foundry_parity_lab::fixture::recipe::{impl}::call_mut 1 _ +ARG foundry_parity_lab::fixture::recipe::{impl}::call_mut 2 tupled_args +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 3 14 assign 92 0 2 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 8 20 assign 94 0 1 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 9 21 assign 94 0 8 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 7 24 assign 94 0 9 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 11 28 assign 94 0 3 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 12 29 assign 94 0 11 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 10 32 assign 94 0 12 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 13 34 assign 94 0 7,10 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 6 37 assign 94 0 13 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 14 40 assign 94 0 6 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 5 43 assign 94 0 14 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 15 45 assign 94 0 - +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 4 48 assign 94 0 5 +SITE foundry_parity_lab::fixture::recipe::{impl}::call_mut 48 Rem src/fixture.rs 94 0 5 global +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 20 55 assign 95 0 3 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 19 56 assign 95 0 20 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 22 60 assign 95 0 1 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 21 61 assign 95 0 22 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 23 63 assign 95 0 19,21 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 18 66 assign 95 0 23 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 24 69 assign 95 0 - +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 25 72 assign 95 0 - +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 26 73 assign 95 0 18 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 27 74 assign 95 0 25,26 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 17 77 assign 95 0 18 +SITE foundry_parity_lab::fixture::recipe::{impl}::call_mut 77 Rem src/fixture.rs 95 0 18 const +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 28 79 assign 95 0 17 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 16 82 assign 95 0 28 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 0 84 assign 93 0 4,16 +ARG foundry_parity_lab::oracle::{impl}::can_cook 1 self +ARG foundry_parity_lab::oracle::{impl}::can_cook 2 s +ARG foundry_parity_lab::oracle::{impl}::can_cook 3 m +ARG foundry_parity_lab::oracle::{impl}::can_cook 4 q +DEF foundry_parity_lab::oracle::{impl}::can_cook 7 12 assign 46 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 6 13 call 46 0 7 +DEF foundry_parity_lab::oracle::{impl}::can_cook 5 15 assign 46 0 6 +DEF foundry_parity_lab::oracle::{impl}::can_cook 9 21 assign 49 0 3 +DEF foundry_parity_lab::oracle::{impl}::can_cook 8 22 call 49 0 9 +DEF foundry_parity_lab::oracle::{impl}::can_cook 15 31 assign 50 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 14 32 call 50 0 15 +DEF foundry_parity_lab::oracle::{impl}::can_cook 13 33 assign 50 0 14 +DEF foundry_parity_lab::oracle::{impl}::can_cook 12 35 call 50 0 13 +DEF foundry_parity_lab::oracle::{impl}::can_cook 11 36 assign 50 0 12 +DEF foundry_parity_lab::oracle::{impl}::can_cook 17 40 assign 50 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 16 41 assign 50 0 17 +DEF foundry_parity_lab::oracle::{impl}::can_cook 10 43 call 50 0 11,16 +DEF foundry_parity_lab::oracle::{impl}::can_cook 12 43 mutcall 50 0 11,16 +DEF foundry_parity_lab::oracle::{impl}::can_cook 18 46 assign 50 0 10 +DEF foundry_parity_lab::oracle::{impl}::can_cook 25 54 assign 53 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 26 56 assign 53 0 3 +DEF foundry_parity_lab::oracle::{impl}::can_cook 24 57 call 53 0 25,26 +DEF foundry_parity_lab::oracle::{impl}::can_cook 28 63 assign 53 0 1 +DEF foundry_parity_lab::oracle::{impl}::can_cook 30 66 assign 53 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 29 67 assign 53 0 30 +DEF foundry_parity_lab::oracle::{impl}::can_cook 27 68 call 53 0 28,29 +DEF foundry_parity_lab::oracle::{impl}::can_cook 31 74 assign 54 0 - +DEF foundry_parity_lab::oracle::{impl}::can_cook 23 75 assign 54 0 31 +DEF foundry_parity_lab::oracle::{impl}::can_cook 33 82 assign 55 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 34 84 assign 55 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 32 85 call 55 0 33,34 +DEF foundry_parity_lab::oracle::{impl}::can_cook 38 91 assign 60 0 - +DEF foundry_parity_lab::oracle::{impl}::can_cook 37 92 assign 60 0 38 +DEF foundry_parity_lab::oracle::{impl}::can_cook 40 97 assign 61 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 39 98 call 61 0 40 +DEF foundry_parity_lab::oracle::{impl}::can_cook 41 101 assign 61 0 39 +DEF foundry_parity_lab::oracle::{impl}::can_cook 44 106 assign 61 1 41 +DEF foundry_parity_lab::oracle::{impl}::can_cook 43 107 assign 61 1 44 +DEF foundry_parity_lab::oracle::{impl}::can_cook 42 108 call 61 1 43 +ELEM foundry_parity_lab::oracle::{impl}::can_cook 42 108 core::slice::iter::{impl}::next +DEF foundry_parity_lab::oracle::{impl}::can_cook 44 108 mutcall 61 1 43 +DEF foundry_parity_lab::oracle::{impl}::can_cook 45 110 assign 61 1 42 +DEF foundry_parity_lab::oracle::{impl}::can_cook 46 114 assign 61 1 42 +DEF foundry_parity_lab::oracle::{impl}::can_cook 47 116 assign 61 1 42 +DEF foundry_parity_lab::oracle::{impl}::can_cook 50 120 assign 62 1 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 51 122 assign 62 1 46 +DEF foundry_parity_lab::oracle::{impl}::can_cook 52 124 assign 62 1 1 +DEF foundry_parity_lab::oracle::{impl}::can_cook 49 125 call 62 1 50,51,52 +DEF foundry_parity_lab::oracle::{impl}::can_cook 53 130 assign 62 1 47 +DEF foundry_parity_lab::oracle::{impl}::can_cook 54 131 assign 62 1 53 +DEF foundry_parity_lab::oracle::{impl}::can_cook 55 136 assign 62 1 53 +DEF foundry_parity_lab::oracle::{impl}::can_cook 56 137 assign 62 1 49 +DEF foundry_parity_lab::oracle::{impl}::can_cook 57 138 assign 62 1 55,56 +DEF foundry_parity_lab::oracle::{impl}::can_cook 48 143 assign 62 1 49,53 +SITE foundry_parity_lab::oracle::{impl}::can_cook 143 Div src/oracle.rs 62 1 49 53 +DEF foundry_parity_lab::oracle::{impl}::can_cook 59 149 assign 63 1 48 +DEF foundry_parity_lab::oracle::{impl}::can_cook 60 151 assign 63 1 37 +DEF foundry_parity_lab::oracle::{impl}::can_cook 58 152 assign 63 1 59,60 +DEF foundry_parity_lab::oracle::{impl}::can_cook 61 157 assign 64 1 48 +DEF foundry_parity_lab::oracle::{impl}::can_cook 63 160 assign 64 1 46 +DEF foundry_parity_lab::oracle::{impl}::can_cook 62 161 assign 64 1 63 +DEF foundry_parity_lab::oracle::{impl}::can_cook 37 163 assign 64 1 61,62 +DEF foundry_parity_lab::oracle::{impl}::can_cook 66 184 assign 67 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 67 186 assign 67 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 65 187 call 67 0 66,67 +DEF foundry_parity_lab::oracle::{impl}::can_cook 68 191 assign 67 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 69 192 assign 67 0 65,68 +DEF foundry_parity_lab::oracle::{impl}::can_cook 64 197 assign 67 0 69 +DEF foundry_parity_lab::oracle::{impl}::can_cook 71 203 assign 68 0 64 +DEF foundry_parity_lab::oracle::{impl}::can_cook 72 205 assign 68 0 37 +DEF foundry_parity_lab::oracle::{impl}::can_cook 70 206 assign 68 0 71,72 +DEF foundry_parity_lab::oracle::{impl}::can_cook 73 211 assign 69 0 64 +DEF foundry_parity_lab::oracle::{impl}::can_cook 75 214 assign 69 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 74 215 assign 69 0 75 +DEF foundry_parity_lab::oracle::{impl}::can_cook 37 217 assign 69 0 73,74 +DEF foundry_parity_lab::oracle::{impl}::can_cook 23 223 assign 71 0 37 +DEF foundry_parity_lab::oracle::{impl}::can_cook 36 230 assign 56 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 35 231 assign 56 0 36 +DEF foundry_parity_lab::oracle::{impl}::can_cook 23 233 assign 56 0 35 +DEF foundry_parity_lab::oracle::{impl}::can_cook 31 239 assign 54 0 - +DEF foundry_parity_lab::oracle::{impl}::can_cook 23 240 assign 54 0 31 +DEF foundry_parity_lab::oracle::{impl}::can_cook 21 245 assign 53 0 23 +DEF foundry_parity_lab::oracle::{impl}::can_cook 22 247 assign 53 0 23 +DEF foundry_parity_lab::oracle::{impl}::can_cook 77 251 assign 74 0 21 +DEF foundry_parity_lab::oracle::{impl}::can_cook 78 253 assign 74 0 4 +DEF foundry_parity_lab::oracle::{impl}::can_cook 76 254 assign 74 0 77,78 +DEF foundry_parity_lab::oracle::{impl}::can_cook 79 258 assign 75 0 21 +DEF foundry_parity_lab::oracle::{impl}::can_cook 80 260 assign 76 0 22 +DEF foundry_parity_lab::oracle::{impl}::can_cook 0 261 assign 73 0 76,79,80 +DEF foundry_parity_lab::oracle::{impl}::can_cook 19 272 assign 50 0 10 +DEF foundry_parity_lab::oracle::{impl}::can_cook 20 274 assign 51 0 19 +DEF foundry_parity_lab::oracle::{impl}::can_cook 0 275 assign 51 0 20 +DEF foundry_parity_lab::oracle::{impl}::can_cook 0 286 assign 47 0 - diff --git a/crates/cg-defuse-probe/tests/data/m2.defuse.tsv b/crates/cg-defuse-probe/tests/data/m2.defuse.tsv new file mode 100644 index 000000000..204e6ffa9 --- /dev/null +++ b/crates/cg-defuse-probe/tests/data/m2.defuse.tsv @@ -0,0 +1,710 @@ +#version 1 +#schema kind fn fields +ARG foundry_parity_lab::fixture::recipe 1 m +DEF foundry_parity_lab::fixture::recipe 3 17 assign 82 0 1 +DEF foundry_parity_lab::fixture::recipe 2 18 assign 82 0 3 +DEF foundry_parity_lab::fixture::recipe 12 25 assign 91 0 - +DEF foundry_parity_lab::fixture::recipe 14 28 assign 92 0 1 +DEF foundry_parity_lab::fixture::recipe 13 29 assign 92 0 14 +DEF foundry_parity_lab::fixture::recipe 11 31 call 91 0 12,13 +DEF foundry_parity_lab::fixture::recipe 10 34 call 91 0 11 +DEF foundry_parity_lab::fixture::recipe 18 42 assign 99 0 10 +DEF foundry_parity_lab::fixture::recipe 17 43 call 99 0 18 +DEF foundry_parity_lab::fixture::recipe 10 43 mutcall 99 0 18 +DEF foundry_parity_lab::fixture::recipe 16 44 assign 99 0 17 +DEF foundry_parity_lab::fixture::recipe 15 46 call 99 0 16 +DEF foundry_parity_lab::fixture::recipe 17 46 mutcall 99 0 16 +DEF foundry_parity_lab::fixture::recipe 20 52 assign 100 0 10 +DEF foundry_parity_lab::fixture::recipe 21 54 assign 100 0 - +DEF foundry_parity_lab::fixture::recipe 19 55 call 100 0 20,21 +DEF foundry_parity_lab::fixture::recipe 10 55 mutcall 100 0 20,21 +DEF foundry_parity_lab::fixture::recipe 22 60 assign 102 0 10 +DEF foundry_parity_lab::fixture::recipe 24 63 assign 103 0 1 +DEF foundry_parity_lab::fixture::recipe 25 64 assign 103 0 - +DEF foundry_parity_lab::fixture::recipe 23 71 assign 103 0 24 +SITE foundry_parity_lab::fixture::recipe 71 Rem src/fixture.rs 103 0 24 global +DEF foundry_parity_lab::fixture::recipe 27 75 assign 104 0 1 +DEF foundry_parity_lab::fixture::recipe 28 76 assign 104 0 - +DEF foundry_parity_lab::fixture::recipe 26 83 assign 104 0 27 +SITE foundry_parity_lab::fixture::recipe 83 Rem src/fixture.rs 104 0 27 global +DEF foundry_parity_lab::fixture::recipe 32 89 assign 105 0 1 +DEF foundry_parity_lab::fixture::recipe 31 90 assign 105 0 32 +DEF foundry_parity_lab::fixture::recipe 33 92 assign 105 0 - +DEF foundry_parity_lab::fixture::recipe 34 99 assign 105 0 - +DEF foundry_parity_lab::fixture::recipe 35 100 assign 105 0 31 +DEF foundry_parity_lab::fixture::recipe 36 101 assign 105 0 34,35 +DEF foundry_parity_lab::fixture::recipe 30 108 assign 105 0 31 +SITE foundry_parity_lab::fixture::recipe 108 Rem src/fixture.rs 105 0 31 const +DEF foundry_parity_lab::fixture::recipe 37 110 assign 105 0 30 +DEF foundry_parity_lab::fixture::recipe 29 117 assign 105 0 37 +DEF foundry_parity_lab::fixture::recipe 42 124 assign 106 0 1 +DEF foundry_parity_lab::fixture::recipe 41 125 assign 106 0 42 +DEF foundry_parity_lab::fixture::recipe 43 127 assign 106 0 - +DEF foundry_parity_lab::fixture::recipe 44 134 assign 106 0 - +DEF foundry_parity_lab::fixture::recipe 45 135 assign 106 0 41 +DEF foundry_parity_lab::fixture::recipe 46 136 assign 106 0 44,45 +DEF foundry_parity_lab::fixture::recipe 40 143 assign 106 0 41 +SITE foundry_parity_lab::fixture::recipe 143 Rem src/fixture.rs 106 0 41 const +DEF foundry_parity_lab::fixture::recipe 47 145 assign 106 0 40 +DEF foundry_parity_lab::fixture::recipe 39 152 assign 106 0 47 +DEF foundry_parity_lab::fixture::recipe 48 154 assign 106 0 39 +DEF foundry_parity_lab::fixture::recipe 38 161 assign 106 0 48 +DEF foundry_parity_lab::fixture::recipe 0 163 assign 101 0 22,23,26,29,38 +DEF foundry_parity_lab::fixture::recipe 6 181 call 84 0 - +DEF foundry_parity_lab::fixture::recipe 7 183 assign 84 0 - +DEF foundry_parity_lab::fixture::recipe 8 185 assign 84 0 - +DEF foundry_parity_lab::fixture::recipe 9 187 assign 84 0 - +DEF foundry_parity_lab::fixture::recipe 6 188 assign 84 0 6,7,8,9 +DEF foundry_parity_lab::fixture::recipe 5 192 assign 84 0 6 +DEF foundry_parity_lab::fixture::recipe 4 198 call 84 0 5 +DEF foundry_parity_lab::fixture::recipe 0 200 assign 83 0 4 +ARG foundry_parity_lab::fixture::stock 1 s +ARG foundry_parity_lab::fixture::stock 2 k +ARG foundry_parity_lab::fixture::stock 3 restocked +DEF foundry_parity_lab::fixture::stock 5 6 assign 117 0 1 +DEF foundry_parity_lab::fixture::stock 4 7 call 117 0 5 +DEF foundry_parity_lab::fixture::stock 7 12 assign 117 0 2 +DEF foundry_parity_lab::fixture::stock 6 13 assign 117 0 7 +DEF foundry_parity_lab::fixture::stock 9 18 assign 118 0 1 +DEF foundry_parity_lab::fixture::stock 10 20 assign 118 0 2 +DEF foundry_parity_lab::fixture::stock 8 21 assign 118 0 9,10 +DEF foundry_parity_lab::fixture::stock 0 26 assign 119 0 - +DEF foundry_parity_lab::fixture::stock 0 27 assign 130 0 - +DEF foundry_parity_lab::fixture::stock 0 29 assign 120 0 - +DEF foundry_parity_lab::fixture::stock 0 30 assign 121 0 - +DEF foundry_parity_lab::fixture::stock 11 33 assign 123 0 3 +DEF foundry_parity_lab::fixture::stock 0 35 assign 124 0 - +DEF foundry_parity_lab::fixture::stock 0 36 assign 126 0 - +DEF foundry_parity_lab::fixture::stock 0 38 assign 130 0 - +DEF foundry_parity_lab::fixture::stock 0 40 assign 129 0 - +DEF foundry_parity_lab::fixture::stock 0 41 assign 130 0 - +DEF foundry_parity_lab::fixture::stock 0 42 assign 130 0 - +DEF foundry_parity_lab::fixture::stock 15 55 assign 133 0 1 +DEF foundry_parity_lab::fixture::stock 16 57 assign 133 0 2 +DEF foundry_parity_lab::fixture::stock 14 58 call 133 0 15,16 +DEF foundry_parity_lab::fixture::stock 17 61 assign 133 0 - +DEF foundry_parity_lab::fixture::stock 13 64 assign 133 0 14 +SITE foundry_parity_lab::fixture::stock 64 Rem src/fixture.rs 133 0 14 const +DEF foundry_parity_lab::fixture::stock 12 66 assign 133 0 13 +DEF foundry_parity_lab::fixture::stock 18 68 assign 133 0 12 +DEF foundry_parity_lab::fixture::stock 0 71 assign 133 0 18 +ARG foundry_parity_lab::fixture::unit_cost 1 s +ARG foundry_parity_lab::fixture::unit_cost 2 k +DEF foundry_parity_lab::fixture::unit_cost 6 8 assign 146 0 1 +DEF foundry_parity_lab::fixture::unit_cost 7 10 assign 146 0 2 +DEF foundry_parity_lab::fixture::unit_cost 5 11 call 146 0 6,7 +DEF foundry_parity_lab::fixture::unit_cost 8 14 assign 146 0 - +DEF foundry_parity_lab::fixture::unit_cost 4 17 assign 146 0 5 +SITE foundry_parity_lab::fixture::unit_cost 17 Rem src/fixture.rs 146 0 5 const +DEF foundry_parity_lab::fixture::unit_cost 3 19 assign 146 0 4 +DEF foundry_parity_lab::fixture::unit_cost 9 21 assign 146 0 3 +DEF foundry_parity_lab::fixture::unit_cost 0 24 assign 146 0 9 +ARG foundry_parity_lab::fixture::staff 1 s +ARG foundry_parity_lab::fixture::staff 2 j +DEF foundry_parity_lab::fixture::staff 4 5 assign 159 0 1 +DEF foundry_parity_lab::fixture::staff 3 6 call 159 0 4 +DEF foundry_parity_lab::fixture::staff 6 11 assign 159 0 2 +DEF foundry_parity_lab::fixture::staff 5 12 assign 159 0 6 +DEF foundry_parity_lab::fixture::staff 8 17 assign 160 0 1 +DEF foundry_parity_lab::fixture::staff 7 18 assign 160 0 8 +DEF foundry_parity_lab::fixture::staff 0 21 assign 160 0 - +DEF foundry_parity_lab::fixture::staff 0 23 assign 160 0 - +DEF foundry_parity_lab::fixture::staff 11 35 assign 162 0 1 +DEF foundry_parity_lab::fixture::staff 12 37 assign 162 0 2 +DEF foundry_parity_lab::fixture::staff 10 38 call 162 0 11,12 +DEF foundry_parity_lab::fixture::staff 13 41 assign 162 0 - +DEF foundry_parity_lab::fixture::staff 9 44 assign 162 0 10 +SITE foundry_parity_lab::fixture::staff 44 Rem src/fixture.rs 162 0 10 const +DEF foundry_parity_lab::fixture::staff 0 46 assign 162 0 9 +ARG foundry_parity_lab::fixture::delivery_slots 1 s +DEF foundry_parity_lab::fixture::delivery_slots 3 5 assign 175 0 1 +DEF foundry_parity_lab::fixture::delivery_slots 2 6 call 175 0 3 +DEF foundry_parity_lab::fixture::delivery_slots 6 13 assign 178 0 1 +DEF foundry_parity_lab::fixture::delivery_slots 5 14 call 178 0 6 +DEF foundry_parity_lab::fixture::delivery_slots 7 16 assign 178 0 - +DEF foundry_parity_lab::fixture::delivery_slots 4 19 assign 178 0 5 +SITE foundry_parity_lab::fixture::delivery_slots 19 Rem src/fixture.rs 178 0 5 const +DEF foundry_parity_lab::fixture::delivery_slots 0 21 assign 178 0 4 +DEF foundry_parity_lab::fixture::delivery_slots 0 25 assign 176 0 - +ARG foundry_parity_lab::fixture::delivery_minutes 1 s +DEF foundry_parity_lab::fixture::delivery_minutes 3 6 assign 183 0 1 +DEF foundry_parity_lab::fixture::delivery_minutes 2 7 call 183 0 3 +DEF foundry_parity_lab::fixture::delivery_minutes 7 15 assign 186 0 1 +DEF foundry_parity_lab::fixture::delivery_minutes 6 16 call 186 0 7 +DEF foundry_parity_lab::fixture::delivery_minutes 8 18 assign 186 0 - +DEF foundry_parity_lab::fixture::delivery_minutes 5 21 assign 186 0 6 +SITE foundry_parity_lab::fixture::delivery_minutes 21 Rem src/fixture.rs 186 0 6 const +DEF foundry_parity_lab::fixture::delivery_minutes 4 23 assign 186 0 5 +DEF foundry_parity_lab::fixture::delivery_minutes 9 25 assign 186 0 4 +DEF foundry_parity_lab::fixture::delivery_minutes 0 28 assign 186 0 9 +DEF foundry_parity_lab::fixture::delivery_minutes 0 32 assign 184 0 - +ARG foundry_parity_lab::arm_a::{impl}::can_cook 1 self +ARG foundry_parity_lab::arm_a::{impl}::can_cook 2 s +ARG foundry_parity_lab::arm_a::{impl}::can_cook 3 m +ARG foundry_parity_lab::arm_a::{impl}::can_cook 4 q +DEF foundry_parity_lab::arm_a::{impl}::can_cook 7 13 assign 67 0 1 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 8 15 assign 67 0 2 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 6 16 call 67 0 7,8 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 5 19 assign 67 0 6 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 10 23 assign 68 0 5 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 9 24 assign 68 0 10 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 0 27 assign 69 0 - +DEF foundry_parity_lab::arm_a::{impl}::can_cook 12 33 assign 71 0 3 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 11 34 call 71 0 12 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 15 40 assign 72 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 14 41 call 72 0 15 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 13 43 call 72 0 14 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 17 48 assign 73 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 16 49 call 73 0 17 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 18 52 assign 73 0 16 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 22 58 assign 73 1 18 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 21 59 assign 73 1 22 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 20 60 call 73 1 21 +ELEM foundry_parity_lab::arm_a::{impl}::can_cook 20 60 core::slice::iter::{impl}::next +DEF foundry_parity_lab::arm_a::{impl}::can_cook 22 60 mutcall 73 1 21 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 23 62 assign 73 1 20 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 24 68 assign 73 1 20 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 25 70 assign 73 1 20 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 27 73 assign 74 1 5 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 28 75 assign 74 1 24 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 26 76 call 74 1 27,28 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 29 80 assign 74 1 26 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 41 83 assign 76 1 24 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 0 84 assign 76 1 41 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 30 106 assign 75 1 26 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 31 108 assign 75 1 13 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 33 111 assign 75 1 24 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 35 114 assign 75 1 30 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 36 116 assign 75 1 25 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 37 117 assign 75 1 36 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 38 124 assign 75 1 36 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 39 125 assign 75 1 35 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 40 126 assign 75 1 38,39 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 34 133 assign 75 1 35,36 +SITE foundry_parity_lab::arm_a::{impl}::can_cook 133 Div src/arm_a.rs 75 1 35 36 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 32 136 assign 75 1 33,34 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 19 139 call 75 1 31,32 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 13 139 mutcall 75 1 31,32 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 47 161 assign 79 0 5 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 48 163 assign 79 0 3 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 46 164 call 79 0 47,48 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 45 165 assign 79 0 46 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 52 173 assign 81 0 5 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 53 175 assign 81 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 51 176 call 81 0 52,53 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 50 177 assign 81 0 51 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 57 184 assign 84 0 - +DEF foundry_parity_lab::arm_a::{impl}::can_cook 56 185 assign 84 0 57 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 59 190 assign 85 0 13 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 58 191 call 85 0 59 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 60 194 assign 85 0 58 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 63 199 assign 85 1 60 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 62 200 assign 85 1 63 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 61 201 call 85 1 62 +ELEM foundry_parity_lab::arm_a::{impl}::can_cook 61 201 alloc::vec::into_iter::{impl}::next +DEF foundry_parity_lab::arm_a::{impl}::can_cook 63 201 mutcall 85 1 62 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 64 203 assign 85 1 61 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 65 207 assign 85 1 61 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 66 209 assign 85 1 61 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 68 212 assign 86 1 66 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 69 214 assign 86 1 56 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 67 215 assign 86 1 68,69 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 70 220 assign 87 1 66 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 72 223 assign 87 1 65 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 71 224 assign 87 1 72 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 56 226 assign 87 1 70,71 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 76 261 assign 90 0 5 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 77 263 assign 90 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 75 264 call 90 0 76,77 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 74 265 assign 90 0 75 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 78 269 assign 90 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 79 270 assign 90 0 74,78 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 73 277 assign 90 0 79 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 81 284 assign 91 0 73 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 82 286 assign 91 0 56 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 80 287 assign 91 0 81,82 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 83 292 assign 92 0 73 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 85 295 assign 92 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 84 296 assign 92 0 85 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 56 298 assign 92 0 83,84 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 44 304 assign 94 0 56 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 55 312 assign 82 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 54 313 assign 82 0 55 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 44 315 assign 82 0 54 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 49 322 assign 80 0 - +DEF foundry_parity_lab::arm_a::{impl}::can_cook 44 323 assign 80 0 49 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 42 327 assign 79 0 44 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 43 329 assign 79 0 44 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 87 333 assign 97 0 42 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 88 335 assign 97 0 4 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 86 336 assign 97 0 87,88 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 89 340 assign 98 0 42 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 90 342 assign 99 0 43 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 0 343 assign 96 0 86,89,90 +ARG foundry_parity_lab::arm_b::{impl}::cook_ops 1 self +ARG foundry_parity_lab::arm_b::{impl}::cook_ops 2 q +ARG foundry_parity_lab::arm_b::{impl}::cook_ops 3 g +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 159 26 assign 207 0 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 5 27 assign 207 0 159 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 7 30 assign 207 0 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 6 31 assign 207 0 7 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 4 32 call 207 0 5,6 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 9 39 assign 208 0 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 8 40 assign 208 0 9 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 42 assign 208 0 8 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 10 51 assign 210 0 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 11 54 assign 211 0 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 12 57 assign 212 0 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 14 61 assign 213 0 11 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 13 62 assign 213 0 14 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 19 70 assign 214 0 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 18 71 call 214 0 19 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 20 73 assign 214 0 18 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 17 76 assign 214 0 20 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 21 78 assign 214 0 17 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 16 81 assign 214 0 21 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 83 call 214 0 16 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 25 90 assign 215 0 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 27 93 assign 215 0 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 28 94 assign 215 0 27 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 26 99 assign 215 0 28 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 24 101 call 215 0 25,26 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 23 104 call 215 0 24 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 29 106 assign 215 0 23 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 32 109 assign 215 0 23 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 22 110 assign 215 0 32 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 36 118 assign 216 0 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 38 121 assign 216 0 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 39 122 assign 216 0 38 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 37 127 assign 216 0 39 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 35 129 call 216 0 36,37 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 34 132 call 216 0 35 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 40 134 assign 216 0 34 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 43 137 assign 216 0 34 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 33 138 assign 216 0 43 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 44 143 assign 217 0 3 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 46 147 assign 218 0 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 50 152 assign 218 0 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 49 153 call 218 0 50 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 48 155 call 218 0 49 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 51 157 assign 218 0 48 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 54 160 assign 218 0 48 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 47 161 assign 218 0 54 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 45 163 call 218 0 46,47 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 163 mutcall 218 0 46,47 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 56 170 assign 219 0 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 58 173 assign 219 0 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 60 176 assign 219 0 22 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 59 177 assign 219 0 60 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 57 178 call 219 0 58,59 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 55 182 call 219 0 56,57 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 182 mutcall 219 0 56,57 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 67 189 assign 227 0 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 69 192 assign 227 0 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 71 195 assign 227 0 33 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 70 196 assign 227 0 71 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 68 197 call 227 0 69,70 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 66 201 call 227 0 67,68 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 201 mutcall 227 0 67,68 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 73 207 assign 228 0 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 72 208 call 228 0 73 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 74 211 assign 228 0 72 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 77 216 assign 228 1 74 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 76 217 assign 228 1 77 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 75 218 call 228 1 76 +ELEM foundry_parity_lab::arm_b::{impl}::cook_ops 75 218 core::slice::iter::{impl}::next +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 77 218 mutcall 228 1 76 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 78 220 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 125 228 assign 242 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 131 235 assign 244 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 133 238 assign 244 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 134 239 assign 244 1 133 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 132 244 assign 244 1 134 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 130 246 call 244 1 131,132 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 129 249 call 244 1 130 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 135 251 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 138 254 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 128 255 assign 244 1 138 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 142 261 assign 245 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 143 263 assign 245 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 144 264 assign 245 1 142,143 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 141 269 assign 245 1 144 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 145 272 assign 245 1 141 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 140 277 assign 245 1 145 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 146 280 assign 245 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 147 281 assign 245 1 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 148 286 assign 245 1 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 149 287 assign 245 1 140 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 150 288 assign 245 1 148,149 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 139 293 assign 245 1 140,146 +SITE foundry_parity_lab::arm_b::{impl}::cook_ops 293 Div src/arm_b.rs 245 1 140 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 127 296 assign 243 1 128,139 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 151 300 assign 247 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 126 301 assign 242 1 127,151 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 124 304 call 242 1 125,126 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 304 mutcall 242 1 125,126 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 153 311 assign 250 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 155 314 assign 250 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 157 317 assign 250 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 156 318 assign 250 1 157 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 154 319 call 250 1 155,156 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 152 323 call 250 1 153,154 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 323 mutcall 250 1 153,154 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 158 328 assign 251 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 329 assign 251 1 158 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 136 346 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 137 348 assign 244 1 136 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 349 call 244 1 137 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 79 362 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 80 364 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 81 366 assign 229 1 3 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 83 370 assign 230 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 85 373 assign 230 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 90 379 assign 230 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 92 382 assign 230 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 93 383 assign 230 1 92 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 91 388 assign 230 1 93 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 89 390 call 230 1 90,91 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 88 393 call 230 1 89 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 94 395 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 97 398 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 87 399 assign 230 1 97 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 86 401 assign 230 1 87 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 84 402 call 230 1 85,86 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 82 406 call 230 1 83,84 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 406 mutcall 230 1 83,84 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 99 414 assign 232 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 105 421 assign 234 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 107 424 assign 234 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 108 425 assign 234 1 107 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 106 430 assign 234 1 108 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 104 432 call 234 1 105,106 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 103 435 call 234 1 104 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 109 437 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 112 440 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 102 441 assign 234 1 112 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 114 445 assign 235 1 80 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 115 447 assign 235 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 116 448 assign 235 1 114,115 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 113 453 assign 235 1 116 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 101 456 assign 233 1 102,113 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 117 460 assign 237 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 100 461 assign 232 1 101,117 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 98 464 call 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 464 mutcall 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 119 471 assign 240 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 121 474 assign 240 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 123 477 assign 240 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 122 478 assign 240 1 123 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 120 479 call 240 1 121,122 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 118 483 call 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 483 mutcall 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 110 493 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 111 495 assign 234 1 110 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 496 call 234 1 111 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 95 515 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 96 517 assign 230 1 95 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 518 call 230 1 96 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 99 541 assign 232 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 105 548 assign 234 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 107 551 assign 234 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 108 552 assign 234 1 107 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 106 557 assign 234 1 108 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 104 559 call 234 1 105,106 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 103 562 call 234 1 104 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 109 564 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 112 567 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 102 568 assign 234 1 112 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 114 572 assign 235 1 80 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 115 574 assign 235 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 116 575 assign 235 1 114,115 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 113 580 assign 235 1 116 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 101 583 assign 233 1 102,113 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 117 587 assign 237 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 100 588 assign 232 1 101,117 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 98 591 call 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 591 mutcall 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 119 598 assign 240 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 121 601 assign 240 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 123 604 assign 240 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 122 605 assign 240 1 123 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 120 606 call 240 1 121,122 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 118 610 call 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 610 mutcall 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 110 620 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 111 622 assign 234 1 110 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 623 call 234 1 111 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 52 644 assign 218 0 48 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 53 646 assign 218 0 52 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 647 call 218 0 53 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 62 659 assign 221 0 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 64 662 assign 222 0 22 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 65 664 assign 223 0 22 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 63 665 assign 221 0 64,65 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 61 668 call 221 0 62,63 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 668 mutcall 221 0 62,63 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 67 675 assign 227 0 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 69 678 assign 227 0 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 71 681 assign 227 0 33 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 70 682 assign 227 0 71 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 68 683 call 227 0 69,70 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 66 687 call 227 0 67,68 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 687 mutcall 227 0 67,68 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 73 693 assign 228 0 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 72 694 call 228 0 73 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 74 697 assign 228 0 72 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 77 702 assign 228 1 74 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 76 703 assign 228 1 77 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 75 704 call 228 1 76 +ELEM foundry_parity_lab::arm_b::{impl}::cook_ops 75 704 core::slice::iter::{impl}::next +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 77 704 mutcall 228 1 76 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 78 706 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 125 714 assign 242 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 131 721 assign 244 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 133 724 assign 244 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 134 725 assign 244 1 133 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 132 730 assign 244 1 134 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 130 732 call 244 1 131,132 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 129 735 call 244 1 130 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 135 737 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 138 740 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 128 741 assign 244 1 138 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 142 747 assign 245 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 143 749 assign 245 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 144 750 assign 245 1 142,143 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 141 755 assign 245 1 144 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 145 758 assign 245 1 141 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 140 763 assign 245 1 145 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 146 766 assign 245 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 147 767 assign 245 1 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 148 772 assign 245 1 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 149 773 assign 245 1 140 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 150 774 assign 245 1 148,149 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 139 779 assign 245 1 140,146 +SITE foundry_parity_lab::arm_b::{impl}::cook_ops 779 Div src/arm_b.rs 245 1 140 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 127 782 assign 243 1 128,139 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 151 786 assign 247 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 126 787 assign 242 1 127,151 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 124 790 call 242 1 125,126 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 790 mutcall 242 1 125,126 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 153 797 assign 250 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 155 800 assign 250 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 157 803 assign 250 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 156 804 assign 250 1 157 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 154 805 call 250 1 155,156 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 152 809 call 250 1 153,154 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 809 mutcall 250 1 153,154 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 158 814 assign 251 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 815 assign 251 1 158 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 136 832 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 137 834 assign 244 1 136 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 835 call 244 1 137 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 79 848 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 80 850 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 81 852 assign 229 1 3 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 83 856 assign 230 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 85 859 assign 230 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 90 865 assign 230 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 92 868 assign 230 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 93 869 assign 230 1 92 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 91 874 assign 230 1 93 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 89 876 call 230 1 90,91 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 88 879 call 230 1 89 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 94 881 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 97 884 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 87 885 assign 230 1 97 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 86 887 assign 230 1 87 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 84 888 call 230 1 85,86 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 82 892 call 230 1 83,84 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 892 mutcall 230 1 83,84 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 99 900 assign 232 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 105 907 assign 234 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 107 910 assign 234 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 108 911 assign 234 1 107 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 106 916 assign 234 1 108 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 104 918 call 234 1 105,106 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 103 921 call 234 1 104 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 109 923 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 112 926 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 102 927 assign 234 1 112 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 114 931 assign 235 1 80 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 115 933 assign 235 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 116 934 assign 235 1 114,115 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 113 939 assign 235 1 116 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 101 942 assign 233 1 102,113 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 117 946 assign 237 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 100 947 assign 232 1 101,117 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 98 950 call 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 950 mutcall 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 119 957 assign 240 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 121 960 assign 240 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 123 963 assign 240 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 122 964 assign 240 1 123 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 120 965 call 240 1 121,122 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 118 969 call 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 969 mutcall 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 110 979 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 111 981 assign 234 1 110 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 982 call 234 1 111 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 95 1001 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 96 1003 assign 230 1 95 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 1004 call 230 1 96 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 99 1027 assign 232 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 105 1034 assign 234 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 107 1037 assign 234 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 108 1038 assign 234 1 107 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 106 1043 assign 234 1 108 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 104 1045 call 234 1 105,106 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 103 1048 call 234 1 104 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 109 1050 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 112 1053 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 102 1054 assign 234 1 112 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 114 1058 assign 235 1 80 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 115 1060 assign 235 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 116 1061 assign 235 1 114,115 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 113 1066 assign 235 1 116 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 101 1069 assign 233 1 102,113 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 117 1073 assign 237 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 100 1074 assign 232 1 101,117 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 98 1077 call 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 1077 mutcall 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 119 1084 assign 240 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 121 1087 assign 240 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 123 1090 assign 240 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 122 1091 assign 240 1 123 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 120 1092 call 240 1 121,122 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 118 1096 call 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 1096 mutcall 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 110 1106 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 111 1108 assign 234 1 110 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 1109 call 234 1 111 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 41 1130 assign 216 0 34 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 42 1132 assign 216 0 41 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 1133 call 216 0 42 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 30 1141 assign 215 0 23 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 31 1143 assign 215 0 30 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 1144 call 215 0 31 +ARG foundry_parity_lab::fixture::recipe::{impl}::call_mut 1 _ +ARG foundry_parity_lab::fixture::recipe::{impl}::call_mut 2 tupled_args +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 3 14 assign 92 0 2 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 8 20 assign 94 0 1 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 9 21 assign 94 0 8 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 7 24 assign 94 0 9 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 11 28 assign 94 0 3 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 12 29 assign 94 0 11 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 10 32 assign 94 0 12 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 13 34 assign 94 0 7,10 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 6 37 assign 94 0 13 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 14 40 assign 94 0 6 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 5 43 assign 94 0 14 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 15 45 assign 94 0 - +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 4 48 assign 94 0 5 +SITE foundry_parity_lab::fixture::recipe::{impl}::call_mut 48 Rem src/fixture.rs 94 0 5 global +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 20 55 assign 95 0 3 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 19 56 assign 95 0 20 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 22 60 assign 95 0 1 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 21 61 assign 95 0 22 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 23 63 assign 95 0 19,21 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 18 66 assign 95 0 23 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 24 69 assign 95 0 - +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 25 72 assign 95 0 - +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 26 73 assign 95 0 18 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 27 74 assign 95 0 25,26 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 17 77 assign 95 0 18 +SITE foundry_parity_lab::fixture::recipe::{impl}::call_mut 77 Rem src/fixture.rs 95 0 18 const +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 28 79 assign 95 0 17 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 16 82 assign 95 0 28 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 0 84 assign 93 0 4,16 +ARG foundry_parity_lab::oracle::{impl}::can_cook 1 self +ARG foundry_parity_lab::oracle::{impl}::can_cook 2 s +ARG foundry_parity_lab::oracle::{impl}::can_cook 3 m +ARG foundry_parity_lab::oracle::{impl}::can_cook 4 q +DEF foundry_parity_lab::oracle::{impl}::can_cook 7 12 assign 46 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 6 13 call 46 0 7 +DEF foundry_parity_lab::oracle::{impl}::can_cook 5 15 assign 46 0 6 +DEF foundry_parity_lab::oracle::{impl}::can_cook 9 21 assign 49 0 3 +DEF foundry_parity_lab::oracle::{impl}::can_cook 8 22 call 49 0 9 +DEF foundry_parity_lab::oracle::{impl}::can_cook 15 31 assign 50 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 14 32 call 50 0 15 +DEF foundry_parity_lab::oracle::{impl}::can_cook 13 33 assign 50 0 14 +DEF foundry_parity_lab::oracle::{impl}::can_cook 12 35 call 50 0 13 +DEF foundry_parity_lab::oracle::{impl}::can_cook 11 36 assign 50 0 12 +DEF foundry_parity_lab::oracle::{impl}::can_cook 17 40 assign 50 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 16 41 assign 50 0 17 +DEF foundry_parity_lab::oracle::{impl}::can_cook 10 43 call 50 0 11,16 +DEF foundry_parity_lab::oracle::{impl}::can_cook 12 43 mutcall 50 0 11,16 +DEF foundry_parity_lab::oracle::{impl}::can_cook 18 46 assign 50 0 10 +DEF foundry_parity_lab::oracle::{impl}::can_cook 25 54 assign 53 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 26 56 assign 53 0 3 +DEF foundry_parity_lab::oracle::{impl}::can_cook 24 57 call 53 0 25,26 +DEF foundry_parity_lab::oracle::{impl}::can_cook 28 63 assign 53 0 1 +DEF foundry_parity_lab::oracle::{impl}::can_cook 30 66 assign 53 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 29 67 assign 53 0 30 +DEF foundry_parity_lab::oracle::{impl}::can_cook 27 68 call 53 0 28,29 +DEF foundry_parity_lab::oracle::{impl}::can_cook 31 74 assign 54 0 - +DEF foundry_parity_lab::oracle::{impl}::can_cook 23 75 assign 54 0 31 +DEF foundry_parity_lab::oracle::{impl}::can_cook 33 82 assign 55 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 34 84 assign 55 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 32 85 call 55 0 33,34 +DEF foundry_parity_lab::oracle::{impl}::can_cook 38 91 assign 60 0 - +DEF foundry_parity_lab::oracle::{impl}::can_cook 37 92 assign 60 0 38 +DEF foundry_parity_lab::oracle::{impl}::can_cook 40 97 assign 61 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 39 98 call 61 0 40 +DEF foundry_parity_lab::oracle::{impl}::can_cook 41 101 assign 61 0 39 +DEF foundry_parity_lab::oracle::{impl}::can_cook 44 106 assign 61 1 41 +DEF foundry_parity_lab::oracle::{impl}::can_cook 43 107 assign 61 1 44 +DEF foundry_parity_lab::oracle::{impl}::can_cook 42 108 call 61 1 43 +ELEM foundry_parity_lab::oracle::{impl}::can_cook 42 108 core::slice::iter::{impl}::next +DEF foundry_parity_lab::oracle::{impl}::can_cook 44 108 mutcall 61 1 43 +DEF foundry_parity_lab::oracle::{impl}::can_cook 45 110 assign 61 1 42 +DEF foundry_parity_lab::oracle::{impl}::can_cook 46 114 assign 61 1 42 +DEF foundry_parity_lab::oracle::{impl}::can_cook 47 116 assign 61 1 42 +DEF foundry_parity_lab::oracle::{impl}::can_cook 50 120 assign 62 1 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 51 122 assign 62 1 46 +DEF foundry_parity_lab::oracle::{impl}::can_cook 52 124 assign 62 1 1 +DEF foundry_parity_lab::oracle::{impl}::can_cook 49 125 call 62 1 50,51,52 +DEF foundry_parity_lab::oracle::{impl}::can_cook 53 130 assign 62 1 47 +DEF foundry_parity_lab::oracle::{impl}::can_cook 54 131 assign 62 1 53 +DEF foundry_parity_lab::oracle::{impl}::can_cook 55 136 assign 62 1 53 +DEF foundry_parity_lab::oracle::{impl}::can_cook 56 137 assign 62 1 49 +DEF foundry_parity_lab::oracle::{impl}::can_cook 57 138 assign 62 1 55,56 +DEF foundry_parity_lab::oracle::{impl}::can_cook 48 143 assign 62 1 49,53 +SITE foundry_parity_lab::oracle::{impl}::can_cook 143 Div src/oracle.rs 62 1 49 53 +DEF foundry_parity_lab::oracle::{impl}::can_cook 59 149 assign 63 1 48 +DEF foundry_parity_lab::oracle::{impl}::can_cook 60 151 assign 63 1 37 +DEF foundry_parity_lab::oracle::{impl}::can_cook 58 152 assign 63 1 59,60 +DEF foundry_parity_lab::oracle::{impl}::can_cook 61 157 assign 64 1 48 +DEF foundry_parity_lab::oracle::{impl}::can_cook 63 160 assign 64 1 46 +DEF foundry_parity_lab::oracle::{impl}::can_cook 62 161 assign 64 1 63 +DEF foundry_parity_lab::oracle::{impl}::can_cook 37 163 assign 64 1 61,62 +DEF foundry_parity_lab::oracle::{impl}::can_cook 66 184 assign 67 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 67 186 assign 67 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 65 187 call 67 0 66,67 +DEF foundry_parity_lab::oracle::{impl}::can_cook 68 191 assign 67 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 69 192 assign 67 0 65,68 +DEF foundry_parity_lab::oracle::{impl}::can_cook 64 197 assign 67 0 69 +DEF foundry_parity_lab::oracle::{impl}::can_cook 71 203 assign 68 0 64 +DEF foundry_parity_lab::oracle::{impl}::can_cook 72 205 assign 68 0 37 +DEF foundry_parity_lab::oracle::{impl}::can_cook 70 206 assign 68 0 71,72 +DEF foundry_parity_lab::oracle::{impl}::can_cook 73 211 assign 69 0 64 +DEF foundry_parity_lab::oracle::{impl}::can_cook 75 214 assign 69 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 74 215 assign 69 0 75 +DEF foundry_parity_lab::oracle::{impl}::can_cook 37 217 assign 69 0 73,74 +DEF foundry_parity_lab::oracle::{impl}::can_cook 23 223 assign 71 0 37 +DEF foundry_parity_lab::oracle::{impl}::can_cook 36 230 assign 56 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 35 231 assign 56 0 36 +DEF foundry_parity_lab::oracle::{impl}::can_cook 23 233 assign 56 0 35 +DEF foundry_parity_lab::oracle::{impl}::can_cook 31 239 assign 54 0 - +DEF foundry_parity_lab::oracle::{impl}::can_cook 23 240 assign 54 0 31 +DEF foundry_parity_lab::oracle::{impl}::can_cook 21 245 assign 53 0 23 +DEF foundry_parity_lab::oracle::{impl}::can_cook 22 247 assign 53 0 23 +DEF foundry_parity_lab::oracle::{impl}::can_cook 77 251 assign 74 0 21 +DEF foundry_parity_lab::oracle::{impl}::can_cook 78 253 assign 74 0 4 +DEF foundry_parity_lab::oracle::{impl}::can_cook 76 254 assign 74 0 77,78 +DEF foundry_parity_lab::oracle::{impl}::can_cook 79 258 assign 75 0 21 +DEF foundry_parity_lab::oracle::{impl}::can_cook 80 260 assign 76 0 22 +DEF foundry_parity_lab::oracle::{impl}::can_cook 0 261 assign 73 0 76,79,80 +DEF foundry_parity_lab::oracle::{impl}::can_cook 19 272 assign 50 0 10 +DEF foundry_parity_lab::oracle::{impl}::can_cook 20 274 assign 51 0 19 +DEF foundry_parity_lab::oracle::{impl}::can_cook 0 275 assign 51 0 20 +DEF foundry_parity_lab::oracle::{impl}::can_cook 0 286 assign 47 0 - diff --git a/crates/cg-defuse-probe/tests/data/m3.defuse.tsv b/crates/cg-defuse-probe/tests/data/m3.defuse.tsv new file mode 100644 index 000000000..550c307ff --- /dev/null +++ b/crates/cg-defuse-probe/tests/data/m3.defuse.tsv @@ -0,0 +1,786 @@ +#version 1 +#schema kind fn fields +ARG foundry_parity_lab::fixture::recipe 1 m +DEF foundry_parity_lab::fixture::recipe 3 17 assign 82 0 1 +DEF foundry_parity_lab::fixture::recipe 2 18 assign 82 0 3 +DEF foundry_parity_lab::fixture::recipe 12 25 assign 91 0 - +DEF foundry_parity_lab::fixture::recipe 14 28 assign 92 0 1 +DEF foundry_parity_lab::fixture::recipe 13 29 assign 92 0 14 +DEF foundry_parity_lab::fixture::recipe 11 31 call 91 0 12,13 +DEF foundry_parity_lab::fixture::recipe 10 34 call 91 0 11 +DEF foundry_parity_lab::fixture::recipe 18 42 assign 99 0 10 +DEF foundry_parity_lab::fixture::recipe 17 43 call 99 0 18 +DEF foundry_parity_lab::fixture::recipe 10 43 mutcall 99 0 18 +DEF foundry_parity_lab::fixture::recipe 16 44 assign 99 0 17 +DEF foundry_parity_lab::fixture::recipe 15 46 call 99 0 16 +DEF foundry_parity_lab::fixture::recipe 17 46 mutcall 99 0 16 +DEF foundry_parity_lab::fixture::recipe 20 52 assign 100 0 10 +DEF foundry_parity_lab::fixture::recipe 21 54 assign 100 0 - +DEF foundry_parity_lab::fixture::recipe 19 55 call 100 0 20,21 +DEF foundry_parity_lab::fixture::recipe 10 55 mutcall 100 0 20,21 +DEF foundry_parity_lab::fixture::recipe 22 60 assign 102 0 10 +DEF foundry_parity_lab::fixture::recipe 24 63 assign 103 0 1 +DEF foundry_parity_lab::fixture::recipe 25 64 assign 103 0 - +DEF foundry_parity_lab::fixture::recipe 23 71 assign 103 0 24 +SITE foundry_parity_lab::fixture::recipe 71 Rem src/fixture.rs 103 0 24 global +DEF foundry_parity_lab::fixture::recipe 27 75 assign 104 0 1 +DEF foundry_parity_lab::fixture::recipe 28 76 assign 104 0 - +DEF foundry_parity_lab::fixture::recipe 26 83 assign 104 0 27 +SITE foundry_parity_lab::fixture::recipe 83 Rem src/fixture.rs 104 0 27 global +DEF foundry_parity_lab::fixture::recipe 32 89 assign 105 0 1 +DEF foundry_parity_lab::fixture::recipe 31 90 assign 105 0 32 +DEF foundry_parity_lab::fixture::recipe 33 92 assign 105 0 - +DEF foundry_parity_lab::fixture::recipe 34 99 assign 105 0 - +DEF foundry_parity_lab::fixture::recipe 35 100 assign 105 0 31 +DEF foundry_parity_lab::fixture::recipe 36 101 assign 105 0 34,35 +DEF foundry_parity_lab::fixture::recipe 30 108 assign 105 0 31 +SITE foundry_parity_lab::fixture::recipe 108 Rem src/fixture.rs 105 0 31 const +DEF foundry_parity_lab::fixture::recipe 37 110 assign 105 0 30 +DEF foundry_parity_lab::fixture::recipe 29 117 assign 105 0 37 +DEF foundry_parity_lab::fixture::recipe 42 124 assign 106 0 1 +DEF foundry_parity_lab::fixture::recipe 41 125 assign 106 0 42 +DEF foundry_parity_lab::fixture::recipe 43 127 assign 106 0 - +DEF foundry_parity_lab::fixture::recipe 44 134 assign 106 0 - +DEF foundry_parity_lab::fixture::recipe 45 135 assign 106 0 41 +DEF foundry_parity_lab::fixture::recipe 46 136 assign 106 0 44,45 +DEF foundry_parity_lab::fixture::recipe 40 143 assign 106 0 41 +SITE foundry_parity_lab::fixture::recipe 143 Rem src/fixture.rs 106 0 41 const +DEF foundry_parity_lab::fixture::recipe 47 145 assign 106 0 40 +DEF foundry_parity_lab::fixture::recipe 39 152 assign 106 0 47 +DEF foundry_parity_lab::fixture::recipe 48 154 assign 106 0 39 +DEF foundry_parity_lab::fixture::recipe 38 161 assign 106 0 48 +DEF foundry_parity_lab::fixture::recipe 0 163 assign 101 0 22,23,26,29,38 +DEF foundry_parity_lab::fixture::recipe 6 181 call 84 0 - +DEF foundry_parity_lab::fixture::recipe 7 183 assign 84 0 - +DEF foundry_parity_lab::fixture::recipe 8 185 assign 84 0 - +DEF foundry_parity_lab::fixture::recipe 9 187 assign 84 0 - +DEF foundry_parity_lab::fixture::recipe 6 188 assign 84 0 6,7,8,9 +DEF foundry_parity_lab::fixture::recipe 5 192 assign 84 0 6 +DEF foundry_parity_lab::fixture::recipe 4 198 call 84 0 5 +DEF foundry_parity_lab::fixture::recipe 0 200 assign 83 0 4 +ARG foundry_parity_lab::fixture::stock 1 s +ARG foundry_parity_lab::fixture::stock 2 k +ARG foundry_parity_lab::fixture::stock 3 restocked +DEF foundry_parity_lab::fixture::stock 5 6 assign 117 0 1 +DEF foundry_parity_lab::fixture::stock 4 7 call 117 0 5 +DEF foundry_parity_lab::fixture::stock 7 12 assign 117 0 2 +DEF foundry_parity_lab::fixture::stock 6 13 assign 117 0 7 +DEF foundry_parity_lab::fixture::stock 9 18 assign 118 0 1 +DEF foundry_parity_lab::fixture::stock 10 20 assign 118 0 2 +DEF foundry_parity_lab::fixture::stock 8 21 assign 118 0 9,10 +DEF foundry_parity_lab::fixture::stock 0 26 assign 119 0 - +DEF foundry_parity_lab::fixture::stock 0 27 assign 130 0 - +DEF foundry_parity_lab::fixture::stock 0 29 assign 120 0 - +DEF foundry_parity_lab::fixture::stock 0 30 assign 121 0 - +DEF foundry_parity_lab::fixture::stock 11 33 assign 123 0 3 +DEF foundry_parity_lab::fixture::stock 0 35 assign 124 0 - +DEF foundry_parity_lab::fixture::stock 0 36 assign 126 0 - +DEF foundry_parity_lab::fixture::stock 0 38 assign 130 0 - +DEF foundry_parity_lab::fixture::stock 0 40 assign 129 0 - +DEF foundry_parity_lab::fixture::stock 0 41 assign 130 0 - +DEF foundry_parity_lab::fixture::stock 0 42 assign 130 0 - +DEF foundry_parity_lab::fixture::stock 15 55 assign 133 0 1 +DEF foundry_parity_lab::fixture::stock 16 57 assign 133 0 2 +DEF foundry_parity_lab::fixture::stock 14 58 call 133 0 15,16 +DEF foundry_parity_lab::fixture::stock 17 61 assign 133 0 - +DEF foundry_parity_lab::fixture::stock 13 64 assign 133 0 14 +SITE foundry_parity_lab::fixture::stock 64 Rem src/fixture.rs 133 0 14 const +DEF foundry_parity_lab::fixture::stock 12 66 assign 133 0 13 +DEF foundry_parity_lab::fixture::stock 18 68 assign 133 0 12 +DEF foundry_parity_lab::fixture::stock 0 71 assign 133 0 18 +ARG foundry_parity_lab::fixture::unit_cost 1 s +ARG foundry_parity_lab::fixture::unit_cost 2 k +DEF foundry_parity_lab::fixture::unit_cost 6 8 assign 146 0 1 +DEF foundry_parity_lab::fixture::unit_cost 7 10 assign 146 0 2 +DEF foundry_parity_lab::fixture::unit_cost 5 11 call 146 0 6,7 +DEF foundry_parity_lab::fixture::unit_cost 8 14 assign 146 0 - +DEF foundry_parity_lab::fixture::unit_cost 4 17 assign 146 0 5 +SITE foundry_parity_lab::fixture::unit_cost 17 Rem src/fixture.rs 146 0 5 const +DEF foundry_parity_lab::fixture::unit_cost 3 19 assign 146 0 4 +DEF foundry_parity_lab::fixture::unit_cost 9 21 assign 146 0 3 +DEF foundry_parity_lab::fixture::unit_cost 0 24 assign 146 0 9 +ARG foundry_parity_lab::fixture::staff 1 s +ARG foundry_parity_lab::fixture::staff 2 j +DEF foundry_parity_lab::fixture::staff 4 5 assign 159 0 1 +DEF foundry_parity_lab::fixture::staff 3 6 call 159 0 4 +DEF foundry_parity_lab::fixture::staff 6 11 assign 159 0 2 +DEF foundry_parity_lab::fixture::staff 5 12 assign 159 0 6 +DEF foundry_parity_lab::fixture::staff 8 17 assign 160 0 1 +DEF foundry_parity_lab::fixture::staff 7 18 assign 160 0 8 +DEF foundry_parity_lab::fixture::staff 0 21 assign 160 0 - +DEF foundry_parity_lab::fixture::staff 0 23 assign 160 0 - +DEF foundry_parity_lab::fixture::staff 11 35 assign 162 0 1 +DEF foundry_parity_lab::fixture::staff 12 37 assign 162 0 2 +DEF foundry_parity_lab::fixture::staff 10 38 call 162 0 11,12 +DEF foundry_parity_lab::fixture::staff 13 41 assign 162 0 - +DEF foundry_parity_lab::fixture::staff 9 44 assign 162 0 10 +SITE foundry_parity_lab::fixture::staff 44 Rem src/fixture.rs 162 0 10 const +DEF foundry_parity_lab::fixture::staff 0 46 assign 162 0 9 +ARG foundry_parity_lab::fixture::delivery_slots 1 s +DEF foundry_parity_lab::fixture::delivery_slots 3 5 assign 175 0 1 +DEF foundry_parity_lab::fixture::delivery_slots 2 6 call 175 0 3 +DEF foundry_parity_lab::fixture::delivery_slots 6 13 assign 178 0 1 +DEF foundry_parity_lab::fixture::delivery_slots 5 14 call 178 0 6 +DEF foundry_parity_lab::fixture::delivery_slots 7 16 assign 178 0 - +DEF foundry_parity_lab::fixture::delivery_slots 4 19 assign 178 0 5 +SITE foundry_parity_lab::fixture::delivery_slots 19 Rem src/fixture.rs 178 0 5 const +DEF foundry_parity_lab::fixture::delivery_slots 0 21 assign 178 0 4 +DEF foundry_parity_lab::fixture::delivery_slots 0 25 assign 176 0 - +ARG foundry_parity_lab::fixture::delivery_minutes 1 s +DEF foundry_parity_lab::fixture::delivery_minutes 3 6 assign 183 0 1 +DEF foundry_parity_lab::fixture::delivery_minutes 2 7 call 183 0 3 +DEF foundry_parity_lab::fixture::delivery_minutes 7 15 assign 186 0 1 +DEF foundry_parity_lab::fixture::delivery_minutes 6 16 call 186 0 7 +DEF foundry_parity_lab::fixture::delivery_minutes 8 18 assign 186 0 - +DEF foundry_parity_lab::fixture::delivery_minutes 5 21 assign 186 0 6 +SITE foundry_parity_lab::fixture::delivery_minutes 21 Rem src/fixture.rs 186 0 6 const +DEF foundry_parity_lab::fixture::delivery_minutes 4 23 assign 186 0 5 +DEF foundry_parity_lab::fixture::delivery_minutes 9 25 assign 186 0 4 +DEF foundry_parity_lab::fixture::delivery_minutes 0 28 assign 186 0 9 +DEF foundry_parity_lab::fixture::delivery_minutes 0 32 assign 184 0 - +ARG foundry_parity_lab::method::can_cook_guard 1 m +ARG foundry_parity_lab::method::can_cook_guard 2 q +DEF foundry_parity_lab::method::can_cook_guard 4 17 assign 48 0 1 +DEF foundry_parity_lab::method::can_cook_guard 3 18 call 48 0 4 +DEF foundry_parity_lab::method::can_cook_guard 7 24 call 49 0 - +DEF foundry_parity_lab::method::can_cook_guard 11 29 assign 50 0 1 +DEF foundry_parity_lab::method::can_cook_guard 12 30 assign 50 0 11 +DEF foundry_parity_lab::method::can_cook_guard 10 37 assign 50 0 12 +DEF foundry_parity_lab::method::can_cook_guard 9 39 assign 50 0 10 +DEF foundry_parity_lab::method::can_cook_guard 8 41 assign 50 0 9 +DEF foundry_parity_lab::method::can_cook_guard 16 47 assign 51 0 3 +DEF foundry_parity_lab::method::can_cook_guard 17 48 assign 51 0 16 +DEF foundry_parity_lab::method::can_cook_guard 15 57 assign 51 0 17 +DEF foundry_parity_lab::method::can_cook_guard 14 59 assign 51 0 15 +DEF foundry_parity_lab::method::can_cook_guard 13 61 assign 51 0 14 +DEF foundry_parity_lab::method::can_cook_guard 7 63 assign 49 0 7,8,13 +DEF foundry_parity_lab::method::can_cook_guard 6 80 assign 49 0 7 +DEF foundry_parity_lab::method::can_cook_guard 5 88 call 49 0 6 +DEF foundry_parity_lab::method::can_cook_guard 18 92 assign 53 0 - +DEF foundry_parity_lab::method::can_cook_guard 20 96 assign 54 0 3 +DEF foundry_parity_lab::method::can_cook_guard 19 97 call 54 0 20 +DEF foundry_parity_lab::method::can_cook_guard 21 100 assign 54 0 19 +DEF foundry_parity_lab::method::can_cook_guard 24 105 assign 54 1 21 +DEF foundry_parity_lab::method::can_cook_guard 23 106 assign 54 1 24 +DEF foundry_parity_lab::method::can_cook_guard 22 107 call 54 1 23 +ELEM foundry_parity_lab::method::can_cook_guard 22 107 core::slice::iter::{impl}::next +DEF foundry_parity_lab::method::can_cook_guard 24 107 mutcall 54 1 23 +DEF foundry_parity_lab::method::can_cook_guard 25 109 assign 54 1 22 +DEF foundry_parity_lab::method::can_cook_guard 26 115 assign 54 1 22 +DEF foundry_parity_lab::method::can_cook_guard 27 117 assign 54 1 22 +DEF foundry_parity_lab::method::can_cook_guard 29 120 assign 55 1 5 +DEF foundry_parity_lab::method::can_cook_guard 33 125 assign 55 1 26 +DEF foundry_parity_lab::method::can_cook_guard 34 126 assign 55 1 33 +DEF foundry_parity_lab::method::can_cook_guard 32 133 assign 55 1 34 +DEF foundry_parity_lab::method::can_cook_guard 31 135 assign 55 1 32 +DEF foundry_parity_lab::method::can_cook_guard 30 137 assign 55 1 31 +DEF foundry_parity_lab::method::can_cook_guard 28 139 call 55 1 29,30 +DEF foundry_parity_lab::method::can_cook_guard 5 139 mutcall 55 1 29,30 +DEF foundry_parity_lab::method::can_cook_guard 36 145 assign 56 1 5 +DEF foundry_parity_lab::method::can_cook_guard 40 150 assign 56 1 26 +DEF foundry_parity_lab::method::can_cook_guard 41 151 assign 56 1 40 +DEF foundry_parity_lab::method::can_cook_guard 39 158 assign 56 1 41 +DEF foundry_parity_lab::method::can_cook_guard 38 160 assign 56 1 39 +DEF foundry_parity_lab::method::can_cook_guard 42 163 assign 56 1 - +DEF foundry_parity_lab::method::can_cook_guard 44 166 assign 56 1 27 +DEF foundry_parity_lab::method::can_cook_guard 45 168 assign 56 1 2 +DEF foundry_parity_lab::method::can_cook_guard 46 169 assign 56 1 44,45 +DEF foundry_parity_lab::method::can_cook_guard 43 176 assign 56 1 46 +DEF foundry_parity_lab::method::can_cook_guard 37 179 call 56 1 38,42,43 +DEF foundry_parity_lab::method::can_cook_guard 35 183 call 56 1 36,37 +DEF foundry_parity_lab::method::can_cook_guard 5 183 mutcall 56 1 36,37 +DEF foundry_parity_lab::method::can_cook_guard 49 190 assign 57 1 2 +DEF foundry_parity_lab::method::can_cook_guard 50 192 assign 57 1 3 +DEF foundry_parity_lab::method::can_cook_guard 51 193 assign 57 1 49,50 +DEF foundry_parity_lab::method::can_cook_guard 48 200 assign 57 1 51 +DEF foundry_parity_lab::method::can_cook_guard 52 203 assign 57 1 48 +DEF foundry_parity_lab::method::can_cook_guard 47 210 assign 57 1 52 +DEF foundry_parity_lab::method::can_cook_guard 53 213 assign 57 1 3 +DEF foundry_parity_lab::method::can_cook_guard 54 214 assign 57 1 53 +DEF foundry_parity_lab::method::can_cook_guard 55 221 assign 57 1 53 +DEF foundry_parity_lab::method::can_cook_guard 56 222 assign 57 1 47 +DEF foundry_parity_lab::method::can_cook_guard 57 223 assign 57 1 55,56 +DEF foundry_parity_lab::method::can_cook_guard 18 230 assign 57 1 47,53 +SITE foundry_parity_lab::method::can_cook_guard 230 Div src/method.rs 57 1 47 53 +DEF foundry_parity_lab::method::can_cook_guard 59 244 assign 59 0 5 +DEF foundry_parity_lab::method::can_cook_guard 63 249 assign 59 0 3 +DEF foundry_parity_lab::method::can_cook_guard 64 250 assign 59 0 63 +DEF foundry_parity_lab::method::can_cook_guard 62 257 assign 59 0 64 +DEF foundry_parity_lab::method::can_cook_guard 61 259 assign 59 0 62 +DEF foundry_parity_lab::method::can_cook_guard 65 262 assign 59 0 - +DEF foundry_parity_lab::method::can_cook_guard 66 264 assign 59 0 18 +DEF foundry_parity_lab::method::can_cook_guard 60 265 call 59 0 61,65,66 +DEF foundry_parity_lab::method::can_cook_guard 58 269 call 59 0 59,60 +DEF foundry_parity_lab::method::can_cook_guard 5 269 mutcall 59 0 59,60 +DEF foundry_parity_lab::method::can_cook_guard 67 274 assign 60 0 5 +DEF foundry_parity_lab::method::can_cook_guard 0 275 assign 60 0 67 +ARG foundry_parity_lab::arm_a::{impl}::can_cook 1 self +ARG foundry_parity_lab::arm_a::{impl}::can_cook 2 s +ARG foundry_parity_lab::arm_a::{impl}::can_cook 3 m +ARG foundry_parity_lab::arm_a::{impl}::can_cook 4 q +DEF foundry_parity_lab::arm_a::{impl}::can_cook 7 13 assign 67 0 1 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 8 15 assign 67 0 2 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 6 16 call 67 0 7,8 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 5 19 assign 67 0 6 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 10 23 assign 68 0 5 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 9 24 assign 68 0 10 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 0 27 assign 69 0 - +DEF foundry_parity_lab::arm_a::{impl}::can_cook 12 33 assign 71 0 3 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 11 34 call 71 0 12 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 15 40 assign 72 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 14 41 call 72 0 15 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 13 43 call 72 0 14 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 17 48 assign 73 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 16 49 call 73 0 17 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 18 52 assign 73 0 16 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 22 58 assign 73 1 18 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 21 59 assign 73 1 22 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 20 60 call 73 1 21 +ELEM foundry_parity_lab::arm_a::{impl}::can_cook 20 60 core::slice::iter::{impl}::next +DEF foundry_parity_lab::arm_a::{impl}::can_cook 22 60 mutcall 73 1 21 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 23 62 assign 73 1 20 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 24 68 assign 73 1 20 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 25 70 assign 73 1 20 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 27 73 assign 74 1 5 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 28 75 assign 74 1 24 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 26 76 call 74 1 27,28 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 29 80 assign 74 1 26 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 41 83 assign 76 1 24 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 0 84 assign 76 1 41 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 30 106 assign 75 1 26 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 31 108 assign 75 1 13 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 33 111 assign 75 1 24 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 35 114 assign 75 1 30 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 36 116 assign 75 1 25 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 37 117 assign 75 1 36 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 38 124 assign 75 1 36 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 39 125 assign 75 1 35 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 40 126 assign 75 1 38,39 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 34 133 assign 75 1 35,36 +SITE foundry_parity_lab::arm_a::{impl}::can_cook 133 Div src/arm_a.rs 75 1 35 36 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 32 136 assign 75 1 33,34 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 19 139 call 75 1 31,32 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 13 139 mutcall 75 1 31,32 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 47 161 assign 79 0 5 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 48 163 assign 79 0 3 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 46 164 call 79 0 47,48 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 45 165 assign 79 0 46 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 52 173 assign 81 0 5 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 53 175 assign 81 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 51 176 call 81 0 52,53 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 50 177 assign 81 0 51 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 57 184 assign 84 0 - +DEF foundry_parity_lab::arm_a::{impl}::can_cook 56 185 assign 84 0 57 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 59 190 assign 85 0 13 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 58 191 call 85 0 59 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 60 194 assign 85 0 58 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 63 199 assign 85 1 60 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 62 200 assign 85 1 63 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 61 201 call 85 1 62 +ELEM foundry_parity_lab::arm_a::{impl}::can_cook 61 201 alloc::vec::into_iter::{impl}::next +DEF foundry_parity_lab::arm_a::{impl}::can_cook 63 201 mutcall 85 1 62 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 64 203 assign 85 1 61 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 65 207 assign 85 1 61 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 66 209 assign 85 1 61 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 68 212 assign 86 1 66 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 69 214 assign 86 1 56 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 67 215 assign 86 1 68,69 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 70 220 assign 87 1 66 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 72 223 assign 87 1 65 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 71 224 assign 87 1 72 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 56 226 assign 87 1 70,71 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 76 261 assign 90 0 5 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 77 263 assign 90 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 75 264 call 90 0 76,77 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 74 265 assign 90 0 75 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 78 269 assign 90 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 79 270 assign 90 0 74,78 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 73 277 assign 90 0 79 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 81 284 assign 91 0 73 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 82 286 assign 91 0 56 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 80 287 assign 91 0 81,82 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 83 292 assign 92 0 73 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 85 295 assign 92 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 84 296 assign 92 0 85 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 56 298 assign 92 0 83,84 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 44 304 assign 94 0 56 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 55 312 assign 82 0 11 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 54 313 assign 82 0 55 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 44 315 assign 82 0 54 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 49 322 assign 80 0 - +DEF foundry_parity_lab::arm_a::{impl}::can_cook 44 323 assign 80 0 49 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 42 327 assign 79 0 44 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 43 329 assign 79 0 44 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 87 333 assign 97 0 42 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 88 335 assign 97 0 4 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 86 336 assign 97 0 87,88 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 89 340 assign 98 0 42 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 90 342 assign 99 0 43 +DEF foundry_parity_lab::arm_a::{impl}::can_cook 0 343 assign 96 0 86,89,90 +ARG foundry_parity_lab::arm_b::{impl}::cook_ops 1 self +ARG foundry_parity_lab::arm_b::{impl}::cook_ops 2 q +ARG foundry_parity_lab::arm_b::{impl}::cook_ops 3 g +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 159 26 assign 207 0 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 5 27 assign 207 0 159 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 7 30 assign 207 0 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 6 31 assign 207 0 7 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 4 32 call 207 0 5,6 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 9 39 assign 208 0 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 8 40 assign 208 0 9 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 42 assign 208 0 8 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 10 51 assign 210 0 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 11 54 assign 211 0 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 12 57 assign 212 0 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 14 61 assign 213 0 11 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 13 62 assign 213 0 14 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 19 70 assign 214 0 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 18 71 call 214 0 19 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 20 73 assign 214 0 18 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 17 76 assign 214 0 20 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 21 78 assign 214 0 17 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 16 81 assign 214 0 21 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 83 call 214 0 16 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 25 90 assign 215 0 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 27 93 assign 215 0 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 28 94 assign 215 0 27 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 26 99 assign 215 0 28 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 24 101 call 215 0 25,26 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 23 104 call 215 0 24 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 29 106 assign 215 0 23 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 32 109 assign 215 0 23 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 22 110 assign 215 0 32 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 36 118 assign 216 0 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 38 121 assign 216 0 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 39 122 assign 216 0 38 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 37 127 assign 216 0 39 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 35 129 call 216 0 36,37 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 34 132 call 216 0 35 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 40 134 assign 216 0 34 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 43 137 assign 216 0 34 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 33 138 assign 216 0 43 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 44 143 assign 217 0 3 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 46 147 assign 218 0 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 50 152 assign 218 0 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 49 153 call 218 0 50 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 48 155 call 218 0 49 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 51 157 assign 218 0 48 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 54 160 assign 218 0 48 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 47 161 assign 218 0 54 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 45 163 call 218 0 46,47 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 163 mutcall 218 0 46,47 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 56 170 assign 219 0 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 58 173 assign 219 0 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 60 176 assign 219 0 22 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 59 177 assign 219 0 60 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 57 178 call 219 0 58,59 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 55 182 call 219 0 56,57 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 182 mutcall 219 0 56,57 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 67 189 assign 227 0 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 69 192 assign 227 0 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 71 195 assign 227 0 33 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 70 196 assign 227 0 71 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 68 197 call 227 0 69,70 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 66 201 call 227 0 67,68 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 201 mutcall 227 0 67,68 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 73 207 assign 228 0 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 72 208 call 228 0 73 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 74 211 assign 228 0 72 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 77 216 assign 228 1 74 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 76 217 assign 228 1 77 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 75 218 call 228 1 76 +ELEM foundry_parity_lab::arm_b::{impl}::cook_ops 75 218 core::slice::iter::{impl}::next +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 77 218 mutcall 228 1 76 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 78 220 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 125 228 assign 242 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 131 235 assign 244 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 133 238 assign 244 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 134 239 assign 244 1 133 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 132 244 assign 244 1 134 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 130 246 call 244 1 131,132 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 129 249 call 244 1 130 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 135 251 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 138 254 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 128 255 assign 244 1 138 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 142 261 assign 245 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 143 263 assign 245 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 144 264 assign 245 1 142,143 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 141 269 assign 245 1 144 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 145 272 assign 245 1 141 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 140 277 assign 245 1 145 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 146 280 assign 245 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 147 281 assign 245 1 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 148 286 assign 245 1 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 149 287 assign 245 1 140 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 150 288 assign 245 1 148,149 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 139 293 assign 245 1 140,146 +SITE foundry_parity_lab::arm_b::{impl}::cook_ops 293 Div src/arm_b.rs 245 1 140 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 127 296 assign 243 1 128,139 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 151 300 assign 247 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 126 301 assign 242 1 127,151 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 124 304 call 242 1 125,126 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 304 mutcall 242 1 125,126 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 153 311 assign 250 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 155 314 assign 250 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 157 317 assign 250 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 156 318 assign 250 1 157 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 154 319 call 250 1 155,156 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 152 323 call 250 1 153,154 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 323 mutcall 250 1 153,154 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 158 328 assign 251 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 329 assign 251 1 158 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 136 346 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 137 348 assign 244 1 136 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 349 call 244 1 137 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 79 362 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 80 364 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 81 366 assign 229 1 3 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 83 370 assign 230 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 85 373 assign 230 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 90 379 assign 230 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 92 382 assign 230 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 93 383 assign 230 1 92 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 91 388 assign 230 1 93 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 89 390 call 230 1 90,91 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 88 393 call 230 1 89 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 94 395 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 97 398 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 87 399 assign 230 1 97 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 86 401 assign 230 1 87 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 84 402 call 230 1 85,86 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 82 406 call 230 1 83,84 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 406 mutcall 230 1 83,84 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 99 414 assign 232 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 105 421 assign 234 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 107 424 assign 234 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 108 425 assign 234 1 107 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 106 430 assign 234 1 108 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 104 432 call 234 1 105,106 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 103 435 call 234 1 104 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 109 437 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 112 440 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 102 441 assign 234 1 112 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 114 445 assign 235 1 80 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 115 447 assign 235 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 116 448 assign 235 1 114,115 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 113 453 assign 235 1 116 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 101 456 assign 233 1 102,113 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 117 460 assign 237 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 100 461 assign 232 1 101,117 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 98 464 call 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 464 mutcall 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 119 471 assign 240 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 121 474 assign 240 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 123 477 assign 240 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 122 478 assign 240 1 123 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 120 479 call 240 1 121,122 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 118 483 call 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 483 mutcall 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 110 493 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 111 495 assign 234 1 110 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 496 call 234 1 111 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 95 515 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 96 517 assign 230 1 95 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 518 call 230 1 96 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 99 541 assign 232 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 105 548 assign 234 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 107 551 assign 234 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 108 552 assign 234 1 107 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 106 557 assign 234 1 108 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 104 559 call 234 1 105,106 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 103 562 call 234 1 104 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 109 564 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 112 567 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 102 568 assign 234 1 112 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 114 572 assign 235 1 80 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 115 574 assign 235 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 116 575 assign 235 1 114,115 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 113 580 assign 235 1 116 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 101 583 assign 233 1 102,113 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 117 587 assign 237 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 100 588 assign 232 1 101,117 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 98 591 call 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 591 mutcall 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 119 598 assign 240 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 121 601 assign 240 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 123 604 assign 240 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 122 605 assign 240 1 123 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 120 606 call 240 1 121,122 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 118 610 call 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 610 mutcall 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 110 620 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 111 622 assign 234 1 110 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 623 call 234 1 111 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 52 644 assign 218 0 48 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 53 646 assign 218 0 52 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 647 call 218 0 53 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 62 659 assign 221 0 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 64 662 assign 222 0 22 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 65 664 assign 223 0 22 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 63 665 assign 221 0 64,65 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 61 668 call 221 0 62,63 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 668 mutcall 221 0 62,63 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 67 675 assign 227 0 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 69 678 assign 227 0 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 71 681 assign 227 0 33 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 70 682 assign 227 0 71 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 68 683 call 227 0 69,70 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 66 687 call 227 0 67,68 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 687 mutcall 227 0 67,68 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 73 693 assign 228 0 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 72 694 call 228 0 73 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 74 697 assign 228 0 72 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 77 702 assign 228 1 74 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 76 703 assign 228 1 77 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 75 704 call 228 1 76 +ELEM foundry_parity_lab::arm_b::{impl}::cook_ops 75 704 core::slice::iter::{impl}::next +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 77 704 mutcall 228 1 76 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 78 706 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 125 714 assign 242 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 131 721 assign 244 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 133 724 assign 244 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 134 725 assign 244 1 133 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 132 730 assign 244 1 134 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 130 732 call 244 1 131,132 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 129 735 call 244 1 130 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 135 737 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 138 740 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 128 741 assign 244 1 138 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 142 747 assign 245 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 143 749 assign 245 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 144 750 assign 245 1 142,143 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 141 755 assign 245 1 144 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 145 758 assign 245 1 141 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 140 763 assign 245 1 145 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 146 766 assign 245 1 10 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 147 767 assign 245 1 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 148 772 assign 245 1 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 149 773 assign 245 1 140 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 150 774 assign 245 1 148,149 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 139 779 assign 245 1 140,146 +SITE foundry_parity_lab::arm_b::{impl}::cook_ops 779 Div src/arm_b.rs 245 1 140 146 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 127 782 assign 243 1 128,139 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 151 786 assign 247 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 126 787 assign 242 1 127,151 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 124 790 call 242 1 125,126 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 790 mutcall 242 1 125,126 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 153 797 assign 250 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 155 800 assign 250 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 157 803 assign 250 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 156 804 assign 250 1 157 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 154 805 call 250 1 155,156 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 152 809 call 250 1 153,154 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 809 mutcall 250 1 153,154 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 158 814 assign 251 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 815 assign 251 1 158 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 136 832 assign 244 1 129 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 137 834 assign 244 1 136 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 835 call 244 1 137 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 79 848 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 80 850 assign 228 1 75 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 81 852 assign 229 1 3 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 83 856 assign 230 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 85 859 assign 230 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 90 865 assign 230 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 92 868 assign 230 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 93 869 assign 230 1 92 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 91 874 assign 230 1 93 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 89 876 call 230 1 90,91 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 88 879 call 230 1 89 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 94 881 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 97 884 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 87 885 assign 230 1 97 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 86 887 assign 230 1 87 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 84 888 call 230 1 85,86 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 82 892 call 230 1 83,84 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 892 mutcall 230 1 83,84 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 99 900 assign 232 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 105 907 assign 234 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 107 910 assign 234 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 108 911 assign 234 1 107 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 106 916 assign 234 1 108 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 104 918 call 234 1 105,106 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 103 921 call 234 1 104 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 109 923 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 112 926 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 102 927 assign 234 1 112 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 114 931 assign 235 1 80 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 115 933 assign 235 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 116 934 assign 235 1 114,115 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 113 939 assign 235 1 116 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 101 942 assign 233 1 102,113 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 117 946 assign 237 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 100 947 assign 232 1 101,117 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 98 950 call 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 950 mutcall 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 119 957 assign 240 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 121 960 assign 240 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 123 963 assign 240 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 122 964 assign 240 1 123 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 120 965 call 240 1 121,122 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 118 969 call 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 969 mutcall 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 110 979 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 111 981 assign 234 1 110 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 982 call 234 1 111 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 95 1001 assign 230 1 88 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 96 1003 assign 230 1 95 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 1004 call 230 1 96 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 99 1027 assign 232 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 105 1034 assign 234 1 1 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 107 1037 assign 234 1 79 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 108 1038 assign 234 1 107 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 106 1043 assign 234 1 108 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 104 1045 call 234 1 105,106 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 103 1048 call 234 1 104 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 109 1050 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 112 1053 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 102 1054 assign 234 1 112 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 114 1058 assign 235 1 80 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 115 1060 assign 235 1 2 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 116 1061 assign 235 1 114,115 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 113 1066 assign 235 1 116 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 101 1069 assign 233 1 102,113 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 117 1073 assign 237 1 - +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 100 1074 assign 232 1 101,117 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 98 1077 call 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 1077 mutcall 232 1 99,100 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 119 1084 assign 240 1 15 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 121 1087 assign 240 1 13 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 123 1090 assign 240 1 12 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 122 1091 assign 240 1 123 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 120 1092 call 240 1 121,122 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 118 1096 call 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 15 1096 mutcall 240 1 119,120 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 110 1106 assign 234 1 103 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 111 1108 assign 234 1 110 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 1109 call 234 1 111 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 41 1130 assign 216 0 34 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 42 1132 assign 216 0 41 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 1133 call 216 0 42 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 30 1141 assign 215 0 23 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 31 1143 assign 215 0 30 +DEF foundry_parity_lab::arm_b::{impl}::cook_ops 0 1144 call 215 0 31 +ARG foundry_parity_lab::fixture::recipe::{impl}::call_mut 1 _ +ARG foundry_parity_lab::fixture::recipe::{impl}::call_mut 2 tupled_args +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 3 14 assign 92 0 2 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 8 20 assign 94 0 1 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 9 21 assign 94 0 8 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 7 24 assign 94 0 9 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 11 28 assign 94 0 3 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 12 29 assign 94 0 11 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 10 32 assign 94 0 12 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 13 34 assign 94 0 7,10 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 6 37 assign 94 0 13 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 14 40 assign 94 0 6 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 5 43 assign 94 0 14 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 15 45 assign 94 0 - +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 4 48 assign 94 0 5 +SITE foundry_parity_lab::fixture::recipe::{impl}::call_mut 48 Rem src/fixture.rs 94 0 5 global +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 20 55 assign 95 0 3 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 19 56 assign 95 0 20 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 22 60 assign 95 0 1 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 21 61 assign 95 0 22 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 23 63 assign 95 0 19,21 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 18 66 assign 95 0 23 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 24 69 assign 95 0 - +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 25 72 assign 95 0 - +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 26 73 assign 95 0 18 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 27 74 assign 95 0 25,26 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 17 77 assign 95 0 18 +SITE foundry_parity_lab::fixture::recipe::{impl}::call_mut 77 Rem src/fixture.rs 95 0 18 const +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 28 79 assign 95 0 17 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 16 82 assign 95 0 28 +DEF foundry_parity_lab::fixture::recipe::{impl}::call_mut 0 84 assign 93 0 4,16 +ARG foundry_parity_lab::oracle::{impl}::can_cook 1 self +ARG foundry_parity_lab::oracle::{impl}::can_cook 2 s +ARG foundry_parity_lab::oracle::{impl}::can_cook 3 m +ARG foundry_parity_lab::oracle::{impl}::can_cook 4 q +DEF foundry_parity_lab::oracle::{impl}::can_cook 7 12 assign 46 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 6 13 call 46 0 7 +DEF foundry_parity_lab::oracle::{impl}::can_cook 5 15 assign 46 0 6 +DEF foundry_parity_lab::oracle::{impl}::can_cook 9 21 assign 49 0 3 +DEF foundry_parity_lab::oracle::{impl}::can_cook 8 22 call 49 0 9 +DEF foundry_parity_lab::oracle::{impl}::can_cook 15 31 assign 50 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 14 32 call 50 0 15 +DEF foundry_parity_lab::oracle::{impl}::can_cook 13 33 assign 50 0 14 +DEF foundry_parity_lab::oracle::{impl}::can_cook 12 35 call 50 0 13 +DEF foundry_parity_lab::oracle::{impl}::can_cook 11 36 assign 50 0 12 +DEF foundry_parity_lab::oracle::{impl}::can_cook 17 40 assign 50 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 16 41 assign 50 0 17 +DEF foundry_parity_lab::oracle::{impl}::can_cook 10 43 call 50 0 11,16 +DEF foundry_parity_lab::oracle::{impl}::can_cook 12 43 mutcall 50 0 11,16 +DEF foundry_parity_lab::oracle::{impl}::can_cook 18 46 assign 50 0 10 +DEF foundry_parity_lab::oracle::{impl}::can_cook 25 54 assign 53 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 26 56 assign 53 0 3 +DEF foundry_parity_lab::oracle::{impl}::can_cook 24 57 call 53 0 25,26 +DEF foundry_parity_lab::oracle::{impl}::can_cook 28 63 assign 53 0 1 +DEF foundry_parity_lab::oracle::{impl}::can_cook 30 66 assign 53 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 29 67 assign 53 0 30 +DEF foundry_parity_lab::oracle::{impl}::can_cook 27 68 call 53 0 28,29 +DEF foundry_parity_lab::oracle::{impl}::can_cook 31 74 assign 54 0 - +DEF foundry_parity_lab::oracle::{impl}::can_cook 23 75 assign 54 0 31 +DEF foundry_parity_lab::oracle::{impl}::can_cook 33 82 assign 55 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 34 84 assign 55 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 32 85 call 55 0 33,34 +DEF foundry_parity_lab::oracle::{impl}::can_cook 38 91 assign 60 0 - +DEF foundry_parity_lab::oracle::{impl}::can_cook 37 92 assign 60 0 38 +DEF foundry_parity_lab::oracle::{impl}::can_cook 40 97 assign 61 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 39 98 call 61 0 40 +DEF foundry_parity_lab::oracle::{impl}::can_cook 41 101 assign 61 0 39 +DEF foundry_parity_lab::oracle::{impl}::can_cook 44 106 assign 61 1 41 +DEF foundry_parity_lab::oracle::{impl}::can_cook 43 107 assign 61 1 44 +DEF foundry_parity_lab::oracle::{impl}::can_cook 42 108 call 61 1 43 +ELEM foundry_parity_lab::oracle::{impl}::can_cook 42 108 core::slice::iter::{impl}::next +DEF foundry_parity_lab::oracle::{impl}::can_cook 44 108 mutcall 61 1 43 +DEF foundry_parity_lab::oracle::{impl}::can_cook 45 110 assign 61 1 42 +DEF foundry_parity_lab::oracle::{impl}::can_cook 46 114 assign 61 1 42 +DEF foundry_parity_lab::oracle::{impl}::can_cook 47 116 assign 61 1 42 +DEF foundry_parity_lab::oracle::{impl}::can_cook 50 120 assign 62 1 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 51 122 assign 62 1 46 +DEF foundry_parity_lab::oracle::{impl}::can_cook 52 124 assign 62 1 1 +DEF foundry_parity_lab::oracle::{impl}::can_cook 49 125 call 62 1 50,51,52 +DEF foundry_parity_lab::oracle::{impl}::can_cook 53 130 assign 62 1 47 +DEF foundry_parity_lab::oracle::{impl}::can_cook 54 131 assign 62 1 53 +DEF foundry_parity_lab::oracle::{impl}::can_cook 55 136 assign 62 1 53 +DEF foundry_parity_lab::oracle::{impl}::can_cook 56 137 assign 62 1 49 +DEF foundry_parity_lab::oracle::{impl}::can_cook 57 138 assign 62 1 55,56 +DEF foundry_parity_lab::oracle::{impl}::can_cook 48 143 assign 62 1 49,53 +SITE foundry_parity_lab::oracle::{impl}::can_cook 143 Div src/oracle.rs 62 1 49 53 +DEF foundry_parity_lab::oracle::{impl}::can_cook 59 149 assign 63 1 48 +DEF foundry_parity_lab::oracle::{impl}::can_cook 60 151 assign 63 1 37 +DEF foundry_parity_lab::oracle::{impl}::can_cook 58 152 assign 63 1 59,60 +DEF foundry_parity_lab::oracle::{impl}::can_cook 61 157 assign 64 1 48 +DEF foundry_parity_lab::oracle::{impl}::can_cook 63 160 assign 64 1 46 +DEF foundry_parity_lab::oracle::{impl}::can_cook 62 161 assign 64 1 63 +DEF foundry_parity_lab::oracle::{impl}::can_cook 37 163 assign 64 1 61,62 +DEF foundry_parity_lab::oracle::{impl}::can_cook 66 184 assign 67 0 2 +DEF foundry_parity_lab::oracle::{impl}::can_cook 67 186 assign 67 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 65 187 call 67 0 66,67 +DEF foundry_parity_lab::oracle::{impl}::can_cook 68 191 assign 67 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 69 192 assign 67 0 65,68 +DEF foundry_parity_lab::oracle::{impl}::can_cook 64 197 assign 67 0 69 +DEF foundry_parity_lab::oracle::{impl}::can_cook 71 203 assign 68 0 64 +DEF foundry_parity_lab::oracle::{impl}::can_cook 72 205 assign 68 0 37 +DEF foundry_parity_lab::oracle::{impl}::can_cook 70 206 assign 68 0 71,72 +DEF foundry_parity_lab::oracle::{impl}::can_cook 73 211 assign 69 0 64 +DEF foundry_parity_lab::oracle::{impl}::can_cook 75 214 assign 69 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 74 215 assign 69 0 75 +DEF foundry_parity_lab::oracle::{impl}::can_cook 37 217 assign 69 0 73,74 +DEF foundry_parity_lab::oracle::{impl}::can_cook 23 223 assign 71 0 37 +DEF foundry_parity_lab::oracle::{impl}::can_cook 36 230 assign 56 0 8 +DEF foundry_parity_lab::oracle::{impl}::can_cook 35 231 assign 56 0 36 +DEF foundry_parity_lab::oracle::{impl}::can_cook 23 233 assign 56 0 35 +DEF foundry_parity_lab::oracle::{impl}::can_cook 31 239 assign 54 0 - +DEF foundry_parity_lab::oracle::{impl}::can_cook 23 240 assign 54 0 31 +DEF foundry_parity_lab::oracle::{impl}::can_cook 21 245 assign 53 0 23 +DEF foundry_parity_lab::oracle::{impl}::can_cook 22 247 assign 53 0 23 +DEF foundry_parity_lab::oracle::{impl}::can_cook 77 251 assign 74 0 21 +DEF foundry_parity_lab::oracle::{impl}::can_cook 78 253 assign 74 0 4 +DEF foundry_parity_lab::oracle::{impl}::can_cook 76 254 assign 74 0 77,78 +DEF foundry_parity_lab::oracle::{impl}::can_cook 79 258 assign 75 0 21 +DEF foundry_parity_lab::oracle::{impl}::can_cook 80 260 assign 76 0 22 +DEF foundry_parity_lab::oracle::{impl}::can_cook 0 261 assign 73 0 76,79,80 +DEF foundry_parity_lab::oracle::{impl}::can_cook 19 272 assign 50 0 10 +DEF foundry_parity_lab::oracle::{impl}::can_cook 20 274 assign 51 0 19 +DEF foundry_parity_lab::oracle::{impl}::can_cook 0 275 assign 51 0 20 +DEF foundry_parity_lab::oracle::{impl}::can_cook 0 286 assign 47 0 - diff --git a/crates/cg-defuse-probe/tests/data/src-m1/method.rs b/crates/cg-defuse-probe/tests/data/src-m1/method.rs new file mode 100644 index 000000000..400f31e0a --- /dev/null +++ b/crates/cg-defuse-probe/tests/data/src-m1/method.rs @@ -0,0 +1,331 @@ +//! G6 (P2, part): `CanCook` as a registered DT64 method, executed from its +//! `MethodRef`. +//! +//! DT64 binds behaviour and executes nothing. Here the store holds one +//! `MethodBinding` per (item, quantity) whose WHEN guard states "this store can +//! make `q` of item `m`" as a [`SetExpr`] over the class's field positions: +//! mask fields as `Sym(field)`, value fields as residuals on lane `field`. The +//! executor admits the reference, binds exactly the method's `reads`, renames +//! field positions to the bound planes, and lowers the guard through relalg +//! ONCE per binding in `prepare` (`run_with_program`, keeping the returned +//! mask-RISC program). `run` only executes that program. The lab writes no +//! lowering of its own; the rename is the only lab step. +//! +//! The reader scope (the IAM stand-in) is NOT part of the method. It is +//! conjoined at execution, so the registered behaviour stays the same for +//! every reader (gap G2 is where it is supplied for real). +//! +//! The quantity is a constant of the guard, so it is part of the method's +//! identity ([`method_id`]): DT64 guards carry no parameters. Only the +//! quantities in [`QS`] are registered. + +use lance_graph_contract::class_view::WideFieldMask; +use lance_graph_contract::set_algebra::{Cmp, Logic, Res, SetExpr}; +use lance_graph_contract::set_rules::{Population, Truth}; +use lance_graph_dt64::{ + Guard, LaneRefusal, MethodBinding, MethodId, MethodRef, Refusal, SigRev, ValueDemand, +}; +use lance_graph_mask_risc::{ + execute_into, tile_words_for, ExecError, Foreign, LaneRef, Out, Planes, Program, Scratch, +}; +use lance_graph_relalg::{rel_from_set, run_with_program, Measure, Query, RelError}; + +use crate::bind::{World, EQUIP0, KNOWN0, OFFERED0, READER, STAFF0, STOCK0, STORE_ID}; +use crate::fixture::{self as fx, DENIED_STORE, ITEMS, STORES, STORE_ID_BASE}; +use crate::source::{Network, Plane}; +use lance_graph_dt64::LaneSource; + +/// The quantities a `CanCook` method is registered for. +pub const QS: [i32; 2] = [1, 3]; + +/// The method id of `CanCook(item m, quantity q)`. +pub fn method_id(m: usize, q: i32) -> MethodId { + MethodId(((m as u32) << 8) | q as u32) +} + +/// "This store can make `q` of item `m`", over field positions. +pub fn can_cook_guard(m: usize, q: i32) -> SetExpr { + let r = fx::recipe(m); + let mut all = vec![ + SetExpr::Sym((OFFERED0 + m) as u32), + SetExpr::Sym((EQUIP0 + r.equipment) as u32), + ]; + let mut staff = 0; + for &(k, d) in &r.demand { + all.push(SetExpr::Sym((KNOWN0 + k) as u32)); + all.push(SetExpr::i32((STOCK0 + k) as u16, Cmp::Ge, d * q)); + staff = (q + d - 1) / d; + } + all.push(SetExpr::i32((STAFF0 + r.skill) as u16, Cmp::Ge, staff)); + SetExpr::And(all) +} + +/// The field positions a guard names. +fn guard_fields(e: &SetExpr, out: &mut Vec) { + match e { + SetExpr::Sym(f) => out.push(*f as u8), + SetExpr::Res(Res::I32 { lane, .. }) | SetExpr::Res(Res::U32 { lane, .. }) => { + out.push(*lane as u8) + } + SetExpr::And(cs) | SetExpr::Or(cs) => cs.iter().for_each(|c| guard_fields(c, out)), + SetExpr::Not(c) => guard_fields(c, out), + SetExpr::All | SetExpr::Empty => {} + } +} + +/// The binding of `CanCook(m, q)`: reads exactly the fields its guard names. +pub fn can_cook_method(m: usize, q: i32) -> MethodBinding { + let guard = can_cook_guard(m, q); + let mut fields = Vec::new(); + guard_fields(&guard, &mut fields); + let reads = WideFieldMask::from_positions(&fields); + MethodBinding { + id: method_id(m, q), + sig_rev: SigRev(1), + name: format!("CanCook(item {m}, q {q})"), + on: reads.clone(), + when: Some(Guard::new(guard, Logic::TwoValued)), + reads, + effects: Vec::new(), + population: Population::Distinct, + truth: Truth::TwoValued, + demand: ValueDemand::Values, + } +} + +/// Every registered `CanCook` method. +pub fn methods() -> Vec { + (0..ITEMS) + .flat_map(|m| QS.into_iter().map(move |q| can_cook_method(m, q))) + .collect() +} + +/// Why a method could not be executed. +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum MethodRefusal { + /// The store did not admit the reference. + Admit(Refusal), + Lane(LaneRefusal), + /// relalg refused to lower the guard. + Lower(RelError), + /// The guard was answered from its description alone, so there is no + /// program to reuse; never expected for a CanCook guard. + Symbolic, + /// The guard lowered into more than one fold, so its last program alone + /// is not the answer and cannot be reused. A tripwire for a change in + /// relalg's lowering: today every `SetExpr` lowers to one fold under + /// `Keep` (pinned by `every_guard_shape_lowers_to_one_reusable_fold`). + Folds { + programs: usize, + }, + /// The lowered program could not run. + Exec(ExecError), + /// The method has no WHEN guard to execute. + NoGuard, + /// The guard names a field the method does not read. + NotBound { + field: u8, + }, + /// A bound plane had another kind than the guard uses it as. + PlaneKind { + field: u8, + }, + /// `storeId` was not bound. + NoIdentity, +} + +impl From for MethodRefusal { + fn from(r: LaneRefusal) -> Self { + MethodRefusal::Lane(r) + } +} + +/// The stores (bit = store row, by identity) that satisfy the guard, and how +/// many. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct Executed { + pub stores: u64, + pub count: u64, +} + +/// Where each bound field sits in the relalg planes. +#[derive(Clone, Copy)] +enum Slot { + Mask(u32), + I32(u16), + U32(u16), +} + +fn rename(e: &SetExpr, slots: &[Option; 256]) -> Result { + Ok(match e { + SetExpr::Sym(f) => match slots[*f as usize] { + Some(Slot::Mask(i)) => SetExpr::Sym(i), + Some(_) => return Err(MethodRefusal::PlaneKind { field: *f as u8 }), + None => return Err(MethodRefusal::NotBound { field: *f as u8 }), + }, + SetExpr::Res(Res::I32 { lane, op, t }) => match slots[*lane as usize] { + Some(Slot::I32(i)) => SetExpr::i32(i, *op, *t), + Some(_) => return Err(MethodRefusal::PlaneKind { field: *lane as u8 }), + None => return Err(MethodRefusal::NotBound { field: *lane as u8 }), + }, + SetExpr::Res(Res::U32 { lane, eq, v }) => match slots[*lane as usize] { + Some(Slot::U32(i)) => SetExpr::Res(Res::U32 { + lane: i, + eq: *eq, + v: *v, + }), + Some(_) => return Err(MethodRefusal::PlaneKind { field: *lane as u8 }), + None => return Err(MethodRefusal::NotBound { field: *lane as u8 }), + }, + SetExpr::And(cs) => SetExpr::And( + cs.iter() + .map(|c| rename(c, slots)) + .collect::>()?, + ), + SetExpr::Or(cs) => SetExpr::Or( + cs.iter() + .map(|c| rename(c, slots)) + .collect::>()?, + ), + SetExpr::Not(c) => SetExpr::negated(rename(c, slots)?), + SetExpr::All => SetExpr::All, + SetExpr::Empty => SetExpr::Empty, + }) +} + +/// A method made ready once per binding: admitted, its reads bound and +/// borrowed, its guard renamed onto the bound planes and lowered by relalg +/// once into a mask-RISC program. [`PreparedMethod::run`] only executes that +/// program, once per question. +pub struct PreparedMethod<'s> { + masks: Vec<&'s [u64]>, + lanes: Vec>, + ids: &'s [u32], + program: Program, + scratch: std::cell::RefCell>, +} + +impl<'s> PreparedMethod<'s> { + /// Admit `r`, bind the method's reads plus `storeId`, and rename its + /// guard (conjoined with the reader scope when `authorization`). + pub fn prepare( + world: &World, + source: &'s Network, + r: &MethodRef, + authorization: bool, + ) -> Result, MethodRefusal> { + let binding = world.store.admit(r).map_err(MethodRefusal::Admit)?; + let guard = binding.when.as_ref().ok_or(MethodRefusal::NoGuard)?; + let mut fields: Vec = (0..=255u8).filter(|&f| binding.reads.has(f)).collect(); + fields.push(STORE_ID as u8); + fields.sort_unstable(); + fields.dedup(); + let lanes_bound = world.bind(source, &fields, source.order().space(), READER)?; + + let mut masks: Vec<&'s [u64]> = Vec::new(); + let mut lanes: Vec> = Vec::new(); + let mut slots: [Option; 256] = [None; 256]; + let mut ids: Option<&'s [u32]> = None; + for lane in lanes_bound.borrow_all(&world.store, &world.view, source.frames(), source)? { + let (field, plane) = lane?; + let at = usize::from(field); + slots[at] = Some(match plane { + Plane::Mask(w) => { + masks.push(w); + Slot::Mask((masks.len() - 1) as u32) + } + Plane::I32(v) => { + lanes.push(LaneRef::I32(v)); + Slot::I32((lanes.len() - 1) as u16) + } + Plane::U32(v) => { + if at == STORE_ID { + ids = Some(v); + } + lanes.push(LaneRef::U32(v)); + Slot::U32((lanes.len() - 1) as u16) + } + }); + } + let ids = ids.ok_or(MethodRefusal::NoIdentity)?; + let mut query = rename(&guard.expr, &slots)?; + if authorization { + let Some(Slot::U32(id_lane)) = slots[STORE_ID] else { + return Err(MethodRefusal::NoIdentity); + }; + query = SetExpr::And(vec![query, SetExpr::ne_u32(id_lane, DENIED_STORE)]); + } + let planes = Planes { + n_rows: STORES, + masks: &masks, + lanes: &lanes, + }; + let mut keep = [0u64; 1]; + let (lowered, program) = run_with_program( + &Query { + rel: rel_from_set(&query), + measure: Measure::Keep, + }, + &planes, + Some(&mut keep[..]), + ) + .map_err(MethodRefusal::Lower)?; + let program = program.ok_or(MethodRefusal::Symbolic)?; + // relalg keeps only the LAST fold's program. Re-running it alone is the + // whole answer only when the lowering was one fold. + if lowered.programs != 1 { + return Err(MethodRefusal::Folds { + programs: lowered.programs, + }); + } + let scratch = std::cell::RefCell::new(Scratch::new( + tile_words_for(STORES), + program.scratch_slots as usize, + )); + Ok(PreparedMethod { + masks, + lanes, + ids, + program, + scratch, + }) + } + + /// One question: the stores satisfying the guard, and how many. + pub fn run(&self) -> Result { + let planes = Planes { + n_rows: STORES, + masks: &self.masks, + lanes: &self.lanes, + }; + let mut keep = [0u64; 1]; + execute_into( + &self.program, + &planes, + &Foreign::NONE, + &mut self.scratch.borrow_mut(), + Out::Mask(&mut keep[..]), + ) + .map_err(MethodRefusal::Exec)?; + let count = u64::from(keep[0].count_ones()); + // Positions become stores only by reading `storeId` at the set bits. + let mut stores = 0u64; + let mut w = keep[0]; + while w != 0 { + let row = w.trailing_zeros() as usize; + stores |= 1 << (self.ids[row] - STORE_ID_BASE); + w &= w - 1; + } + Ok(Executed { stores, count }) + } +} + +/// [`PreparedMethod::prepare`] then one [`PreparedMethod::run`]. +pub fn execute_can_cook( + world: &World, + source: &Network, + r: &MethodRef, + authorization: bool, +) -> Result { + PreparedMethod::prepare(world, source, r, authorization)?.run() +} diff --git a/crates/cg-defuse-probe/tests/data/src-m2/method.rs b/crates/cg-defuse-probe/tests/data/src-m2/method.rs new file mode 100644 index 000000000..357c4094c --- /dev/null +++ b/crates/cg-defuse-probe/tests/data/src-m2/method.rs @@ -0,0 +1,331 @@ +//! G6 (P2, part): `CanCook` as a registered DT64 method, executed from its +//! `MethodRef`. +//! +//! DT64 binds behaviour and executes nothing. Here the store holds one +//! `MethodBinding` per (item, quantity) whose WHEN guard states "this store can +//! make `q` of item `m`" as a [`SetExpr`] over the class's field positions: +//! mask fields as `Sym(field)`, value fields as residuals on lane `field`. The +//! executor admits the reference, binds exactly the method's `reads`, renames +//! field positions to the bound planes, and lowers the guard through relalg +//! ONCE per binding in `prepare` (`run_with_program`, keeping the returned +//! mask-RISC program). `run` only executes that program. The lab writes no +//! lowering of its own; the rename is the only lab step. +//! +//! The reader scope (the IAM stand-in) is NOT part of the method. It is +//! conjoined at execution, so the registered behaviour stays the same for +//! every reader (gap G2 is where it is supplied for real). +//! +//! The quantity is a constant of the guard, so it is part of the method's +//! identity ([`method_id`]): DT64 guards carry no parameters. Only the +//! quantities in [`QS`] are registered. + +use lance_graph_contract::class_view::WideFieldMask; +use lance_graph_contract::set_algebra::{Cmp, Logic, Res, SetExpr}; +use lance_graph_contract::set_rules::{Population, Truth}; +use lance_graph_dt64::{ + Guard, LaneRefusal, MethodBinding, MethodId, MethodRef, Refusal, SigRev, ValueDemand, +}; +use lance_graph_mask_risc::{ + execute_into, tile_words_for, ExecError, Foreign, LaneRef, Out, Planes, Program, Scratch, +}; +use lance_graph_relalg::{rel_from_set, run_with_program, Measure, Query, RelError}; + +use crate::bind::{World, EQUIP0, KNOWN0, OFFERED0, READER, STAFF0, STOCK0, STORE_ID}; +use crate::fixture::{self as fx, DENIED_STORE, ITEMS, STORES, STORE_ID_BASE}; +use crate::source::{Network, Plane}; +use lance_graph_dt64::LaneSource; + +/// The quantities a `CanCook` method is registered for. +pub const QS: [i32; 2] = [1, 3]; + +/// The method id of `CanCook(item m, quantity q)`. +pub fn method_id(m: usize, q: i32) -> MethodId { + MethodId(((m as u32) << 8) | q as u32) +} + +/// "This store can make `q` of item `m`", over field positions. +pub fn can_cook_guard(m: usize, q: i32) -> SetExpr { + let r = fx::recipe(m); + let mut all = vec![ + SetExpr::Sym((OFFERED0 + m) as u32), + SetExpr::Sym((EQUIP0 + r.equipment) as u32), + ]; + for &(k, d) in &r.demand { + all.push(SetExpr::Sym((KNOWN0 + k) as u32)); + all.push(SetExpr::i32((STOCK0 + k) as u16, Cmp::Ge, d * q)); + } + // staff · per_staff ≥ q ⇔ staff ≥ ⌈q / per_staff⌉ for positive per_staff. + let staff = q + r.per_staff - 1; + all.push(SetExpr::i32((STAFF0 + r.skill) as u16, Cmp::Ge, staff)); + SetExpr::And(all) +} + +/// The field positions a guard names. +fn guard_fields(e: &SetExpr, out: &mut Vec) { + match e { + SetExpr::Sym(f) => out.push(*f as u8), + SetExpr::Res(Res::I32 { lane, .. }) | SetExpr::Res(Res::U32 { lane, .. }) => { + out.push(*lane as u8) + } + SetExpr::And(cs) | SetExpr::Or(cs) => cs.iter().for_each(|c| guard_fields(c, out)), + SetExpr::Not(c) => guard_fields(c, out), + SetExpr::All | SetExpr::Empty => {} + } +} + +/// The binding of `CanCook(m, q)`: reads exactly the fields its guard names. +pub fn can_cook_method(m: usize, q: i32) -> MethodBinding { + let guard = can_cook_guard(m, q); + let mut fields = Vec::new(); + guard_fields(&guard, &mut fields); + let reads = WideFieldMask::from_positions(&fields); + MethodBinding { + id: method_id(m, q), + sig_rev: SigRev(1), + name: format!("CanCook(item {m}, q {q})"), + on: reads.clone(), + when: Some(Guard::new(guard, Logic::TwoValued)), + reads, + effects: Vec::new(), + population: Population::Distinct, + truth: Truth::TwoValued, + demand: ValueDemand::Values, + } +} + +/// Every registered `CanCook` method. +pub fn methods() -> Vec { + (0..ITEMS) + .flat_map(|m| QS.into_iter().map(move |q| can_cook_method(m, q))) + .collect() +} + +/// Why a method could not be executed. +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum MethodRefusal { + /// The store did not admit the reference. + Admit(Refusal), + Lane(LaneRefusal), + /// relalg refused to lower the guard. + Lower(RelError), + /// The guard was answered from its description alone, so there is no + /// program to reuse; never expected for a CanCook guard. + Symbolic, + /// The guard lowered into more than one fold, so its last program alone + /// is not the answer and cannot be reused. A tripwire for a change in + /// relalg's lowering: today every `SetExpr` lowers to one fold under + /// `Keep` (pinned by `every_guard_shape_lowers_to_one_reusable_fold`). + Folds { + programs: usize, + }, + /// The lowered program could not run. + Exec(ExecError), + /// The method has no WHEN guard to execute. + NoGuard, + /// The guard names a field the method does not read. + NotBound { + field: u8, + }, + /// A bound plane had another kind than the guard uses it as. + PlaneKind { + field: u8, + }, + /// `storeId` was not bound. + NoIdentity, +} + +impl From for MethodRefusal { + fn from(r: LaneRefusal) -> Self { + MethodRefusal::Lane(r) + } +} + +/// The stores (bit = store row, by identity) that satisfy the guard, and how +/// many. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct Executed { + pub stores: u64, + pub count: u64, +} + +/// Where each bound field sits in the relalg planes. +#[derive(Clone, Copy)] +enum Slot { + Mask(u32), + I32(u16), + U32(u16), +} + +fn rename(e: &SetExpr, slots: &[Option; 256]) -> Result { + Ok(match e { + SetExpr::Sym(f) => match slots[*f as usize] { + Some(Slot::Mask(i)) => SetExpr::Sym(i), + Some(_) => return Err(MethodRefusal::PlaneKind { field: *f as u8 }), + None => return Err(MethodRefusal::NotBound { field: *f as u8 }), + }, + SetExpr::Res(Res::I32 { lane, op, t }) => match slots[*lane as usize] { + Some(Slot::I32(i)) => SetExpr::i32(i, *op, *t), + Some(_) => return Err(MethodRefusal::PlaneKind { field: *lane as u8 }), + None => return Err(MethodRefusal::NotBound { field: *lane as u8 }), + }, + SetExpr::Res(Res::U32 { lane, eq, v }) => match slots[*lane as usize] { + Some(Slot::U32(i)) => SetExpr::Res(Res::U32 { + lane: i, + eq: *eq, + v: *v, + }), + Some(_) => return Err(MethodRefusal::PlaneKind { field: *lane as u8 }), + None => return Err(MethodRefusal::NotBound { field: *lane as u8 }), + }, + SetExpr::And(cs) => SetExpr::And( + cs.iter() + .map(|c| rename(c, slots)) + .collect::>()?, + ), + SetExpr::Or(cs) => SetExpr::Or( + cs.iter() + .map(|c| rename(c, slots)) + .collect::>()?, + ), + SetExpr::Not(c) => SetExpr::negated(rename(c, slots)?), + SetExpr::All => SetExpr::All, + SetExpr::Empty => SetExpr::Empty, + }) +} + +/// A method made ready once per binding: admitted, its reads bound and +/// borrowed, its guard renamed onto the bound planes and lowered by relalg +/// once into a mask-RISC program. [`PreparedMethod::run`] only executes that +/// program, once per question. +pub struct PreparedMethod<'s> { + masks: Vec<&'s [u64]>, + lanes: Vec>, + ids: &'s [u32], + program: Program, + scratch: std::cell::RefCell>, +} + +impl<'s> PreparedMethod<'s> { + /// Admit `r`, bind the method's reads plus `storeId`, and rename its + /// guard (conjoined with the reader scope when `authorization`). + pub fn prepare( + world: &World, + source: &'s Network, + r: &MethodRef, + authorization: bool, + ) -> Result, MethodRefusal> { + let binding = world.store.admit(r).map_err(MethodRefusal::Admit)?; + let guard = binding.when.as_ref().ok_or(MethodRefusal::NoGuard)?; + let mut fields: Vec = (0..=255u8).filter(|&f| binding.reads.has(f)).collect(); + fields.push(STORE_ID as u8); + fields.sort_unstable(); + fields.dedup(); + let lanes_bound = world.bind(source, &fields, source.order().space(), READER)?; + + let mut masks: Vec<&'s [u64]> = Vec::new(); + let mut lanes: Vec> = Vec::new(); + let mut slots: [Option; 256] = [None; 256]; + let mut ids: Option<&'s [u32]> = None; + for lane in lanes_bound.borrow_all(&world.store, &world.view, source.frames(), source)? { + let (field, plane) = lane?; + let at = usize::from(field); + slots[at] = Some(match plane { + Plane::Mask(w) => { + masks.push(w); + Slot::Mask((masks.len() - 1) as u32) + } + Plane::I32(v) => { + lanes.push(LaneRef::I32(v)); + Slot::I32((lanes.len() - 1) as u16) + } + Plane::U32(v) => { + if at == STORE_ID { + ids = Some(v); + } + lanes.push(LaneRef::U32(v)); + Slot::U32((lanes.len() - 1) as u16) + } + }); + } + let ids = ids.ok_or(MethodRefusal::NoIdentity)?; + let mut query = rename(&guard.expr, &slots)?; + if authorization { + let Some(Slot::U32(id_lane)) = slots[STORE_ID] else { + return Err(MethodRefusal::NoIdentity); + }; + query = SetExpr::And(vec![query, SetExpr::ne_u32(id_lane, DENIED_STORE)]); + } + let planes = Planes { + n_rows: STORES, + masks: &masks, + lanes: &lanes, + }; + let mut keep = [0u64; 1]; + let (lowered, program) = run_with_program( + &Query { + rel: rel_from_set(&query), + measure: Measure::Keep, + }, + &planes, + Some(&mut keep[..]), + ) + .map_err(MethodRefusal::Lower)?; + let program = program.ok_or(MethodRefusal::Symbolic)?; + // relalg keeps only the LAST fold's program. Re-running it alone is the + // whole answer only when the lowering was one fold. + if lowered.programs != 1 { + return Err(MethodRefusal::Folds { + programs: lowered.programs, + }); + } + let scratch = std::cell::RefCell::new(Scratch::new( + tile_words_for(STORES), + program.scratch_slots as usize, + )); + Ok(PreparedMethod { + masks, + lanes, + ids, + program, + scratch, + }) + } + + /// One question: the stores satisfying the guard, and how many. + pub fn run(&self) -> Result { + let planes = Planes { + n_rows: STORES, + masks: &self.masks, + lanes: &self.lanes, + }; + let mut keep = [0u64; 1]; + execute_into( + &self.program, + &planes, + &Foreign::NONE, + &mut self.scratch.borrow_mut(), + Out::Mask(&mut keep[..]), + ) + .map_err(MethodRefusal::Exec)?; + let count = u64::from(keep[0].count_ones()); + // Positions become stores only by reading `storeId` at the set bits. + let mut stores = 0u64; + let mut w = keep[0]; + while w != 0 { + let row = w.trailing_zeros() as usize; + stores |= 1 << (self.ids[row] - STORE_ID_BASE); + w &= w - 1; + } + Ok(Executed { stores, count }) + } +} + +/// [`PreparedMethod::prepare`] then one [`PreparedMethod::run`]. +pub fn execute_can_cook( + world: &World, + source: &Network, + r: &MethodRef, + authorization: bool, +) -> Result { + PreparedMethod::prepare(world, source, r, authorization)?.run() +} diff --git a/crates/cg-defuse-probe/tests/data/src-m3/method.rs b/crates/cg-defuse-probe/tests/data/src-m3/method.rs new file mode 100644 index 000000000..5ecf798ad --- /dev/null +++ b/crates/cg-defuse-probe/tests/data/src-m3/method.rs @@ -0,0 +1,331 @@ +//! G6 (P2, part): `CanCook` as a registered DT64 method, executed from its +//! `MethodRef`. +//! +//! DT64 binds behaviour and executes nothing. Here the store holds one +//! `MethodBinding` per (item, quantity) whose WHEN guard states "this store can +//! make `q` of item `m`" as a [`SetExpr`] over the class's field positions: +//! mask fields as `Sym(field)`, value fields as residuals on lane `field`. The +//! executor admits the reference, binds exactly the method's `reads`, renames +//! field positions to the bound planes, and lowers the guard through relalg +//! ONCE per binding in `prepare` (`run_with_program`, keeping the returned +//! mask-RISC program). `run` only executes that program. The lab writes no +//! lowering of its own; the rename is the only lab step. +//! +//! The reader scope (the IAM stand-in) is NOT part of the method. It is +//! conjoined at execution, so the registered behaviour stays the same for +//! every reader (gap G2 is where it is supplied for real). +//! +//! The quantity is a constant of the guard, so it is part of the method's +//! identity ([`method_id`]): DT64 guards carry no parameters. Only the +//! quantities in [`QS`] are registered. + +use lance_graph_contract::class_view::WideFieldMask; +use lance_graph_contract::set_algebra::{Cmp, Logic, Res, SetExpr}; +use lance_graph_contract::set_rules::{Population, Truth}; +use lance_graph_dt64::{ + Guard, LaneRefusal, MethodBinding, MethodId, MethodRef, Refusal, SigRev, ValueDemand, +}; +use lance_graph_mask_risc::{ + execute_into, tile_words_for, ExecError, Foreign, LaneRef, Out, Planes, Program, Scratch, +}; +use lance_graph_relalg::{rel_from_set, run_with_program, Measure, Query, RelError}; + +use crate::bind::{World, EQUIP0, KNOWN0, OFFERED0, READER, STAFF0, STOCK0, STORE_ID}; +use crate::fixture::{self as fx, DENIED_STORE, ITEMS, STORES, STORE_ID_BASE}; +use crate::source::{Network, Plane}; +use lance_graph_dt64::LaneSource; + +/// The quantities a `CanCook` method is registered for. +pub const QS: [i32; 2] = [1, 3]; + +/// The method id of `CanCook(item m, quantity q)`. +pub fn method_id(m: usize, q: i32) -> MethodId { + MethodId(((m as u32) << 8) | q as u32) +} + +/// "This store can make `q` of item `m`", over field positions. +pub fn can_cook_guard(m: usize, q: i32) -> SetExpr { + let r = fx::recipe(m); + let mut all = vec![ + SetExpr::Sym((OFFERED0 + m) as u32), + SetExpr::Sym((EQUIP0 + r.equipment) as u32), + ]; + let mut staff = 0; + for &(k, d) in &r.demand { + all.push(SetExpr::Sym((KNOWN0 + k) as u32)); + all.push(SetExpr::i32((STOCK0 + k) as u16, Cmp::Ge, d * q)); + staff = (q + r.per_staff - 1) / r.per_staff; + } + all.push(SetExpr::i32((STAFF0 + r.skill) as u16, Cmp::Ge, staff)); + SetExpr::And(all) +} + +/// The field positions a guard names. +fn guard_fields(e: &SetExpr, out: &mut Vec) { + match e { + SetExpr::Sym(f) => out.push(*f as u8), + SetExpr::Res(Res::I32 { lane, .. }) | SetExpr::Res(Res::U32 { lane, .. }) => { + out.push(*lane as u8) + } + SetExpr::And(cs) | SetExpr::Or(cs) => cs.iter().for_each(|c| guard_fields(c, out)), + SetExpr::Not(c) => guard_fields(c, out), + SetExpr::All | SetExpr::Empty => {} + } +} + +/// The binding of `CanCook(m, q)`: reads exactly the fields its guard names. +pub fn can_cook_method(m: usize, q: i32) -> MethodBinding { + let guard = can_cook_guard(m, q); + let mut fields = Vec::new(); + guard_fields(&guard, &mut fields); + let reads = WideFieldMask::from_positions(&fields); + MethodBinding { + id: method_id(m, q), + sig_rev: SigRev(1), + name: format!("CanCook(item {m}, q {q})"), + on: reads.clone(), + when: Some(Guard::new(guard, Logic::TwoValued)), + reads, + effects: Vec::new(), + population: Population::Distinct, + truth: Truth::TwoValued, + demand: ValueDemand::Values, + } +} + +/// Every registered `CanCook` method. +pub fn methods() -> Vec { + (0..ITEMS) + .flat_map(|m| QS.into_iter().map(move |q| can_cook_method(m, q))) + .collect() +} + +/// Why a method could not be executed. +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum MethodRefusal { + /// The store did not admit the reference. + Admit(Refusal), + Lane(LaneRefusal), + /// relalg refused to lower the guard. + Lower(RelError), + /// The guard was answered from its description alone, so there is no + /// program to reuse; never expected for a CanCook guard. + Symbolic, + /// The guard lowered into more than one fold, so its last program alone + /// is not the answer and cannot be reused. A tripwire for a change in + /// relalg's lowering: today every `SetExpr` lowers to one fold under + /// `Keep` (pinned by `every_guard_shape_lowers_to_one_reusable_fold`). + Folds { + programs: usize, + }, + /// The lowered program could not run. + Exec(ExecError), + /// The method has no WHEN guard to execute. + NoGuard, + /// The guard names a field the method does not read. + NotBound { + field: u8, + }, + /// A bound plane had another kind than the guard uses it as. + PlaneKind { + field: u8, + }, + /// `storeId` was not bound. + NoIdentity, +} + +impl From for MethodRefusal { + fn from(r: LaneRefusal) -> Self { + MethodRefusal::Lane(r) + } +} + +/// The stores (bit = store row, by identity) that satisfy the guard, and how +/// many. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct Executed { + pub stores: u64, + pub count: u64, +} + +/// Where each bound field sits in the relalg planes. +#[derive(Clone, Copy)] +enum Slot { + Mask(u32), + I32(u16), + U32(u16), +} + +fn rename(e: &SetExpr, slots: &[Option; 256]) -> Result { + Ok(match e { + SetExpr::Sym(f) => match slots[*f as usize] { + Some(Slot::Mask(i)) => SetExpr::Sym(i), + Some(_) => return Err(MethodRefusal::PlaneKind { field: *f as u8 }), + None => return Err(MethodRefusal::NotBound { field: *f as u8 }), + }, + SetExpr::Res(Res::I32 { lane, op, t }) => match slots[*lane as usize] { + Some(Slot::I32(i)) => SetExpr::i32(i, *op, *t), + Some(_) => return Err(MethodRefusal::PlaneKind { field: *lane as u8 }), + None => return Err(MethodRefusal::NotBound { field: *lane as u8 }), + }, + SetExpr::Res(Res::U32 { lane, eq, v }) => match slots[*lane as usize] { + Some(Slot::U32(i)) => SetExpr::Res(Res::U32 { + lane: i, + eq: *eq, + v: *v, + }), + Some(_) => return Err(MethodRefusal::PlaneKind { field: *lane as u8 }), + None => return Err(MethodRefusal::NotBound { field: *lane as u8 }), + }, + SetExpr::And(cs) => SetExpr::And( + cs.iter() + .map(|c| rename(c, slots)) + .collect::>()?, + ), + SetExpr::Or(cs) => SetExpr::Or( + cs.iter() + .map(|c| rename(c, slots)) + .collect::>()?, + ), + SetExpr::Not(c) => SetExpr::negated(rename(c, slots)?), + SetExpr::All => SetExpr::All, + SetExpr::Empty => SetExpr::Empty, + }) +} + +/// A method made ready once per binding: admitted, its reads bound and +/// borrowed, its guard renamed onto the bound planes and lowered by relalg +/// once into a mask-RISC program. [`PreparedMethod::run`] only executes that +/// program, once per question. +pub struct PreparedMethod<'s> { + masks: Vec<&'s [u64]>, + lanes: Vec>, + ids: &'s [u32], + program: Program, + scratch: std::cell::RefCell>, +} + +impl<'s> PreparedMethod<'s> { + /// Admit `r`, bind the method's reads plus `storeId`, and rename its + /// guard (conjoined with the reader scope when `authorization`). + pub fn prepare( + world: &World, + source: &'s Network, + r: &MethodRef, + authorization: bool, + ) -> Result, MethodRefusal> { + let binding = world.store.admit(r).map_err(MethodRefusal::Admit)?; + let guard = binding.when.as_ref().ok_or(MethodRefusal::NoGuard)?; + let mut fields: Vec = (0..=255u8).filter(|&f| binding.reads.has(f)).collect(); + fields.push(STORE_ID as u8); + fields.sort_unstable(); + fields.dedup(); + let lanes_bound = world.bind(source, &fields, source.order().space(), READER)?; + + let mut masks: Vec<&'s [u64]> = Vec::new(); + let mut lanes: Vec> = Vec::new(); + let mut slots: [Option; 256] = [None; 256]; + let mut ids: Option<&'s [u32]> = None; + for lane in lanes_bound.borrow_all(&world.store, &world.view, source.frames(), source)? { + let (field, plane) = lane?; + let at = usize::from(field); + slots[at] = Some(match plane { + Plane::Mask(w) => { + masks.push(w); + Slot::Mask((masks.len() - 1) as u32) + } + Plane::I32(v) => { + lanes.push(LaneRef::I32(v)); + Slot::I32((lanes.len() - 1) as u16) + } + Plane::U32(v) => { + if at == STORE_ID { + ids = Some(v); + } + lanes.push(LaneRef::U32(v)); + Slot::U32((lanes.len() - 1) as u16) + } + }); + } + let ids = ids.ok_or(MethodRefusal::NoIdentity)?; + let mut query = rename(&guard.expr, &slots)?; + if authorization { + let Some(Slot::U32(id_lane)) = slots[STORE_ID] else { + return Err(MethodRefusal::NoIdentity); + }; + query = SetExpr::And(vec![query, SetExpr::ne_u32(id_lane, DENIED_STORE)]); + } + let planes = Planes { + n_rows: STORES, + masks: &masks, + lanes: &lanes, + }; + let mut keep = [0u64; 1]; + let (lowered, program) = run_with_program( + &Query { + rel: rel_from_set(&query), + measure: Measure::Keep, + }, + &planes, + Some(&mut keep[..]), + ) + .map_err(MethodRefusal::Lower)?; + let program = program.ok_or(MethodRefusal::Symbolic)?; + // relalg keeps only the LAST fold's program. Re-running it alone is the + // whole answer only when the lowering was one fold. + if lowered.programs != 1 { + return Err(MethodRefusal::Folds { + programs: lowered.programs, + }); + } + let scratch = std::cell::RefCell::new(Scratch::new( + tile_words_for(STORES), + program.scratch_slots as usize, + )); + Ok(PreparedMethod { + masks, + lanes, + ids, + program, + scratch, + }) + } + + /// One question: the stores satisfying the guard, and how many. + pub fn run(&self) -> Result { + let planes = Planes { + n_rows: STORES, + masks: &self.masks, + lanes: &self.lanes, + }; + let mut keep = [0u64; 1]; + execute_into( + &self.program, + &planes, + &Foreign::NONE, + &mut self.scratch.borrow_mut(), + Out::Mask(&mut keep[..]), + ) + .map_err(MethodRefusal::Exec)?; + let count = u64::from(keep[0].count_ones()); + // Positions become stores only by reading `storeId` at the set bits. + let mut stores = 0u64; + let mut w = keep[0]; + while w != 0 { + let row = w.trailing_zeros() as usize; + stores |= 1 << (self.ids[row] - STORE_ID_BASE); + w &= w - 1; + } + Ok(Executed { stores, count }) + } +} + +/// [`PreparedMethod::prepare`] then one [`PreparedMethod::run`]. +pub fn execute_can_cook( + world: &World, + source: &Network, + r: &MethodRef, + authorization: bool, +) -> Result { + PreparedMethod::prepare(world, source, r, authorization)?.run() +} diff --git a/crates/cg-defuse-probe/tests/defuse.rs b/crates/cg-defuse-probe/tests/defuse.rs new file mode 100644 index 000000000..7153434f4 --- /dev/null +++ b/crates/cg-defuse-probe/tests/defuse.rs @@ -0,0 +1,328 @@ +//! CG-5: the pre-registered answer, the three arms against each other, the +//! mutants, and the refusals. Fixtures are regenerated by +//! `.claude/probes/2026-11-11-cg5-defuse/regenerate.sh`. + +use cg_defuse_probe::{ + Class, DeriveRefusal, Facts, FactsRefusal, Site, derive, fixpoint, nesting_class, parse, + source_class, +}; + +const FUEL: usize = 64; + +fn rows(name: &str) -> Facts { + let path = format!( + "{}/tests/data/{name}.defuse.tsv", + env!("CARGO_MANIFEST_DIR") + ); + parse(&std::fs::read_to_string(path).unwrap()).unwrap() +} + +/// `(file, line, class)` of every site outside `fixture.rs`, duplicates +/// (one source statement copied by Charon) folded when they agree. +fn table(facts: &Facts) -> Vec<(String, u32, Class)> { + let d = derive(facts, FUEL).unwrap(); + let mut out: Vec<(String, u32, Class)> = d + .verdicts + .iter() + .filter(|v| v.site.file != "src/fixture.rs") + .map(|v| (v.site.file.clone(), v.site.line, v.class)) + .collect(); + out.sort(); + out.dedup(); + out +} + +fn row(file: &str, line: u32, class: Class) -> (String, u32, Class) { + (file.to_string(), line, class) +} + +/// Fixed on EXO-237 before any derivation existed. +fn preregistered() -> Vec<(String, u32, Class)> { + vec![ + row("src/arm_a.rs", 75, Class::PerElement), + row("src/arm_b.rs", 245, Class::ScalarThreshold), + row("src/method.rs", 58, Class::ScalarThreshold), + row("src/oracle.rs", 62, Class::PerElement), + ] +} + +#[test] +fn the_derivation_gives_the_preregistered_answer() { + assert_eq!(table(&rows("m0")), preregistered()); +} + +#[test] +fn every_classified_site_carries_a_proof_and_unknown_carries_none() { + let d = derive(&rows("m0"), FUEL).unwrap(); + assert_eq!(d.verdicts.len(), 16); + let mut unknown = 0; + for v in &d.verdicts { + match v.class { + Class::Unknown => { + unknown += 1; + assert!(v.proof.is_none()); + } + _ => assert!( + v.proof.as_ref().is_some_and(|p| !p.is_empty()), + "{:?}", + v.site + ), + } + } + // The three remainders in `fixture.rs` whose divisor is a global place. + assert_eq!(unknown, 3); +} + +#[test] +fn egglog_and_the_plain_fixpoint_agree_on_every_site_of_every_fixture() { + let mut sites = 0; + for name in ["m0", "m1", "m2", "m3"] { + let facts = rows(name); + let derived: Vec = derive(&facts, FUEL) + .unwrap() + .verdicts + .iter() + .map(|v| v.class) + .collect(); + assert_eq!(derived, fixpoint(&facts), "{name}"); + sites += derived.len(); + } + assert_eq!(sites, 16 + 16 + 15 + 16); +} + +#[test] +fn the_source_scan_agrees_on_the_four_sites_without_reading_any_row() { + let lab = format!("{}/../foundry-parity-lab", env!("CARGO_MANIFEST_DIR")); + for (file, line, class) in preregistered() { + let text = std::fs::read_to_string(format!("{lab}/{file}")).unwrap(); + assert_eq!( + source_class(&text, line as usize), + Some(class), + "{file}:{line}; if the line moved, regenerate the fixtures" + ); + } +} + +fn mutant_source(name: &str) -> String { + let path = format!( + "{}/tests/data/src-{name}/method.rs", + env!("CARGO_MANIFEST_DIR") + ); + std::fs::read_to_string(path).unwrap() +} + +fn method_sites(facts: &Facts) -> Vec { + facts + .sites + .iter() + .filter(|s| s.file == "src/method.rs") + .cloned() + .collect() +} + +/// Mutant 1: the division moves into the loop and divides by the element. +#[test] +fn a_division_by_the_loop_element_flips_to_per_element_in_every_arm() { + let facts = rows("m1"); + let mut expected = preregistered(); + expected[2] = row("src/method.rs", 57, Class::PerElement); + assert_eq!(table(&facts), expected); + assert_eq!( + source_class(&mutant_source("m1"), 57), + Some(Class::PerElement) + ); +} + +/// Mutant 2: the division is gone; so is the row, and nothing else moves. +#[test] +fn removing_the_division_removes_the_site() { + let facts = rows("m2"); + assert!(method_sites(&facts).is_empty()); + let mut expected = preregistered(); + expected.remove(2); + assert_eq!(table(&facts), expected); + assert_eq!(rows("m0").sites.len() - facts.sites.len(), 1); + assert_eq!(source_class(&mutant_source("m2"), 58), None); +} + +/// Mutant 3: the division moves into the loop with the same operands. The +/// def-use arms keep it scalar; loop nesting calls it per-element. +#[test] +fn a_scalar_division_inside_the_loop_stays_scalar_where_nesting_gets_it_wrong() { + let facts = rows("m3"); + let mut expected = preregistered(); + expected[2] = row("src/method.rs", 57, Class::ScalarThreshold); + assert_eq!(table(&facts), expected); + assert_eq!( + source_class(&mutant_source("m3"), 57), + Some(Class::ScalarThreshold) + ); + let site = &method_sites(&facts)[0]; + assert_eq!(site.loop_depth, 1); + assert_eq!(nesting_class(site), Class::PerElement); +} + +/// On the unmutated crate nesting is already wrong once: Charon copies the +/// tail of `cook_ops` into the loop's exit paths. +#[test] +fn loop_nesting_misclassifies_one_of_the_four_real_sites() { + let facts = rows("m0"); + let wrong: Vec<(String, u32)> = facts + .sites + .iter() + .filter(|s| s.file != "src/fixture.rs") + .filter(|s| { + let want = preregistered() + .into_iter() + .find(|(f, l, _)| *f == s.file && *l == s.line) + .unwrap() + .2; + nesting_class(s) != want + }) + .map(|s| (s.file.clone(), s.line)) + .collect(); + assert_eq!( + wrong, + vec![ + ("src/arm_b.rs".to_string(), 245), + ("src/arm_b.rs".to_string(), 245) + ] + ); +} + +const HEAD: &str = "#version 1\n#schema kind\tfn\tfields\n"; + +fn synthetic(body: &str) -> Facts { + parse(&format!("{HEAD}{body}")).unwrap() +} + +#[test] +fn a_local_with_two_different_definitions_is_not_scalar() { + let one = + "ARG\tf\t1\ta\nDEF\tf\t2\t1\tassign\t3\t0\t1\nSITE\tf\t9\tDiv\tx.rs\t5\t0\t2\tconst\n"; + assert_eq!(fixpoint(&synthetic(one)), vec![Class::ScalarThreshold]); + let two = format!("{one}DEF\tf\t2\t4\tassign\t4\t1\t1\n"); + let facts = synthetic(&two); + assert_eq!(fixpoint(&facts), vec![Class::Unknown]); + let d = derive(&facts, FUEL).unwrap(); + assert_eq!(d.verdicts[0].class, Class::Unknown); + assert!(d.verdicts[0].proof.is_none()); +} + +#[test] +fn a_statement_copied_by_charon_is_one_definition() { + let body = "ARG\tf\t1\ta\nDEF\tf\t2\t1\tassign\t3\t0\t1\nDEF\tf\t2\t7\tassign\t3\t1\t1\n\ + SITE\tf\t9\tDiv\tx.rs\t5\t0\t2\tconst\n"; + let facts = synthetic(body); + assert_eq!(facts.defs[&("f".to_string(), 2)].len(), 1); + assert_eq!( + derive(&facts, FUEL).unwrap().verdicts[0].class, + Class::ScalarThreshold + ); +} + +#[test] +fn dependence_on_an_element_is_followed_through_a_chain() { + let body = "ARG\tf\t1\ta\nDEF\tf\t2\t1\tcall\t3\t1\t1\nELEM\tf\t2\t1\tnext\n\ + DEF\tf\t3\t2\tassign\t4\t1\t2\nDEF\tf\t4\t3\tassign\t5\t1\t3\n\ + SITE\tf\t9\tDiv\tx.rs\t6\t0\t1\t4\nSITE\tf\t10\tDiv\tx.rs\t7\t0\t1\t1\n"; + let facts = synthetic(body); + let d = derive(&facts, FUEL).unwrap(); + assert_eq!(d.verdicts[0].class, Class::PerElement); + assert_eq!(d.verdicts[1].class, Class::ScalarThreshold); + assert_eq!( + fixpoint(&facts), + vec![Class::PerElement, Class::ScalarThreshold] + ); +} + +#[test] +fn a_site_that_would_be_both_is_refused() { + let body = "ARG\tf\t1\ta\nELEM\tf\t1\t1\tnext\nSITE\tf\t9\tDiv\tx.rs\t6\t0\t1\tconst\n"; + assert_eq!( + derive(&synthetic(body), FUEL).unwrap_err(), + DeriveRefusal::Conflict + ); +} + +#[test] +fn running_out_of_fuel_is_a_refusal_not_a_partial_answer() { + assert_eq!(derive(&rows("m0"), 1).unwrap_err(), DeriveRefusal::Fuel(1)); +} + +#[test] +fn malformed_rows_are_refused() { + assert_eq!(parse("ARG\tf\t1\ta\n").unwrap_err(), FactsRefusal::Version); + assert_eq!( + parse(&format!("{HEAD}NOPE\tf\t1\n")).unwrap_err(), + FactsRefusal::Row(3) + ); + assert_eq!( + parse(&format!("{HEAD}SITE\tf\t9\tDiv\n")).unwrap_err(), + FactsRefusal::Row(3) + ); + assert_eq!( + parse(&format!("{HEAD}ARG\tf\tx\ta\n")).unwrap_err(), + FactsRefusal::Number(3) + ); +} + +#[test] +fn a_value_read_through_an_index_is_an_element_source() { + let body = "ARG\tf\t1\ta\nDEF\tf\t2\t1\tassign\t3\t0\t1\nINDEX\tf\t2\t1\n\ + SITE\tf\t9\tDiv\tx.rs\t6\t0\t2\tconst\n"; + let facts = synthetic(body); + assert_eq!( + derive(&facts, FUEL).unwrap().verdicts[0].class, + Class::PerElement + ); + assert_eq!(fixpoint(&facts), vec![Class::PerElement]); +} + +#[test] +fn the_source_scan_ignores_a_loop_that_has_closed() { + let src = "fn f(q: i32, xs: &[i32]) -> i32 {\n let mut y = 0;\n for d in xs {\n \ + y += d;\n }\n let d = 4;\n y + q / d\n}\n"; + assert_eq!(source_class(src, 7), Some(Class::ScalarThreshold)); + let inside = "fn f(q: i32, xs: &[i32]) -> i32 {\n let mut y = 0;\n for d in xs {\n \ + y += q / d;\n }\n y\n}\n"; + assert_eq!(source_class(inside, 4), Some(Class::PerElement)); +} + +#[test] +fn the_source_scan_treats_an_indexed_read_as_per_element() { + let src = "fn f(q: i32, xs: &[i32], i: usize) -> i32 {\n xs[i] / q\n}\n"; + assert_eq!(source_class(src, 2), Some(Class::PerElement)); + let plain = "fn f(q: i32, x: i32) -> i32 {\n x / q // not xs[i]\n}\n"; + assert_eq!(source_class(plain, 2), Some(Class::ScalarThreshold)); +} + +/// Local 3 has two definitions, so it is not scalar; a definition that reads +/// it is not scalar either, wherever it stands among the sources. +#[test] +fn one_non_scalar_source_anywhere_in_a_definition_blocks_scalar() { + let base = "ARG\tf\t1\ta\nDEF\tf\t3\t1\tassign\t2\t0\t1\nDEF\tf\t3\t2\tcall\t3\t0\t1\n"; + for srcs in ["1,3", "3,1"] { + let body = format!( + "{base}DEF\tf\t4\t5\tassign\t4\t0\t{srcs}\nSITE\tf\t9\tDiv\tx.rs\t6\t0\t4\tconst\n" + ); + let facts = synthetic(&body); + // The row order of the sources is kept, so both orders are distinct inputs. + let def = facts.defs[&("f".to_string(), 4)] + .iter() + .next() + .unwrap() + .2 + .clone(); + assert_eq!( + def.iter().map(u32::to_string).collect::>().join(","), + srcs + ); + assert_eq!( + derive(&facts, FUEL).unwrap().verdicts[0].class, + Class::Unknown, + "{srcs}" + ); + assert_eq!(fixpoint(&facts), vec![Class::Unknown], "{srcs}"); + } +}