mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-21 03:00:19 +02:00
avoid emitting degenerate aliases in peval
* module/language/tree-il/peval.scm (<operand>, make-operand) (make-bound-operands, peval): Avoid emitting needless aliases in degenerate cases of let. (visit-operand): If we visit an operand with a fresh counter and have to abort, record that fact. * test-suite/tests/peval.test ("partial evaluation"): Add a test.
This commit is contained in:
parent
f6a554a6aa
commit
985702f713
2 changed files with 70 additions and 10 deletions
|
@ -985,4 +985,18 @@
|
|||
|
||||
(pass-if-peval resolve-primitives
|
||||
(car '(1 2))
|
||||
(const 1)))
|
||||
(const 1))
|
||||
|
||||
;; If we bail out when inlining an identifier because it's too big,
|
||||
;; but the identifier simply aliases some other identifier, then avoid
|
||||
;; residualizing a reference to the leaf identifier. The bailout is
|
||||
;; driven by the recursive-effort-limit, which is currently 100. We
|
||||
;; make sure to trip it with this recursive sum thing.
|
||||
(pass-if-peval resolve-primitives
|
||||
(let ((x (let sum ((n 0) (out 0))
|
||||
(if (< n 10000)
|
||||
(sum (1+ n) (+ out n))
|
||||
out))))
|
||||
((lambda (y) (list y)) x))
|
||||
(let (x) (_) (_)
|
||||
(apply (primitive list) (lexical x _)))))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue