1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-08 13:10:19 +02:00
Commit graph

19988 commits

Author SHA1 Message Date
Ludovic Courtès
feccd2d310 Add SCM_SET_SUBR_GENERIC ()' to replace SCM_SUBR_GENERIC ()' as an lvalue.
* libguile/goops.c (scm_c_extend_primitive_generic): Use
  `SCM_SET_SUBR_GENERIC ()' instead of using `SCM_SUBR_GENERIC ()' as an
  lvalue.

* libguile/procs.c (scm_c_make_subr_with_generic): Use `SCM_SET_SUBR_GENERIC_LOC ()'.

* libguile/procs.h (SCM_SET_SUBR_GENERIC, SCM_SET_SUBR_GENERIC_LOC): New macros.
2009-02-11 23:37:46 +01:00
Ludovic Courtès
cce8b2ce93 Use `SCM_SNAME ()' when requesting the name of a subr.
* libguile/gsubr.c (create_gsubr, create_gsubr_with_generic):
  Use `SCM_SNAME ()' instead of `SCM_SUBR_ENTRY (subr).name'.

* libguile/procs.c (scm_c_define_subr_with_generic, scm_makcclo):
  Likewise.
  (scm_c_make_subr_with_generic): Same with `SCM_SUBR_GENERIC ()'.
2009-02-11 23:37:42 +01:00
Ludovic Courtès
4f6e6e4fb7 Small cleanup relative to the use of double cells for subrs.
* libguile/procs.c (scm_c_make_subr): Remove comments about the number
  of subrs, improve formatting.

* libguile/Makefile.am: Comment the generation of `snarf-gsubr.h'.
2009-02-11 23:08:53 +01:00
Andy Wingo
df8cd091f9 provide program apply_0, apply_1, apply_2 implementations
* libguile/programs.c (program_apply_0, program_apply_1)
  (program_apply_2, scm_bootstrap_programs): Provides some cons-less
  smob application procedures. This molests some internal interfaces, but
  hey, we're internal.
2009-02-11 23:04:37 +01:00
Andy Wingo
e14679bd52 speed up record-case
* module/language/ghil.scm: Whoops, export some unquote-splicing
  accessors that we didn't have exported before.

* module/system/base/syntax.scm: Speed up record-case, by syntactically
  determining the predicates and accessors. Nasty, in a way; but also
  much faster.
2009-02-11 22:08:04 +01:00
Andy Wingo
8899057d65 match bare literals with eq? in pmatch, not equal?
* module/system/base/pmatch.scm (ppat): Match atoms with eq?, not equal?.
  This speeds up compilation considerably, as we never match against
  numbers or strings or what-have-you. Note, you can match against
  literals with equal? via quoting the literal in the pattern.
2009-02-10 13:18:36 +01:00
Andy Wingo
028e3d0666 propagate much more source info through compilation
* module/language/ghil/compile-glil.scm (codegen): Record source location
  for offset 0 into a lambda, if we can.

* module/language/scheme/compile-ghil.scm (translate-1)
  (define-scheme-translator): In the retrans procedures, propagate the
  location information from the enclosing expression if the subexpression
  has no location information. Gives source information to many more
  expressions.
  (location): Just propagate the source properties as they are, the
  glil->assembly compiler will interpret them.

* module/language/glil.scm (<glil>): Change glil-source to take "props"
  and not "loc", as it's the source properties that we're interested in.

* module/language/glil/compile-assembly.scm (limn-sources): New function,
  takes a list of addr-source property pairs and "compresses" them for
  serialization to disk.
  (glil->assembly): Limn the sources before writing them to disk. Avoid
  non-tail recursion when determining total byte length of code.

* module/system/vm/program.scm (source:file, source:line, source:column):
  Update for new source representation.
  (program-source): Export.
  (write-program): Nicer pretty-printing of anonymous procedures.

* libguile/backtrace.c (display_backtrace_get_file_line): Update for the
  new VM source representation.

* libguile/programs.h:
* libguile/programs.c (scm_program_sources): Update for the new
  serialized source representation, where the filename is not in the
  stream unless it changes.
  (scm_program_source): New exported function, looks up the source for a
  given ip offset.
  (scm_c_program_source): Update to return the last source information
  that was <= the given IP, because we only serialize source info when it
  changes.
2009-02-10 11:53:23 +01:00
Neil Jerram
8a40db3714 Merge branch 'master' into ossau-gds-dev 2009-02-09 22:05:18 +00:00
Neil Jerram
4c9e29ec38 Clean lib-version.texi
* doc/ref/Makefile.am (CLEANFILES): Add lib-version.texi.
2009-02-09 21:51:31 +00:00
Andy Wingo
dae318a631 nicety in the compiler
* module/language/scheme/compile-ghil.scm (lookup-transformer): Use @@.
  Delightfully metacircular.
2009-02-09 12:02:04 +01:00
Andy Wingo
277f728b14 allow defmacros to unquote in macros into expanded expressions
* module/language/scheme/compile-ghil.scm (lookup-transformer): Allow
  macros to be unquoted into the car of any form that results from macro
  expansion. This lets modules export defmacros built on other defmacros
  that are not exported.
2009-02-09 11:50:58 +01:00
Andy Wingo
9892287960 minor cleanups
* libguile/stacks.c (scm_make_stack): Instead of aborting when we misread
  the number of stack frames, just print a warning. I'd like to figure
  out what these cases are, exactly.

* module/language/scheme/compile-ghil.scm (lambda): Reindent the lambda
  transformer.

* module/system/base/compile.scm (call-with-compile-error-catch): Write
  the expression instead of displaying it.
  (call-with-output-file/atomic): Don't actually redirect output to this
  port, as it's not necessary -- the language-printer should respect the
  port that we pass.
2009-02-09 11:42:27 +01:00
Neil Jerram
57692c0742 Merge branch 'master' into ossau-gds-dev 2009-02-08 22:02:15 +00:00
Neil Jerram
ad5f5ada1d Allow @ to work with (ice-9 syncase)
(Reported by Panicz Maciej Godek.)

* test-suite/tests/syncase.test ("@ works with syncase"): New test.

* ice-9/syncase.scm (guile-macro): When a Guile macro transformer
  produces a variable, don't pass it through sc-expand.
2009-02-08 21:45:31 +00:00
Neil Jerram
95a040cd2b Fix build when compiled with -Wundef -Werror
(Reported by David Fang)

* libguile/inline.h: Check if __APPLE_CC__ is defined before testing
  its value.
2009-02-08 21:45:24 +00:00
Andy Wingo
2f9769b60c fix the ping-pong between evaluator and vm stacks in make-stack
* libguile/frames.c (vm_frame_print): Add a frame printer.

* libguile/stacks.c (stack_depth, read_frames): Only switch the VM stack
  for boot program dframes.

* libguile/vm-engine.c (VM_NAME): Push one debug frame per invocation,
  unconditionally. (If we push them at all, of course.)
2009-02-05 18:13:27 +01:00
Andy Wingo
3b9e095b44 fix boot program detection, which in turn makes `make-stack' actually work
* libguile/programs.h (SCM_F_PROGRAM_IS_BOOT, SCM_PROGRAM_IS_BOOT): Flags
  for determining if a program is a boot program. It turns out that our
  heuristics e.g. in stacks.c would catch non-boot programs, like
  programs that end with (goto/args 1), because the 1 is the same byte as
  `halt'. That took a while to find...

* libguile/stacks.c (stack_depth, read_frames): Use the new boot prog
  macros.
  (scm_make_stack): Assert that we read the number of frames that we said
  we would.

* libguile/vm.c (really_make_boot_program): Mark boot programs
  appropriately.
2009-02-05 13:44:06 +01:00
Andy Wingo
e06e857c8d in debug mode, make sure that calls to the vm can be captured via make-stack
* libguile/vm-engine.c (VM_PUSH_DEBUG_FRAMES): New knob, if true we much
  with the scm_i_last_debug_frame when entering the VM, because sometimes
  the evaluator doesn't do it for us.
  (VM_ENGINE): Plug through debug frame fondling. Now, program exit comes
  back to the main text. Rename err_args to finish_args, and reuse for
  the return value.

* libguile/vm-engine.h (PUSH_LIST):
* libguile/vm-i-loader.c:
* libguile/vm-i-scheme.c:
* libguile/vm-i-system.c: Update for finish_args.
  (halt): goto vm_done, now, instead of returning directly.
2009-02-05 12:28:19 +01:00
Andy Wingo
4abef68f61 scm_call_N doesn't cons for calling programs
* libguile/eval.c (scm_call_0, scm_call_1, scm_call_2, scm_call_3)
  (scm_call_4): Special-case compiled procedures here, to avoid consing.

