mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-04 19:56:34 +02:00
Allow AST to track well-known procedures
This commit is contained in:
parent
39e92c1be7
commit
d45c44388f
1 changed files with 21 additions and 4 deletions
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue