*** empty log message ***
[bpt/guile.git] / libguile / goops.h
index db4659b..3c123c8 100644 (file)
@@ -53,6 +53,8 @@
 
 #include "libguile/__scm.h"
 
+#include "libguile/validate.h"
+
 /*
  * scm_class_class
  */
@@ -123,22 +125,35 @@ typedef struct scm_method_t {
  (SCM_UNPACK (SCM_STRUCT_DATA (x)[scm_struct_i_n_words]) \
   - scm_struct_n_extra_words) \
 
-#define SCM_INSTANCEP(x)       (SCM_STRUCTP (x) \
-                              && (SCM_INST_TYPE (x) & SCM_CLASSF_GOOPS))
+#define SCM_INSTANCEP(x) \
+  (SCM_STRUCTP (x) && (SCM_INST_TYPE (x) & SCM_CLASSF_GOOPS))
+#define SCM_VALIDATE_INSTANCE(pos, x) SCM_MAKE_VALIDATE (pos, x, INSTANCEP)
 
-#define SCM_PUREGENERICP(x)    (SCM_INST_TYPE(x) & SCM_CLASSF_PURE_GENERIC)
+#define SCM_PUREGENERICP(x) \
+  (SCM_STRUCTP (x) && (SCM_INST_TYPE(x) & SCM_CLASSF_PURE_GENERIC))
 #define SCM_SIMPLEMETHODP(x)   (SCM_INST_TYPE(x) & SCM_CLASSF_SIMPLE_METHOD)
 #define SCM_ACCESSORP(x)       (SCM_INST_TYPE(x) & SCM_CLASSF_ACCESSOR_METHOD)
+#define SCM_VALIDATE_ACCESSOR(pos, x) SCM_MAKE_VALIDATE (pos, x, ACCESSORP)
 #define SCM_FASTMETHODP(x)     (SCM_INST_TYPE(x) \
                                & (SCM_CLASSF_ACCESSOR_METHOD \
                                   | SCM_CLASSF_SIMPLE_METHOD))
 
 #define SCM_SLOT(x, i)         (SCM_INST(x)[i])
-#define SCM_SUBCLASSP(c1, c2)  (!SCM_FALSEP (scm_memq (c2, SCM_SLOT (c1, scm_si_cpl))))
+#define SCM_SUBCLASSP(c1, c2)  (!SCM_FALSEP (scm_c_memq (c2, SCM_SLOT (c1, scm_si_cpl))))
 #define SCM_IS_A_P(x, c)       (SCM_NIMP (x) \
                                && SCM_INSTANCEP (x) \
                                && SCM_SUBCLASSP (SCM_CLASS_OF (x), c))
 
+#define SCM_CLASSP(x)   (SCM_STRUCTP (x) \
+                       && SCM_OBJ_CLASS_FLAGS (x) & SCM_CLASSF_METACLASS)
+#define SCM_VALIDATE_CLASS(pos, x) SCM_MAKE_VALIDATE (pos, x, CLASSP)
+#define SCM_GENERICP(x) (SCM_INSTANCEP (x) \
+                       && SCM_SUBCLASSP (SCM_CLASS_OF (x), scm_class_generic))
+#define SCM_VALIDATE_GENERIC(pos, x) SCM_MAKE_VALIDATE (pos, x, GENERICP)
+#define SCM_METHODP(x)  (SCM_INSTANCEP (x) \
+                       && SCM_SUBCLASSP(SCM_CLASS_OF(x), scm_class_method))
+#define SCM_VALIDATE_METHOD(pos, x) SCM_MAKE_VALIDATE (pos, x, METHODP)
+
 #define SCM_MCACHE_N_SPECIALIZED(C) SCM_CADDR (C)
 #define SCM_SET_MCACHE_N_SPECIALIZED(C, X) SCM_SETCAR (SCM_CDDR (C), X)