* 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.
* module/ice-9/boot-9.scm (record-type-vtable): Add a third field, a
precomputed constructor. There is an unfortunate circularity here,
though.
(make-record-type): If the record has fewer than 20 fields,
return a constructor pre-generated to suit. Otherwise just check the
length, and dispatch to `apply' and not `primitive-eval'. FWIW the
current module record has something like 12 fields.
(record-constructor): If we're asking for the standard constructor,
return the precomputed constructor.
* test-suite/tests/records.test ("records"): Add tests for printers.
* module/ice-9/boot-9.scm (make-record-type): Refactor the code that
makes the default printer.
* libguile/filesys.h:
* libguile/filesys.c (scm_i_relativize_path): New function, moved here
from fports.c. Internal for now; we can make it external though if
people like its interface.
* libguile/fports.c (fport_canonicalize_filename): Move all of the
tricky bits to filesys.c. Also fixes a bug in which a delimiter wasn't
stripped.
* module/ice-9/boot-9.scm:
* module/ice-9/deprecated.scm (@bind): Deprecate @bind, which was a
thread-unsafe dynamic scoping mechanism, used in the old elisp
support. Fluids are more correct, and are probably faster, given the
VM support for with-fluids.
* test-suite/tests/dynamic-scope.test: Remove.
* test-suite/tests/fluids.test: Move relevant tests from
dynamic-scope.test here, recast in terms of with-fluids.
* module/system/base/compile.scm (compile-file, compile-and-load): Add a
keyword arg #:canonicalization, which defaults to 'relative. In this
way, one might compile "../module/ice-9/boot-9.scm", but the path that
gets residualized into the .go is "ice-9/boot-9.scm".
* libguile/fports.c (%file-port-name-canonicalization): New global var.
(fport_canonicalize_filename): New helper. If
%file-port-name-canonicalization is 'absolute, then run file port
names through canonicalize_path; if it's 'relative, then canonicalize
the name, but strip off load paths; otherwise leave the port name
alone.
(scm_open_file): Use fport_canonicalize_filename.
(scm_init_fports): Define %file-port-name-canonicalization.
* libguile/procprop.h (scm_sym_arity): Deprecate. I didn't move it to
deprecated.h though, because that might have some boot implications --
though I didn't check.
* libguile/procprop.c (scm_procedure_properties)
(scm_set_procedure_properties_x, scm_procedure_property)
(scm_set_procedure_property_x): Deprecate access to a procedure's
arity via procedure-properties. Users should use
procedure-minimum-arity.
* module/ice-9/channel.scm (eval):
* module/ice-9/session.scm (arity):
* module/language/tree-il/analyze.scm (validate-arity): Fix up instances
of (procedure-property x 'arity) to use procedure-minimum-arity.
* libguile/procprop.h:
* libguile/procprop.c (scm_procedure_minimum_arity): New public
function, will replace (procedure-property foo 'arity).
* libguile/programs.c (scm_i_program_arity): Rework to always provide
the most permissive arity.
* libguile/programs.h:
* libguile/programs.c (scm_program_name): Remove. procedure-name is
sufficient.
* module/system/vm/program.scm (program-name): Remove from exports list.
(program-documentation): Remove; procedure-documentation is
sufficient.
* libguile/debug.c (scm_procedure_name): Remove special case for
programs.
* module/language/tree-il/analyze.scm (validate-arity): Use
procedure-name.
* module/ice-9/documentation.scm (object-documentation): Just use
procedure-documentation, without special cases for programs.
* libguile/programs.h:
* libguile/programs.c (scm_i_program_properties): Make internal.
(scm_program_name): Use scm_i_program_properties.
* libguile/procprop.c (scm_procedure_properties): Use
scm_i_program_properties, for programs.
* libguile/procs.c (scm_procedure_documentation): Use procedure-property
to get to 'documentation, not program-property.
* module/system/vm/program.scm (program-properties, program-property):
Remove from the exports list.
(program-documentation): Use procedure-property.
* module/texinfo/reflection.scm (macro-arguments)
(macro-additional-stexi)
(object-stexi-documentation): Use procedure-property, not
program-property.
* libguile/procprop.c (overrides, overrides_lock): Rename from props and
props_lock.
(scm_procedure_properties): If no overrides have been set, default to
scm_program_properties (if it's a program).
(scm_set_procedure_properties_x): Error if 'arity is in the alist.
(scm_procedure_property): Just do a lookup in the
scm_procedure_properties.
(scm_set_procedure_properties_x): Init the overrides to
scm_procedure_properties.
* doc/ref/api-languages.texi: Move here from api-translation. Still
stubbed in parts, but it's getting better.
* doc/ref/Makefile.am: Adapt to api-languages.texi name change.
* doc/ref/guile.texi: Likewise.
* doc/ref/intro.texi (Introduction): Change "some" to "the".
(Guile and Scheme): "multithreading" -> "multithreaded".
(Combining with C): Mention "libguile" as library name.
(Guile and the GNU Project): New text.
(Interactive Programming): New text.
(Supporting Multiple Languages): New text, reflecting currently
supported languages.
(Obtaining and Installing Guile): Use @var for version placeholder.
Remove mention of separate tutorial.
Conflicts:
doc/ref/api-procedures.texi
doc/ref/misc-modules.texi
(Caused by me removing `@page' from a couple of sections that have been modified
by others.)
* test-suite/tests/elisp.test: Rework for #nil, to actually be enabled,
to always run, and to use the new compiler. Comment out some failing tests, to
be dealt with in the future.
* module/language/elisp/runtime/macro-slot.scm (or, and): Fix one-arg
case to return the arg as-is.
* module/language/elisp/runtime.scm (nil-value): Fix to be #nil.
* module/system/vm/debug.scm (*debug-input-port*):
(*debug-output-port*): New public fluids.
(run-debugger): Add some kwargs for input and output ports, defaulting
to the debug input and output ports.
(debug-pre-unwind-handler): Print to debug output port.
(debug): Untabify.
* module/ice-9/boot-9.scm (repl-reader): For the default (non-readline)
repl reader, only display the prompt if input isn't already available.
Fixes spurious prompts in the debugger.
* libguile/foreign.c (sym_null_pointer_error): New variable.
(null_pointer_error): New function.
(scm_foreign_set_x): Raise an error if attempting to modify
NULL_POINTER.
(scm_foreign_to_bytevector): Use `null_pointer_error ()' instead of
`scm_misc_error ()'.
* test-suite/tests/foreign.test: New file.
* test-suite/Makefile.am (SCM_TESTS): Add tests/foreign.test.
* test-suite/lib.scm (exception:null-pointer-error): New variable.
* libguile/foreign.c (scm_take_foreign_pointer): Allocate RET in
GC-scanned memory. This fixes a bug where the object pointed to by
SCM_CIF in the pair returned by `cif_to_procedure ()' would be
reclaimed (as a consequence of commit
087aa6aa31).
* libguile/modules.c (scm_module_reverse_lookup): Type-check VARIABLE.
Don't traverse the `uses' list when MODULE is #f.
* test-suite/tests/modules.test ("foundations")["module-reverse-lookup
[pre-module-obarray]", "module-reverse-lookup [wrong-type-arg]"]: New
tests.