mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 11:50:28 +02:00
* Fixed some bugs, some reported by Matthias Koeppe.
This commit is contained in:
parent
dcb410ec07
commit
bab246f334
7 changed files with 44 additions and 13 deletions
|
@ -1,3 +1,23 @@
|
||||||
|
2001-06-08 Dirk Herrmann <D.Herrmann@tu-bs.de>
|
||||||
|
|
||||||
|
* keywords.c (keyword_print): Don't use SCM_C[AD]R to access
|
||||||
|
keywords. Fix gc protection.
|
||||||
|
|
||||||
|
* objects.c (scm_mcache_lookup_cmethod): Don't use side effecting
|
||||||
|
operations in macro calls.
|
||||||
|
|
||||||
|
* pairs.c (scm_error_pair_access): Avoid recursion.
|
||||||
|
|
||||||
|
Thanks to Matthias Koeppe for reporting the bugs that correspond
|
||||||
|
to the following set of patches.
|
||||||
|
|
||||||
|
* unif.c (scm_bit_set_star_x, scm_bit_invert_x), vectors.h
|
||||||
|
(SCM_BITVEC_REF, SCM_BITVEC_SET, SCM_BITVEC_CLR): Obtain the
|
||||||
|
bitvector base address using SCM_BITVECTOR_BASE.
|
||||||
|
|
||||||
|
* unif.h (SCM_BITVECTOR_BASE): Return the base address as an
|
||||||
|
unsigned long*.
|
||||||
|
|
||||||
2001-06-08 Dirk Herrmann <D.Herrmann@tu-bs.de>
|
2001-06-08 Dirk Herrmann <D.Herrmann@tu-bs.de>
|
||||||
|
|
||||||
* goops.c (SCM_CLASS_REDEF): Removed.
|
* goops.c (SCM_CLASS_REDEF): Removed.
|
||||||
|
|
|
@ -61,10 +61,13 @@ scm_bits_t scm_tc16_keyword;
|
||||||
static int
|
static int
|
||||||
keyword_print (SCM exp, SCM port, scm_print_state *pstate SCM_UNUSED)
|
keyword_print (SCM exp, SCM port, scm_print_state *pstate SCM_UNUSED)
|
||||||
{
|
{
|
||||||
|
SCM symbol = SCM_KEYWORDSYM (exp);
|
||||||
|
|
||||||
scm_puts ("#:", port);
|
scm_puts ("#:", port);
|
||||||
scm_print_symbol_name (SCM_SYMBOL_CHARS (SCM_CDR (exp)) + 1,
|
scm_print_symbol_name (SCM_SYMBOL_CHARS (symbol) + 1,
|
||||||
SCM_SYMBOL_LENGTH (SCM_CDR (exp)) - 1,
|
SCM_SYMBOL_LENGTH (symbol) - 1,
|
||||||
port);
|
port);
|
||||||
|
scm_remember_upto_here_1 (symbol);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 1995, 1996, 1999, 2000 Free Software Foundation, Inc.
|
/* Copyright (C) 1995,1996,1999,2000,2001 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -268,7 +268,8 @@ scm_mcache_lookup_cmethod (SCM cache, SCM args)
|
||||||
/* Compute a hash value */
|
/* Compute a hash value */
|
||||||
long hashset = SCM_INUM (methods);
|
long hashset = SCM_INUM (methods);
|
||||||
long j = n;
|
long j = n;
|
||||||
mask = SCM_INUM (SCM_CAR (z = SCM_CDDR (z)));
|
z = SCM_CDDR (z);
|
||||||
|
mask = SCM_INUM (SCM_CAR (z));
|
||||||
methods = SCM_CADR (z);
|
methods = SCM_CADR (z);
|
||||||
i = 0;
|
i = 0;
|
||||||
ls = args;
|
ls = args;
|
||||||
|
|
|
@ -61,9 +61,16 @@
|
||||||
|
|
||||||
void scm_error_pair_access (SCM non_pair)
|
void scm_error_pair_access (SCM non_pair)
|
||||||
{
|
{
|
||||||
|
static unsigned int running = 0;
|
||||||
SCM message = scm_makfrom0str ("Non-pair accessed with SCM_C[AD]R: `~S´\n");
|
SCM message = scm_makfrom0str ("Non-pair accessed with SCM_C[AD]R: `~S´\n");
|
||||||
scm_simple_format (scm_current_error_port (), message, SCM_LIST1 (non_pair));
|
|
||||||
abort ();
|
if (!running)
|
||||||
|
{
|
||||||
|
running = 1;
|
||||||
|
scm_simple_format (scm_current_error_port (),
|
||||||
|
message, SCM_LIST1 (non_pair));
|
||||||
|
abort ();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1924,10 +1924,10 @@ SCM_DEFINE (scm_bit_set_star_x, "bit-set*!", 3, 0, 0,
|
||||||
SCM_ASSERT (SCM_BITVECTOR_LENGTH (v) == SCM_BITVECTOR_LENGTH (kv), v, SCM_ARG1, FUNC_NAME);
|
SCM_ASSERT (SCM_BITVECTOR_LENGTH (v) == SCM_BITVECTOR_LENGTH (kv), v, SCM_ARG1, FUNC_NAME);
|
||||||
if (SCM_FALSEP (obj))
|
if (SCM_FALSEP (obj))
|
||||||
for (k = (SCM_BITVECTOR_LENGTH (v) + SCM_LONG_BIT - 1) / SCM_LONG_BIT; k--;)
|
for (k = (SCM_BITVECTOR_LENGTH (v) + SCM_LONG_BIT - 1) / SCM_LONG_BIT; k--;)
|
||||||
SCM_UNPACK (SCM_VELTS (v)[k]) &= ~ SCM_UNPACK(SCM_VELTS (kv)[k]);
|
SCM_BITVECTOR_BASE (v) [k] &= ~SCM_BITVECTOR_BASE (kv) [k];
|
||||||
else if (SCM_EQ_P (obj, SCM_BOOL_T))
|
else if (SCM_EQ_P (obj, SCM_BOOL_T))
|
||||||
for (k = (SCM_BITVECTOR_LENGTH (v) + SCM_LONG_BIT - 1) / SCM_LONG_BIT; k--;)
|
for (k = (SCM_BITVECTOR_LENGTH (v) + SCM_LONG_BIT - 1) / SCM_LONG_BIT; k--;)
|
||||||
SCM_UNPACK (SCM_VELTS (v)[k]) |= SCM_UNPACK (SCM_VELTS (kv)[k]);
|
SCM_BITVECTOR_BASE (v) [k] |= SCM_BITVECTOR_BASE (kv) [k];
|
||||||
else
|
else
|
||||||
goto badarg3;
|
goto badarg3;
|
||||||
break;
|
break;
|
||||||
|
@ -2016,7 +2016,7 @@ SCM_DEFINE (scm_bit_invert_x, "bit-invert!", 1, 0, 0,
|
||||||
|
|
||||||
k = SCM_BITVECTOR_LENGTH (v);
|
k = SCM_BITVECTOR_LENGTH (v);
|
||||||
for (k = (k + SCM_LONG_BIT - 1) / SCM_LONG_BIT; k--;)
|
for (k = (k + SCM_LONG_BIT - 1) / SCM_LONG_BIT; k--;)
|
||||||
SCM_UNPACK (SCM_VELTS (v)[k]) = ~SCM_UNPACK (SCM_VELTS (v)[k]);
|
SCM_BITVECTOR_BASE (v) [k] = ~SCM_BITVECTOR_BASE (v) [k];
|
||||||
|
|
||||||
return SCM_UNSPECIFIED;
|
return SCM_UNSPECIFIED;
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,7 +109,7 @@ extern scm_bits_t scm_tc16_array;
|
||||||
#define SCM_SET_UVECTOR_LENGTH(v, l, t) (SCM_SET_CELL_WORD_0 ((v), ((l) << 8) + (t)))
|
#define SCM_SET_UVECTOR_LENGTH(v, l, t) (SCM_SET_CELL_WORD_0 ((v), ((l) << 8) + (t)))
|
||||||
|
|
||||||
#define SCM_BITVECTOR_P(x) (!SCM_IMP (x) && (SCM_TYP7 (x) == scm_tc7_bvect))
|
#define SCM_BITVECTOR_P(x) (!SCM_IMP (x) && (SCM_TYP7 (x) == scm_tc7_bvect))
|
||||||
#define SCM_BITVECTOR_BASE(x) ((void *) (SCM_CELL_WORD_1 (x)))
|
#define SCM_BITVECTOR_BASE(x) ((unsigned long *) (SCM_CELL_WORD_1 (x)))
|
||||||
#define SCM_SET_BITVECTOR_BASE(v, b) (SCM_SET_CELL_WORD_1 ((v), (b)))
|
#define SCM_SET_BITVECTOR_BASE(v, b) (SCM_SET_CELL_WORD_1 ((v), (b)))
|
||||||
#define SCM_BITVECTOR_MAX_LENGTH SCM_I_MAX_LENGTH
|
#define SCM_BITVECTOR_MAX_LENGTH SCM_I_MAX_LENGTH
|
||||||
#define SCM_BITVECTOR_LENGTH(x) (((unsigned long) SCM_CELL_WORD_0 (x)) >> 8)
|
#define SCM_BITVECTOR_LENGTH(x) (((unsigned long) SCM_CELL_WORD_0 (x)) >> 8)
|
||||||
|
|
|
@ -67,9 +67,9 @@
|
||||||
/*
|
/*
|
||||||
bit vectors
|
bit vectors
|
||||||
*/
|
*/
|
||||||
#define SCM_BITVEC_REF(a, i) ((SCM_VECTOR_BASE (a) [(i) / SCM_LONG_BIT] & (1L << ((i) % SCM_LONG_BIT))) ? 1 : 0)
|
#define SCM_BITVEC_REF(a, i) ((SCM_BITVECTOR_BASE (a) [(i) / SCM_LONG_BIT] & (1L << ((i) % SCM_LONG_BIT))) ? 1 : 0)
|
||||||
#define SCM_BITVEC_SET(a, i) SCM_VECTOR_BASE (a) [(i) / SCM_LONG_BIT] |= (1L << ((i) % SCM_LONG_BIT))
|
#define SCM_BITVEC_SET(a, i) SCM_BITVECTOR_BASE (a) [(i) / SCM_LONG_BIT] |= (1L << ((i) % SCM_LONG_BIT))
|
||||||
#define SCM_BITVEC_CLR(a, i) SCM_VECTOR_BASE (a) [(i) / SCM_LONG_BIT] &= ~(1L << ((i) % SCM_LONG_BIT))
|
#define SCM_BITVEC_CLR(a, i) SCM_BITVECTOR_BASE (a) [(i) / SCM_LONG_BIT] &= ~(1L << ((i) % SCM_LONG_BIT))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue