error messages, not the uninitialized string `str'. Love that
typechecking.
* strop.c (scm_substring_move_x): New function, which can handle
arbitrary overlapping substrings.
(substring-move-left!, substring-move-right!): These are
now just synonyms for substring-move!.
* strop.h (scm_substring_move_x): New prototype.
(scm_substring_move_left_x, scm_substring_move_right_x):
#define these as synonyms for scm_substring_move_x.
functions; capitalize the first letter of each word in the
argument string, and downcase the rest.
(scm_string_ci_to_symbol): string->symbol, such that the same
symbol is returned for any argument where the only difference
between strings is in capitalization.
(scm_string_upcase, scm_string_downcase): non-destructive
versions.
* strop.c (scm_substring_move_left_x, scm_substring_move_right_x):
changed to use memmove.
* strop.c (scm_i_index): removed the pos arguments (it's only
called twice, and each time it's SCM_ARG1, SCM_ARG2, SCM_ARG3,
SCM_ARG4).
* strop.h: fixed prototypes.
* * strop.c (scm_substring_move_left_x, scm_substring_move_right_x):
changed to have 5 required args, rather than 2 required, and 3 required
rest args. Also modified to allow str1 & str2 to overlap.
(scm_substring_fill_x): changed to 4 args, rather than 2 args and
2 required rest args.
Libguile should not be exporting random little strings.
* numbers.h (s_bignum): Extern declaration removed.
More const changes from Ken Raeburn.
* numbers.c (scm_s_bignum, fx): Now const.
(scm_logtab, scm_ilentab, s_adjbig): Now static and const.
* numbers.h (scm_s_bignum): Update declaration.
* eval.c (bodycheck): Argument WHAT now points to const.
* snarf.h (SCM_SYNTAX): Name is const.
* eval.c (scm_i_let): Make this globally visible, to avoid dynamic
linking crashes on NetBSD. (Thanks to Ken Raeburn.)
non-zero value if X is finite. (From ISO C 9x standard.)
(scm_inexact_to_exact): Bugfix: Don't pass NaNs to scm_dbl2big.
(Thanks to Jon Trowbridge and Greg Harvey.)
(scm_system_module_env_p): Assume root environment is no lookup
closure is found.
* modules.c, modules.h, eval.c, eval.h (scm_env_top_level,
scm_top_level_env, scm_system_module_env_p): Moved to modules.c.
scm_misc_error when pos is a string. This allows for dispatching
arbitrary error messages with one argument via SCM_ASSERT:
SCM_ASSERT (<cond>, obj, "Undigestable object: %S", <subr>);
(scm_struct_table): Weak key table with auxilliary information for
struct types. Currently used for names and wrapper classes.
(scm_struct_ihashq): Hash function for structs.
(scm_struct_create_handle): Get/create entry in scm_struct_table.
(scm_struct_vtable_name, scm_set_struct_vtable_name_x): Procedures
for accessing names of vtables. The record implementation in
boot-9.scm currently uses the setter to record the name of record
types. When the object system is initialized, it can use this
information to create wrapper classes with suitable names.
(scm_init_struct): Allocate scm_struct_table.
(scm_alloc_struct): Don't initialize scm_struct_i_tag here.
(struct tags are a finite resource and we might want to restrict
the use of tags to vtables only. E.g., Goops only uses tags for
classes.)
(scm_make_struct): Use scm_struct_entity_n_extra_words instead of
magic number 5.
(scm_struct_vtable_tag): Use scm_struct_i_tag instead of magic
number -1.