mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-24 12:35:05 +02:00
Bug fixes and enhancements
This commit is contained in:
parent
206bd1554b
commit
7adb9bd027
1 changed files with 8 additions and 2 deletions
|
@ -41,6 +41,8 @@
|
||||||
adbv:defined-by adbv:set-defined-by!
|
adbv:defined-by adbv:set-defined-by!
|
||||||
adbv:assigned adbv:set-assigned!
|
adbv:assigned adbv:set-assigned!
|
||||||
adbv:assigned-locally adbv:set-assigned-locally!
|
adbv:assigned-locally adbv:set-assigned-locally!
|
||||||
|
adbv:ref-by
|
||||||
|
adbv:set-ref-by!
|
||||||
;; Analyze functions
|
;; Analyze functions
|
||||||
adb:make-fnc
|
adb:make-fnc
|
||||||
%adb:make-fnc
|
%adb:make-fnc
|
||||||
|
@ -81,6 +83,7 @@
|
||||||
|
|
||||||
(define (analyze-cps exp)
|
(define (analyze-cps exp)
|
||||||
(define (analyze exp lid)
|
(define (analyze exp lid)
|
||||||
|
;(trace:error `(analyze ,lid ,exp))
|
||||||
(cond
|
(cond
|
||||||
; Core forms:
|
; Core forms:
|
||||||
((ast:lambda? exp)
|
((ast:lambda? exp)
|
||||||
|
@ -93,7 +96,7 @@
|
||||||
(lambda (arg)
|
(lambda (arg)
|
||||||
(let ((var (adb:get/default arg (adb:make-var))))
|
(let ((var (adb:get/default arg (adb:make-var))))
|
||||||
(adbv:set-global! var #f)
|
(adbv:set-global! var #f)
|
||||||
(adbv:set-defined-by! var lid)
|
(adbv:set-defined-by! var id)
|
||||||
(adb:set! arg var)))
|
(adb:set! arg var)))
|
||||||
(ast:lambda-formals->list exp))
|
(ast:lambda-formals->list exp))
|
||||||
(for-each
|
(for-each
|
||||||
|
@ -107,11 +110,14 @@
|
||||||
((define? exp)
|
((define? exp)
|
||||||
(let ((var (adb:get/default (define->var exp) (adb:make-var))))
|
(let ((var (adb:get/default (define->var exp) (adb:make-var))))
|
||||||
;; TODO:
|
;; TODO:
|
||||||
|
(adbv:set-defined-by! var lid)
|
||||||
|
(adbv:set-ref-by! var (cons lid (adbv:ref-by var)))
|
||||||
|
|
||||||
(analyze (define->exp exp) lid)))
|
(analyze (define->exp exp) lid)))
|
||||||
((set!? exp)
|
((set!? exp)
|
||||||
(let ((var (adb:get/default (set!->var exp) (adb:make-var))))
|
(let ((var (adb:get/default (set!->var exp) (adb:make-var))))
|
||||||
;; TODO:
|
;; TODO:
|
||||||
|
(adbv:set-ref-by! var (cons lid (adbv:ref-by var)))
|
||||||
|
|
||||||
(analyze (set!->exp exp) lid)))
|
(analyze (set!->exp exp) lid)))
|
||||||
((if? exp) `(if ,(analyze (if->condition exp) lid)
|
((if? exp) `(if ,(analyze (if->condition exp) lid)
|
||||||
|
@ -121,7 +127,7 @@
|
||||||
; Application:
|
; Application:
|
||||||
((app? exp)
|
((app? exp)
|
||||||
(map (lambda (e)
|
(map (lambda (e)
|
||||||
(analyze-cps e lid))
|
(analyze e lid))
|
||||||
exp))
|
exp))
|
||||||
;TODO: ((app? exp) (map (lambda (e) (wrap-mutables e globals)) exp))
|
;TODO: ((app? exp) (map (lambda (e) (wrap-mutables e globals)) exp))
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue