1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-01 04:10:18 +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)
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
classes by specializing `equal?' to those classes.
classes by specializing `eqv?' and `equal?' to those classes.
* 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>
* goops.texi (Top): Say "Indices" before index nodes in main menu.

View file

@ -26,7 +26,7 @@ Guile
@ifinfo
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
this manual provided the copyright notice and this permission notice
@ -2372,17 +2372,30 @@ as done by @code{scm-error}.
@node Object Comparisons
@subsection Object Comparisons
@deffn generic object-eqv?
@deffnx method object-eqv? ((x <top>) (y <top>))
@deffnx generic object-equal?
@deffnx method object-equal? ((x <top>) (y <top>))
@deffn generic eqv?
@deffnx method eqv? ((x <top>) (y <top>))
@deffnx generic equal?
@deffnx method equal? ((x <top>) (y <top>))
@deffnx generic =
@deffnx method = ((x <number>) (y <number>))
Generic functions and default (unspecialized) methods for comparing two
GOOPS objects.
The default methods always return @code{#f}. Application class authors
may wish to define specialized methods for @code{object-eqv?} and
@code{object-equal?} that compare instances of the same class for
equality in whatever sense is useful to the application.
The default method for @code{eqv?} returns @code{#t} for all values
that are equal in the sense defined by R5RS and the Guile reference
manual, otherwise @code{#f}. The default method for @code{equal?}
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
@node Cloning Objects

View file

@ -1,6 +1,6 @@
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
macros.

View file

@ -67,7 +67,7 @@ SCM_DEFINE1 (scm_eq_p, "eq?", scm_tc7_rpsubr,
#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),
"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"
@ -110,7 +110,10 @@ SCM_DEFINE1 (scm_eqv_p, "eqv?", scm_tc7_rpsubr,
&& SCM_COMPLEX_IMAG (x) == SCM_COMPLEX_IMAG (y));
}
}
return SCM_BOOL_F;
if (SCM_UNPACK (g_scm_eqv_p))
return scm_call_generic_2 (g_scm_eqv_p, x, y);
else
return SCM_BOOL_F;
}
#undef FUNC_NAME

View file

@ -658,7 +658,8 @@
;;; 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.
;;; They are not called by the Guile interpreter.