1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-22 11:34:09 +02:00
Commit graph

18255 commits

Author SHA1 Message Date
Andy Wingo
7ff017002d Fix continuation marking, and some tests.
* libguile/continuations.c (continuation_mark): Mark the vm
  continuations.

* libguile/vm.c (vm_cont_mark): Fix the marking function.
  (vm_mark): Fix this one too -- the size is a number of STACKITEMS,
  which we foolishly assume are the same size as SCM.

* test-suite/tests/ftw.test: Make our stat hacks verifyable without
  assuming that they are interpreted.

* test-suite/tests/r5rs_pitfall.test: Re-indent.
2008-09-26 13:42:09 +02:00
Andy Wingo
107139eaad actually compile start-stack to something useful
* ice-9/boot-9.scm (start-stack): Define as a defmacro instead of an acro
  in C. We have a way to delay evaluation of the exp, after all: putting
  it in a thunk is sufficient.

* libguile/debug.h:
* libguile/debug.c (scm_sys_start_stack): Renamed from scm_start_stack,
  and exposed to the user. Takes a thunk instead of an expression +
  environment.
  (scm_m_start_stack): Remove this acro.

* module/language/scheme/translate.scm (custom-transformer-table): Remove
  the start-stack special case.
2008-09-26 12:03:36 +02:00
Ludovic Courtès
76ed3e877f Enclose `regexp.test' in a module.
* test-suite/tests/regexp.test: Add `define-module' clause.
2008-09-25 21:36:14 +02:00
Ludovic Courtès
c633310265 Fix handling of the FLAGS argument in `fold-matches'.
* ice-9/regex.scm (fold-matches): If FLAGS is non-null, use
  `(car flags)', not `flags'.

* test-suite/tests/regexp.test ("fold-matches"): New test prefix.

* NEWS: Update.
2008-09-25 21:07:06 +02:00
Andy Wingo
99b1dd09cc further compilation fixes -- all files compile fine now
* ice-9/runq.scm (strip-sequence): Remove use of obtuse guile `define'
  extension.

* ice-9/boot-9.scm (while): Redefine so as not to unquote in a procedure.
  Less hygienic. Perhaps we should switch to syncase at some point.

* ice-9/session.scm (help): Redefine as a normal macro, so that it can be
  compiled. Not very useful though -- further effort should go into
  (system repl ...).
  (system-module): Removed, it didn't work, and is not useful as far as I
  can tell.

* ice-9/string-fun.scm (string-prefix-predicate): Remove guile define
  extension usage. Compilation also fixed by `while' compilation fix.

* ice-9/threads.scm (par-mapper): Remove guile define extension usage.
2008-09-25 17:17:02 +02:00
Andy Wingo
7024b58329 compile delay' into make-promise' with a thunk
* module/language/scheme/translate.scm (custom-transformer-table):
  Translate `delay' into `make-promise'.
