1 ! Copyright (C) 2008, 2009 Slava Pestov.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: accessors kernel namespaces
4 stack-checker.recursive-state.tree ;
5 IN: stack-checker.recursive-state
7 TUPLE: recursive-state quotations inline-words ;
9 : <recursive-state> ( -- state ) recursive-state new ; inline
11 <recursive-state> recursive-state set-global
13 : add-local-quotation ( rstate quot -- rstate )
14 swap clone [ dupd store ] change-quotations ;
16 : add-inline-word ( word label -- rstate )
17 swap recursive-state get clone [ store ] change-inline-words ;
19 : inline-recursive-label ( word -- label/f )
20 recursive-state get inline-words>> lookup ;
22 : recursive-quotation? ( quot -- ? )
23 recursive-state get quotations>> lookup ;