Allow AST to track well-known procedures

This commit is contained in:
Justin Ethier 2018-09-12 17:01:24 -04:00
parent 39e92c1be7
commit d45c44388f

View file

@ -74,6 +74,7 @@
adbf:simple adbf:set-simple! adbf:simple adbf:set-simple!
adbf:unused-params adbf:set-unused-params! adbf:unused-params adbf:set-unused-params!
adbf:side-effects adbf:set-side-effects! adbf:side-effects adbf:set-side-effects!
adbf:well-known adbf:set-well-known!
) )
(begin (begin
;; The following two defines allow non-CPS functions to still be considered ;; The following two defines allow non-CPS functions to still be considered
@ -197,17 +198,33 @@
)) ))
(define-record-type <analysis-db-function> (define-record-type <analysis-db-function>
TODO: well-known (see Dybvig's paper) (%adb:make-fnc
(%adb:make-fnc simple unused-params assigned-to-var side-effects) simple
unused-params
assigned-to-var
side-effects
well-known
)
adb:function? adb:function?
(simple adbf:simple adbf:set-simple!) (simple adbf:simple adbf:set-simple!)
(unused-params adbf:unused-params adbf:set-unused-params!) (unused-params adbf:unused-params adbf:set-unused-params!)
(assigned-to-var adbf:assigned-to-var adbf:set-assigned-to-var!) (assigned-to-var adbf:assigned-to-var adbf:set-assigned-to-var!)
(side-effects adbf:side-effects adbf:set-side-effects!) (side-effects adbf:side-effects adbf:set-side-effects!)
;; TODO: top-level-define ? ;; From Dybvig's Optimizing Closures in O(0) Time paper:
;; A procedure is known at a call site if the call site provably invokes
;; that procedure's lambda-expression and only that lambda-expression. A
;; well-known procedure is one whose value is never used except at call
;; sites where it is known.
(well-known adbf:well-known adbf:set-well-known!)
) )
(define (adb:make-fnc) (define (adb:make-fnc)
(%adb:make-fnc '? '? '() #f)) (%adb:make-fnc
'? ;; simple
'? ;; unused-params
'() ;; assigned-to-var
#f ;; side-effects
#f ;; well-known
))
;; A constant value that cannot be mutated ;; A constant value that cannot be mutated
;; A variable only ever assigned to one of these could have all ;; A variable only ever assigned to one of these could have all