diff options
| author | Richard M. Stallman | 1991-08-17 17:54:46 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1991-08-17 17:54:46 +0000 |
| commit | e0f5cf5ae572905b50c14658ebb9e0ce5b404c5c (patch) | |
| tree | 46b7804e4696ae1fca3cad8356a24d0e1da779e9 /src | |
| parent | 60fb3ee151af0f5b797fca0a1ce5475373622e85 (diff) | |
| download | emacs-e0f5cf5ae572905b50c14658ebb9e0ce5b404c5c.tar.gz emacs-e0f5cf5ae572905b50c14658ebb9e0ce5b404c5c.zip | |
*** empty log message ***
Diffstat (limited to 'src')
| -rw-r--r-- | src/fns.c | 20 |
1 files changed, 16 insertions, 4 deletions
| @@ -74,6 +74,8 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ | |||
| 74 | 74 | ||
| 75 | Lisp_Object Qstring_lessp; | 75 | Lisp_Object Qstring_lessp; |
| 76 | 76 | ||
| 77 | static Lisp_Object internal_equal (); | ||
| 78 | |||
| 77 | DEFUN ("identity", Fidentity, Sidentity, 1, 1, 0, | 79 | DEFUN ("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 | |||
| 838 | static Lisp_Object | ||
| 839 | internal_equal (o1, o2, depth) | ||
| 840 | register Lisp_Object o1, o2; | ||
| 841 | int depth; | ||
| 842 | { | ||
| 843 | if (depth > 200) | ||
| 844 | error ("Stack overflow in equal"); | ||
| 833 | do_cdr: | 845 | do_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; |