     swap second length 2 - make-dip ;
 
 MACRO: (send) ( selector super? -- quot )
-    [
-        >r dup lookup-method r>
-        [ make-prepare-send % ] 2keep
-        super-message-senders message-senders ? get at ,
-    ] [ ] make ;
+    >r dup lookup-method r>
+    [ make-prepare-send ] 2keep
+    super-message-senders message-senders ? get at
+    [ slip execute ] 2curry ;
 
 : send ( args... receiver selector -- return... ) f (send) ; inline
 

SYMBOL: message-senders
SYMBOL: super-message-senders

global [
    message-senders [ H{ } assoc-like ] change
    super-message-senders [ H{ } assoc-like ] change
] bind

: cache-stub ( method function hash -- )
    [

    \ >r <repetition> >quotation -rot
    \ r> <repetition> >quotation 3append ;

MEMO: make-prepare-send ( selector method super? -- quot )
    [
        [ \ <super> , ] when
        swap cache-selector , \ selector ,
