The msymbol slots are now a field of scm_bits_t values.

This commit is contained in:
Dirk Herrmann 2000-04-12 12:48:11 +00:00
commit cf551a2be9
4 changed files with 33 additions and 15 deletions

View file

@ -1,3 +1,20 @@
2000-04-12 Dirk Herrmann <D.Herrmann@tu-bs.de>
* gc.c (scm_gc_sweep): Simplify the computation of freed memory
size for msymbols.
* symbols.h (SCM_SLOTS, SCM_SYMBOL_FUNC, SCM_SYMBOL_PROPS,
SCM_SYMBOL_HASH): The msymbol slots are now a field of scm_bits_t
values.
* symbols.h (SCM_SET_SYMBOL_FUNC, SCM_SET_SYMBOL_PROPS): New
macros.
symbols.c (scm_intern_obarray_soft, msymbolize, scm_symbol_fset_x,
scm_symbol_pset_x): Use them.
* symbols.c (scm_symbol_hash): Unpack to access SCM raw data.
2000-04-12 Dirk Herrmann <D.Herrmann@tu-bs.de>
* ports.c (scm_port_print): The port data is read as raw data.
@ -16,7 +33,7 @@
* objects.h (SCM_SET_ENTITY_PROCEDURE): New macro.
* objects.c (scm_set_object_procedure_x): Use it.
objects.c (scm_set_object_procedure_x): Use it.
* struct.c (scm_struct_init): Unused variable 'data' removed.
@ -31,7 +48,7 @@
* struct.h (SCM_SET_STRUCT_LAYOUT): New macro.
* struct.c (scm_make_vtable_vtable): Use it.
struct.c (scm_make_vtable_vtable): Use it.
2000-04-11 Dirk Herrmann <D.Herrmann@tu-bs.de>

View file

@ -1747,9 +1747,8 @@ scm_gc_sweep ()
case scm_tc7_msymbol:
if (SCM_GC8MARKP (scmptr))
goto c8mrkcontinue;
m += ( SCM_LENGTH (scmptr)
+ 1
+ sizeof (SCM) * ((SCM *)SCM_CHARS (scmptr) - SCM_SLOTS(scmptr)));
m += (SCM_LENGTH (scmptr) + 1
+ (SCM_CHARS (scmptr) - (char *) SCM_SLOTS (scmptr)));
scm_must_free ((char *)SCM_SLOTS (scmptr));
break;
case scm_tc7_contin:

View file

@ -289,7 +289,7 @@ scm_intern_obarray_soft (const char *name,scm_sizet len,SCM obarray,int softness
SCM_SETLENGTH (lsym, (long) len, scm_tc7_msymbol);
SCM_SYMBOL_HASH (lsym) = scm_hash;
SCM_SYMBOL_PROPS (lsym) = SCM_EOL;
SCM_SET_SYMBOL_PROPS (lsym, SCM_EOL);
if (SCM_FALSEP (obarray))
{
SCM answer;
@ -704,7 +704,7 @@ msymbolize (SCM s)
SCM_SETLENGTH (s, SCM_LENGTH (s), scm_tc7_msymbol);
SCM_SETCDR (string, SCM_EOL);
SCM_SETCAR (string, SCM_EOL);
SCM_SYMBOL_PROPS (s) = SCM_EOL;
SCM_SET_SYMBOL_PROPS (s, SCM_EOL);
/* If it's a tc7_ssymbol, it comes from scm_symhash */
SCM_SYMBOL_HASH (s) = scm_strhash (SCM_UCHARS (s),
(scm_sizet) SCM_LENGTH (s),
@ -752,7 +752,7 @@ SCM_DEFINE (scm_symbol_fset_x, "symbol-fset!", 2, 0, 0,
if (SCM_TYP7(s) == scm_tc7_ssymbol)
msymbolize (s);
SCM_ALLOW_INTS;
SCM_SYMBOL_FUNC (s) = val;
SCM_SET_SYMBOL_FUNC (s, val);
return SCM_UNSPECIFIED;
}
#undef FUNC_NAME
@ -767,7 +767,7 @@ SCM_DEFINE (scm_symbol_pset_x, "symbol-pset!", 2, 0, 0,
SCM_DEFER_INTS;
if (SCM_TYP7(s) == scm_tc7_ssymbol)
msymbolize (s);
SCM_SYMBOL_PROPS (s) = val;
SCM_SET_SYMBOL_PROPS (s, val);
SCM_ALLOW_INTS;
return SCM_UNSPECIFIED;
}
@ -783,7 +783,7 @@ SCM_DEFINE (scm_symbol_hash, "symbol-hash", 1, 0, 0,
SCM_VALIDATE_SYMBOL (1,s);
if (SCM_TYP7(s) == scm_tc7_ssymbol)
msymbolize (s);
return SCM_MAKINUM ((unsigned long)s ^ SCM_SYMBOL_HASH (s));
return SCM_MAKINUM (SCM_UNPACK (s) ^ SCM_SYMBOL_HASH (s));
}
#undef FUNC_NAME

View file

@ -87,11 +87,13 @@ extern int scm_symhash_dim;
#define SCM_UCHARS(x) ((unsigned char *) (SCM_CELL_WORD_1 (x)))
#define SCM_SETCHARS(x, v) (SCM_SET_CELL_WORD_1 ((x), (scm_bits_t) (v)))
#define SCM_SYMBOL_SLOTS 4
#define SCM_SLOTS(x) ((SCM *) (* ((SCM *) SCM_CHARS (x) - 1)))
#define SCM_SYMBOL_FUNC(X) (SCM_SLOTS (X)[0])
#define SCM_SYMBOL_PROPS(X) (SCM_SLOTS (X)[1])
#define SCM_SYMBOL_HASH(X) (*(unsigned long*) (&SCM_SLOTS (X)[2]))
#define SCM_SYMBOL_SLOTS 4
#define SCM_SLOTS(x) ((scm_bits_t *) (* ((scm_bits_t *) SCM_CHARS (x) - 1)))
#define SCM_SYMBOL_FUNC(X) (SCM_PACK (SCM_SLOTS (X) [0]))
#define SCM_SET_SYMBOL_FUNC(X, v) (SCM_SLOTS (X) [0] = SCM_UNPACK (v))
#define SCM_SYMBOL_PROPS(X) (SCM_PACK (SCM_SLOTS (X) [1]))
#define SCM_SET_SYMBOL_PROPS(X, v) (SCM_SLOTS (X) [1] = SCM_UNPACK (v))
#define SCM_SYMBOL_HASH(X) (SCM_SLOTS (X) [2])
#define SCM_ROSTRINGP(x) (SCM_NIMP(x) && ((SCM_TYP7S(x)==scm_tc7_string) \
|| (SCM_TYP7S(x) == scm_tc7_ssymbol)))