mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-24 20:45:06 +02:00
Populate lambda assigned-to field
This commit is contained in:
parent
5b29ae4e86
commit
9752fd074e
1 changed files with 13 additions and 6 deletions
|
@ -89,16 +89,18 @@
|
||||||
|
|
||||||
(define (adbv-set-assigned-value-helper! sym var value)
|
(define (adbv-set-assigned-value-helper! sym var value)
|
||||||
(define (update-lambda-atv! syms value)
|
(define (update-lambda-atv! syms value)
|
||||||
|
(trace:error `(update-lambda-atv! ,syms ,value))
|
||||||
(cond
|
(cond
|
||||||
((ast:lambda? value)
|
((ast:lambda? value)
|
||||||
(let ((id (ast:lambda-id value)))
|
(let ((id (ast:lambda-id value)))
|
||||||
(with-var! id (lambda (fnc)
|
(with-fnc! id (lambda (fnc)
|
||||||
(adbf:set-assigned-to-var!
|
(adbf:set-assigned-to-var!
|
||||||
fnc
|
fnc
|
||||||
(append syms (adbf:assigned-to-var fnc)))))))
|
(append syms (adbf:assigned-to-var fnc)))))))
|
||||||
;; TODO: follow references
|
;; Follow references
|
||||||
;((ref? value)
|
((ref? value)
|
||||||
; (update-lambda-atv! (cons value
|
(with-var! value (lambda (var)
|
||||||
|
(update-lambda-atv! (cons value syms) (adbv:assigned-value var)))))
|
||||||
(else
|
(else
|
||||||
#f))
|
#f))
|
||||||
)
|
)
|
||||||
|
@ -146,6 +148,11 @@
|
||||||
(fnc var)
|
(fnc var)
|
||||||
(adb:set! sym var)))
|
(adb:set! sym var)))
|
||||||
|
|
||||||
|
(define (with-fnc! id callback)
|
||||||
|
(let ((fnc (adb:get/default id (adb:make-fnc))))
|
||||||
|
(callback fnc)
|
||||||
|
(adb:set! id fnc)))
|
||||||
|
|
||||||
;; TODO: check app for const/const-value, also (for now) reset them
|
;; TODO: check app for const/const-value, also (for now) reset them
|
||||||
;; if the variable is modified via set/define
|
;; if the variable is modified via set/define
|
||||||
(define (analyze exp lid)
|
(define (analyze exp lid)
|
||||||
|
@ -153,8 +160,8 @@
|
||||||
(cond
|
(cond
|
||||||
; Core forms:
|
; Core forms:
|
||||||
((ast:lambda? exp)
|
((ast:lambda? exp)
|
||||||
(let ((id (ast:lambda-id exp))
|
(let* ((id (ast:lambda-id exp))
|
||||||
(fnc (adb:make-fnc)))
|
(fnc (adb:get/default id (adb:make-fnc))))
|
||||||
;; save lambda to adb
|
;; save lambda to adb
|
||||||
(adb:set! id fnc)
|
(adb:set! id fnc)
|
||||||
;; Analyze the lambda
|
;; Analyze the lambda
|
||||||
|
|
Loading…
Add table
Reference in a new issue