From 9752fd074e8f0a513e47f064ac8e68132d79646b Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 31 May 2016 22:37:37 -0400 Subject: [PATCH] Populate lambda assigned-to field --- scheme/cyclone/cps-optimizations.sld | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/scheme/cyclone/cps-optimizations.sld b/scheme/cyclone/cps-optimizations.sld index 0daaad33..2ee075e4 100644 --- a/scheme/cyclone/cps-optimizations.sld +++ b/scheme/cyclone/cps-optimizations.sld @@ -89,16 +89,18 @@ (define (adbv-set-assigned-value-helper! sym var value) (define (update-lambda-atv! syms value) +(trace:error `(update-lambda-atv! ,syms ,value)) (cond ((ast:lambda? value) (let ((id (ast:lambda-id value))) - (with-var! id (lambda (fnc) + (with-fnc! id (lambda (fnc) (adbf:set-assigned-to-var! fnc (append syms (adbf:assigned-to-var fnc))))))) - ;; TODO: follow references - ;((ref? value) - ; (update-lambda-atv! (cons value + ;; Follow references + ((ref? value) + (with-var! value (lambda (var) + (update-lambda-atv! (cons value syms) (adbv:assigned-value var))))) (else #f)) ) @@ -146,6 +148,11 @@ (fnc 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 ;; if the variable is modified via set/define (define (analyze exp lid) @@ -153,8 +160,8 @@ (cond ; Core forms: ((ast:lambda? exp) - (let ((id (ast:lambda-id exp)) - (fnc (adb:make-fnc))) + (let* ((id (ast:lambda-id exp)) + (fnc (adb:get/default id (adb:make-fnc)))) ;; save lambda to adb (adb:set! id fnc) ;; Analyze the lambda