mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-21 14:49:17 +02:00
Only generate a let if local var is used
If the variable is not used we will get a warning from the C compiler. So let's not generate a let unless the var is actually used. We may want to revisit this later for a related optimization, maybe via Cyc-seq.
This commit is contained in:
parent
09f2f0412d
commit
1145d1f8e2
1 changed files with 15 additions and 8 deletions
|
@ -64,14 +64,21 @@
|
|||
;;(newline)
|
||||
;TODO: need to revisit this, may need to replace values with assignments to the "let" variable.
|
||||
;would need to be able to carry that through to cgen and assign properly over there...
|
||||
(let ((value (lvr:tail-calls->values
|
||||
(car (ast:lambda-body (car exp)))
|
||||
(car (ast:lambda-args (car exp)))
|
||||
(car (ast:lambda-args (cadr exp)))
|
||||
))
|
||||
(var (car (ast:lambda-args (cadr exp))))
|
||||
(body (ast:lambda-body (cadr exp))))
|
||||
(if value
|
||||
(let* ((value (lvr:tail-calls->values
|
||||
(car (ast:lambda-body (car exp)))
|
||||
(car (ast:lambda-args (car exp)))
|
||||
(car (ast:lambda-args (cadr exp)))
|
||||
))
|
||||
(var (car (ast:lambda-args (cadr exp))))
|
||||
(body (ast:lambda-body (cadr exp)))
|
||||
(av (adb:get/default var #f)) ;; Set to #f if unit testing
|
||||
(ref-count
|
||||
(if av
|
||||
(adbv:ref-count av)
|
||||
1)) ;; Dummy value
|
||||
)
|
||||
(if (and (> ref-count 0) ;; 0 ==> local var is never used
|
||||
value)
|
||||
`(let ((,var ,value))
|
||||
,@body)
|
||||
(map scan exp)) ;; failsafe
|
||||
|
|
Loading…
Add table
Reference in a new issue