X-Git-Url: http://git.hcoop.net/bpt/guile.git/blobdiff_plain/8a39e3fc79cfe382e5f5844fbd5750eb4ea05e28..fc85d095600162567fd0aa563eed9e6eada3e889:/libguile/smob.h diff --git a/libguile/smob.h b/libguile/smob.h index 0b67ef950..c1893a433 100644 --- a/libguile/smob.h +++ b/libguile/smob.h @@ -1,19 +1,20 @@ /* classes: h_files */ -#ifndef SMOBH -#define SMOBH -/* Copyright (C) 1995, 1996, 1998, 1999, 2000 Free Software Foundation, Inc. - * +#ifndef SCM_SMOB_H +#define SCM_SMOB_H + +/* Copyright (C) 1995,1996,1998,1999,2000,2001 Free Software Foundation, Inc. + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this software; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, @@ -42,7 +43,9 @@ * If you write modifications of your own for GUILE, it is your choice * whether to permit this exception to apply to your modifications. * If you do not wish that, delete this exception notice. */ + + #include "libguile/__scm.h" #include "libguile/print.h" @@ -52,9 +55,9 @@ typedef struct scm_smob_descriptor { char *name; - scm_sizet size; + size_t size; SCM (*mark) (SCM); - scm_sizet (*free) (SCM); + size_t (*free) (SCM); int (*print) (SCM exp, SCM port, scm_print_state *pstate); SCM (*equalp) (SCM, SCM); SCM (*apply) (); @@ -69,9 +72,7 @@ typedef struct scm_smob_descriptor #define SCM_NEWSMOB(z, tc, data) \ do { \ - SCM_NEWCELL (z); \ - SCM_SET_CELL_WORD_1 ((z), (data)); \ - SCM_SET_CELL_TYPE ((z), (tc)); \ + z = scm_cell ((tc), (scm_t_bits) (data)); \ } while (0) #define SCM_RETURN_NEWSMOB(tc, data) \ @@ -82,10 +83,7 @@ do { \ #define SCM_NEWSMOB2(z, tc, data1, data2) \ do { \ - SCM_NEWCELL2 (z); \ - SCM_SET_CELL_WORD_1 ((z), (data1)); \ - SCM_SET_CELL_WORD_2 ((z), (data2)); \ - SCM_SET_CELL_TYPE ((z), (tc)); \ + z = scm_double_cell ((tc), (scm_t_bits)(data1), (scm_t_bits)(data2), 0); \ } while (0) #define SCM_RETURN_NEWSMOB2(tc, data1, data2) \ @@ -96,11 +94,8 @@ do { \ #define SCM_NEWSMOB3(z, tc, data1, data2, data3) \ do { \ - SCM_NEWCELL2 (z); \ - SCM_SET_CELL_WORD_1 ((z), (data1)); \ - SCM_SET_CELL_WORD_2 ((z), (data2)); \ - SCM_SET_CELL_WORD_3 ((z), (data3)); \ - SCM_SET_CELL_TYPE ((z), (tc)); \ + z = scm_double_cell ((tc), (scm_t_bits)(data1), \ + (scm_t_bits)(data2), (scm_t_bits)(data3)); \ } while (0) #define SCM_RETURN_NEWSMOB3(tc, data1, data2, data3) \ @@ -120,20 +115,20 @@ do { \ #define SCM_SMOB_DESCRIPTOR(x) (scm_smobs[SCM_SMOBNUM (x)]) #define SCM_SMOB_APPLICABLE_P(x) (SCM_SMOB_DESCRIPTOR (x).apply) #define SCM_SMOB_APPLY_0(x) (SCM_SMOB_DESCRIPTOR (x).apply_0 (x)) -#define SCM_SMOB_APPLY_1(x,a1) (SCM_SMOB_DESCRIPTOR (x).apply_1 (x, (a1))) -#define SCM_SMOB_APPLY_2(x,a1,a2) (SCM_SMOB_DESCRIPTOR (x).apply_2 (x, (a1), (a2))) -#define SCM_SMOB_APPLY_3(x,a1,a2,rst) (SCM_SMOB_DESCRIPTOR (x).apply_3 (x, (a1), (a2), (rst))) +#define SCM_SMOB_APPLY_1(x, a1) (SCM_SMOB_DESCRIPTOR (x).apply_1 (x, (a1))) +#define SCM_SMOB_APPLY_2(x, a1, a2) (SCM_SMOB_DESCRIPTOR (x).apply_2 (x, (a1), (a2))) +#define SCM_SMOB_APPLY_3(x, a1, a2, rst) (SCM_SMOB_DESCRIPTOR (x).apply_3 (x, (a1), (a2), (rst))) -extern int scm_numsmob; -extern scm_smob_descriptor *scm_smobs; +SCM_API long scm_numsmob; +SCM_API scm_smob_descriptor scm_smobs[]; -extern SCM scm_mark0 (SCM ptr); -extern SCM scm_markcdr (SCM ptr); -extern scm_sizet scm_free0 (SCM ptr); -extern scm_sizet scm_smob_free (SCM obj); -extern int scm_smob_print (SCM exp, SCM port, scm_print_state *pstate); +SCM_API SCM scm_mark0 (SCM ptr); +SCM_API SCM scm_markcdr (SCM ptr); +SCM_API size_t scm_free0 (SCM ptr); +SCM_API size_t scm_smob_free (SCM obj); +SCM_API int scm_smob_print (SCM exp, SCM port, scm_print_state *pstate); /* The following set of functions is the standard way to create new * SMOB types. @@ -143,43 +138,25 @@ extern int scm_smob_print (SCM exp, SCM port, scm_print_state *pstate); * values using `scm_set_smob_xxx'. */ -extern scm_bits_t scm_make_smob_type (char *name, scm_sizet size); +SCM_API scm_t_bits scm_make_smob_type (char *name, size_t size); -extern void scm_set_smob_mark (long tc, SCM (*mark) (SCM)); -extern void scm_set_smob_free (long tc, scm_sizet (*free) (SCM)); -extern void scm_set_smob_print (long tc, int (*print) (SCM, - SCM, - scm_print_state*)); -extern void scm_set_smob_equalp (long tc, SCM (*equalp) (SCM, SCM)); -extern void scm_set_smob_apply (long tc, SCM (*apply) (), - unsigned int req, - unsigned int opt, - unsigned int rst); +SCM_API void scm_set_smob_mark (scm_t_bits tc, SCM (*mark) (SCM)); +SCM_API void scm_set_smob_free (scm_t_bits tc, size_t (*free) (SCM)); +SCM_API void scm_set_smob_print (scm_t_bits tc, + int (*print) (SCM, SCM, scm_print_state*)); +SCM_API void scm_set_smob_equalp (scm_t_bits tc, SCM (*equalp) (SCM, SCM)); +SCM_API void scm_set_smob_apply (scm_t_bits tc, + SCM (*apply) (), + unsigned int req, + unsigned int opt, + unsigned int rst); /* Function for creating smobs */ -extern SCM scm_make_smob (long tc); -extern void scm_smob_prehistory (void); - - - -#if (SCM_DEBUG_DEPRECATED == 0) - -extern long scm_make_smob_type_mfpe (char *name, scm_sizet size, - SCM (*mark) (SCM), - scm_sizet (*free) (SCM), - int (*print) (SCM, SCM, scm_print_state*), - SCM (*equalp) (SCM, SCM)); - -extern void scm_set_smob_mfpe (long tc, - SCM (*mark) (SCM), - scm_sizet (*free) (SCM), - int (*print) (SCM, SCM, scm_print_state*), - SCM (*equalp) (SCM, SCM)); - -#endif /* SCM_DEBUG_DEPRECATED == 0 */ +SCM_API SCM scm_make_smob (scm_t_bits tc); +SCM_API void scm_smob_prehistory (void); -#endif /* SMOBH */ +#endif /* SCM_SMOB_H */ /* Local Variables: