: param-prep-quot ( params -- quot )
parameters>> [ lookup-c-type c-type-unboxer-quot ] map deep-spread>quot ;
-: alien-inputs/outputs ( params -- in-d out-d )
+: stack-shape ( params -- in out )
[
- [ parameters>> length ]
- [ alien-indirect-params? 1 0 ? ] bi + consume-d
- ] [ return>> void? 0 1 ? produce-d ] bi ;
+ [ parameters>> length ] [ alien-indirect-params? 1 0 ? ] bi +
+ ] [ return>> void? 0 1 ? ] bi ;
+
+: inputs/outputs ( params -- in-d out-d )
+ stack-shape [ consume-d ] [ produce-d ] bi* ;
: return-prep-quot ( params -- quot )
return>> [ [ ] ] [ lookup-c-type c-type-boxer-quot ] if-void ;
! Quotation which coerces parameters to required types
dup param-prep-quot infer-quot-here
! Consume inputs and outputs and add node to IR
- dup dup alien-inputs/outputs #alien-invoke,
+ dup dup inputs/outputs #alien-invoke,
! Quotation which coerces return value to required type
infer-return ;
! Coerce parameters to required types
dup param-prep-quot '[ _ [ >c-ptr ] bi* ] infer-quot-here
! Consume inputs and outputs and add node to IR
- dup dup alien-inputs/outputs #alien-indirect,
+ dup dup inputs/outputs #alien-indirect,
! Quotation which coerces return value to required type
infer-return ;
! Quotation which coerces parameters to required types
dup param-prep-quot infer-quot-here
! Consume inputs and outputs and add node to IR
- dup dup alien-inputs/outputs #alien-assembly,
+ dup dup inputs/outputs #alien-assembly,
! Quotation which coerces return value to required type
infer-return ;
'[ _ _ do-callback ] >quotation ;
: callback-effect ( params -- effect )
- [ parameters>> length "x" <array> ]
- [ return>> void? { } { "x" } ? ] bi <effect> ;
+ stack-shape [ "x" <array> ] bi@ <effect> ;
: infer-callback-quot ( params quot -- child )
[