(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.
from the memoization part of the file.
(copy_tree): New static function
(scm_copy_tree): Rewritten to fix two kinds or bugs: First, cyclic
structures are detected now and will lead to an exception instead
of forcing guile to run in an endless loop, using up all the
system's memory. Second, arrays in the cdr of an improper list
are now copied. See the new test cases in eval.test.
* test-suite/tests/eval.test: Added tests which reflect the recent
fixes to copy-tree.
for things like "1/2" and "#e1.2".
("inexact->exact"): Expect overflow error for infs and nans.
* tests/fractions.test: New file from Bill Schottstaedt. Thanks!
* tests/bit-operations.test (fixnum-bit): Round the result so that
fixnum-bit really is an integer.
(canonicalize_define, scm_m_define): The check for a bad
expression is performed in canonicalize_define now.
(try_macro_lookup, expand_user_macros, is_system_macro_p): New
static helper functions for m_expand_body.
(m_expand_body): Use ASSERT_SYNTAX to signal syntax errors. Only
expand user defined macros. Fixed handling of the definition/
expression boundary. Fixed handling of definitions grouped with
'begin. Use canonicalize_define to expand definitions.
* test-suite/tests/syntax.test: Tests that check for the correct
handling of internal defines with begin work now.
(s_body): Removed.
(scm_m_expand_body): Fixed core dump when passing a body with
defines, but without expressions (see additions to syntax.test).
Use ASSERT_SYNTAX to signal syntax errors.
* test-suite/tests/syntax.test (exception:missing-body-expr): New.
Renamed section 'define' to 'top-level define' and added a new
section 'internal define' with some tests.
(s_empty_combination, error_unbound_variable): New static
identifiers.
(SCM_VALIDATE_NON_EMPTY_COMBINATION, SCM_EVALIM2, scm_lookupcar1):
Use ASSERT_SYNTAX, syntax_error or error_unbound_variable to
signal syntax errors.
(SCM_CEVAL): Separated handling of evaluator bytecodes and other
scheme objects.
* test-suite/tests/syntax.test (exception:missing/extra-expr-misc):
Removed.
(exception:illegal-empty-combination): New.
(exception:missing/extra-expr): Unified capitalization.
Adapted test for '()' to the new way of error reporting.