* libguile/vm.h:
* libguile/vm.c (scm_c_vm_run): Take a SCM after all.
  (scm_vm_apply, scm_load_compiled_with_vm): Adapt to vm_run change.
2009-02-05 00:51:34 +01:00
Andy Wingo
af35fc20a6 use append-map in goops
* module/oop/goops.scm (ensure-metaclass, make-extended-generic): Some
  minor optimizations to use append-map.
2009-02-05 00:31:38 +01:00
Andy Wingo
7edf200127 inline call to scm_make_program when making closures
* libguile/programs.c (scm_make_program): Add a comment.

* libguile/vm-engine.h (INIT_ARGS): Add a couple of UNLIKELY notes.

* libguile/vm-i-system.c (make-closure): Inline the call to
  scm_make_program, which avoids some redundant checks.
2009-02-05 00:20:51 +01:00
Andy Wingo
6d14383e86 enable multiple vm engines (regular, debug, ...)
* libguile/vm-engine.c (VM_USE_HOOKS, VM_USE_CLOCK, VM_CHECK_EXTERNAL)
  (VM_CHECK_OBJECT): Update to define these here, before including
  vm-engine.h.
  (vm_run): Change so that we can make different engines. Also, we take
  an array of arguments, and the struct scm_vm directly, so as to avoid
  any need to cons.

* libguile/vm-engine.h (CHECK_EXTERNAL, CHECK_OBJECT): Add some UNLIKELY
  bits; don't seem to help.

* libguile/vm.c (vm_dispatch_hook): Change to not pass the VP. This needs
  some love, and perhaps we revert to the old way.
  (VM_ENGINE): Actually make two engines, vm_regular_engine and
  vm_debug_engine. Probably there is room for improvement here. Actually
  their speeds are the same at the moment.
  (make_vm): Choose which engine to run; currently the debug engine by
  default.
  (scm_c_vm_run): A thin wrapper to invoke a VM without consing.
  (scm_vm_apply): Use scm_c_vm_run.
  (scm_load_compiled_with_vm): Use scm_c_vm_run.
2009-02-04 23:47:56 +01:00
Andy Wingo
bef9591104 "optimize" dispatch to specific GF's in goops
* libguile/goops.c: Some micro-optimizations so that calling generic
  functions as part of the protocol doesn't cons.
2009-02-04 00:49:55 +01:00
Andy Wingo
747a163532 make catch cache and restore vm regs, not the vm itself -- speedy speedy
* libguile/throw.c (scm_c_catch): Stash away the current vm's regs, and
  restore them if there's a nonlocal exit. There is a terrible case we
  have to handle if we catch from when the vm smob type isn't registered
  but the throw has the vm registered, but I think we handle this fine.

* libguile/vm-engine.c (vm_run):
* libguile/vm-i-system.c (halt): Don't make a dynwind context, so that
  entering the VM doesn't cons at all, except for the arg list. Maybe we
  can fix that bit too.

* libguile/vm.c (vm_reset_stack): Remove, as there is no more dynwind.
  (make_vm): Return #f if the tc16 hasn't yet been registered.
2009-02-04 00:09:38 +01:00
Andy Wingo
f775e51bce make symbol -> opcode lookup faster
* libguile/instructions.c (fetch_instruction_table)
  (scm_lookup_instruction_by_name): Rework so we lazily load instructions
  into an array keyed by opcode, and a hash table keyed by symbolic name.
  Much faster, in this hot spot of compilation.

* libguile/vm-engine.c (vm_run): Use malloc instead of scm_gc_malloc,
  given that we aren't ever going to free this thing.

* libguile/vm-expand.h (VM_DEFINE_FUNCTION, VM_DEFINE_LOADER): Rework to
  always be aliases to VM_DEFINE_INSTRUCTION.
  (VM_DEFINE_INSTRUCTION): In the table case, update to work with
  fetch_instruction_table().
2009-02-03 22:36:02 +01:00
Andy Wingo
ef7e18683c inline dispatch to program cmethods, tick in return, remove old goops methods
* libguile/objects.c (scm_apply_generic): Inline the case when the
  generic is a program.

* libguile/vm-i-system.c (return): Tick when functions return.

* module/oop/goops.scm (object-eqv?, object-equal?): Remove these
  historical methods.
2009-02-03 21:13:01 +01:00
Ludovic Courtès
6290d3f109 GOOPS: Statically allocate the PORT class array.
* libguile/goops.c (scm_port_class): Statically allocate it.
  (create_port_classes): Don't use `scm_calloc ()'.

* libguile/goops.h (scm_port_class): Update declaration.

* libguile/ports.c (scm_make_port_type): When checking whether
  GOOPS is initialized, check whether the first element of
  SCM_PORT_CLASS is non-zero.
2009-02-03 00:03:09 +01:00
Ludovic Courtès
5bb2d903b9 Publish the maximum number of port types as `SCM_I_MAX_PORT_TYPE_COUNT'.
* libguile/goops.c (create_port_classes): Use
  `SCM_I_MAX_PORT_TYPE_COUNT' instead of a hard-wired 256.

* libguile/objects.h (SCM_OUT_PCLASS_INDEX, SCM_INOUT_PCLASS_INDEX):
  Likewise.

* libguile/ports.c (scm_make_port_type): Likewise.

* libguile/ports.h (SCM_I_MAX_PORT_TYPE_COUNT): New macro.
2009-02-03 00:02:59 +01:00
Ludovic Courtès
04795a1cb2 GOOPS: Statically allocate the SMOB class array.
* libguile/goops.c (scm_smob_class): Statically allocate it.
  (create_smob_classes): Don't malloc(3) `scm_smob_class'.

* libguile/goops.h (scm_smob_class): Update declaration.

* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): When
  checking whether GOOPS is initialized, check whether the first element
  of SCM_SMOB_CLASS is non-zero.
2009-02-03 00:02:50 +01:00
Ludovic Courtès
202271f291 Publish the maximum number of SMOB types as `SCM_I_MAX_SMOB_TYPE_COUNT'.
* libguile/goops.c (create_smob_classes): Refer to
  `SCM_I_MAX_SMOB_TYPE_COUNT' rather than 255 (which is wrong) or 256.

* libguile/smob.c (MAX_SMOB_COUNT): Alias for `SCM_I_MAX_SMOB_TYPE_COUNT'.

* libguile/smob.h (SCM_I_MAX_SMOB_TYPE_COUNT): New macro.
2009-02-03 00:02:36 +01:00
Andy Wingo
e94ecc68c2 Name anonymous let- or letrec-bound procedures
* module/language/scheme/compile-ghil.scm (let, letrec): Give names to
  procedures of the form (let ((foo (lambda ....)))).
2009-02-02 23:36:14 +01:00
Andy Wingo
e311f5fa04 tick in calls, procedure-name works on compiled procedures
* module/system/vm/program.scm:
* libguile/programs.h:
* libguile/programs.c (scm_program_bindings, scm_program_bindings)
  (scm_program_properties, scm_program_name): Unfortunately, implement
  more procs in C, so that C can use them more easily.

* libguile/debug.c (scm_procedure_name): Dispatch to scm_program_name as
  appropriate.

* libguile/vm-i-system.c (call): Tick in a call.
2009-02-02 23:00:36 +01:00
Julian Graham
c010924a71 Update SRFI-11 docs to use correct name for let*-values.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2009-02-02 21:57:11 +01:00
Ludovic Courtès
475461b7a0 Use `GC_base ()' to determine whether a pointer points to the heap.
* libguile/boehm-gc.h (SCM_I_IS_POINTER_TO_THE_HEAP): Use `GC_base ()'
  instead of `GC_{least,greatest}_plausible_heap addr' since the GC does
  not assume that the heap is contiguous (suggested by Ivan Maidanski
  and Hans Boehm).
2009-02-01 21:59:32 +01:00
Andy Wingo
8403b9f59b fix the disassembler for load-string, load-symbol et al
* module/language/assembly/decompile-bytecode.scm (decode-bytecode): Fix
  decoding of lengths in loader instructions.
2009-02-01 11:32:07 +01:00
Andy Wingo
89bbf35596 no disasm in measure.scm
* benchmark/measure.scm: Don't use (system vm disasm).
2009-02-01 11:29:43 +01:00
Andy Wingo
5338b62b86 don't make intermediate garbage when making vectors in the vm
* libguile/vm-i-system.c (vector): Don't cons up a list just to make a
  vector. Saves a couple percent in total cell allocation when loading
  syncase. Probably not worth it, but foo!
2009-02-01 11:25:51 +01:00
Andy Wingo
ac47d5f639 avoid 8 words of allocation per lambda, whoooo
* libguile/objcodes.c (scm_bytecode_to_objcode): Check that the length of
  the vector matches the length embedded in the bytecode.

* libguile/programs.c (scm_program_meta): Call through to
  scm_objcode_meta, instead of looking in the object table. Avoids
  consing up a program+objcode slice for the meta until the meta is
  actually called.

* libguile/vm-i-loader.c (load-program): Step past the metadata too.

* module/language/glil/compile-assembly.scm (make-meta): Just return the
  load-program form, or #f.
  (assoc-ref-or-acons, object-index-and-alist, make-object-table): Don't
  write the meta into the object table.
  (glil->assembly): Instead write the meta into the load-program form.
2009-02-01 10:50:45 +01:00
Andy Wingo
1f1ec13b5c add code for writing out metadata to the end of a program
* libguile/objcodes.c (make_objcode_by_mmap, scm_c_make_objcode_slice):
  Verify the lengths with the meta-length.
  (scm_objcode_meta): New procedure, for getting at the meta-info of an
  objcode.
  (scm_objcode_to_bytecode):
  (scm_write_objcode): Write bytecode with the metadata too.

* module/system/vm/objcode.scm: Export object-meta.

* module/language/assembly.scm (byte-length):
* module/language/assembly/compile-bytecode.scm (write-bytecode):
* module/language/assembly/decompile-bytecode.scm (decode-load-program):
* module/language/assembly/disassemble.scm (disassemble-load-program):
* module/language/glil/compile-assembly.scm (glil->assembly):
* test-suite/tests/asm-to-bytecode.test ("compiler"): Change to
  load-program format to have meta-or-#f instead of meta-length, so that
  we can serialize the meta as objcode without a load-program byte. Add a
  test for writing out the meta.
2009-02-01 10:15:00 +01:00
Andy Wingo
9aeaabdc45 add metalen field to bytecode serialization
* libguile/objcodes.h (struct scm_objcode): Add a new field, metalen, in
  preparation for embedding metadata within a program.
  (SCM_OBJCODE_META_LEN, SCM_OBJCODE_TOTAL_LEN): New defines.

* libguile/vm.c (really_make_boot_program):
* module/language/assembly.scm (*program-header-len*, byte-length):
* module/language/assembly/compile-bytecode.scm (write-bytecode):
* module/language/assembly/decompile-bytecode.scm (decode-load-program):
* module/language/assembly/disassemble.scm (disassemble-load-program):
* module/language/glil/compile-assembly.scm (glil->assembly):
* test-suite/tests/asm-to-bytecode.test ("compiler"): Update for metalen
  addition.
2009-02-01 09:19:24 +01:00
Ludovic Courtès
9b41542f4d Fix invalid writes to read-only stringbufs.
* libguile/strings.c (SET_STRINGBUF_SHARED): Don't modify BUF if it's
  already marked as shared since it might be a read-only stringbuf.
  This error can be caught when linking with GNU ld with "-z relro".
2009-02-01 01:54:41 +01:00
Ludovic Courtès
46f9baf49a Allow the static initialization of subrs.
* libguile/Makefile.am (snarf-gsubr.h): New target.
  (BUILT_SOURCES, nodist_modinclude_HEADERS, MOSTLYCLEANFILES): Add
  `snarf-gsubr.h'.

* libguile/procs.h (SCM_SUBR_ARITY_TO_TYPE): New macro.

* libguile/snarf.h (SCM_DEFINE): Rename to...
  (SCM_DEFINE_GSUBR): this.
  (SCM_DEFINE_SUBR)[SCM_SUPPORT_STATIC_ALLOCATION]: New macro.
  (SCM_DEFINE_SUBR_reqX_optY_rstZ)[SCM_SUPPORT_STATIC_ALLOCATION]: New
  set of macros.
  (SCM_IMMUTABLE_SUBR): New macro.
2009-01-31 21:56:28 +01:00
Andy Wingo
d2d7acd5c1 cache 8 boot programs
* libguile/vm.c (vm_make_boot_program): Cache boot programs for nargs <
  8.
2009-01-31 21:54:59 +01:00
Ludovic Courtès
6eca5d2b9b Allow several `SNARF_INIT ()' per CPP output line.
* libguile/guile-snarf.in (modern_snarf): Allow several `SNARF_INIT ()'
  per line.  This makes it possible to write snarffing macros that
  contain several `SNARF_INIT ()' invocations.
