[project @ 2001-01-17 15:11:04 by simonmar]
[ghc-hetmet.git] / ghc / interpreter / scc.c
index c4a3491..96d19f8 100644 (file)
@@ -1,27 +1,27 @@
-/* -*- mode: hugs-c; -*- */
+
 /* --------------------------------------------------------------------------
  * Strongly connected components algorithm for static.c.
  *
- * Copyright (c) The University of Nottingham and Yale University, 1994-1997.
- * All rights reserved. See NOTICE for details and conditions of use etc...
- * Hugs version 1.4, December 1997
+ * The Hugs 98 system is Copyright (c) Mark P Jones, Alastair Reid, the
+ * Yale Haskell Group, and the Oregon Graduate Institute of Science and
+ * Technology, 1994-1999, All rights reserved.  It is distributed as
+ * free software under the license in the file "License", which is
+ * included in the distribution.
  *
  * $RCSfile: scc.c,v $
- * $Revision: 1.2 $
- * $Date: 1998/12/02 13:22:34 $
+ * $Revision: 1.7 $
+ * $Date: 2000/03/22 18:14:23 $
  * ------------------------------------------------------------------------*/
 
 #ifndef SCC_C
 #define SCC_C
-#define visited(d) (isInt(DEPENDS(d)))  /* binding already visited ?       */
+#define visited(d) (isInt(DEPENDS(d)))          /* binding already visited?*/
 
 static Cell daSccs = NIL;
 static Int  daCount;
 
-static Int local sccMin Args((Int,Int));
-
-static Int local sccMin(x,y)           /* calculate minimum of x,y (unless */
-Int x,y; {                             /* y is zero)                       */
+static Int local sccMin ( Int x, Int y) /* calculate minimum of x,y        */
+{                                       /* (unless y is zero)              */
     return (x<=y || y==0) ? x : y;
 }
 #endif
@@ -42,9 +42,8 @@ Int x,y; {                             /* y is zero)                       */
  * This would probably have been a good application for C++ templates ...
  * ------------------------------------------------------------------------*/
 
-static Int local LOWLINK Args((Cell));  /* local function                  */
-static Int local LOWLINK(v)             /* calculate `lowlink' of v        */
-Cell v; {
+static Int local LOWLINK( Cell v )      /* calculate `lowlink' of v        */
+{
     Int  low = daCount;
     Int  dfn = daCount;                 /* depth first search no. of v     */
     List ws  = DEPENDS(v);              /* adjacency list for v            */
@@ -71,22 +70,26 @@ Cell v; {
 }
 
 #ifdef SCC
-static List local SCC(bs)               /* sort list with added dependency */
-List bs; {                              /* info into SCCs                  */
+static List local SCC ( List bs )       /* sort list with added dependency */
+{                                       /* info into SCCs                  */
+    List tmp = NIL;
     clearStack();
     daSccs = NIL;                       /* clear current list of SCCs      */
 
     for (daCount=1; nonNull(bs); bs=tl(bs))      /* visit each binding     */
         if (!visited(hd(bs)))
             LOWLINK(hd(bs));
-
-    return rev(daSccs);                 /* reverse to obtain correct order */
+    tmp = rev(daSccs);
+    daSccs = NIL;
+    return tmp;                         /* reverse to obtain correct order */
 }
 #endif
 
 #ifdef SCC2                             /* Two argument version            */
-static List local SCC2(bs,cs)           /* sort lists with added dependency*/
-List bs, cs; {                          /* info into SCCs                  */
+static List local SCC2 ( List bs,
+                         List cs )      /* sort lists with added dependency*/
+{                                       /* info into SCCs                  */
+    List tmp = NIL;
     clearStack();
     daSccs = NIL;                       /* clear current list of SCCs      */
 
@@ -96,8 +99,9 @@ List bs, cs; {                          /* info into SCCs                  */
     for (; nonNull(cs); cs=tl(cs))
         if (!visited(hd(cs)))
             LOWLINK(hd(cs));
-
-    return rev(daSccs);                 /* reverse to obtain correct order */
+    tmp = rev(daSccs);
+    daSccs = NIL;
+    return tmp;                         /* reverse to obtain correct order */
 }
 #endif