1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-03 05:20:16 +02:00
Commit graph

12524 commits

Author SHA1 Message Date
Andy Wingo
8fc43b12c7 prompt, abort -> call-with-prompt, abort-to-prompt
* module/ice-9/boot-9.scm (default-prompt-tag, make-prompt-tag): New
  functions.
  (call-with-prompt, abort-to-prompt): Rename from `prompt' and `abort',
  respectively. These names are more clear, and allow `prompt' and
  `abort' to have more convenient, less general bindings.
  (default-throw-handler, custom-throw-handler, catch, %start-stack):
  Adapt callers.

* module/ice-9/control.scm: Adapt re-export list.
  (control): Remove binding, until we're sure that it is Sitaram's
  control.
  (abort): New binding, aborts to the nearest prompt with the default
  tag.
  (%): Use call-with-prompt.

* module/language/tree-il/primitives.scm (*primitive-expand-table*):
  (*interesting-primitive-names*): Adapt for prompt/abort changes.

* test-suite/tests/control.test: Take advantage of the defaults for %
  and abort.
2010-03-09 22:24:25 +01:00
Andy Wingo
a6cd355510 %start-stack in Scheme, in terms of prompts
* libguile/debug.h:
* libguile/debug.c (scm_sys_start_stack): Removed, we implement this in
  Scheme now.

* libguile/vm.h:
* libguile/vm.c (scm_vm_call_with_new_stack): Likewise removed.

* module/ice-9/boot-9.scm (%start-stack): Implement in terms of prompts.
  (%stacks): New fluid, for tracking active stacks.
  (start-stack): Implement using syntax-rules.
2010-03-09 21:32:56 +01:00
Andy Wingo
5c606217a4 fix continuation printing bug
* libguile/programs.c (scm_i_program_print): Fix bug printing
  continuations.
2010-03-09 21:32:56 +01:00
Ludovic Courtès
5af3378aab Don't export write-bytecode' from (language assembly compile-bytecode)'.
* module/language/assembly/compile-bytecode.scm: Don't export
  `write-bytecode'.

* test-suite/tests/asm-to-bytecode.test (write-bytecode): New global
  variable.
2010-03-07 23:53:22 +01:00
Ludovic Courtès
ba7e7139b3 Add wide-string compilation test.
* test-suite/tests/asm-to-bytecode.test ("compiler")[load-wide-string
  "λ"]: New test.
2010-03-07 23:51:40 +01:00
Ludovic Courtès
1caa6341b0 Fix miscompilation of non-ASCII Latin-1 strings.
The bug was introduced dad6817f ("Use the R6RS I/O API in
`write-bytecode'.").

* module/language/assembly/compile-bytecode.scm
  (write-bytecode)[write-string]: Rename to...
  [write-latin1-string]: ... this.  Add the `write-loader-len' call.
  Write each character individually instead of using `string->utf8'.
  [write-loader]: Remove.

* test-suite/tests/asm-to-bytecode.test ("compiler")[load-string "æ"]:
  New test.
2010-03-07 23:45:14 +01:00
Ludovic Courtès
bd5a75dcd8 Recycle fluid numbers.
* libguile/fluids.c: Remove outdated comment on the complexity of fluid GC.
  (FLUID_GROW): Increase to 128.
  (allocated_fluids): Change to `void **'.
  (allocated_fluids_num): Remove.
  (grow_dynamic_state): Remove race-condition checker.  Grow to
  ALLOCATED_FLUIDS_LEN.
  (next_fluid_num): Rename to...
  (new_fluid): ... this.  Return a fluid instead of a fluid number.
  Assume ALLOCATED_FLUIDS is sparse and search for a free number in it.
  Make ALLOCATED_FLUIDS point to pointerless memory and initialize
  individual elements with a pointer to the new fluid.  Register a
  disappearing link from there to the fluid.
  (scm_make_fluid): Use `new_fluid ()'.
  (scm_fluid_ref, scm_fluid_set_x, scm_i_swap_with_fluids): Remove
  assertion that wasn't checked in a thread-safe way.
