*** empty log message ***
[bpt/guile.git] / libguile / eq.c
index ed6dc4e..cd3e45c 100644 (file)
@@ -1,4 +1,4 @@
-/*     Copyright (C) 1995,1996 Free Software Foundation, Inc.
+/*     Copyright (C) 1995,1996,1997,1998 Free Software Foundation, Inc.
  * 
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -12,7 +12,8 @@
  * 
  * You should have received a copy of the GNU General Public License
  * along with this software; see the file COPYING.  If not, write to
- * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ * the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307 USA
  *
  * As a special exception, the Free Software Foundation gives permission
  * for additional uses of the text contained in its release of GUILE.
  *
  * If you write modifications of your own for GUILE, it is your choice
  * whether to permit this exception to apply to your modifications.
- * If you do not wish that, delete this exception notice.  
- */
+ * If you do not wish that, delete this exception notice.  */
 \f
 #include <stdio.h>
 #include "_scm.h"
+#include "ramap.h"
+#include "stackchk.h"
+#include "strorder.h"
+#include "smob.h"
+#include "unif.h"
 
+#include "eq.h"
 \f
 SCM_PROC1 (s_eq_p, "eq?", scm_tc7_rpsubr, scm_eq_p);
-#ifdef __STDC__
-SCM
-scm_eq_p (SCM x, SCM y)
-#else
+
 SCM
 scm_eq_p (x, y)
      SCM x;
      SCM y;
-#endif
 {
   return ((x==y)
          ? SCM_BOOL_T
@@ -61,24 +63,20 @@ scm_eq_p (x, y)
 
 
 SCM_PROC1 (s_eqv_p, "eqv?", scm_tc7_rpsubr, scm_eqv_p);
-#ifdef __STDC__
-SCM
-scm_eqv_p (SCM x, SCM y)
-#else
+
 SCM
 scm_eqv_p (x, y)
      SCM x;
      SCM y;
-#endif
 {
   if (x==y) return SCM_BOOL_T;
-  if SCM_IMP(x) return SCM_BOOL_F;
-  if SCM_IMP(y) return SCM_BOOL_F;
+  if (SCM_IMP(x)) return SCM_BOOL_F;
+  if (SCM_IMP(y)) return SCM_BOOL_F;
   /* this ensures that types and scm_length are the same. */
   if (SCM_CAR(x) != SCM_CAR(y)) return SCM_BOOL_F;
-  if SCM_NUMP(x) {
+  if (SCM_NUMP(x)) {
 # ifdef SCM_BIGDIG
-    if SCM_BIGP(x) return (0==scm_bigcomp(x, y)) ? SCM_BOOL_T : SCM_BOOL_F;
+    if (SCM_BIGP(x)) return (0==scm_bigcomp(x, y)) ? SCM_BOOL_T : SCM_BOOL_F;
 # endif
 #ifdef SCM_FLOATS
     if (SCM_REALPART(x) != SCM_REALPART(y)) return SCM_BOOL_F;
@@ -91,18 +89,14 @@ scm_eqv_p (x, y)
 
 
 SCM_PROC1 (s_equal_p, "equal?", scm_tc7_rpsubr, scm_equal_p);
-#ifdef __STDC__
-SCM
-scm_equal_p (SCM x, SCM y)
-#else
+
 SCM
 scm_equal_p (x, y)
      SCM x;
      SCM y;
-#endif
 {
   SCM_CHECK_STACK;
- tailrecurse: SCM_ASYNC_TICK;
+ tailrecurse: SCM_TICK;
        if (x==y) return SCM_BOOL_T;
        if (SCM_IMP(x)) return SCM_BOOL_F;
        if (SCM_IMP(y)) return SCM_BOOL_F;
@@ -112,14 +106,13 @@ scm_equal_p (x, y)
                y = SCM_CDR(y);
                goto tailrecurse;
        }
-       /* this ensures that types and scm_length are the same. */
+       if (SCM_TYP7S (x) == scm_tc7_string
+           && SCM_TYP7S (y) == scm_tc7_string)
+         return scm_string_equal_p (x, y);
+       /* This ensures that types and scm_length are the same.  */
        if (SCM_CAR(x) != SCM_CAR(y)) return SCM_BOOL_F;
        switch (SCM_TYP7(x)) {
         default: return SCM_BOOL_F;
-       case scm_tc7_substring:
-       case scm_tc7_mb_substring:
-       case scm_tc7_mb_string:
-       case scm_tc7_string: return scm_string_equal_p(x, y);
        case scm_tc7_vector:
        case scm_tc7_wvect:
          return scm_vector_equal_p(x, y);
@@ -149,13 +142,9 @@ scm_equal_p (x, y)
 \f
 
 
-#ifdef __STDC__
-void
-scm_init_eq (void)
-#else
+
 void
 scm_init_eq ()
-#endif
 {
 #include "eq.x"
 }