mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-16 16:50:21 +02:00
*** empty log message ***
This commit is contained in:
parent
950cc72b8f
commit
16d35552c4
7 changed files with 118 additions and 38 deletions
|
@ -1,3 +1,100 @@
|
||||||
|
2000-03-14 Mikael Djurfeldt <mdj@thalamus.nada.kth.se>
|
||||||
|
|
||||||
|
* Makefile.am (libguile_la_LDFLAGS): Bumped library version
|
||||||
|
number.
|
||||||
|
|
||||||
|
* __scm.h eq.c, eval.c, gc.c, hc.h, gh_data, hash.c, numbers.c,
|
||||||
|
numbers.h, objects.c, ramap.c, random.c, unif.c, unif.h: Extensive
|
||||||
|
rewrite of handling of real and complex numbers.
|
||||||
|
(SCM_FLOATS, SCM_SINGLES): These #ifdef conditionals have been
|
||||||
|
removed along with the support for floats. (Float vectors are
|
||||||
|
still supported.)
|
||||||
|
|
||||||
|
* tags.h (scm_tcs_bignums): Removed.
|
||||||
|
(scm_tc16_bigpos, scm_tc16_bigneg): Replaced by scm_tc16_big.
|
||||||
|
Use SCM_BIGSIGN(x) to test for sign!
|
||||||
|
(scm_tc16_big): The new bignum type.
|
||||||
|
(SCM_REAL_PART, SCM_IMAG_PART): Removed.
|
||||||
|
|
||||||
|
* numbers.h (SCM_BIGSIGN): Sign moved to bit 16.
|
||||||
|
(scm_makdbl): Deprecated.
|
||||||
|
(SCM_NEWREAL, SCM_NEWCOMPLEX): New macros.
|
||||||
|
(SCM_SINGP): Deprecated.
|
||||||
|
(SCM_FLO): Removed.
|
||||||
|
(SCM_INEXP, SCM_CPLXP): Deprecated.
|
||||||
|
(SCM_INEXACTP, SCM_COMPLEXP): New macros.
|
||||||
|
(SCM_COMPLEX_REAL, SCM_COMPLEX_IMAG): Renamed from
|
||||||
|
SCM_REAL, SCM_IMAG (and now only valid for complex numbers).
|
||||||
|
(SCM_REAL, SCM_IMAG): New, *deprecated*, selectors which work both
|
||||||
|
for doubles and complex numbers.
|
||||||
|
(SCM_REAL_VALUE): New selector for doubles.
|
||||||
|
(scm_double_t, scm_complex_t): New types.
|
||||||
|
(scm_dbl): Removed.
|
||||||
|
|
||||||
|
* numbers.c (scm_floprint, scm_floequal): Removed.
|
||||||
|
(scm_print_real, scm_print_complex, scm_real_equalp,
|
||||||
|
scm_complex_equalp): New functions.
|
||||||
|
|
||||||
|
* unif.c (scm_makflo): Removed.
|
||||||
|
|
||||||
|
* smob.h (SCM_SMOB_PREDICATE): New macro.
|
||||||
|
(SCM_NEWSMOB2, SCM_RETURN_NEWSMOB2, SCM_NEWSMOB3,
|
||||||
|
SCM_RETURN_NEWSMOB3): New macros.
|
||||||
|
|
||||||
|
1999-11-21 Michael Livshin <mlivshin@bigfoot.com>
|
||||||
|
|
||||||
|
The following changes implement primitive support for double cells
|
||||||
|
(i.e. four-word cells) and change the representation of some
|
||||||
|
things to multi-cells instead of cons+malloc. (Applied and
|
||||||
|
modified by mdj.)
|
||||||
|
|
||||||
|
* pairs.h (SCM_NEWCELL2): double-cell variants of SCM_NEWCELL.
|
||||||
|
(SCM_CELL_WORD, SCM_CELL_WORDLOC, SCM_SET_CELL_WORD): primitive
|
||||||
|
multi-cell access macros (used by the ones below).
|
||||||
|
(SCM_CELL_WORD[0-3], SCM_SET_CELL_WORD[0-3]): multi-cell access
|
||||||
|
macros.
|
||||||
|
|
||||||
|
* gc.c (scm_freelist2): multi-cell freelists.
|
||||||
|
(inner_map_free_list): map_free_list, parameterized on ncells.
|
||||||
|
"nn cells in segment mm" was misleading for ncells > 1; changed to
|
||||||
|
"objects". still print cells too, though.
|
||||||
|
(scm_map_free_list): rewritten using inner_map_free_list.
|
||||||
|
(scm_check_freelist): get freelist as parameter, since now we have
|
||||||
|
more than one.
|
||||||
|
(scm_debug_newcell2): multi-cell variants of
|
||||||
|
scm_debug_newcell.
|
||||||
|
(scm_gc_for_newcell): take ncells and freelist pointer as
|
||||||
|
parameters.
|
||||||
|
(scm_gc_mark): add case for tc7_pws (procedures with setters are
|
||||||
|
now double cells).
|
||||||
|
(scm_gc_sweep): don't free the float data, since it's not malloced
|
||||||
|
anymore.
|
||||||
|
(init_heap_seg): didn't understand what n_new_objects stood for,
|
||||||
|
so changed to n_new_cells.
|
||||||
|
(make_initial_segment): new function, makes an initial segment
|
||||||
|
according to given ncells.
|
||||||
|
(scm_init_storage): call make_initial_segment, for ncells={1,2,3}.
|
||||||
|
|
||||||
|
* numbers.c (scm_makdbl): no malloc'ing needed, so the
|
||||||
|
{DEFER,ALLOW}_INTS thing removed.
|
||||||
|
|
||||||
|
* numbers.h (struct scm_dbl): changed to represent a double cell,
|
||||||
|
with the number in the second half.
|
||||||
|
(struct scm_cplx): new, represents a complex number as a triple
|
||||||
|
cell.
|
||||||
|
|
||||||
|
* dynwind.c: changed the wind-guards representation to double
|
||||||
|
cell.
|
||||||
|
|
||||||
|
* procs.c, procs.h: changed the procedure-with-setter representation
|
||||||
|
to double cell.
|
||||||
|
|
||||||
|
* async.c, async.h: made async representation a double cell.
|
||||||
|
|
||||||
|
* guardians.c: made guardian representation a triple cell.
|
||||||
|
|
||||||
|
* dynl.c: made dynamic_obj representation a double cell.
|
||||||
|
|
||||||
2000-03-13 Gary Houston <ghouston@arglist.com>
|
2000-03-13 Gary Houston <ghouston@arglist.com>
|
||||||
|
|
||||||
* ports.c (flush_void_port): renamed to flush_port_default.
|
* ports.c (flush_void_port): renamed to flush_port_default.
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
* These may be defined or undefined.
|
* These may be defined or undefined.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define GUILE_DEBUG_FREELIST
|
/* #define GUILE_DEBUG_FREELIST */
|
||||||
|
|
||||||
/* If the compile FLAG `SCM_CAUTIOUS' is #defined then the number of
|
/* If the compile FLAG `SCM_CAUTIOUS' is #defined then the number of
|
||||||
* arguments is always checked for application of closures. If the
|
* arguments is always checked for application of closures. If the
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
#ifndef GCH
|
#ifndef GCH
|
||||||
#define GCH
|
#define GCH
|
||||||
/* Copyright (C) 1995, 1996, 1998, 1999 Free Software Foundation, Inc.
|
/* Copyright (C) 1995, 96, 98, 99, 2000 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
|
||||||
|
@ -71,6 +71,7 @@ extern int scm_gc_heap_lock;
|
||||||
extern unsigned long scm_heap_size;
|
extern unsigned long scm_heap_size;
|
||||||
extern SCM_CELLPTR scm_heap_org;
|
extern SCM_CELLPTR scm_heap_org;
|
||||||
extern SCM scm_freelist;
|
extern SCM scm_freelist;
|
||||||
|
extern SCM scm_freelist2;
|
||||||
extern unsigned long scm_gc_cells_collected;
|
extern unsigned long scm_gc_cells_collected;
|
||||||
extern unsigned long scm_gc_malloc_collected;
|
extern unsigned long scm_gc_malloc_collected;
|
||||||
extern unsigned long scm_gc_ports_collected;
|
extern unsigned long scm_gc_ports_collected;
|
||||||
|
@ -81,6 +82,7 @@ extern unsigned long scm_mtrigger;
|
||||||
#ifdef GUILE_DEBUG_FREELIST
|
#ifdef GUILE_DEBUG_FREELIST
|
||||||
extern SCM scm_map_free_list (void);
|
extern SCM scm_map_free_list (void);
|
||||||
extern SCM scm_debug_newcell (void);
|
extern SCM scm_debug_newcell (void);
|
||||||
|
extern SCM scm_debug_newcell2 (void);
|
||||||
extern SCM scm_gc_set_debug_check_freelist_x (SCM flag);
|
extern SCM scm_gc_set_debug_check_freelist_x (SCM flag);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -93,7 +95,7 @@ extern void scm_gc_start (const char *what);
|
||||||
extern void scm_gc_end (void);
|
extern void scm_gc_end (void);
|
||||||
extern SCM scm_gc (void);
|
extern SCM scm_gc (void);
|
||||||
extern void scm_gc_for_alloc (int ncells, SCM * freelistp);
|
extern void scm_gc_for_alloc (int ncells, SCM * freelistp);
|
||||||
extern SCM scm_gc_for_newcell (void);
|
extern SCM scm_gc_for_newcell (int ncells, SCM * freelistp);
|
||||||
extern void scm_igc (const char *what);
|
extern void scm_igc (const char *what);
|
||||||
extern void scm_gc_mark (SCM p);
|
extern void scm_gc_mark (SCM p);
|
||||||
extern void scm_mark_locations (SCM_STACKITEM x[], scm_sizet n);
|
extern void scm_mark_locations (SCM_STACKITEM x[], scm_sizet n);
|
||||||
|
@ -111,6 +113,7 @@ extern int scm_return_first_int (int x, ...);
|
||||||
extern SCM scm_permanent_object (SCM obj);
|
extern SCM scm_permanent_object (SCM obj);
|
||||||
extern SCM scm_protect_object (SCM obj);
|
extern SCM scm_protect_object (SCM obj);
|
||||||
extern SCM scm_unprotect_object (SCM obj);
|
extern SCM scm_unprotect_object (SCM obj);
|
||||||
extern int scm_init_storage (scm_sizet init_heap_size);
|
extern int scm_init_storage (scm_sizet init_heap_size,
|
||||||
|
scm_sizet init_heap2_size);
|
||||||
extern void scm_init_gc (void);
|
extern void scm_init_gc (void);
|
||||||
#endif /* GCH */
|
#endif /* GCH */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 1995,1996,1997,1998 Free Software Foundation, Inc.
|
/* Copyright (C) 1995,1996,1997,1998, 2000 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
|
||||||
|
@ -114,13 +114,9 @@ SCM gh_chars2byvect(char *d, int n);
|
||||||
SCM gh_shorts2svect(short *d, int n);
|
SCM gh_shorts2svect(short *d, int n);
|
||||||
SCM gh_longs2ivect(long *d, int n);
|
SCM gh_longs2ivect(long *d, int n);
|
||||||
SCM gh_ulongs2uvect(unsigned long *d, int n);
|
SCM gh_ulongs2uvect(unsigned long *d, int n);
|
||||||
#ifdef SCM_FLOATS
|
|
||||||
#ifdef SCM_SINGLES
|
|
||||||
SCM gh_floats2fvect(float *d, int n);
|
SCM gh_floats2fvect(float *d, int n);
|
||||||
#endif
|
|
||||||
SCM gh_doubles2dvect(double *d, int n);
|
SCM gh_doubles2dvect(double *d, int n);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
SCM gh_doubles2scm(double *d, int n);
|
SCM gh_doubles2scm(double *d, int n);
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 1995,1996,1997,1998, 1999 Free Software Foundation, Inc.
|
/* Copyright (C) 1995,1996,1997,1998, 1999, 2000 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
|
||||||
* the Free Software Foundation; either version 2, or (at your option)
|
* the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
@ -203,8 +203,6 @@ gh_ulongs2uvect (unsigned long *d, int n)
|
||||||
return makvect (m, n, scm_tc7_uvect);
|
return makvect (m, n, scm_tc7_uvect);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SCM_FLOATS
|
|
||||||
#ifdef SCM_SINGLES
|
|
||||||
SCM
|
SCM
|
||||||
gh_floats2fvect (float *d, int n)
|
gh_floats2fvect (float *d, int n)
|
||||||
{
|
{
|
||||||
|
@ -212,7 +210,6 @@ gh_floats2fvect (float *d, int n)
|
||||||
memcpy (m, d, n * sizeof (float));
|
memcpy (m, d, n * sizeof (float));
|
||||||
return makvect (m, n, scm_tc7_fvect);
|
return makvect (m, n, scm_tc7_fvect);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
SCM
|
SCM
|
||||||
gh_doubles2dvect (double *d, int n)
|
gh_doubles2dvect (double *d, int n)
|
||||||
|
@ -222,7 +219,6 @@ gh_doubles2dvect (double *d, int n)
|
||||||
return makvect (m, n, scm_tc7_dvect);
|
return makvect (m, n, scm_tc7_dvect);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
/* data conversion scheme->C */
|
/* data conversion scheme->C */
|
||||||
int
|
int
|
||||||
|
@ -430,15 +426,13 @@ gh_scm2floats (SCM obj, float *m)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#ifdef HAVE_ARRAYS
|
#ifdef HAVE_ARRAYS
|
||||||
#ifdef SCM_FLOATS
|
|
||||||
#ifdef SCM_SINGLES
|
|
||||||
case scm_tc7_fvect:
|
case scm_tc7_fvect:
|
||||||
n = SCM_LENGTH (obj);
|
n = SCM_LENGTH (obj);
|
||||||
if (m == 0)
|
if (m == 0)
|
||||||
m = (float *) malloc (n * sizeof (float));
|
m = (float *) malloc (n * sizeof (float));
|
||||||
memcpy (m, (float *) SCM_VELTS (obj), n * sizeof (float));
|
memcpy (m, (float *) SCM_VELTS (obj), n * sizeof (float));
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
case scm_tc7_dvect:
|
case scm_tc7_dvect:
|
||||||
n = SCM_LENGTH (obj);
|
n = SCM_LENGTH (obj);
|
||||||
if (m == 0)
|
if (m == 0)
|
||||||
|
@ -446,7 +440,6 @@ gh_scm2floats (SCM obj, float *m)
|
||||||
for (i = 0; i < n; ++i)
|
for (i = 0; i < n; ++i)
|
||||||
m[i] = ((double *) SCM_VELTS (obj))[i];
|
m[i] = ((double *) SCM_VELTS (obj))[i];
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
scm_wrong_type_arg (0, 0, obj);
|
scm_wrong_type_arg (0, 0, obj);
|
||||||
|
@ -489,8 +482,6 @@ gh_scm2doubles (SCM obj, double *m)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#ifdef HAVE_ARRAYS
|
#ifdef HAVE_ARRAYS
|
||||||
#ifdef SCM_FLOATS
|
|
||||||
#ifdef SCM_SINGLES
|
|
||||||
case scm_tc7_fvect:
|
case scm_tc7_fvect:
|
||||||
n = SCM_LENGTH (obj);
|
n = SCM_LENGTH (obj);
|
||||||
if (m == 0)
|
if (m == 0)
|
||||||
|
@ -498,14 +489,13 @@ gh_scm2doubles (SCM obj, double *m)
|
||||||
for (i = 0; i < n; ++i)
|
for (i = 0; i < n; ++i)
|
||||||
m[i] = ((float *) SCM_VELTS (obj))[i];
|
m[i] = ((float *) SCM_VELTS (obj))[i];
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
case scm_tc7_dvect:
|
case scm_tc7_dvect:
|
||||||
n = SCM_LENGTH (obj);
|
n = SCM_LENGTH (obj);
|
||||||
if (m == 0)
|
if (m == 0)
|
||||||
m = (double*) malloc (n * sizeof (double));
|
m = (double*) malloc (n * sizeof (double));
|
||||||
memcpy (m, SCM_VELTS (obj), n * sizeof (double));
|
memcpy (m, SCM_VELTS (obj), n * sizeof (double));
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
scm_wrong_type_arg (0, 0, obj);
|
scm_wrong_type_arg (0, 0, obj);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 1995,1996,1997,1998,1999 Free Software Foundation, Inc.
|
/* Copyright (C) 1995,1996,1997,1998,1999, 2000 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
|
||||||
|
@ -219,12 +219,6 @@ check_config (void)
|
||||||
if (HEAP_SEG_SIZE != j)
|
if (HEAP_SEG_SIZE != j)
|
||||||
fixconfig ("reduce", "size of HEAP_SEG_SIZE", 0);
|
fixconfig ("reduce", "size of HEAP_SEG_SIZE", 0);
|
||||||
|
|
||||||
#ifdef SCM_SINGLES
|
|
||||||
if (sizeof (float) != sizeof (long))
|
|
||||||
fixconfig (remsg, "SCM_SINGLES", 0);
|
|
||||||
#endif /* def SCM_SINGLES */
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef SCM_BIGDIG
|
#ifdef SCM_BIGDIG
|
||||||
if (2 * SCM_BITSPERDIG / SCM_CHAR_BIT > sizeof (long))
|
if (2 * SCM_BITSPERDIG / SCM_CHAR_BIT > sizeof (long))
|
||||||
fixconfig (remsg, "SCM_BIGDIG", 0);
|
fixconfig (remsg, "SCM_BIGDIG", 0);
|
||||||
|
@ -465,7 +459,7 @@ scm_boot_guile_1 (SCM_STACKITEM *base, struct main_func_closure *closure)
|
||||||
scm_ports_prehistory ();
|
scm_ports_prehistory ();
|
||||||
scm_smob_prehistory ();
|
scm_smob_prehistory ();
|
||||||
scm_tables_prehistory ();
|
scm_tables_prehistory ();
|
||||||
scm_init_storage (0);
|
scm_init_storage (0, 0);
|
||||||
scm_init_subr_table ();
|
scm_init_subr_table ();
|
||||||
scm_init_root ();
|
scm_init_root ();
|
||||||
#ifdef USE_THREADS
|
#ifdef USE_THREADS
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 1995, 1996, 1998, 1999 Free Software Foundation, Inc.
|
/* Copyright (C) 1995, 1996, 1998, 1999, 2000 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
|
||||||
|
@ -266,14 +266,14 @@ scm_smob_prehistory ()
|
||||||
scm_make_smob_type_mfpe ("free", 0,
|
scm_make_smob_type_mfpe ("free", 0,
|
||||||
NULL, NULL, freeprint, NULL);
|
NULL, NULL, freeprint, NULL);
|
||||||
|
|
||||||
scm_make_smob_type_mfpe ("flo", 0, /* freed in gc */
|
scm_make_smob_type_mfpe ("big", 0, /* freed in gc */
|
||||||
NULL, NULL, scm_floprint, scm_floequal);
|
|
||||||
|
|
||||||
scm_make_smob_type_mfpe ("bigpos", 0, /* freed in gc */
|
|
||||||
NULL, NULL, scm_bigprint, scm_bigequal);
|
NULL, NULL, scm_bigprint, scm_bigequal);
|
||||||
|
|
||||||
scm_make_smob_type_mfpe ("bigneg", 0,
|
scm_make_smob_type_mfpe ("real", 0, /* freed in gc */
|
||||||
NULL, NULL, scm_bigprint, scm_bigequal);
|
NULL, NULL, scm_print_real, scm_real_equalp);
|
||||||
|
|
||||||
scm_make_smob_type("allocated", 0);
|
scm_make_smob_type_mfpe ("complex", 0, /* freed in gc */
|
||||||
|
NULL, NULL, scm_print_complex, scm_complex_equalp);
|
||||||
|
|
||||||
|
scm_make_smob_type ("allocated", 0);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue