From 63ad397cc1b890b2353a62ca691a6762ab9d9bb7 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sun, 7 Mar 2010 11:55:47 -0800 Subject: [PATCH] tweak recursive call site checking to consider declared-effects equivalent to their wrapped values --- basis/stack-checker/inlining/inlining.factor | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/basis/stack-checker/inlining/inlining.factor b/basis/stack-checker/inlining/inlining.factor index c83f609868..fd49fa73f0 100644 --- a/basis/stack-checker/inlining/inlining.factor +++ b/basis/stack-checker/inlining/inlining.factor @@ -119,9 +119,15 @@ SYMBOL: enter-out : trimmed-enter-out ( label -- stack ) dup enter-out>> trim-stack ; +GENERIC: (undeclared-known) ( value -- known ) +M: object (undeclared-known) ; +M: declared-effect (undeclared-known) value>> known (undeclared-known) ; + +: undeclared-known ( value -- known ) known (undeclared-known) ; + : check-call-site-stack ( label -- ) [ ] [ call-site-stack ] [ trimmed-enter-out ] tri - [ dup known [ [ known ] bi@ = ] [ 2drop t ] if ] 2all? + [ dup undeclared-known [ [ undeclared-known ] bi@ = ] [ 2drop t ] if ] 2all? [ drop ] [ word>> inconsistent-recursive-call-error inference-error ] if ; : check-call ( label -- )