Avoid signed overflow and use size_t in bytevectors.c.
[bpt/guile.git] / libguile / goops.h
index 57604a0..47a6e4e 100644 (file)
@@ -3,7 +3,7 @@
 #ifndef SCM_GOOPS_H
 #define SCM_GOOPS_H
 
-/* Copyright (C) 1998,1999,2000,2001,2002,2003, 2006, 2008, 2009 Free Software Foundation, Inc.
+/* Copyright (C) 1998,1999,2000,2001,2002,2003, 2006, 2008, 2009, 2011 Free Software Foundation, Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
  */
 
 /* see also, SCM_VTABLE_BASE_LAYOUT, and build_class_class_slots */
-#define SCM_CLASS_CLASS_LAYOUT \
-  "pw" /* redefined */ \
-  "uw" /* h0 */ \
-  "uw" /* h1 */ \
-  "uw" /* h2 */ \
-  "uw" /* h3 */ \
-  "uw" /* h4 */ \
-  "uw" /* h5 */ \
-  "uw" /* h6 */ \
-  "uw" /* h7 */ \
-  "pw" /* direct supers */ \
-  "pw" /* direct slots */ \
-  "pw" /* direct subclasses */ \
-  "pw" /* direct methods */ \
-  "pw" /* cpl */ \
-  "pw" /* default-slot-definition-class */ \
-  "pw" /* slots */ \
-  "pw" /* getters-n-setters */ \
-  "pw" /* keyword access */ \
-  "pw" /* nfields */ \
-  "pw" /* environment */
+#define SCM_CLASS_CLASS_LAYOUT                  \
+  "pw" /* redefined */                          \
+  "uw" /* h0 */                                 \
+  "uw" /* h1 */                                 \
+  "uw" /* h2 */                                 \
+  "uw" /* h3 */                                 \
+  "uw" /* h4 */                                 \
+  "uw" /* h5 */                                 \
+  "uw" /* h6 */                                 \
+  "uw" /* h7 */                                 \
+  "pw" /* direct supers */                      \
+  "pw" /* direct slots */                       \
+  "pw" /* direct subclasses */                  \
+  "pw" /* direct methods */                     \
+  "pw" /* cpl */                                \
+  "pw" /* default-slot-definition-class */      \
+  "pw" /* slots */                              \
+  "pw" /* getters-n-setters */                  \
+  "pw" /* keyword access */                     \
+  "pw" /* nfields */
 
 #define scm_si_redefined         (scm_vtable_offset_user + 0)
 #define scm_si_h0                (scm_vtable_offset_user + 1)
 #define scm_si_getters_n_setters scm_si_name_access
 #define scm_si_keyword_access   (scm_vtable_offset_user + 17)
 #define scm_si_nfields          (scm_vtable_offset_user + 18) /* an integer */
