重新抛出错误

此代码段实现了一个过程,其行为类似于 postscript 循环运算符。如果用户 proc 调用 exit,它会捕获 invalidexit 错误以修复最后的 end 的 dictstack。通过调用 stop 重新抛出除 invalidexit 之外的任何其他错误。

% array n proc  .  -
% Like `forall` but delivers length=n subsequences produced by getinterval
/fortuple { 4 dict begin
    0 {offset proc n arr} {exch def} forall
    /arr load length n idiv
    {
        {
            /arr load offset n getinterval
            [ /proc load currentdict end /begin cvx ] cvx exec
            /offset offset n add def
        } stopped {
            $error /errorname get /invalidexit eq
            { 1 dict begin exit }{ stop } ifelse
        } if
    } repeat
end
} def

%[ 0 1 10 {} for ] 3 {} fortuple pstack clear ()=