123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- (*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %
- % PASCAL BASED MINI-LISP
- %
- % File: PASN.RED - Trailer File
- % ChangeDate: 5:39am Saturday, 26 September 1981
- % By: M. L. Griss
- % Add Hooks for CATCH/THROW
- %
- % All RIGHTS RESERVED
- % COPYRIGHT (C) - 1981 - M. L. GRISS
- % Computer Science Department
- % University of Utah
- %
- % Do Not distribute with out written consent of M. L. Griss
- %
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*)
- (* pasN.PAS ---- the last file to be appended, close CATCH, do init *)
- BEGIN (* Body of Catch *)
- IF initphase=0 THEN (* Kludge to get into scope of CATCH *)
- BEGIN init; initphase := 1; firstp; END
- ELSE BEGIN
- initphase := initphase + 1;
- idspace[xthrowing].val := nilref;
- catch_stk:=st; (* Capture Stack *)
- catch_bstk:=idspace[xbstack].val; (* Capture Bstack *)
- xeval;
- initphase := initphase - 1;
- (* Return Point *)
- IF idspace[xthrowing].val <> nilref
- THEN BEGIN
- st:=catch_stk;
- r[2]:=catch_bstk;
- xunbindto; (* return value, old stack *)
- END;
- END
- END (* catch *);
- BEGIN (* Top Level *)
- initphase := 0;
- r[1] := nilref;
- Xcatch;
- writeln('halt after top catch');
- exit(pas0);
- end.
|