2009-01-31 21:06:40 +01:00
Ludovic Courtès
b68095f091 Improve CPP token pasting in <snarf.h>.
* libguile/snarf.h (scm_i_paste, scm_i_paste3): New macros.
  (SCM_SYMBOL, SCM_GLOBAL_SYMBOL, SCM_IMMUTABLE_STRING): Use them.
2009-01-31 20:54:50 +01:00
Ludovic Courtès
dbe4d258f6 Don't register disappearing links for non-heap objects.
* libguile/boehm-gc.h (SCM_I_IS_POINTER_TO_THE_HEAP,
  SCM_I_REGISTER_DISAPPEARING_LINK): New.

* libguile/vectors.c (scm_c_vector_set_x): Use
  `SCM_I_REGISTER_DISAPPEARING_LINK ()' instead of
  `GC_GENERAL_REGISTER_DISAPPEARING_LINK ()'.

* libguile/weaks.c (scm_weak_car_pair, scm_weak_cdr_pair,
  scm_doubly_weak_pair): Likewise.
2009-01-31 19:26:45 +01:00
Andy Wingo
9bb8012dd6 remove conv.scm, disasm.scm; objcode->bytecode rename
* module/system/vm/Makefile.am:
* module/system/vm/conv.scm:
* module/system/vm/disasm.scm: Remove these modules, as their
  functionality is now in (language ...).

* libguile/objcodes.h:
* libguile/objcodes.c:
* module/system/vm/objcode.scm: Rename objcode->u8vector to
  objcode->bytecode.

* module/system/vm/frame.scm:
* module/language/bytecode/spec.scm: Fix for objcode->bytecode.

* scripts/disassemble:
* testsuite/run-vm-tests.scm: Fix for (system vm disasm) removal.

* module/system/repl/command.scm: Use the right disassembler.
2009-01-30 14:36:49 +01:00
Andy Wingo
d7236899f5 add disassembler that fits in with old compiler tower
* module/language/assembly/Makefile.am:
* module/language/assembly/disassemble.scm: Add a disassembler, based on
  the old one but fitting in with the decompiler tower.

* module/language/objcode/spec.scm (decompile-value): When decompiling
  programs, shove all the metadata that we know about into the "env".

* module/system/base/compile.scm (decompile-fold, decompile): Return the
  env from `decompile' as a second value. Not sure if `compile' should do
  this too.
2009-01-30 14:12:57 +01:00
Andy Wingo
7b107cceb9 add decompilers that can take us back to assembly
* module/language/assembly/Makefile.am:
* module/language/assembly/spec.scm:
* module/language/assembly/decompile-bytecode.scm: Add a bytecode
  decompiler. Neat!

* module/language/bytecode/spec.scm (decompile-objcode):
* module/language/objcode/spec.scm (decompile-value): Add some
  "decompilers" here too.

* module/system/base/compile.scm (current-language): Since we can refer
  to languages by name, do so here -- removes the previous
  anti-circularity hack.
  (compile-file, compile): Refer to target languages by name.
  (decompile): New public function. Neat!

* module/system/base/language.scm (lookup-decompilation-order): Fix so we
  look for decompilers with the high-level language definition.
2009-01-30 12:59:29 +01:00
Andy Wingo
5d6fb8bbeb allow specification of languages by name; add decompilers to languages
* module/system/base/language.scm (lookup-decompilation-order): New
  function, like its compiling cousin, but backwards.
  (compute-translation-order): Rework so that languages can be specified
  either by name or by identity. Return a list of language - procedure
  pairs, without the "to" language in the list, instead of a list of
  languages.
  (invalidate-compilation-cache!): Invalidate the decompilation cache
  too.
  (<language>): Add a decompiler field.

* module/system/base/compile.scm (compile-passes): Much simpler now that
  lookup-compilation-order gives us the procedures directly.

* module/language/*/spec.scm: Specify compilers by name, so that we can
  avoid unnecessary module loads, and so that when we specify
  decompilers, we can avoid cycles.
2009-01-30 11:41:02 +01:00