2008-09-25 16:50:21 +02:00
Andy Wingo
7c455996e8 export `make-promise' to scheme
* libguile/eval.h:
* libguile/eval.c (scm_make_promise): Rename from `scm_makprom', and
  export as the scheme procedure, `make-promise'.

* libguile/eval.i.c (CEVAL): s/makprom/make_promise/.
2008-09-25 16:16:35 +02:00
Andy Wingo
8ab3c80f8b enable compilation of more modules
* ice-9/Makefile.am: Compile most modules. There are still a couple that
  fail to compile.
2008-09-25 13:54:54 +02:00
Andy Wingo
1e6ebf54db a number of small compilation fixes
* ice-9/boot-9.scm: Allow a compiled load of posix, networking, and
  deprecated files.

* module/language/scheme/translate.scm (lookup-transformer): Lookup the
  sc-macro by value, not by name. Works around the fact that compiled
  macros don't have names, which is probably a bug.

* module/system/base/compile.scm (syntax-error)
  (call-with-compile-error-catch): Throw and catch a key that's not used
  by anyone else. Write error messages to the error port.

* module/system/repl/repl.scm (default-catch-handler): Call display-error
  with the correct number of arguments.

* module/system/vm/frame.scm (frame-program-name): Guard against unbound
  variables.

* ice-9/optargs.scm (let-keywords-template): Don't unquote in a helper
  procedure. A bit irritating. I suppose we should fix the modules +
  syncase situation at some point, and then switch to syncase.
2008-09-25 13:46:09 +02:00
Andy Wingo
5ba9d84978 compile psyntax-pp
* ice-9/Makefile.am: Compile psyntax-pp.scm, which is the new name of
  psyntax.pp.

* ice-9/syncase.scm: Load the pre-processed source as psyntax-pp so that
  we load up a .go file if available.
2008-09-25 13:40:13 +02:00
Andy Wingo
cd829416b2 fix handling of multiple values from c functions
* libguile/vm-i-system.c (mv-call, goto/cc): Fix handling of values
  returns from C or interpreted functions.
2008-09-25 12:08:54 +02:00
Andy Wingo
ff1592a106 add gdbinit for debugging the vm
* gdbinit: Add my gdbinit. The most useful commands are gwrite and
  vmstack.
2008-09-25 12:07:52 +02:00
Andy Wingo
76282387ea compile call/cc, yee ha
* libguile/vm-i-system.c (call, goto/args): Add a FIXME for handling the
  case in which a call to the interpreter returns a values object.
  (call/cc, goto/cc): Flesh out, and handle full continuations (with the
  C stack also).

* module/language/scheme/translate.scm (custom-transformer-table):
  Compile call-with-current-continuation. This is necessary so that the
  called procedure is called in tail position.

* module/system/il/compile.scm (codegen): Translate apply to goto/apply,
  call/cc to goto/cc, etc when in tail position.
2008-09-25 11:07:54 +02:00
Andy Wingo
f63ea2ce78 fix bug introduced in the fluid commit
* libguile/vm.c (the-vm): If the dynamic binding of *the-vm* is false,
  make a new vm. Fixes multiple threads with the vm since the *the-vm*
  fluid changes.
2008-09-25 11:04:35 +02:00
Andy Wingo
bfffd2583c make call/cc capture and restore the vm stacks
* libguile/continuations.c (scm_make_continuation): Capture VM
  continuations as well, as their stack is outside the C stack.
  (copy_stack): Reinstate VM stacks with the C stack.

* libguile/continuations.h (scm_t_contregs): Add a pointer for VM stacks.
  A binary-incompatible change -- hopefully not too many people were
  messing around with this struct, though.

* libguile/vm-engine.c (vm_run): Add a note about possibly maintaining a
  stack of vms.

* libguile/vm.c (struct scm_vm_cont): New struct, distinct from scm_vm.
  (vm_cont_mark, vm_cont_free, capture_vm_cont, reinstate_vm_cont):
  Reorder some code, and fix some bad assumptions about what part of the
  stack to copy; obviously this code was never used.

* libguile/vm.h:
* libguile/vm.c (scm_vm_capture_continuations)
  (scm_vm_reinstate_continuations): New public functions, used by
  continuations.c.
2008-09-24 17:04:14 +02:00
Andy Wingo
7bbed5181c the vm is a fluid
* module/system/vm/vm.scm:
* libguile/vm.h:
* libguile/vm.c: Make the `the-vm' procedure access a fluid, `*the-vm*'.
  Export that fluid from vm.h and vm.scm.
