mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-04 11:46:35 +02:00
Enable renaming of lambda vars in analyze
This commit is contained in:
parent
5e2df83b2d
commit
e81f5b72bd
1 changed files with 22 additions and 12 deletions
|
@ -385,10 +385,10 @@
|
||||||
;; - env => Environment used to expand macros
|
;; - env => Environment used to expand macros
|
||||||
;;
|
;;
|
||||||
(define (analyze exp env rename-env local-renamed)
|
(define (analyze exp env rename-env local-renamed)
|
||||||
;;(newline)
|
;(newline)
|
||||||
;;(display "/* ")
|
;(display "/* ")
|
||||||
;;(write (list 'analyze exp))
|
;(write (list 'analyze exp))
|
||||||
;;(display " */")
|
;(display " */")
|
||||||
(cond ((self-evaluating? exp)
|
(cond ((self-evaluating? exp)
|
||||||
(analyze-self-evaluating exp))
|
(analyze-self-evaluating exp))
|
||||||
((quoted? exp) (analyze-quoted exp))
|
((quoted? exp) (analyze-quoted exp))
|
||||||
|
@ -438,13 +438,22 @@
|
||||||
(lambda (env) qval)))
|
(lambda (env) qval)))
|
||||||
|
|
||||||
(define (analyze-variable exp local-renamed)
|
(define (analyze-variable exp local-renamed)
|
||||||
(lambda (env)
|
(let* ((lookup (assoc exp local-renamed))
|
||||||
(let ((renamed (assoc exp local-renamed)))
|
;; TODO: doing too much here, need to figure out a way to speed things up!
|
||||||
(env:lookup-variable-value
|
(sym (cond
|
||||||
(if renamed
|
((pair? lookup)
|
||||||
(cdr renamed) ;; Extract renamed symbol
|
(car lookup))
|
||||||
exp)
|
(else
|
||||||
env))))
|
(call/cc (lambda (return)
|
||||||
|
(for-each
|
||||||
|
(lambda (v/r)
|
||||||
|
;; Map renamed symbol back to one in env
|
||||||
|
(if (eq? exp (cdr v/r))
|
||||||
|
(return (car v/r))))
|
||||||
|
local-renamed)
|
||||||
|
(return exp))))))) ;; Not found, keep input symbol
|
||||||
|
(lambda (env)
|
||||||
|
(env:lookup-variable-value sym env))))
|
||||||
|
|
||||||
(define (analyze-assignment exp a-env rename-env local-renamed)
|
(define (analyze-assignment exp a-env rename-env local-renamed)
|
||||||
(let ((var (assignment-variable exp))
|
(let ((var (assignment-variable exp))
|
||||||
|
@ -560,7 +569,8 @@
|
||||||
(lambda-body exp)
|
(lambda-body exp)
|
||||||
a-env
|
a-env
|
||||||
rename-env
|
rename-env
|
||||||
local-renamed ;; TODO: (append a-lookup local-renamed)
|
(append a-lookup local-renamed)
|
||||||
|
;local-renamed ;; TODO: (append a-lookup local-renamed)
|
||||||
)))
|
)))
|
||||||
(lambda (env) (make-procedure vars bproc env))))
|
(lambda (env) (make-procedure vars bproc env))))
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue