support expression-by-expression compilation
authorAndy Wingo <wingo@pobox.com>
Thu, 16 Apr 2009 15:49:59 +0000 (17:49 +0200)
committerAndy Wingo <wingo@pobox.com>
Thu, 16 Apr 2009 15:49:59 +0000 (17:49 +0200)
commitb8076ec6cc3a18a92186d954684f88a735a42018
tree057f3c83f20825b881060b145c971c7ceb882c26
parentb41b92c9d1c439ddfc5c081b3949e9d1763de181
support expression-by-expression compilation

* 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/language/ghil.scm
module/language/ghil/spec.scm
module/language/scheme/compile-ghil.scm
module/system/base/compile.scm
module/system/base/language.scm
scripts/compile