|
1440 | 1440 | (_while (call (top <=) ,cnt ,lim)
|
1441 | 1441 | (scope-block
|
1442 | 1442 | (block
|
1443 |
| - (local ,lhs) |
| 1443 | + ;; NOTE: enable this to force loop-local var |
| 1444 | + #;(local ,lhs) |
1444 | 1445 | (= ,lhs ,cnt)
|
1445 | 1446 | (break-block loop-cont
|
1446 | 1447 | ,body)
|
|
1459 | 1460 | (while (call (top !) (call (top done) ,coll ,state))
|
1460 | 1461 | (scope-block
|
1461 | 1462 | (block
|
1462 |
| - ,@(map (lambda (v) `(local ,v)) (lhs-vars lhs)) |
| 1463 | + ;; NOTE: enable this to force loop-local var |
| 1464 | + #;,@(map (lambda (v) `(local ,v)) (lhs-vars lhs)) |
1463 | 1465 | ,(lower-tuple-assignment (list lhs state)
|
1464 | 1466 | `(call (top next) ,coll ,state))
|
1465 | 1467 | ,body)))))))
|
|
1660 | 1662 | (boundscheck pop)
|
1661 | 1663 | (= ,ri (call (top +) ,ri 1)))
|
1662 | 1664 | `(for (= ,(cadr (car ranges)) ,(car rs))
|
1663 |
| - ,(construct-loops (cdr ranges) (cdr rs))))) |
| 1665 | + (block |
| 1666 | + ;; *** either this or force all for loop vars local |
| 1667 | + ,@(map (lambda (r) `(local ,r)) |
| 1668 | + (lhs-vars (cadr (car ranges)))) |
| 1669 | + ,(construct-loops (cdr ranges) (cdr rs)))))) |
1664 | 1670 |
|
1665 | 1671 | ;; Evaluate the comprehension
|
1666 | 1672 | `(block
|
|
1694 | 1700 | (type_goto ,initlabl ,onekey ,oneval)
|
1695 | 1701 | (call (top setindex!) ,result ,oneval ,onekey))
|
1696 | 1702 | `(for ,(car ranges)
|
1697 |
| - ,(construct-loops (cdr ranges))))) |
| 1703 | + (block |
| 1704 | + ;; *** either this or force all for loop vars local |
| 1705 | + ,@(map (lambda (r) `(local ,r)) |
| 1706 | + (lhs-vars (cadr (car ranges)))) |
| 1707 | + ,(construct-loops (cdr ranges)))))) |
1698 | 1708 |
|
1699 | 1709 | ;; Evaluate the comprehension
|
1700 | 1710 | (let ((loopranges
|
|
1730 | 1740 | (if (null? ranges)
|
1731 | 1741 | `(call (top setindex!) ,result ,(caddr expr) ,(cadr expr))
|
1732 | 1742 | `(for (= ,(cadr (car ranges)) ,(car rs))
|
1733 |
| - ,(construct-loops (cdr ranges) (cdr rs))))) |
| 1743 | + (block |
| 1744 | + ;; *** either this or force all for loop vars local |
| 1745 | + ,@(map (lambda (r) `(local ,r)) |
| 1746 | + (lhs-vars (cadr (car ranges)))) |
| 1747 | + ,(construct-loops (cdr ranges) (cdr rs)))))) |
1734 | 1748 |
|
1735 | 1749 | ;; Evaluate the comprehension
|
1736 | 1750 | `(block
|
@@ -2208,7 +2222,7 @@ So far only the second case can actually occur.
|
2208 | 2222 | (body (add-local-decls (cadr e) (append vars glob env))))
|
2209 | 2223 | `(scope-block ,@(map (lambda (v) `(local ,v))
|
2210 | 2224 | vars)
|
2211 |
| - ,(prn (remove-local-decls (prn body)))))) |
| 2225 | + ,(remove-local-decls body)))) |
2212 | 2226 | (else
|
2213 | 2227 | ;; form (local! x) adds a local to a normal (non-scope) block
|
2214 | 2228 | (let ((newenv (append (declared-local!-vars e) env)))
|
|
0 commit comments