PostScript

TorgoX on 2004-09-08T01:03:03

Dear Log,

PostScript doodlings. Look, I'm "trusting the stack"!!!!!

/reversed {          %   array  => reversed-of-array
  dup length 0 eq {
    pop []   % and that's it

  } {  % else normal case of it being nonempty:
    % This is awful /because/ we do it all on the stack
    dup length array
    0    1     3 index length 1 sub
    {
      % Get everything in order for the "get put" pair at the end
      exch dup   3 2 roll
      dup      4 index length exch sub 1 sub
      exch     4 index exch
      get put
    } for
    exch pop
  } ifelse
} def


/proc {     % name [varnames] routine proc,    -
  exch reversed
  { _ dict begin _ {exch def} forall _ exec end }
     %  /target Oldblock [/c/b/a] Newblock
  3 1 roll
     %  /target Newblock Oldblock [/c/b/a]

  dup length 1 add 3 mul 
  3 index exch
  0 exch
  put

  2 index exch
  3 exch put 

  1 index exch
  6 exch put
     % name Newblock
  def
} def
All this so I can now declare procedures like this;
/subname [/x /y /z] { ... } proc
and have it expand to:
/subname {
  SomeReasonableNumber dict begin  % begin scope
    /z exch def
    /y exch def
    /x exch def
    ...
  end
} def


Forth based languages

jdavidboyd on 2004-09-09T14:36:50

seem to always do everything on the stack...

Re:Forth based languages

TorgoX on 2004-09-10T08:21:00

I'll change that!