xpile 0.1.615

Polyglot transpile workbench (Python/C/C++/Rust/Ruchy/Lean ↔ Rust/Ruchy/PTX/WGSL/SPIR-V) with provable contracts at every layer.
# PMAT-754 (HUNT-V15 #1 COMP-SHADOW-RANGE-LIST): a nested comprehension whose
# inner loop-var SHADOWS an enclosing comprehension var of the same name
# resolved to the leaked outer `__forcN` while-counter instead of the inner
# binding. `[[x for x in range(5)] for x in range(2)]` made every inner row
# `[counter; 5]` → [[0,0,0,0,0],[1,1,1,1,1]] (sum 5) instead of Python's
# [[0,1,2,3,4],[0,1,2,3,4]] (sum 20) — silent-wrong, and rustc warned
# `unused variable: x`. The fix clears the active rename when an inner comp
# re-binds the shadowed name. Cross-checked vs python3.


def nested_sum() -> int:
    ys = [[x for x in range(5)] for x in range(2)]
    s = 0
    for row in ys:
        for v in row:
            s = s + v
    return s  # 20


def distinct_names() -> int:
    # different inner/outer names — unaffected
    ys = [[y for y in range(3)] for x in range(2)]
    s = 0
    for row in ys:
        for v in row:
            s = s + v
    return s  # 6


def shadow_over_list() -> int:
    # inner comp iterates a LIST while shadowing the outer range var
    base = [10, 20, 30]
    ys = [[x for x in base] for x in range(2)]
    return ys[0][1] + ys[1][2]  # 50