-#define scm_si_environment      (scm_vtable_offset_user + 19) /* The environment in which class is built  */
-#define SCM_N_CLASS_SLOTS       (scm_vtable_offset_user + 20)
+#define SCM_N_CLASS_SLOTS       (scm_vtable_offset_user + 19)
 
 typedef struct scm_t_method {
   SCM generic_function;
@@ -152,26 +150,18 @@ typedef struct scm_t_method {
 
 #define SCM_SET_CLASS_DESTRUCTOR(c, d) SCM_SET_VTABLE_DESTRUCTOR (c, d)
 
-#define SCM_GENERIC_METHOD_CACHE(G) (SCM_PACK (SCM_STRUCT_DATA (G) [scm_si_generic_cache]))
-#define SCM_SET_GENERIC_METHOD_CACHE(G,C) (SCM_STRUCT_DATA (G) [scm_si_generic_cache] = SCM_UNPACK (C))
-#define SCM_MCACHE_N_SPECIALIZED(C) SCM_CADDR (C)
-#define SCM_SET_MCACHE_N_SPECIALIZED(C, X) SCM_SETCAR (SCM_CDDR (C), X)
-
 #define SCM_SET_GENERIC_DISPATCH_PROCEDURE(G,C) (SCM_STRUCT_SLOT_SET (G, scm_si_dispatch_procedure, (C)))
 #define SCM_CLEAR_GENERIC_EFFECTIVE_METHODS(G) (SCM_STRUCT_SLOT_SET (G, scm_si_effective_methods, SCM_EOL));
 
 #define SCM_GENERIC_SETTER(G) (SCM_PACK (SCM_STRUCT_DATA (G) [scm_si_generic_setter]))
 #define SCM_SET_GENERIC_SETTER(G,C) (SCM_STRUCT_DATA (G) [scm_si_generic_setter] = SCM_UNPACK (C))
 
-#define SCM_INITIAL_MCACHE_SIZE          1
-
 #define scm_si_dispatch_procedure scm_applicable_struct_index_procedure /* 0 */
 #define scm_si_methods            1
 #define scm_si_n_specialized     2
 #define scm_si_extended_by       3
-#define scm_si_generic_cache     4
-#define scm_si_effective_methods  5
-#define scm_si_generic_setter     6
+#define scm_si_effective_methods  4
+#define scm_si_generic_setter     5
 
 #define scm_si_generic_function         0  /* offset of gf    slot in a <method> */
 #define scm_si_specializers     1  /* offset of spec. slot in a <method> */
@@ -187,9 +177,9 @@ SCM_API SCM scm_class_pair;
 SCM_API SCM scm_class_procedure;
 SCM_API SCM scm_class_string;
 SCM_API SCM scm_class_symbol;
-SCM_API SCM scm_class_procedure_with_setter;
 SCM_API SCM scm_class_primitive_generic;
-SCM_API SCM scm_class_vector, scm_class_null;
+SCM_API SCM scm_class_vector;
+SCM_API SCM scm_class_null;
 SCM_API SCM scm_class_real;
 SCM_API SCM scm_class_complex;
 SCM_API SCM scm_class_integer;
@@ -247,7 +237,6 @@ SCM_API void scm_load_goops (void);
 SCM_API SCM scm_make_extended_class (char const *type_name, int applicablep);
 SCM_API void scm_make_port_classes (long ptobnum, char *type_name);
 SCM_API SCM scm_ensure_accessor (SCM name);
-SCM_API void scm_add_method (SCM gf, SCM m);
 SCM_API SCM scm_class_of (SCM obj);
 
 /* Low level functions exported */
@@ -283,13 +272,11 @@ SCM_API SCM scm_class_direct_subclasses (SCM obj);
 SCM_API SCM scm_class_direct_methods (SCM obj);
 SCM_API SCM scm_class_precedence_list (SCM obj);
 SCM_API SCM scm_class_slots (SCM obj);
-SCM_API SCM scm_class_environment (SCM obj);
 SCM_API SCM scm_generic_function_name (SCM obj);
 SCM_API SCM scm_generic_function_methods (SCM obj);
 SCM_API SCM scm_method_generic_function (SCM obj);
 SCM_API SCM scm_method_specializers (SCM obj);
 SCM_API SCM scm_method_procedure (SCM obj);
-SCM_API SCM scm_sys_tag_body (SCM body);
 SCM_API SCM scm_sys_fast_slot_ref (SCM obj, SCM index);
 SCM_API SCM scm_sys_fast_slot_set_x (SCM obj, SCM index, SCM value);
 SCM_API SCM scm_slot_ref_using_class (SCM cls, SCM obj, SCM slot_name);
@@ -301,7 +288,6 @@ SCM_API SCM scm_slot_exists_p (SCM obj, SCM slot_name);
 SCM_API SCM scm_sys_modify_instance (SCM old, SCM newinst);
 SCM_API SCM scm_sys_modify_class (SCM old, SCM newcls);
 SCM_API SCM scm_sys_invalidate_class (SCM cls);
-SCM_API SCM scm_make_method_cache (SCM gf);
 SCM_API SCM scm_sys_invalidate_method_cache_x (SCM gf);
 SCM_API SCM scm_generic_capability_p (SCM proc);
 SCM_API SCM scm_enable_primitive_generic_x (SCM subrs);
@@ -313,9 +299,6 @@ SCM_API SCM scm_make (SCM args);
 SCM_API SCM scm_find_method (SCM args);
 SCM_API SCM scm_sys_method_more_specific_p (SCM m1, SCM m2, SCM targs);
 SCM_API void scm_change_object_class (SCM, SCM, SCM);
-SCM_API SCM scm_memoize_method (SCM x, SCM args);
-SCM_API SCM scm_mcache_lookup_cmethod (SCM cache, SCM args);
-SCM_API SCM scm_mcache_compute_cmethod (SCM cache, SCM args);
 /* The following are declared in __scm.h
 SCM_API SCM scm_call_generic_0 (SCM gf);
 SCM_API SCM scm_call_generic_1 (SCM gf, SCM a1);
@@ -324,6 +307,8 @@ SCM_API SCM scm_apply_generic (SCM gf, SCM args);
 */
 SCM_API SCM scm_call_generic_3 (SCM gf, SCM a1, SCM a2, SCM a3);
 
+SCM_INTERNAL SCM scm_i_define_class_for_vtable (SCM vtable);
+
 
 SCM_INTERNAL SCM scm_init_goops_builtins (void);
 SCM_INTERNAL void scm_init_goops (void);