2008-09-24 11:47:25 +02:00
Ludovic Courtès
b66a552487 Merge branch 'master' into boehm-demers-weiser-gc 2008-09-23 19:01:01 +02:00
Ludovic Courtès
fb2f8886c4 Make literal strings (i.e., returned by `read') read-only.
* libguile/read.c (scm_read_string): Use `scm_i_make_read_only_string ()' to
  return a read-only string, as mandated by R5RS.  Reported by Bill
  Schottstaedt <bil@ccrma.Stanford.EDU>.

* libguile/strings.c (scm_i_make_read_only_string): New function.
  (scm_i_shared_substring_read_only): Special-case the empty string
  so that the read-only and read-write empty strings are `eq?'.  This
  optimization is relied on by the `substring/shared' `empty string'
  test case in `srfi-13.test'.

* libguile/strings.h (scm_i_make_read_only_string): New declaration.

* test-suite/tests/strings.test ("string-set!")["literal string"]: New test.

* NEWS: Update.
2008-09-23 18:45:27 +02:00
Ludovic Courtès
fd2b17b9cb Make `symbol->string' return a read-only string.
* libguile/strings.c (scm_i_symbol_substring): Return a read-only string
  since R5RS requires `symbol->string' to return a read-only string.
  Reported by Bill Schottstaedt <bil@ccrma.Stanford.EDU>.

* test-suite/tests/symbols.test: Add `define-module' clause.
  (exception:immutable-string): Adjust to current exception.
  ("symbol->string")["result is an immutable string"]: Use
  `pass-if-exception' instead of `expect-fail-exception'.

* NEWS: Update.
2008-09-23 18:44:27 +02:00
Neil Jerram
1dd797921c Fix for incorrect (gcd -2) => -2; should give 2.
(reported by Bill Schottstaedt)

* libguile/numbers.c (scm_gcd): When only one arg given, use scm_abs
  to ensure that result is non-negative.

* test-suite/tests/numbers.test ("gcd"): New test, (gcd -2).
2008-09-22 21:21:20 +01:00
Ludovic Courtès
21c097e0ed Use GC's accessors rather than its global variables.
* libguile/gc.c (scm_storage_prehistory): Use `GC_set_free_space_divisor ()'
  instead of accessing the global variable directly.
2008-09-19 10:25:04 +02:00
Ludovic Courtès
f8c01b6f68 Fix strftime' documentation wrt. %Z'.
* doc/ref/posix.texi (Time)[strftime]: Remove erroneous note saying
  that `%Z' ignores `tm:zone'.  Reported by Neil Jerram.
2008-09-18 23:13:42 +02:00
Andy Wingo
02b84691b2 don't poke installed scm, go, etc files when running pre-inst-guile
* libguile/load.c (scm_init_load_path): If GUILE_SYSTEM_PATH is set, use
  that instead of the compiled-in suffix to the load path. And, as a
  special case, GUILE_SYSTEM_PATH= is interpreted as '(). A bit nasty.

* pre-inst-guile-env.in (top_builddir): Set GUILE_SYSTEM_PATH to the
  empty string, if it is not set.
2008-09-18 23:04:58 +02:00
Ludovic Courtès
72e6b60838 Implement scm_without_guile ()' in terms of GC_do_blocking ()'.
* libguile/threads.c (guilify_self_1): Initialize `t->guile_mode'.
  (guilify_self_2): Likewise.
  (struct without_guile_arg): New type.
  (without_guile_trampoline): New function.
  (scm_without_guile): Implement in terms of `GC_do_blocking ()'.

* libguile/threads.h (scm_i_thread)[guile_mode]: New field.
2008-09-18 22:55:16 +02:00
Ludovic Courtès
108e4c5b64 Remove double inclusion of <config.h> in `threads.c'. 2008-09-18 22:52:33 +02:00
Ludovic Courtès
9625c900e4 configure: Look for `GC_do_blocking ()' and its declaration.
* configure.in: Look for `GC_do_blocking ()' and its declaration.
2008-09-18 22:49:59 +02:00
Andy Wingo
d51406fe87 lambda-lifting for (lambda () ...) as consumer of call-with-values
* libguile/vm-engine.c (vm_run): Add new error case,
  vm_error_not_enough_values.

* libguile/vm-i-system.c (goto/nargs, call/nargs): So, in these cases, if
  we get too many values, we don't truncate the values like we do in the
  single-value continuation case, or in the mvbind case. What to do? I
  guess we either truncate them here, or only allow the correct number of
  values. Dunno. Mark the code as a fixme.
  (truncate-values): New instruction, for mv-bind: checks that the number
  of values on the stack is compatible with the number of bindings we
  have arranged for them, truncating if necessary.

* module/language/scheme/translate.scm (custom-transformer-table):
  Compile receive as a primary form -- not so much because it is a
  primary form, but more to test the mv-bind machinery. Also it's more
  efficient, I think.

* module/system/il/compile.scm (lift-variables!): New helper, factored
  out of `optimize'.
  (optimize): Add a few more cases. Adapt `lambda' optimization, which
  isn't much. I'm not happy with ghil as a mungeable language.
  Add a case for call-with-values with the second argument is
  a lambda: lift the lambda. Untested.
  (codegen): Refactor the push-bindings! code. Compile mv-bind.

* module/system/il/ghil.scm (<ghil-mv-bind>): Add mv-bind construct,
  along with its procedures.

* module/system/il/glil.scm (<glil-mv-bind>): Add mv-bind construct,
  different from the high-level one. It makes sense in the source, I
  think.

* module/system/vm/assemble.scm (codegen): Assemble glil-mv-bind by
  pushing onto the bindings list, and actually push some code to truncate
  the values.
2008-09-18 22:49:55 +02:00
Ludovic Courtès
2a5bf2eeec Use the `GC_FREE_SPACE_DIVISOR' environment variable.
* libguile/gc.c (scm_storage_prehistory): Initialize `GC_free_space_divisor'
  using the `GC_FREE_SPACE_DIVISOR' environment variable.
2008-09-18 22:11:43 +02:00
Ludovic Courtès
87e7228ff6 Fix first-time compilation
Hello!

The attached patch fixes first-time compilation, by ensuring SRFI
modules are built before "guile-tools compile" is ever run.

Thanks,
Ludo'.

From 691a111c440a26c021f52b4027b0d9772f8e04cc Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
Date: Tue, 16 Sep 2008 23:13:38 +0200
Subject: [PATCH] Fix compilation order of the sub-directories.

* Makefile.am (SUBDIRS): Move `ice-9' past `srfi' and friends, so that
  the SRFI modules needed by the compiler are built before "guile-tools
  compile" is used.
2008-09-18 20:13:46 +02:00
Andy Wingo
d600df9aa9 fix case in which we can fail to exit the repl cleanly
* module/system/repl/repl.scm (next-char): Don't throw if we get an EOF,
  just return the EOF object. Fixes a case in which we fail to exit
  cleanly.
2008-09-18 20:05:23 +02:00
Ludovic Courtès
6033d3266c Remove per-thread `gc_running_p'.
* libguile/gc.c (scm_gc): Don't use `scm_gc_running_p' as
  an lvalue.

* libguile/gc.h (scm_gc_running_p): Define to 0.

* libguile/threads.h (scm_i_thread)[gc_running_p]: Remove.
2008-09-18 00:04:38 +02:00
Ludovic Courtès
f5cc9619df Remove GC-related fields from `scm_i_thread'.
* libguile/gc.h (scm_i_freelist, scm_i_freelist2): Remove declarations.

* libguile/threads.c (resume): Don't use `t->clear_freelists_p' and
  `scm_i_freelist{,2}'.
  (scm_enter_guile, scm_leave_guile, guilify_self_1): Don't use
  the `heap_mutex' and other fields removed from `scm_i_thread'.
  (scm_i_freelist, scm_i_freelist2): Remove.

* libguile/threads.h (scm_i_thread)[heap_mutex, freelist, freelist2,
  clear_freelists_p]: Remove.
2008-09-17 23:37:31 +02:00
Ludovic Courtès
43adae308c Remove code intended to put threads to sleep.
Actually, threads would "go to sleep" either by blocking on a heap
allocation, or by noticing `scm_i_thread_go_to_sleep' is set when
running `SCM_TICK', which limits the applicability of this technique
(e.g., it was not appropriate for the shared string code).

* libguile/threads.c (scm_i_thread_go_to_sleep, scm_i_thread_put_to_sleep,
  scm_i_thread_invalidate_freelists, scm_i_thread_wake_up,
  scm_i_thread_sleep_for_gc): Remove.

* libguile/threads.h (scm_i_thread_go_to_sleep, scm_i_thread_put_to_sleep,
  scm_i_thread_invalidate_freelists, scm_i_thread_wake_up,
  scm_i_thread_sleep_for_gc): Remove declarations.
  (SCM_THREAD_SWITCHING_CODE): Do nothing.
2008-09-17 22:58:32 +02:00
Ludovic Courtès
902578f15a Remove use of `scm_i_thread_put_to_sleep ()' in the string code.
* libguile/strings.c (scm_i_string_writable_chars): Remove use of
  `scm_i_thread_put_to_sleep ()'.  This leaves a race condition,
  which is hopefully not harmful.
2008-09-17 20:41:41 +02:00
Ludovic Courtès
8b039053b8 Remove GC-related code from fluids.
* libguile/fluids.c (all_dynamic_states, all_fluids): Remove.  Together,
  they prevented dynamic states and fluids to be collected.  Callers no
  longer use them.
  (resize_all_states): Remove.
  (grow_dynamic_state): New function.
  (next_fluid_num): Don't call `resize_all_states ()'.
  (scm_i_fluid_num, scm_i_fast_fluid_ref, scm_i_fast_fluid_set_x): Remove,
  as they broke encapsulation and would have needed duplication of the lazy
  dynamic state growing code.
  (scm_fluid_ref, scm_fluid_set_x): Lazily grow the dynamic state's fluid
  vector.
  (scm_fluids_prehistory): Don't set an `scm_after_sweep_c_hook'.

* libguile/fluids.h (SCM_FLUID_NUM, SCM_FAST_FLUID_REF, SCM_FAST_FLUID_SET_X,
  scm_i_fluid_num, scm_i_fast_fluid_set_x, scm_i_fast_fluid_ref): Remove.

* libguile/load.c (the_reader_fluid_num): Remove.
  (scm_primitive_load): Use `scm_fluid_ref ()' instead of
  `SCM_FAST_FLUID_REF ()'.
  (scm_init_load): Likewise.
2008-09-17 00:25:03 +02:00
Ludovic Courtès
bc743877ff Use immutable cells for vectors.
* libguile/vectors.c (scm_c_make_vector): Use `scm_immutable_cell ()'.
2008-09-16 12:17:29 +02:00
Ludovic Courtès
a284cc7ed8 Use immutable double-cells for symbols.
* libguile/strings.c (scm_i_make_symbol): Use `scm_immutable_double_cell ()'.
2008-09-16 12:12:38 +02:00
Ludovic Courtès
737219ddbb Add `scm_immutable_double_cell ()'.
* libguile/inline.h (scm_immutable_double_cell): New.
2008-09-16 12:10:52 +02:00
Andy Wingo
efbd589204 compile call-with-values, woot!
* libguile/vm-engine.c (vm_run): Add another byte onto the bootstrap
  program, as the offset passed to mv-call now takes two bytes.

* module/system/vm/frame.scm (bootstrap-frame?): Update for the new
  bootstrap length. Really we should just check for 'halt though.

* libguile/vm-i-system.c (FETCH_OFFSET): New helper, used in BR().
  (goto/nargs, call/nargs): Versions of goto/args and call, respectively,
  that take the number of arguments from a value on the top of the stack.
  (mv-call): Call FETCH_OFFSET to get the offset.

* module/language/scheme/translate.scm (custom-transformer-table):
  Compile call-with-values to <ghil-mv-call>. There is some trickery
  because of the r4rs.scm call-with-values trampolines.

* module/system/il/ghil.scm: Add <ghil-mv-call> and accessors.

* module/system/il/compile.scm (codegen): Compile <ghil-mv-call>.

* module/system/il/glil.scm: Add <glil-mv-call>, which needs some special
  assembly because of the label. Fix some typos.

* module/system/vm/assemble.scm (byte-length): New helper, factored out
  and made more general.
  (codegen): Assemble mv-call, including the label.
  (check-length): New helper, makes sure that the addressing is
  consistent within the produced object code.
  (stack->bytes): Rewrite to be more generic -- now `br' instructions
  aren't the only ones jumping around in the instruction stream.

* module/system/vm/conv.scm (make-byte-decoder): Return two values in the
  #f case.

* module/system/vm/disasm.scm (disassemble-bytecode): Rewrite, because
  the previous implementation depended on a guile interpreter quirk:
  namely, that multiple values could be represented within one value, and
  destructured later.
2008-09-16 00:26:22 +02:00
Ludovic Courtès
3db825b067 Use immutable cells for closures.
* libguile/eval.c (scm_closure): Use `scm_immutable_cell ()' instead
  of `scm_cell ()'.

* libguile/procs.h (SCM_SETCODE, SCM_SETENV): Remove.
2008-09-15 23:45:37 +02:00
Ludovic Courtès
d3be55145a Use immutable cells (aka. libgc "stubborn") for subrs.
* libguile/procs.c (scm_c_make_subr): Use `scm_immutable_cell ()' instead
  of `scm_cell ()'.
  (scm_free_subr_entry): Remove.

* libguile/procs.h (SCM_SET_SUBRNUM, SCM_SET_SUBRF): Remove.
  (scm_free_subr_entry): Remove declaration.
2008-09-15 23:32:11 +02:00
Ludovic Courtès
53ea4fdf99 Add `scm_immutable_cell ()'.
* libguile/inline.h (scm_immutable_cell): New.
2008-09-15 23:28:35 +02:00
Ludovic Courtès
d6c74168a7 Remove unused GC string/symbol functions.
* libguile/strings.c (scm_i_stringbuf_mark, scm_i_stringbuf_free,
  scm_i_string_mark, scm_i_string_free, scm_i_symbol_mark,
  scm_i_symbol_free): Remove.

* libguile/strings.h: Remove corresponding declarations.
2008-09-15 22:59:08 +02:00
Ludovic Courtès
11d2fc0660 Conditionalize GC 6.x code.
* libguile/gc.c (scm_storage_prehistory): Have `GC_init ()' called only
  with GC 6.x (it doesn't hurt with 7.x, though).
2008-09-15 22:57:24 +02:00
Neil Jerram
b5cb4464ca Make multi-byte reads on unbuffered ports more efficient.
Idea and original patch were by Ludovic Courts, this is Neil Jerram's
reworking of it.

	* libguile/srfi-4.c (scm_uniform_vector_read_x): Use scm_c_read,
	instead of equivalent code here.

	* libguile/ports.c (scm_fill_input): Add assertion that read
	buffer is empty when called.
	(port_and_swap_buffer, swap_buffer): New, for...
	(scm_c_read): Use caller's buffer for reading, to avoid making N
	1-byte low-level read calls, in the case where the port is
	unbuffered (or has a very small buffer).
2008-09-15 18:52:51 +01:00
Ludovic Courtès
aa51e98ac5 Add `uniform-vector-read!' benchmark. 2008-09-15 01:35:04 +01:00
Andy Wingo
ef24c01bff add special case for (apply values ...)
* libguile/vm-engine.c (vm_run): Move nvalues to the top level, to avoid
  (spurious, it seems) gcc warnings about it being used uninitialized.

* libguile/vm-i-system.c (halt, return/values): Adapt to gcc silliness.
  Deindent some of return/values.
  (return/values*): New instruction, does what (apply values . args)
  would do.

* module/language/scheme/translate.scm (custom-transformer-table): Move
  the apply and @apply cases here from inline.scm, because we need some
  more cleverness when dealing with cases like (apply values . args).
  (lookup-apply-transformer): Define an eval transformer for `values',
  turning it into ghil-values*.

* module/system/il/compile.scm (codegen): Compile <ghil-values*> into
  return/values*.

* module/system/il/ghil.scm: Add <ghil-values*> and accessors.
  (ghil-lookup): Add optional argument, define?, which if false tells us
  not to actually cache the binding if it is not found in the toplevel.

* module/system/il/inline.scm: Remove apply clauses.

* module/system/vm/frame.scm (bootstrap-frame?): Update heuristic for
  bootstrap-frame?, as the bootstrap frame is now 5 bytes since it
  accepts multiple values.
2008-09-15 00:04:34 +02:00
Ludovic Courtès
04f8c62ca6 Fix detection of the GC version.
* libguile/boehm-gc.h: Don't expect `GC_VERSION_MAJOR' to be defined,
  as it's defined only since 7.x.
2008-09-14 22:07:34 +02:00
Andy Wingo
a222b0fa91 add multiple values support to the vm
* libguile/vm-engine.c (vm_run): The bootstrap program now uses mv_call,
  so as to allow multiple values out of the VM. (It did before, because
  multiple values were represented internally as single scm_values
  objects, but now that values go on the stack, we need to note the boot
  frame as accepting multiple values.)
  (vm_error_no_values): New error, happens if you pass no values into a
  single-value continuation. Passing more than one is OK though, it just
  takes the first one.

* libguile/vm-i-system.c (halt): Assume that someone has pushed the
  number of values onto the stack, and package up that number of values
  as a scm_values() object, for communication with the interpreter.
  (mv-call): New instruction, calls a procedure with a multiple-value
  continuation, even handling calls out to the interpreter.
  (return/values): New instruction, returns multiple values to the
  continuation. If the continuation is single-valued, takes the first
  value or errors if there are no values. Otherwise it returns to the
  multiple-value return address, pushing the number of values on top of
  the values.

* module/system/il/compile.scm (codegen): Compile <ghil-values> forms.

* module/system/il/ghil.scm (<ghil-values>) Add new GHIL data structure
  and associated procedures.

* module/language/scheme/translate.scm (custom-transformer-table):
  Compile (values .. ) forms into <ghil-values>.
2008-09-14 17:06:52 +02:00
Andy Wingo
7e97ad2dd6 look up scheme translators by value, not by name
* module/language/scheme/translate.scm (custom-transformer-table): Rename
  from `primitive-syntax-table', because now it will handle procedural
  values as well.
  (lookup-transformer): Update for renaming. Look up custom transformers
  by value, not name.
  (make-pmatch-transformers): Key the transformer table by value, not
  name.
2008-09-14 14:26:29 +02:00