diff --git a/basis/compiler/tree/propagation/transforms/transforms.factor b/basis/compiler/tree/propagation/transforms/transforms.factor index 3f6a200534..e95c6c4a49 100644 --- a/basis/compiler/tree/propagation/transforms/transforms.factor +++ b/basis/compiler/tree/propagation/transforms/transforms.factor @@ -163,10 +163,12 @@ ERROR: bad-partial-eval quot word ; : inline-new ( class -- quot/f ) dup tuple-class? [ - dup depends-on-conditionally - [ all-slots [ initial>> literalize ] map ] - [ tuple-layout '[ _ ] ] - bi append >quotation + dup tuple-layout + [ depends-on-tuple-layout ] + [ drop all-slots [ initial>> literalize ] [ ] map-as ] + [ nip ] + 2tri + '[ @ _ ] ] [ drop f ] if ; \ new [ inline-new ] 1 define-partial-eval diff --git a/basis/stack-checker/dependencies/dependencies.factor b/basis/stack-checker/dependencies/dependencies.factor index 865fedebca..4932d51de9 100644 --- a/basis/stack-checker/dependencies/dependencies.factor +++ b/basis/stack-checker/dependencies/dependencies.factor @@ -2,6 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: assocs accessors classes.algebra fry generic kernel math namespaces sequences words ; +FROM: classes.tuple.private => tuple-layout ; IN: stack-checker.dependencies ! Words that the current quotation depends on @@ -79,6 +80,15 @@ TUPLE: depends-on-method class generic method ; M: depends-on-method satisfied? [ [ class>> ] [ generic>> ] bi method-for-class ] [ method>> ] bi eq? ; +TUPLE: depends-on-tuple-layout class layout ; + +: depends-on-tuple-layout ( class layout -- ) + [ drop depends-on-conditionally ] + [ \ depends-on-tuple-layout add-conditional-dependency ] 2bi ; + +M: depends-on-tuple-layout satisfied? + [ class>> tuple-layout ] [ layout>> ] bi eq? ; + TUPLE: depends-on-flushable word ; : depends-on-flushable ( word -- ) diff --git a/basis/stack-checker/transforms/transforms.factor b/basis/stack-checker/transforms/transforms.factor index bb68a3f5c9..8afb5290de 100644 --- a/basis/stack-checker/transforms/transforms.factor +++ b/basis/stack-checker/transforms/transforms.factor @@ -140,10 +140,10 @@ IN: stack-checker.transforms ! Constructors \ boa [ dup tuple-class? [ - dup depends-on-conditionally - [ "boa-check" word-prop [ ] or ] - [ tuple-layout '[ _ ] ] - bi append + dup tuple-layout + [ depends-on-tuple-layout ] + [ [ "boa-check" word-prop [ ] or ] dip ] 2bi + '[ @ _ ] ] [ drop f ] if ] 1 define-transform