* libguile/vm-i-system.c (assert-nargs-ee/locals): New instruction, a
combination of assert-nargs-ee and reserve-locals in the case in which
nreq and nlocs can both be represented in 8 bits.
* module/language/glil/compile-assembly.scm (glil->assembly): Add
compiler case.
* doc/ref/vm.texi (Function Prologue Instructions): Update docs.
* libguile/vm-engine.h (CHECK_OVERFLOW, CHECK_UNDERFLOW): Add
SCM_UNLIKELY blocks. Fix off-by-one error in CHECK_UNDERFLOW.
(PRE_CHECK_UNDERFLOW): New macro, for checking underflow before
accessing the current sp.
(POP): Use PRE_CHECK_UNDERFLOW.
* doc/ref/compiler.texi (Compiler Tower): Update for removal of version
from <language>, and add joiner and make-default-environment fields.
Update examples.
(The Scheme Compiler): Update for `macroexpand' instead of
`sc-expand', and that the environment must be a module.
(Tree-IL): Update for new Tree-IL, and change from "vars" to
"gensyms".
(GLIL): Update for new GLIL, including preludes and prompts.
(Assembly): Update for current output (which seems quite verbose).
(Bytecode and Objcode): Update for current output, and some procedure
name changes.
* module/language/tree-il.scm (<tree-il>): Rename `vars' fields of
<let>, <letrec>, <fix>, and <lambda-case> to `gensyms'. For clarity,
and to match <lexical-ref>.
* module/language/tree-il.scm:
* module/language/tree-il/analyze.scm:
* module/language/tree-il/compile-glil.scm:
* module/language/tree-il/fix-letrec.scm:
* module/language/tree-il/inline.scm: Update all callers.
* module/system/base/language.scm (<language>): Remove the `version'
field from languages. It just wasn't useful.
* module/language/assembly/spec.scm:
* module/language/brainfuck/spec.scm:
* module/language/bytecode/spec.scm:
* module/language/ecmascript/spec.scm:
* module/language/elisp/spec.scm:
* module/language/glil/spec.scm:
* module/language/objcode/spec.scm:
* module/language/scheme/spec.scm:
* module/language/tree-il/spec.scm:
* module/language/value/spec.scm: Remove #:version from all language
definitions. Shorten some language names (e.g. "Guile Scheme" ->
"Scheme").
* doc/ref/vm.texi: Update with documentation for new-ish instructions,
and reorganize the sections a bit.
* doc/ref/compiler.texi (GLIL): Fix up a couple xrefs.
* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump for make-struct
change.
* libguile/struct.c (scm_i_alloc_struct): Use scm_words instead of
scm_gc_malloc to simplify the code and inline the call to GC_MALLOC.
* module/language/tree-il/compile-glil.scm (*primcall-ops*): Compile
make-struct/no-tail to make-struct.
* module/language/tree-il/primitives.scm (define-primitive-expander):
Allow a conditional branch of #f to aboirt inlining.
(make-struct): Expand into make-struct/no-tail in the case that
tail-size is 0.
* libguile/vm-i-scheme.c (make-struct): Adapt to always assume tail-size
is 0. Inline allocation if possible. Don't decrement the SP past live
objects on the stack, which could cause GC to miss references. Use the
NULLSTACK macro.
* doc/ref/guile.texi (Top): Remove @raisesections and @lowersections
around scheme-ideas.texi.
* doc/ref/scheme-ideas.texi (About Data, ...): Instead remove one
"sub" from every node here apart from the chapter node.
* doc/ref/scheme-ideas.texi (Evaluating, Eval Variable, Eval
Procedure, Eval Special, Lexical Scope, Scoping Example): Turn
subheadings back into subsubsections, and reinstate corresponding
menus. (These had to become headings, rather than (sub)*sections, when
the top level item in scheme-ideas.texi was a section. Now it's a
chapter again, they can go back to being (sub)*sections.)
FWIW I'm not sure I like this bullety presentation - but for now this
just aligns the descriptions a bit closer to the actual chapters and
chapter contents.
* doc/ref/intro.texi (Organisation of this Manual): Cover `Hello
Guile!' and `Hello Scheme!' chapters. Thin out text for
`Programming in Scheme'. Renumber other chapters.
* doc/ref/guile.texi (Programming in Scheme): Remove "awful" and add
"as opposed to having to dive into C code", to explain what we
really mean here. Remove incorrect para about the `Hello Scheme!'
material.
* doc/ref/intro.texi (Interactive Programming): Change "allows" to "is
designed for" - sounds less accidental!
* doc/ref/scheme-ideas.texi (Hello Scheme!): Remove unnecessary
"reference", and inappropriate "randomness".
This material isn't "meta-" enough to be in the Preface, and it
supports (by its structure) some of the points that the Introduction
makes about Guile, so I think it belongs here.
* doc/ref/intro.texi (Introduction): Add `Organisation of this Manual'
menu item and material to here...
* doc/ref/preface.texi (Preface): ...from here.
I think it's too detailed, when compared with the other Introduction
sections. It probably also refers to concepts that haven't been
mentioned yet, but are mentioned in the following quick tour chapter;
so let's move it there.
* doc/ref/guile.texi: Move @raisesections and @lowersections for
tour.texi material from here to inside tour.texi.
* doc/ref/intro.texi (Introduction): Don't mention reporting problems
in first para. Move menu item and material for `Reporting Bugs'
from here...
* doc/ref/tour.texi (Hello Guile!): ...to here. Also mention
reporting problems in the introductory para.
* doc/ref/guile.texi (Top): New top level `Hello Guile!' menu item;
include new file tour.texi.
* doc/ref/intro.texi (Introduction): Remove whirlwind tour menu item
and material from here...
* doc/ref/tour.texi: ...to new file here.
This magically fixes all the internal wordings that say "chapter"
rather than "section", and separates Guile-independent and skippable
material from material that is Guile-specific and
probably-not-skippable - which I think is helpful.
* doc/ref/guile.texi (Top): New `Hello Scheme!' menu item, and removed
`Basic Ideas' item. Move include of scheme-ideas.texi before
`Programming in Scheme' chapter, using @raisesections and
@lowersections. Also move scheme-reading.texi to same place.
* doc/ref/scheme-ideas.texi: Change name from `Basic Ideas' (which is
a bit boring) to `Hello Scheme!'. Move `Further Reading' menu item
here.
* module/ice-9/boot-9.scm (module-public-interface)
(set-module-public-interface!): Instead of using
'%module-public-interface, use a field in the module instead.
(make-module, make-autoload-interface): Adapt.
* module/ice-9/deprecated.scm (module-public-interface):
(set-module-public-interface!): Add shims so that manually munging
%module-public-interface should continue to work.
* libguile/modules.c: Consolidate all variables to the top of the file.
(scm_module_public_interface): Dispatch to Scheme.
(scm_post_boot_init_modules): Resolve module-public-interface.
* module/ice-9/boot-9.scm (module-public-interface): Implement in
Scheme.
* module/ice-9/boot-9.scm (module-submodule-binder)
(set-module-submodule-binder!): New field on modules.
(make-module, make-autoload-interface): Adapt.
(module-ref-submodule): If we miss the submodules table, call the
submodules binder, if any.
* module/ice-9/deprecated.scm (module-ref-submodule): Check the
submodule binder before the deprecated look into the obarray.
* module/ice-9/boot-9.scm (module-ref-submodule)
(module-define-submodule!): Implement in terms of the
module-submodules table, instead of looking for bindings in the value
namespace.
* module/ice-9/deprecated.scm (module-ref-submodule):
(module-define-submodule!): Define deprecated versions of these that
duplicate the submodules table in the normal values namespace, for
back compatibility.
* module/ice-9/boot-9.scm (module-type, module-constructor): Add a field
to modules, a table that will hold submodules.
(make-module, make-autoload-interface): Adapt.
* module/ice-9/ls.scm (local-definitions-in, definitions-in): Use nested
module procedures, as appropriate.
(recursive-local-define): Fix attempt to treat null as false. Whoops..
* module/ice-9/deprecated.scm (%app, app, modules): Don't use the module
interface to provide %app shims, use module-define-submodule! directly
to side-effect the root module.
* module/ice-9/boot-9.scm (resolve-module): Use module-define-submodule!
when binding the root, and nested-ref-module for the hot lookup, which
is guaranteed to return a module or #f.
* module/ice-9/boot-9.scm (module-name): Use module-define-submodule!
instead of nested-define!.
(make-modules-in): Rewrite in terms of nested-define-module!.
* module/ice-9/boot-9.scm: Update comments above nested-ref to include
ref-module and define-module!.
(nested-ref, nested-set!, nested-define!, nested-remove!): Use
module-ref-submodule to traverse the module hierarchy.
(nested-ref-module, nested-define-module!): New functions, like
nested-ref and nested-define!, but operate on namespaces instead of
values.
(local-ref-module, local-define-module): New analogs of local-ref and
local-define, but for namespaces.
* module/ice-9/boot-9.scm (module-ref-submodule):
(module-define-submodule!): New stubs, will be used to separate
traversing the module tree from accessing values.
* module/ice-9/boot-9.scm (resolve-module): If we found a module but it
didn't have a public interface and we're not autoloading, just return
the module directly instead of dispatching to make-modules-in.
* module/ice-9/boot-9.scm (module-name): Don't rely on (%app modules),
use other tricks to name anonymous modules.
(resolve-module): Instead of relying on %app, close over the root of
the module hierarchy -- the module that was '(%app modules).
* module/ice-9/deprecated.scm (%app): Provide a compatible %app shim.
* module/ice-9/boot-9.scm (%app): Bind %app and (%app modules) within
the nested hierarchy before making (guile).
(the-root-module): Define to '(%app modules guile) together with
the-root-module's definition.
(resolve-module): Define a "phase 2" resolve-module that only works on the
root module.
(try-module-autoload): No need for stub definition, as modules.c does
not reference this binding.
(resolve-module): Redefine, after modules have been loaded, to
actually do its job, without any hacks for the pre-boot phase.
Move up the boot code before the definition of resolve-module's
helpers.
* module/ice-9/debugging/breakpoints.scm (module-if-already-loaded):
(all-loaded-modules):
* module/oop/goops/stklos.scm: Fix instances of (app modules) to be
(%app modules).
* module/ice-9/boot-9.scm (make-record-type): Add an explanatory
comment.
(%print-module): Remove a hacky comment about redefinitions being
difficult, because now the module-printer is called by name from
module-type's printer.
(module-type): Define the module type, its constructor, predicate, and
accessors programmatically, at expansion time. Should reduce any
errors in transcription, between adding fields and adding accessors.
* libguile/modules.c (scm_lookup_closure_module): Move an explanatory
comment here from boot-9.scm.