On the one hand we want the child process in these tests to exit. On
the other, we don't want it to exit before the parent Guile code has
tested the relevant condition (EOF in the first test, broken pipe in
the second) - because these conditions would obviously be true if the
child had already exited, and that's not what we're trying to test
here. We're trying to test getting EOF and broken pipe while the
child process is still alive.
* test-suite/tests/popen.test (open-input-pipe:no duplicate): Add
another pipe from parent to child, so that the child can finish by
reading from this. Then the parent controls the child lifetime by
writing to this pipe.
* test-suite/tests/popen.test (open-output-pipe:no duplicate): Add
another pipe from child to parent, and have the child finish by
endlessly writing into this. Then the parent controls the child
lifetime by closing its end of the pipe, causing a broken pipe in
the child.
* configure.in: No longer output the Makefile.ins.
* module/Makefile.am: Include the contents of ice-9/, srfi/, and oop/.
* module/ice-9/Makefile.am:
* module/ice-9/debugger/Makefile.am:
* module/ice-9/debugging/Makefile.am:
* module/oop/Makefile.am:
* module/oop/goops/Makefile.am:
* module/srfi/Makefile.am: Removed.
* module/ice-9/expand-support.scm (strip-expansion-structures): If, when
producing @/@@ forms, we find that an @@ variable is not bound in its
module, just serialize the symbol. This bends hygiene, in that it can
introduce a global (but not lexical) reference in the expanded module,
but it seems necessary to not produce (@@ (foo) else) in forms like
((@@ (foo) cond) ((test then) ((@@ (foo) else) bar))).
* module/system/repl/command.scm:
* module/system/repl/common.scm:
* module/system/repl/repl.scm:
* module/system/vm/debug.scm:
* module/system/vm/trace.scm: Change #:use-syntax to #:use-module, as
that's really what we want to do.
* module/ice-9/boot-9.scm (peek, pk, warn): Move these helpers up to the
top. I like them!
(load-compiled): Don't define within an if, syncase doesn't like that.
* module/language/scheme/expand.scm (re-annotate, expand): A couple of
speculative cases for dealing with syncase better -- but all of this
code is likely to go.
* libguile/modules.c (scm_module_transformer)
(scm_current_module_transformer): So, if the module system hasn't yet
booted, take the current transformer from a variable named
%pre-modules-transformer from the %pre-modules-obarray. This is a
prequel to booting syncase early in boot-9.
* module/ice-9/psyntax.scm (syntax-type): Handle a new type, module-ref.
Like external-macro, it also has a procedure as a binding.
(chi-expr): module-ref forms -- that is to say, (@ (foo ...) bar) -- as
expressions they are global references, but with respect to a specific
module.
(@, @@): Define module-ref syntax handlers.
* module/ice-9/psyntax-pp.scm: Regenerated.
* module/ice-9/syncase.scm: Mark as primitive syntax so we don't clobber
their definitions.
The reason I'm doing things like this is so as to support (set! (@@ ...)
...) sensibly, which will be the next patch.
* examples/Makefile.am: Fix the installed guile-config invocation to set
PKG_CONFIG_PATH.
* meta/Makefile.am (EXTRA_DIST): Dist the bin_SCRIPTS.
* meta/guile-config (pkg-config): Better error messages if pkg-config
invocation fails.
* meta/uninstalled-env.in (PATH): Now that guile-config and guile-tools
are not generated, make it the srcdir/meta instead of the builddir.
(Guile itself will be picked up from libguile.)
* meta/guile-tools: Instead of fixing scripts I should have been fixing
the script runner.
* module/scripts/compile.scm:
* module/scripts/snarf-guile-m4-docs.scm: Fix to take rest args.
* meta/guile-1.8.pc.in: Include a pkgdatadir, which will map down to
`guile-config info pkgdatadir', used in existing guile.m4 files.
* meta/guile-config: Fix guile-config info varname. Facepalm.
* meta/guile.m4: Make GUILE_SITE_DIR use the sitedir variable instead.
Really it should use pkg-config directly, though.
* meta/guile-tools: We can't use srfi-1, because on a fresh checkout
the srfi-1 shlib isn't built yet. Bummer.
* meta/uninstalled-env.in: Fix up the DYLD lines for BSDen.
* module/scripts/snart-guile-m4-docs.scm: Fix expected arguments.
* module/ice-9/psyntax-pp.scm: Regenerate.
* module/ice-9/psyntax.scm (syntax-type): Look up the type of the car of
a form relative to its module, if it is a syntax object. Fixes hygiene
wrt modules and private macros.
* module/ice-9/syncase.scm (sc-macro): Add a comment.
* module/system/base/pmatch.scm: The big test case: just export pmatch,
not ppat too.
* libguile/vm-i-system.c (toplevel-ref, toplevel-set): Correct situation
whereby we would not throw when toplevel vars were unbound, before
modules had booted.
* libguile/eval.h:
* libguile/eval.c (error_unbound_variable, error_defined_variable):
Move these prototypes up earlier.
(scm_m_at, scm_m_atat): New functions, provide the @ and @@
functionality. Moved here from defmacros because they are
"special", inasmuch as syncase doesn't really understand them in
interpreted code.
* module/ice-9/boot-9.scm (@, @@): Don't define as defmacros, as
defmacros have to actually return source now.
* module/ice-9/expand-support.scm (strip-expansion-structures): Enable
@/@@ substitution.
* module/ice-9/psyntax-pp.scm: Recompile.
* module/ice-9/psyntax.scm: Since syntax objects are quotable, make the
module field the module name, not the module itself. Scope the operand
of global calls appropriately. Thread modules through syntax-dispatch
destructuring. Houston, we have hygiene.
* module/ice-9/syncase.scm: Adapt to module / module-name changes.
* module/ice-9/compile-psyntax.scm: No more expansion-eval-closure.
* module/ice-9/expand-support.scm (strip-expansion-structures): Only @@
names whose module is not the current module. Actually @@ serialization
is disabled for this commit, just to get this one in and keep things
working.
* module/ice-9/psyntax-pp.scm: Recompiled.
* module/ice-9/psyntax.scm (put-global-definition-hook)
(get-global-definition-hook): Instead of going through that stupid
getprop/putprop interface, let's just inline Guile-specific code here.
(build-global-reference, build-global-assignment): Fix a bug where the
module and public? were switched, which happily allowed things to
compile. (We reintroduce a similar bug above in expand-support.)
(lookup): Add a module argument.
(global-extend): Adapt for put-global-definition-hook invocation.
(syntax-type): Lookup with mod. Return mod even for lexicals and
define-form -- why not.
(chi-top, fluid-let-syntax, syntax, set!): Lookup with mod. Wrap with
mod.
* module/ice-9/syncase.scm (expansion-eval-closure)
(current-eval-closure, env->eval-closure): OK! So the idea is: module
hygiene is syncase's business, not ours. So lose the eval-closure
fluid. Also, eval closures are so 1990s.
(sc-macro): But, we have to take the module from the env, sadly. In the
future this will be different.
Remove the rest of the eval-closure bits. Enable source reporting,
while we're debugging.
* module/language/scheme/compile-ghil.scm (lookup-transformer): Adapt for
eval closure fluid changes.
* libguile/debug.h:
* libguile/debug.c (scm_procedure_module): New procedure, returns the
module that was current when the given procedure was defined. Used by
syncase to scope free identifiers.
* module/ice-9/psyntax-pp.scm: Recompiled.
* module/ice-9/psyntax.scm: Thread the module through the syntax
expansion. This is harder than it would appear because in many places
the different components of syntax objects are destructured.
* module/ice-9/syncase.scm (guile-macro): Adapt to new signature for
syntax transformer functions.
* 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.