Keywords have a tc7
* libguile/tags.h (scm_tc7_keyword): Allocate a tc7, so that the VM can
have cheap keyword? tests.
* libguile/keywords.c:
* libguile/keywords.h: Adapt.
* libguile/goops.c (scm_class_of, scm_sys_goops_early_init): Capture
<keyword>.
* libguile/print.c (iprin1): Inline keyword printer.
* libguile/evalext.c (scm_self_evaluating_p): Add keywords here.
* libguile/deprecated.h:
* libguile/deprecated.c (scm_tc16_keyword): Deprecate.
* module/language/cps/compile-bytecode.scm (compile-fun): Add keyword?
case, and bitvector? case while we're at it.
* module/language/cps/effects-analysis.scm (define-primitive-effects):
Add bytevector?, keyword?, and bitvector? cases.
* module/language/cps/primitives.scm (*branching-primcall-arities*): Add
keyword?.
* module/language/cps/types.scm (bitvector?, keyword?, bytevector?): Add
branch inferrers.
* module/language/tree-il/primitives.scm (*interesting-primitive-names*):
(*effect-free-primitives*):
(*effect+exception-free-primitives*): Add bytevector?, keyword?, and
bitvector?.
* module/oop/goops.scm (<keyword>): New class.
* module/system/base/types.scm (%tc7-keyword, cell->object): Add cases.
* module/system/vm/assembler.scm (br-if-keyword): New definition.
* module/system/vm/disassembler.scm (code-annotation): Add br-if-tc7
case for keywords.
* test-suite/tests/types.test ("clonable objects"): Update now that
keywords are cloneable.
2015-01-19 16:57:42 +01:00
|
|
|
|
/* Copyright (C) 1998,1999,2000,2001,2002,2003,2004,2008,2009,2010,2011,2012,2013,2014,2015
|
2004-05-24 04:15:49 +00:00
|
|
|
|
* Free Software Foundation, Inc.
|
2002-04-22 17:46:06 +00:00
|
|
|
|
*
|
2003-04-05 19:15:35 +00:00
|
|
|
|
* This library is free software; you can redistribute it and/or
|
2009-06-17 00:22:09 +01:00
|
|
|
|
* modify it under the terms of the GNU Lesser General Public License
|
|
|
|
|
|
* as published by the Free Software Foundation; either version 3 of
|
|
|
|
|
|
* the License, or (at your option) any later version.
|
2002-04-22 17:46:06 +00:00
|
|
|
|
*
|
2009-06-17 00:22:09 +01:00
|
|
|
|
* This library is distributed in the hope that it will be useful, but
|
|
|
|
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
2003-04-05 19:15:35 +00:00
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
|
|
* Lesser General Public License for more details.
|
2002-04-22 17:46:06 +00:00
|
|
|
|
*
|
2003-04-05 19:15:35 +00:00
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
|
|
* License along with this library; if not, write to the Free Software
|
2009-06-17 00:22:09 +01:00
|
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
|
|
|
|
* 02110-1301 USA
|
2003-04-05 19:15:35 +00:00
|
|
|
|
*/
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* This software is a derivative work of other copyrighted softwares; the
|
|
|
|
|
|
* copyright notices of these softwares are placed in the file COPYRIGHTS
|
|
|
|
|
|
*
|
|
|
|
|
|
* This file is based upon stklos.c from the STk distribution by
|
|
|
|
|
|
* Erick Gallesio <eg@unice.fr>.
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
2008-09-13 15:35:27 +02:00
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
|
|
# include <config.h>
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
#include "libguile/_scm.h"
|
2005-03-07 21:42:02 +00:00
|
|
|
|
#include "libguile/async.h"
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
#include "libguile/chars.h"
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
#include "libguile/dynwind.h"
|
|
|
|
|
|
#include "libguile/eval.h"
|
move subr implementation details to gsubr.[ch]
* libguile/procs.h: Move subr macros to gsubr.h.
* libguile/procs.c (scm_c_make_subr, scm_c_make_subr_with_generic)
(scm_c_define_subr, scm_c_define_subr_with_generic): Remove these,
because they deal in subr types, and now there is only one subr type.
The body of this code is now in gsubr.c.
* libguile/deprecated.h (scm_subr_p): Remove from procs.[ch] and define
as a deprecated macro. Only used internally, but who knows who's out
there.
* libguile/goops.c (scm_generic_capability_p)
(scm_enable_primitive_generic_x, scm_set_primitive_generic_x)
(scm_primitive_generic_generic): Use the new SCM_PRIMITIVE_GENERIC_P
macro instead of calling scm_subr_p.
* libguile/gsubr.h (SCM_PRIMITIVE_P, SCM_PRIMITIVE_GENERIC_P): New
macros, to replace scm_subr_p and hacky checking for generic
capability.
(SCM_SUBR_META_INFO, SCM_SUBR_NAME, SCM_SUBRF, SCM_SUBR_PROPS)
(SCM_SUBR_GENERIC, SCM_SET_SUBR_GENERIC, SCM_SET_SUBR_GENERIC_LOC)
(SCM_SUBR_ARITY_TO_TYPE): Moved here from procs.h.
* libguile/gsubr.c (create_gsubr): Inline the
scm_c_make_subr definition here, and work for generics too. Removed a
scm_remember_upto_here_1 that was added earlier in the year when
meta_info was not being traced by the GC. Adapt callers.
2010-01-05 16:15:14 +01:00
|
|
|
|
#include "libguile/gsubr.h"
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
#include "libguile/hashtab.h"
|
|
|
|
|
|
#include "libguile/keywords.h"
|
|
|
|
|
|
#include "libguile/macros.h"
|
|
|
|
|
|
#include "libguile/modules.h"
|
|
|
|
|
|
#include "libguile/ports.h"
|
|
|
|
|
|
#include "libguile/procprop.h"
|
2009-11-01 20:45:02 +01:00
|
|
|
|
#include "libguile/programs.h"
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
#include "libguile/smob.h"
|
|
|
|
|
|
#include "libguile/strings.h"
|
|
|
|
|
|
#include "libguile/strports.h"
|
|
|
|
|
|
#include "libguile/vectors.h"
|
|
|
|
|
|
|
2000-11-24 10:55:23 +00:00
|
|
|
|
#include "libguile/validate.h"
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
#include "libguile/goops.h"
|
|
|
|
|
|
|
2009-11-01 20:45:02 +01:00
|
|
|
|
/* Port classes */
|
|
|
|
|
|
#define SCM_IN_PCLASS_INDEX 0
|
|
|
|
|
|
#define SCM_OUT_PCLASS_INDEX SCM_I_MAX_PORT_TYPE_COUNT
|
|
|
|
|
|
#define SCM_INOUT_PCLASS_INDEX (2 * SCM_I_MAX_PORT_TYPE_COUNT)
|
|
|
|
|
|
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
/* Objects have identity, so references to classes and instances are by
|
|
|
|
|
|
value, not by reference. Redefinition of a class or modification of
|
|
|
|
|
|
an instance causes in-place update; you can think of GOOPS as
|
|
|
|
|
|
building in its own indirection, and for that reason referring to
|
|
|
|
|
|
GOOPS values by variable reference is unnecessary.
|
2009-02-04 00:49:55 +01:00
|
|
|
|
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
References to ordinary procedures is by reference (by variable),
|
|
|
|
|
|
though, as in the rest of Guile. */
|
|
|
|
|
|
|
|
|
|
|
|
static SCM var_make_standard_class = SCM_BOOL_F;
|
2009-02-04 00:49:55 +01:00
|
|
|
|
static SCM var_slot_unbound = SCM_BOOL_F;
|
|
|
|
|
|
static SCM var_slot_missing = SCM_BOOL_F;
|
|
|
|
|
|
static SCM var_change_class = SCM_BOOL_F;
|
2015-01-04 15:52:12 -05:00
|
|
|
|
static SCM var_make = SCM_BOOL_F;
|
<class> accessors implemented in Scheme
* libguile/goops.c (scm_class_p): New internal helper, exported to
goops.scm.
(scm_class_name, scm_class_direct_supers, scm_class_direct_slots):
(scm_class_direct_subclasses, scm_class_direct_methods):
(scm_class_precedence_list, scm_class_slots): Dispatch to Scheme.
(scm_sys_goops_early_init): Capture <class> accessors.
* module/oop/goops.scm (define-class-accessor): New helper.
(class-name, class-direct-supers, class-direct-slots):
(class-direct-subclasses, class-direct-methods)
(class-precedence-list, class-slots): Define in Scheme.
(compute-std-cpl, compute-cpl): Move lower.
2015-01-09 21:01:03 +01:00
|
|
|
|
static SCM var_class_name = SCM_BOOL_F;
|
|
|
|
|
|
static SCM var_class_direct_supers = SCM_BOOL_F;
|
|
|
|
|
|
static SCM var_class_direct_slots = SCM_BOOL_F;
|
|
|
|
|
|
static SCM var_class_direct_subclasses = SCM_BOOL_F;
|
|
|
|
|
|
static SCM var_class_direct_methods = SCM_BOOL_F;
|
|
|
|
|
|
static SCM var_class_precedence_list = SCM_BOOL_F;
|
|
|
|
|
|
static SCM var_class_slots = SCM_BOOL_F;
|
2009-02-04 00:49:55 +01:00
|
|
|
|
|
2015-01-09 22:05:01 +01:00
|
|
|
|
static SCM var_generic_function_methods = SCM_BOOL_F;
|
|
|
|
|
|
static SCM var_method_generic_function = SCM_BOOL_F;
|
|
|
|
|
|
static SCM var_method_specializers = SCM_BOOL_F;
|
|
|
|
|
|
static SCM var_method_procedure = SCM_BOOL_F;
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-02-04 00:49:55 +01:00
|
|
|
|
SCM_SYMBOL (sym_slot_unbound, "slot-unbound");
|
|
|
|
|
|
SCM_SYMBOL (sym_slot_missing, "slot-missing");
|
|
|
|
|
|
SCM_SYMBOL (sym_change_class, "change-class");
|
|
|
|
|
|
|
|
|
|
|
|
SCM_VARIABLE (scm_var_make_extended_generic, "make-extended-generic");
|
|
|
|
|
|
|
|
|
|
|
|
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
/* Class redefinition protocol:
|
|
|
|
|
|
|
|
|
|
|
|
A class is represented by a heap header h1 which points to a
|
|
|
|
|
|
malloc:ed memory block m1.
|
|
|
|
|
|
|
|
|
|
|
|
When a new version of a class is created, a new header h2 and
|
|
|
|
|
|
memory block m2 are allocated. The headers h1 and h2 then switch
|
|
|
|
|
|
pointers so that h1 refers to m2 and h2 to m1. In this way, names
|
|
|
|
|
|
bound to h1 will point to the new class at the same time as h2 will
|
2005-04-24 12:23:57 +00:00
|
|
|
|
be a handle which the GC will use to free m1.
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
|
|
|
|
|
The `redefined' slot of m1 will be set to point to h1. An old
|
2005-04-24 12:23:57 +00:00
|
|
|
|
instance will have its class pointer (the CAR of the heap header)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
pointing to m1. The non-immediate `redefined'-slot in m1 indicates
|
|
|
|
|
|
the class modification and the new class pointer can be found via
|
|
|
|
|
|
h1.
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
2003-04-18 08:19:03 +00:00
|
|
|
|
#define TEST_CHANGE_CLASS(obj, class) \
|
|
|
|
|
|
{ \
|
|
|
|
|
|
class = SCM_CLASS_OF (obj); \
|
2004-07-06 10:59:25 +00:00
|
|
|
|
if (scm_is_true (SCM_OBJ_CLASS_REDEF (obj))) \
|
2003-04-18 08:19:03 +00:00
|
|
|
|
{ \
|
|
|
|
|
|
scm_change_object_class (obj, class, SCM_OBJ_CLASS_REDEF (obj));\
|
|
|
|
|
|
class = SCM_CLASS_OF (obj); \
|
|
|
|
|
|
} \
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#define SCM_GOOPS_UNBOUND SCM_UNBOUND
|
scm_is_eq for SCM vals, not == or !=
* libguile/bytevectors.c (scm_make_bytevector, STRING_TO_UTF)
(UTF_TO_STRING):
* libguile/continuations.c (scm_i_check_continuation):
* libguile/expand.h (SCM_EXPANDED_P):
* libguile/fluids.c (scm_i_make_with_fluids):
* libguile/generalized-vectors.c (scm_make_generalized_vector):
* libguile/goops.c (SCM_GOOPS_UNBOUNDP, slot_definition_using_name):
(scm_c_extend_primitive_generic, more_specificp, scm_make)
* libguile/i18n.c (SCM_VALIDATE_OPTIONAL_LOCALE_COPY):
(scm_locale_string_to_integer)
* libguile/modules.c (resolve_duplicate_binding):
(scm_module_reverse_lookup)
* libguile/posix.c (scm_to_resource):
* libguile/r6rs-ports.c (scm_put_bytevector):
* libguile/socket.c (scm_connect, scm_bind, scm_sendto
* libguile/stacks.c (find_prompt):
* libguile/variable.c (scm_variable_ref, scm_variable_bound_p):
* libguile/vm-engine.h (ASSERT_BOUND_VARIABLE, ASSERT_BOUND)
* libguile/vm-i-system.c (VARIABLE_BOUNDP, local_bound)
(long_local_bound, fluid_ref): Use scm_is_eq to compare, not == / !=.
2011-05-13 12:42:01 +02:00
|
|
|
|
#define SCM_GOOPS_UNBOUNDP(x) (scm_is_eq (x, SCM_GOOPS_UNBOUND))
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
|
|
|
|
|
static int goops_loaded_p = 0;
|
|
|
|
|
|
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
/* These variables are filled in by the object system when loaded. */
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
static SCM class_boolean, class_char, class_pair;
|
|
|
|
|
|
static SCM class_procedure, class_string, class_symbol;
|
|
|
|
|
|
static SCM class_primitive_generic;
|
|
|
|
|
|
static SCM class_vector, class_null;
|
|
|
|
|
|
static SCM class_integer, class_real, class_complex, class_fraction;
|
|
|
|
|
|
static SCM class_unknown;
|
|
|
|
|
|
static SCM class_top, class_object, class_class;
|
|
|
|
|
|
static SCM class_applicable;
|
|
|
|
|
|
static SCM class_applicable_struct, class_applicable_struct_with_setter;
|
|
|
|
|
|
static SCM class_generic, class_generic_with_setter;
|
|
|
|
|
|
static SCM class_accessor;
|
|
|
|
|
|
static SCM class_extended_generic, class_extended_generic_with_setter;
|
|
|
|
|
|
static SCM class_extended_accessor;
|
|
|
|
|
|
static SCM class_method;
|
|
|
|
|
|
static SCM class_accessor_method;
|
|
|
|
|
|
static SCM class_procedure_class;
|
|
|
|
|
|
static SCM class_applicable_struct_class;
|
|
|
|
|
|
static SCM class_applicable_struct_with_setter_class;
|
|
|
|
|
|
static SCM class_number, class_list;
|
|
|
|
|
|
static SCM class_keyword;
|
|
|
|
|
|
static SCM class_port, class_input_output_port;
|
|
|
|
|
|
static SCM class_input_port, class_output_port;
|
|
|
|
|
|
static SCM class_foreign_slot;
|
|
|
|
|
|
static SCM class_self, class_protected;
|
|
|
|
|
|
static SCM class_hidden, class_opaque, class_read_only;
|
|
|
|
|
|
static SCM class_protected_hidden, class_protected_opaque, class_protected_read_only;
|
|
|
|
|
|
static SCM class_scm;
|
|
|
|
|
|
static SCM class_int, class_float, class_double;
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2010-01-04 12:11:33 +01:00
|
|
|
|
static SCM class_foreign;
|
fluids are tc7 objects
If you're wondering what I'm doing, I'm trying to eventually reimplement
smobs in terms of structs, so that applicable smobs can just follow the
applicable struct dispatch path. But to do that I have to get structs
initialized before things that use smobs, which means transforming a
bunch of smobby things to tc7 things. But this transformation is good
for performance anyway, and we currently have a glut of unused tc7s,
so here we go...
* libguile/tags.h (scm_tc7_fluid, scm_tc7_dynamic_state): Fluids (and
dynamic states) now have tc7s.
* libguile/fluids.h: Remove scm_fluids_prehistory, and add internal
scm_i_fluid_print. Update a comment.
* libguile/fluids.c: Update for tc7 representation. Also remove the next
pointers while we're at it, as they aren't used in the new BDW GC.
* libguile/eq.c (scm_equal_p): Remove the hashtable case. Hashtables
could never be equal? before, I don't see why to add stubs doing the
same thing now.
* libguile/print.c (iprin1):
* libguile/gc.c (scm_i_tag_name):
* libguile/evalext.c (scm_self_evaluating_p): Add fluid and
dynamic_state cases.
* libguile/goops.h: Remove scm_class_hashtable; it will be static.
* libguile/goops.c: Make <hashtable> static, and add <fluid> and
<dynamic-state> classes.
* libguile/hashtab.h:
* libguile/hashtab.c: Remove scm_i_hashtable_equal_p.
* libguile/init.c (scm_i_init_guile): Remove call to fluids_prehistory.
2009-12-05 10:52:18 +01:00
|
|
|
|
static SCM class_hashtable;
|
|
|
|
|
|
static SCM class_fluid;
|
|
|
|
|
|
static SCM class_dynamic_state;
|
2010-01-05 19:45:56 +01:00
|
|
|
|
static SCM class_frame;
|
|
|
|
|
|
static SCM class_vm_cont;
|
2010-01-15 22:33:49 +01:00
|
|
|
|
static SCM class_bytevector;
|
|
|
|
|
|
static SCM class_uvec;
|
2012-01-09 17:24:57 +01:00
|
|
|
|
static SCM class_array;
|
2012-01-09 17:52:46 +01:00
|
|
|
|
static SCM class_bitvector;
|
fluids are tc7 objects
If you're wondering what I'm doing, I'm trying to eventually reimplement
smobs in terms of structs, so that applicable smobs can just follow the
applicable struct dispatch path. But to do that I have to get structs
initialized before things that use smobs, which means transforming a
bunch of smobby things to tc7 things. But this transformation is good
for performance anyway, and we currently have a glut of unused tc7s,
so here we go...
* libguile/tags.h (scm_tc7_fluid, scm_tc7_dynamic_state): Fluids (and
dynamic states) now have tc7s.
* libguile/fluids.h: Remove scm_fluids_prehistory, and add internal
scm_i_fluid_print. Update a comment.
* libguile/fluids.c: Update for tc7 representation. Also remove the next
pointers while we're at it, as they aren't used in the new BDW GC.
* libguile/eq.c (scm_equal_p): Remove the hashtable case. Hashtables
could never be equal? before, I don't see why to add stubs doing the
same thing now.
* libguile/print.c (iprin1):
* libguile/gc.c (scm_i_tag_name):
* libguile/evalext.c (scm_self_evaluating_p): Add fluid and
dynamic_state cases.
* libguile/goops.h: Remove scm_class_hashtable; it will be static.
* libguile/goops.c: Make <hashtable> static, and add <fluid> and
<dynamic-state> classes.
* libguile/hashtab.h:
* libguile/hashtab.c: Remove scm_i_hashtable_equal_p.
* libguile/init.c (scm_i_init_guile): Remove call to fluids_prehistory.
2009-12-05 10:52:18 +01:00
|
|
|
|
|
2011-05-01 23:00:55 +02:00
|
|
|
|
static SCM vtable_class_map = SCM_BOOL_F;
|
|
|
|
|
|
|
2009-01-18 20:21:44 +01:00
|
|
|
|
/* Port classes. Allocate 3 times the maximum number of port types so that
|
|
|
|
|
|
input ports, output ports, and in/out ports can be stored at different
|
|
|
|
|
|
offsets. See `SCM_IN_PCLASS_INDEX' et al. */
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
SCM scm_i_port_class[3 * SCM_I_MAX_PORT_TYPE_COUNT];
|
2009-01-18 20:21:44 +01:00
|
|
|
|
|
|
|
|
|
|
/* SMOB classes. */
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
SCM scm_i_smob_class[SCM_I_MAX_SMOB_TYPE_COUNT];
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
static SCM scm_make_unbound (void);
|
|
|
|
|
|
static SCM scm_unbound_p (SCM obj);
|
<class> accessors implemented in Scheme
* libguile/goops.c (scm_class_p): New internal helper, exported to
goops.scm.
(scm_class_name, scm_class_direct_supers, scm_class_direct_slots):
(scm_class_direct_subclasses, scm_class_direct_methods):
(scm_class_precedence_list, scm_class_slots): Dispatch to Scheme.
(scm_sys_goops_early_init): Capture <class> accessors.
* module/oop/goops.scm (define-class-accessor): New helper.
(class-name, class-direct-supers, class-direct-slots):
(class-direct-subclasses, class-direct-methods)
(class-precedence-list, class-slots): Define in Scheme.
(compute-std-cpl, compute-cpl): Move lower.
2015-01-09 21:01:03 +01:00
|
|
|
|
static SCM scm_class_p (SCM obj);
|
Generics with setters have <applicable-struct-with-setter> layout
* libguile/goops.c (scm_sys_set_object_setter_x): Remove. Instead, we
use slot-set! of 'setter.
(scm_i_define_class_for_vtable): Move lower in the file, and fold in
scm_make_extended_class_from_symbol and make_class_from_symbol.
Properly handle applicable structs with setters.
(scm_class_applicable_struct_with_setter_class): New private capture.
(scm_sys_bless_applicable_struct_vtables_x): Rename to take two
arguments, and bless the second argument as an applicable struct with
setter vtable.
(scm_sys_goops_early_init): Capture setter classes.
* libguile/deprecated.c (SPEC_OF, CPL_OF): Access slots by name, not by
index.
(applicablep, more_specificp): Adapt to use CPL_OF.
(scm_find_method): Access "methods" slot by name.
* libguile/procs.c (scm_setter): Remove special case for generics; if
it's a setter, it will be a normal applicable struct.
* module/oop/goops.scm (<applicable-struct-with-setter-class>)
(<applicable-struct-with-setter>): New classes.
(<generic-with-setter>): Now an instance of the setter metaclass and a
child of the setter class, so that the "setter" slot ends up in the
right place.
(<accessor>, <extended-generic-with-setter>, <extended-accessor>): Be
instances of the setter metaclass.
(<method>, <accessor-method>): Move definitions farther down.
(make): Use slot-set! when initializing setters here.
(initialize): Likewise for <applicable-struct-with-setter>. Remove
specialization for <generic-with-setter>.
2015-01-06 13:41:56 -05:00
|
|
|
|
static SCM scm_sys_bless_applicable_struct_vtables_x (SCM applicable,
|
|
|
|
|
|
SCM setter);
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
static SCM scm_sys_bless_pure_generic_vtable_x (SCM vtable);
|
|
|
|
|
|
static SCM scm_sys_make_root_class (SCM name, SCM dslots,
|
|
|
|
|
|
SCM getters_n_setters);
|
|
|
|
|
|
static SCM scm_sys_init_layout_x (SCM class, SCM layout);
|
2014-12-24 11:29:45 -05:00
|
|
|
|
static SCM scm_sys_goops_early_init (void);
|
2000-12-16 20:25:08 +00:00
|
|
|
|
static SCM scm_sys_goops_loaded (void);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2011-05-01 23:00:55 +02:00
|
|
|
|
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
/* This function is used for efficient type dispatch. */
|
|
|
|
|
|
SCM_DEFINE (scm_class_of, "class-of", 1, 0, 0,
|
|
|
|
|
|
(SCM x),
|
|
|
|
|
|
"Return the class of @var{x}.")
|
|
|
|
|
|
#define FUNC_NAME s_scm_class_of
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (SCM_ITAG3 (x))
|
|
|
|
|
|
{
|
|
|
|
|
|
case scm_tc3_int_1:
|
|
|
|
|
|
case scm_tc3_int_2:
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
return class_integer;
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
|
|
|
|
|
|
case scm_tc3_imm24:
|
|
|
|
|
|
if (SCM_CHARP (x))
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
return class_char;
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
else if (scm_is_bool (x))
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
return class_boolean;
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
else if (scm_is_null (x))
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
return class_null;
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
else
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
return class_unknown;
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
|
|
|
|
|
|
case scm_tc3_cons:
|
|
|
|
|
|
switch (SCM_TYP7 (x))
|
|
|
|
|
|
{
|
|
|
|
|
|
case scm_tcs_cons_nimcar:
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
return class_pair;
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
case scm_tc7_symbol:
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
return class_symbol;
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
case scm_tc7_vector:
|
|
|
|
|
|
case scm_tc7_wvect:
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
return class_vector;
|
Use "pointer" instead of "foreign" when dealing with wrapped pointers.
* libguile/foreign.h (scm_t_foreign_finalizer): Rename to...
(scm_t_pointer_finalizer): ... this.
(SCM_FOREIGN_P): Rename to...
(SCM_POINTER_P): this.
(SCM_VALIDATE_FOREIGN): Rename to...
(SCM_VALIDATE_POINTER): ... this.
(SCM_FOREIGN_HAS_FINALIZER): Rename to...
(SCM_POINTER_HAS_FINALIZER): ... this.
(scm_take_foreign_pointer): Rename to...
(scm_from_pointer): ... this.
(scm_foreign_address): Rename to...
(scm_pointer_address): ... this.
(scm_foreign_to_bytevector): Rename to...
(scm_pointer_to_bytevector): ... this.
(scm_foreign_set_finalizer_x): Rename to...
(scm_set_pointer_finalizer_x): ... this.
(scm_bytevector_to_foreign): Rename to...
(scm_bytevector_to_pointer): ... this.
(scm_i_foreign_print): Rename to...
(scm_i_pointer_print): ... this.
* libguile/foreign.c: Update accordingly.
* libguile/tags.h (scm_tc7_foreign): Rename to...
(scm_tc7_pointer): ... this.
* libguile/foreign.c, libguile/deprecated.c, libguile/dynl.c,
libguile/evalext.c, libguile/gc.c, libguile/goops.c, libguile/gsubr.c,
libguile/gsubr.h, libguile/print.c, libguile/snarf.h,
libguile/vm-i-system.c, module/system/foreign.scm,
test-suite/standalone/test-ffi, test-suite/tests/foreign.test: Update
accordingly.
2010-07-27 14:54:53 +02:00
|
|
|
|
case scm_tc7_pointer:
|
2010-01-04 12:11:33 +01:00
|
|
|
|
return class_foreign;
|
2009-12-05 10:07:07 +01:00
|
|
|
|
case scm_tc7_hashtable:
|
fluids are tc7 objects
If you're wondering what I'm doing, I'm trying to eventually reimplement
smobs in terms of structs, so that applicable smobs can just follow the
applicable struct dispatch path. But to do that I have to get structs
initialized before things that use smobs, which means transforming a
bunch of smobby things to tc7 things. But this transformation is good
for performance anyway, and we currently have a glut of unused tc7s,
so here we go...
* libguile/tags.h (scm_tc7_fluid, scm_tc7_dynamic_state): Fluids (and
dynamic states) now have tc7s.
* libguile/fluids.h: Remove scm_fluids_prehistory, and add internal
scm_i_fluid_print. Update a comment.
* libguile/fluids.c: Update for tc7 representation. Also remove the next
pointers while we're at it, as they aren't used in the new BDW GC.
* libguile/eq.c (scm_equal_p): Remove the hashtable case. Hashtables
could never be equal? before, I don't see why to add stubs doing the
same thing now.
* libguile/print.c (iprin1):
* libguile/gc.c (scm_i_tag_name):
* libguile/evalext.c (scm_self_evaluating_p): Add fluid and
dynamic_state cases.
* libguile/goops.h: Remove scm_class_hashtable; it will be static.
* libguile/goops.c: Make <hashtable> static, and add <fluid> and
<dynamic-state> classes.
* libguile/hashtab.h:
* libguile/hashtab.c: Remove scm_i_hashtable_equal_p.
* libguile/init.c (scm_i_init_guile): Remove call to fluids_prehistory.
2009-12-05 10:52:18 +01:00
|
|
|
|
return class_hashtable;
|
|
|
|
|
|
case scm_tc7_fluid:
|
|
|
|
|
|
return class_fluid;
|
|
|
|
|
|
case scm_tc7_dynamic_state:
|
|
|
|
|
|
return class_dynamic_state;
|
2010-01-05 19:45:56 +01:00
|
|
|
|
case scm_tc7_frame:
|
|
|
|
|
|
return class_frame;
|
Keywords have a tc7
* libguile/tags.h (scm_tc7_keyword): Allocate a tc7, so that the VM can
have cheap keyword? tests.
* libguile/keywords.c:
* libguile/keywords.h: Adapt.
* libguile/goops.c (scm_class_of, scm_sys_goops_early_init): Capture
<keyword>.
* libguile/print.c (iprin1): Inline keyword printer.
* libguile/evalext.c (scm_self_evaluating_p): Add keywords here.
* libguile/deprecated.h:
* libguile/deprecated.c (scm_tc16_keyword): Deprecate.
* module/language/cps/compile-bytecode.scm (compile-fun): Add keyword?
case, and bitvector? case while we're at it.
* module/language/cps/effects-analysis.scm (define-primitive-effects):
Add bytevector?, keyword?, and bitvector? cases.
* module/language/cps/primitives.scm (*branching-primcall-arities*): Add
keyword?.
* module/language/cps/types.scm (bitvector?, keyword?, bytevector?): Add
branch inferrers.
* module/language/tree-il/primitives.scm (*interesting-primitive-names*):
(*effect-free-primitives*):
(*effect+exception-free-primitives*): Add bytevector?, keyword?, and
bitvector?.
* module/oop/goops.scm (<keyword>): New class.
* module/system/base/types.scm (%tc7-keyword, cell->object): Add cases.
* module/system/vm/assembler.scm (br-if-keyword): New definition.
* module/system/vm/disassembler.scm (code-annotation): Add br-if-tc7
case for keywords.
* test-suite/tests/types.test ("clonable objects"): Update now that
keywords are cloneable.
2015-01-19 16:57:42 +01:00
|
|
|
|
case scm_tc7_keyword:
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
return class_keyword;
|
2010-01-05 19:45:56 +01:00
|
|
|
|
case scm_tc7_vm_cont:
|
|
|
|
|
|
return class_vm_cont;
|
2010-01-15 22:33:49 +01:00
|
|
|
|
case scm_tc7_bytevector:
|
|
|
|
|
|
if (SCM_BYTEVECTOR_ELEMENT_TYPE (x) == SCM_ARRAY_ELEMENT_TYPE_VU8)
|
|
|
|
|
|
return class_bytevector;
|
|
|
|
|
|
else
|
|
|
|
|
|
return class_uvec;
|
2012-01-09 17:24:57 +01:00
|
|
|
|
case scm_tc7_array:
|
|
|
|
|
|
return class_array;
|
2012-01-09 17:52:46 +01:00
|
|
|
|
case scm_tc7_bitvector:
|
|
|
|
|
|
return class_bitvector;
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
case scm_tc7_string:
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
return class_string;
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
case scm_tc7_number:
|
|
|
|
|
|
switch SCM_TYP16 (x) {
|
|
|
|
|
|
case scm_tc16_big:
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
return class_integer;
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
case scm_tc16_real:
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
return class_real;
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
case scm_tc16_complex:
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
return class_complex;
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
case scm_tc16_fraction:
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
return class_fraction;
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
}
|
2013-11-19 18:24:22 +01:00
|
|
|
|
case scm_tc7_program:
|
2011-05-13 12:51:56 +02:00
|
|
|
|
if (SCM_PROGRAM_IS_PRIMITIVE_GENERIC (x)
|
|
|
|
|
|
&& SCM_UNPACK (*SCM_SUBR_GENERIC (x)))
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
return class_primitive_generic;
|
subrs are now VM trampoline procedures
* libguile/_scm.h: Add foreign.h and programs.h to the private include
list, as snarfing subrs with static allocation now needs access to
some of their enums and macros.
* libguile/gsubr.c (create_gsubr): Instead of creating a tc7_gsubr
object, create a VM program with the call-subr opcode, so that the
representation of subrs is now gsubrs. CPP and elisp, together at
last.
(scm_subr_objcode_trampoline): New function, used by the SCM_DEFINE
snarf macro.
* libguile/gsubr.h (SCM_SUBR_META_INFO, SCM_SUBR_PROPS)
(SCM_SET_SUBR_GENERIC_LOC, SCM_SUBR_ARITY_TO_TYPE): Remove these
macros. They were never deprecated, but hopefully people aren't using
them.
(SCM_SUBRF, SCM_SUBR_NAME, SCM_SUBR_GENERIC, SCM_SET_SUBR_GENERIC):
Update to work on the new subr representation.
* libguile/objcodes.h (SCM_F_OBJCODE_IS_STATIC): New flag, indicates
that the "backing store" of the objcode is statically allocated.
* libguile/procprop.c (scm_sym_name): Define here instead of in gsubr.c.
* libguile/snarf.h (SCM_DEFINE): If we are doing static allocation,
statically allocate the foreign object, the object table, and the
program, and use some SCM_SNARF_INITtery to fix things up.
Unfortunately I have not been able to make this immutable. It might be
possible, though.
(SCM_IMMUTABLE_CELL, SCM_STATIC_DOUBLE_CELL, SCM_IMMUTABLE_FOREIGN):
(SCM_STATIC_SUBR_OBJVECT, SCM_STATIC_PROGRAM): New helper macros.
2010-01-06 20:11:33 +01:00
|
|
|
|
else
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
return class_procedure;
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
|
|
|
|
|
|
case scm_tc7_smob:
|
|
|
|
|
|
{
|
|
|
|
|
|
scm_t_bits type = SCM_TYP16 (x);
|
|
|
|
|
|
if (type != scm_tc16_port_with_ps)
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
return scm_i_smob_class[SCM_TC2SMOBNUM (type)];
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
x = SCM_PORT_WITH_PS_PORT (x);
|
|
|
|
|
|
/* fall through to ports */
|
|
|
|
|
|
}
|
|
|
|
|
|
case scm_tc7_port:
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
return scm_i_port_class[(SCM_WRTNG & SCM_CELL_WORD_0 (x)
|
|
|
|
|
|
? (SCM_RDNG & SCM_CELL_WORD_0 (x)
|
|
|
|
|
|
? SCM_INOUT_PCLASS_INDEX | SCM_PTOBNUM (x)
|
|
|
|
|
|
: SCM_OUT_PCLASS_INDEX | SCM_PTOBNUM (x))
|
|
|
|
|
|
: SCM_IN_PCLASS_INDEX | SCM_PTOBNUM (x))];
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
case scm_tcs_struct:
|
|
|
|
|
|
if (SCM_OBJ_CLASS_FLAGS (x) & SCM_CLASSF_GOOPS_VALID)
|
|
|
|
|
|
return SCM_CLASS_OF (x);
|
|
|
|
|
|
else if (SCM_OBJ_CLASS_FLAGS (x) & SCM_CLASSF_GOOPS)
|
|
|
|
|
|
{
|
|
|
|
|
|
/* Goops object */
|
|
|
|
|
|
if (! scm_is_false (SCM_OBJ_CLASS_REDEF (x)))
|
|
|
|
|
|
scm_change_object_class (x,
|
|
|
|
|
|
SCM_CLASS_OF (x), /* old */
|
|
|
|
|
|
SCM_OBJ_CLASS_REDEF (x)); /* new */
|
|
|
|
|
|
return SCM_CLASS_OF (x);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
2011-05-01 23:00:55 +02:00
|
|
|
|
return scm_i_define_class_for_vtable (SCM_CLASS_OF (x));
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
default:
|
|
|
|
|
|
if (scm_is_pair (x))
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
return class_pair;
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
else
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
return class_unknown;
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
case scm_tc3_struct:
|
|
|
|
|
|
case scm_tc3_tc7_1:
|
|
|
|
|
|
case scm_tc3_tc7_2:
|
eval.c closures are now applicable smobs, not tc3s
* libguile/debug.c (scm_procedure_name): Remove a SCM_CLOSUREP case and
some dead code.
(scm_procedure_module): Remove. This was introduced a few months ago
for the hygienic expander, but now it is no longer needed, as the
expander keeps track of this information itself.
* libguile/debug.h: Remove scm_procedure_module.
* libguile/eval.c: Instead of using tc3 closures, define a "boot
closure" applicable smob type, and represent closures with that. The
advantage is that after eval.scm is compiled, boot closures take up no
address space (besides a smob number) in the runtime, and require no
special cases in procedure dispatch.
* libguile/eval.h: Remove the internal functions scm_i_call_closure_0
and scm_closure_apply, and the public function scm_closure.
* libguile/gc.c (scm_storage_prehistory): No tc3_closure displacement
registration.
(scm_i_tag_name): Remove closure case, and a dead cclo case.
* libguile/vm.c (apply_foreign):
* libguile/print.c (iprin1):
* libguile/procs.c (scm_procedure_p, scm_procedure_documentation);
* libguile/evalext.c (scm_self_evaluating_p):
* libguile/goops.c (scm_class_of): Remove tc3_closure/tcs_closure cases.
* libguile/hash.c (scm_hasher):
* libguile/hooks.c (scm_add_hook_x): Use new scm_i_procedure_arity.
* libguile/macros.c (macro_print): Print all macros using the same code.
(scm_macro_transformer): Return any procedure, not just programs.
* libguile/procprop.h:
* libguile/procprop.c (scm_i_procedure_arity): Instead of returning a
list that the caller has to parse, have the same prototype as
scm_i_program_arity. An incompatible change, but it's an internal
function anyway.
(scm_procedure_properties, scm_set_procedure_properties)
(scm_procedure_property, scm_set_procedure_property): Remove closure
cases, and use scm_i_program_arity for arity.
* libguile/procs.h (SCM_CLOSUREP, SCM_CLOSCAR, SCM_CODE)
(SCM_CLOSURE_NUM_REQUIRED_ARGS, SCM_CLOSURE_HAS_REST_ARGS)
(SCM_CLOSURE_BODY, SCM_PROCPROPS, SCM_SETPROCPROPS, SCM_ENV)
(SCM_TOP_LEVEL): Remove these macros that pertain to boot closures
only. Only eval.c should know abut boot closures.
* libguile/procs.c (scm_closure_p): Remove this function. There is a
simple stub in deprecated.scm now.
(scm_thunk_p): Use scm_i_program_arity.
* libguile/tags.h (scm_tc3_closure): Remove. Yay, another tc3 to play
with!
(scm_tcs_closures): Remove.
* libguile/validate.h (SCM_VALIDATE_CLOSURE): Remove.
* module/ice-9/deprecated.scm (closure?): Add stub.
* module/ice-9/documentation.scm (object-documentation)
* module/ice-9/session.scm (help-doc, arity)
* module/oop/goops.scm (compute-getters-n-setters)
* module/oop/goops/describe.scm (describe)
* module/system/repl/describe.scm (display-object, display-type):
Remove calls to closure?.
2009-12-04 19:20:11 +01:00
|
|
|
|
/* case scm_tc3_unused: */
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
/* Never reached */
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
return class_unknown;
|
* objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
scm_class_char, scm_class_pair, scm_class_procedure,
scm_class_string, scm_class_symbol,
scm_class_procedure_with_setter, scm_class_primitive_generic,
scm_class_vector, scm_class_null, scm_class_real,
scm_class_complex, scm_class_integer, scm_class_fraction,
scm_class_unknown, scm_port_class, scm_smob_class,
scm_no_applicable_method, scm_class_of): Moved from objects to
goops since they are only useable once goops has been loaded.
(scm_classes_initialized): Removed.
(scm_class_of): Do not check it.
(create_standard_classes): Do not set it.
2005-01-18 14:58:39 +00:00
|
|
|
|
}
|
|
|
|
|
|
#undef FUNC_NAME
|
|
|
|
|
|
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
/******************************************************************************
|
|
|
|
|
|
*
|
|
|
|
|
|
* initialize-object
|
|
|
|
|
|
*
|
|
|
|
|
|
******************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
/*fixme* Manufacture keywords in advance */
|
|
|
|
|
|
SCM
|
2001-05-26 20:51:22 +00:00
|
|
|
|
scm_i_get_keyword (SCM key, SCM l, long len, SCM default_value, const char *subr)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2001-05-26 20:51:22 +00:00
|
|
|
|
long i;
|
2000-12-01 16:05:33 +00:00
|
|
|
|
|
|
|
|
|
|
for (i = 0; i != len; i += 2)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2000-12-01 16:05:33 +00:00
|
|
|
|
SCM obj = SCM_CAR (l);
|
|
|
|
|
|
|
2004-10-04 17:02:53 +00:00
|
|
|
|
if (!scm_is_keyword (obj))
|
* list.h (scm_list_1, scm_list_2, scm_list_3, scm_list_4, scm_list_5,
scm_list_n): New functions.
(SCM_LIST0, SCM_LIST1, SCM_LIST2, SCM_LIST3, SCM_LIST4, SCM_LIST5,
SCM_LIST6, SCM_LIST7, SCM_LIST8, SCM_LIST9, scm_listify): Deprecated.
(lots of files): Use the new functions.
* goops.c (CALL_GF1, CALL_GF2, CALL_GF3, CALL_GF4): Use scm_call_N.
* strings.c: #include "libguile/deprecation.h".
2001-06-28 01:11:59 +00:00
|
|
|
|
scm_misc_error (subr, "bad keyword: ~S", scm_list_1 (obj));
|
2004-07-27 15:41:49 +00:00
|
|
|
|
else if (scm_is_eq (obj, key))
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
return SCM_CADR (l);
|
2000-12-01 16:05:33 +00:00
|
|
|
|
else
|
|
|
|
|
|
l = SCM_CDDR (l);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
2000-12-01 16:05:33 +00:00
|
|
|
|
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
return default_value;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2000-12-01 16:05:33 +00:00
|
|
|
|
SCM_DEFINE (scm_get_keyword, "get-keyword", 3, 0, 0,
|
|
|
|
|
|
(SCM key, SCM l, SCM default_value),
|
* list.c (scm_list, scm_cons_star, scm_null_p, scm_list_p),
(scm_length, scm_append, scm_reverse, scm_list_ref),
(scm_memq, scm_memv, scm_member, scm_delv_x, scm_delete_x),
(scm_delq, scm_delv, scm_delete, scm_delq1_x, scm_delv1_x),
(scm_delete1_x), gc.c (scm_map_free_list),
(scm_free_list_length), hash.c (scm_hashq, scm_hashv),
(scm_hash), hashtab.c (scm_hashq_ref, scm_hashq_set_x),
(scm_hashq_remove_x, scm_hashv_ref, scm_hashv_set_x),
(scm_hashv_remove_x, scm_hash_ref, scm_hash_set_x),
(scm_hash_remove_x), ports.c (scm_pt_size, scm_pt_member), print.c
(scm_current_pstate), scmsigs.c (scm_usleep), goops.c
(scm_get_keyword, scm_sys_compute_slots): Added texinfo markup.
* weaks.c (scm_weak_vector_p, scm_weak_key_hash_table_p),
(scm_weak_value_hash_table_p, scm_doubly_weak_hash_table_p),
rdelim.c (scm_read_delimited_x), strop.c (scm_string_index),
symbols.c (scm_symbol_interned_p), numbers.c
(scm_string_to_number), ports.c (scm_port_p): Corrected texinfo
markup.
2001-03-16 10:00:17 +00:00
|
|
|
|
"Determine an associated value for the keyword @var{key} from\n"
|
|
|
|
|
|
"the list @var{l}. The list @var{l} has to consist of an even\n"
|
|
|
|
|
|
"number of elements, where, starting with the first, every\n"
|
|
|
|
|
|
"second element is a keyword, followed by its associated value.\n"
|
|
|
|
|
|
"If @var{l} does not hold a value for @var{key}, the value\n"
|
|
|
|
|
|
"@var{default_value} is returned.")
|
2000-12-01 16:05:33 +00:00
|
|
|
|
#define FUNC_NAME s_scm_get_keyword
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2001-05-26 20:51:22 +00:00
|
|
|
|
long len;
|
2000-12-01 16:05:33 +00:00
|
|
|
|
|
2004-10-04 17:02:53 +00:00
|
|
|
|
SCM_ASSERT (scm_is_keyword (key), key, SCM_ARG1, FUNC_NAME);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
len = scm_ilength (l);
|
2001-01-27 00:13:55 +00:00
|
|
|
|
if (len < 0 || len % 2 == 1)
|
* list.h (scm_list_1, scm_list_2, scm_list_3, scm_list_4, scm_list_5,
scm_list_n): New functions.
(SCM_LIST0, SCM_LIST1, SCM_LIST2, SCM_LIST3, SCM_LIST4, SCM_LIST5,
SCM_LIST6, SCM_LIST7, SCM_LIST8, SCM_LIST9, scm_listify): Deprecated.
(lots of files): Use the new functions.
* goops.c (CALL_GF1, CALL_GF2, CALL_GF3, CALL_GF4): Use scm_call_N.
* strings.c: #include "libguile/deprecation.h".
2001-06-28 01:11:59 +00:00
|
|
|
|
scm_misc_error (FUNC_NAME, "Bad keyword-value list: ~S", scm_list_1 (l));
|
2000-12-01 16:05:33 +00:00
|
|
|
|
|
|
|
|
|
|
return scm_i_get_keyword (key, l, len, default_value, FUNC_NAME);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
2000-12-01 16:05:33 +00:00
|
|
|
|
#undef FUNC_NAME
|
|
|
|
|
|
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
|
|
|
|
|
SCM_KEYWORD (k_init_keyword, "init-keyword");
|
|
|
|
|
|
|
|
|
|
|
|
static SCM get_slot_value (SCM class, SCM obj, SCM slotdef);
|
|
|
|
|
|
static SCM set_slot_value (SCM class, SCM obj, SCM slotdef, SCM value);
|
|
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_DEFINE (scm_sys_initialize_object, "%initialize-object", 2, 0, 0,
|
|
|
|
|
|
(SCM obj, SCM initargs),
|
(scm_sys_initialize_object, scm_instance_p, scm_class_name,
scm_class_precedence_list, scm_class_slots, scm_class_environment,
scm_generic_function_name, scm_generic_function_methods,
scm_method_generic_function, scm_method_specializers,
scm_method_procedure, scm_make_unbound, scm_unbound_p,
scm_assert_bound, scm_at_assert_bound_ref, scm_sys_fast_slot_ref,
scm_sys_fast_slot_set_x, scm_slot_ref, scm_slot_set_x,
_scm_slot_bound_p, scm_slots_exists_p, scm_sys_allocate_instance,
scm_make, scm_pure_generic_p, scm_class_direct_supers,
scm_class_direct_slots, scm_class_direct_subclasses,
scm_class_direct_methods, scm_accessor_method_slot_definition,
scm_sys_goops_loaded): Added docstrings.
2001-02-16 14:59:22 +00:00
|
|
|
|
"Initialize the object @var{obj} with the given arguments\n"
|
|
|
|
|
|
"@var{initargs}.")
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#define FUNC_NAME s_scm_sys_initialize_object
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
|
|
|
|
|
SCM tmp, get_n_set, slots;
|
|
|
|
|
|
SCM class = SCM_CLASS_OF (obj);
|
2001-05-26 20:51:22 +00:00
|
|
|
|
long n_initargs;
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_VALIDATE_INSTANCE (1, obj);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
n_initargs = scm_ilength (initargs);
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_ASSERT ((n_initargs & 1) == 0, initargs, SCM_ARG2, FUNC_NAME);
|
2002-04-22 17:46:06 +00:00
|
|
|
|
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
get_n_set = SCM_SLOT (class, scm_si_getters_n_setters);
|
|
|
|
|
|
slots = SCM_SLOT (class, scm_si_slots);
|
2002-04-22 17:46:06 +00:00
|
|
|
|
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
/* See for each slot how it must be initialized */
|
|
|
|
|
|
for (;
|
2004-09-22 17:41:37 +00:00
|
|
|
|
!scm_is_null (slots);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
get_n_set = SCM_CDR (get_n_set), slots = SCM_CDR (slots))
|
|
|
|
|
|
{
|
|
|
|
|
|
SCM slot_name = SCM_CAR (slots);
|
2014-04-27 11:02:35 +02:00
|
|
|
|
SCM slot_value = SCM_GOOPS_UNBOUND;
|
2002-04-22 17:46:06 +00:00
|
|
|
|
|
2004-09-22 17:41:37 +00:00
|
|
|
|
if (!scm_is_null (SCM_CDR (slot_name)))
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
|
|
|
|
|
/* This slot admits (perhaps) to be initialized at creation time */
|
2001-05-26 20:51:22 +00:00
|
|
|
|
long n = scm_ilength (SCM_CDR (slot_name));
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
if (n & 1) /* odd or -1 */
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_MISC_ERROR ("class contains bogus slot definition: ~S",
|
* list.h (scm_list_1, scm_list_2, scm_list_3, scm_list_4, scm_list_5,
scm_list_n): New functions.
(SCM_LIST0, SCM_LIST1, SCM_LIST2, SCM_LIST3, SCM_LIST4, SCM_LIST5,
SCM_LIST6, SCM_LIST7, SCM_LIST8, SCM_LIST9, scm_listify): Deprecated.
(lots of files): Use the new functions.
* goops.c (CALL_GF1, CALL_GF2, CALL_GF3, CALL_GF4): Use scm_call_N.
* strings.c: #include "libguile/deprecation.h".
2001-06-28 01:11:59 +00:00
|
|
|
|
scm_list_1 (slot_name));
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
tmp = scm_i_get_keyword (k_init_keyword,
|
|
|
|
|
|
SCM_CDR (slot_name),
|
|
|
|
|
|
n,
|
2011-05-13 12:51:56 +02:00
|
|
|
|
SCM_PACK (0),
|
2000-12-16 20:25:08 +00:00
|
|
|
|
FUNC_NAME);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
slot_name = SCM_CAR (slot_name);
|
2011-05-13 12:51:56 +02:00
|
|
|
|
if (SCM_UNPACK (tmp))
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
|
|
|
|
|
/* an initarg was provided for this slot */
|
2004-10-04 17:02:53 +00:00
|
|
|
|
if (!scm_is_keyword (tmp))
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_MISC_ERROR ("initarg must be a keyword. It was ~S",
|
* list.h (scm_list_1, scm_list_2, scm_list_3, scm_list_4, scm_list_5,
scm_list_n): New functions.
(SCM_LIST0, SCM_LIST1, SCM_LIST2, SCM_LIST3, SCM_LIST4, SCM_LIST5,
SCM_LIST6, SCM_LIST7, SCM_LIST8, SCM_LIST9, scm_listify): Deprecated.
(lots of files): Use the new functions.
* goops.c (CALL_GF1, CALL_GF2, CALL_GF3, CALL_GF4): Use scm_call_N.
* strings.c: #include "libguile/deprecation.h".
2001-06-28 01:11:59 +00:00
|
|
|
|
scm_list_1 (tmp));
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
slot_value = scm_i_get_keyword (tmp,
|
|
|
|
|
|
initargs,
|
|
|
|
|
|
n_initargs,
|
2014-04-27 11:02:35 +02:00
|
|
|
|
SCM_GOOPS_UNBOUND,
|
2000-12-16 20:25:08 +00:00
|
|
|
|
FUNC_NAME);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2014-04-27 11:02:35 +02:00
|
|
|
|
if (!SCM_GOOPS_UNBOUNDP (slot_value))
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
/* set slot to provided value */
|
|
|
|
|
|
set_slot_value (class, obj, SCM_CAR (get_n_set), slot_value);
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
/* set slot to its :init-form if it exists */
|
|
|
|
|
|
tmp = SCM_CADAR (get_n_set);
|
2004-07-06 10:59:25 +00:00
|
|
|
|
if (scm_is_true (tmp))
|
2014-04-27 11:02:35 +02:00
|
|
|
|
set_slot_value (class,
|
|
|
|
|
|
obj,
|
|
|
|
|
|
SCM_CAR (get_n_set),
|
|
|
|
|
|
scm_call_0 (tmp));
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2002-04-22 17:46:06 +00:00
|
|
|
|
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
return obj;
|
|
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
SCM_DEFINE (scm_sys_init_layout_x, "%init-layout!", 2, 0, 0,
|
|
|
|
|
|
(SCM class, SCM layout),
|
2000-12-16 20:25:08 +00:00
|
|
|
|
"")
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
#define FUNC_NAME s_scm_sys_init_layout_x
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_VALIDATE_INSTANCE (1, class);
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
SCM_ASSERT (!scm_is_symbol (SCM_VTABLE_LAYOUT (class)), class, 1, FUNC_NAME);
|
|
|
|
|
|
SCM_VALIDATE_STRING (2, layout);
|
|
|
|
|
|
|
|
|
|
|
|
SCM_SET_VTABLE_LAYOUT (class, scm_make_struct_layout (layout));
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
return SCM_UNSPECIFIED;
|
|
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_DEFINE (scm_sys_inherit_magic_x, "%inherit-magic!", 2, 0, 0,
|
|
|
|
|
|
(SCM class, SCM dsupers),
|
|
|
|
|
|
"")
|
|
|
|
|
|
#define FUNC_NAME s_scm_sys_inherit_magic_x
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_VALIDATE_INSTANCE (1, class);
|
limn goops flags, remove foreign objs, rename entity to applicable-struct
* libguile/goops.c (scm_class_applicable_struct)
(scm_class_applicable_struct_with_setter)
(scm_class_applicable_struct_class): Rename from
scm_class_entity, scm_class_entity_with_setter, and
scm_class_entity_class.
(scm_class_simple_method): Removed; this abstraction is not used.
(scm_class_foreign_class, scm_class_foreign_object): Remove these,
they are undocumented and unused. They might come back later.
(scm_sys_inherit_magic_x): Simply inherit the vtable flags from the
class's class. Flags are about layout, and it is the class that
determines the layout of the instance.
(scm_basic_basic_make_class): Don't bother setting GOOPS_OR_VALID,
inherit-magic will do that.
(scm_basic_make_class): Inherit magic after setting the layout. Allows
the struct magic checker to do its job.
(scm_accessor_method_slot_definition): Move implementation to Scheme.
Removes the need for the accessor flag.
(scm_sys_allocate_instance): Adapt to scm_i_alloc_struct name change,
and that alloc-struct will handle finalization.
(scm_compute_applicable_methods): Remove accessor check, as it's
unnecessary.
(scm_make): Adapt to new generic slot order, and no more
simple-method.
(create_standard_classes): What was the GF slot "dispatch-procedure"
is now the applicable-struct slot "procedure". No more foreign class,
foreign object, or simple method. Rename <entity> and friends to
<applicable-struct> and friends. No more entity-with-setter -- though
perhaps it will come back too. Instead generic-with-setter is its own
thing.
* libguile/goops.h (SCM_CLASSF_METACLASS): "A goops class that is a
vtable" -- no need for a separate flag.
(SCM_CLASSF_FOREIGN, SCM_CLASSF_SIMPLE_METHOD)
(SCM_CLASSF_ACCESSOR_METHOD): Removed these unused flags.
(SCM_ACCESSORP): Removed.
Renumber generic slots, rename entity classes, and remove the foreign
class, foreign object, and simple method classes.
* libguile/struct.c (scm_i_struct_inherit_vtable_magic): New function,
called when making new vtables.applicable structs
(scm_i_alloc_struct): Remove 8-bit alignment check, as libGC
guarantees this for us. Handle finalizer registration here.
(scm_make_struct): Factor some things to scm_i_alloc_struct and
scm_i_struct_inherit_vtable_magic.
(scm_make_vtable_vtable): Adapt to scm_i_alloc_struct name change.
* libguile/struct.h (scm_i_alloc_struct): Change name from
scm_alloc_struct, and make internal.
* module/oop/goops.scm (oop): Don't declare #:replace <class> et al,
because <class> isn't defined in the core any more.
(accessor-method-slot-definition): Defined in Scheme now.
Remove <foreign-object> methods.
(initialize on <class>): Prep layout before inheriting magic, as in
scm_basic_make_class.
* module/oop/goops/dispatch.scm (delayed-compile)
(memoize-effective-method!): Adapt to 'procedure slot name change.
2009-11-08 11:24:23 +01:00
|
|
|
|
scm_i_struct_inherit_vtable_magic (SCM_CLASS_OF (class), class);
|
|
|
|
|
|
SCM_SET_CLASS_FLAGS (class, SCM_CLASSF_GOOPS_OR_VALID);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
|
|
|
|
|
return SCM_UNSPECIFIED;
|
|
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
SCM
|
2015-01-04 13:43:14 -05:00
|
|
|
|
scm_make_standard_class (SCM meta, SCM name, SCM dsupers, SCM dslots)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
return scm_call_4 (scm_variable_ref (var_make_standard_class),
|
2015-01-04 13:43:14 -05:00
|
|
|
|
meta, name, dsupers, dslots);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
SCM_DEFINE (scm_sys_make_root_class, "%make-root-class", 3, 0, 0,
|
|
|
|
|
|
(SCM name, SCM dslots, SCM getters_n_setters),
|
|
|
|
|
|
"")
|
|
|
|
|
|
#define FUNC_NAME s_scm_sys_make_root_class
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
SCM cs, z;
|
2002-04-22 17:46:06 +00:00
|
|
|
|
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
cs = scm_from_locale_string (SCM_CLASS_CLASS_LAYOUT);
|
|
|
|
|
|
z = scm_i_make_vtable_vtable (cs);
|
|
|
|
|
|
SCM_SET_CLASS_FLAGS (z, (SCM_CLASSF_GOOPS_OR_VALID
|
|
|
|
|
|
| SCM_CLASSF_METACLASS));
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
SCM_SET_SLOT (z, scm_vtable_index_name, name);
|
|
|
|
|
|
SCM_SET_SLOT (z, scm_si_direct_supers, SCM_EOL); /* will be changed */
|
|
|
|
|
|
SCM_SET_SLOT (z, scm_si_direct_slots, dslots); /* will be changed */
|
|
|
|
|
|
SCM_SET_SLOT (z, scm_si_direct_subclasses, SCM_EOL);
|
|
|
|
|
|
SCM_SET_SLOT (z, scm_si_direct_methods, SCM_EOL);
|
|
|
|
|
|
SCM_SET_SLOT (z, scm_si_cpl, SCM_EOL); /* will be changed */
|
|
|
|
|
|
SCM_SET_SLOT (z, scm_si_slots, dslots); /* will be changed */
|
|
|
|
|
|
SCM_SET_SLOT (z, scm_si_nfields, scm_from_int (SCM_N_CLASS_SLOTS));
|
|
|
|
|
|
SCM_SET_SLOT (z, scm_si_getters_n_setters, getters_n_setters); /* will be changed */
|
|
|
|
|
|
SCM_SET_SLOT (z, scm_si_redefined, SCM_BOOL_F);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
return z;
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_DEFINE (scm_instance_p, "instance?", 1, 0, 0,
|
|
|
|
|
|
(SCM obj),
|
(scm_sys_initialize_object, scm_instance_p, scm_class_name,
scm_class_precedence_list, scm_class_slots, scm_class_environment,
scm_generic_function_name, scm_generic_function_methods,
scm_method_generic_function, scm_method_specializers,
scm_method_procedure, scm_make_unbound, scm_unbound_p,
scm_assert_bound, scm_at_assert_bound_ref, scm_sys_fast_slot_ref,
scm_sys_fast_slot_set_x, scm_slot_ref, scm_slot_set_x,
_scm_slot_bound_p, scm_slots_exists_p, scm_sys_allocate_instance,
scm_make, scm_pure_generic_p, scm_class_direct_supers,
scm_class_direct_slots, scm_class_direct_subclasses,
scm_class_direct_methods, scm_accessor_method_slot_definition,
scm_sys_goops_loaded): Added docstrings.
2001-02-16 14:59:22 +00:00
|
|
|
|
"Return @code{#t} if @var{obj} is an instance.")
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#define FUNC_NAME s_scm_instance_p
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2004-07-06 10:59:25 +00:00
|
|
|
|
return scm_from_bool (SCM_INSTANCEP (obj));
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
<class> accessors implemented in Scheme
* libguile/goops.c (scm_class_p): New internal helper, exported to
goops.scm.
(scm_class_name, scm_class_direct_supers, scm_class_direct_slots):
(scm_class_direct_subclasses, scm_class_direct_methods):
(scm_class_precedence_list, scm_class_slots): Dispatch to Scheme.
(scm_sys_goops_early_init): Capture <class> accessors.
* module/oop/goops.scm (define-class-accessor): New helper.
(class-name, class-direct-supers, class-direct-slots):
(class-direct-subclasses, class-direct-methods)
(class-precedence-list, class-slots): Define in Scheme.
(compute-std-cpl, compute-cpl): Move lower.
2015-01-09 21:01:03 +01:00
|
|
|
|
SCM_DEFINE (scm_class_p, "class?", 1, 0, 0,
|
|
|
|
|
|
(SCM obj),
|
|
|
|
|
|
"Return @code{#t} if @var{obj} is a class.")
|
|
|
|
|
|
#define FUNC_NAME s_scm_class_p
|
|
|
|
|
|
{
|
|
|
|
|
|
return scm_from_bool (SCM_CLASSP (obj));
|
|
|
|
|
|
}
|
|
|
|
|
|
#undef FUNC_NAME
|
|
|
|
|
|
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
int
|
|
|
|
|
|
scm_is_generic (SCM x)
|
|
|
|
|
|
{
|
|
|
|
|
|
return SCM_INSTANCEP (x) && SCM_SUBCLASSP (SCM_CLASS_OF (x), class_generic);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int
|
|
|
|
|
|
scm_is_method (SCM x)
|
|
|
|
|
|
{
|
|
|
|
|
|
return SCM_INSTANCEP (x) && SCM_SUBCLASSP (SCM_CLASS_OF (x), class_method);
|
|
|
|
|
|
}
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
|
|
|
|
|
/******************************************************************************
|
2002-04-22 17:46:06 +00:00
|
|
|
|
*
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
* Meta object accessors
|
|
|
|
|
|
*
|
|
|
|
|
|
******************************************************************************/
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
|
|
|
|
|
|
SCM_SYMBOL (sym_procedure, "procedure");
|
<class> accessors implemented in Scheme
* libguile/goops.c (scm_class_p): New internal helper, exported to
goops.scm.
(scm_class_name, scm_class_direct_supers, scm_class_direct_slots):
(scm_class_direct_subclasses, scm_class_direct_methods):
(scm_class_precedence_list, scm_class_slots): Dispatch to Scheme.
(scm_sys_goops_early_init): Capture <class> accessors.
* module/oop/goops.scm (define-class-accessor): New helper.
(class-name, class-direct-supers, class-direct-slots):
(class-direct-subclasses, class-direct-methods)
(class-precedence-list, class-slots): Define in Scheme.
(compute-std-cpl, compute-cpl): Move lower.
2015-01-09 21:01:03 +01:00
|
|
|
|
|
|
|
|
|
|
SCM
|
|
|
|
|
|
scm_class_name (SCM obj)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
<class> accessors implemented in Scheme
* libguile/goops.c (scm_class_p): New internal helper, exported to
goops.scm.
(scm_class_name, scm_class_direct_supers, scm_class_direct_slots):
(scm_class_direct_subclasses, scm_class_direct_methods):
(scm_class_precedence_list, scm_class_slots): Dispatch to Scheme.
(scm_sys_goops_early_init): Capture <class> accessors.
* module/oop/goops.scm (define-class-accessor): New helper.
(class-name, class-direct-supers, class-direct-slots):
(class-direct-subclasses, class-direct-methods)
(class-precedence-list, class-slots): Define in Scheme.
(compute-std-cpl, compute-cpl): Move lower.
2015-01-09 21:01:03 +01:00
|
|
|
|
return scm_call_1 (scm_variable_ref (var_class_name), obj);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
<class> accessors implemented in Scheme
* libguile/goops.c (scm_class_p): New internal helper, exported to
goops.scm.
(scm_class_name, scm_class_direct_supers, scm_class_direct_slots):
(scm_class_direct_subclasses, scm_class_direct_methods):
(scm_class_precedence_list, scm_class_slots): Dispatch to Scheme.
(scm_sys_goops_early_init): Capture <class> accessors.
* module/oop/goops.scm (define-class-accessor): New helper.
(class-name, class-direct-supers, class-direct-slots):
(class-direct-subclasses, class-direct-methods)
(class-precedence-list, class-slots): Define in Scheme.
(compute-std-cpl, compute-cpl): Move lower.
2015-01-09 21:01:03 +01:00
|
|
|
|
SCM
|
|
|
|
|
|
scm_class_direct_supers (SCM obj)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
<class> accessors implemented in Scheme
* libguile/goops.c (scm_class_p): New internal helper, exported to
goops.scm.
(scm_class_name, scm_class_direct_supers, scm_class_direct_slots):
(scm_class_direct_subclasses, scm_class_direct_methods):
(scm_class_precedence_list, scm_class_slots): Dispatch to Scheme.
(scm_sys_goops_early_init): Capture <class> accessors.
* module/oop/goops.scm (define-class-accessor): New helper.
(class-name, class-direct-supers, class-direct-slots):
(class-direct-subclasses, class-direct-methods)
(class-precedence-list, class-slots): Define in Scheme.
(compute-std-cpl, compute-cpl): Move lower.
2015-01-09 21:01:03 +01:00
|
|
|
|
return scm_call_1 (scm_variable_ref (var_class_direct_supers), obj);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
<class> accessors implemented in Scheme
* libguile/goops.c (scm_class_p): New internal helper, exported to
goops.scm.
(scm_class_name, scm_class_direct_supers, scm_class_direct_slots):
(scm_class_direct_subclasses, scm_class_direct_methods):
(scm_class_precedence_list, scm_class_slots): Dispatch to Scheme.
(scm_sys_goops_early_init): Capture <class> accessors.
* module/oop/goops.scm (define-class-accessor): New helper.
(class-name, class-direct-supers, class-direct-slots):
(class-direct-subclasses, class-direct-methods)
(class-precedence-list, class-slots): Define in Scheme.
(compute-std-cpl, compute-cpl): Move lower.
2015-01-09 21:01:03 +01:00
|
|
|
|
SCM
|
|
|
|
|
|
scm_class_direct_slots (SCM obj)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
<class> accessors implemented in Scheme
* libguile/goops.c (scm_class_p): New internal helper, exported to
goops.scm.
(scm_class_name, scm_class_direct_supers, scm_class_direct_slots):
(scm_class_direct_subclasses, scm_class_direct_methods):
(scm_class_precedence_list, scm_class_slots): Dispatch to Scheme.
(scm_sys_goops_early_init): Capture <class> accessors.
* module/oop/goops.scm (define-class-accessor): New helper.
(class-name, class-direct-supers, class-direct-slots):
(class-direct-subclasses, class-direct-methods)
(class-precedence-list, class-slots): Define in Scheme.
(compute-std-cpl, compute-cpl): Move lower.
2015-01-09 21:01:03 +01:00
|
|
|
|
return scm_call_1 (scm_variable_ref (var_class_direct_slots), obj);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
<class> accessors implemented in Scheme
* libguile/goops.c (scm_class_p): New internal helper, exported to
goops.scm.
(scm_class_name, scm_class_direct_supers, scm_class_direct_slots):
(scm_class_direct_subclasses, scm_class_direct_methods):
(scm_class_precedence_list, scm_class_slots): Dispatch to Scheme.
(scm_sys_goops_early_init): Capture <class> accessors.
* module/oop/goops.scm (define-class-accessor): New helper.
(class-name, class-direct-supers, class-direct-slots):
(class-direct-subclasses, class-direct-methods)
(class-precedence-list, class-slots): Define in Scheme.
(compute-std-cpl, compute-cpl): Move lower.
2015-01-09 21:01:03 +01:00
|
|
|
|
SCM
|
|
|
|
|
|
scm_class_direct_subclasses (SCM obj)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
<class> accessors implemented in Scheme
* libguile/goops.c (scm_class_p): New internal helper, exported to
goops.scm.
(scm_class_name, scm_class_direct_supers, scm_class_direct_slots):
(scm_class_direct_subclasses, scm_class_direct_methods):
(scm_class_precedence_list, scm_class_slots): Dispatch to Scheme.
(scm_sys_goops_early_init): Capture <class> accessors.
* module/oop/goops.scm (define-class-accessor): New helper.
(class-name, class-direct-supers, class-direct-slots):
(class-direct-subclasses, class-direct-methods)
(class-precedence-list, class-slots): Define in Scheme.
(compute-std-cpl, compute-cpl): Move lower.
2015-01-09 21:01:03 +01:00
|
|
|
|
return scm_call_1 (scm_variable_ref (var_class_direct_subclasses), obj);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
<class> accessors implemented in Scheme
* libguile/goops.c (scm_class_p): New internal helper, exported to
goops.scm.
(scm_class_name, scm_class_direct_supers, scm_class_direct_slots):
(scm_class_direct_subclasses, scm_class_direct_methods):
(scm_class_precedence_list, scm_class_slots): Dispatch to Scheme.
(scm_sys_goops_early_init): Capture <class> accessors.
* module/oop/goops.scm (define-class-accessor): New helper.
(class-name, class-direct-supers, class-direct-slots):
(class-direct-subclasses, class-direct-methods)
(class-precedence-list, class-slots): Define in Scheme.
(compute-std-cpl, compute-cpl): Move lower.
2015-01-09 21:01:03 +01:00
|
|
|
|
SCM
|
|
|
|
|
|
scm_class_direct_methods (SCM obj)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
<class> accessors implemented in Scheme
* libguile/goops.c (scm_class_p): New internal helper, exported to
goops.scm.
(scm_class_name, scm_class_direct_supers, scm_class_direct_slots):
(scm_class_direct_subclasses, scm_class_direct_methods):
(scm_class_precedence_list, scm_class_slots): Dispatch to Scheme.
(scm_sys_goops_early_init): Capture <class> accessors.
* module/oop/goops.scm (define-class-accessor): New helper.
(class-name, class-direct-supers, class-direct-slots):
(class-direct-subclasses, class-direct-methods)
(class-precedence-list, class-slots): Define in Scheme.
(compute-std-cpl, compute-cpl): Move lower.
2015-01-09 21:01:03 +01:00
|
|
|
|
return scm_call_1 (scm_variable_ref (var_class_direct_methods), obj);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
<class> accessors implemented in Scheme
* libguile/goops.c (scm_class_p): New internal helper, exported to
goops.scm.
(scm_class_name, scm_class_direct_supers, scm_class_direct_slots):
(scm_class_direct_subclasses, scm_class_direct_methods):
(scm_class_precedence_list, scm_class_slots): Dispatch to Scheme.
(scm_sys_goops_early_init): Capture <class> accessors.
* module/oop/goops.scm (define-class-accessor): New helper.
(class-name, class-direct-supers, class-direct-slots):
(class-direct-subclasses, class-direct-methods)
(class-precedence-list, class-slots): Define in Scheme.
(compute-std-cpl, compute-cpl): Move lower.
2015-01-09 21:01:03 +01:00
|
|
|
|
SCM
|
|
|
|
|
|
scm_class_precedence_list (SCM obj)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
<class> accessors implemented in Scheme
* libguile/goops.c (scm_class_p): New internal helper, exported to
goops.scm.
(scm_class_name, scm_class_direct_supers, scm_class_direct_slots):
(scm_class_direct_subclasses, scm_class_direct_methods):
(scm_class_precedence_list, scm_class_slots): Dispatch to Scheme.
(scm_sys_goops_early_init): Capture <class> accessors.
* module/oop/goops.scm (define-class-accessor): New helper.
(class-name, class-direct-supers, class-direct-slots):
(class-direct-subclasses, class-direct-methods)
(class-precedence-list, class-slots): Define in Scheme.
(compute-std-cpl, compute-cpl): Move lower.
2015-01-09 21:01:03 +01:00
|
|
|
|
return scm_call_1 (scm_variable_ref (var_class_precedence_list), obj);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
<class> accessors implemented in Scheme
* libguile/goops.c (scm_class_p): New internal helper, exported to
goops.scm.
(scm_class_name, scm_class_direct_supers, scm_class_direct_slots):
(scm_class_direct_subclasses, scm_class_direct_methods):
(scm_class_precedence_list, scm_class_slots): Dispatch to Scheme.
(scm_sys_goops_early_init): Capture <class> accessors.
* module/oop/goops.scm (define-class-accessor): New helper.
(class-name, class-direct-supers, class-direct-slots):
(class-direct-subclasses, class-direct-methods)
(class-precedence-list, class-slots): Define in Scheme.
(compute-std-cpl, compute-cpl): Move lower.
2015-01-09 21:01:03 +01:00
|
|
|
|
SCM
|
|
|
|
|
|
scm_class_slots (SCM obj)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
<class> accessors implemented in Scheme
* libguile/goops.c (scm_class_p): New internal helper, exported to
goops.scm.
(scm_class_name, scm_class_direct_supers, scm_class_direct_slots):
(scm_class_direct_subclasses, scm_class_direct_methods):
(scm_class_precedence_list, scm_class_slots): Dispatch to Scheme.
(scm_sys_goops_early_init): Capture <class> accessors.
* module/oop/goops.scm (define-class-accessor): New helper.
(class-name, class-direct-supers, class-direct-slots):
(class-direct-subclasses, class-direct-methods)
(class-precedence-list, class-slots): Define in Scheme.
(compute-std-cpl, compute-cpl): Move lower.
2015-01-09 21:01:03 +01:00
|
|
|
|
return scm_call_1 (scm_variable_ref (var_class_slots), obj);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_DEFINE (scm_generic_function_name, "generic-function-name", 1, 0, 0,
|
<class> accessors implemented in Scheme
* libguile/goops.c (scm_class_p): New internal helper, exported to
goops.scm.
(scm_class_name, scm_class_direct_supers, scm_class_direct_slots):
(scm_class_direct_subclasses, scm_class_direct_methods):
(scm_class_precedence_list, scm_class_slots): Dispatch to Scheme.
(scm_sys_goops_early_init): Capture <class> accessors.
* module/oop/goops.scm (define-class-accessor): New helper.
(class-name, class-direct-supers, class-direct-slots):
(class-direct-subclasses, class-direct-methods)
(class-precedence-list, class-slots): Define in Scheme.
(compute-std-cpl, compute-cpl): Move lower.
2015-01-09 21:01:03 +01:00
|
|
|
|
(SCM obj),
|
(scm_sys_initialize_object, scm_instance_p, scm_class_name,
scm_class_precedence_list, scm_class_slots, scm_class_environment,
scm_generic_function_name, scm_generic_function_methods,
scm_method_generic_function, scm_method_specializers,
scm_method_procedure, scm_make_unbound, scm_unbound_p,
scm_assert_bound, scm_at_assert_bound_ref, scm_sys_fast_slot_ref,
scm_sys_fast_slot_set_x, scm_slot_ref, scm_slot_set_x,
_scm_slot_bound_p, scm_slots_exists_p, scm_sys_allocate_instance,
scm_make, scm_pure_generic_p, scm_class_direct_supers,
scm_class_direct_slots, scm_class_direct_subclasses,
scm_class_direct_methods, scm_accessor_method_slot_definition,
scm_sys_goops_loaded): Added docstrings.
2001-02-16 14:59:22 +00:00
|
|
|
|
"Return the name of the generic function @var{obj}.")
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#define FUNC_NAME s_scm_generic_function_name
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_VALIDATE_GENERIC (1, obj);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
return scm_procedure_property (obj, scm_sym_name);
|
|
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2015-01-09 22:05:01 +01:00
|
|
|
|
SCM
|
|
|
|
|
|
scm_generic_function_methods (SCM obj)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2015-01-09 22:05:01 +01:00
|
|
|
|
return scm_call_1 (scm_variable_ref (var_generic_function_methods), obj);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2015-01-09 22:05:01 +01:00
|
|
|
|
SCM
|
|
|
|
|
|
scm_method_generic_function (SCM obj)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2015-01-09 22:05:01 +01:00
|
|
|
|
return scm_call_1 (scm_variable_ref (var_method_generic_function), obj);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2015-01-09 22:05:01 +01:00
|
|
|
|
SCM
|
|
|
|
|
|
scm_method_specializers (SCM obj)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2015-01-09 22:05:01 +01:00
|
|
|
|
return scm_call_1 (scm_variable_ref (var_method_specializers), obj);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2015-01-09 22:05:01 +01:00
|
|
|
|
SCM
|
|
|
|
|
|
scm_method_procedure (SCM obj)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2015-01-09 22:05:01 +01:00
|
|
|
|
return scm_call_1 (scm_variable_ref (var_method_procedure), obj);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
|
|
|
|
*
|
|
|
|
|
|
* S l o t a c c e s s
|
|
|
|
|
|
*
|
|
|
|
|
|
******************************************************************************/
|
|
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_DEFINE (scm_make_unbound, "make-unbound", 0, 0, 0,
|
|
|
|
|
|
(),
|
(scm_sys_initialize_object, scm_instance_p, scm_class_name,
scm_class_precedence_list, scm_class_slots, scm_class_environment,
scm_generic_function_name, scm_generic_function_methods,
scm_method_generic_function, scm_method_specializers,
scm_method_procedure, scm_make_unbound, scm_unbound_p,
scm_assert_bound, scm_at_assert_bound_ref, scm_sys_fast_slot_ref,
scm_sys_fast_slot_set_x, scm_slot_ref, scm_slot_set_x,
_scm_slot_bound_p, scm_slots_exists_p, scm_sys_allocate_instance,
scm_make, scm_pure_generic_p, scm_class_direct_supers,
scm_class_direct_slots, scm_class_direct_subclasses,
scm_class_direct_methods, scm_accessor_method_slot_definition,
scm_sys_goops_loaded): Added docstrings.
2001-02-16 14:59:22 +00:00
|
|
|
|
"Return the unbound value.")
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#define FUNC_NAME s_scm_make_unbound
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
|
|
|
|
|
return SCM_GOOPS_UNBOUND;
|
|
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_DEFINE (scm_unbound_p, "unbound?", 1, 0, 0,
|
|
|
|
|
|
(SCM obj),
|
(scm_sys_initialize_object, scm_instance_p, scm_class_name,
scm_class_precedence_list, scm_class_slots, scm_class_environment,
scm_generic_function_name, scm_generic_function_methods,
scm_method_generic_function, scm_method_specializers,
scm_method_procedure, scm_make_unbound, scm_unbound_p,
scm_assert_bound, scm_at_assert_bound_ref, scm_sys_fast_slot_ref,
scm_sys_fast_slot_set_x, scm_slot_ref, scm_slot_set_x,
_scm_slot_bound_p, scm_slots_exists_p, scm_sys_allocate_instance,
scm_make, scm_pure_generic_p, scm_class_direct_supers,
scm_class_direct_slots, scm_class_direct_subclasses,
scm_class_direct_methods, scm_accessor_method_slot_definition,
scm_sys_goops_loaded): Added docstrings.
2001-02-16 14:59:22 +00:00
|
|
|
|
"Return @code{#t} if @var{obj} is unbound.")
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#define FUNC_NAME s_scm_unbound_p
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
|
|
|
|
|
return SCM_GOOPS_UNBOUNDP (obj) ? SCM_BOOL_T : SCM_BOOL_F;
|
|
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
Make the evaluator's memoizers private.
* libguile/eval.c (macroexp): Move upwards.
(scm_m_quote, scm_m_begin, scm_m_if, scm_m_set_x, scm_m_and, scm_m_or,
scm_m_case, scm_m_cond, scm_m_lambda, scm_m_letstar, scm_m_do,
scm_m_quasiquote, scm_m_delay, scm_m_generalized_set_x,
scm_m_define, scm_m_letrec, scm_m_let, scm_m_at, scm_m_atat,
scm_m_apply, scm_m_cont, scm_m_nil_cond, scm_m_atfop,
scm_m_atbind, scm_m_atslot_ref, scm_m_atslot_set_x,
scm_m_at_call_with_values, scm_m_eval_when): New static
declarations; definitions made static.
(s_atslot_ref, s_atslot_set_x): New, from `goops.c'.
* libguile/eval.h (scm_m_quote, scm_m_begin, scm_m_if, scm_m_set_x,
scm_m_vref, scm_m_vset, scm_m_and, scm_m_or, scm_m_case, scm_m_cond,
scm_m_lambda, scm_m_letstar, scm_m_do, scm_m_quasiquote, scm_m_delay,
scm_m_generalized_set_x, scm_m_future, scm_m_define, scm_m_letrec,
scm_m_let, scm_m_at, scm_m_atat, scm_m_apply, scm_m_cont,
scm_m_nil_cond, scm_m_atfop, scm_m_atbind, scm_m_atslot_ref,
scm_m_atslot_set_x, scm_m_atdispatch, scm_m_at_call_with_values,
scm_m_eval_when): Remove public declarations.
* libguile/goops.c (s_atslot_ref, s_atslot_set_x): Remove.
2009-08-13 23:08:35 +02:00
|
|
|
|
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
/** Utilities **/
|
|
|
|
|
|
|
|
|
|
|
|
/* In the future, this function will return the effective slot
|
|
|
|
|
|
* definition associated with SLOT_NAME. Now it just returns some of
|
|
|
|
|
|
* the information which will be stored in the effective slot
|
|
|
|
|
|
* definition.
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
static SCM
|
|
|
|
|
|
slot_definition_using_name (SCM class, SCM slot_name)
|
|
|
|
|
|
{
|
|
|
|
|
|
register SCM slots = SCM_SLOT (class, scm_si_getters_n_setters);
|
2004-09-22 17:41:37 +00:00
|
|
|
|
for (; !scm_is_null (slots); slots = SCM_CDR (slots))
|
scm_is_eq for SCM vals, not == or !=
* libguile/bytevectors.c (scm_make_bytevector, STRING_TO_UTF)
(UTF_TO_STRING):
* libguile/continuations.c (scm_i_check_continuation):
* libguile/expand.h (SCM_EXPANDED_P):
* libguile/fluids.c (scm_i_make_with_fluids):
* libguile/generalized-vectors.c (scm_make_generalized_vector):
* libguile/goops.c (SCM_GOOPS_UNBOUNDP, slot_definition_using_name):
(scm_c_extend_primitive_generic, more_specificp, scm_make)
* libguile/i18n.c (SCM_VALIDATE_OPTIONAL_LOCALE_COPY):
(scm_locale_string_to_integer)
* libguile/modules.c (resolve_duplicate_binding):
(scm_module_reverse_lookup)
* libguile/posix.c (scm_to_resource):
* libguile/r6rs-ports.c (scm_put_bytevector):
* libguile/socket.c (scm_connect, scm_bind, scm_sendto
* libguile/stacks.c (find_prompt):
* libguile/variable.c (scm_variable_ref, scm_variable_bound_p):
* libguile/vm-engine.h (ASSERT_BOUND_VARIABLE, ASSERT_BOUND)
* libguile/vm-i-system.c (VARIABLE_BOUNDP, local_bound)
(long_local_bound, fluid_ref): Use scm_is_eq to compare, not == / !=.
2011-05-13 12:42:01 +02:00
|
|
|
|
if (scm_is_eq (SCM_CAAR (slots), slot_name))
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
return SCM_CAR (slots);
|
|
|
|
|
|
return SCM_BOOL_F;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static SCM
|
2001-06-07 21:12:19 +00:00
|
|
|
|
get_slot_value (SCM class SCM_UNUSED, SCM obj, SCM slotdef)
|
2008-04-10 01:23:06 +02:00
|
|
|
|
#define FUNC_NAME "%get-slot-value"
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
|
|
|
|
|
SCM access = SCM_CDDR (slotdef);
|
|
|
|
|
|
/* Two cases here:
|
|
|
|
|
|
* - access is an integer (the offset of this slot in the slots vector)
|
|
|
|
|
|
* - otherwise (car access) is the getter function to apply
|
2004-07-23 15:43:02 +00:00
|
|
|
|
*
|
|
|
|
|
|
* Instances have never more than SCM_MOST_POSITIVE_FIXNUM slots, so
|
|
|
|
|
|
* we can just assume fixnums here.
|
2000-12-01 16:05:33 +00:00
|
|
|
|
*/
|
2004-07-23 15:43:02 +00:00
|
|
|
|
if (SCM_I_INUMP (access))
|
2008-04-10 01:23:06 +02:00
|
|
|
|
/* Don't poke at the slots directly, because scm_struct_ref handles the
|
|
|
|
|
|
access bits for us. */
|
|
|
|
|
|
return scm_struct_ref (obj, access);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
else
|
2009-11-27 20:50:40 +01:00
|
|
|
|
return scm_call_1 (SCM_CAR (access), obj);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
2008-04-10 01:23:06 +02:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
|
|
|
|
|
static SCM
|
|
|
|
|
|
get_slot_value_using_name (SCM class, SCM obj, SCM slot_name)
|
|
|
|
|
|
{
|
|
|
|
|
|
SCM slotdef = slot_definition_using_name (class, slot_name);
|
2004-07-06 10:59:25 +00:00
|
|
|
|
if (scm_is_true (slotdef))
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
return get_slot_value (class, obj, slotdef);
|
|
|
|
|
|
else
|
2009-02-04 00:49:55 +01:00
|
|
|
|
return scm_call_3 (SCM_VARIABLE_REF (var_slot_missing), class, obj, slot_name);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static SCM
|
2001-06-07 21:12:19 +00:00
|
|
|
|
set_slot_value (SCM class SCM_UNUSED, SCM obj, SCM slotdef, SCM value)
|
2008-04-10 01:23:06 +02:00
|
|
|
|
#define FUNC_NAME "%set-slot-value"
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
|
|
|
|
|
SCM access = SCM_CDDR (slotdef);
|
|
|
|
|
|
/* Two cases here:
|
|
|
|
|
|
* - access is an integer (the offset of this slot in the slots vector)
|
|
|
|
|
|
* - otherwise (cadr access) is the setter function to apply
|
2004-07-23 15:43:02 +00:00
|
|
|
|
*
|
|
|
|
|
|
* Instances have never more than SCM_MOST_POSITIVE_FIXNUM slots, so
|
|
|
|
|
|
* we can just assume fixnums here.
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
*/
|
2004-07-23 15:43:02 +00:00
|
|
|
|
if (SCM_I_INUMP (access))
|
2008-04-10 01:23:06 +02:00
|
|
|
|
/* obey permissions bits via going through struct-set! */
|
|
|
|
|
|
scm_struct_set_x (obj, access, value);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
else
|
2009-11-27 20:50:40 +01:00
|
|
|
|
/* ((cadr l) obj value) */
|
|
|
|
|
|
scm_call_2 (SCM_CADR (access), obj, value);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
return SCM_UNSPECIFIED;
|
|
|
|
|
|
}
|
2008-04-10 01:23:06 +02:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
|
|
|
|
|
static SCM
|
|
|
|
|
|
set_slot_value_using_name (SCM class, SCM obj, SCM slot_name, SCM value)
|
|
|
|
|
|
{
|
|
|
|
|
|
SCM slotdef = slot_definition_using_name (class, slot_name);
|
2004-07-06 10:59:25 +00:00
|
|
|
|
if (scm_is_true (slotdef))
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
return set_slot_value (class, obj, slotdef, value);
|
|
|
|
|
|
else
|
2009-02-04 00:49:55 +01:00
|
|
|
|
return scm_call_4 (SCM_VARIABLE_REF (var_slot_missing), class, obj, slot_name, value);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static SCM
|
2001-06-07 21:12:19 +00:00
|
|
|
|
test_slot_existence (SCM class SCM_UNUSED, SCM obj, SCM slot_name)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
|
|
|
|
|
register SCM l;
|
|
|
|
|
|
|
2004-09-22 17:41:37 +00:00
|
|
|
|
for (l = SCM_ACCESSORS_OF (obj); !scm_is_null (l); l = SCM_CDR (l))
|
2004-07-27 15:41:49 +00:00
|
|
|
|
if (scm_is_eq (SCM_CAAR (l), slot_name))
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
return SCM_BOOL_T;
|
|
|
|
|
|
|
|
|
|
|
|
return SCM_BOOL_F;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* ======================================== */
|
|
|
|
|
|
|
2000-12-01 16:05:33 +00:00
|
|
|
|
SCM_DEFINE (scm_slot_ref_using_class, "slot-ref-using-class", 3, 0, 0,
|
|
|
|
|
|
(SCM class, SCM obj, SCM slot_name),
|
|
|
|
|
|
"")
|
|
|
|
|
|
#define FUNC_NAME s_scm_slot_ref_using_class
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
|
|
|
|
|
SCM res;
|
|
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_VALIDATE_CLASS (1, class);
|
|
|
|
|
|
SCM_VALIDATE_INSTANCE (2, obj);
|
|
|
|
|
|
SCM_VALIDATE_SYMBOL (3, slot_name);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
|
|
|
|
|
res = get_slot_value_using_name (class, obj, slot_name);
|
|
|
|
|
|
if (SCM_GOOPS_UNBOUNDP (res))
|
2009-02-04 00:49:55 +01:00
|
|
|
|
return scm_call_3 (SCM_VARIABLE_REF (var_slot_unbound), class, obj, slot_name);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
return res;
|
|
|
|
|
|
}
|
2000-12-01 16:05:33 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2000-12-01 16:05:33 +00:00
|
|
|
|
|
|
|
|
|
|
SCM_DEFINE (scm_slot_set_using_class_x, "slot-set-using-class!", 4, 0, 0,
|
|
|
|
|
|
(SCM class, SCM obj, SCM slot_name, SCM value),
|
|
|
|
|
|
"")
|
|
|
|
|
|
#define FUNC_NAME s_scm_slot_set_using_class_x
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_VALIDATE_CLASS (1, class);
|
|
|
|
|
|
SCM_VALIDATE_INSTANCE (2, obj);
|
|
|
|
|
|
SCM_VALIDATE_SYMBOL (3, slot_name);
|
2000-12-01 16:05:33 +00:00
|
|
|
|
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
return set_slot_value_using_name (class, obj, slot_name, value);
|
|
|
|
|
|
}
|
2000-12-01 16:05:33 +00:00
|
|
|
|
#undef FUNC_NAME
|
|
|
|
|
|
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_DEFINE (scm_slot_bound_using_class_p, "slot-bound-using-class?", 3, 0, 0,
|
|
|
|
|
|
(SCM class, SCM obj, SCM slot_name),
|
|
|
|
|
|
"")
|
|
|
|
|
|
#define FUNC_NAME s_scm_slot_bound_using_class_p
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_VALIDATE_CLASS (1, class);
|
|
|
|
|
|
SCM_VALIDATE_INSTANCE (2, obj);
|
|
|
|
|
|
SCM_VALIDATE_SYMBOL (3, slot_name);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
|
|
|
|
|
return (SCM_GOOPS_UNBOUNDP (get_slot_value_using_name (class, obj, slot_name))
|
|
|
|
|
|
? SCM_BOOL_F
|
|
|
|
|
|
: SCM_BOOL_T);
|
|
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_DEFINE (scm_slot_exists_using_class_p, "slot-exists-using-class?", 3, 0, 0,
|
|
|
|
|
|
(SCM class, SCM obj, SCM slot_name),
|
|
|
|
|
|
"")
|
|
|
|
|
|
#define FUNC_NAME s_scm_slot_exists_using_class_p
|
|
|
|
|
|
{
|
|
|
|
|
|
SCM_VALIDATE_CLASS (1, class);
|
|
|
|
|
|
SCM_VALIDATE_INSTANCE (2, obj);
|
|
|
|
|
|
SCM_VALIDATE_SYMBOL (3, slot_name);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
return test_slot_existence (class, obj, slot_name);
|
|
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ======================================== */
|
|
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_DEFINE (scm_slot_ref, "slot-ref", 2, 0, 0,
|
|
|
|
|
|
(SCM obj, SCM slot_name),
|
(scm_sys_initialize_object, scm_instance_p, scm_class_name,
scm_class_precedence_list, scm_class_slots, scm_class_environment,
scm_generic_function_name, scm_generic_function_methods,
scm_method_generic_function, scm_method_specializers,
scm_method_procedure, scm_make_unbound, scm_unbound_p,
scm_assert_bound, scm_at_assert_bound_ref, scm_sys_fast_slot_ref,
scm_sys_fast_slot_set_x, scm_slot_ref, scm_slot_set_x,
_scm_slot_bound_p, scm_slots_exists_p, scm_sys_allocate_instance,
scm_make, scm_pure_generic_p, scm_class_direct_supers,
scm_class_direct_slots, scm_class_direct_subclasses,
scm_class_direct_methods, scm_accessor_method_slot_definition,
scm_sys_goops_loaded): Added docstrings.
2001-02-16 14:59:22 +00:00
|
|
|
|
"Return the value from @var{obj}'s slot with the name\n"
|
|
|
|
|
|
"@var{slot_name}.")
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#define FUNC_NAME s_scm_slot_ref
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
|
|
|
|
|
SCM res, class;
|
|
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_VALIDATE_INSTANCE (1, obj);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
TEST_CHANGE_CLASS (obj, class);
|
|
|
|
|
|
|
|
|
|
|
|
res = get_slot_value_using_name (class, obj, slot_name);
|
|
|
|
|
|
if (SCM_GOOPS_UNBOUNDP (res))
|
2009-02-04 00:49:55 +01:00
|
|
|
|
return scm_call_3 (SCM_VARIABLE_REF (var_slot_unbound), class, obj, slot_name);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
return res;
|
|
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_DEFINE (scm_slot_set_x, "slot-set!", 3, 0, 0,
|
|
|
|
|
|
(SCM obj, SCM slot_name, SCM value),
|
(scm_sys_initialize_object, scm_instance_p, scm_class_name,
scm_class_precedence_list, scm_class_slots, scm_class_environment,
scm_generic_function_name, scm_generic_function_methods,
scm_method_generic_function, scm_method_specializers,
scm_method_procedure, scm_make_unbound, scm_unbound_p,
scm_assert_bound, scm_at_assert_bound_ref, scm_sys_fast_slot_ref,
scm_sys_fast_slot_set_x, scm_slot_ref, scm_slot_set_x,
_scm_slot_bound_p, scm_slots_exists_p, scm_sys_allocate_instance,
scm_make, scm_pure_generic_p, scm_class_direct_supers,
scm_class_direct_slots, scm_class_direct_subclasses,
scm_class_direct_methods, scm_accessor_method_slot_definition,
scm_sys_goops_loaded): Added docstrings.
2001-02-16 14:59:22 +00:00
|
|
|
|
"Set the slot named @var{slot_name} of @var{obj} to @var{value}.")
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#define FUNC_NAME s_scm_slot_set_x
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
|
|
|
|
|
SCM class;
|
|
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_VALIDATE_INSTANCE (1, obj);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
TEST_CHANGE_CLASS(obj, class);
|
|
|
|
|
|
|
|
|
|
|
|
return set_slot_value_using_name (class, obj, slot_name, value);
|
|
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_DEFINE (scm_slot_bound_p, "slot-bound?", 2, 0, 0,
|
|
|
|
|
|
(SCM obj, SCM slot_name),
|
(scm_sys_initialize_object, scm_instance_p, scm_class_name,
scm_class_precedence_list, scm_class_slots, scm_class_environment,
scm_generic_function_name, scm_generic_function_methods,
scm_method_generic_function, scm_method_specializers,
scm_method_procedure, scm_make_unbound, scm_unbound_p,
scm_assert_bound, scm_at_assert_bound_ref, scm_sys_fast_slot_ref,
scm_sys_fast_slot_set_x, scm_slot_ref, scm_slot_set_x,
_scm_slot_bound_p, scm_slots_exists_p, scm_sys_allocate_instance,
scm_make, scm_pure_generic_p, scm_class_direct_supers,
scm_class_direct_slots, scm_class_direct_subclasses,
scm_class_direct_methods, scm_accessor_method_slot_definition,
scm_sys_goops_loaded): Added docstrings.
2001-02-16 14:59:22 +00:00
|
|
|
|
"Return @code{#t} if the slot named @var{slot_name} of @var{obj}\n"
|
|
|
|
|
|
"is bound.")
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#define FUNC_NAME s_scm_slot_bound_p
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
|
|
|
|
|
SCM class;
|
|
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_VALIDATE_INSTANCE (1, obj);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
TEST_CHANGE_CLASS(obj, class);
|
|
|
|
|
|
|
|
|
|
|
|
return (SCM_GOOPS_UNBOUNDP (get_slot_value_using_name (class,
|
|
|
|
|
|
obj,
|
|
|
|
|
|
slot_name))
|
|
|
|
|
|
? SCM_BOOL_F
|
|
|
|
|
|
: SCM_BOOL_T);
|
|
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2002-04-22 17:46:06 +00:00
|
|
|
|
SCM_DEFINE (scm_slot_exists_p, "slot-exists?", 2, 0, 0,
|
2000-12-16 20:25:08 +00:00
|
|
|
|
(SCM obj, SCM slot_name),
|
(scm_sys_initialize_object, scm_instance_p, scm_class_name,
scm_class_precedence_list, scm_class_slots, scm_class_environment,
scm_generic_function_name, scm_generic_function_methods,
scm_method_generic_function, scm_method_specializers,
scm_method_procedure, scm_make_unbound, scm_unbound_p,
scm_assert_bound, scm_at_assert_bound_ref, scm_sys_fast_slot_ref,
scm_sys_fast_slot_set_x, scm_slot_ref, scm_slot_set_x,
_scm_slot_bound_p, scm_slots_exists_p, scm_sys_allocate_instance,
scm_make, scm_pure_generic_p, scm_class_direct_supers,
scm_class_direct_slots, scm_class_direct_subclasses,
scm_class_direct_methods, scm_accessor_method_slot_definition,
scm_sys_goops_loaded): Added docstrings.
2001-02-16 14:59:22 +00:00
|
|
|
|
"Return @code{#t} if @var{obj} has a slot named @var{slot_name}.")
|
2002-04-22 17:46:06 +00:00
|
|
|
|
#define FUNC_NAME s_scm_slot_exists_p
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
|
|
|
|
|
SCM class;
|
|
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_VALIDATE_INSTANCE (1, obj);
|
|
|
|
|
|
SCM_VALIDATE_SYMBOL (2, slot_name);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
TEST_CHANGE_CLASS (obj, class);
|
|
|
|
|
|
|
|
|
|
|
|
return test_slot_existence (class, obj, slot_name);
|
|
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
|
|
|
|
*
|
|
|
|
|
|
* %allocate-instance (the low level instance allocation primitive)
|
|
|
|
|
|
*
|
|
|
|
|
|
******************************************************************************/
|
|
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_DEFINE (scm_sys_allocate_instance, "%allocate-instance", 2, 0, 0,
|
|
|
|
|
|
(SCM class, SCM initargs),
|
(scm_sys_initialize_object, scm_instance_p, scm_class_name,
scm_class_precedence_list, scm_class_slots, scm_class_environment,
scm_generic_function_name, scm_generic_function_methods,
scm_method_generic_function, scm_method_specializers,
scm_method_procedure, scm_make_unbound, scm_unbound_p,
scm_assert_bound, scm_at_assert_bound_ref, scm_sys_fast_slot_ref,
scm_sys_fast_slot_set_x, scm_slot_ref, scm_slot_set_x,
_scm_slot_bound_p, scm_slots_exists_p, scm_sys_allocate_instance,
scm_make, scm_pure_generic_p, scm_class_direct_supers,
scm_class_direct_slots, scm_class_direct_subclasses,
scm_class_direct_methods, scm_accessor_method_slot_definition,
scm_sys_goops_loaded): Added docstrings.
2001-02-16 14:59:22 +00:00
|
|
|
|
"Create a new instance of class @var{class} and initialize it\n"
|
|
|
|
|
|
"from the arguments @var{initargs}.")
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#define FUNC_NAME s_scm_sys_allocate_instance
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
a very big commit cleaning up structs & goops. also applicable structs.
I tried to split this one, and I know it's a bit disruptive, but this
stuff really is one big cobweb. So instead we'll pretend like these are
separate commits, by separating the changelog.
Applicable struct runtime support.
* libguile/debug.c (scm_procedure_source):
* libguile/eval.c (scm_trampoline_0, scm_trampoline_1)
(scm_trampoline_2):
* libguile/eval.i.c (CEVAL):
* libguile/goops.c (scm_class_of):
* libguile/procprop.c (scm_i_procedure_arity):
* libguile/procs.c (scm_procedure_p, scm_procedure, scm_setter): Allow
for applicable structs. Whee!
* libguile/deprecated.h (scm_vtable_index_vtable): Define as a synonym
for scm_vtable_index_self.
(scm_vtable_index_printer): Alias scm_vtable_index_instance_printer.
(scm_struct_i_free): Alias scm_vtable_index_instance_finalize.
(scm_struct_i_flags): Alias scm_vtable_index_flags.
(SCM_STRUCTF_FLAGS): Be a -1 mask, we have a whole word now.
(SCM_SET_VTABLE_DESTRUCTOR): Implement by hand.
Hidden slots.
* libguile/struct.c (scm_make_struct_layout): Add support for "hidden"
fields, writable fields that are not visible to make-struct. This
allows us to add fields to vtables and not break existing make-struct
invocations.
(scm_struct_ref, scm_struct_set_x): Always get struct length from the
vtable. Support hidden fields.
* libguile/goops.c (scm_class_hidden, scm_class_protected_hidden): New
slot classes, to correspond to the new vtable slots.
(scm_sys_prep_layout_x): Turn hidden slots into 'h'.
(build_class_class_slots): Reorder the class slots to account for
vtable fields coming out of negative-land, for name as a vtable slot,
and for hidden fields.
(create_standard_classes): Define <hidden-slot> and
<protected-hidden-slot>.
Clean up struct.h.
* libguile/struct.h: Lay things out cleaner. There are no more hidden
(negative) words. Names are nicer. The exposition is nicer. But the
basics are the same. The incompatibilities are that <vtable> has more
slots now, and that scm_alloc_struct's signature has changed. The
former is ameliorated by the "hidden" slots mentioned before, and the
latter, well, it was always a very internal thing...
(scm_t_struct_finalize): New type, a finalizer function to be run when
instances of a vtable are collected.
(scm_t_struct_free): Removed, structs' data is managed by the GC now,
and not freed by vtable functions.
* libguile/struct.c: (scm_vtable_p): Now we keep flags on
vtable-vtables, so this check is cheaper.
(scm_alloc_struct): No hidden words. Yippee.
(struct_finalizer_trampoline): Entersify.
(scm_make_struct): No need to babysit extra words, though now we have
to babysit flags. Propagate the vtable, applicable, and setter flags
appropriately.
(scm_make_vtable_vtable): Update for new simplicity.
(scm_print_struct): A better printer.
(scm_init_struct): Define <applicable-struct-vtable>, a magical vtable
like CL's funcallable-standard-class. Also define
<applicable-struct-with-setter-vtable>.
Remove foreign object implementation.
* libguile/goops.h:
* libguile/goops.c (scm_make_foreign_object, scm_make_class)
(scm_add_slot, scm_wrap_object, scm_wrap_component): Remove, these
were undocumented and unworking.
Clean up goops.h, a little.
* libguile/goops.h:
* libguile/goops.c: Also clean up.
* module/oop/goops/dispatch.scm (hashset-index): Adapt for new hashset
index.
2009-11-03 23:59:51 +01:00
|
|
|
|
SCM obj;
|
2010-11-19 11:29:26 +01:00
|
|
|
|
scm_t_signed_bits n, i;
|
a very big commit cleaning up structs & goops. also applicable structs.
I tried to split this one, and I know it's a bit disruptive, but this
stuff really is one big cobweb. So instead we'll pretend like these are
separate commits, by separating the changelog.
Applicable struct runtime support.
* libguile/debug.c (scm_procedure_source):
* libguile/eval.c (scm_trampoline_0, scm_trampoline_1)
(scm_trampoline_2):
* libguile/eval.i.c (CEVAL):
* libguile/goops.c (scm_class_of):
* libguile/procprop.c (scm_i_procedure_arity):
* libguile/procs.c (scm_procedure_p, scm_procedure, scm_setter): Allow
for applicable structs. Whee!
* libguile/deprecated.h (scm_vtable_index_vtable): Define as a synonym
for scm_vtable_index_self.
(scm_vtable_index_printer): Alias scm_vtable_index_instance_printer.
(scm_struct_i_free): Alias scm_vtable_index_instance_finalize.
(scm_struct_i_flags): Alias scm_vtable_index_flags.
(SCM_STRUCTF_FLAGS): Be a -1 mask, we have a whole word now.
(SCM_SET_VTABLE_DESTRUCTOR): Implement by hand.
Hidden slots.
* libguile/struct.c (scm_make_struct_layout): Add support for "hidden"
fields, writable fields that are not visible to make-struct. This
allows us to add fields to vtables and not break existing make-struct
invocations.
(scm_struct_ref, scm_struct_set_x): Always get struct length from the
vtable. Support hidden fields.
* libguile/goops.c (scm_class_hidden, scm_class_protected_hidden): New
slot classes, to correspond to the new vtable slots.
(scm_sys_prep_layout_x): Turn hidden slots into 'h'.
(build_class_class_slots): Reorder the class slots to account for
vtable fields coming out of negative-land, for name as a vtable slot,
and for hidden fields.
(create_standard_classes): Define <hidden-slot> and
<protected-hidden-slot>.
Clean up struct.h.
* libguile/struct.h: Lay things out cleaner. There are no more hidden
(negative) words. Names are nicer. The exposition is nicer. But the
basics are the same. The incompatibilities are that <vtable> has more
slots now, and that scm_alloc_struct's signature has changed. The
former is ameliorated by the "hidden" slots mentioned before, and the
latter, well, it was always a very internal thing...
(scm_t_struct_finalize): New type, a finalizer function to be run when
instances of a vtable are collected.
(scm_t_struct_free): Removed, structs' data is managed by the GC now,
and not freed by vtable functions.
* libguile/struct.c: (scm_vtable_p): Now we keep flags on
vtable-vtables, so this check is cheaper.
(scm_alloc_struct): No hidden words. Yippee.
(struct_finalizer_trampoline): Entersify.
(scm_make_struct): No need to babysit extra words, though now we have
to babysit flags. Propagate the vtable, applicable, and setter flags
appropriately.
(scm_make_vtable_vtable): Update for new simplicity.
(scm_print_struct): A better printer.
(scm_init_struct): Define <applicable-struct-vtable>, a magical vtable
like CL's funcallable-standard-class. Also define
<applicable-struct-with-setter-vtable>.
Remove foreign object implementation.
* libguile/goops.h:
* libguile/goops.c (scm_make_foreign_object, scm_make_class)
(scm_add_slot, scm_wrap_object, scm_wrap_component): Remove, these
were undocumented and unworking.
Clean up goops.h, a little.
* libguile/goops.h:
* libguile/goops.c: Also clean up.
* module/oop/goops/dispatch.scm (hashset-index): Adapt for new hashset
index.
2009-11-03 23:59:51 +01:00
|
|
|
|
SCM layout;
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_VALIDATE_CLASS (1, class);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
a very big commit cleaning up structs & goops. also applicable structs.
I tried to split this one, and I know it's a bit disruptive, but this
stuff really is one big cobweb. So instead we'll pretend like these are
separate commits, by separating the changelog.
Applicable struct runtime support.
* libguile/debug.c (scm_procedure_source):
* libguile/eval.c (scm_trampoline_0, scm_trampoline_1)
(scm_trampoline_2):
* libguile/eval.i.c (CEVAL):
* libguile/goops.c (scm_class_of):
* libguile/procprop.c (scm_i_procedure_arity):
* libguile/procs.c (scm_procedure_p, scm_procedure, scm_setter): Allow
for applicable structs. Whee!
* libguile/deprecated.h (scm_vtable_index_vtable): Define as a synonym
for scm_vtable_index_self.
(scm_vtable_index_printer): Alias scm_vtable_index_instance_printer.
(scm_struct_i_free): Alias scm_vtable_index_instance_finalize.
(scm_struct_i_flags): Alias scm_vtable_index_flags.
(SCM_STRUCTF_FLAGS): Be a -1 mask, we have a whole word now.
(SCM_SET_VTABLE_DESTRUCTOR): Implement by hand.
Hidden slots.
* libguile/struct.c (scm_make_struct_layout): Add support for "hidden"
fields, writable fields that are not visible to make-struct. This
allows us to add fields to vtables and not break existing make-struct
invocations.
(scm_struct_ref, scm_struct_set_x): Always get struct length from the
vtable. Support hidden fields.
* libguile/goops.c (scm_class_hidden, scm_class_protected_hidden): New
slot classes, to correspond to the new vtable slots.
(scm_sys_prep_layout_x): Turn hidden slots into 'h'.
(build_class_class_slots): Reorder the class slots to account for
vtable fields coming out of negative-land, for name as a vtable slot,
and for hidden fields.
(create_standard_classes): Define <hidden-slot> and
<protected-hidden-slot>.
Clean up struct.h.
* libguile/struct.h: Lay things out cleaner. There are no more hidden
(negative) words. Names are nicer. The exposition is nicer. But the
basics are the same. The incompatibilities are that <vtable> has more
slots now, and that scm_alloc_struct's signature has changed. The
former is ameliorated by the "hidden" slots mentioned before, and the
latter, well, it was always a very internal thing...
(scm_t_struct_finalize): New type, a finalizer function to be run when
instances of a vtable are collected.
(scm_t_struct_free): Removed, structs' data is managed by the GC now,
and not freed by vtable functions.
* libguile/struct.c: (scm_vtable_p): Now we keep flags on
vtable-vtables, so this check is cheaper.
(scm_alloc_struct): No hidden words. Yippee.
(struct_finalizer_trampoline): Entersify.
(scm_make_struct): No need to babysit extra words, though now we have
to babysit flags. Propagate the vtable, applicable, and setter flags
appropriately.
(scm_make_vtable_vtable): Update for new simplicity.
(scm_print_struct): A better printer.
(scm_init_struct): Define <applicable-struct-vtable>, a magical vtable
like CL's funcallable-standard-class. Also define
<applicable-struct-with-setter-vtable>.
Remove foreign object implementation.
* libguile/goops.h:
* libguile/goops.c (scm_make_foreign_object, scm_make_class)
(scm_add_slot, scm_wrap_object, scm_wrap_component): Remove, these
were undocumented and unworking.
Clean up goops.h, a little.
* libguile/goops.h:
* libguile/goops.c: Also clean up.
* module/oop/goops/dispatch.scm (hashset-index): Adapt for new hashset
index.
2009-11-03 23:59:51 +01:00
|
|
|
|
/* FIXME: duplicates some of scm_make_struct. */
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2004-07-23 15:43:02 +00:00
|
|
|
|
n = SCM_I_INUM (SCM_SLOT (class, scm_si_nfields));
|
2009-12-08 21:50:40 +01:00
|
|
|
|
obj = scm_i_alloc_struct (SCM_STRUCT_DATA (class), n);
|
2002-04-22 17:46:06 +00:00
|
|
|
|
|
a very big commit cleaning up structs & goops. also applicable structs.
I tried to split this one, and I know it's a bit disruptive, but this
stuff really is one big cobweb. So instead we'll pretend like these are
separate commits, by separating the changelog.
Applicable struct runtime support.
* libguile/debug.c (scm_procedure_source):
* libguile/eval.c (scm_trampoline_0, scm_trampoline_1)
(scm_trampoline_2):
* libguile/eval.i.c (CEVAL):
* libguile/goops.c (scm_class_of):
* libguile/procprop.c (scm_i_procedure_arity):
* libguile/procs.c (scm_procedure_p, scm_procedure, scm_setter): Allow
for applicable structs. Whee!
* libguile/deprecated.h (scm_vtable_index_vtable): Define as a synonym
for scm_vtable_index_self.
(scm_vtable_index_printer): Alias scm_vtable_index_instance_printer.
(scm_struct_i_free): Alias scm_vtable_index_instance_finalize.
(scm_struct_i_flags): Alias scm_vtable_index_flags.
(SCM_STRUCTF_FLAGS): Be a -1 mask, we have a whole word now.
(SCM_SET_VTABLE_DESTRUCTOR): Implement by hand.
Hidden slots.
* libguile/struct.c (scm_make_struct_layout): Add support for "hidden"
fields, writable fields that are not visible to make-struct. This
allows us to add fields to vtables and not break existing make-struct
invocations.
(scm_struct_ref, scm_struct_set_x): Always get struct length from the
vtable. Support hidden fields.
* libguile/goops.c (scm_class_hidden, scm_class_protected_hidden): New
slot classes, to correspond to the new vtable slots.
(scm_sys_prep_layout_x): Turn hidden slots into 'h'.
(build_class_class_slots): Reorder the class slots to account for
vtable fields coming out of negative-land, for name as a vtable slot,
and for hidden fields.
(create_standard_classes): Define <hidden-slot> and
<protected-hidden-slot>.
Clean up struct.h.
* libguile/struct.h: Lay things out cleaner. There are no more hidden
(negative) words. Names are nicer. The exposition is nicer. But the
basics are the same. The incompatibilities are that <vtable> has more
slots now, and that scm_alloc_struct's signature has changed. The
former is ameliorated by the "hidden" slots mentioned before, and the
latter, well, it was always a very internal thing...
(scm_t_struct_finalize): New type, a finalizer function to be run when
instances of a vtable are collected.
(scm_t_struct_free): Removed, structs' data is managed by the GC now,
and not freed by vtable functions.
* libguile/struct.c: (scm_vtable_p): Now we keep flags on
vtable-vtables, so this check is cheaper.
(scm_alloc_struct): No hidden words. Yippee.
(struct_finalizer_trampoline): Entersify.
(scm_make_struct): No need to babysit extra words, though now we have
to babysit flags. Propagate the vtable, applicable, and setter flags
appropriately.
(scm_make_vtable_vtable): Update for new simplicity.
(scm_print_struct): A better printer.
(scm_init_struct): Define <applicable-struct-vtable>, a magical vtable
like CL's funcallable-standard-class. Also define
<applicable-struct-with-setter-vtable>.
Remove foreign object implementation.
* libguile/goops.h:
* libguile/goops.c (scm_make_foreign_object, scm_make_class)
(scm_add_slot, scm_wrap_object, scm_wrap_component): Remove, these
were undocumented and unworking.
Clean up goops.h, a little.
* libguile/goops.h:
* libguile/goops.c: Also clean up.
* module/oop/goops/dispatch.scm (hashset-index): Adapt for new hashset
index.
2009-11-03 23:59:51 +01:00
|
|
|
|
layout = SCM_VTABLE_LAYOUT (class);
|
|
|
|
|
|
|
|
|
|
|
|
/* Set all SCM-holding slots to unbound */
|
|
|
|
|
|
for (i = 0; i < n; i++)
|
2009-11-26 00:12:12 +01:00
|
|
|
|
{
|
|
|
|
|
|
scm_t_wchar c = scm_i_symbol_ref (layout, i*2);
|
a very big commit cleaning up structs & goops. also applicable structs.
I tried to split this one, and I know it's a bit disruptive, but this
stuff really is one big cobweb. So instead we'll pretend like these are
separate commits, by separating the changelog.
Applicable struct runtime support.
* libguile/debug.c (scm_procedure_source):
* libguile/eval.c (scm_trampoline_0, scm_trampoline_1)
(scm_trampoline_2):
* libguile/eval.i.c (CEVAL):
* libguile/goops.c (scm_class_of):
* libguile/procprop.c (scm_i_procedure_arity):
* libguile/procs.c (scm_procedure_p, scm_procedure, scm_setter): Allow
for applicable structs. Whee!
* libguile/deprecated.h (scm_vtable_index_vtable): Define as a synonym
for scm_vtable_index_self.
(scm_vtable_index_printer): Alias scm_vtable_index_instance_printer.
(scm_struct_i_free): Alias scm_vtable_index_instance_finalize.
(scm_struct_i_flags): Alias scm_vtable_index_flags.
(SCM_STRUCTF_FLAGS): Be a -1 mask, we have a whole word now.
(SCM_SET_VTABLE_DESTRUCTOR): Implement by hand.
Hidden slots.
* libguile/struct.c (scm_make_struct_layout): Add support for "hidden"
fields, writable fields that are not visible to make-struct. This
allows us to add fields to vtables and not break existing make-struct
invocations.
(scm_struct_ref, scm_struct_set_x): Always get struct length from the
vtable. Support hidden fields.
* libguile/goops.c (scm_class_hidden, scm_class_protected_hidden): New
slot classes, to correspond to the new vtable slots.
(scm_sys_prep_layout_x): Turn hidden slots into 'h'.
(build_class_class_slots): Reorder the class slots to account for
vtable fields coming out of negative-land, for name as a vtable slot,
and for hidden fields.
(create_standard_classes): Define <hidden-slot> and
<protected-hidden-slot>.
Clean up struct.h.
* libguile/struct.h: Lay things out cleaner. There are no more hidden
(negative) words. Names are nicer. The exposition is nicer. But the
basics are the same. The incompatibilities are that <vtable> has more
slots now, and that scm_alloc_struct's signature has changed. The
former is ameliorated by the "hidden" slots mentioned before, and the
latter, well, it was always a very internal thing...
(scm_t_struct_finalize): New type, a finalizer function to be run when
instances of a vtable are collected.
(scm_t_struct_free): Removed, structs' data is managed by the GC now,
and not freed by vtable functions.
* libguile/struct.c: (scm_vtable_p): Now we keep flags on
vtable-vtables, so this check is cheaper.
(scm_alloc_struct): No hidden words. Yippee.
(struct_finalizer_trampoline): Entersify.
(scm_make_struct): No need to babysit extra words, though now we have
to babysit flags. Propagate the vtable, applicable, and setter flags
appropriately.
(scm_make_vtable_vtable): Update for new simplicity.
(scm_print_struct): A better printer.
(scm_init_struct): Define <applicable-struct-vtable>, a magical vtable
like CL's funcallable-standard-class. Also define
<applicable-struct-with-setter-vtable>.
Remove foreign object implementation.
* libguile/goops.h:
* libguile/goops.c (scm_make_foreign_object, scm_make_class)
(scm_add_slot, scm_wrap_object, scm_wrap_component): Remove, these
were undocumented and unworking.
Clean up goops.h, a little.
* libguile/goops.h:
* libguile/goops.c: Also clean up.
* module/oop/goops/dispatch.scm (hashset-index): Adapt for new hashset
index.
2009-11-03 23:59:51 +01:00
|
|
|
|
if (c == 'p')
|
|
|
|
|
|
SCM_STRUCT_DATA (obj)[i] = SCM_UNPACK (SCM_GOOPS_UNBOUND);
|
|
|
|
|
|
else if (c == 's')
|
|
|
|
|
|
SCM_STRUCT_DATA (obj)[i] = SCM_UNPACK (obj);
|
|
|
|
|
|
else
|
|
|
|
|
|
SCM_STRUCT_DATA (obj)[i] = 0;
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
2002-04-22 17:46:06 +00:00
|
|
|
|
|
a very big commit cleaning up structs & goops. also applicable structs.
I tried to split this one, and I know it's a bit disruptive, but this
stuff really is one big cobweb. So instead we'll pretend like these are
separate commits, by separating the changelog.
Applicable struct runtime support.
* libguile/debug.c (scm_procedure_source):
* libguile/eval.c (scm_trampoline_0, scm_trampoline_1)
(scm_trampoline_2):
* libguile/eval.i.c (CEVAL):
* libguile/goops.c (scm_class_of):
* libguile/procprop.c (scm_i_procedure_arity):
* libguile/procs.c (scm_procedure_p, scm_procedure, scm_setter): Allow
for applicable structs. Whee!
* libguile/deprecated.h (scm_vtable_index_vtable): Define as a synonym
for scm_vtable_index_self.
(scm_vtable_index_printer): Alias scm_vtable_index_instance_printer.
(scm_struct_i_free): Alias scm_vtable_index_instance_finalize.
(scm_struct_i_flags): Alias scm_vtable_index_flags.
(SCM_STRUCTF_FLAGS): Be a -1 mask, we have a whole word now.
(SCM_SET_VTABLE_DESTRUCTOR): Implement by hand.
Hidden slots.
* libguile/struct.c (scm_make_struct_layout): Add support for "hidden"
fields, writable fields that are not visible to make-struct. This
allows us to add fields to vtables and not break existing make-struct
invocations.
(scm_struct_ref, scm_struct_set_x): Always get struct length from the
vtable. Support hidden fields.
* libguile/goops.c (scm_class_hidden, scm_class_protected_hidden): New
slot classes, to correspond to the new vtable slots.
(scm_sys_prep_layout_x): Turn hidden slots into 'h'.
(build_class_class_slots): Reorder the class slots to account for
vtable fields coming out of negative-land, for name as a vtable slot,
and for hidden fields.
(create_standard_classes): Define <hidden-slot> and
<protected-hidden-slot>.
Clean up struct.h.
* libguile/struct.h: Lay things out cleaner. There are no more hidden
(negative) words. Names are nicer. The exposition is nicer. But the
basics are the same. The incompatibilities are that <vtable> has more
slots now, and that scm_alloc_struct's signature has changed. The
former is ameliorated by the "hidden" slots mentioned before, and the
latter, well, it was always a very internal thing...
(scm_t_struct_finalize): New type, a finalizer function to be run when
instances of a vtable are collected.
(scm_t_struct_free): Removed, structs' data is managed by the GC now,
and not freed by vtable functions.
* libguile/struct.c: (scm_vtable_p): Now we keep flags on
vtable-vtables, so this check is cheaper.
(scm_alloc_struct): No hidden words. Yippee.
(struct_finalizer_trampoline): Entersify.
(scm_make_struct): No need to babysit extra words, though now we have
to babysit flags. Propagate the vtable, applicable, and setter flags
appropriately.
(scm_make_vtable_vtable): Update for new simplicity.
(scm_print_struct): A better printer.
(scm_init_struct): Define <applicable-struct-vtable>, a magical vtable
like CL's funcallable-standard-class. Also define
<applicable-struct-with-setter-vtable>.
Remove foreign object implementation.
* libguile/goops.h:
* libguile/goops.c (scm_make_foreign_object, scm_make_class)
(scm_add_slot, scm_wrap_object, scm_wrap_component): Remove, these
were undocumented and unworking.
Clean up goops.h, a little.
* libguile/goops.h:
* libguile/goops.c: Also clean up.
* module/oop/goops/dispatch.scm (hashset-index): Adapt for new hashset
index.
2009-11-03 23:59:51 +01:00
|
|
|
|
return obj;
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
|
|
|
|
*
|
|
|
|
|
|
* %modify-instance (used by change-class to modify in place)
|
2002-04-22 17:46:06 +00:00
|
|
|
|
*
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
******************************************************************************/
|
|
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_DEFINE (scm_sys_modify_instance, "%modify-instance", 2, 0, 0,
|
|
|
|
|
|
(SCM old, SCM new),
|
|
|
|
|
|
"")
|
|
|
|
|
|
#define FUNC_NAME s_scm_sys_modify_instance
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_VALIDATE_INSTANCE (1, old);
|
|
|
|
|
|
SCM_VALIDATE_INSTANCE (2, new);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2002-04-22 17:46:06 +00:00
|
|
|
|
/* Exchange the data contained in old and new. We exchange rather than
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
* scratch the old value with new to be correct with GC.
|
|
|
|
|
|
* See "Class redefinition protocol above".
|
|
|
|
|
|
*/
|
2005-03-02 20:42:01 +00:00
|
|
|
|
SCM_CRITICAL_SECTION_START;
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2009-10-23 14:00:19 -04:00
|
|
|
|
scm_t_bits word0, word1;
|
|
|
|
|
|
word0 = SCM_CELL_WORD_0 (old);
|
|
|
|
|
|
word1 = SCM_CELL_WORD_1 (old);
|
|
|
|
|
|
SCM_SET_CELL_WORD_0 (old, SCM_CELL_WORD_0 (new));
|
|
|
|
|
|
SCM_SET_CELL_WORD_1 (old, SCM_CELL_WORD_1 (new));
|
|
|
|
|
|
SCM_SET_CELL_WORD_0 (new, word0);
|
|
|
|
|
|
SCM_SET_CELL_WORD_1 (new, word1);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
2005-03-02 20:42:01 +00:00
|
|
|
|
SCM_CRITICAL_SECTION_END;
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
return SCM_UNSPECIFIED;
|
|
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_DEFINE (scm_sys_modify_class, "%modify-class", 2, 0, 0,
|
|
|
|
|
|
(SCM old, SCM new),
|
|
|
|
|
|
"")
|
|
|
|
|
|
#define FUNC_NAME s_scm_sys_modify_class
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_VALIDATE_CLASS (1, old);
|
|
|
|
|
|
SCM_VALIDATE_CLASS (2, new);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2005-03-02 20:42:01 +00:00
|
|
|
|
SCM_CRITICAL_SECTION_START;
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2009-10-23 14:00:19 -04:00
|
|
|
|
scm_t_bits word0, word1;
|
|
|
|
|
|
word0 = SCM_CELL_WORD_0 (old);
|
|
|
|
|
|
word1 = SCM_CELL_WORD_1 (old);
|
|
|
|
|
|
SCM_SET_CELL_WORD_0 (old, SCM_CELL_WORD_0 (new));
|
|
|
|
|
|
SCM_SET_CELL_WORD_1 (old, SCM_CELL_WORD_1 (new));
|
a very big commit cleaning up structs & goops. also applicable structs.
I tried to split this one, and I know it's a bit disruptive, but this
stuff really is one big cobweb. So instead we'll pretend like these are
separate commits, by separating the changelog.
Applicable struct runtime support.
* libguile/debug.c (scm_procedure_source):
* libguile/eval.c (scm_trampoline_0, scm_trampoline_1)
(scm_trampoline_2):
* libguile/eval.i.c (CEVAL):
* libguile/goops.c (scm_class_of):
* libguile/procprop.c (scm_i_procedure_arity):
* libguile/procs.c (scm_procedure_p, scm_procedure, scm_setter): Allow
for applicable structs. Whee!
* libguile/deprecated.h (scm_vtable_index_vtable): Define as a synonym
for scm_vtable_index_self.
(scm_vtable_index_printer): Alias scm_vtable_index_instance_printer.
(scm_struct_i_free): Alias scm_vtable_index_instance_finalize.
(scm_struct_i_flags): Alias scm_vtable_index_flags.
(SCM_STRUCTF_FLAGS): Be a -1 mask, we have a whole word now.
(SCM_SET_VTABLE_DESTRUCTOR): Implement by hand.
Hidden slots.
* libguile/struct.c (scm_make_struct_layout): Add support for "hidden"
fields, writable fields that are not visible to make-struct. This
allows us to add fields to vtables and not break existing make-struct
invocations.
(scm_struct_ref, scm_struct_set_x): Always get struct length from the
vtable. Support hidden fields.
* libguile/goops.c (scm_class_hidden, scm_class_protected_hidden): New
slot classes, to correspond to the new vtable slots.
(scm_sys_prep_layout_x): Turn hidden slots into 'h'.
(build_class_class_slots): Reorder the class slots to account for
vtable fields coming out of negative-land, for name as a vtable slot,
and for hidden fields.
(create_standard_classes): Define <hidden-slot> and
<protected-hidden-slot>.
Clean up struct.h.
* libguile/struct.h: Lay things out cleaner. There are no more hidden
(negative) words. Names are nicer. The exposition is nicer. But the
basics are the same. The incompatibilities are that <vtable> has more
slots now, and that scm_alloc_struct's signature has changed. The
former is ameliorated by the "hidden" slots mentioned before, and the
latter, well, it was always a very internal thing...
(scm_t_struct_finalize): New type, a finalizer function to be run when
instances of a vtable are collected.
(scm_t_struct_free): Removed, structs' data is managed by the GC now,
and not freed by vtable functions.
* libguile/struct.c: (scm_vtable_p): Now we keep flags on
vtable-vtables, so this check is cheaper.
(scm_alloc_struct): No hidden words. Yippee.
(struct_finalizer_trampoline): Entersify.
(scm_make_struct): No need to babysit extra words, though now we have
to babysit flags. Propagate the vtable, applicable, and setter flags
appropriately.
(scm_make_vtable_vtable): Update for new simplicity.
(scm_print_struct): A better printer.
(scm_init_struct): Define <applicable-struct-vtable>, a magical vtable
like CL's funcallable-standard-class. Also define
<applicable-struct-with-setter-vtable>.
Remove foreign object implementation.
* libguile/goops.h:
* libguile/goops.c (scm_make_foreign_object, scm_make_class)
(scm_add_slot, scm_wrap_object, scm_wrap_component): Remove, these
were undocumented and unworking.
Clean up goops.h, a little.
* libguile/goops.h:
* libguile/goops.c: Also clean up.
* module/oop/goops/dispatch.scm (hashset-index): Adapt for new hashset
index.
2009-11-03 23:59:51 +01:00
|
|
|
|
SCM_STRUCT_DATA (old)[scm_vtable_index_self] = SCM_UNPACK (old);
|
2009-10-23 14:00:19 -04:00
|
|
|
|
SCM_SET_CELL_WORD_0 (new, word0);
|
|
|
|
|
|
SCM_SET_CELL_WORD_1 (new, word1);
|
a very big commit cleaning up structs & goops. also applicable structs.
I tried to split this one, and I know it's a bit disruptive, but this
stuff really is one big cobweb. So instead we'll pretend like these are
separate commits, by separating the changelog.
Applicable struct runtime support.
* libguile/debug.c (scm_procedure_source):
* libguile/eval.c (scm_trampoline_0, scm_trampoline_1)
(scm_trampoline_2):
* libguile/eval.i.c (CEVAL):
* libguile/goops.c (scm_class_of):
* libguile/procprop.c (scm_i_procedure_arity):
* libguile/procs.c (scm_procedure_p, scm_procedure, scm_setter): Allow
for applicable structs. Whee!
* libguile/deprecated.h (scm_vtable_index_vtable): Define as a synonym
for scm_vtable_index_self.
(scm_vtable_index_printer): Alias scm_vtable_index_instance_printer.
(scm_struct_i_free): Alias scm_vtable_index_instance_finalize.
(scm_struct_i_flags): Alias scm_vtable_index_flags.
(SCM_STRUCTF_FLAGS): Be a -1 mask, we have a whole word now.
(SCM_SET_VTABLE_DESTRUCTOR): Implement by hand.
Hidden slots.
* libguile/struct.c (scm_make_struct_layout): Add support for "hidden"
fields, writable fields that are not visible to make-struct. This
allows us to add fields to vtables and not break existing make-struct
invocations.
(scm_struct_ref, scm_struct_set_x): Always get struct length from the
vtable. Support hidden fields.
* libguile/goops.c (scm_class_hidden, scm_class_protected_hidden): New
slot classes, to correspond to the new vtable slots.
(scm_sys_prep_layout_x): Turn hidden slots into 'h'.
(build_class_class_slots): Reorder the class slots to account for
vtable fields coming out of negative-land, for name as a vtable slot,
and for hidden fields.
(create_standard_classes): Define <hidden-slot> and
<protected-hidden-slot>.
Clean up struct.h.
* libguile/struct.h: Lay things out cleaner. There are no more hidden
(negative) words. Names are nicer. The exposition is nicer. But the
basics are the same. The incompatibilities are that <vtable> has more
slots now, and that scm_alloc_struct's signature has changed. The
former is ameliorated by the "hidden" slots mentioned before, and the
latter, well, it was always a very internal thing...
(scm_t_struct_finalize): New type, a finalizer function to be run when
instances of a vtable are collected.
(scm_t_struct_free): Removed, structs' data is managed by the GC now,
and not freed by vtable functions.
* libguile/struct.c: (scm_vtable_p): Now we keep flags on
vtable-vtables, so this check is cheaper.
(scm_alloc_struct): No hidden words. Yippee.
(struct_finalizer_trampoline): Entersify.
(scm_make_struct): No need to babysit extra words, though now we have
to babysit flags. Propagate the vtable, applicable, and setter flags
appropriately.
(scm_make_vtable_vtable): Update for new simplicity.
(scm_print_struct): A better printer.
(scm_init_struct): Define <applicable-struct-vtable>, a magical vtable
like CL's funcallable-standard-class. Also define
<applicable-struct-with-setter-vtable>.
Remove foreign object implementation.
* libguile/goops.h:
* libguile/goops.c (scm_make_foreign_object, scm_make_class)
(scm_add_slot, scm_wrap_object, scm_wrap_component): Remove, these
were undocumented and unworking.
Clean up goops.h, a little.
* libguile/goops.h:
* libguile/goops.c: Also clean up.
* module/oop/goops/dispatch.scm (hashset-index): Adapt for new hashset
index.
2009-11-03 23:59:51 +01:00
|
|
|
|
SCM_STRUCT_DATA (new)[scm_vtable_index_self] = SCM_UNPACK (new);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
2005-03-02 20:42:01 +00:00
|
|
|
|
SCM_CRITICAL_SECTION_END;
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
return SCM_UNSPECIFIED;
|
|
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_DEFINE (scm_sys_invalidate_class, "%invalidate-class", 1, 0, 0,
|
|
|
|
|
|
(SCM class),
|
|
|
|
|
|
"")
|
|
|
|
|
|
#define FUNC_NAME s_scm_sys_invalidate_class
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_VALIDATE_CLASS (1, class);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
SCM_CLEAR_CLASS_FLAGS (class, SCM_CLASSF_GOOPS_VALID);
|
|
|
|
|
|
return SCM_UNSPECIFIED;
|
|
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
|
|
|
|
|
/* When instances change class, they finally get a new body, but
|
|
|
|
|
|
* before that, they go through purgatory in hell. Odd as it may
|
|
|
|
|
|
* seem, this data structure saves us from eternal suffering in
|
|
|
|
|
|
* infinite recursions.
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
2001-06-14 19:50:43 +00:00
|
|
|
|
static scm_t_bits **hell;
|
2001-05-26 20:51:22 +00:00
|
|
|
|
static long n_hell = 1; /* one place for the evil one himself */
|
|
|
|
|
|
static long hell_size = 4;
|
2002-10-27 20:13:24 +00:00
|
|
|
|
static SCM hell_mutex;
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2001-05-26 20:51:22 +00:00
|
|
|
|
static long
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
burnin (SCM o)
|
|
|
|
|
|
{
|
2001-05-26 20:51:22 +00:00
|
|
|
|
long i;
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
for (i = 1; i < n_hell; ++i)
|
2001-07-18 10:14:29 +00:00
|
|
|
|
if (SCM_STRUCT_DATA (o) == hell[i])
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
return i;
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
|
go_to_hell (void *o)
|
|
|
|
|
|
{
|
2011-05-13 12:24:04 +02:00
|
|
|
|
SCM obj = *(SCM*)o;
|
2002-10-27 20:13:24 +00:00
|
|
|
|
scm_lock_mutex (hell_mutex);
|
2008-08-16 02:18:51 -03:00
|
|
|
|
if (n_hell >= hell_size)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2008-08-16 02:18:51 -03:00
|
|
|
|
hell_size *= 2;
|
2008-08-18 11:02:43 -03:00
|
|
|
|
hell = scm_realloc (hell, hell_size * sizeof(*hell));
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
2001-07-18 10:14:29 +00:00
|
|
|
|
hell[n_hell++] = SCM_STRUCT_DATA (obj);
|
2002-10-27 20:13:24 +00:00
|
|
|
|
scm_unlock_mutex (hell_mutex);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
|
go_to_heaven (void *o)
|
|
|
|
|
|
{
|
2011-05-13 12:24:04 +02:00
|
|
|
|
SCM obj = *(SCM*)o;
|
2002-10-27 20:13:24 +00:00
|
|
|
|
scm_lock_mutex (hell_mutex);
|
2011-05-13 12:24:04 +02:00
|
|
|
|
hell[burnin (obj)] = hell[--n_hell];
|
2002-10-27 20:13:24 +00:00
|
|
|
|
scm_unlock_mutex (hell_mutex);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2001-07-18 10:14:29 +00:00
|
|
|
|
|
|
|
|
|
|
SCM_SYMBOL (scm_sym_change_class, "change-class");
|
|
|
|
|
|
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
static SCM
|
2011-05-13 12:24:04 +02:00
|
|
|
|
purgatory (SCM obj, SCM new_class)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2011-05-13 12:24:04 +02:00
|
|
|
|
return scm_call_2 (SCM_VARIABLE_REF (var_change_class), obj, new_class);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2003-01-10 12:58:40 +00:00
|
|
|
|
/* This function calls the generic function change-class for all
|
|
|
|
|
|
* instances which aren't currently undergoing class change.
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
void
|
2001-06-07 21:12:19 +00:00
|
|
|
|
scm_change_object_class (SCM obj, SCM old_class SCM_UNUSED, SCM new_class)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
|
|
|
|
|
if (!burnin (obj))
|
2011-05-13 12:24:04 +02:00
|
|
|
|
{
|
|
|
|
|
|
scm_dynwind_begin (SCM_F_DYNWIND_REWINDABLE);
|
|
|
|
|
|
scm_dynwind_rewind_handler (go_to_hell, &obj, SCM_F_WIND_EXPLICITLY);
|
|
|
|
|
|
scm_dynwind_unwind_handler (go_to_heaven, &obj, SCM_F_WIND_EXPLICITLY);
|
|
|
|
|
|
purgatory (obj, new_class);
|
|
|
|
|
|
scm_dynwind_end ();
|
|
|
|
|
|
}
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
|
|
|
|
*
|
2002-04-22 17:46:06 +00:00
|
|
|
|
* GGGG FFFFF
|
|
|
|
|
|
* G F
|
|
|
|
|
|
* G GG FFF
|
|
|
|
|
|
* G G F
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
* GGG E N E R I C F U N C T I O N S
|
|
|
|
|
|
*
|
|
|
|
|
|
* This implementation provides
|
|
|
|
|
|
* - generic functions (with class specializers)
|
|
|
|
|
|
* - multi-methods
|
2002-04-22 17:46:06 +00:00
|
|
|
|
* - next-method
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
* - a hard-coded MOP for standard gf, which can be overloaded for non-std gf
|
|
|
|
|
|
*
|
|
|
|
|
|
******************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
SCM_KEYWORD (k_name, "name");
|
2003-04-13 17:46:54 +00:00
|
|
|
|
SCM_GLOBAL_SYMBOL (scm_sym_args, "args");
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_DEFINE (scm_generic_capability_p, "generic-capability?", 1, 0, 0,
|
|
|
|
|
|
(SCM proc),
|
|
|
|
|
|
"")
|
|
|
|
|
|
#define FUNC_NAME s_scm_generic_capability_p
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2004-07-06 10:59:25 +00:00
|
|
|
|
SCM_ASSERT (scm_is_true (scm_procedure_p (proc)),
|
2000-12-16 20:25:08 +00:00
|
|
|
|
proc, SCM_ARG1, FUNC_NAME);
|
move subr implementation details to gsubr.[ch]
* libguile/procs.h: Move subr macros to gsubr.h.
* libguile/procs.c (scm_c_make_subr, scm_c_make_subr_with_generic)
(scm_c_define_subr, scm_c_define_subr_with_generic): Remove these,
because they deal in subr types, and now there is only one subr type.
The body of this code is now in gsubr.c.
* libguile/deprecated.h (scm_subr_p): Remove from procs.[ch] and define
as a deprecated macro. Only used internally, but who knows who's out
there.
* libguile/goops.c (scm_generic_capability_p)
(scm_enable_primitive_generic_x, scm_set_primitive_generic_x)
(scm_primitive_generic_generic): Use the new SCM_PRIMITIVE_GENERIC_P
macro instead of calling scm_subr_p.
* libguile/gsubr.h (SCM_PRIMITIVE_P, SCM_PRIMITIVE_GENERIC_P): New
macros, to replace scm_subr_p and hacky checking for generic
capability.
(SCM_SUBR_META_INFO, SCM_SUBR_NAME, SCM_SUBRF, SCM_SUBR_PROPS)
(SCM_SUBR_GENERIC, SCM_SET_SUBR_GENERIC, SCM_SET_SUBR_GENERIC_LOC)
(SCM_SUBR_ARITY_TO_TYPE): Moved here from procs.h.
* libguile/gsubr.c (create_gsubr): Inline the
scm_c_make_subr definition here, and work for generics too. Removed a
scm_remember_upto_here_1 that was added earlier in the year when
meta_info was not being traced by the GC. Adapt callers.
2010-01-05 16:15:14 +01:00
|
|
|
|
return (SCM_PRIMITIVE_GENERIC_P (proc) ? SCM_BOOL_T : SCM_BOOL_F);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_DEFINE (scm_enable_primitive_generic_x, "enable-primitive-generic!", 0, 0, 1,
|
|
|
|
|
|
(SCM subrs),
|
|
|
|
|
|
"")
|
|
|
|
|
|
#define FUNC_NAME s_scm_enable_primitive_generic_x
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2001-07-18 10:14:29 +00:00
|
|
|
|
SCM_VALIDATE_REST_ARGUMENT (subrs);
|
2004-09-22 17:41:37 +00:00
|
|
|
|
while (!scm_is_null (subrs))
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
|
|
|
|
|
SCM subr = SCM_CAR (subrs);
|
move subr implementation details to gsubr.[ch]
* libguile/procs.h: Move subr macros to gsubr.h.
* libguile/procs.c (scm_c_make_subr, scm_c_make_subr_with_generic)
(scm_c_define_subr, scm_c_define_subr_with_generic): Remove these,
because they deal in subr types, and now there is only one subr type.
The body of this code is now in gsubr.c.
* libguile/deprecated.h (scm_subr_p): Remove from procs.[ch] and define
as a deprecated macro. Only used internally, but who knows who's out
there.
* libguile/goops.c (scm_generic_capability_p)
(scm_enable_primitive_generic_x, scm_set_primitive_generic_x)
(scm_primitive_generic_generic): Use the new SCM_PRIMITIVE_GENERIC_P
macro instead of calling scm_subr_p.
* libguile/gsubr.h (SCM_PRIMITIVE_P, SCM_PRIMITIVE_GENERIC_P): New
macros, to replace scm_subr_p and hacky checking for generic
capability.
(SCM_SUBR_META_INFO, SCM_SUBR_NAME, SCM_SUBRF, SCM_SUBR_PROPS)
(SCM_SUBR_GENERIC, SCM_SET_SUBR_GENERIC, SCM_SET_SUBR_GENERIC_LOC)
(SCM_SUBR_ARITY_TO_TYPE): Moved here from procs.h.
* libguile/gsubr.c (create_gsubr): Inline the
scm_c_make_subr definition here, and work for generics too. Removed a
scm_remember_upto_here_1 that was added earlier in the year when
meta_info was not being traced by the GC. Adapt callers.
2010-01-05 16:15:14 +01:00
|
|
|
|
SCM_ASSERT (SCM_PRIMITIVE_GENERIC_P (subr), subr, SCM_ARGn, FUNC_NAME);
|
foreign.h presents a more pointer-centric interface
* libguile/foreign.c:
* libguile/foreign.h: Rework interface to be more pointer-centric.
Details are:
(SCM_FOREIGN_TYPE_STRUCT, SCM_FOREIGN_TYPE_POINTER): Removed; now the
pointer in a foreign is first-class. If it points to a native type
like uint32, then it still has a tag; but if it points to something
else, like a struct or a pointer or something, then its type is VOID
(i.e., void*).
(SCM_FOREIGN_POINTER): Rename from SCM_FOREIGN_OBJECT.
(SCM_FOREIGN_VALUE_REF, SCM_FOREIGN_VALUE_SET): Rename from
SCM_FOREIGN_OBJECT_REF and SCM_FOREIGN_OBJECT_SET, to indicate that
they only work with value types.
(SCM_FOREIGN_HAS_FINALIZER): Reserve a bit to indicate if the foreign
pointer in question has a finalizer registered.
(SCM_FOREIGN_LEN): For void* pointers, optionally store the length in
bytes of the associated memory region.
(SCM_FOREIGN_VALUE_P): Rename from SCM_FOREIGN_SIMPLE_P.
(SCM_VALIDATE_FOREIGN_VALUE): Rename from SCM_VALIDATE_FOREIGN_SIMPLE.
(scm_take_foreign_pointer): Rename from scm_c_take_foreign. Remove
scm_c_from_foreign.
(scm_foreign_type): New accessor.
(scm_foreign_ref, scm_foreign_set_x): Take some optional args, used
when dereferencing void pointers.
* libguile/dynl.h:
* libguile/dynl.c (scm_dynamic_pointer): New function, used by
scm_dynamic_func. Adapt code to foreign.h changes.
* libguile/goops.c (scm_enable_primitive_generic_x)
(scm_set_primitive_generic_x): Use the SCM_SET_SUBR_GENERIC macro.
* libguile/gsubr.c (create_gsubr): Adapt to API change.
* libguile/gsubr.h (SCM_SUBRF, SCM_SUBR_GENERIC): Store the pointer
directly, not indirected.
* libguile/snarf.h (SCM_DEFINE, SCM_IMMUTABLE_FOREIGN): Store subr
pointers directly. Adapt to SCM_FOREIGN_TYPE_VOID change.
* libguile/vm-i-system.c (subr-call): Access the void* directly.
2010-01-18 11:42:35 +01:00
|
|
|
|
SCM_SET_SUBR_GENERIC (subr,
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
scm_make (scm_list_3 (class_generic,
|
foreign.h presents a more pointer-centric interface
* libguile/foreign.c:
* libguile/foreign.h: Rework interface to be more pointer-centric.
Details are:
(SCM_FOREIGN_TYPE_STRUCT, SCM_FOREIGN_TYPE_POINTER): Removed; now the
pointer in a foreign is first-class. If it points to a native type
like uint32, then it still has a tag; but if it points to something
else, like a struct or a pointer or something, then its type is VOID
(i.e., void*).
(SCM_FOREIGN_POINTER): Rename from SCM_FOREIGN_OBJECT.
(SCM_FOREIGN_VALUE_REF, SCM_FOREIGN_VALUE_SET): Rename from
SCM_FOREIGN_OBJECT_REF and SCM_FOREIGN_OBJECT_SET, to indicate that
they only work with value types.
(SCM_FOREIGN_HAS_FINALIZER): Reserve a bit to indicate if the foreign
pointer in question has a finalizer registered.
(SCM_FOREIGN_LEN): For void* pointers, optionally store the length in
bytes of the associated memory region.
(SCM_FOREIGN_VALUE_P): Rename from SCM_FOREIGN_SIMPLE_P.
(SCM_VALIDATE_FOREIGN_VALUE): Rename from SCM_VALIDATE_FOREIGN_SIMPLE.
(scm_take_foreign_pointer): Rename from scm_c_take_foreign. Remove
scm_c_from_foreign.
(scm_foreign_type): New accessor.
(scm_foreign_ref, scm_foreign_set_x): Take some optional args, used
when dereferencing void pointers.
* libguile/dynl.h:
* libguile/dynl.c (scm_dynamic_pointer): New function, used by
scm_dynamic_func. Adapt code to foreign.h changes.
* libguile/goops.c (scm_enable_primitive_generic_x)
(scm_set_primitive_generic_x): Use the SCM_SET_SUBR_GENERIC macro.
* libguile/gsubr.c (create_gsubr): Adapt to API change.
* libguile/gsubr.h (SCM_SUBRF, SCM_SUBR_GENERIC): Store the pointer
directly, not indirected.
* libguile/snarf.h (SCM_DEFINE, SCM_IMMUTABLE_FOREIGN): Store subr
pointers directly. Adapt to SCM_FOREIGN_TYPE_VOID change.
* libguile/vm-i-system.c (subr-call): Access the void* directly.
2010-01-18 11:42:35 +01:00
|
|
|
|
k_name,
|
|
|
|
|
|
SCM_SUBR_NAME (subr))));
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
subrs = SCM_CDR (subrs);
|
|
|
|
|
|
}
|
|
|
|
|
|
return SCM_UNSPECIFIED;
|
|
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2009-11-08 11:49:06 +01:00
|
|
|
|
SCM_DEFINE (scm_set_primitive_generic_x, "set-primitive-generic!", 2, 0, 0,
|
|
|
|
|
|
(SCM subr, SCM generic),
|
|
|
|
|
|
"")
|
|
|
|
|
|
#define FUNC_NAME s_scm_set_primitive_generic_x
|
|
|
|
|
|
{
|
move subr implementation details to gsubr.[ch]
* libguile/procs.h: Move subr macros to gsubr.h.
* libguile/procs.c (scm_c_make_subr, scm_c_make_subr_with_generic)
(scm_c_define_subr, scm_c_define_subr_with_generic): Remove these,
because they deal in subr types, and now there is only one subr type.
The body of this code is now in gsubr.c.
* libguile/deprecated.h (scm_subr_p): Remove from procs.[ch] and define
as a deprecated macro. Only used internally, but who knows who's out
there.
* libguile/goops.c (scm_generic_capability_p)
(scm_enable_primitive_generic_x, scm_set_primitive_generic_x)
(scm_primitive_generic_generic): Use the new SCM_PRIMITIVE_GENERIC_P
macro instead of calling scm_subr_p.
* libguile/gsubr.h (SCM_PRIMITIVE_P, SCM_PRIMITIVE_GENERIC_P): New
macros, to replace scm_subr_p and hacky checking for generic
capability.
(SCM_SUBR_META_INFO, SCM_SUBR_NAME, SCM_SUBRF, SCM_SUBR_PROPS)
(SCM_SUBR_GENERIC, SCM_SET_SUBR_GENERIC, SCM_SET_SUBR_GENERIC_LOC)
(SCM_SUBR_ARITY_TO_TYPE): Moved here from procs.h.
* libguile/gsubr.c (create_gsubr): Inline the
scm_c_make_subr definition here, and work for generics too. Removed a
scm_remember_upto_here_1 that was added earlier in the year when
meta_info was not being traced by the GC. Adapt callers.
2010-01-05 16:15:14 +01:00
|
|
|
|
SCM_ASSERT (SCM_PRIMITIVE_GENERIC_P (subr), subr, SCM_ARG1, FUNC_NAME);
|
2009-11-08 11:49:06 +01:00
|
|
|
|
SCM_ASSERT (SCM_PUREGENERICP (generic), generic, SCM_ARG2, FUNC_NAME);
|
foreign.h presents a more pointer-centric interface
* libguile/foreign.c:
* libguile/foreign.h: Rework interface to be more pointer-centric.
Details are:
(SCM_FOREIGN_TYPE_STRUCT, SCM_FOREIGN_TYPE_POINTER): Removed; now the
pointer in a foreign is first-class. If it points to a native type
like uint32, then it still has a tag; but if it points to something
else, like a struct or a pointer or something, then its type is VOID
(i.e., void*).
(SCM_FOREIGN_POINTER): Rename from SCM_FOREIGN_OBJECT.
(SCM_FOREIGN_VALUE_REF, SCM_FOREIGN_VALUE_SET): Rename from
SCM_FOREIGN_OBJECT_REF and SCM_FOREIGN_OBJECT_SET, to indicate that
they only work with value types.
(SCM_FOREIGN_HAS_FINALIZER): Reserve a bit to indicate if the foreign
pointer in question has a finalizer registered.
(SCM_FOREIGN_LEN): For void* pointers, optionally store the length in
bytes of the associated memory region.
(SCM_FOREIGN_VALUE_P): Rename from SCM_FOREIGN_SIMPLE_P.
(SCM_VALIDATE_FOREIGN_VALUE): Rename from SCM_VALIDATE_FOREIGN_SIMPLE.
(scm_take_foreign_pointer): Rename from scm_c_take_foreign. Remove
scm_c_from_foreign.
(scm_foreign_type): New accessor.
(scm_foreign_ref, scm_foreign_set_x): Take some optional args, used
when dereferencing void pointers.
* libguile/dynl.h:
* libguile/dynl.c (scm_dynamic_pointer): New function, used by
scm_dynamic_func. Adapt code to foreign.h changes.
* libguile/goops.c (scm_enable_primitive_generic_x)
(scm_set_primitive_generic_x): Use the SCM_SET_SUBR_GENERIC macro.
* libguile/gsubr.c (create_gsubr): Adapt to API change.
* libguile/gsubr.h (SCM_SUBRF, SCM_SUBR_GENERIC): Store the pointer
directly, not indirected.
* libguile/snarf.h (SCM_DEFINE, SCM_IMMUTABLE_FOREIGN): Store subr
pointers directly. Adapt to SCM_FOREIGN_TYPE_VOID change.
* libguile/vm-i-system.c (subr-call): Access the void* directly.
2010-01-18 11:42:35 +01:00
|
|
|
|
SCM_SET_SUBR_GENERIC (subr, generic);
|
2009-11-08 11:49:06 +01:00
|
|
|
|
return SCM_UNSPECIFIED;
|
|
|
|
|
|
}
|
|
|
|
|
|
#undef FUNC_NAME
|
|
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_DEFINE (scm_primitive_generic_generic, "primitive-generic-generic", 1, 0, 0,
|
|
|
|
|
|
(SCM subr),
|
|
|
|
|
|
"")
|
|
|
|
|
|
#define FUNC_NAME s_scm_primitive_generic_generic
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
move subr implementation details to gsubr.[ch]
* libguile/procs.h: Move subr macros to gsubr.h.
* libguile/procs.c (scm_c_make_subr, scm_c_make_subr_with_generic)
(scm_c_define_subr, scm_c_define_subr_with_generic): Remove these,
because they deal in subr types, and now there is only one subr type.
The body of this code is now in gsubr.c.
* libguile/deprecated.h (scm_subr_p): Remove from procs.[ch] and define
as a deprecated macro. Only used internally, but who knows who's out
there.
* libguile/goops.c (scm_generic_capability_p)
(scm_enable_primitive_generic_x, scm_set_primitive_generic_x)
(scm_primitive_generic_generic): Use the new SCM_PRIMITIVE_GENERIC_P
macro instead of calling scm_subr_p.
* libguile/gsubr.h (SCM_PRIMITIVE_P, SCM_PRIMITIVE_GENERIC_P): New
macros, to replace scm_subr_p and hacky checking for generic
capability.
(SCM_SUBR_META_INFO, SCM_SUBR_NAME, SCM_SUBRF, SCM_SUBR_PROPS)
(SCM_SUBR_GENERIC, SCM_SET_SUBR_GENERIC, SCM_SET_SUBR_GENERIC_LOC)
(SCM_SUBR_ARITY_TO_TYPE): Moved here from procs.h.
* libguile/gsubr.c (create_gsubr): Inline the
scm_c_make_subr definition here, and work for generics too. Removed a
scm_remember_upto_here_1 that was added earlier in the year when
meta_info was not being traced by the GC. Adapt callers.
2010-01-05 16:15:14 +01:00
|
|
|
|
if (SCM_PRIMITIVE_GENERIC_P (subr))
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2011-05-13 12:51:56 +02:00
|
|
|
|
if (!SCM_UNPACK (*SCM_SUBR_GENERIC (subr)))
|
2003-03-06 12:51:57 +00:00
|
|
|
|
scm_enable_primitive_generic_x (scm_list_1 (subr));
|
|
|
|
|
|
return *SCM_SUBR_GENERIC (subr);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
2001-03-04 17:09:34 +00:00
|
|
|
|
SCM_WRONG_TYPE_ARG (SCM_ARG1, subr);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2003-03-06 12:51:57 +00:00
|
|
|
|
typedef struct t_extension {
|
|
|
|
|
|
struct t_extension *next;
|
|
|
|
|
|
SCM extended;
|
|
|
|
|
|
SCM extension;
|
|
|
|
|
|
} t_extension;
|
|
|
|
|
|
|
2009-01-18 16:30:36 +01:00
|
|
|
|
|
|
|
|
|
|
/* Hint for `scm_gc_malloc ()' et al. when allocating `t_extension'
|
|
|
|
|
|
objects. */
|
|
|
|
|
|
static const char extension_gc_hint[] = "GOOPS extension";
|
|
|
|
|
|
|
2003-03-06 12:51:57 +00:00
|
|
|
|
static t_extension *extensions = 0;
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
|
scm_c_extend_primitive_generic (SCM extended, SCM extension)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (goops_loaded_p)
|
|
|
|
|
|
{
|
|
|
|
|
|
SCM gf, gext;
|
2011-05-13 12:51:56 +02:00
|
|
|
|
if (!SCM_UNPACK (*SCM_SUBR_GENERIC (extended)))
|
2003-03-06 12:51:57 +00:00
|
|
|
|
scm_enable_primitive_generic_x (scm_list_1 (extended));
|
|
|
|
|
|
gf = *SCM_SUBR_GENERIC (extended);
|
|
|
|
|
|
gext = scm_call_2 (SCM_VARIABLE_REF (scm_var_make_extended_generic),
|
|
|
|
|
|
gf,
|
2009-06-19 11:20:34 +02:00
|
|
|
|
SCM_SUBR_NAME (extension));
|
2009-01-20 23:29:09 +01:00
|
|
|
|
SCM_SET_SUBR_GENERIC (extension, gext);
|
2003-03-06 12:51:57 +00:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2009-01-18 16:30:36 +01:00
|
|
|
|
t_extension *e = scm_gc_malloc (sizeof (t_extension),
|
|
|
|
|
|
extension_gc_hint);
|
2003-03-06 12:51:57 +00:00
|
|
|
|
t_extension **loc = &extensions;
|
|
|
|
|
|
/* Make sure that extensions are placed before their own
|
|
|
|
|
|
* extensions in the extensions list. O(N^2) algorithm, but
|
|
|
|
|
|
* extensions of primitive generics are rare.
|
|
|
|
|
|
*/
|
scm_is_eq for SCM vals, not == or !=
* libguile/bytevectors.c (scm_make_bytevector, STRING_TO_UTF)
(UTF_TO_STRING):
* libguile/continuations.c (scm_i_check_continuation):
* libguile/expand.h (SCM_EXPANDED_P):
* libguile/fluids.c (scm_i_make_with_fluids):
* libguile/generalized-vectors.c (scm_make_generalized_vector):
* libguile/goops.c (SCM_GOOPS_UNBOUNDP, slot_definition_using_name):
(scm_c_extend_primitive_generic, more_specificp, scm_make)
* libguile/i18n.c (SCM_VALIDATE_OPTIONAL_LOCALE_COPY):
(scm_locale_string_to_integer)
* libguile/modules.c (resolve_duplicate_binding):
(scm_module_reverse_lookup)
* libguile/posix.c (scm_to_resource):
* libguile/r6rs-ports.c (scm_put_bytevector):
* libguile/socket.c (scm_connect, scm_bind, scm_sendto
* libguile/stacks.c (find_prompt):
* libguile/variable.c (scm_variable_ref, scm_variable_bound_p):
* libguile/vm-engine.h (ASSERT_BOUND_VARIABLE, ASSERT_BOUND)
* libguile/vm-i-system.c (VARIABLE_BOUNDP, local_bound)
(long_local_bound, fluid_ref): Use scm_is_eq to compare, not == / !=.
2011-05-13 12:42:01 +02:00
|
|
|
|
while (*loc && !scm_is_eq (extension, (*loc)->extended))
|
2003-03-06 12:51:57 +00:00
|
|
|
|
loc = &(*loc)->next;
|
|
|
|
|
|
e->next = *loc;
|
|
|
|
|
|
e->extended = extended;
|
|
|
|
|
|
e->extension = extension;
|
|
|
|
|
|
*loc = e;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
|
setup_extended_primitive_generics ()
|
|
|
|
|
|
{
|
|
|
|
|
|
while (extensions)
|
|
|
|
|
|
{
|
|
|
|
|
|
t_extension *e = extensions;
|
|
|
|
|
|
scm_c_extend_primitive_generic (e->extended, e->extension);
|
|
|
|
|
|
extensions = e->next;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
scm_wta_* procedures replace SCM_WTA_* macros
* libguile/__scm.h: Move all the SCM_WTA and SCM_GASSERT macros out of
here. Also remove the scm_call_generic declarations.
* libguile/deprecated.h (SCM_WTA_DISPATCH_0, SCM_WTA_DISPATCH_1):
(SCM_WTA_DISPATCH_2, SCM_WTA_DISPATCH_N): Deprecate. See below for
their replacements.
(SCM_GASSERT0, SCM_GASSERT1, SCM_GASSERT2, SCM_GASSERTn): Deprecate
these too.
(SCM_WTA_DISPATCH_1_SUBR): Deprecate this strange thing.
(scm_call_generic_0, scm_call_generic_1, scm_call_generic_2):
(scm_call_generic_3, scm_apply_generic): Remove, indicating their
replacements.
* libguile/print.c (iprin1):
* libguile/eq.c (scm_equal_p): Use scm_call_2 instead of
scm_call_generic_2.
* libguile/goops.h:
* libguile/goops.c: Remove scm_{call,apply}_generic definitions.
(scm_wta_dispatch_0, scm_wta_dispatch_1, scm_wta_dispatch_2):
(scm_wta_dispatch_n): New procedures, replacing the SCM_WTA macros.
* libguile/numbers.c (scm_lcm):
* libguile/procs.c (scm_setter): Remove uses of SCM_GASSERT.
* libguile/numbers.c (scm_lcm):
* libguile/procs.c (scm_setter):
* libguile/vectors.c: Use the procedural scm_wta routines instead of the
SCM_WTA macros.
2011-05-15 15:18:18 +02:00
|
|
|
|
/* Dirk:FIXME:: In all of these scm_wta_dispatch_* routines it is
|
|
|
|
|
|
* assumed that 'gf' is zero if uninitialized. It would be cleaner if
|
|
|
|
|
|
* some valid SCM value like SCM_BOOL_F or SCM_UNDEFINED were chosen.
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
SCM
|
|
|
|
|
|
scm_wta_dispatch_0 (SCM gf, const char *subr)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!SCM_UNPACK (gf))
|
|
|
|
|
|
scm_error_num_args_subr (subr);
|
|
|
|
|
|
|
|
|
|
|
|
return scm_call_0 (gf);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SCM
|
|
|
|
|
|
scm_wta_dispatch_1 (SCM gf, SCM a1, int pos, const char *subr)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!SCM_UNPACK (gf))
|
|
|
|
|
|
scm_wrong_type_arg (subr, pos, a1);
|
|
|
|
|
|
|
|
|
|
|
|
return scm_call_1 (gf, a1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SCM
|
|
|
|
|
|
scm_wta_dispatch_2 (SCM gf, SCM a1, SCM a2, int pos, const char *subr)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!SCM_UNPACK (gf))
|
|
|
|
|
|
scm_wrong_type_arg (subr, pos, (pos == SCM_ARG1) ? a1 : a2);
|
|
|
|
|
|
|
|
|
|
|
|
return scm_call_2 (gf, a1, a2);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SCM
|
|
|
|
|
|
scm_wta_dispatch_n (SCM gf, SCM args, int pos, const char *subr)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!SCM_UNPACK (gf))
|
|
|
|
|
|
scm_wrong_type_arg (subr, pos, scm_list_ref (args, scm_from_int (pos)));
|
|
|
|
|
|
|
|
|
|
|
|
return scm_apply_0 (gf, args);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
/******************************************************************************
|
2002-04-22 17:46:06 +00:00
|
|
|
|
*
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
* Protocol for calling a generic fumction
|
2002-04-22 17:46:06 +00:00
|
|
|
|
* This protocol is roughly equivalent to (parameter are a little bit different
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
* for efficiency reasons):
|
|
|
|
|
|
*
|
|
|
|
|
|
* + apply-generic (gf args)
|
|
|
|
|
|
* + compute-applicable-methods (gf args ...)
|
|
|
|
|
|
* + sort-applicable-methods (methods args)
|
|
|
|
|
|
* + apply-methods (gf methods args)
|
2002-04-22 17:46:06 +00:00
|
|
|
|
*
|
|
|
|
|
|
* apply-methods calls make-next-method to build the "continuation" of a a
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
* method. Applying a next-method will call apply-next-method which in
|
|
|
|
|
|
* turn will call apply again to call effectively the following method.
|
|
|
|
|
|
*
|
|
|
|
|
|
******************************************************************************/
|
|
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_DEFINE (scm_make, "make", 0, 0, 1,
|
|
|
|
|
|
(SCM args),
|
2001-02-24 23:46:04 +00:00
|
|
|
|
"Make a new object. @var{args} must contain the class and\n"
|
(scm_sys_initialize_object, scm_instance_p, scm_class_name,
scm_class_precedence_list, scm_class_slots, scm_class_environment,
scm_generic_function_name, scm_generic_function_methods,
scm_method_generic_function, scm_method_specializers,
scm_method_procedure, scm_make_unbound, scm_unbound_p,
scm_assert_bound, scm_at_assert_bound_ref, scm_sys_fast_slot_ref,
scm_sys_fast_slot_set_x, scm_slot_ref, scm_slot_set_x,
_scm_slot_bound_p, scm_slots_exists_p, scm_sys_allocate_instance,
scm_make, scm_pure_generic_p, scm_class_direct_supers,
scm_class_direct_slots, scm_class_direct_subclasses,
scm_class_direct_methods, scm_accessor_method_slot_definition,
scm_sys_goops_loaded): Added docstrings.
2001-02-16 14:59:22 +00:00
|
|
|
|
"all necessary initialization information.")
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#define FUNC_NAME s_scm_make
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2015-01-04 15:52:12 -05:00
|
|
|
|
return scm_apply_0 (scm_variable_ref (var_make), args);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
|
|
*
|
|
|
|
|
|
* Smob classes
|
|
|
|
|
|
*
|
|
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
static SCM
|
2015-01-07 16:03:09 -05:00
|
|
|
|
make_class_name (const char *prefix, const char *type_name, const char *suffix)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2015-01-07 16:03:09 -05:00
|
|
|
|
if (!type_name)
|
|
|
|
|
|
type_name = "";
|
|
|
|
|
|
return scm_string_to_symbol (scm_string_append
|
|
|
|
|
|
(scm_list_3 (scm_from_utf8_string (prefix),
|
|
|
|
|
|
scm_from_utf8_string (type_name),
|
|
|
|
|
|
scm_from_utf8_string (suffix))));
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SCM
|
2003-10-07 15:58:19 +00:00
|
|
|
|
scm_make_extended_class (char const *type_name, int applicablep)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2015-01-07 16:03:09 -05:00
|
|
|
|
SCM name, meta, supers;
|
|
|
|
|
|
|
|
|
|
|
|
name = make_class_name ("<", type_name, ">");
|
|
|
|
|
|
meta = class_class;
|
|
|
|
|
|
|
|
|
|
|
|
if (applicablep)
|
|
|
|
|
|
supers = scm_list_1 (class_applicable);
|
|
|
|
|
|
else
|
|
|
|
|
|
supers = scm_list_1 (class_top);
|
|
|
|
|
|
|
|
|
|
|
|
return scm_make_standard_class (meta, name, supers, SCM_EOL);
|
2003-03-19 08:57:47 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
|
scm_i_inherit_applicable (SCM c)
|
|
|
|
|
|
{
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
if (!SCM_SUBCLASSP (c, class_applicable))
|
2003-03-19 08:57:47 +00:00
|
|
|
|
{
|
|
|
|
|
|
SCM dsupers = SCM_SLOT (c, scm_si_direct_supers);
|
|
|
|
|
|
SCM cpl = SCM_SLOT (c, scm_si_cpl);
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
/* patch class_applicable into direct-supers */
|
|
|
|
|
|
SCM top = scm_c_memq (class_top, dsupers);
|
2004-07-06 10:59:25 +00:00
|
|
|
|
if (scm_is_false (top))
|
2003-03-19 08:57:47 +00:00
|
|
|
|
dsupers = scm_append (scm_list_2 (dsupers,
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
scm_list_1 (class_applicable)));
|
2003-03-19 08:57:47 +00:00
|
|
|
|
else
|
|
|
|
|
|
{
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
SCM_SETCAR (top, class_applicable);
|
|
|
|
|
|
SCM_SETCDR (top, scm_cons (class_top, SCM_CDR (top)));
|
2003-03-19 08:57:47 +00:00
|
|
|
|
}
|
|
|
|
|
|
SCM_SET_SLOT (c, scm_si_direct_supers, dsupers);
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
/* patch class_applicable into cpl */
|
|
|
|
|
|
top = scm_c_memq (class_top, cpl);
|
2004-07-06 10:59:25 +00:00
|
|
|
|
if (scm_is_false (top))
|
2003-03-19 08:57:47 +00:00
|
|
|
|
abort ();
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
SCM_SETCAR (top, class_applicable);
|
|
|
|
|
|
SCM_SETCDR (top, scm_cons (class_top, SCM_CDR (top)));
|
2003-03-19 08:57:47 +00:00
|
|
|
|
}
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
/* add class to direct-subclasses of class_applicable */
|
|
|
|
|
|
SCM_SET_SLOT (class_applicable,
|
2003-03-19 08:57:47 +00:00
|
|
|
|
scm_si_direct_subclasses,
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
scm_cons (c, SCM_SLOT (class_applicable,
|
2003-03-19 08:57:47 +00:00
|
|
|
|
scm_si_direct_subclasses)));
|
|
|
|
|
|
}
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
|
create_smob_classes (void)
|
|
|
|
|
|
{
|
2001-05-26 20:51:22 +00:00
|
|
|
|
long i;
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2009-01-18 16:42:17 +01:00
|
|
|
|
for (i = 0; i < SCM_I_MAX_SMOB_TYPE_COUNT; ++i)
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
scm_i_smob_class[i] = SCM_BOOL_F;
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < scm_numsmob; ++i)
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
if (scm_is_false (scm_i_smob_class[i]))
|
|
|
|
|
|
scm_i_smob_class[i] = scm_make_extended_class (SCM_SMOBNAME (i),
|
|
|
|
|
|
scm_smobs[i].apply != 0);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
2001-05-26 20:51:22 +00:00
|
|
|
|
scm_make_port_classes (long ptobnum, char *type_name)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2015-01-07 16:03:09 -05:00
|
|
|
|
SCM name, meta, super, supers;
|
|
|
|
|
|
|
|
|
|
|
|
meta = class_class;
|
|
|
|
|
|
|
|
|
|
|
|
name = make_class_name ("<", type_name, "-port>");
|
|
|
|
|
|
supers = scm_list_1 (class_port);
|
|
|
|
|
|
super = scm_make_standard_class (meta, name, supers, SCM_EOL);
|
|
|
|
|
|
|
|
|
|
|
|
name = make_class_name ("<", type_name, "-input-port>");
|
|
|
|
|
|
supers = scm_list_2 (super, class_input_port);
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
scm_i_port_class[SCM_IN_PCLASS_INDEX + ptobnum]
|
2015-01-07 16:03:09 -05:00
|
|
|
|
= scm_make_standard_class (meta, name, supers, SCM_EOL);
|
|
|
|
|
|
|
|
|
|
|
|
name = make_class_name ("<", type_name, "-output-port>");
|
|
|
|
|
|
supers = scm_list_2 (super, class_output_port);
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
scm_i_port_class[SCM_OUT_PCLASS_INDEX + ptobnum]
|
2015-01-07 16:03:09 -05:00
|
|
|
|
= scm_make_standard_class (meta, name, supers, SCM_EOL);
|
|
|
|
|
|
|
|
|
|
|
|
name = make_class_name ("<", type_name, "-input-output-port>");
|
|
|
|
|
|
supers = scm_list_2 (super, class_input_output_port);
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
scm_i_port_class[SCM_INOUT_PCLASS_INDEX + ptobnum]
|
2015-01-07 16:03:09 -05:00
|
|
|
|
= scm_make_standard_class (meta, name, supers, SCM_EOL);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
|
create_port_classes (void)
|
|
|
|
|
|
{
|
2001-05-26 20:51:22 +00:00
|
|
|
|
long i;
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2011-11-07 18:58:01 +01:00
|
|
|
|
for (i = scm_c_num_port_types () - 1; i >= 0; i--)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
scm_make_port_classes (i, SCM_PTOBNAME (i));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
Generics with setters have <applicable-struct-with-setter> layout
* libguile/goops.c (scm_sys_set_object_setter_x): Remove. Instead, we
use slot-set! of 'setter.
(scm_i_define_class_for_vtable): Move lower in the file, and fold in
scm_make_extended_class_from_symbol and make_class_from_symbol.
Properly handle applicable structs with setters.
(scm_class_applicable_struct_with_setter_class): New private capture.
(scm_sys_bless_applicable_struct_vtables_x): Rename to take two
arguments, and bless the second argument as an applicable struct with
setter vtable.
(scm_sys_goops_early_init): Capture setter classes.
* libguile/deprecated.c (SPEC_OF, CPL_OF): Access slots by name, not by
index.
(applicablep, more_specificp): Adapt to use CPL_OF.
(scm_find_method): Access "methods" slot by name.
* libguile/procs.c (scm_setter): Remove special case for generics; if
it's a setter, it will be a normal applicable struct.
* module/oop/goops.scm (<applicable-struct-with-setter-class>)
(<applicable-struct-with-setter>): New classes.
(<generic-with-setter>): Now an instance of the setter metaclass and a
child of the setter class, so that the "setter" slot ends up in the
right place.
(<accessor>, <extended-generic-with-setter>, <extended-accessor>): Be
instances of the setter metaclass.
(<method>, <accessor-method>): Move definitions farther down.
(make): Use slot-set! when initializing setters here.
(initialize): Likewise for <applicable-struct-with-setter>. Remove
specialization for <generic-with-setter>.
2015-01-06 13:41:56 -05:00
|
|
|
|
SCM
|
|
|
|
|
|
scm_i_define_class_for_vtable (SCM vtable)
|
|
|
|
|
|
{
|
|
|
|
|
|
SCM class;
|
|
|
|
|
|
|
|
|
|
|
|
scm_i_pthread_mutex_lock (&scm_i_misc_mutex);
|
|
|
|
|
|
if (scm_is_false (vtable_class_map))
|
|
|
|
|
|
vtable_class_map = scm_c_make_weak_table (0, SCM_WEAK_TABLE_KIND_KEY);
|
|
|
|
|
|
scm_i_pthread_mutex_unlock (&scm_i_misc_mutex);
|
|
|
|
|
|
|
|
|
|
|
|
if (scm_is_false (scm_struct_vtable_p (vtable)))
|
|
|
|
|
|
abort ();
|
|
|
|
|
|
|
|
|
|
|
|
class = scm_weak_table_refq (vtable_class_map, vtable, SCM_BOOL_F);
|
|
|
|
|
|
|
|
|
|
|
|
if (scm_is_false (class))
|
|
|
|
|
|
{
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
if (SCM_UNPACK (class_class))
|
Generics with setters have <applicable-struct-with-setter> layout
* libguile/goops.c (scm_sys_set_object_setter_x): Remove. Instead, we
use slot-set! of 'setter.
(scm_i_define_class_for_vtable): Move lower in the file, and fold in
scm_make_extended_class_from_symbol and make_class_from_symbol.
Properly handle applicable structs with setters.
(scm_class_applicable_struct_with_setter_class): New private capture.
(scm_sys_bless_applicable_struct_vtables_x): Rename to take two
arguments, and bless the second argument as an applicable struct with
setter vtable.
(scm_sys_goops_early_init): Capture setter classes.
* libguile/deprecated.c (SPEC_OF, CPL_OF): Access slots by name, not by
index.
(applicablep, more_specificp): Adapt to use CPL_OF.
(scm_find_method): Access "methods" slot by name.
* libguile/procs.c (scm_setter): Remove special case for generics; if
it's a setter, it will be a normal applicable struct.
* module/oop/goops.scm (<applicable-struct-with-setter-class>)
(<applicable-struct-with-setter>): New classes.
(<generic-with-setter>): Now an instance of the setter metaclass and a
child of the setter class, so that the "setter" slot ends up in the
right place.
(<accessor>, <extended-generic-with-setter>, <extended-accessor>): Be
instances of the setter metaclass.
(<method>, <accessor-method>): Move definitions farther down.
(make): Use slot-set! when initializing setters here.
(initialize): Likewise for <applicable-struct-with-setter>. Remove
specialization for <generic-with-setter>.
2015-01-06 13:41:56 -05:00
|
|
|
|
{
|
|
|
|
|
|
SCM name, meta, supers;
|
|
|
|
|
|
|
|
|
|
|
|
name = SCM_VTABLE_NAME (vtable);
|
|
|
|
|
|
if (scm_is_symbol (name))
|
|
|
|
|
|
name = scm_string_to_symbol
|
|
|
|
|
|
(scm_string_append
|
|
|
|
|
|
(scm_list_3 (scm_from_latin1_string ("<"),
|
|
|
|
|
|
scm_symbol_to_string (name),
|
|
|
|
|
|
scm_from_latin1_string (">"))));
|
|
|
|
|
|
else
|
|
|
|
|
|
name = scm_from_latin1_symbol ("<>");
|
|
|
|
|
|
|
|
|
|
|
|
if (SCM_STRUCT_VTABLE_FLAG_IS_SET (vtable, SCM_VTABLE_FLAG_SETTER))
|
|
|
|
|
|
{
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
meta = class_applicable_struct_with_setter_class;
|
|
|
|
|
|
supers = scm_list_1 (class_applicable_struct_with_setter);
|
Generics with setters have <applicable-struct-with-setter> layout
* libguile/goops.c (scm_sys_set_object_setter_x): Remove. Instead, we
use slot-set! of 'setter.
(scm_i_define_class_for_vtable): Move lower in the file, and fold in
scm_make_extended_class_from_symbol and make_class_from_symbol.
Properly handle applicable structs with setters.
(scm_class_applicable_struct_with_setter_class): New private capture.
(scm_sys_bless_applicable_struct_vtables_x): Rename to take two
arguments, and bless the second argument as an applicable struct with
setter vtable.
(scm_sys_goops_early_init): Capture setter classes.
* libguile/deprecated.c (SPEC_OF, CPL_OF): Access slots by name, not by
index.
(applicablep, more_specificp): Adapt to use CPL_OF.
(scm_find_method): Access "methods" slot by name.
* libguile/procs.c (scm_setter): Remove special case for generics; if
it's a setter, it will be a normal applicable struct.
* module/oop/goops.scm (<applicable-struct-with-setter-class>)
(<applicable-struct-with-setter>): New classes.
(<generic-with-setter>): Now an instance of the setter metaclass and a
child of the setter class, so that the "setter" slot ends up in the
right place.
(<accessor>, <extended-generic-with-setter>, <extended-accessor>): Be
instances of the setter metaclass.
(<method>, <accessor-method>): Move definitions farther down.
(make): Use slot-set! when initializing setters here.
(initialize): Likewise for <applicable-struct-with-setter>. Remove
specialization for <generic-with-setter>.
2015-01-06 13:41:56 -05:00
|
|
|
|
}
|
|
|
|
|
|
else if (SCM_STRUCT_VTABLE_FLAG_IS_SET (vtable,
|
|
|
|
|
|
SCM_VTABLE_FLAG_APPLICABLE))
|
|
|
|
|
|
{
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
meta = class_applicable_struct_class;
|
|
|
|
|
|
supers = scm_list_1 (class_applicable_struct);
|
Generics with setters have <applicable-struct-with-setter> layout
* libguile/goops.c (scm_sys_set_object_setter_x): Remove. Instead, we
use slot-set! of 'setter.
(scm_i_define_class_for_vtable): Move lower in the file, and fold in
scm_make_extended_class_from_symbol and make_class_from_symbol.
Properly handle applicable structs with setters.
(scm_class_applicable_struct_with_setter_class): New private capture.
(scm_sys_bless_applicable_struct_vtables_x): Rename to take two
arguments, and bless the second argument as an applicable struct with
setter vtable.
(scm_sys_goops_early_init): Capture setter classes.
* libguile/deprecated.c (SPEC_OF, CPL_OF): Access slots by name, not by
index.
(applicablep, more_specificp): Adapt to use CPL_OF.
(scm_find_method): Access "methods" slot by name.
* libguile/procs.c (scm_setter): Remove special case for generics; if
it's a setter, it will be a normal applicable struct.
* module/oop/goops.scm (<applicable-struct-with-setter-class>)
(<applicable-struct-with-setter>): New classes.
(<generic-with-setter>): Now an instance of the setter metaclass and a
child of the setter class, so that the "setter" slot ends up in the
right place.
(<accessor>, <extended-generic-with-setter>, <extended-accessor>): Be
instances of the setter metaclass.
(<method>, <accessor-method>): Move definitions farther down.
(make): Use slot-set! when initializing setters here.
(initialize): Likewise for <applicable-struct-with-setter>. Remove
specialization for <generic-with-setter>.
2015-01-06 13:41:56 -05:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
meta = class_class;
|
|
|
|
|
|
supers = scm_list_1 (class_top);
|
Generics with setters have <applicable-struct-with-setter> layout
* libguile/goops.c (scm_sys_set_object_setter_x): Remove. Instead, we
use slot-set! of 'setter.
(scm_i_define_class_for_vtable): Move lower in the file, and fold in
scm_make_extended_class_from_symbol and make_class_from_symbol.
Properly handle applicable structs with setters.
(scm_class_applicable_struct_with_setter_class): New private capture.
(scm_sys_bless_applicable_struct_vtables_x): Rename to take two
arguments, and bless the second argument as an applicable struct with
setter vtable.
(scm_sys_goops_early_init): Capture setter classes.
* libguile/deprecated.c (SPEC_OF, CPL_OF): Access slots by name, not by
index.
(applicablep, more_specificp): Adapt to use CPL_OF.
(scm_find_method): Access "methods" slot by name.
* libguile/procs.c (scm_setter): Remove special case for generics; if
it's a setter, it will be a normal applicable struct.
* module/oop/goops.scm (<applicable-struct-with-setter-class>)
(<applicable-struct-with-setter>): New classes.
(<generic-with-setter>): Now an instance of the setter metaclass and a
child of the setter class, so that the "setter" slot ends up in the
right place.
(<accessor>, <extended-generic-with-setter>, <extended-accessor>): Be
instances of the setter metaclass.
(<method>, <accessor-method>): Move definitions farther down.
(make): Use slot-set! when initializing setters here.
(initialize): Likewise for <applicable-struct-with-setter>. Remove
specialization for <generic-with-setter>.
2015-01-06 13:41:56 -05:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return scm_make_standard_class (meta, name, supers, SCM_EOL);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
/* `create_struct_classes' will fill this in later. */
|
|
|
|
|
|
class = SCM_BOOL_F;
|
|
|
|
|
|
|
|
|
|
|
|
/* Don't worry about races. This only happens when creating a
|
|
|
|
|
|
vtable, which happens by definition in one thread. */
|
|
|
|
|
|
scm_weak_table_putq_x (vtable_class_map, vtable, class);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return class;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
static SCM
|
2003-03-19 08:57:47 +00:00
|
|
|
|
make_struct_class (void *closure SCM_UNUSED,
|
|
|
|
|
|
SCM vtable, SCM data, SCM prev SCM_UNUSED)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2011-05-01 23:00:55 +02:00
|
|
|
|
if (scm_is_false (data))
|
|
|
|
|
|
scm_i_define_class_for_vtable (vtable);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
return SCM_UNSPECIFIED;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
|
create_struct_classes (void)
|
|
|
|
|
|
{
|
2011-05-24 22:52:39 +02:00
|
|
|
|
/* FIXME: take the vtable_class_map while initializing goops? */
|
2011-05-01 23:00:55 +02:00
|
|
|
|
scm_internal_hash_fold (make_struct_class, 0, SCM_BOOL_F,
|
|
|
|
|
|
vtable_class_map);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
|
|
*
|
|
|
|
|
|
* C interface
|
|
|
|
|
|
*
|
|
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
|
scm_load_goops ()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!goops_loaded_p)
|
2001-05-19 00:33:25 +00:00
|
|
|
|
scm_c_resolve_module ("oop goops");
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2001-03-12 14:34:44 +00:00
|
|
|
|
|
2015-01-04 15:52:12 -05:00
|
|
|
|
SCM_KEYWORD (k_setter, "setter");
|
|
|
|
|
|
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
SCM
|
|
|
|
|
|
scm_ensure_accessor (SCM name)
|
|
|
|
|
|
{
|
2012-05-23 12:00:23 +02:00
|
|
|
|
SCM var, gf;
|
|
|
|
|
|
|
|
|
|
|
|
var = scm_module_variable (scm_current_module (), name);
|
|
|
|
|
|
if (SCM_VARIABLEP (var) && !SCM_UNBNDP (SCM_VARIABLE_REF (var)))
|
|
|
|
|
|
gf = SCM_VARIABLE_REF (var);
|
|
|
|
|
|
else
|
|
|
|
|
|
gf = SCM_BOOL_F;
|
|
|
|
|
|
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
if (!SCM_IS_A_P (gf, class_accessor))
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
gf = scm_make (scm_list_3 (class_generic, k_name, name));
|
|
|
|
|
|
gf = scm_make (scm_list_5 (class_accessor,
|
* list.h (scm_list_1, scm_list_2, scm_list_3, scm_list_4, scm_list_5,
scm_list_n): New functions.
(SCM_LIST0, SCM_LIST1, SCM_LIST2, SCM_LIST3, SCM_LIST4, SCM_LIST5,
SCM_LIST6, SCM_LIST7, SCM_LIST8, SCM_LIST9, scm_listify): Deprecated.
(lots of files): Use the new functions.
* goops.c (CALL_GF1, CALL_GF2, CALL_GF3, CALL_GF4): Use scm_call_N.
* strings.c: #include "libguile/deprecation.h".
2001-06-28 01:11:59 +00:00
|
|
|
|
k_name, name, k_setter, gf));
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
2012-05-23 12:00:23 +02:00
|
|
|
|
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
return gf;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef GUILE_DEBUG
|
|
|
|
|
|
/*
|
|
|
|
|
|
* Debugging utilities
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_DEFINE (scm_pure_generic_p, "pure-generic?", 1, 0, 0,
|
|
|
|
|
|
(SCM obj),
|
(scm_sys_initialize_object, scm_instance_p, scm_class_name,
scm_class_precedence_list, scm_class_slots, scm_class_environment,
scm_generic_function_name, scm_generic_function_methods,
scm_method_generic_function, scm_method_specializers,
scm_method_procedure, scm_make_unbound, scm_unbound_p,
scm_assert_bound, scm_at_assert_bound_ref, scm_sys_fast_slot_ref,
scm_sys_fast_slot_set_x, scm_slot_ref, scm_slot_set_x,
_scm_slot_bound_p, scm_slots_exists_p, scm_sys_allocate_instance,
scm_make, scm_pure_generic_p, scm_class_direct_supers,
scm_class_direct_slots, scm_class_direct_subclasses,
scm_class_direct_methods, scm_accessor_method_slot_definition,
scm_sys_goops_loaded): Added docstrings.
2001-02-16 14:59:22 +00:00
|
|
|
|
"Return @code{#t} if @var{obj} is a pure generic.")
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#define FUNC_NAME s_scm_pure_generic_p
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2004-07-06 10:59:25 +00:00
|
|
|
|
return scm_from_bool (SCM_PUREGENERICP (obj));
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
|
|
|
|
|
#endif /* GUILE_DEBUG */
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
* Initialization
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
Generics with setters have <applicable-struct-with-setter> layout
* libguile/goops.c (scm_sys_set_object_setter_x): Remove. Instead, we
use slot-set! of 'setter.
(scm_i_define_class_for_vtable): Move lower in the file, and fold in
scm_make_extended_class_from_symbol and make_class_from_symbol.
Properly handle applicable structs with setters.
(scm_class_applicable_struct_with_setter_class): New private capture.
(scm_sys_bless_applicable_struct_vtables_x): Rename to take two
arguments, and bless the second argument as an applicable struct with
setter vtable.
(scm_sys_goops_early_init): Capture setter classes.
* libguile/deprecated.c (SPEC_OF, CPL_OF): Access slots by name, not by
index.
(applicablep, more_specificp): Adapt to use CPL_OF.
(scm_find_method): Access "methods" slot by name.
* libguile/procs.c (scm_setter): Remove special case for generics; if
it's a setter, it will be a normal applicable struct.
* module/oop/goops.scm (<applicable-struct-with-setter-class>)
(<applicable-struct-with-setter>): New classes.
(<generic-with-setter>): Now an instance of the setter metaclass and a
child of the setter class, so that the "setter" slot ends up in the
right place.
(<accessor>, <extended-generic-with-setter>, <extended-accessor>): Be
instances of the setter metaclass.
(<method>, <accessor-method>): Move definitions farther down.
(make): Use slot-set! when initializing setters here.
(initialize): Likewise for <applicable-struct-with-setter>. Remove
specialization for <generic-with-setter>.
2015-01-06 13:41:56 -05:00
|
|
|
|
SCM_DEFINE (scm_sys_bless_applicable_struct_vtables_x, "%bless-applicable-struct-vtables!", 2, 0, 0,
|
|
|
|
|
|
(SCM applicable, SCM setter),
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
"")
|
Generics with setters have <applicable-struct-with-setter> layout
* libguile/goops.c (scm_sys_set_object_setter_x): Remove. Instead, we
use slot-set! of 'setter.
(scm_i_define_class_for_vtable): Move lower in the file, and fold in
scm_make_extended_class_from_symbol and make_class_from_symbol.
Properly handle applicable structs with setters.
(scm_class_applicable_struct_with_setter_class): New private capture.
(scm_sys_bless_applicable_struct_vtables_x): Rename to take two
arguments, and bless the second argument as an applicable struct with
setter vtable.
(scm_sys_goops_early_init): Capture setter classes.
* libguile/deprecated.c (SPEC_OF, CPL_OF): Access slots by name, not by
index.
(applicablep, more_specificp): Adapt to use CPL_OF.
(scm_find_method): Access "methods" slot by name.
* libguile/procs.c (scm_setter): Remove special case for generics; if
it's a setter, it will be a normal applicable struct.
* module/oop/goops.scm (<applicable-struct-with-setter-class>)
(<applicable-struct-with-setter>): New classes.
(<generic-with-setter>): Now an instance of the setter metaclass and a
child of the setter class, so that the "setter" slot ends up in the
right place.
(<accessor>, <extended-generic-with-setter>, <extended-accessor>): Be
instances of the setter metaclass.
(<method>, <accessor-method>): Move definitions farther down.
(make): Use slot-set! when initializing setters here.
(initialize): Likewise for <applicable-struct-with-setter>. Remove
specialization for <generic-with-setter>.
2015-01-06 13:41:56 -05:00
|
|
|
|
#define FUNC_NAME s_scm_sys_bless_applicable_struct_vtables_x
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
{
|
Generics with setters have <applicable-struct-with-setter> layout
* libguile/goops.c (scm_sys_set_object_setter_x): Remove. Instead, we
use slot-set! of 'setter.
(scm_i_define_class_for_vtable): Move lower in the file, and fold in
scm_make_extended_class_from_symbol and make_class_from_symbol.
Properly handle applicable structs with setters.
(scm_class_applicable_struct_with_setter_class): New private capture.
(scm_sys_bless_applicable_struct_vtables_x): Rename to take two
arguments, and bless the second argument as an applicable struct with
setter vtable.
(scm_sys_goops_early_init): Capture setter classes.
* libguile/deprecated.c (SPEC_OF, CPL_OF): Access slots by name, not by
index.
(applicablep, more_specificp): Adapt to use CPL_OF.
(scm_find_method): Access "methods" slot by name.
* libguile/procs.c (scm_setter): Remove special case for generics; if
it's a setter, it will be a normal applicable struct.
* module/oop/goops.scm (<applicable-struct-with-setter-class>)
(<applicable-struct-with-setter>): New classes.
(<generic-with-setter>): Now an instance of the setter metaclass and a
child of the setter class, so that the "setter" slot ends up in the
right place.
(<accessor>, <extended-generic-with-setter>, <extended-accessor>): Be
instances of the setter metaclass.
(<method>, <accessor-method>): Move definitions farther down.
(make): Use slot-set! when initializing setters here.
(initialize): Likewise for <applicable-struct-with-setter>. Remove
specialization for <generic-with-setter>.
2015-01-06 13:41:56 -05:00
|
|
|
|
SCM_VALIDATE_CLASS (1, applicable);
|
|
|
|
|
|
SCM_VALIDATE_CLASS (2, setter);
|
|
|
|
|
|
SCM_SET_VTABLE_FLAGS (applicable, SCM_VTABLE_FLAG_APPLICABLE_VTABLE);
|
|
|
|
|
|
SCM_SET_VTABLE_FLAGS (setter, SCM_VTABLE_FLAG_SETTER_VTABLE);
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
return SCM_UNSPECIFIED;
|
|
|
|
|
|
}
|
|
|
|
|
|
#undef FUNC_NAME
|
|
|
|
|
|
|
|
|
|
|
|
SCM_DEFINE (scm_sys_bless_pure_generic_vtable_x, "%bless-pure-generic-vtable!", 1, 0, 0,
|
|
|
|
|
|
(SCM vtable),
|
|
|
|
|
|
"")
|
|
|
|
|
|
#define FUNC_NAME s_scm_sys_bless_pure_generic_vtable_x
|
|
|
|
|
|
{
|
|
|
|
|
|
SCM_VALIDATE_CLASS (1, vtable);
|
|
|
|
|
|
SCM_SET_CLASS_FLAGS (vtable, SCM_CLASSF_PURE_GENERIC);
|
|
|
|
|
|
return SCM_UNSPECIFIED;
|
|
|
|
|
|
}
|
|
|
|
|
|
#undef FUNC_NAME
|
|
|
|
|
|
|
2014-12-24 11:29:45 -05:00
|
|
|
|
SCM_DEFINE (scm_sys_goops_early_init, "%goops-early-init", 0, 0, 0,
|
|
|
|
|
|
(),
|
|
|
|
|
|
"")
|
|
|
|
|
|
#define FUNC_NAME s_scm_sys_goops_early_init
|
|
|
|
|
|
{
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
var_make_standard_class = scm_c_lookup ("make-standard-class");
|
2015-01-04 15:52:12 -05:00
|
|
|
|
var_make = scm_c_lookup ("make");
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
class_class = scm_variable_ref (scm_c_lookup ("<class>"));
|
|
|
|
|
|
class_top = scm_variable_ref (scm_c_lookup ("<top>"));
|
|
|
|
|
|
class_object = scm_variable_ref (scm_c_lookup ("<object>"));
|
|
|
|
|
|
|
|
|
|
|
|
class_foreign_slot = scm_variable_ref (scm_c_lookup ("<foreign-slot>"));
|
|
|
|
|
|
class_protected = scm_variable_ref (scm_c_lookup ("<protected-slot>"));
|
|
|
|
|
|
class_hidden = scm_variable_ref (scm_c_lookup ("<hidden-slot>"));
|
|
|
|
|
|
class_opaque = scm_variable_ref (scm_c_lookup ("<opaque-slot>"));
|
|
|
|
|
|
class_read_only = scm_variable_ref (scm_c_lookup ("<read-only-slot>"));
|
|
|
|
|
|
class_self = scm_variable_ref (scm_c_lookup ("<self-slot>"));
|
|
|
|
|
|
class_protected_opaque = scm_variable_ref (scm_c_lookup ("<protected-opaque-slot>"));
|
|
|
|
|
|
class_protected_hidden = scm_variable_ref (scm_c_lookup ("<protected-hidden-slot>"));
|
|
|
|
|
|
class_protected_read_only = scm_variable_ref (scm_c_lookup ("<protected-read-only-slot>"));
|
|
|
|
|
|
class_scm = scm_variable_ref (scm_c_lookup ("<scm-slot>"));
|
|
|
|
|
|
class_int = scm_variable_ref (scm_c_lookup ("<int-slot>"));
|
|
|
|
|
|
class_float = scm_variable_ref (scm_c_lookup ("<float-slot>"));
|
|
|
|
|
|
class_double = scm_variable_ref (scm_c_lookup ("<double-slot>"));
|
|
|
|
|
|
|
|
|
|
|
|
/* Applicables */
|
|
|
|
|
|
class_procedure_class = scm_variable_ref (scm_c_lookup ("<procedure-class>"));
|
|
|
|
|
|
class_applicable_struct_class = scm_variable_ref (scm_c_lookup ("<applicable-struct-class>"));
|
|
|
|
|
|
class_applicable_struct_with_setter_class =
|
Generics with setters have <applicable-struct-with-setter> layout
* libguile/goops.c (scm_sys_set_object_setter_x): Remove. Instead, we
use slot-set! of 'setter.
(scm_i_define_class_for_vtable): Move lower in the file, and fold in
scm_make_extended_class_from_symbol and make_class_from_symbol.
Properly handle applicable structs with setters.
(scm_class_applicable_struct_with_setter_class): New private capture.
(scm_sys_bless_applicable_struct_vtables_x): Rename to take two
arguments, and bless the second argument as an applicable struct with
setter vtable.
(scm_sys_goops_early_init): Capture setter classes.
* libguile/deprecated.c (SPEC_OF, CPL_OF): Access slots by name, not by
index.
(applicablep, more_specificp): Adapt to use CPL_OF.
(scm_find_method): Access "methods" slot by name.
* libguile/procs.c (scm_setter): Remove special case for generics; if
it's a setter, it will be a normal applicable struct.
* module/oop/goops.scm (<applicable-struct-with-setter-class>)
(<applicable-struct-with-setter>): New classes.
(<generic-with-setter>): Now an instance of the setter metaclass and a
child of the setter class, so that the "setter" slot ends up in the
right place.
(<accessor>, <extended-generic-with-setter>, <extended-accessor>): Be
instances of the setter metaclass.
(<method>, <accessor-method>): Move definitions farther down.
(make): Use slot-set! when initializing setters here.
(initialize): Likewise for <applicable-struct-with-setter>. Remove
specialization for <generic-with-setter>.
2015-01-06 13:41:56 -05:00
|
|
|
|
scm_variable_ref (scm_c_lookup ("<applicable-struct-with-setter-class>"));
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
class_method = scm_variable_ref (scm_c_lookup ("<method>"));
|
|
|
|
|
|
class_accessor_method = scm_variable_ref (scm_c_lookup ("<accessor-method>"));
|
|
|
|
|
|
class_applicable = scm_variable_ref (scm_c_lookup ("<applicable>"));
|
|
|
|
|
|
class_applicable_struct = scm_variable_ref (scm_c_lookup ("<applicable-struct>"));
|
|
|
|
|
|
class_applicable_struct_with_setter = scm_variable_ref (scm_c_lookup ("<applicable-struct-with-setter>"));
|
|
|
|
|
|
class_generic = scm_variable_ref (scm_c_lookup ("<generic>"));
|
|
|
|
|
|
class_extended_generic = scm_variable_ref (scm_c_lookup ("<extended-generic>"));
|
|
|
|
|
|
class_generic_with_setter = scm_variable_ref (scm_c_lookup ("<generic-with-setter>"));
|
|
|
|
|
|
class_accessor = scm_variable_ref (scm_c_lookup ("<accessor>"));
|
|
|
|
|
|
class_extended_generic_with_setter = scm_variable_ref (scm_c_lookup ("<extended-generic-with-setter>"));
|
|
|
|
|
|
class_extended_accessor = scm_variable_ref (scm_c_lookup ("<extended-accessor>"));
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
|
|
|
|
|
|
/* Primitive types classes */
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
class_boolean = scm_variable_ref (scm_c_lookup ("<boolean>"));
|
|
|
|
|
|
class_char = scm_variable_ref (scm_c_lookup ("<char>"));
|
|
|
|
|
|
class_list = scm_variable_ref (scm_c_lookup ("<list>"));
|
|
|
|
|
|
class_pair = scm_variable_ref (scm_c_lookup ("<pair>"));
|
|
|
|
|
|
class_null = scm_variable_ref (scm_c_lookup ("<null>"));
|
|
|
|
|
|
class_string = scm_variable_ref (scm_c_lookup ("<string>"));
|
|
|
|
|
|
class_symbol = scm_variable_ref (scm_c_lookup ("<symbol>"));
|
|
|
|
|
|
class_vector = scm_variable_ref (scm_c_lookup ("<vector>"));
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
class_foreign = scm_variable_ref (scm_c_lookup ("<foreign>"));
|
|
|
|
|
|
class_hashtable = scm_variable_ref (scm_c_lookup ("<hashtable>"));
|
|
|
|
|
|
class_fluid = scm_variable_ref (scm_c_lookup ("<fluid>"));
|
|
|
|
|
|
class_dynamic_state = scm_variable_ref (scm_c_lookup ("<dynamic-state>"));
|
|
|
|
|
|
class_frame = scm_variable_ref (scm_c_lookup ("<frame>"));
|
|
|
|
|
|
class_vm_cont = scm_variable_ref (scm_c_lookup ("<vm-continuation>"));
|
|
|
|
|
|
class_bytevector = scm_variable_ref (scm_c_lookup ("<bytevector>"));
|
|
|
|
|
|
class_uvec = scm_variable_ref (scm_c_lookup ("<uvec>"));
|
|
|
|
|
|
class_array = scm_variable_ref (scm_c_lookup ("<array>"));
|
|
|
|
|
|
class_bitvector = scm_variable_ref (scm_c_lookup ("<bitvector>"));
|
Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
(scm_class_boolean, scm_class_char, scm_class_pair)
(scm_class_procedure, scm_class_string, scm_class_symbol)
(scm_class_primitive_generic, scm_class_vector, scm_class_null)
(scm_class_real, scm_class_complex, scm_class_integer)
(scm_class_fraction, scm_class_unknown, scm_class_top)
(scm_class_object, scm_class_class, scm_class_applicable)
(scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
(scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
(scm_class_extended_generic, scm_class_extended_generic_with_setter)
(scm_class_extended_accessor, scm_class_method)
(scm_class_accessor_method, scm_class_procedure_class)
(scm_class_applicable_struct_class, scm_class_number, scm_class_list)
(scm_class_keyword, scm_class_port, scm_class_input_output_port)
(scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
(scm_class_self, scm_class_protected, scm_class_hidden)
(scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
(scm_class_protected_opaque, scm_class_protected_read_only)
(scm_class_scm, scm_class_int, scm_class_float)
(scm_class_double, scm_port_class, scm_smob_class): Deprecate.
* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.
* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
(SCM_GENERICP, SCM_METHODP): Change to use new interfaces.
* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
names for the port and smob class arrays.
2015-01-06 14:16:03 -05:00
|
|
|
|
class_number = scm_variable_ref (scm_c_lookup ("<number>"));
|
|
|
|
|
|
class_complex = scm_variable_ref (scm_c_lookup ("<complex>"));
|
|
|
|
|
|
class_real = scm_variable_ref (scm_c_lookup ("<real>"));
|
|
|
|
|
|
class_integer = scm_variable_ref (scm_c_lookup ("<integer>"));
|
|
|
|
|
|
class_fraction = scm_variable_ref (scm_c_lookup ("<fraction>"));
|
|
|
|
|
|
class_keyword = scm_variable_ref (scm_c_lookup ("<keyword>"));
|
|
|
|
|
|
class_unknown = scm_variable_ref (scm_c_lookup ("<unknown>"));
|
|
|
|
|
|
class_procedure = scm_variable_ref (scm_c_lookup ("<procedure>"));
|
|
|
|
|
|
class_primitive_generic = scm_variable_ref (scm_c_lookup ("<primitive-generic>"));
|
|
|
|
|
|
class_port = scm_variable_ref (scm_c_lookup ("<port>"));
|
|
|
|
|
|
class_input_port = scm_variable_ref (scm_c_lookup ("<input-port>"));
|
|
|
|
|
|
class_output_port = scm_variable_ref (scm_c_lookup ("<output-port>"));
|
|
|
|
|
|
class_input_output_port = scm_variable_ref (scm_c_lookup ("<input-output-port>"));
|
Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
build_class_class_slots.
(build-slots-list, %compute-getters-n-setters, %compute-layout): New
private helpers, moved here from C.
(%prep-layout!): Reimplement in Scheme.
(make-standard-class): New private helper, replacing
scm_basic_make_class.
(<class>, <top>, <object>): Define in Scheme.
(<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
<read-only-slot>, <self-slot>, <protected-opaque-slot>,
<protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
<int-slot>, <float-slot>, <double-slot>, <procedure-class>,
<applicable-struct-class>, <method>, <accessor-method>, <applicable>,
<applicable-struct>, <generic>, <extended-generic>,
<generic-with-setter>, <accessor>, <extended-generic-with-setter>,
<extended-accessor>): Define in Scheme.
(<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
<vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
<vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
<number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
<unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
<output-port>, <input-output-port>): Define in Scheme.
(compute-slots): Use build-slots-list helper.
* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
(scm_sys_prep_layout_x): Remove. These were available to C, but were
undocumented internals that were dangerous, confusing, and
unnecessary.
* libguile/goops.c: Add note about variable versus value references.
Remove internal C routines that were just used during boot, as they
have been moved to Scheme.
(scm_basic_make_class): Change to call out to make-standard-class in
Scheme.
(scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
(scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
private helpers.
(scm_sys_goops_early_init): Change to capture values defined in
Scheme.
2015-01-04 13:41:09 -05:00
|
|
|
|
|
2014-12-24 11:29:45 -05:00
|
|
|
|
create_smob_classes ();
|
|
|
|
|
|
create_struct_classes ();
|
|
|
|
|
|
create_port_classes ();
|
|
|
|
|
|
|
|
|
|
|
|
return SCM_UNSPECIFIED;
|
|
|
|
|
|
}
|
|
|
|
|
|
#undef FUNC_NAME
|
|
|
|
|
|
|
2000-12-16 20:25:08 +00:00
|
|
|
|
SCM_DEFINE (scm_sys_goops_loaded, "%goops-loaded", 0, 0, 0,
|
|
|
|
|
|
(),
|
(scm_sys_initialize_object, scm_instance_p, scm_class_name,
scm_class_precedence_list, scm_class_slots, scm_class_environment,
scm_generic_function_name, scm_generic_function_methods,
scm_method_generic_function, scm_method_specializers,
scm_method_procedure, scm_make_unbound, scm_unbound_p,
scm_assert_bound, scm_at_assert_bound_ref, scm_sys_fast_slot_ref,
scm_sys_fast_slot_set_x, scm_slot_ref, scm_slot_set_x,
_scm_slot_bound_p, scm_slots_exists_p, scm_sys_allocate_instance,
scm_make, scm_pure_generic_p, scm_class_direct_supers,
scm_class_direct_slots, scm_class_direct_subclasses,
scm_class_direct_methods, scm_accessor_method_slot_definition,
scm_sys_goops_loaded): Added docstrings.
2001-02-16 14:59:22 +00:00
|
|
|
|
"Announce that GOOPS is loaded and perform initialization\n"
|
|
|
|
|
|
"on the C level which depends on the loaded GOOPS modules.")
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#define FUNC_NAME s_scm_sys_goops_loaded
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
|
|
|
|
|
goops_loaded_p = 1;
|
2015-01-09 22:05:01 +01:00
|
|
|
|
var_class_name = scm_c_lookup ("class-name");
|
|
|
|
|
|
var_class_direct_supers = scm_c_lookup ("class-direct-supers");
|
|
|
|
|
|
var_class_direct_slots = scm_c_lookup ("class-direct-slots");
|
|
|
|
|
|
var_class_direct_subclasses = scm_c_lookup ("class-direct-subclasses");
|
|
|
|
|
|
var_class_direct_methods = scm_c_lookup ("class-direct-methods");
|
|
|
|
|
|
var_class_precedence_list = scm_c_lookup ("class-precedence-list");
|
|
|
|
|
|
var_class_slots = scm_c_lookup ("class-slots");
|
|
|
|
|
|
|
|
|
|
|
|
var_generic_function_methods = scm_c_lookup ("generic-function-methods");
|
|
|
|
|
|
var_method_generic_function = scm_c_lookup ("method-generic-function");
|
|
|
|
|
|
var_method_specializers = scm_c_lookup ("method-specializers");
|
|
|
|
|
|
var_method_procedure = scm_c_lookup ("method-procedure");
|
|
|
|
|
|
|
2009-02-04 00:49:55 +01:00
|
|
|
|
var_slot_unbound =
|
2009-12-05 11:30:09 +01:00
|
|
|
|
scm_module_variable (scm_module_goops, sym_slot_unbound);
|
2009-02-04 00:49:55 +01:00
|
|
|
|
var_slot_missing =
|
2009-12-05 11:30:09 +01:00
|
|
|
|
scm_module_variable (scm_module_goops, sym_slot_missing);
|
2009-02-04 00:49:55 +01:00
|
|
|
|
var_change_class =
|
2009-12-05 11:30:09 +01:00
|
|
|
|
scm_module_variable (scm_module_goops, sym_change_class);
|
2003-03-06 12:51:57 +00:00
|
|
|
|
setup_extended_primitive_generics ();
|
2015-01-06 11:50:16 -05:00
|
|
|
|
|
|
|
|
|
|
#if (SCM_ENABLE_DEPRECATED == 1)
|
|
|
|
|
|
scm_init_deprecated_goops ();
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
return SCM_UNSPECIFIED;
|
|
|
|
|
|
}
|
2000-12-16 20:25:08 +00:00
|
|
|
|
#undef FUNC_NAME
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
|
|
|
|
|
SCM scm_module_goops;
|
|
|
|
|
|
|
2014-12-24 11:07:47 -05:00
|
|
|
|
static void
|
|
|
|
|
|
scm_init_goops_builtins (void *unused)
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2001-05-19 00:33:25 +00:00
|
|
|
|
scm_module_goops = scm_current_module ();
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2008-08-19 19:08:29 +02:00
|
|
|
|
hell = scm_calloc (hell_size * sizeof (*hell));
|
2009-12-05 11:30:09 +01:00
|
|
|
|
hell_mutex = scm_make_mutex ();
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
|
2014-12-24 11:29:45 -05:00
|
|
|
|
#include "libguile/goops.x"
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
2001-05-19 00:33:25 +00:00
|
|
|
|
scm_init_goops ()
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
{
|
2014-12-24 11:07:47 -05:00
|
|
|
|
scm_c_register_extension ("libguile-" SCM_EFFECTIVE_VERSION,
|
|
|
|
|
|
"scm_init_goops_builtins", scm_init_goops_builtins,
|
|
|
|
|
|
NULL);
|
* goops.c, objects.c, objects.h, eval.c (scm_make_extended_class,
scm_make_port_classes, scm_change_object_class,
scm_memoize_method): Changed to ordinary functions (was plugin
slots).
* goops.c (wrap_init, scm_wrap_object): Unconditionally use
SCM_STRUCT_GC_CHAIN.
(scm_goops_version): Removed.
(scm_oldfmt): and all uses of it: Removed.
(scm_shared_array_root, scm_shared_array_offset,
scm_shared_array_increments): Removed.
(scm_init_goops): No need to support two arg mutex init.
Removed #include "versiondat.h", #include "goops.h".
2000-10-25 14:49:31 +00:00
|
|
|
|
}
|
2000-12-01 16:05:33 +00:00
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
Local Variables:
|
|
|
|
|
|
c-file-style: "gnu"
|
|
|
|
|
|
End:
|
|
|
|
|
|
*/
|