From 66891135196edeebd21c8486e7640d8f597f0323 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sun, 7 Mar 2010 20:44:50 -0800 Subject: [PATCH] unify inner-d-index when unifying branches; close a few other leaks where meta-d could have been popped without updating inner-d-index --- basis/stack-checker/backend/backend.factor | 5 ++++- basis/stack-checker/branches/branches.factor | 7 +++++-- basis/stack-checker/transforms/transforms.factor | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/basis/stack-checker/backend/backend.factor b/basis/stack-checker/backend/backend.factor index 3476866e02..1de6ed0e6a 100644 --- a/basis/stack-checker/backend/backend.factor +++ b/basis/stack-checker/backend/backend.factor @@ -42,8 +42,11 @@ IN: stack-checker.backend : shorten-by ( n seq -- ) [ length swap - ] keep shorten ; inline +: shorten-d ( n -- ) + meta-d shorten-by meta-d length update-inner-d ; + : consume-d ( n -- seq ) - [ ensure-d ] [ meta-d shorten-by ] bi ; + [ ensure-d ] [ shorten-d ] bi ; : output-d ( values -- ) meta-d push-all ; diff --git a/basis/stack-checker/branches/branches.factor b/basis/stack-checker/branches/branches.factor index bb85ec5b1e..570b80f2fd 100644 --- a/basis/stack-checker/branches/branches.factor +++ b/basis/stack-checker/branches/branches.factor @@ -61,7 +61,9 @@ SYMBOL: quotations branch-variable ; : datastack-phi ( seq -- phi-in phi-out ) - [ input-count branch-variable ] [ \ meta-d active-variable ] bi + [ input-count branch-variable ] + [ inner-d-index branch-variable infimum inner-d-index set ] + [ \ meta-d active-variable ] tri unify-branches [ input-count set ] [ ] [ dup >vector \ meta-d set ] tri* ; @@ -80,7 +82,8 @@ SYMBOL: quotations : copy-inference ( -- ) \ meta-d [ clone ] change literals [ clone ] change - input-count [ ] change ; + input-count [ ] change + inner-d-index [ ] change ; GENERIC: infer-branch ( literal -- namespace ) diff --git a/basis/stack-checker/transforms/transforms.factor b/basis/stack-checker/transforms/transforms.factor index cf32792a2e..98e20e5330 100644 --- a/basis/stack-checker/transforms/transforms.factor +++ b/basis/stack-checker/transforms/transforms.factor @@ -18,7 +18,7 @@ IN: stack-checker.transforms :: ((apply-transform)) ( quot values stack rstate -- ) rstate recursive-state [ stack quot call-transformer ] with-variable - values [ length meta-d shorten-by ] [ #drop, ] bi + values [ length shorten-d ] [ #drop, ] bi rstate infer-quot ; : literal-values? ( values -- ? ) [ literal-value? ] all? ;