Refactoring, set placeholders for future dev

This commit is contained in:
Justin Ethier 2019-08-13 18:02:46 -04:00
parent 540c5463f6
commit 769ec2ea76

View file

@ -69,9 +69,8 @@
adbv:const-value adbv:const-value
adbv:set-const-value! adbv:set-const-value!
adbv:ref-count adbv:ref-count
adbv:set-ref-count! adbv:set-ref-by-and-count!
adbv:ref-by adbv:ref-by
adbv:set-ref-by!
adbv:def-in-loop? adbv:def-in-loop?
adbv:set-def-in-loop! adbv:set-def-in-loop!
adbv:ref-in-loop? adbv:ref-in-loop?
@ -173,8 +172,8 @@
(defines-lambda-id adbv:defines-lambda-id adbv:set-defines-lambda-id!) (defines-lambda-id adbv:defines-lambda-id adbv:set-defines-lambda-id!)
(const adbv:const? adbv:set-const!) (const adbv:const? adbv:set-const!)
(const-value adbv:const-value adbv:set-const-value!) (const-value adbv:const-value adbv:set-const-value!)
(ref-count adbv:ref-count adbv:set-ref-count!) (ref-count adbv:ref-count %adbv:set-ref-count!)
(ref-by adbv:ref-by adbv:set-ref-by!) (ref-by adbv:ref-by %adbv:set-ref-by!)
(mutated-by-set adbv:mutated-by-set? adbv:set-mutated-by-set!) (mutated-by-set adbv:mutated-by-set? adbv:set-mutated-by-set!)
;; TODO: need to set reassigned flag if variable is SET, however there is at least ;; TODO: need to set reassigned flag if variable is SET, however there is at least
;; one exception for local define's, which are initialized to #f and then assigned ;; one exception for local define's, which are initialized to #f and then assigned
@ -201,6 +200,12 @@
(self-rec-call adbv:self-rec-call? adbv:set-self-rec-call!) (self-rec-call adbv:self-rec-call? adbv:set-self-rec-call!)
) )
(define (adbv:set-ref-by-and-count! var lambda-id)
(let ((ref-bys (adbv:ref-by var)))
;(when (not (member lambda-id ref-bys)) ;; Assume low ref-by count
(%adbv:set-ref-count! var (+ 1 (adbv:ref-count var)))
(%adbv:set-ref-by! var (cons lambda-id ref-bys)))) ;)
(define (adbv-set-assigned-value-helper! sym var value) (define (adbv-set-assigned-value-helper! sym var value)
(define (update-lambda-atv! syms value) (define (update-lambda-atv! syms value)
;(trace:error `(update-lambda-atv! ,syms ,value)) ;(trace:error `(update-lambda-atv! ,syms ,value))
@ -585,15 +590,13 @@
((quote? exp) #f) ((quote? exp) #f)
((ref? exp) ((ref? exp)
(let ((var (adb:get/default exp (adb:make-var)))) (let ((var (adb:get/default exp (adb:make-var))))
(adbv:set-ref-count! var (+ 1 (adbv:ref-count var))) (adbv:set-ref-by-and-count! var lid)
(adbv:set-ref-by! var (cons lid (adbv:ref-by var)))
)) ))
((define? exp) ((define? exp)
;(let ((var (adb:get/default (define->var exp) (adb:make-var)))) ;(let ((var (adb:get/default (define->var exp) (adb:make-var))))
(with-var! (define->var exp) (lambda (var) (with-var! (define->var exp) (lambda (var)
(adbv:set-defined-by! var lid) (adbv:set-defined-by! var lid)
(adbv:set-ref-count! var (+ 1 (adbv:ref-count var))) (adbv:set-ref-by-and-count! var lid)
(adbv:set-ref-by! var (cons lid (adbv:ref-by var)))
(adbv-set-assigned-value-helper! (define->var exp) var (define->exp exp)) (adbv-set-assigned-value-helper! (define->var exp) var (define->exp exp))
(adbv:set-const! var #f) (adbv:set-const! var #f)
(adbv:set-const-value! var #f))) (adbv:set-const-value! var #f)))
@ -610,8 +613,7 @@
(adbv:set-reassigned! var #t)) (adbv:set-reassigned! var #t))
(adbv:set-mutated-by-set! var #t) (adbv:set-mutated-by-set! var #t)
(adbv-set-assigned-value-helper! (set!->var exp) var (set!->exp exp)) (adbv-set-assigned-value-helper! (set!->var exp) var (set!->exp exp))
(adbv:set-ref-count! var (+ 1 (adbv:ref-count var))) (adbv:set-ref-by-and-count! var lid)
(adbv:set-ref-by! var (cons lid (adbv:ref-by var)))
(adbv:set-const! var #f) (adbv:set-const! var #f)
(adbv:set-const-value! var #f))) (adbv:set-const-value! var #f)))
(analyze (set!->exp exp) scope-sym lid)) (analyze (set!->exp exp) scope-sym lid))
@ -702,8 +704,7 @@
;; TODO: ;; TODO:
; ((ref? exp) ; ((ref? exp)
; (let ((var (adb:get/default exp (adb:make-var)))) ; (let ((var (adb:get/default exp (adb:make-var))))
; (adbv:set-ref-count! var (+ 1 (adbv:ref-count var))) ; (adbv:set-ref-by-and-count! var lid)
; (adbv:set-ref-by! var (cons lid (adbv:ref-by var)))
; )) ; ))
((define? exp) ((define? exp)
;(let ((var (adb:get/default (define->var exp) (adb:make-var)))) ;(let ((var (adb:get/default (define->var exp) (adb:make-var))))
@ -977,6 +978,7 @@
(and (and
arg ;; #f is a special value for init, so do not optimize it for now arg ;; #f is a special value for init, so do not optimize it for now
(or (const? arg) (or (const? arg)
;;(ref? arg) ;; DEBUG
(quote? arg)))) (quote? arg))))
(cdr exp)) (cdr exp))
) )