summaryrefslogtreecommitdiff
path: root/libguile/pairs.h
diff options
context:
space:
mode:
authorDirk Herrmann <dirk@dirk-herrmanns-seiten.de>2000-03-26 10:08:52 +0000
committerDirk Herrmann <dirk@dirk-herrmanns-seiten.de>2000-03-26 10:08:52 +0000
commit2549a7096d2443b3f581ca7bffa4ece1d07894c0 (patch)
tree658dadad693b078adf759f55f003b33f17af0c16 /libguile/pairs.h
parent8d3356e761c0469c124e4e88de3ec3b835d4069c (diff)
Moved some cell related definitions from tags.h and pairs.h to gc.h.
Diffstat (limited to 'libguile/pairs.h')
-rw-r--r--libguile/pairs.h166
1 files changed, 1 insertions, 165 deletions
diff --git a/libguile/pairs.h b/libguile/pairs.h
index b14532b0d..90c88e043 100644
--- a/libguile/pairs.h
+++ b/libguile/pairs.h
@@ -2,7 +2,7 @@
#ifndef PAIRSH
#define PAIRSH
-/* Copyright (C) 1995,1996, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1995,1996,2000 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
@@ -52,108 +52,15 @@
-typedef struct scm_cell
-{
- SCM car;
- SCM cdr;
-} scm_cell;
-
-
-/* Low level cell data accessing macros:
- */
-
-#define SCM_CELL_WORD(x, n) (SCM_UNPACK (((SCM *) SCM2PTR (x))[n]))
-#define SCM_CELL_WORD_0(x) SCM_CELL_WORD (x, 0)
-#define SCM_CELL_WORD_1(x) SCM_CELL_WORD (x, 1)
-#define SCM_CELL_WORD_2(x) SCM_CELL_WORD (x, 2)
-#define SCM_CELL_WORD_3(x) SCM_CELL_WORD (x, 3)
-
-#define SCM_CELL_OBJECT(x, n) (((SCM *) SCM2PTR (x))[n])
-#define SCM_CELL_OBJECT_0(x) SCM_CELL_OBJECT (x, 0)
-#define SCM_CELL_OBJECT_1(x) SCM_CELL_OBJECT (x, 1)
-#define SCM_CELL_OBJECT_2(x) SCM_CELL_OBJECT (x, 2)
-#define SCM_CELL_OBJECT_3(x) SCM_CELL_OBJECT (x, 3)
-
-#define SCM_SET_CELL_WORD(x, n, v) ((((SCM *) SCM2PTR (x))[n]) = SCM_PACK (v))
-#define SCM_SET_CELL_WORD_0(x, v) SCM_SET_CELL_WORD (x, 0, v)
-#define SCM_SET_CELL_WORD_1(x, v) SCM_SET_CELL_WORD (x, 1, v)
-#define SCM_SET_CELL_WORD_2(x, v) SCM_SET_CELL_WORD (x, 2, v)
-#define SCM_SET_CELL_WORD_3(x, v) SCM_SET_CELL_WORD (x, 3, v)
-
-#define SCM_SET_CELL_OBJECT(x, n, v) ((((SCM *) SCM2PTR (x))[n]) = v)
-#define SCM_SET_CELL_OBJECT_0(x, v) SCM_SET_CELL_OBJECT (x, 0, v)
-#define SCM_SET_CELL_OBJECT_1(x, v) SCM_SET_CELL_OBJECT (x, 1, v)
-#define SCM_SET_CELL_OBJECT_2(x, v) SCM_SET_CELL_OBJECT (x, 2, v)
-#define SCM_SET_CELL_OBJECT_3(x, v) SCM_SET_CELL_OBJECT (x, 3, v)
-
-
-#define SCM_CELL_TYPE(x) SCM_CELL_WORD_0 (x)
-#define SCM_SET_CELL_TYPE(x, t) SCM_SET_CELL_WORD_0 (x, t)
-
-
-/* SCM_PTR_LT defines how to compare two SCM_CELLPTRs (which may not be in the
- * same scm_array). SCM_CELLPTR is a pointer to a cons cell which may be
- * compared or differenced. SCMPTR is used for stack bounds.
- */
-
-#if !defined(__TURBOC__) || defined(__TOS__)
-
-typedef scm_cell *SCM_CELLPTR;
-typedef SCM *SCMPTR;
-
-# ifdef nosve
-# define SCM_PTR_MASK 0xffffffffffff
-# define SCM_PTR_LT(x, y)\
- (((int) (x) &SCM_PTR_MASK) < ((int) (y) & SCM_PTR_MASK))
-# else
-# define SCM_PTR_LT(x, y) ((x) < (y))
-# endif /* def nosve */
-
-#else /* defined(__TURBOC__) && !defined(__TOS__) */
-
-# ifdef PROT386
-typedef scm_cell *SCM_CELLPTR;
-typedef SCM *SCMPTR;
-# define SCM_PTR_LT(x, y) (((long) (x)) < ((long) (y)))
-# else
-typedef scm_cell huge *SCM_CELLPTR;
-typedef SCM huge *SCMPTR;
-# define SCM_PTR_LT(x, y) ((x) < (y))
-# endif /* def PROT386 */
-
-#endif /* defined(__TURBOC__) && !defined(__TOS__) */
-
-#define SCM_PTR_GT(x, y) SCM_PTR_LT (y, x)
-#define SCM_PTR_LE(x, y) (!SCM_PTR_GT (x, y))
-#define SCM_PTR_GE(x, y) (!SCM_PTR_LT (x, y))
-
#define SCM_NULLP(x) (SCM_EOL == (x))
#define SCM_NNULLP(x) (SCM_EOL != (x))
-
-
-
-/* Cons Pairs
- */
-
#define SCM_CAR(x) (((scm_cell *) (SCM2PTR (x)))->car)
#define SCM_CDR(x) (((scm_cell *) (SCM2PTR (x)))->cdr)
#define SCM_GCCDR(x) SCM_PACK(~1L & SCM_UNPACK (SCM_CDR (x)))
#define SCM_SETCAR(x, v) (SCM_CAR (x) = SCM_PACK (v))
#define SCM_SETCDR(x, v) (SCM_CDR (x) = SCM_PACK (v))
-#define SCM_CARLOC(x) (&SCM_CAR (x))
-#define SCM_CDRLOC(x) (&SCM_CDR (x))
-
-#define SCM_SETAND_CAR(x, y)\
- (SCM_CAR (x) = SCM_PACK (SCM_UNPACK (SCM_CAR (x)) & (y)))
-#define SCM_SETAND_CDR(x, y)\
- (SCM_CDR (x) = SCM_PACK (SCM_UNPACK (SCM_CDR (x)) & (y)))
-#define SCM_SETOR_CAR(x, y)\
- (SCM_CAR (x) = SCM_PACK (SCM_UNPACK (SCM_CAR (x)) | (y)))
-#define SCM_SETOR_CDR(x, y)\
- (SCM_CDR (x) = SCM_PACK (SCM_UNPACK (SCM_CDR (x)) | (y)))
-
#define SCM_CAAR(OBJ) SCM_CAR (SCM_CAR (OBJ))
#define SCM_CDAR(OBJ) SCM_CDR (SCM_CAR (OBJ))
#define SCM_CADR(OBJ) SCM_CAR (SCM_CDR (OBJ))
@@ -185,77 +92,6 @@ typedef SCM huge *SCMPTR;
#define SCM_CADDDR(OBJ) SCM_CAR (SCM_CDR (SCM_CDR (SCM_CDR (OBJ))))
#define SCM_CDDDDR(OBJ) SCM_CDR (SCM_CDR (SCM_CDR (SCM_CDR (OBJ))))
-/* Multi-cells
- */
-
-#define SCM_CELL_WORD_LOC(x, n) (&SCM_CELL_WORD (x, n))
-
-/* the allocated thing: The car of newcells are set to
- scm_tc16_allocated to avoid the fragile state of newcells wrt the
- gc. If it stays as a freecell, any allocation afterwards could
- cause the cell to go back on the freelist, which will bite you
- sometime afterwards */
-
-#ifdef GUILE_DEBUG_FREELIST
-#define SCM_NEWCELL(_into) do { _into = scm_debug_newcell (); } while (0)
-#define SCM_NEWCELL2(_into) do { _into = scm_debug_newcell2 (); } while (0)
-#else
-#ifdef GUILE_NEW_GC_SCHEME
-/* When we introduce POSIX threads support, every thread will have
- a freelist of its own. Then it won't any longer be necessary to
- initialize cells with scm_tc16_allocated. */
-#define SCM_NEWCELL(_into) \
- do { \
- if (SCM_IMP (scm_freelist)) \
- _into = scm_gc_for_newcell (&scm_master_freelist, \
- &scm_freelist); \
- else \
- { \
- _into = scm_freelist; \
- scm_freelist = SCM_CDR (scm_freelist);\
- SCM_SETCAR (_into, scm_tc16_allocated); \
- } \
- } while(0)
-#define SCM_NEWCELL2(_into) \
- do { \
- if (SCM_IMP (scm_freelist2)) \
- _into = scm_gc_for_newcell (&scm_master_freelist2, \
- &scm_freelist2); \
- else \
- { \
- _into = scm_freelist2; \
- scm_freelist2 = SCM_CDR (scm_freelist2);\
- SCM_SETCAR (_into, scm_tc16_allocated); \
- } \
- } while(0)
-#else /* GUILE_NEW_GC_SCHEME */
-#define SCM_NEWCELL(_into) \
- do { \
- if (SCM_IMP (scm_freelist.cells)) \
- _into = scm_gc_for_newcell (&scm_freelist);\
- else \
- { \
- _into = scm_freelist.cells; \
- scm_freelist.cells = SCM_CDR (scm_freelist.cells);\
- SCM_SETCAR (_into, scm_tc16_allocated); \
- ++scm_cells_allocated; \
- } \
- } while(0)
-#define SCM_NEWCELL2(_into) \
- do { \
- if (SCM_IMP (scm_freelist2.cells)) \
- _into = scm_gc_for_newcell (&scm_freelist2);\
- else \
- { \
- _into = scm_freelist2.cells; \
- scm_freelist2.cells = SCM_CDR (scm_freelist2.cells);\
- SCM_SETCAR (_into, scm_tc16_allocated); \
- scm_cells_allocated += 2; \
- } \
- } while(0)
-#endif /* GUILE_NEW_GC_SCHEME */
-#endif
-
extern SCM scm_cons (SCM x, SCM y);