stack-checker math sequences ;
IN: combinators.smart
-<PRIVATE
-
-: inputs ( quot -- n ) infer in>> length ;
-
-: outputs ( quot -- n ) infer out>> length ;
-
-PRIVATE>
-
MACRO: drop-outputs ( quot -- quot' )
dup outputs '[ @ _ ndrop ] ;
blub ;
MACRO: can-has-case ( cases -- )
- dup first second infer in>> length 1 +
+ dup first second inputs 1 +
'[ _ ndrop f ] suffix '[ _ case ] ;
GENERIC# >can-has-trial 1 ( obj #pick -- quot )
M: callable >can-has-trial
drop '[ _ can-has? ] ;
M: pair >can-has-trial
- swap first2 dup infer in>> length
+ swap first2 dup inputs
'[ _ npick _ instance? [ _ can-has? ] [ _ ndrop blub ] if ] ;
MACRO: can-has-vector-op ( trials #pick #dup -- )
: enough? ( stack word -- ? )
dup deferred? [ 2drop f ] [
- [ [ length ] [ 1quotation infer in>> length ] bi* >= ]
+ [ [ length ] [ 1quotation inputs ] bi* >= ]
[ 3drop f ] recover
] if ;
! Copyright (C) 2009, 2010 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: models.arrow models.product stack-checker accessors fry
-generalizations combinators.smart combinators.smart.private
-macros kernel ;
+generalizations combinators.smart macros kernel ;
IN: models.arrow.smart
MACRO: <smart-arrow> ( quot -- quot' )
<PRIVATE
MACRO: binary-roman-op ( quot -- quot' )
- [ infer in>> length ] [ ] [ infer out>> length ] tri
+ [ inputs ] [ ] [ outputs ] tri
'[ [ roman> ] _ napply @ [ >roman ] _ napply ] ;
PRIVATE>
-! Copyright (C) 2004, 2009 Slava Pestov.
+! Copyright (C) 2004, 2010 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
-USING: kernel io effects namespaces sequences quotations vocabs
-vocabs.loader generic words stack-checker.backend stack-checker.state
+USING: accessors kernel io effects namespaces sequences
+quotations vocabs vocabs.loader generic words
+stack-checker.backend stack-checker.state
stack-checker.known-words stack-checker.transforms
stack-checker.errors stack-checker.inlining
stack-checker.visitor.dummy ;
: infer. ( quot -- )
#! Safe to call from inference transforms.
infer effect>string print ;
+
+: inputs ( quot -- n ) infer in>> length ;
+
+: outputs ( quot -- n ) infer out>> length ;
MACRO: boa-unsafe ( class -- quot ) tuple-layout '[ _ <tuple-boa> ] ;
-MACRO: infer-in ( class -- quot ) infer in>> length '[ _ ] ;
+MACRO: infer-in ( class -- quot ) inputs '[ _ ] ;
: tuple-arity ( class -- quot ) '[ _ boa ] infer-in ; inline
! See http://factorcode.org/license.txt for BSD license.
USING: alien alien.c-types alien.syntax kernel libc sequences
continuations byte-arrays strings math namespaces system
-combinators combinators.smart combinators.smart.private
-vocabs.loader accessors stack-checker macros locals
-generalizations unix.types io vocabs classes.struct unix.time
-alien.libraries ;
+combinators combinators.smart vocabs.loader accessors
+stack-checker macros locals generalizations unix.types io vocabs
+classes.struct unix.time alien.libraries ;
IN: unix
CONSTANT: PROT_NONE 0
CONSTANT: base "vocab:xml/tests/xmltest/"
MACRO: drop-inputs ( quot -- newquot )
- infer in>> length '[ _ ndrop ] ;
+ inputs '[ _ ndrop ] ;
: fails? ( quot -- ? )
[ drop-outputs f ] [ nip drop-inputs t ] bi-curry recover ; inline