diff --git a/scheme/cyclone/cps-optimizations.sld b/scheme/cyclone/cps-optimizations.sld index 28d53216..a7249ce3 100644 --- a/scheme/cyclone/cps-optimizations.sld +++ b/scheme/cyclone/cps-optimizations.sld @@ -29,6 +29,7 @@ analyze:find-direct-recursive-calls analyze:find-known-lambdas ;analyze-lambda-side-effects + opt:renumber-lambdas! opt:add-inlinable-functions opt:contract opt:inline-prims @@ -1587,6 +1588,26 @@ -1)) ) +;; Renumber lambdas and re-run analysis +(define (opt:renumber-lambdas! exp) + (define (scan exp) + (cond + ((ast:lambda? exp) + (ast:%make-lambda + (ast:get-next-lambda-id!) + (ast:lambda-args exp) + (scan (ast:lambda-body exp)) + (ast:lambda-has-cont exp))) + ((quote? exp) + exp) + ((app? exp) + (map (lambda (e) (scan e)) exp)) + (else exp))) + (let ((result (scan exp))) + (adb:clear!) + (analyze-cps result) + result)) + ;; Closure-conversion. ;; ;; Closure conversion eliminates all of the free variables from every