aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRichard M. Stallman1991-08-17 17:54:46 +0000
committerRichard M. Stallman1991-08-17 17:54:46 +0000
commite0f5cf5ae572905b50c14658ebb9e0ce5b404c5c (patch)
tree46b7804e4696ae1fca3cad8356a24d0e1da779e9 /src
parent60fb3ee151af0f5b797fca0a1ce5475373622e85 (diff)
downloademacs-e0f5cf5ae572905b50c14658ebb9e0ce5b404c5c.tar.gz
emacs-e0f5cf5ae572905b50c14658ebb9e0ce5b404c5c.zip
*** empty log message ***
Diffstat (limited to 'src')
-rw-r--r--src/fns.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/fns.c b/src/fns.c
index 3be50027b1c..fc9abd9ce73 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -74,6 +74,8 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
74 74
75Lisp_Object Qstring_lessp; 75Lisp_Object Qstring_lessp;
76 76
77static Lisp_Object internal_equal ();
78
77DEFUN ("identity", Fidentity, Sidentity, 1, 1, 0, 79DEFUN ("identity", Fidentity, Sidentity, 1, 1, 0,
78 "Return the argument unchanged.") 80 "Return the argument unchanged.")
79 (arg) 81 (arg)
@@ -483,8 +485,8 @@ DEFUN ("elt", Felt, Selt, 2, 2, 0,
483 { 485 {
484 if (XTYPE (seq) == Lisp_Cons || NULL (seq)) 486 if (XTYPE (seq) == Lisp_Cons || NULL (seq))
485 return Fcar (Fnthcdr (n, seq)); 487 return Fcar (Fnthcdr (n, seq));
486 else if (XTYPE (seq) == Lisp_String || 488 else if (XTYPE (seq) == Lisp_String
487 XTYPE (seq) == Lisp_Vector) 489 || XTYPE (seq) == Lisp_Vector)
488 return Faref (seq, n); 490 return Faref (seq, n);
489 else 491 else
490 seq = wrong_type_argument (Qsequencep, seq); 492 seq = wrong_type_argument (Qsequencep, seq);
@@ -830,6 +832,16 @@ Numbers are compared by value. Symbols must match exactly.")
830 (o1, o2) 832 (o1, o2)
831 register Lisp_Object o1, o2; 833 register Lisp_Object o1, o2;
832{ 834{
835 return internal_equal (o1, o2, 0);
836}
837
838static Lisp_Object
839internal_equal (o1, o2, depth)
840 register Lisp_Object o1, o2;
841 int depth;
842{
843 if (depth > 200)
844 error ("Stack overflow in equal");
833do_cdr: 845do_cdr:
834 QUIT; 846 QUIT;
835 if (XTYPE (o1) != XTYPE (o2)) return Qnil; 847 if (XTYPE (o1) != XTYPE (o2)) return Qnil;
@@ -837,7 +849,7 @@ do_cdr:
837 if (XTYPE (o1) == Lisp_Cons) 849 if (XTYPE (o1) == Lisp_Cons)
838 { 850 {
839 Lisp_Object v1; 851 Lisp_Object v1;
840 v1 = Fequal (Fcar (o1), Fcar (o2)); 852 v1 = Fequal (Fcar (o1), Fcar (o2), depth + 1);
841 if (NULL (v1)) 853 if (NULL (v1))
842 return v1; 854 return v1;
843 o1 = Fcdr (o1), o2 = Fcdr (o2); 855 o1 = Fcdr (o1), o2 = Fcdr (o2);
@@ -859,7 +871,7 @@ do_cdr:
859 Lisp_Object v, v1, v2; 871 Lisp_Object v, v1, v2;
860 v1 = XVECTOR (o1)->contents [index]; 872 v1 = XVECTOR (o1)->contents [index];
861 v2 = XVECTOR (o2)->contents [index]; 873 v2 = XVECTOR (o2)->contents [index];
862 v = Fequal (v1, v2); 874 v = Fequal (v1, v2, depth + 1);
863 if (NULL (v)) return v; 875 if (NULL (v)) return v;
864 } 876 }
865 return Qt; 877 return Qt;