2010-03-05 13:41:20 +01:00
Ludovic Courtès
c02924d02b Add new fluid tests.
* test-suite/tests/fluids.test ("initial fluid values")["initial value
  is inherited from parent thread"]: New test.
  ("fluid values are thread-local"): New test.
2010-03-05 13:38:57 +01:00
Ludovic Courtès
e2cf8eb921 Don't gratuitously over-engineer things...
* libguile/eval.c (eval)[SCM_M_CALL]: Always use `alloca' for ARGV.
2010-03-05 09:49:04 +01:00
Ludovic Courtès
b7ecadca7b Slightly optimize the memoizer, bootstrap evaluator, and `(ice-9 eval)'.
* libguile/eval.c (CAR, CDR, CAAR, CADR, CDAR, CDDR, CADDR, CDDDR): Use
  the macro variants, not the functions.
  (eval)[SCM_M_CALL]: When invoking a VM program, accumulate its
  arguments on the stack rather than on the heap.

* libguile/memoize.c (CAR, CDR, CAAR, CADR, CDAR, CDDR, CADDR, CDDDR,
  CADDR): Use the macro variants, not the functions.
  (scm_memoized_expression_typecode): Use `SCM_I_MAKINUM' instead of
  `scm_from_uint16'.
2010-03-05 00:36:47 +01:00
Ludovic Courtès
83a7171bf3 Remove obsolete compile-time option for freelist debugging.
* configure.ac: Remove `--enable-debug-freelist' option and
  `SCM_I_GSC_GUILE_DEBUG_FREELIST' substitution variable.

* libguile/gen-scmconfig.c (main): Remove references to
  `SCM_I_GSC_GUILE_DEBUG_FREELIST' and `GUILE_DEBUG_FREELIST'.

* libguile/gen-scmconfig.h.in (SCM_I_GSC_GUILE_DEBUG_FREELIST): Remove.
2010-03-05 00:36:47 +01:00
Andy Wingo
eddd16d782 some with-fluid* -> with-fluids
* module/ice-9/boot-9.scm (false-if-exception, load)
  (try-module-autoload):
* module/language/tree-il/compile-glil.scm (compile-glil): Turn some
  with-fluid* invocations into with-fluids.
2010-03-04 16:51:13 +01:00
Andy Wingo
2150e9a84a partial continuations print as #<partial-continuation ...>
* libguile/control.c (reify_partial_continuation):
* libguile/programs.c (scm_i_program_print):
* libguile/programs.h (SCM_F_PROGRAM_IS_PARTIAL_CONTINUATION)
  (SCM_PROGRAM_IS_PARTIAL_CONTINUATION): Distinguish partial
  continuations from full continuations.
2010-03-04 13:14:43 +01:00
Andy Wingo
2b2746a831 tighten up scm_i_dowinds, fixing invalid SCM_CAR (prompt)
* libguile/dynwind.c: Update comment regarding what can be on the wind
  stack.
  (scm_i_dowinds): Clean up to remove @bind and catch/throw-handler
  cases, to add a case for prompts, and to be more strict in general
  regarding the set of things that can be on the wind stack. Fixes a bug
  whereby prompts were accessed via SCM_CAR; thanks to Ken Raeburn for
  the report.
2010-03-04 13:14:43 +01:00
Andy Wingo
bbb2ecd1d1 add printers for prompts and with-fluids objects
* libguile/control.c:
* libguile/control.h (scm_i_prompt_print):
* libguile/fluids.c:
* libguile/fluids.h (scm_i_with_fluids_print):
* libguile/print.c (iprin1): Add printers for prompts and with-fluids
  objects.
2010-03-04 13:14:43 +01:00
Ludovic Courtès
dec84a0a6e Try to avoid `guile-test' failures when it can't display the name of a test.
This can happen, e.g., when printing "UNRESOLVED: regexp.test: TEST-NAME",
where TEST-NAME contains characters that cannot be converted to the
encoding of the current output or error port.

* test-suite/guile-test (main): Set the conversion strategy for the
  output and error ports to `escape'.

* test-suite/tests/regexp.test (current-output-port): Likewise.
2010-03-04 11:32:51 +01:00
Ken Raeburn
87bc7c8165 The load-module routine tries to interpret relative paths relative to
the module currently being loaded (i.e., make-texinfo.scm itself),
resulting in confusing behavior for offset builds.  So, don't use
them.

* doc/ref/Makefile.am ($(snarf_doc).texi): Use an absolute path for
  the input file.
2010-03-04 02:27:18 -05:00
Ludovic Courtès
d332d84610 Write the test suite log file in UTF-8.
* test-suite/guile-test (main): Set LOG-PORT's encoding to UTF-8.
2010-03-04 00:54:18 +01:00
Ludovic Courtès
1c242b37f0 Use with-latin1-locale' in regexp.test'.
As a side effect, it fixes tests on platforms with no 8-bit locale and
where executing regexps on characters >= 128 can lead to errors such as
`cannot convert to output locale "US-ASCII": ""\x80""'.

This commit partially reverts 7583976b ("More setlocale robustness in
regexp tests").

* test-suite/tests/regexp.test (mysetlocale, set-latin-1): Remove.
  ("regexp-quote"): Use `with-latin1-locale' instead of the above
  procedures.
2010-03-04 00:47:21 +01:00
Ludovic Courtès
c45de346fd Move Latin-1 locale fiddling to `(test-suite lib)'.
* test-suite/lib.scm (with-latin1-locale*): New procedure.
  (with-latin1-locale): New macro.

* test-suite/tests/bytevectors.test (with-locale, with-latin1-locale):
  Remove.  Adjust users.
2010-03-04 00:39:18 +01:00
Ludovic Courtès
f5147c84a2 Fix with-locale*' in (test-suite lib)'.
* test-suite/lib.scm (with-locale*): Set LOC to the previous locale
  name, not to the new locale name.  Only restore LOC when it's not #f.
  (with-locale): Use `syntax-rules'.
2010-03-03 23:57:50 +01:00
Andy Wingo
54096be752 psyntax expander tracks changes to current module in top-level begin
* module/ice-9/psyntax-pp.scm: Regenerated.
* module/ice-9/psyntax.scm (chi-top-sequence): Track changes to the
  current module. Allows e.g. top-level `define-module' within a begin
  to work.

* test-suite/tests/syncase.test ("changes to expansion environment"):
  Enable test.
2010-03-03 23:09:08 +01:00
Andy Wingo
05c51bcff5 use anonymous mv-bind in compile-glil.scm; fix abort compilation bug
* module/language/tree-il/compile-glil.scm (flatten): Change to use the
  anonymous <glil-mv-bind> form when truncating to 0 or 1 values. In
  those cases, remove the <glil-unbind> statements. As a side effect,
  fixes compilation of abort in a "values" context.

  Thanks to Tristan Colgate for the bug report.

* test-suite/tests/tree-il.test: Update to expect anonymous mv-bind.
2010-03-03 21:01:05 +01:00
Andy Wingo
a5c96cb99d <glil-mv-bind> can truncate values anonymously
* module/language/glil/compile-assembly.scm (glil->assembly): Allow an
  integer for `vars', which means simply to truncate the values, and not
  pass binding metadata to the compiler.
2010-03-03 20:57:35 +01:00
Andy Wingo
da7497e0fd add more tests to control.test
* test-suite/tests/control.test ("restarting partial continuations"):
  Add more tests, for `abort' in different positions. All succeed in the
  evaluator but fail with the compiler.
2010-03-03 20:57:35 +01:00
Ludovic Courtès
dc327575a8 Fix off-by-one error in the off-by-one fix of `make-srfi-4-vector'.
This is a followup to d900a8557d ("Fix
off-by-one error when initializing vectors in `make-srfi-4-vector'.").

* libguile/srfi-4.c (scm_make_srfi_4_vector): Don't initialize RET when
  LEN is zero.
2010-03-03 10:18:41 +01:00
Ludovic Courtès
3278efd3fa Add test checking whether fluids are GC'd.
* test-suite/tests/fluids.test ("fluids are GC'd"): New test.
2010-03-03 00:36:41 +01:00
Ludovic Courtès
b8ed3de36e Fix "coding:" cookies in the test suite.
* test-suite/tests/bytevectors.test, test-suite/tests/keywords.test,
  test-suite/tests/procprop.test, test-suite/tests/srfi-35.test,
  test-suite/tests/srfi-88.test: Add "coding:" cookie on the first line.
2010-03-02 23:36:29 +01:00
Ludovic Courtès
d900a8557d Fix off-by-one error when initializing vectors in `make-srfi-4-vector'.
* libguile/srfi-4.c (scm_make_srfi_4_vector): When FILL is bound and
  non-zero, initialize the last element.

* test-suite/tests/srfi-4.test ("TAG vectors")["make-TAGvector"]: New
  tests.
2010-03-02 23:16:26 +01:00
Ken Raeburn
69c9600678 Use libguile/control.x explicitly. 2010-03-02 00:41:26 -05:00
Julian Graham
d524964774 Change failing syncase test case to UNRESOLVED.
* test-suite/tests/syncase.test:
  ("expander detects changes to current-module"): Throw 'unresolved instead of
  returning #f.
2010-03-01 22:15:45 -05:00
Julian Graham
a2f7536db0 add (currently failing) test case for changing the current module inside
`begin' form

* test-suite/tests/syncase.scm: ("expander detects changes to current-module"):
  New test case.
2010-02-27 15:04:56 -05:00
Andy Wingo
adbdfd6d24 rewinding prompts works
* libguile/control.h (SCM_PROMPT_HANDLER): Remove, it was unused.
  (SCM_PROMPT_DYNWINDS): Rename from SCM_PROMPT_DYNENV.

* libguile/control.c: (scm_c_make_prompt): Take another arg, the winds
  that are to be in place for the prompt. Fix allocation to be 4 words
  instead of 5 (the handler was never used).

* libguile/eval.c (eval):
* libguile/throw.c (pre_init_catch): Adapt to scm_c_make_prompt change.

* libguile/vm-i-system.c (partial-cont-call): Grovel the new elements of
  the wind list in order to call setjmp() on the new prompts. Pass
  cookie to vm_reinstate_partial_continuation.
  (prompt): Adapt to scm_c_make_prompt change.

* libguile/vm.c (vm_reinstate_partial_continuation): Take a cookie arg,
  used when winding captured prompts onto the stack. Winding a prompt
  implies making a new prompt, actually -- with new registers, a new
  jump buffer, new winds, etc.

* test-suite/tests/control.test ("rewinding prompts"): Add a test for
  rewinding prompts.
2010-02-26 13:05:25 +01:00
Andy Wingo
416f26c753 catch, throw, with-throw-handler implemented in Scheme
* libguile/throw.c (tc16_jmpbuffer, tc16_pre_unwind_data): Remove these
  smob types, and associated constructors and accessors (all internal).
  (scm_catch, scm_catch_with_pre_unwind_handler):
  (scm_with_throw_handler, scm_throw): Simply dispatch to scheme.
  Lovely.
  (tc16_catch_closure): Introduce a new applicable smob type, for use by
  the C catch interface. All constructors and accessors are internal.
  (scm_c_catch, scm_internal_catch, scm_c_with_throw_handler): Build
  applicable smobs out of the C procedure arguments, so we can then
  dispatch through scm_catch et al.
  (scm_ithrow): Dispatch to scm_throw.
  (pre_init_catch, pre_init_throw): Restricted catch/throw
  implementation for use before boot-9 runs.
  (scm_init_throw): Bind the pre-init catch and throw definitions.

* module/ice-9/boot-9.scm (prompt, abort): Move these definitions up in
  the file.
  (catch, throw, with-throw-handler): Implement in Scheme. Whee!
2010-02-26 11:56:17 +01:00
Andy Wingo
e10cf6b9c7 deprecate lazy-catch
* libguile/deprecated.h:
* libguile/deprecated.c (scm_internal_lazy_catch, scm_lazy_catch):
  Deprecate, and print out a nasty warning that people should change to
  with-throw-handler.

* libguile/throw.h:
* libguile/throw.c (scm_c_with_throw_handler): Deprecate the use of the
  lazy_catch_p argument, printing out a nasty warning if someone
  actually passes 1 as that argument. The combination of the pre-unwind
  and post-unwind handlers should be sufficient.

* test-suite/tests/exceptions.test: Remove lazy-catch tests, as they are
  deprecated. Two of them fail:
  * throw/catch: effect of lazy-catch unwinding on throw to another key
  * throw/catch: repeat of previous test but with lazy-catch
  Hopefully people are not depending on this behavior, and the warning is
  sufficiently nasty for people to switch. We will see.

* test-suite/tests/eval.test ("promises"): Use with-throw-handler
  instead of lazy-catch.

* doc/ref/api-debug.texi:
* doc/ref/api-control.texi: Update to remove references to lazy-catch,
  folding in the useful bits to with-throw-handler.
2010-02-26 11:56:02 +01:00
Andy Wingo
d296431516 fix a prompt bug
* libguile/control.h:
* libguile/control.c (scm_c_make_prompt): Instead of taking a VM arg,
  take the registers directly.
  (scm_c_abort): Declare as returning void. In fact it will never
  return.

* libguile/eval.c (eval):
* libguile/throw.c (pre_init_catch): Adapt to prompt API change.

* libguile/vm-i-system.c (prompt): Pass the abort ip as the ip to
  scm_c_make_prompt. This fixes a bug in which we used the "offset"
  local var, but it wasn't guaranteed to be around after a longjmp.
2010-02-26 11:05:44 +01:00
Andy Wingo
b8af64db76 simplify handling of nonlocal prompt returns from c
* libguile/control.h:
* libguile/control.c (scm_i_prompt_pop_abort_args_x): New helper.

* libguile/eval.c (eval): Use the new helper.
2010-02-25 20:59:55 +01:00
Andy Wingo
da7fa082e8 more substance to control.test
* test-suite/tests/control.test ("suspend/resume with fluids"):
  ("restarting partial continuations"):
  ("reified continuations", "escape-only continuations"): More tests.
eval.scm's handling of with-fluids doesn't leave the VM

* module/ice-9/eval.scm (primitive-eval): Implement with-fluids in terms
  of with-fluids, to avoid recursively calling the VM via with-fluids*.
2010-02-25 00:43:52 +01:00
Andy Wingo
1371fe9b14 eval.scm's handling of with-fluids doesn't leave the VM
* module/ice-9/eval.scm (primitive-eval): Implement with-fluids in terms
  of with-fluids, to avoid recursively calling the VM via with-fluids*.
2010-02-25 00:43:52 +01:00
Andy Wingo
b3950ad6d8 error if given an unrewindable partial continuation
* libguile/vm-engine.c (vm_error_continuation_not_rewindable):
* libguile/vm-i-system.c (partial-cont-call):
* libguile/vm.h (SCM_VM_CONT_PARTIAL_P):
  (SCM_VM_CONT_REWINDABLE_P): Fix a bug in which we weren't checking if
  a partial continuation was actually rewindable.
2010-02-25 00:43:51 +01:00
Andy Wingo
35ac785286 fix embarrassing bug
* libguile/vm.c: Fix embarrassing error regarding the symbolitude of
  vm-error and friends.
2010-02-25 00:43:51 +01:00
Andy Wingo
ce4c9a6d00 start of tests for (ice-9 control)
* test-suite/Makefile.am:
* test-suite/tests/control.test: Add the beginnings of a delimited
  continuations test suite.
2010-02-24 23:33:20 +01:00
Andy Wingo
0404c97dc9 fix symbol initialization in vm.c
* libguile/vm.c (scm_bootstrap_vm): Fix case in which some symbols
  wouldn't be initialized by the time they were needed.
2010-02-24 23:32:04 +01:00
Andy Wingo
c8df99730a (ice-9 control) fixes
* module/ice-9/control.scm (%): Fix to allow tagged and default-tagged
  prompts.
  (abort): Re-export.
2010-02-24 23:20:38 +01:00
Andy Wingo
211fcbc8cd fix escape-only prompts
* libguile/control.c (scm_c_make_prompt): Whoops, set the escape-only
  flag properly here.
2010-02-24 23:19:41 +01:00
Andy Wingo
3ccee39194 add %default-prompt-tag, and error (not abort()) on an abort to bad tag
* libguile/init.c (scm_i_init_guile): Call scm_init_control after
  initing fluids.
* libguile/control.h (scm_sys_default_prompt_tag): New internal var.
* libguile/control.c (scm_c_abort): If abort is called for an unknown
  tag, raise an exception, except if the tag was the default prompt tag,
  in which case really abort -- to prevent recursion when some other
  patches land.
  (scm_init_control): Define %default-prompt-tag in the default
  environment.
2010-02-24 18:55:34 +01:00
Andy Wingo
29366989cf turn abort() calls in vm.c into exceptions
* libguile/vm.c (vm_return_to_continuation, vm_abort):
  (vm_reinstate_partial_continuation, really_make_boot_program): Turn
  some abort()s into scm_misc_errors.
2010-02-24 18:51:25 +01:00
Andy Wingo
9a1c6f1f0c rewind the dynamic state when entering a partial continuation
* libguile/control.c (cont_objcode):
* libguile/vm-i-system.c (partial-cont-call):
* libguile/vm.c (vm_reinstate_partial_continuation): Don't keep the
  "external winds" in a partial continuation, as they aren't logically
  part of the continuation. Reinstate the "internal winds" when entering
  a partial continuation. Things seem to work!
2010-02-24 17:43:02 +01:00
Andy Wingo
078014374c partial-cont-call works
* libguile/vm-i-system.c (partial-cont-call): Sync registers before
  splatting a partial continuation, and cache them back afterwards.

* libguile/vm.c (vm_reinstate_partial_continuation): Actually implement,
  except dynamic-wind.
2010-02-24 16:57:33 +01:00
Andy Wingo
6d804376e9 record IP in partial continuations
* libguile/control.c (reify_partial_continuation): Assert some
  invariants, and record the IP as the MVRA of the continuation.
2010-02-24 16:56:05 +01:00