From c438e84bd038a058203d1c9e3df84f113565757d Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 30 Jan 2010 04:12:09 +1300 Subject: [PATCH] compiler.crossref: add next-method dependency --- .../dependencies/dependencies.factor | 10 ++++++++++ basis/stack-checker/transforms/transforms.factor | 16 ++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/basis/stack-checker/dependencies/dependencies.factor b/basis/stack-checker/dependencies/dependencies.factor index 4932d51de9..5a5cbcbd6f 100644 --- a/basis/stack-checker/dependencies/dependencies.factor +++ b/basis/stack-checker/dependencies/dependencies.factor @@ -72,9 +72,19 @@ TUPLE: depends-on-classes-disjoint class1 class2 ; M: depends-on-classes-disjoint satisfied? [ class1>> ] [ class2>> ] bi classes-intersect? not ; +TUPLE: depends-on-next-method class generic next-method ; + +: depends-on-next-method ( class generic next-method -- ) + over depends-on-conditionally + \ depends-on-next-method add-conditional-dependency ; + +M: depends-on-next-method satisfied? + [ [ class>> ] [ generic>> ] bi next-method ] [ next-method>> ] bi eq? ; + TUPLE: depends-on-method class generic method ; : depends-on-method ( class generic method -- ) + over depends-on-conditionally \ depends-on-method add-conditional-dependency ; M: depends-on-method satisfied? diff --git a/basis/stack-checker/transforms/transforms.factor b/basis/stack-checker/transforms/transforms.factor index 8afb5290de..cf32792a2e 100644 --- a/basis/stack-checker/transforms/transforms.factor +++ b/basis/stack-checker/transforms/transforms.factor @@ -124,15 +124,15 @@ IN: stack-checker.transforms \ 3|| t "no-compile" set-word-prop +: add-next-method-dependency ( method -- ) + [ "method-class" word-prop ] + [ "method-generic" word-prop ] bi + 2dup next-method + depends-on-next-method ; + \ (call-next-method) [ - [ - [ "method-class" word-prop ] - [ "method-generic" word-prop ] bi - depends-on-generic - ] [ - [ next-method-quot ] - [ '[ _ no-next-method ] ] bi or - ] bi + [ add-next-method-dependency ] + [ [ next-method-quot ] [ '[ _ no-next-method ] ] bi or ] bi ] 1 define-transform \ (call-next-method) t "no-compile" set-word-prop