From 72c1bb9bea20bf5fdaa06710313f3eede7880bc6 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 4 May 2017 07:03:05 +0000 Subject: [PATCH] Keep track of which refs are continuations --- scheme/cyclone/cps-optimizations.sld | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/scheme/cyclone/cps-optimizations.sld b/scheme/cyclone/cps-optimizations.sld index 0a4fcf9e..dbd2d8c0 100644 --- a/scheme/cyclone/cps-optimizations.sld +++ b/scheme/cyclone/cps-optimizations.sld @@ -70,7 +70,8 @@ const const-value ref-by reassigned assigned-value app-fnc-count app-arg-count - inlinable mutated-indirectly) + inlinable mutated-indirectly + cont) adb:variable? (global adbv:global? adbv:set-global!) (defined-by adbv:defined-by adbv:set-defined-by!) @@ -91,6 +92,7 @@ (inlinable adbv:inlinable adbv:set-inlinable!) ;; Is the variable mutated indirectly? (EG: set-car! of a cdr) (mutated-indirectly adbv:mutated-indirectly? adbv:set-mutated-indirectly!) + (cont adbv:cont? adbv:set-cont!) ) (define (adbv-set-assigned-value-helper! sym var value) @@ -119,7 +121,7 @@ ) (define (adb:make-var) - (%adb:make-var '? '? #f #f #f '() #f #f 0 0 #t #f)) + (%adb:make-var '? '? #f #f #f '() #f #f 0 0 #t #f #f)) (define-record-type (%adb:make-fnc simple unused-params assigned-to-var side-effects) @@ -268,6 +270,11 @@ (let* ((id (ast:lambda-id exp)) (fnc (adb:get/default id (adb:make-fnc)))) (adb:set! id fnc) + ;; Flag continuation variable, if present + (if (ast:lambda-has-cont exp) + (let ((k (car (ast:lambda-args exp)))) + (with-var! k (lambda (var) + (adbv:set-cont! var #t))))) (for-each (lambda (expr) (analyze-find-lambdas expr id))