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:
parent
071d6b0ecc
commit
e672dd0208
6 changed files with 37 additions and 15 deletions
4
NEWS
4
NEWS
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue