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)))
|
(let ((qval (cadr exp)))
|
||||||
(lambda (env) qval)))
|
(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)
|
(define (analyze-variable exp local-renamed)
|
||||||
(let* ((lookup (assoc 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
|
(sym (cond
|
||||||
((pair? lookup)
|
((pair? lookup)
|
||||||
(write `(lookup var ,lookup))
|
|
||||||
(newline)
|
|
||||||
(car lookup))
|
(car lookup))
|
||||||
(else
|
(else
|
||||||
(call/cc (lambda (return)
|
(let ((lookup-by-renamed (assoc-cdr exp local-renamed)))
|
||||||
(for-each
|
(if lookup-by-renamed
|
||||||
(lambda (v/r)
|
(car lookup-by-renamed) ;; Map renamed symbol back to one in env
|
||||||
;; Map renamed symbol back to one in env
|
exp)))))) ;; Not found, keep input symbol
|
||||||
(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
|
|
||||||
(lambda (env)
|
(lambda (env)
|
||||||
(env:lookup-variable-value sym env))))
|
(env:lookup-variable-value sym env))))
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue