diff --git a/scheme/cyclone/optimize-cps.sld b/scheme/cyclone/optimize-cps.sld index 10d67aa7..a3a118e2 100644 --- a/scheme/cyclone/optimize-cps.sld +++ b/scheme/cyclone/optimize-cps.sld @@ -22,14 +22,14 @@ (import (scheme base) (scheme cyclone util) (scheme cyclone ast) - (scheme cyclone optimize-cps) (scheme cyclone transforms) (srfi 69)) (export analyze-cps ;adb:init! - adb:get key - adb:set! key val + adb:get + adb:get/default + adb:set! ;; Variables adb:make-var %adb:make-var @@ -53,6 +53,7 @@ ; ;(set! *adb* (make-hash-table))) ; 'TODO) (define (adb:get key) (hash-table-ref *adb* key)) + (define (adb:get/default key default) (hash-table-ref/default *adb* key default)) (define (adb:set! key val) (hash-table-set! *adb* key val)) (define-record-type (%adb:make-var global defined-by assigned assigned-locally) @@ -85,6 +86,13 @@ (adb:set! id (adb:make-fnc)) ;; TODO: anything to record???? params? + (for-each + (lambda (arg) + (let ((var (adb:get/default arg (adb:make-var)))) + (adbv:set-global! var #f) + (adbv:set-defined-by! var lid) + (adb:set! arg var))) + (ast:lambda-formals->list exp)) (for-each (lambda (expr) (analyze expr id)) diff --git a/scheme/cyclone/transforms.sld b/scheme/cyclone/transforms.sld index 91d044ed..792d3a6a 100644 --- a/scheme/cyclone/transforms.sld +++ b/scheme/cyclone/transforms.sld @@ -67,6 +67,8 @@ lambda-formals-type lambda-formals->list lambda-num-args + ast:lambda-formals-type + ast:lambda-formals->list list->lambda-formals pair->list list->pair