SCM_NEGATE_BOOL, SCM_BOOLP): Deprecated by moving into "deprecated.h".
Replaced all uses with scm_is_false, scm_is_true, scm_from_bool, and
scm_is_bool, respectively.
scm_i_unmemoize_expr for unmemoizing a memoized object holding a
single memoized expression.
* debug.c (memoized_print): Don't try to unmemoize the memoized
object, since we can't know whether it holds a single expression
or a body.
(scm_mem_to_proc): Removed check for lambda expression, since it
was moot anyway. Whoever uses these functions for debugging
purposes should know what they do: Creating invalid memoized code
will cause crashes, independent of whether this check is present
or not.
(scm_proc_to_mem): Take the closure's code as it is and don't
append a SCM_IM_LAMBDA isym. To allow easier debugging, the
memoized code should not be modified.
* debug.[ch] (scm_unmemoize, scm_i_unmemoize_expr): Removed
scm_unmemoize from public use, but made scm_i_unmemoize_expr
available as a guile internal function instead. However,
scm_i_unmemoize_expr will only work on memoized objects that hold
a single memoized expression. It won't work with bodies.
* debug.c (scm_procedure_source), macros.c (macro_print), print.c
(scm_iprin1): Call scm_i_unmemocopy_body for unmemoizing a body,
i. e. a list of expressions.
* eval.c (unmemoize_exprs): Drop internal body markers from the
output during unmemoization.
* eval.[ch] (scm_unmemocopy, scm_i_unmemocopy_expr,
scm_i_unmemocopy_body): Removed scm_unmemocopy from public use,
but made scm_i_unmemocopy_expr and scm_i_unmemocopy_body available
as guile internal functions instead. scm_i_unmemoize_expr will
only work on a single memoized expression, while
scm_i_unmemocopy_body will only work on bodies.
copy lists that are known to be finite (though not necessarily
proper).
* debug.c (scm_procedure_source): Don't have scm_unmemocopy treat
a closure's argument list like an expression of a body.
* eval.c (unmemoize_expression, unmemoize_exprs, unmemoize_and,
unmemoize_begin, unmemoize_case, unmemoize_cond, unmemoize_delay,
unmemoize_do, unmemoize_if, unmemoize_lambda, unmemoize_let,
unmemoize_letrec, unmemoize_letstar, unmemoize_or,
unmemoize_set_x, unmemoize_apply, unmemoize_atcall_cc,
unmemoize_at_call_with_values, unmemoize_future, sym_atslot_ref,
unmemoize_atslot_ref, sym_atslot_set_x, unmemoize_atslot_set_x,
unmemoize_builtin_macro): New static functions and symbols.
(scm_unmemocopy): Rewritten in terms of the above. scm_unmemocopy
now has a slightly different meaning: The memoized form that is
receives as its argument is now interpreted as a sequence of
expressions from a body.
(unmemocar, scm_unmemocar): Since the whole functionality of
unmemocar and scm_unmemocar is not needed any more, scm_unmemocar
has its old content back and is deprecated, while unmemocar has
been removed.
(SCM_BIT7): Removed.
(CEVAL): For unmemoizing a single expression, call
unmemoize_expression instead of scm_unmemocopy, which now expects
a sequence of body expressions. Eliminated unnecessary empty
environment frame when executing let* forms. Eliminated
unmemoization step from evaluator.
misplaced syntactic keywords. This will not work unless guile's
defmacro feature is deprecated.
(scm_m_case): Fixed a bug that caused the list of labels to grow
with every case form.
(scm_m_quote, scm_m_atslot_ref, SCM_CEVAL): Changed the byte code
representation of 'quote' and '@slot-ref' to an improper list.
This reduces execution time, the number of cells used to hold the
memoized code, and thus also reduces garbage collection time.
(scm_unmemocopy): Use unmemoize_quote for quote expressions.
(SCM_CEVAL): Changed macro handling to also work with macros that
return improper lists. Added an assertion, that the code returned
by a macro transformer will not lead to cycles in the memoized
code.
file.
* eval.c (scm_ilookup, scm_unbound_variable_key,
error_unbound_variable, scm_lookupcar1, scm_lookupcar): Moved to
the definitions used for execution, since that's where they will
belong to later.
throughout guile, has not been part of an official release yet,
and the concept of sloppy predicates has never been a good idea.
(SCM_FRACTION_NUMERATOR, SCM_FRACTION_DENOMINATOR,
SCM_FRACTION_SET_NUMERATOR, SCM_FRACTION_SET_DENOMINATOR):
Simplified.
explicit what happens.
* guardians.c (TCONC_IN): Use SCM_SET_CELL_OBJECT_x rather than
SCM_SET_CELL_WORD_x when writing scheme objets to cell elements.
(scm_m_define): Change order to first create binding and
evaluating the expression afterwards.
(scm_m_set_x): Memoize complete set! expression. Only leave
symbols if no binding exists at memoization time. Throw error if
assigning to a syntactic keyword.
(lazy_memoize_variable): New function.
(CEVAL): When execution set!, perform lazy memoization if
unmemoized symbol is detected.
* libguile/modules.c (module_variable): Return variables with
unbound value.
* libguile/tags.h: Fix comment.
* test-suite/tests/syntax.test: Add test case to check the correct
handling of define expressions.
* deprecated.h (SCM_IFRINC, SCM_ICDR, SCM_IFRAME, SCM_IDIST,
SCM_ICDRP), eval.c (SCM_IFRINC, SCM_ICDR, SCM_IFRAME, SCM_IDIST,
SCM_ICDRP), eval.h (SCM_ICDR, SCM_IFRINC, SCM_IFRAME, SCM_IDIST,
SCM_ICDRP): Deprecated and added to deprecated.h. Moved from
eval.h to eval.c.
* deprecated.c (scm_isymnames), deprecated.h (scm_isymnames,
SCM_ISYMNUM, SCM_ISYMCHARS), eval.c (SCM_ISYMNUM, isymnames,
scm_unmemocopy, CEVAL), print.c (scm_isymnames), tags.h
(SCM_ISYMNUM, scm_isymnames, SCM_ISYMCHARS): Deprecated
scm_isymnames, SCM_ISYMNUM and SCM_ISYMCHARS and added to
deprecated.[hc]. Moved scm_isymnames from print.c to eval.c and
renamed to isymnames. Moved SCM_ISYMNUM from tags.h to eval.c and
renamed to ISYMNUM.
* eval.c (scm_i_print_iloc, scm_i_print_isym), eval.h
(scm_i_print_iloc, scm_i_print_isym), print.c (scm_iprin1):
Extracted printing of ilocs and isyms to guile internal functions
scm_i_print_iloc, scm_i_print_isym of eval.c.
scm_tc8_isym): Renamed scm_tags to scm_tc8_tags. Renamed
scm_tc9_flag to scm_tc8_flag. Introduced new identifier
scm_tc8_isym. Defined tc8-tags relative to scm_tc3_imm24.
Defined the tc8-tag for flags to be 0x04, which will mean that
SCM_BOOL_F will also have the value 0x04 instead of 0x013c. Due
to the reduced number of bits and the simpler bit pattern for
SCM_BOOL_F, certain machines may be able to use more efficient
processor instructions to deal with SCM_BOOL_F.
(SCM_ITAG9, SCM_MAKE_ITAG9, SCM_ITAG9_DATA): Removed. These have
never been defined in a released version, thus no need to
deprecate them.
(SCM_IFLAGP, SCM_MAKIFLAG, SCM_IFLAGNUM): Flags now use tc8
instead of tc9 tags.
(SCM_ISYMP, SCM_MAKISYM, SCM_ISYMNUM): Isyms now use tc8 instead
of tc9 tags.
(SCM_MAKSPCSYM): Removed. It is almost impossible that user code
could have used this definition.
(SCM_IM_AND, SCM_IM_BEGIN, SCM_IM_CASE, SCM_IM_COND, SCM_IM_DO,
SCM_IM_IF, SCM_IM_LAMBDA, SCM_IM_LET, SCM_IM_LETSTAR,
SCM_IM_LETREC, SCM_IM_OR, SCM_IM_QUOTE, SCM_IM_SET_X): Now encoded
as isyms, as special isyms don't exist any more.
before converting to unsigned int. This prevents hi-bit ascii as
being converted large integers.
(string_upcase_x): change caller for scm_{up,down}case to
scm_c_{up,down}case
* chars.h (scm_init_chars): change scm_{upcase,downcase} to
scm_c_{up,down}case.
(SCM_MAKE_CHAR): add (unsigned char) cast. This prevents havoc
when hi-bit ASCII is subjected to SCM_MAKE_CHAR().