mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-28 07:50:20 +02:00
replace <dynref> with primcalls to fluid-ref
* doc/ref/compiler.texi (Tree-IL): Remove mention of <dynref>. * module/language/scheme/decompile-tree-il.scm (do-decompile): (choose-output-names): Remove dynref. * module/language/tree-il.scm (<tree-il>, parse-tree-il): (unparse-tree-il, make-tree-il-folder, pre-post-order): Remove <dynref>. * module/language/tree-il/analyze.scm (analyze-lexicals): * module/language/tree-il/compile-glil.scm (*primcall-ops*): Add fluid-ref. (flatten-lambda-case): Remove <dynref> case. * module/language/tree-il/cse.scm (cse): * module/language/tree-il/debug.scm (verify-tree-il): Remove <dynref> cases. * module/language/tree-il/effects.scm (make-effects-analyzer): Remove <dynref> case. Add a primcall fluid-ref case. * module/language/tree-il/peval.scm (peval): Remove dynref cases. * module/language/tree-il/primitives.scm (*primitive-expand-table*): Remove fluid-ref -> dynref transformation.
This commit is contained in:
parent
bb97e4abd4
commit
86d0eb31df
10 changed files with 4 additions and 56 deletions
|
@ -466,11 +466,6 @@ evaluate to fluids, and @var{vals} a corresponding list of expressions
|
||||||
to bind to the fluids during the dynamic extent of the evaluation of
|
to bind to the fluids during the dynamic extent of the evaluation of
|
||||||
@var{body}.
|
@var{body}.
|
||||||
@end deftp
|
@end deftp
|
||||||
@deftp {Scheme Variable} <dynref> fluid
|
|
||||||
@deftpx {External Representation} (dynref @var{fluid})
|
|
||||||
A dynamic variable reference. @var{fluid} should be a Tree-IL
|
|
||||||
expression evaluating to a fluid.
|
|
||||||
@end deftp
|
|
||||||
@deftp {Scheme Variable} <dynset> fluid exp
|
@deftp {Scheme Variable} <dynset> fluid exp
|
||||||
@deftpx {External Representation} (dynset @var{fluid} @var{exp})
|
@deftpx {External Representation} (dynset @var{fluid} @var{exp})
|
||||||
A dynamic variable set. @var{fluid}, a Tree-IL expression evaluating
|
A dynamic variable set. @var{fluid}, a Tree-IL expression evaluating
|
||||||
|
|
|
@ -438,9 +438,6 @@
|
||||||
(map recurse vals))
|
(map recurse vals))
|
||||||
,@(recurse-body body)))
|
,@(recurse-body body)))
|
||||||
|
|
||||||
((<dynref> fluid)
|
|
||||||
`(fluid-ref ,(recurse fluid)))
|
|
||||||
|
|
||||||
((<dynset> fluid exp)
|
((<dynset> fluid exp)
|
||||||
`(fluid-set! ,(recurse fluid) ,(recurse exp)))
|
`(fluid-set! ,(recurse fluid) ,(recurse exp)))
|
||||||
|
|
||||||
|
@ -762,7 +759,6 @@
|
||||||
(for-each recurse vals)
|
(for-each recurse vals)
|
||||||
(recurse body))
|
(recurse body))
|
||||||
|
|
||||||
((<dynref> fluid) (primitive 'fluid-ref) (recurse fluid))
|
|
||||||
((<dynset> fluid exp)
|
((<dynset> fluid exp)
|
||||||
(primitive 'fluid-set!) (recurse fluid) (recurse exp))
|
(primitive 'fluid-set!) (recurse fluid) (recurse exp))
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,6 @@
|
||||||
<fix> fix? make-fix fix-src fix-names fix-gensyms fix-vals fix-body
|
<fix> fix? make-fix fix-src fix-names fix-gensyms fix-vals fix-body
|
||||||
<let-values> let-values? make-let-values let-values-src let-values-exp let-values-body
|
<let-values> let-values? make-let-values let-values-src let-values-exp let-values-body
|
||||||
<dynlet> dynlet? make-dynlet dynlet-src dynlet-fluids dynlet-vals dynlet-body
|
<dynlet> dynlet? make-dynlet dynlet-src dynlet-fluids dynlet-vals dynlet-body
|
||||||
<dynref> dynref? make-dynref dynref-src dynref-fluid
|
|
||||||
<dynset> dynset? make-dynset dynset-src dynset-fluid dynset-exp
|
<dynset> dynset? make-dynset dynset-src dynset-fluid dynset-exp
|
||||||
<prompt> prompt? make-prompt prompt-src prompt-tag prompt-body prompt-handler
|
<prompt> prompt? make-prompt prompt-src prompt-tag prompt-body prompt-handler
|
||||||
<abort> abort? make-abort abort-src abort-tag abort-args abort-tail
|
<abort> abort? make-abort abort-src abort-tag abort-args abort-tail
|
||||||
|
@ -135,7 +134,6 @@
|
||||||
(define-type (<tree-il> #:common-slots (src) #:printer print-tree-il)
|
(define-type (<tree-il> #:common-slots (src) #:printer print-tree-il)
|
||||||
(<fix> names gensyms vals body)
|
(<fix> names gensyms vals body)
|
||||||
(<let-values> exp body)
|
(<let-values> exp body)
|
||||||
(<dynref> fluid)
|
|
||||||
(<dynset> fluid exp)
|
(<dynset> fluid exp)
|
||||||
(<prompt> tag body handler)
|
(<prompt> tag body handler)
|
||||||
(<abort> tag args tail))
|
(<abort> tag args tail))
|
||||||
|
@ -250,9 +248,6 @@
|
||||||
(('dynlet fluids vals body)
|
(('dynlet fluids vals body)
|
||||||
(make-dynlet loc (map retrans fluids) (map retrans vals) (retrans body)))
|
(make-dynlet loc (map retrans fluids) (map retrans vals) (retrans body)))
|
||||||
|
|
||||||
(('dynref fluid)
|
|
||||||
(make-dynref loc (retrans fluid)))
|
|
||||||
|
|
||||||
(('dynset fluid exp)
|
(('dynset fluid exp)
|
||||||
(make-dynset loc (retrans fluid) (retrans exp)))
|
(make-dynset loc (retrans fluid) (retrans exp)))
|
||||||
|
|
||||||
|
@ -338,9 +333,6 @@
|
||||||
`(dynlet ,(map unparse-tree-il fluids) ,(map unparse-tree-il vals)
|
`(dynlet ,(map unparse-tree-il fluids) ,(map unparse-tree-il vals)
|
||||||
,(unparse-tree-il body)))
|
,(unparse-tree-il body)))
|
||||||
|
|
||||||
(($ <dynref> src fluid)
|
|
||||||
`(dynref ,(unparse-tree-il fluid)))
|
|
||||||
|
|
||||||
(($ <dynset> src fluid exp)
|
(($ <dynset> src fluid exp)
|
||||||
`(dynset ,(unparse-tree-il fluid) ,(unparse-tree-il exp)))
|
`(dynset ,(unparse-tree-il fluid) ,(unparse-tree-il exp)))
|
||||||
|
|
||||||
|
@ -418,8 +410,6 @@
|
||||||
(let*-values (((seed ...) (fold-values foldts fluids seed ...))
|
(let*-values (((seed ...) (fold-values foldts fluids seed ...))
|
||||||
((seed ...) (fold-values foldts vals seed ...)))
|
((seed ...) (fold-values foldts vals seed ...)))
|
||||||
(foldts body seed ...)))
|
(foldts body seed ...)))
|
||||||
(($ <dynref> src fluid)
|
|
||||||
(foldts fluid seed ...))
|
|
||||||
(($ <dynset> src fluid exp)
|
(($ <dynset> src fluid exp)
|
||||||
(let*-values (((seed ...) (foldts fluid seed ...)))
|
(let*-values (((seed ...) (foldts fluid seed ...)))
|
||||||
(foldts exp seed ...)))
|
(foldts exp seed ...)))
|
||||||
|
@ -516,9 +506,6 @@ This is an implementation of `foldts' as described by Andy Wingo in
|
||||||
(($ <dynlet> src fluids vals body)
|
(($ <dynlet> src fluids vals body)
|
||||||
(make-dynlet src (map lp fluids) (map lp vals) (lp body)))
|
(make-dynlet src (map lp fluids) (map lp vals) (lp body)))
|
||||||
|
|
||||||
(($ <dynref> src fluid)
|
|
||||||
(make-dynref src (lp fluid)))
|
|
||||||
|
|
||||||
(($ <dynset> src fluid exp)
|
(($ <dynset> src fluid exp)
|
||||||
(make-dynset src (lp fluid) (lp exp)))
|
(make-dynset src (lp fluid) (lp exp)))
|
||||||
|
|
||||||
|
|
|
@ -340,9 +340,6 @@
|
||||||
((<dynlet> fluids vals body)
|
((<dynlet> fluids vals body)
|
||||||
(apply lset-union eq? (step body) (map step (append fluids vals))))
|
(apply lset-union eq? (step body) (map step (append fluids vals))))
|
||||||
|
|
||||||
((<dynref> fluid)
|
|
||||||
(step fluid))
|
|
||||||
|
|
||||||
((<dynset> fluid exp)
|
((<dynset> fluid exp)
|
||||||
(lset-union eq? (step fluid) (step exp)))
|
(lset-union eq? (step fluid) (step exp)))
|
||||||
|
|
||||||
|
@ -511,9 +508,6 @@
|
||||||
((<dynlet> fluids vals body)
|
((<dynlet> fluids vals body)
|
||||||
(apply max (recur body) (map recur (append fluids vals))))
|
(apply max (recur body) (map recur (append fluids vals))))
|
||||||
|
|
||||||
((<dynref> fluid)
|
|
||||||
(recur fluid))
|
|
||||||
|
|
||||||
((<dynset> fluid exp)
|
((<dynset> fluid exp)
|
||||||
(max (recur fluid) (recur exp)))
|
(max (recur fluid) (recur exp)))
|
||||||
|
|
||||||
|
|
|
@ -114,6 +114,7 @@
|
||||||
(list . list)
|
(list . list)
|
||||||
(vector . vector)
|
(vector . vector)
|
||||||
((class-of . 1) . class-of)
|
((class-of . 1) . class-of)
|
||||||
|
((fluid-ref . 1) . fluid-ref)
|
||||||
((@slot-ref . 2) . slot-ref)
|
((@slot-ref . 2) . slot-ref)
|
||||||
((@slot-set! . 3) . slot-set)
|
((@slot-set! . 3) . slot-set)
|
||||||
((string-length . 1) . string-length)
|
((string-length . 1) . string-length)
|
||||||
|
@ -989,15 +990,6 @@
|
||||||
(if RA
|
(if RA
|
||||||
(emit-branch #f 'br RA)))))
|
(emit-branch #f 'br RA)))))
|
||||||
|
|
||||||
((<dynref> src fluid)
|
|
||||||
(case context
|
|
||||||
((drop)
|
|
||||||
(comp-drop fluid))
|
|
||||||
((push vals tail)
|
|
||||||
(comp-push fluid)
|
|
||||||
(emit-code #f (make-glil-call 'fluid-ref 1))))
|
|
||||||
(maybe-emit-return))
|
|
||||||
|
|
||||||
((<dynset> src fluid exp)
|
((<dynset> src fluid exp)
|
||||||
(comp-push fluid)
|
(comp-push fluid)
|
||||||
(comp-push exp)
|
(comp-push exp)
|
||||||
|
|
|
@ -449,10 +449,6 @@
|
||||||
env ctx)))
|
env ctx)))
|
||||||
(return (make-dynlet src fluids vals body)
|
(return (make-dynlet src fluids vals body)
|
||||||
(concat db*** (concat db** db*)))))
|
(concat db*** (concat db** db*)))))
|
||||||
(($ <dynref> src fluid)
|
|
||||||
(let*-values (((fluid db*) (visit fluid db env 'value)))
|
|
||||||
(return (make-dynref src fluid)
|
|
||||||
db*)))
|
|
||||||
(($ <dynset> src fluid exp)
|
(($ <dynset> src fluid exp)
|
||||||
(let*-values (((fluid db*) (visit fluid db env 'value))
|
(let*-values (((fluid db*) (visit fluid db env 'value))
|
||||||
((exp db**) (visit exp db env 'value)))
|
((exp db**) (visit exp db env 'value)))
|
||||||
|
|
|
@ -216,8 +216,6 @@
|
||||||
(for-each (cut visit <> env) fluids)
|
(for-each (cut visit <> env) fluids)
|
||||||
(for-each (cut visit <> env) vals)
|
(for-each (cut visit <> env) vals)
|
||||||
(visit body env))))
|
(visit body env))))
|
||||||
(($ <dynref> src fluid)
|
|
||||||
(visit fluid env))
|
|
||||||
(($ <dynset> src fluid exp)
|
(($ <dynset> src fluid exp)
|
||||||
(visit fluid env)
|
(visit fluid env)
|
||||||
(visit exp env))
|
(visit exp env))
|
||||||
|
|
|
@ -217,10 +217,6 @@ of an expression."
|
||||||
(cause &type-check)
|
(cause &type-check)
|
||||||
(cause &fluid)
|
(cause &fluid)
|
||||||
(compute-effects body)))
|
(compute-effects body)))
|
||||||
(($ <dynref> _ fluid)
|
|
||||||
(logior (compute-effects fluid)
|
|
||||||
(cause &type-check)
|
|
||||||
&fluid))
|
|
||||||
(($ <dynset> _ fluid exp)
|
(($ <dynset> _ fluid exp)
|
||||||
(logior (compute-effects fluid)
|
(logior (compute-effects fluid)
|
||||||
(compute-effects exp)
|
(compute-effects exp)
|
||||||
|
@ -282,6 +278,9 @@ of an expression."
|
||||||
(($ <primcall> _ 'make-prompt-tag (arg))
|
(($ <primcall> _ 'make-prompt-tag (arg))
|
||||||
(logior (compute-effects arg) &allocation))
|
(logior (compute-effects arg) &allocation))
|
||||||
|
|
||||||
|
(($ <primcall> _ 'fluid-ref (fluid))
|
||||||
|
(logior (compute-effects fluid) &fluid))
|
||||||
|
|
||||||
;; Primitives that are normally effect-free, but which might
|
;; Primitives that are normally effect-free, but which might
|
||||||
;; cause type checks, allocate memory, or access mutable
|
;; cause type checks, allocate memory, or access mutable
|
||||||
;; memory. FIXME: expand, to be more precise.
|
;; memory. FIXME: expand, to be more precise.
|
||||||
|
|
|
@ -515,7 +515,6 @@ top-level bindings from ENV and return the resulting expression."
|
||||||
($ <toplevel-ref>)
|
($ <toplevel-ref>)
|
||||||
($ <module-ref>)
|
($ <module-ref>)
|
||||||
($ <primitive-ref>)
|
($ <primitive-ref>)
|
||||||
($ <dynref>)
|
|
||||||
($ <lexical-set>) ; FIXME: these set! expressions
|
($ <lexical-set>) ; FIXME: these set! expressions
|
||||||
($ <toplevel-set>) ; could return zero values in
|
($ <toplevel-set>) ; could return zero values in
|
||||||
($ <toplevel-define>) ; the future
|
($ <toplevel-define>) ; the future
|
||||||
|
@ -999,8 +998,6 @@ top-level bindings from ENV and return the resulting expression."
|
||||||
(($ <dynlet> src fluids vals body)
|
(($ <dynlet> src fluids vals body)
|
||||||
(make-dynlet src (map for-value fluids) (map for-value vals)
|
(make-dynlet src (map for-value fluids) (map for-value vals)
|
||||||
(for-tail body)))
|
(for-tail body)))
|
||||||
(($ <dynref> src fluid)
|
|
||||||
(make-dynref src (for-value fluid)))
|
|
||||||
(($ <dynset> src fluid exp)
|
(($ <dynset> src fluid exp)
|
||||||
(make-dynset src (for-value fluid) (for-value exp)))
|
(make-dynset src (for-value fluid) (for-value exp)))
|
||||||
(($ <toplevel-ref> src (? effect-free-primitive? name))
|
(($ <toplevel-ref> src (? effect-free-primitive? name))
|
||||||
|
|
|
@ -534,12 +534,6 @@
|
||||||
(hashq-set! *primitive-expand-table* 'eqv? maybe-simplify-to-eq)
|
(hashq-set! *primitive-expand-table* 'eqv? maybe-simplify-to-eq)
|
||||||
(hashq-set! *primitive-expand-table* 'equal? maybe-simplify-to-eq)
|
(hashq-set! *primitive-expand-table* 'equal? maybe-simplify-to-eq)
|
||||||
|
|
||||||
(hashq-set! *primitive-expand-table*
|
|
||||||
'fluid-ref
|
|
||||||
(case-lambda
|
|
||||||
((src fluid) (make-dynref src fluid))
|
|
||||||
(else #f)))
|
|
||||||
|
|
||||||
(hashq-set! *primitive-expand-table*
|
(hashq-set! *primitive-expand-table*
|
||||||
'fluid-set!
|
'fluid-set!
|
||||||
(case-lambda
|
(case-lambda
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue