composed


Vocabulary
stack-checker.values

Definition
IN: stack-checker.values

TUPLE: composed quot1 quot2 ;


Methods
USING: accessors kernel stack-checker.values ;

M: composed (input-value?)
[ quot1>> input-value? ] [ quot2>> input-value? ] bi or ;


USING: kernel stack-checker.values ;

M: composed (literal)
>composed< [ compose ] curried/composed-literal ;


USING: kernel stack-checker.values ;

M: composed (literal-value?)
>composed< [ literal-value? ] both? ;


USING: kernel stack-checker.branches stack-checker.values ;

M: composed curried/composed? drop t ;


USING: accessors kernel namespaces quotations.private
stack-checker.backend stack-checker.known-words
stack-checker.state stack-checker.values ;

M: composed infer-call*
swap push-d [ uncompose ] infer-quot-here
[ quot2>> known pop-d [ set-known ] keep ]
[ quot1>> known pop-d [ set-known ] keep ] bi push-d push-d
1 infer->r infer-call terminated? get
[ 1 infer-r> infer-call ] unless ;


USING: accessors combinators.smart effects kernel
stack-checker.values ;

M: composed infer-known*
[ quot1>> ] [ quot2>> ] bi [ infer-known ] bi@ 2dup and
[ compose-effects ] [ 2drop f ] if ;


USING: accessors kernel sequences stack-checker.values ;

M: composed known>callable
[ quot1>> known known>callable ?@ ]
[ quot2>> known known>callable ?@ ] bi append ;