Changed semantics of CallAtEnd so that it calls installed procedures
authorceriel <none@none>
Wed, 22 Mar 1989 17:36:20 +0000 (17:36 +0000)
committerceriel <none@none>
Wed, 22 Mar 1989 17:36:20 +0000 (17:36 +0000)
in reversed order

lang/m2/libm2/Epilogue.def
lang/m2/libm2/halt.c

index ee87c46..029c867 100644 (file)
@@ -13,8 +13,8 @@ DEFINITION MODULE Epilogue;
   PROCEDURE CallAtEnd(p: PROC): BOOLEAN;
   (* Add procedure "p" to the list of procedures that must be executed when
      the program finishes.
-     When the program finishes, these procedures are executed in the order in
-     which they were added to the list.
+     When the program finishes, these procedures are executed in the REVERSE
+     order in which they were added to the list.
      This procedure returns FALSE when there are too many procedures to be 
      called (the list has a fixed size).
   *)
index 01eeef3..ca98a69 100644 (file)
@@ -8,7 +8,7 @@
   Author:      Ceriel J.H. Jacobs
   Version:     $Header$
 */
-#define MAXPROCS 16
+#define MAXPROCS 32
 
 static int callindex = 0;
 static int (*proclist[MAXPROCS])();
@@ -17,7 +17,7 @@ _cleanup()
 {
        register int i;
 
-       for (i = 0; i < callindex; i++) {
+       for (i = callindex; --i >= 0;) {
                (*proclist[i])();
        }
        callindex = 0;
@@ -29,9 +29,7 @@ CallAtEnd(p)
        if (callindex >= MAXPROCS) {
                return 0;
        }
-       else {
-               proclist[callindex++] = p;
-       }
+       proclist[callindex++] = p;
        return 1;
 }