diff --git a/basis/compiler/cfg/builder/alien/alien-tests.factor b/basis/compiler/cfg/builder/alien/alien-tests.factor index df0517f864..6c53f9c3c7 100644 --- a/basis/compiler/cfg/builder/alien/alien-tests.factor +++ b/basis/compiler/cfg/builder/alien/alien-tests.factor @@ -66,6 +66,12 @@ cpu x86.64? [ ] cfg-unit-test ] when +! caller-stack-cleanup +{ 0 } [ + alien-node-params new long >>return cdecl >>abi 25 + caller-stack-cleanup +] unit-test + ! prepare-caller-return ${ cpu x86.32? { { 1 int-rep EAX } } { { 1 int-rep RAX } } ? diff --git a/basis/compiler/cfg/builder/alien/alien.factor b/basis/compiler/cfg/builder/alien/alien.factor index 921cce3cba..6126588f75 100644 --- a/basis/compiler/cfg/builder/alien/alien.factor +++ b/basis/compiler/cfg/builder/alien/alien.factor @@ -54,9 +54,8 @@ IN: compiler.cfg.builder.alien : prepare-caller-return ( params -- reg-outputs ) return>> [ { } ] [ base-type load-return ] if-void ; -: caller-stack-frame ( params -- cleanup stack-size ) - [ stack-params get ] dip [ return>> ] [ abi>> ] bi stack-cleanup - stack-params get ; +: caller-stack-cleanup ( params stack-size -- cleanup ) + swap [ return>> ] [ abi>> ] bi stack-cleanup ; : check-dlsym ( symbol library -- ) { @@ -91,7 +90,7 @@ IN: compiler.cfg.builder.alien [ varargs?>> ] [ caller-parameters ] [ prepare-caller-return { } ] - [ caller-stack-frame ] + [ stack-params get [ caller-stack-cleanup ] keep ] } cleave ; M: #alien-invoke emit-node ( block node -- block' )