% % Send -- robust send a message to an object. % /ctxget { % n -- null|thing currentprocess /hnctx 2 copy known { get dup length 3 -1 roll sub get } {pop pop pop null} ifelse } def /sender {2 ctxget} def /target {3 ctxget} def /message {4 ctxget} def /args {5 ctxget} def /Send { % args message target -- find_object dup null eq {pop pop pop} { self soften currentprocess /hnctx 2 copy known {get} {pop pop 4 array} ifelse currentprocess /OperandStack get currentprocess /hnctx 3 -1 roll put clear args aload pop message /deliver target send clear currentprocess /hnctx get aload pop currentprocess /hnctx 3 -1 roll put pop pop pop pop } ifelse } def