stack-checker: add inputs and outputs words, since 'infer (in>>|out>>) length' was coming up a lot

db4
Slava Pestov 2010-01-15 08:04:14 +13:00
parent a483261bed
commit 7155447aed
9 changed files with 18 additions and 23 deletions

View File

@ -4,14 +4,6 @@ USING: accessors fry generalizations kernel macros math.order
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 ] ;

View File

@ -110,7 +110,7 @@ MACRO: vvvv-vector-op ( trials -- )
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 )
@ -118,7 +118,7 @@ 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 -- )

View File

@ -68,7 +68,7 @@ UNION: explicit-inverse normal-inverse math-inverse pop-inverse ;
: enough? ( stack word -- ? )
dup deferred? [ 2drop f ] [
[ [ length ] [ 1quotation infer in>> length ] bi* >= ]
[ [ length ] [ 1quotation inputs ] bi* >= ]
[ 3drop f ] recover
] if ;

View File

@ -1,8 +1,7 @@
! 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' )

View File

@ -48,7 +48,7 @@ PRIVATE>
<PRIVATE
MACRO: binary-roman-op ( quot -- quot' )
[ infer in>> length ] [ ] [ infer out>> length ] tri
[ inputs ] [ ] [ outputs ] tri
'[ [ roman> ] _ napply @ [ >roman ] _ napply ] ;
PRIVATE>

View File

@ -1,7 +1,8 @@
! 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 ;
@ -15,3 +16,7 @@ M: callable infer ( quot -- effect )
: infer. ( quot -- )
#! Safe to call from inference transforms.
infer effect>string print ;
: inputs ( quot -- n ) infer in>> length ;
: outputs ( quot -- n ) infer out>> length ;

View File

@ -10,7 +10,7 @@ IN: tuple-arrays
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

View File

@ -3,10 +3,9 @@
! 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

View File

@ -21,7 +21,7 @@ TUPLE: xml-test id uri sections description type ;
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