accessors.
* module/rnrs/conditions.scm (define-condition-type): The generated
accessors should be condition accessors, which know how to unpack a
compound condition; these can then delegate to the appropriate record
accessors.
* test-suite/tests/r6rs-conditions.test: New test case to verify above.
* module/ice-9/boot-9.scm (before-signal-stack): Remove. We're moving
away from using the-last-stack, so this backup copy is not much use.
(top-repl): Don't bother saving a before-signal-stack.
* module/ice-9/debugger/command-loop.scm (debugger-handler): No need to
restore here either.
* module/ice-9/boot-9.scm (*repl-level*): New global fluid, moved here
from (system repl common).
(batch-mode?): Reimplement in terms of *repl-level*.
(ensure-batch-mode!): A replacement for set-batch-mode?!.
* module/ice-9/deprecated.scm (set-batch-mode?!): Deprecate.
* module/ice-9/popen.scm (open-process): Use ensure-batch-mode!.
* module/ice-9/scm-style-repl.scm (error-catching-loop): Override
ensure-batch-mode!.
* module/system/repl/common.scm: Remove *repl-level*.
* module/ice-9/boot-9.scm:
* module/ice-9/deprecated.scm (set-repl-prompt!): Deprecate, but wrap
the (system repl common) implementation instead of the scm-style-repl.
* module/system/repl/common.scm (repl-default-option-set!): New
interface.
(repl-default-prompt-set!): New procedure, sets the 'prompt property
in the default env.
(repl-prompt): Use the 'prompt repl option if available.
* module/ice-9/boot-9.scm:
* module/ice-9/scm-style-repl.scm (scm-repl-silent, assert-repl-silence)
(scm-repl-print-unspecified, assert-repl-print-unspecified)
(scm-repl-verbose, assert-repl-verbosity)
(scm-repl-prompt): Move these definitions here from boot-9.scm.
* module/ice-9/deprecated.scm (assert-repl-silence):
(assert-repl-print-unspecified, assert-repl-verbosity): Deprecated
wrappers for the functions. I'm not sure if the variables can be
helped though.
* module/ice-9/psyntax.scm (chi-body): Whoops, actually render internal
definitions into a letrec* in the right order.
* module/ice-9/psyntax-pp.scm: Regenerate.
* test-suite/tests/syntax.test: Add some letrec* tests.
* module/language/tree-il.scm (tree-il->scheme): Expand out to letrec*,
as it doesn't matter, and this avoids a let when running through the
evaluator.
* module/ice-9/boot-9.scm (make-struct/no-tail): Define a version of
this function. Because during optimization we resolve make-struct to
make-struct/no-tail, we need an implemented make-struct/no-tail if we
are to be able to run scheme made from tree-il->scheme.
* module/language/tree-il/compile-glil.scm (*primcall-ops*): Remove
variable-set case, as there is no "variable-set!" primitive.
(flatten): Add a special hack for variable-set!. Ugly, I know.
* module/language/tree-il/primitives.scm (*effect-free-primitives*): Add
make-struct/no-tail.
(*effect+exception-free-primitives*): Remove make-struct, as it could
raise an exception.
(variable-set!): Remove expansion to variable-set.
* module/ice-9/psyntax.scm (chi-body): Internal definitions are now
letrec* instead of letrec, following the R6RS.
* module/ice-9/psyntax-pp.scm: Regenerated.
* test-suite/tests/tree-il.test ("letrec"): Add some tests.
* module/language/tree-il/compile-glil.scm (flatten): Add support for
compiling letrec* in its unoptimized form.
* module/language/tree-il/fix-letrec.scm (simple-expression?):
Parameterize, so that letrec* will not treat `(car x)' as primitive
(because it could raise an exception).
(partition-vars): Lump unreferenced vars in with complex vars, when
compiling letrec*.
(fix-letrec!): No need to evaluate inits within a let for letrec*.
* module/language/tree-il/primitives.scm
(effect+exception-free-primitive?): New predicate, like
effect-free-primitive?, but excludes accessors that could raise
exceptions.
* libguile/expand.c (expand_letrec_helper): Factor out common code.
(expand_letrec): Use expand_letrec_helper.
(expand_letrec_star): New primitive syntax: letrec*.
* libguile/memoize.c (memoize): Add memoizer support for in-order letrec
(letrec*).
* module/ice-9/psyntax.scm (build-letrec): Another arg, `in-order?'.
(chi-body): Adapt to build-letrec change. We don't yet use letrec* for
internal definitions.
(letrec): Adapt to build-letrec change.
(letrec*): New expander.
* module/ice-9/psyntax-pp.scm: Regenerated.
* libguile/expand.h (SCM_EXPANDED_LETREC_IN_ORDER_P)
(SCM_MAKE_EXPANDED_LETREC): Add a new field to letrec, in-order?. Will
be used to support letrec*.
* libguile/expand.c (LETREC, expand_named_let, expand_letrec): Adapt
code.
* module/language/elisp/compile-tree-il.scm (compile-pair):
* module/ice-9/psyntax.scm (build-named-let, build-letrec): Pass #f for
in-order? to `make-letrec'.
* module/ice-9/psyntax-pp.scm: Regenerate.
* module/language/tree-il.scm: Add letrec-in-order? accessor.
(parse-tree-il, unparse-tree-il): Parse and unparse an in-order?
letrec as `letrec*'.
(tree-il->scheme): Serialize letrec*.
* module/ice-9/boot-9.scm (find-versioned-module): Remove. Still had
some bugs (e.g. for "." in the path and in finding compiled files),
did too much computation and statting, and we don't really want to
promote versioning. Nor do we want to hard-code a particular encoding
of versions in the file-system. Perhaps the real way to do this is to
be extensible somehow.
(try-module-autoload): Just dispatch to primitive-load-path in all cases.
* module/rnrs
* module/rnrs.scm:
* module/rnrs/arithmetic/bitwise.scm:
* module/rnrs/arithmetic/fixnums.scm:
* module/rnrs/arithmetic/flonums.scm:
* module/rnrs/base.scm:
* module/rnrs/conditions.scm:
* module/rnrs/control.scm:
* module/rnrs/enums.scm:
* module/rnrs/eval.scm:
* module/rnrs/exceptions.scm:
* module/rnrs/files.scm:
* module/rnrs/hashtables.scm:
* module/rnrs/io/simple.scm:
* module/rnrs/lists.scm:
* module/rnrs/mutable-pairs.scm:
* module/rnrs/mutable-strings.scm:
* module/rnrs/programs.scm:
* module/rnrs/r5rs.scm:
* module/rnrs/records/inspection.scm:
* module/rnrs/records/procedural.scm:
* module/rnrs/records/syntactic.scm:
* module/rnrs/sorting.scm:
* module/rnrs/syntax-case.scm:
* module/rnrs/unicode.scm: Move these files, eliding the "6/" infix, so
that they are in the normal (unversioned) module path.
* module/ice-9/eval.scm (primitive-eval): Try using list-ref instead of
cdring in the vm. We'll check the hydra build times to see if this has
any actual merit. Surely the best solution is another representation
of environments, though.
* module/ice-9/psyntax.scm: Fix bug in which the whole syntax object was
being recorded as the name of the operator in a lexical call, instead
of just the symbolic name.
* module/ice-9/psyntax-pp.scm: Regenerated.
* module/language/tree-il/primitives.scm
(*interesting-primitive-names*, *effect-free-primitives*): Recognize
make-prompt-tag as interesting and effect-free.
* module/language/tree-il/inline.scm (boolean-value, inline!): Add a
case for inlining conditional expressions.
* test-suite/tests/tree-il.test: Fix conditional tests to have a
non-inlinable condition.
* module/ice-9/boot-9.scm (resolve-interface): Pass #:ensure #f to
resolve-module, so that in the case of module-not-found we don't leave
behind an empty module without an interface.
* module/ice-9/boot-9.scm:
* module/ice-9/deprecated.scm (get-option, for-next-option)
(display-usage-report, transform-usage-lambda): Deprecate these
option-parsing utils. We can revive them in a non-deprecated module if
there is interest, but I suspect there will be no interest.
* module/ice-9/boot-9.scm:
* module/ice-9/scm-style-repl.scm (bad-throw): Move here. This function
was never documented, but has been around since guile-ii. It's not
used with current code though.
* module/ice-9/deprecated.scm: Provide bad-throw in default env.
* module/ice-9/debugger/commands.scm: Import bad-throw from
scm-style-repl.