mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-15 16:57:35 +02:00
Speedup local env lookup
This commit is contained in:
parent
2cd96058eb
commit
41dc8ff120
1 changed files with 8 additions and 15 deletions
|
@ -437,27 +437,20 @@
|
|||
(let ((qval (cadr exp)))
|
||||
(lambda (env) qval)))
|
||||
|
||||
(define-c assoc-cdr
|
||||
"(void *data, int argc, closure _, object k, object x, object lis)"
|
||||
" return_closcall1(data, k, assoc_cdr(data, x, lis)); ")
|
||||
|
||||
(define (analyze-variable exp local-renamed)
|
||||
(let* ((lookup (assoc exp local-renamed))
|
||||
;; TODO: doing too much here, need to figure out a way to speed things up!
|
||||
(sym (cond
|
||||
((pair? lookup)
|
||||
(write `(lookup var ,lookup))
|
||||
(newline)
|
||||
(car lookup))
|
||||
(else
|
||||
(call/cc (lambda (return)
|
||||
(for-each
|
||||
(lambda (v/r)
|
||||
;; Map renamed symbol back to one in env
|
||||
(when (eq? exp (cdr v/r))
|
||||
(write `(reverse lookup var ,v/r))
|
||||
(newline)
|
||||
(return (car v/r))))
|
||||
local-renamed)
|
||||
(write `(NO lookup var ,exp ,local-renamed))
|
||||
(newline)
|
||||
(return exp))))))) ;; Not found, keep input symbol
|
||||
(let ((lookup-by-renamed (assoc-cdr exp local-renamed)))
|
||||
(if lookup-by-renamed
|
||||
(car lookup-by-renamed) ;; Map renamed symbol back to one in env
|
||||
exp)))))) ;; Not found, keep input symbol
|
||||
(lambda (env)
|
||||
(env:lookup-variable-value sym env))))
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue