25 lines
691 B
Factor
25 lines
691 B
Factor
|
! Copyright (C) 2009 Daniel Ehrenberg.
|
||
|
! See http://factorcode.org/license.txt for BSD license.
|
||
|
USING: kernel macros fry summary sequences generalizations accessors
|
||
|
continuations effects.parser parser ;
|
||
|
IN: call
|
||
|
|
||
|
ERROR: wrong-values values quot length-required ;
|
||
|
|
||
|
M: wrong-values summary
|
||
|
drop "Wrong number of values returned from quotation" ;
|
||
|
|
||
|
<PRIVATE
|
||
|
|
||
|
: firstn-safe ( array quot n -- ... )
|
||
|
3dup nip swap length = [ nip firstn ] [ wrong-values ] if ; inline
|
||
|
|
||
|
PRIVATE>
|
||
|
|
||
|
MACRO: call-effect ( effect -- quot )
|
||
|
[ in>> length ] [ out>> length ] bi
|
||
|
'[ [ _ narray ] dip [ with-datastack ] keep _ firstn-safe ] ;
|
||
|
|
||
|
: call(
|
||
|
")" parse-effect parsed \ call-effect parsed ; parsing
|