1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-01 12:20:26 +02:00

* goops.scm (equal?): Provide default method for `equal?'.

(compute-getters-n-setters): Check for bad init-thunks.

* eq.c (scm_eqv_p, scm_equal_p): Turned into a primitive generics.

* goops.texi (Object Comparisons): Removed object-eqv? and
object-equal? and added eqv?, equal? and =.
This commit is contained in:
Mikael Djurfeldt 2003-04-17 18:47:18 +00:00
parent 071d6b0ecc
commit e672dd0208
6 changed files with 37 additions and 15 deletions

4
NEWS
View file

@ -56,10 +56,10 @@ methods from their accessors.
This makes the <active-class> metaclass in (oop goops active-slot) This makes the <active-class> metaclass in (oop goops active-slot)
working again. working again.
** equal? is now a primitive generic ** eqv? and equal? are now primitive generic functions
This means that it is possible to provide custom comparisons for new This means that it is possible to provide custom comparisons for new
classes by specializing `equal?' to those classes. classes by specializing `eqv?' and `equal?' to those classes.
* Changes to the C interface * Changes to the C interface

View file

@ -1,3 +1,8 @@
2003-04-17 Mikael Djurfeldt <djurfeldt@nada.kth.se>
* goops.texi (Object Comparisons): Removed object-eqv? and
object-equal? and added eqv?, equal? and =.
2002-11-08 Neil Jerram <neil@ossau.uklinux.net> 2002-11-08 Neil Jerram <neil@ossau.uklinux.net>
* goops.texi (Top): Say "Indices" before index nodes in main menu. * goops.texi (Top): Say "Indices" before index nodes in main menu.

View file

@ -26,7 +26,7 @@ Guile
@ifinfo @ifinfo
This file documents GOOPS, an object oriented extension for Guile. This file documents GOOPS, an object oriented extension for Guile.
Copyright (C) 1999, 2000, 2001 Free Software Foundation Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation
Permission is granted to make and distribute verbatim copies of Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice this manual provided the copyright notice and this permission notice
@ -2372,17 +2372,30 @@ as done by @code{scm-error}.
@node Object Comparisons @node Object Comparisons
@subsection Object Comparisons @subsection Object Comparisons
@deffn generic object-eqv? @deffn generic eqv?
@deffnx method object-eqv? ((x <top>) (y <top>)) @deffnx method eqv? ((x <top>) (y <top>))
@deffnx generic object-equal? @deffnx generic equal?
@deffnx method object-equal? ((x <top>) (y <top>)) @deffnx method equal? ((x <top>) (y <top>))
@deffnx generic =
@deffnx method = ((x <number>) (y <number>))
Generic functions and default (unspecialized) methods for comparing two Generic functions and default (unspecialized) methods for comparing two
GOOPS objects. GOOPS objects.
The default methods always return @code{#f}. Application class authors The default method for @code{eqv?} returns @code{#t} for all values
may wish to define specialized methods for @code{object-eqv?} and that are equal in the sense defined by R5RS and the Guile reference
@code{object-equal?} that compare instances of the same class for manual, otherwise @code{#f}. The default method for @code{equal?}
equality in whatever sense is useful to the application. returns @code{#t} or @code{#f} in the sense defined by R5RS and the
Guile reference manual. If no such comparison is defined,
@code{equal?} returns the result of a call to @code{eqv?}. The
default method for = returns @code{#t} if @var{x} and @var{y} are
numerically equal, otherwise @code{#f}.
Application class authors may wish to define specialized methods for
@code{eqv?}, @code{equal?} and @code{=} that compare instances of the
same class for equality in whatever sense is useful to the
application. Such methods will only be called if the arguments have
the same class and the result of the comparison isn't defined by R5RS
and the Guile reference manual.
@end deffn @end deffn
@node Cloning Objects @node Cloning Objects

View file

@ -1,6 +1,6 @@
2003-04-17 Mikael Djurfeldt <djurfeldt@nada.kth.se> 2003-04-17 Mikael Djurfeldt <djurfeldt@nada.kth.se>
* eq.c (scm_equal_p): Turned into a primitive generic. * eq.c (scm_eqv_p, scm_equal_p): Turned into a primitive generics.
* snarf.h (SCM_PRIMITIVE_GENERIC, SCM_PRIMITIVE_GENERIC_1): New * snarf.h (SCM_PRIMITIVE_GENERIC, SCM_PRIMITIVE_GENERIC_1): New
macros. macros.

View file

@ -67,7 +67,7 @@ SCM_DEFINE1 (scm_eq_p, "eq?", scm_tc7_rpsubr,
#undef FUNC_NAME #undef FUNC_NAME
SCM_DEFINE1 (scm_eqv_p, "eqv?", scm_tc7_rpsubr, SCM_PRIMITIVE_GENERIC_1 (scm_eqv_p, "eqv?", scm_tc7_rpsubr,
(SCM x, SCM y), (SCM x, SCM y),
"The @code{eqv?} procedure defines a useful equivalence relation on objects.\n" "The @code{eqv?} procedure defines a useful equivalence relation on objects.\n"
"Briefly, it returns @code{#t} if @var{x} and @var{y} should normally be\n" "Briefly, it returns @code{#t} if @var{x} and @var{y} should normally be\n"
@ -110,6 +110,9 @@ SCM_DEFINE1 (scm_eqv_p, "eqv?", scm_tc7_rpsubr,
&& SCM_COMPLEX_IMAG (x) == SCM_COMPLEX_IMAG (y)); && SCM_COMPLEX_IMAG (x) == SCM_COMPLEX_IMAG (y));
} }
} }
if (SCM_UNPACK (g_scm_eqv_p))
return scm_call_generic_2 (g_scm_eqv_p, x, y);
else
return SCM_BOOL_F; return SCM_BOOL_F;
} }
#undef FUNC_NAME #undef FUNC_NAME

View file

@ -658,7 +658,8 @@
;;; Methods to compare objects ;;; Methods to compare objects
;;; ;;;
(define-method (equal? x y) #f) (define-method (eqv? x y) #f)
(define-method (equal? x y) (eqv? x y))
;;; These following two methods are for backward compatibility only. ;;; These following two methods are for backward compatibility only.
;;; They are not called by the Guile interpreter. ;;; They are not called by the Guile interpreter.