* module/ice-9/psyntax.scm: Now that we have gone through the
intermediate step (in which both representations of syntax-object had
to coexist), change all callers to make-syntax-object to pass the third
argument, and restore the define-structure definition of syntax
objects.
* module/ice-9/psyntax-pp.scm: Recompile.
* module/ice-9/psyntax.scm (make-syntax-object): As an intermediate step
to adding modules to syntax objects, replace the definition of
syntax-object as a structure with an expanded-out definition that has
(1) a constructor that takes 2 or 3 arguments, and (2) a predicate that
works with vectors of length 3 or 4. I couldn't just redefine
make-syntax-object, for example, because these are internal
definitions, and we can't have duplicate bindings in a letrec.
* module/ice-9/Makefile.am: Replace annotate.scm with expand-support.scm.
* module/ice-9/annotate.scm: Removed; subsumed into expand-support.scm.
* module/ice-9/compile-psyntax.scm: Strip out expansion structures before
writing to disk.
* module/ice-9/expand-support.scm: New file. Provides annotation support,
and other compound data types for use by the expander. Currently the
only one that is used is the toplevel reference, <module-ref>, but we
will record lexicals this way soon.
* module/ice-9/psyntax-pp.scm: Regenerate.
* module/ice-9/psyntax.scm (build-global-reference)
(build-global-assignment): Instead of expanding out global references
as symbols, expand them as <module-ref> structures, with space to
record the module that they should be scoped against. This is in
anticipation of us actually threading the module info through the
syntax transformation, so that we can get hygiene with respect to
modules.
* module/ice-9/syncase.scm: Replace eval-when. Since sc-expand will give
us something that isn't Scheme because we put the <module-ref>
structures in it, strip that info whenever we actually do need scheme.
* module/language/scheme/compile-ghil.scm (lookup-transformer): Strip
expansion structures here too.
* module/language/scheme/expand.scm (language): Swap annotate for
expand-support. But this file will die soon, I think.
* libguile/procs.c (scm_c_make_subr): Fix a really tricky bug!!! If
scm_double_cell caused GC, the symbolic name wouldn't be marked. But
the symptom wouldn't appear until you accessed that symbol much later,
for example during tab completion / apropos grovelling. Not sure why we
didn't see this earlier.
* meta/guile-tools: Changed to be a scheme script. Instead of looking for
executables in a "scripts dir", we just look for modules in (scripts),
and load the modules directly.
* module/Makefile.am:
* module/scripts/: Move the scripts into module/ so they can be compiled.
Rename scripts from `foo' to `foo.scm'.
* libguile/Makefile.am: Invoke the snarf->texi code via guile-tools.
* configure.in:
* .gitignore: Update for changes.
Thanks to Juhani Rantanen for the report.
* libguile/continuations.c (scm_make_continuation): Delay making the smob
until the data is fully initialized. Fixes a bug whereby a GC in
scm_vm_capture_continuations would catch the us with an undefined
continuation->vm_conts, leading to marking badness.
* libguile/vm.c (vm_cont_free): Report the correct size to scm_gc_free.
* module/language/ghil.scm (unparse-ghil): Fix unparsing of quasiquoted
expressions.
* module/language/ghil/spec.scm (join): Define a joiner for GHIL.
* module/language/scheme/compile-ghil.scm (cenv-ghil-env): Expand the
definition of a CENV so it can have an actual ghil-env, if available.
(compile-ghil): Return the actual ghil env in the cenv.
* module/system/base/compile.scm (compile-file): Rewrite. `output-file'
is now a keyword argument, along with the new kwargs `env' and `from'.
We now allow exceptions to propagate up, and instead of printing the
output file to the console, we return a string corresponding to its
location.
(compile-and-load): Use read-and-compile.
(compile-fold): Thread around the cenv as well. Return all three
values.
(find-language-joint, read-and-compile): New exciting helpers. The idea
is that compiling a file should be semantically equivalent to compiling
each expression in it, one by one. Compilation can have side effects,
e.g. affecting the current language or the current reader. So what we
do is find a point in the compilation path at which different
expressions of a given language can be joined into one. Expressions
from the source language are compiled to the joint language, then
joined and compiled to the target.
(compile): Just return the first value from compile-fold.
* module/system/base/language.scm (language-joiner): New optional field.
* scripts/compile: Rework for changes to compile-file.
* module/system/base/compile.scm: Expect compile passes to produce three
values, not two. The third is the "continuation environment", the
environment that can be used to compile a subsequent expression from
the same source language. For example, expansion-time side effects can
set the current module, which would be reflected appropriately in the
continuation environment.
* module/language/assembly/compile-bytecode.scm:
* module/language/bytecode/spec.scm:
* module/language/ecmascript/compile-ghil.scm:
* module/language/ghil/compile-glil.scm:
* module/language/glil/spec.scm:
* module/language/objcode/spec.scm:
* module/language/scheme/compile-ghil.scm:
* module/system/base/compile.scm: Update compile passes to return a
continuation environment.
* configure.in:
* meta/Makefile.am (EXTRA_DIST): Remove guile-config.in bits.
* meta/guile-config: Reimplement to work on top of pkg-config. This lets
guile-config not be substed by configure.
* meta/uninstalled-env.in: Remove the path to guile-config, belatedly.
Set the pkg-config path correctly.
Reported by Daniel Kraft <d@domob.eu>.
* libguile/frames.c, libguile/vm.c: Include <stdlib.h>, use `size_t'
instead of `scm_sizet'.
* libguile/objcodes.c, libguile/programs.c, libguile/vm-engine.c,
libguile/vm-i-loader.c, libguile/vm-i-system.c: Use `scm_list_X ()'
instead of the deprecated `SCM_LISTX ()'.
* configure.in (enable_deprecated): Set SCM_WARN_DEPRECATED_DEFAULT
even when --disable-deprecated is passed.
* libguile/deprecation.h: Declare deprecation-issuing methods even
if SCM_ENABLE_DEPRECATED is not set.
* libguile/deprecation.c: Ditto.
(scm_init_deprecation): Include full body even for unset
SCM_ENABLE_DEPRECATED.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* We cache callees in each module, and keep a list of modified
('tainted') modules, which is used to reconstruct the callers
database incrementally.
* `procedure-callers' now returns an a-list, keyed by module name.
* test-suite/standalone/test-extensions:
* test-suite/standalone/test-extensions-lib.c:
* test-suite/standalone/Makefile.am: Add a test case for the
load-extension bug.
* meta/gdb-uninstalled-guile.in: Fix the path to include meta/.
* module/system/xref.scm (ensure-callers-db): OK! Since we can see the
same variable twice, e.g. in different modules, keep a unified hash of
seen vars and modules. Prevents duplicates in procedure-callers.
* module/system/xref.scm (program-callee-rev-vars): It's possible to get
duplicates when combining callees of inner procedures, so ignore dups.
Quadratic, boo.
* libguile/extensions.h: Define a scm_t_extension_init_func.
* libguile/frames.c:
* libguile/instructions.c:
* libguile/objcodes.c:
* libguile/programs.c:
* libguile/vm.c: Register extension init funcs. Should play nicer with a
static Guile, in addition to working on Darwin with non-default
installation prefixes without munging DYLD_LIBRARY_PATH.
* module/system/vm/frame.scm:
* module/system/vm/instruction.scm:
* module/system/vm/objcode.scm:
* module/system/vm/program.scm:
* module/system/vm/vm.scm: Use load-extension.
* libguile/measure-hwm.scm: Remove.
* .gitignore: Update for removal.
* test-suite/standalone/test-fast-slot-ref.in:
* test-suite/standalone/test-use-srfi.in:
* am/guilec:
* check-guile.in: Revert back to normal guile invocation.
* libguile/Makefile.am: Don't make a stack calibration file, as the
getrlimit-based limit setting should work fine.
* libguile/debug.c (init_stack_limit): Initialize the stack limit based
on operating system limits (via getrlimit(2)), or 1 MB -- whichever is
smaller.
* README: Some rewording.
* configure.in: Check for getrlimit and setrlimit.
* libguile/posix.h:
* libguile/posix.c: Add some getrlimit and setrlimit wrappers. They're
documented, but I suspect something else has to be done to get them
into the manual.
* README: Add more info about building against an uninstalled Guile.
* meta/: New directory. The proximate cause of its creation is that I
want to be able to build external packages against uninstalled Guile,
and to do that I need guile-tools in the PATH, but I don't want
$top_builddir/libtool in the path. But it seems like a good
reorganization, for things that are /about/ Guile: pkg-config files, m4
files, guile-config... then we also include uninstalled info: the
environment, the pre-inst-guile script, etc.
* meta/guile-1.8-uninstalled.pc.in: New pkg-config template. pkg-config
prefers -uninstalled pkg-config files, if they are in its path.
* meta/Makefile.am:
* meta/ChangeLog-2008:
* meta/gdb-uninstalled-guile.in:
* meta/guile-1.8.pc.in:
* meta/guile-config.in:
* meta/guile.m4:
* meta/guile-tools.in: Moved to meta/.
* meta/guile.in: This is the new name of pre-inst-guile.in.
* meta/uninstalled-env.in: And this, pre-inst-guile-env.in.
* Makefile.am:
* am/guilec:
* am/pre-inst-guile:
* check-guile.in:
* configure.in:
* doc/ref/Makefile.am:
* gc-benchmarks/run-benchmark.scm:
* test-suite/standalone/Makefile.am:
* test-suite/standalone/README:
* testsuite/Makefile.am: Adapt to meta/ change.
* am/guilec (.scm.go): Use `pre-inst-guile' and load
`stack-limit-calibration.scm'. This is particularly useful when
building the first `.go' files where the compiler is run using the
interpreter, which may end up using a lot of stack space.
* libguile/Makefile.am (BUILT_SOURCES): Add
`stack-limit-calibration.scm'.
(TESTS, TESTS_ENVIRONMENT): Remove.
(stack-limit-calibration.scm): Prepend `-' so that any errors during
the calibration are ignored.
* libguile/private-gc.h (scm_i_marking): Turn definition into a
declaration.
(scm_mark_all): Mark as `SCM_INTERNAL'.
* libguile/gc-mark.c (scm_i_marking): New definition.
* module/oop/goops.scm (method-source): Don't throw an error if this
method has no source.
(method-formals): New generic function, the complement of
method-specializers for introspection.
* libguile/symbols.c (intern_symbol): New function, with code formerly
duplicated in `scm_i_c_mem2symbol ()' and `scm_i_mem2symbol ()'.
(scm_i_c_mem2symbol, scm_i_mem2symbol): Use it.
(scm_take_locale_symboln): Use `intern_symbol ()'. This fixes
bug #25865.
* test-suite/standalone/Makefile.am
(test_scm_take_locale_symbol_SOURCES,
test_scm_take_locale_symbol_CFLAGS,
test_scm_take_locale_symbol_LDADD): New variables.
(check_PROGRAMS, TESTS): Add `test-scm-take-locale-symbol'.
* module/system/xref.scm (procedure-callers): Rework to calculate the
callers of a *variable*, not of a value. This is because the
module-observers only get fired when the module changes, not with the
variables change values. Also accept either a variable, a symbol
(resolved in the current module), or a modname . symname pair.
* module/system/xref.scm: Implement procedure-callers, as the inverse of
procedure-callees, with a cache invalidated by changes in modules.
* module/ice-9/boot-9.scm (module-use!): Don't poke module observers when
module-use! is called for an already-used module.
* module/system/xref.scm (hacky-procedure-callees): Add a
procedure-callees implementation for procedures with source, that
currently does nothing. Not sure what to do, going into the future.
* guile-tools.in: Fix the checks to account for non-srcdir builds.
* libguile/frames.c:
* libguile/objcodes.c:
* libguile/programs.c:
* libguile/instructions.c:
* libguile/vm.c: Fix snarf-includes to cope with non-srcdir builds.
* libguile/instructions.h:
* libguile/instructions.c: Fix the stubs inclusion to be non-srcdir
compatible.
* libguile/vm-expand.h (VM_DEFINE_INSTRUCTION): Fix some things so as not
to require the instructions.h defintitions, since we have the codes
already. Not important tho :)
* pre-inst-guile-env.in: Minor tweak that should have no effect.
* test-suite/standalone/Makefile.am (all-local): Remove a chmod +x step,
the configure.ac rule should do that if necessary.