bpt/guile.git
14 years agofold 1.9.6 NEWS into the main text
Andy Wingo [Sun, 10 Jan 2010 10:11:47 +0000 (11:11 +0100)]
fold 1.9.6 NEWS into the main text

* NEWS: Incorporate 1.9.6 NEWS items into the main text.

14 years agoFix bug: Use correct `FUNC_NAME' for `scm_macro_binding'.
Thien-Thi Nguyen [Sat, 9 Jan 2010 14:12:47 +0000 (15:12 +0100)]
Fix bug: Use correct `FUNC_NAME' for `scm_macro_binding'.

* libguile/macros.c (scm_macro_binding): Use correct FUNC_NAME.

Signed-off-by: Thien-Thi Nguyen <ttn@gnuvola.org>
14 years agoAdd cast in `make_vm' to silence compiler warning.
Thien-Thi Nguyen [Sat, 9 Jan 2010 14:06:20 +0000 (15:06 +0100)]
Add cast in `make_vm' to silence compiler warning.

* libguile/vm.c (make_vm): Add cast for .stack_base assignment.

Signed-off-by: Thien-Thi Nguyen <ttn@gnuvola.org>
14 years agoFix bug: Init auto var to unrandomize `stack_depth' rv.
Thien-Thi Nguyen [Sat, 9 Jan 2010 10:01:42 +0000 (11:01 +0100)]
Fix bug: Init auto var to unrandomize `stack_depth' rv.

* libguile/stacks.c (stack_depth): Init `n'.

Signed-off-by: Thien-Thi Nguyen <ttn@gnuvola.org>
14 years agofix SCM_STACK_OVERFLOW_P bug
Andy Wingo [Sat, 9 Jan 2010 22:11:23 +0000 (23:11 +0100)]
fix SCM_STACK_OVERFLOW_P bug

* libguile/stackchk.h (SCM_STACK_OVERFLOW_P): Fix a potential overflow,
  depending on the absolute values of the thread base and the stack
  limit. Thanks to Ivan Shcherbakov for the report.

14 years agoslight tweak to stack narrowing in the debugger
Andy Wingo [Sat, 9 Jan 2010 20:53:04 +0000 (21:53 +0100)]
slight tweak to stack narrowing in the debugger

* module/system/vm/debug.scm: Really narrow two frames and not by
  function, so it works in the evaluator.

14 years agofix bug in subr-call and smob-call
Andy Wingo [Sat, 9 Jan 2010 20:48:16 +0000 (21:48 +0100)]
fix bug in subr-call and smob-call

* libguile/vm-i-system.c (subr-call, smob-call): Unlike the previous
  situation, in which a call to a subr or a smob didn't actually build a
  frame, we no longer need to explicitly pop the procedure and its
  arguments. Indeed the procedure and its arguments must remain on the
  stack, for hooks and ticks and such always to see frames with valid
  procedures. Two lines out, two bugs less, and faster to boot.

14 years agoNarrow one more frame in debug.scm:debug-pre-unwind-handler
Andy Wingo [Sat, 9 Jan 2010 19:40:36 +0000 (20:40 +0100)]
Narrow one more frame in debug.scm:debug-pre-unwind-handler

* module/system/vm/debug.scm (debug-pre-unwind-handler): Narrow two
  frames instead of stack-reffing past one. The second frame is
  necessary, now that make-stack itself is on the stack.

14 years agoprint the error more nicely when we enter the debugger
Andy Wingo [Sat, 9 Jan 2010 19:31:35 +0000 (20:31 +0100)]
print the error more nicely when we enter the debugger

* module/system/vm/debug.scm (debug-pre-unwind-handler): Nicer printing
  of the error.

14 years agomake backtraces prettier
Andy Wingo [Sat, 9 Jan 2010 19:21:37 +0000 (20:21 +0100)]
make backtraces prettier

* module/system/vm/debug.scm (print-frames): Clean up a bit, reverting
  part of the previous change. (The problem was that in the else branch
  of the conditional, it didn't consume an arg.)

  In the future I would like to preserve the clean look of the
  backtraces. It's easier to read that way.

14 years agoport-encoding returns #f if port encoding not set
Andy Wingo [Sat, 9 Jan 2010 18:21:09 +0000 (19:21 +0100)]
port-encoding returns #f if port encoding not set

* libguile/ports.c (scm_port_encoding): Instead of returning "NONE" if
  we don't know the encoding, return #f. Allows truncated-print to work
  if you don't have a locale set.

14 years agoallocate free variables inline to closures
Andy Wingo [Sat, 9 Jan 2010 15:42:27 +0000 (16:42 +0100)]
allocate free variables inline to closures

* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump.

* libguile/programs.h (SCM_PROGRAM_FREE_VARIABLES)
  (SCM_PROGRAM_FREE_VARIABLE_REF, SCM_PROGRAM_FREE_VARIABLE_SET)
  (SCM_PROGRAM_NUM_FREE_VARIABLES):
* libguile/programs.c (scm_make_program, scm_program_num_free_variables)
  (scm_program_free_variable_ref, scm_program_free_variable_set_x):
  Allocate free variables inline with programs, instead of being in a
  vect. Should improve locality, and require fewer local variables in
  the VM.

* libguile/vm-engine.c (vm_engine): Remove free_vars and free_vars_count
  variables.

* libguile/vm-engine.h (CACHE_PROGRAM): No need to muck with free_vars
  and free_vars_count.
  (CHECK_FREE_VARIABLE): Update for inline free vars.

* libguile/vm-i-system.c (FREE_VARIABLE_REF): Update for inline free
  vars.
  (make-closure, fix-closure): Take the closure vals as separate stack
  args, and copy or fix them inline into the appropriate closure.

* module/language/objcode/spec.scm (program-free-variables): Define a
  local version of this removed function.

* module/language/tree-il/compile-glil.scm (flatten): Adjust to not make
  a vector when making closures.

* module/system/vm/program.scm: Export program-num-free-variables,
  program-free-variable-ref, program-free-variable-set!, and remove
  program-free-variables.

* test-suite/tests/tree-il.test ("lambda"): Update to not make vectors
  when making closures.

14 years agosmobs are applied with vm trampoline procedures
Andy Wingo [Sat, 9 Jan 2010 13:12:47 +0000 (14:12 +0100)]
smobs are applied with vm trampoline procedures

* libguile/smob.c: Instead of having special evaluator support for
  applying smobs, we use the same strategy that gsubr uses, that smob
  application should happen via a trampoline VM procedure, which uses a
  special opcode (smob-apply). So statically allocate all of the desired
  trampoline procedures here.
  (scm_i_smob_apply_trampoline): Unfortunately there's no real place to
  put the trampoline, so instead use a weak-key hash. It's nasty, but I
  think the benefits of speeding up procedure calls in the general case
  are worth it.

* libguile/smob.h (scm_smob_descriptor): Remove fields apply_0, apply_1,
  apply_2, and apply_3; these were never public. Also remove the
  gsubr_type field. Instead cache the trampoline objcode here.
  (SCM_SMOB_APPLY_0, SCM_SMOB_APPLY_1, SCM_SMOB_APPLY_2,
  SCM_SMOB_APPLY_3): Just go through scm_call_0, etc here.

* libguile/vm-i-system.c (call, tail-call, mv-call): Simplify. All
  procedure calls are VM calls now.
  (smob-call): New instruction, used in smob trampoline procedures.

* libguile/vm.c (apply_foreign): Remove. Yay!

* libguile/procprop.c (scm_i_procedure_arity): Refactor a bit for the
  smob changes.

14 years agore-add SCM_GSUBR_MAX
Andy Wingo [Sat, 9 Jan 2010 12:08:06 +0000 (13:08 +0100)]
re-add SCM_GSUBR_MAX

* libguile/gsubr.h (SCM_GSUBR_MAX): Restore this define, which specifies
  the max number of args to a gsubr.

* libguile/smob.c: Remove local SCM_GSUBR_MAX define.

14 years agoFix frame printing in the debugger.
Ludovic Courtès [Fri, 8 Jan 2010 15:12:12 +0000 (16:12 +0100)]
Fix frame printing in the debugger.

* module/system/vm/debug.scm (location-string): New procedure.
  (print-frames): Use it.  This fixes cases where LINE is #f and makes a
  distinction between FILE = stdin and FILE is unknown.

14 years agoFactorize the location stack handling in warning analyses.
Ludovic Courtès [Fri, 8 Jan 2010 11:02:00 +0000 (12:02 +0100)]
Factorize the location stack handling in warning analyses.

* module/language/tree-il/analyze.scm (analyze-tree)[traverse]: New
  argument UPDATE-LOCS.  Update users.
  [keep-locs, extend-locs, shrink-locs]: New procedures.
  (<binding-info>, <toplevel-info>): Remove `locs' field.
  (unused-variable-analysis, unbound-variable-analysis): Update
  accordingly.

14 years agoUse `HORIZONTAL ELLIPSIS' when available in `truncated-print'.
Ludovic Courtès [Fri, 8 Jan 2010 09:57:32 +0000 (10:57 +0100)]
Use `HORIZONTAL ELLIPSIS' when available in `truncated-print'.

* module/ice-9/pretty-print.scm (truncated-print): Set
  `%default-port-encoding' to the encoding of PORT.  Choose either
  U+2026 or "..." depending on PORT's encoding.

* test-suite/tests/print.test ("truncated-print")[tprint]: New ENCODING
  argument.  Update existing tests accordingly. Add UTF-8 tests.

* doc/ref/misc-modules.texi (Pretty Printing): Mention the possible use
  of U+2026.

14 years agoremove scm_tc7_gsubr
Andy Wingo [Wed, 6 Jan 2010 21:16:57 +0000 (22:16 +0100)]
remove scm_tc7_gsubr

* libguile/tags.h (scm_tc7_gsubr): Return to the pool of unused tc7s, as
  there are no more gsubrs. Yay :)

* libguile/programs.h (SCM_F_PROGRAM_IS_PRIMITIVE):
  (SCM_PROGRAM_IS_PRIMITIVE): New flag and accessor.

* libguile/gsubr.c (create_gsubr):
* libguile/snarf.h (SCM_STATIC_PROGRAM): Give subrs a PRIMITIVE flag.

* libguile/smob.h:
* libguile/smob.c (scm_i_smob_arity): New internal procedure. Uses the
  old GSUBR type macros, local to the file.

* libguile/procprop.c (scm_i_procedure_arity): Call out to
  scm_i_smob_arity, and remove a gsubr case.

* libguile/gc.c (scm_i_tag_name):
* libguile/evalext.c (scm_self_evaluating_p):
* libguile/goops.c (scm_class_of):
* libguile/vm.c (apply_foreign):
* libguile/hash.c (scm_hasher):
* libguile/debug.c (scm_procedure_name):
* libguile/print.c (iprin1): Remove gsubr cases.

* libguile/gsubr.h (SCM_PRIMITIVE_P): Fix to work with the new VM
  program regimen.
  (SCM_GSUBR_TYPE, SCM_GSUBR_MAKTYPE, SCM_GSUBR_MAX, SCM_GSUBR_REQ)
  (SCM_GSUBR_OPT, SCM_GSUBR_REST): Remove these macros, that are no
  longer useful.
* libguile/gsubr.c (scm_i_gsubr_apply, scm_i_gsubr_apply_list)
  (scm_i_gsubr_apply_array): Remove internal gsubr application
  functions.

14 years agofix procedure-name on applicable structs
Andy Wingo [Wed, 6 Jan 2010 20:45:48 +0000 (21:45 +0100)]
fix procedure-name on applicable structs

* libguile/debug.c (scm_procedure_name): Fix for applicable structs.

14 years agosubrs are now VM trampoline procedures
Andy Wingo [Wed, 6 Jan 2010 19:11:33 +0000 (20:11 +0100)]
subrs are now VM trampoline procedures

* libguile/_scm.h: Add foreign.h and programs.h to the private include
  list, as snarfing subrs with static allocation now needs access to
  some of their enums and macros.

* libguile/gsubr.c (create_gsubr): Instead of creating a tc7_gsubr
  object, create a VM program with the call-subr opcode, so that the
  representation of subrs is now gsubrs. CPP and elisp, together at
  last.
  (scm_subr_objcode_trampoline): New function, used by the SCM_DEFINE
  snarf macro.

* libguile/gsubr.h (SCM_SUBR_META_INFO, SCM_SUBR_PROPS)
  (SCM_SET_SUBR_GENERIC_LOC, SCM_SUBR_ARITY_TO_TYPE): Remove these
  macros. They were never deprecated, but hopefully people aren't using
  them.
  (SCM_SUBRF, SCM_SUBR_NAME, SCM_SUBR_GENERIC, SCM_SET_SUBR_GENERIC):
  Update to work on the new subr representation.

* libguile/objcodes.h (SCM_F_OBJCODE_IS_STATIC): New flag, indicates
  that the "backing store" of the objcode is statically allocated.

* libguile/procprop.c (scm_sym_name): Define here instead of in gsubr.c.

* libguile/snarf.h (SCM_DEFINE): If we are doing static allocation,
  statically allocate the foreign object, the object table, and the
  program, and use some SCM_SNARF_INITtery to fix things up.
  Unfortunately I have not been able to make this immutable. It might be
  possible, though.
  (SCM_IMMUTABLE_CELL, SCM_STATIC_DOUBLE_CELL, SCM_IMMUTABLE_FOREIGN):
  (SCM_STATIC_SUBR_OBJVECT, SCM_STATIC_PROGRAM): New helper macros.

14 years agobetter scm_subr_p deprecation
Andy Wingo [Wed, 6 Jan 2010 10:09:56 +0000 (11:09 +0100)]
better scm_subr_p deprecation

* libguile/deprecated.h (scm_subr_p): Dispatch instead to scm_i_subr_p so we get
  link-time and run-time warnings.
* libguile/deprecated.c (scm_i_subr_p): Here we call SCM_PRIMITIVE_P.

14 years agoprovide missing prototypes
Andy Wingo [Wed, 6 Jan 2010 10:06:37 +0000 (11:06 +0100)]
provide missing prototypes

* libguile/array-map.c:
* libguile/chars.c:
* libguile/eq.c:
* libguile/strorder.c: Provide declarations missing after the asubrs/rpsubrs ->
  gsubr conversion.

14 years agoboot the VM very early in init.c
Andy Wingo [Tue, 5 Jan 2010 18:49:18 +0000 (19:49 +0100)]
boot the VM very early in init.c

* libguile/init.c (scm_i_init_guile): Now that the VM doesn't depend on
  smobs, we can boot it before anything.

14 years agotc7 tags for vm-related data
Andy Wingo [Tue, 5 Jan 2010 18:45:56 +0000 (19:45 +0100)]
tc7 tags for vm-related data

* libguile/tags.h (scm_tc7_frame, scm_tc7_objcode, scm_tc7_vm)
  (scm_tc7_vm_cont): Take more tc7s for VM-related data structures.

* libguile/evalext.c (scm_self_evaluating_p):
* libguile/gc.c (scm_i_tag_name):
* libguile/goops.c (scm_class_of, create_standard_classes):
* libguile/print.c (iprin1): Add cases for the new tc7s.

* libguile/frames.c:
* libguile/frames.h:
* libguile/objcodes.c:
* libguile/objcodes.h:
* libguile/vm.c:
* libguile/vm.h: Desmobify.

* libguile/vm.c (scm_vm_apply): Export to Scheme, because VM objects are
  no longer applicable.

* module/system/repl/command.scm (profile):
* module/system/vm/trace.scm (vm-trace):
* module/system/vm/vm.scm (vm-load): Call vm-apply to run a program in a
  VM instead of treating the VM as applicable.

14 years agoproperly integrate vm bootstrapping into init.c
Andy Wingo [Tue, 5 Jan 2010 17:50:17 +0000 (18:50 +0100)]
properly integrate vm bootstrapping into init.c

* libguile/Makefile.am (modinclude_HEADERS):
* libguile/vm-bootstrap.h: Remove vm-bootstrap.h.

* libguile/frames.c: No more vm-bootstrap.h.

* libguile/instructions.c (scm_init_instructions):
* libguile/objcodes.c (scm_init_objcodes):
* libguile/programs.c (scm_init_programs): No need to call
  scm_bootstrap_vm, init.c does that for us.

* libguile/vm.c (scm_bootstrap_vm): No need call e.g.
  scm_bootstrap_frames, init.c does that. Remove a twice-calling guard,
  should be unnecessary. Don't define the load-compiled subr here.

* libguile/load.c (scm_init_load): Define the load-compiled subr here.

* libguile/vm.h: Declare scm_bootstrap_vm here.

* libguile/init.c (scm_i_init_guile): Properly integrate VM
  bootstrapping into this file.

14 years agoboot bytevectors earlier
Andy Wingo [Tue, 5 Jan 2010 17:36:27 +0000 (18:36 +0100)]
boot bytevectors earlier

* libguile/init.c (scm_i_init_guile): It turns out generalized-vectors
  and generalized-arrays don't actually block anyone in the dependency
  graph, so punt those back to the end. Bootstrap bytevectors earlier,
  though, which don't actually depend on smobs.

14 years agoinline srfi-4 vector accessors
Andy Wingo [Thu, 7 Jan 2010 22:40:59 +0000 (23:40 +0100)]
inline srfi-4 vector accessors

* module/language/tree-il/primitives.scm
  (*interesting-primitive-names*): Inline srfi-4 vector accessors.

14 years agoupdate uniform vector docs
Andy Wingo [Thu, 7 Jan 2010 22:30:02 +0000 (23:30 +0100)]
update uniform vector docs

* doc/ref/api-compound.texi (Uniform Numeric Vectors): Make a subsection
  of "Vectors", and link out to SRFI-4, where the main text has been
  moved.

* doc/ref/api-data.texi (Bytevectors as Uniform Vectors): New section.

* doc/ref/srfi-modules.texi (SRFI-4): Move body of uniform vector docs
  here. Discuss new module separation. Discuss relation to bytevectors.

14 years agoreimplement srfi-4 vectors on top of bytevectors
Andy Wingo [Sun, 19 Jul 2009 13:35:33 +0000 (15:35 +0200)]
reimplement srfi-4 vectors on top of bytevectors

* libguile/srfi-4.h:
* libguile/srfi-4.c (scm_make_srfi_4_vector): New function, exported by
  (srfi srfi-4 gnu).
* libguile/srfi-4.i.c: Removed.
* module/srfi/srfi-4.scm:
* module/srfi/srfi-4/gnu.scm: Reimplement srfi-4 vectors on top of
  bytevectors. The implementation is mostly in Scheme now.

* test-suite/tests/unif.test: Update to use (srfi srfi-4 gnu).

* libguile/bytevectors.c (bytevector_ref_c32, bytevector_ref_c64)
  (bytevector_set_c32, bytevector_set_c64): Fix some embarrassing bugs.
  Still need to do an upper bounds check.

* libguile/deprecated.h: Remove deprecated array functions:
  scm_i_arrayp, scm_i_array_ndim, scm_i_array_mem, scm_i_array_v,
  scm_i_array_base, scm_i_array_dims, and the deprecated macros:
  SCM_ARRAYP, SCM_ARRAY_NDIM, SCM_ARRAY_CONTP, SCM_ARRAY_MEM,
  SCM_ARRAY_V, SCM_ARRAY_BASE, SCM_ARRAY_DIMS.
* libguile/deprecated.c (scm_uniform_vector_read_x)
  (scm_uniform_vector_write, scm_uniform_array_read_x)
  (scm_uniform_array_write): Newly deprecated functions.

* libguile/generalized-arrays.c (scm_array_type): Remove the bytevector
  hack.

* libguile/objcodes.c (scm_bytecode_to_objcode, scm_objcode_to_bytecode):
  Rework to operate on bytevectors, as scm_make_u8vector now causes a
  module lookup, which can't be done e.g. when loading the VM boot
  program for psyntax-pp.go on a fresh bootstrap.

* libguile/objcodes.h (SCM_F_OBJCODE_IS_BYTEVECTOR):
  (SCM_OBJCODE_IS_BYTEVECTOR): s/U8VECTOR/BYTEVECTOR/.

* module/ice-9/boot-9.scm (the-scm-module): A terrible hack to pull in
  (srfi srfi-4), as the bindings are primarily there now. We'll worry
  about this later.

14 years agoRevert "Remove unused internal bytevector functions."
Andy Wingo [Tue, 5 Jan 2010 16:25:53 +0000 (17:25 +0100)]
Revert "Remove unused internal bytevector functions."

This reverts commit c4daa519107798d06ae96d2f69dc211fc57cc8a3.

14 years agoclean up includes in vectors.[ch]
Andy Wingo [Sat, 18 Jul 2009 17:08:43 +0000 (19:08 +0200)]
clean up includes in vectors.[ch]

* libguile/vectors.h:
* libguile/vectors.c: Clean up the includes... mostly.

14 years agofix array->list
Andy Wingo [Thu, 7 Jan 2010 15:40:13 +0000 (16:40 +0100)]
fix array->list

* libguile/generalized-arrays.c (array_to_list): Fix buggy
  implementation. Thanks to Daniel Llorens del Río for the bug repor.

14 years agoEnclose hooks tests in their own module.
Ludovic Courtès [Wed, 6 Jan 2010 22:55:13 +0000 (23:55 +0100)]
Enclose hooks tests in their own module.

* test-suite/tests/hooks.test: Enclose in `(test-suite test-hooks)'
  module.

14 years agoFix 1.8-compatibility of `scm_search_path ()'.
Ludovic Courtès [Wed, 6 Jan 2010 22:54:21 +0000 (23:54 +0100)]
Fix 1.8-compatibility of `scm_search_path ()'.

* libguile/load.c (scm_search_path): Handle the 1.8-compatibility case
  where REST is `SCM_UNDEFINED'.  Reported by Dale P. Smith.

14 years agoUse Gnulib's `full-write' instead of custom code.
Ludovic Courtès [Thu, 7 Jan 2010 09:41:17 +0000 (10:41 +0100)]
Use Gnulib's `full-write' instead of custom code.

* libguile/fports.c (write_all): Remove.
  (fport_write): Use `full_write ()' instead of `write_all ()'.

14 years agoUse `encoding-error' instead of `misc-error' for string encoding errors.
Ludovic Courtès [Wed, 6 Jan 2010 23:37:10 +0000 (00:37 +0100)]
Use `encoding-error' instead of `misc-error' for string encoding errors.

* libguile/strings.c (scm_encoding_error): New function.
  (scm_from_stringn, scm_to_stringn): Use it instead of `scm_misc_error ()'.

* test-suite/lib.scm (exception:encoding-error): Adjust accordingly.

* test-suite/tests/encoding-escapes.test (exception:conversion):
  Remove.  Use `exception:encoding-error' instead.

* test-suite/tests/encoding-iso88591.test: Likewise.

* test-suite/tests/encoding-iso88597.test: Likewise.

* test-suite/tests/encoding-utf8.test: Likewise.

14 years agoHave string ports honor `%default-port-encoding'.
Ludovic Courtès [Thu, 7 Jan 2010 10:00:37 +0000 (11:00 +0100)]
Have string ports honor `%default-port-encoding'.

* libguile/strports.c (scm_i_mkstrport): Remove.
  (scm_mkstrport): Don't change the port's encoding to UTF-8; convert
  STR to the default port encoding.
  (scm_strport_to_string): Fix documentation & indentation.

* libguile/strports.h (scm_i_mkstrport): Remove.

* test-suite/lib.scm (exception:encoding-error): New variable.
  (format-test-name): Set `%default-port-encoding' to "UTF-8".

* test-suite/tests/ports.test ("string ports")["%default-port-encoding
  is honored", "suitable encoding [latin-1]", "suitable encoding
  [latin-3]", "wrong encoding"]: New tests.

* test-suite/tests/r6rs-ports.test ("7.2.11 Binary
  Output")["put-bytevector with UTF-16 string port", "put-bytevector
  with wrong-encoding string port"]: New tests.

* test-suite/tests/reader.test (read-string): Set
  `%default-port-encoding' to `#f'.
  ("reading")["unprintable symbol"]: Use a string that doesn't contain
  zeros.

* doc/ref/api-io.texi (String Ports): Document encoding issues with
  `call-with-output-string' and `with-output-to-string'.

14 years agoAdd in-source documentation of `scm_to_stringn ()'.
Ludovic Courtès [Wed, 6 Jan 2010 22:52:40 +0000 (23:52 +0100)]
Add in-source documentation of `scm_to_stringn ()'.

* libguile/strings.c (scm_to_stringn): Add documentation comment.

14 years agofix compiler warnings in foreign.c
Andy Wingo [Thu, 7 Jan 2010 09:40:38 +0000 (10:40 +0100)]
fix compiler warnings in foreign.c

* libguile/foreign.c (scm_c_from_foreign, scm_c_take_foreign): Fix
  compiler warnings on 64-bit machines.

14 years agoadd subr-call VM op
Andy Wingo [Tue, 5 Jan 2010 15:51:58 +0000 (16:51 +0100)]
add subr-call VM op

* libguile/vm-i-system.c (subr_call): Add subr-call VM op.

14 years agoadd SCM_PROGRAM_IS_PRIMITIVE_GENERIC flag and checker
Andy Wingo [Tue, 5 Jan 2010 15:50:58 +0000 (16:50 +0100)]
add SCM_PROGRAM_IS_PRIMITIVE_GENERIC flag and checker

* libguile/programs.h (SCM_F_PROGRAM_IS_PRIMITIVE_GENERIC)
  (SCM_PROGRAM_IS_PRIMITIVE_GENERIC): Add a primitive-generic flag and
  accessor, for when we switch primitives to be implemented using VM
  trampolines.

14 years agoprogram-meta procedures get their program's objtable
Andy Wingo [Tue, 5 Jan 2010 15:50:39 +0000 (16:50 +0100)]
program-meta procedures get their program's objtable

* libguile/programs.c (scm_program_meta): Give the program meta
  procedure the same object table as the main procedure. Will allow for
  easier hand-crafting of meta programs. Of course when compiling a
  metadata procedure from Scheme, one still wants to avoid preallocating
  the heap objects needed by the metadata...

14 years agoAttempt to narrow normalized strings.
Julian Graham [Thu, 7 Jan 2010 04:01:05 +0000 (23:01 -0500)]
Attempt to narrow normalized strings.

* libguile/strings.c (normalize_str): Clean up indentation.  Add call to
  scm_i_try_narrow_string.

14 years agoremove unused snarf macros
Andy Wingo [Tue, 5 Jan 2010 15:31:12 +0000 (16:31 +0100)]
remove unused snarf macros

* libguile/snarf.h (SCM_DEFINE1, SCM_PRIMITIVE_GENERIC_1, SCM_PROC1)
  (SCM_GPROC1): Remove, as these deal in the removed typed subr
  constructors.

* libguile/tags.h (scm_tcs_subrs): Remove this. Use scm_tc7_gsubr
  instead, though hopefully that will go too, soon.

14 years agomove subr implementation details to gsubr.[ch]
Andy Wingo [Tue, 5 Jan 2010 15:15:14 +0000 (16:15 +0100)]
move subr implementation details to gsubr.[ch]

* libguile/procs.h: Move subr macros to gsubr.h.
* libguile/procs.c (scm_c_make_subr, scm_c_make_subr_with_generic)
  (scm_c_define_subr, scm_c_define_subr_with_generic): Remove these,
  because they deal in subr types, and now there is only one subr type.
  The body of this code is now in gsubr.c.

* libguile/deprecated.h (scm_subr_p): Remove from procs.[ch] and define
  as a deprecated macro. Only used internally, but who knows who's out
  there.

* libguile/goops.c (scm_generic_capability_p)
  (scm_enable_primitive_generic_x, scm_set_primitive_generic_x)
  (scm_primitive_generic_generic): Use the new SCM_PRIMITIVE_GENERIC_P
  macro instead of calling scm_subr_p.

* libguile/gsubr.h (SCM_PRIMITIVE_P, SCM_PRIMITIVE_GENERIC_P): New
  macros, to replace scm_subr_p and hacky checking for generic
  capability.
  (SCM_SUBR_META_INFO, SCM_SUBR_NAME, SCM_SUBRF, SCM_SUBR_PROPS)
  (SCM_SUBR_GENERIC, SCM_SET_SUBR_GENERIC, SCM_SET_SUBR_GENERIC_LOC)
  (SCM_SUBR_ARITY_TO_TYPE): Moved here from procs.h.

* libguile/gsubr.c (create_gsubr): Inline the
  scm_c_make_subr definition here, and work for generics too. Removed a
  scm_remember_upto_here_1 that was added earlier in the year when
  meta_info was not being traced by the GC. Adapt callers.

14 years agoclean up macros.[ch]
Andy Wingo [Tue, 5 Jan 2010 14:20:47 +0000 (15:20 +0100)]
clean up macros.[ch]

There are some incompatible changes here, but only to interfaces that
were introduced earlier in 1.9, or interfaces which have been broken
since early in 1.9.

* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump, as the macro
  changes affect the interface that is called by psyntax-generated macro
  definitions.

* libguile/inline.h (scm_words): New function, allocates a variable
  number of contiguous scm_t_bits locations, with a given value in the
  0th word, and 0 in the rest of the words.

* libguile/macros.h: Rework interface to correspond more closely, and
  minimally, to the needs of memoize.c and psyntax.
  (SCM_ASSYNT, SCM_MACRO_TYPE_BITS, SCM_MACRO_TYPE_MASK)
  (SCM_F_MACRO_EXTENDED, SCM_MACROP, SCM_MACRO_TYPE)
  (SCM_MACRO_IS_EXTENDED, SCM_BUILTIN_MACRO_P, SCM_SYNCASE_MACRO_P)
  (SCM_MACRO_CODE, scm_tc16_macro): Remove CPP macros related to the
  representation of Scheme macros.
  (scm_i_make_primitive_macro): Renamed from scm_i_makbimacro.
  (scm_i_macro_primitive): New accessor so that memoize.c can get to the
  primitive syntax transformer.
  (scm_make_syncase_macro, scm_make_extended_syncase_macro)
  (scm_syncase_macro_type, scm_syncase_macro_binding): Removed these
  functions, replaced by make-syntax-transformer and its accessors.
  (scm_macro_binding): New accessor, the same as what
  scm_syncase_macro_binding was.

* libguile/macros.c: All representation details of syntax transformers
  are private to this file now.
  (macro_print): Print macros as #<syntax-transformer ...>, or
  #<primitive-syntax-transformer ...> if psyntax has not attached a
  transformer of its own.
  (scm_i_make_primitive_macro): Represent macros as 5-word smobs.
  (scm_make_syntax_transformer): New constructor for syntax transformers
  (macros), exported to scheme. Takes a name, and looks it up in the
  current module to determine the previous primitive transformer, if
  any.
  (scm_macro_type): Instead of returning 'builtin-macro!, etc, return
  the type as set by psyntax, or #f if it's a primitive.
  (scm_macro_name): Return the stored macro name.
  (scm_macro_transformer): Return the psyntax-set syntax transformer.
  Hacky, but should help introspection somewhat.

* libguile/memoize.c (memoize_env_ref_transformer): Use the new
  scm_i_macro_primitive, and adapt to other macro API changes.

* module/ice-9/psyntax.scm (put-global-definition-hook)
  (get-global-definition-hook, chi-install-global): Call (and generate
  calls to) the new macro constructors and accessors.

* module/ice-9/psyntax-pp.scm: Doubly regenerated.

* module/ice-9/debugging/traps.scm (trap-here): Comment out this
  definition and export, while it's not working.

14 years agoremove mmacros, SCM_SYNTAX snarf macro
Andy Wingo [Tue, 5 Jan 2010 10:05:12 +0000 (11:05 +0100)]
remove mmacros, SCM_SYNTAX snarf macro

* libguile/snarf.h (SCM_SYNTAX): Remove snarf macro, users can't define
  primitive syntax any more.

* libguile/memoize.c (SCM_SYNTAX): Define locally, and just call
  scm_i_makbimacro as there's no difference between that and
  scm_makmmacro. Alter invocations to suit.

* libguile/macros.h:
* libguile/macros.c (scm_i_makmmacro): Remove; users can't define
  primitive syntax any more. Use define-syntax instead.
  (scm_make_synt): Remove, this was only used by the SCM_SYNTAX snarf
  macro.
  (scm_i_makbimacro): Change prototype of this internal function to make
  the gsubr on behalf of the caller.
  (macro_print, scm_macro_type): Remove cases for mmacros.

14 years agoremove scm_makacro and scm_makmacro
Andy Wingo [Tue, 5 Jan 2010 09:39:40 +0000 (10:39 +0100)]
remove scm_makacro and scm_makmacro

* libguile/macros.h:
* libguile/macros.c (scm_makacro): Remove this function for making
  "acros", as it is unused and won't work with the compiler.
  (scm_makmacro): Remove this deprecated function for making
  non-memoizing macros, as they won't work with the compiler.
  (macro_print, scm_macro_type): Remove a couple of cases for macros
  that can't be created any more.

14 years agofix include paths in foreign.c
Andy Wingo [Tue, 5 Jan 2010 09:17:41 +0000 (10:17 +0100)]
fix include paths in foreign.c

* libguile/foreign.c: Fix include paths.

14 years agoremove the deprecatd scm_make_subr_*
Andy Wingo [Tue, 5 Jan 2010 09:16:45 +0000 (10:16 +0100)]
remove the deprecatd scm_make_subr_*

* libguile/deprecated.h:
* libguile/deprecated.c (scm_make_subr, scm_make_subr_with_generic)
  (scm_make_subr_opt): Remove these functions that were deprecated in
  2003, as they explicitly reference subr types.

14 years agodynamic-func returns foreign objects, not bignums
Andy Wingo [Mon, 4 Jan 2010 11:21:02 +0000 (12:21 +0100)]
dynamic-func returns foreign objects, not bignums

* libguile/dynl.c (scm_dynamic_func, scm_dynamic_call)
  (scm_dynamic_args_call): Change the representation of dynamic
  functions to be foreign objects. Shouldn't affect any users, as people
  should be treating the return value of dynamic-func as an opaque
  object.

14 years agoadd foreign value wrapper
Andy Wingo [Mon, 4 Jan 2010 11:11:33 +0000 (12:11 +0100)]
add foreign value wrapper

* libguile/foreign.h:
* libguile/foreign.c: New files, implementing simple wrappers around
  foreign values, such as those that one might link in dynamically from
  a library.

* libguile/tags.h (scm_tc7_foreign): Take a tc7 for foreign values.

* libguile.h:
* libguile/init.c: Add foreign.h to headers and init.

* libguile/print.c (iprin1): Add printer for foreign values.

* libguile/gc.c (scm_i_tag_name): Case for foreign values.
* libguile/goops.c (scm_class_of, create_standard_classes): Add a class
  for foreign values.

* libguile/evalext.c (scm_self_evaluating_p): Add case for foreign
  values.

* libguile/Makefile.am: Add foreign.[ch] to the build.

14 years agoUpdate `.gitignore'.
Ludovic Courtès [Sun, 3 Jan 2010 18:15:42 +0000 (19:15 +0100)]
Update `.gitignore'.

14 years agoAdd per-directory Emacs local variables.
Ludovic Courtès [Sun, 3 Jan 2010 18:15:05 +0000 (19:15 +0100)]
Add per-directory Emacs local variables.

14 years agoRemove dependency on GNU Make and reliance on /usr/bin/env.
Ludovic Courtès [Sun, 3 Jan 2010 18:06:52 +0000 (19:06 +0100)]
Remove dependency on GNU Make and reliance on /usr/bin/env.

Both were introduced in commit c55cb58a ("integrate guile-lib docs").

* doc/ref/Makefile.am ($(snarf_doc)scmfiles): Rename target to...
  ($(snarf_doc)-scmfiles): ... this.  Change to generate a makefile
  snippet containing a variable definition.  Automake-include the
  generated snippet, `standard-library.am'.
  (EXTRA_DIST): Add `$(snarf_doc).am'.
  (CLEANFILES): Remove `$(snarf_doc)scmfiles'.

* doc/ref/make-texinfo.scm: Remove executable bit and "#!/usr/bin/env".

* doc/ref/standard-library.am: New file.

14 years agorename goto/args and friends to tail-call, tail-apply, etc
Andy Wingo [Sun, 3 Jan 2010 13:49:40 +0000 (14:49 +0100)]
rename goto/args and friends to tail-call, tail-apply, etc

* libguile/vm-i-system.c (tail-call, tail-call/nargs, tail-apply)
  (tail-call/cc): Rename these back to tail-* from goto/*. We should
  reserve the rename-then-goto name for when you actually do a rename
  and goto, not when you shuffle the stack.

* doc/ref/vm.texi:
* module/language/glil/decompile-assembly.scm:
* module/language/tree-il/compile-glil.scm:
* test-suite/tests/tree-il.test: Adapt all callers and documentation.

14 years agoadd truncated-print tests
Andy Wingo [Sun, 3 Jan 2010 12:35:35 +0000 (13:35 +0100)]
add truncated-print tests

* doc/ref/misc-modules.texi (Pretty Printing): Fix an error in
  truncated-print example.

* test-suite/Makefile.am:
 * test-suite/tests/print.test: Add truncated-print tests.

14 years agofix bug in generalized-vector->list
Andy Wingo [Sun, 3 Jan 2010 11:36:37 +0000 (12:36 +0100)]
fix bug in generalized-vector->list

* libguile/generalized-vectors.c (scm_generalized_vector_to_list): Fix
  bug iterating over indices of array. Thanks to Tristan Colgate for the
  report.

* test-suite/tests/srfi-4.test: Add tests that uniform-vector->list
  works for all kinds of uniform vectors.

14 years agoSupport for Unicode string normalization functions
Julian Graham [Sun, 3 Jan 2010 06:06:05 +0000 (01:06 -0500)]
Support for Unicode string normalization functions

* libguile/strings.c, libguile/strings.h (normalize_str,
  scm_string_normalize_nfc, scm_string_normalize_nfd, scm_normalize_nfkc,
  scm_string_normalize_nfkd): New functions.
* test-suite/tests/strings.test: Unit tests for `string-normalize-nfc',
  `string-normalize-nfd', `string-normalize-nfkc', and
  `string-normalize-nfkd'.
* doc/ref/api-data.texi (String Comparison): Documentation for normalization
  functions.

14 years agocleanups to debugger
Andy Wingo [Tue, 29 Dec 2009 20:26:48 +0000 (21:26 +0100)]
cleanups to debugger

* module/system/vm/debug.scm (debugger-repl): Remove the `bindings'
  command, it is superseded by `locals'.
  Update the TODO.
  (debug-pre-unwind-handler): Remove scary "beta" warning. Already being
  able to bt #:width 1000 #:full? #t is quite useful...

14 years agodebugger's backtrace implemented in scheme
Andy Wingo [Tue, 29 Dec 2009 20:19:05 +0000 (21:19 +0100)]
debugger's backtrace implemented in scheme

* module/system/vm/debug.scm (print-locals): Factor out to a function.
  (collect-frames, print-frames): Implement the guts of `backtrace' in
  Scheme.
  (debugger-repl): Add #:width and #:full? options to `backtrace'.
  Backtrace uses the backtrace code implemented in scheme.

14 years agoframes.c no longer exports frame-source -- frame.scm does so already
Andy Wingo [Tue, 29 Dec 2009 20:17:07 +0000 (21:17 +0100)]
frames.c no longer exports frame-source -- frame.scm does so already

* libguile/frames.c (scm_frame_source): No longer exported to Scheme
  via init's call to scm_init_frames; in fact just calls the Scheme
  version. Perhaps this function is on its way out, though :)

14 years ago~:@y allows for truncation to an absolute maximum width
Andy Wingo [Tue, 29 Dec 2009 20:15:08 +0000 (21:15 +0100)]
~:@y allows for truncation to an absolute maximum width

* module/ice-9/format.scm (format): Allow ~:@y to interpret the width as
  the maximum width, inclusive of whatever else has already been output.
* doc/ref/misc-modules.texi (Formatted Output): Document this.

14 years agointegers at debugger select frames
Andy Wingo [Tue, 29 Dec 2009 13:35:10 +0000 (14:35 +0100)]
integers at debugger select frames

* module/system/vm/debug.scm (debugger-repl): Fix implementation of
  frame-at-index. Allow integers as commands, as a shorthand for "frame
  N".

14 years agoclean up (system vm frames), add locals command to debugger
Andy Wingo [Tue, 29 Dec 2009 13:09:50 +0000 (14:09 +0100)]
clean up (system vm frames), add locals command to debugger

* libguile/frames.c (scm_init_frames): No need to bootstrap the VM here,
  it should be already bootstrapped by init.c.
  (scm_bootstrap_frames): No need to register an extension, as
  scm_init_frames is called by init.c.

* module/system/vm/frame.scm: Don't load the scm_init_frames extension,
  as the primitives from frames.c are loaded by Guile's init.
  (frame-bindings): Change to return bindings, as can be accessed by the
  binding: accessors from program.scm.
  (frame-lookup-binding): Revive and make this one work with current
  code.
  (frame-binding-set!):
  (frame-binding-ref): Use the new frame-lookup-binding. Perhaps these
  should handle boxing and unboxing, though.
  (frame-source): New accessor, returns a source object.
  (frame-call-representation): Change to return a full list, as
  truncated-print can truncate for us.
  (frame-environment, frame-object-binding, frame-object-name): Update
  not to take an address, as the address is part of the frame.
  (frame-variable-exists?, frame-variable-ref, frame-variable-set!)
  (frame-local-variables, frame-program-name, print-frame)
  (print-frame-chain-as-backtrace, frame-file, frame-line-number)
  (make-frame-chain, bootstrap-frame?, frame-number, frame-address):
  Remove these outdated functions.

* module/system/vm/debug.scm (debugger-repl): Use
  frame-call-representation, and ~@y.
  (locals): New command, prints local variables in a frame.

14 years agoadd ~@y truncated printing directive to format
Andy Wingo [Tue, 29 Dec 2009 12:26:41 +0000 (13:26 +0100)]
add ~@y truncated printing directive to format

* doc/ref/misc-modules.texi (Formatted Output): Add documentation for
  the new ~@y format directive.
  (Pretty Printing): Add documentation for truncated-write.

* module/ice-9/format.scm (format): Add ~@y, for doing a truncated
  print. Also, allow both ~y variants to take a width parameter.

14 years agoadd truncated-print to (ice-9 pretty-print)
Andy Wingo [Mon, 28 Dec 2009 17:10:51 +0000 (18:10 +0100)]
add truncated-print to (ice-9 pretty-print)

* module/ice-9/pretty-print.scm (pretty-print): Rework so "port" is the
  kwarg, and "port*" is the optional arg. #:port is still the keyword.

  (truncated-print): Add a printer that will ensure that the output
  stays within a certain width. It could use genwrite but it doesn't
  because it seems nice to allow breadth-first allocation of screen
  space, and it's also nice to balance some delimiters (e.g. #< and >).

14 years agofix bug in string array implementation type mask
Andy Wingo [Tue, 29 Dec 2009 11:35:13 +0000 (12:35 +0100)]
fix bug in string array implementation type mask

* libguile/strings.c (SCM_ARRAY_IMPLEMENTATION): The mask for the string
  array implementation should be 0x7f, without masking out 0x2.
  Otherwise numbers were being thought to be vectors!

* test-suite/tests/unif.test: Add test.

* libguile/vectors.c (SCM_ARRAY_IMPLEMENTATION): Only register one
  implementation, because weak vectors can be checked with the mask &
  ~2, and the functions are the same.

14 years agoAdd documentation for scm_c_upcase et al
Michael Gran [Mon, 28 Dec 2009 23:26:10 +0000 (15:26 -0800)]
Add documentation for scm_c_upcase et al

* doc/ref/api-data.texi: document scm_c_upcase, scm_c_downcase,
  scm_c_titlecase, and scm_t_wchar

14 years agopretty-print is a lambda*
Andy Wingo [Mon, 28 Dec 2009 15:37:59 +0000 (16:37 +0100)]
pretty-print is a lambda*

* module/ice-9/pretty-print.scm (pretty-print): Fix to always be a
  define*. Shouldn't change behavior, but it will be more
  introspectible.

14 years agofix bug bindings lexical vars within optargs initializers
Andy Wingo [Mon, 28 Dec 2009 15:36:29 +0000 (16:36 +0100)]
fix bug bindings lexical vars within optargs initializers

* module/language/tree-il/analyze.scm (analyze-lexicals): Fix bug in
  which variables bound within inits were being improperly allocated.
* module/language/tree-il/compile-glil.scm (vars->bind-list): More
  detail in terrible debugging clause.
* test-suite/tests/optargs.test ("lambda* inits"): Add tests for binding
  vars within inits.

14 years agoMerge branch 'read-fix'
Andy Wingo [Mon, 28 Dec 2009 16:36:44 +0000 (17:36 +0100)]
Merge branch 'read-fix'

14 years agoFix bugs reading long tokens
Andy Wingo [Mon, 28 Dec 2009 16:35:48 +0000 (17:35 +0100)]
Fix bugs reading long tokens

The commit "don't take string-write mutex in read.c:read_token", from
8b0d7b9d94b9f142dc4f08ce12b345321359b3cd, had a number of bugs. Not sure
how I missed these before.

* libguile/read.c (read_token): Remove a couple of bogus
  scm_i_string_stop_writing () calls, now that we no longer take the
  string-write mutex.
  (read_complete_token): read_token really needs a fresh buffer, which
  was not the case when we are reading long tokens and thus hit the
  overflow case. Fixes fractions.test.

14 years agofix defmacro*
Andy Wingo [Mon, 28 Dec 2009 10:47:17 +0000 (11:47 +0100)]
fix defmacro*

* module/ice-9/optargs.scm (defmacro*): Fix implementation -- defmacro*
  takes Lisp-like arguments.
  (defmacro*-public): Fix also, expanding into defmacro*.

* THANKS: Thanks to Tristan Colgate for the report.

* test-suite/tests/optargs.test: Add defmacro* tests.

14 years ago(syntax foo) -> #'foo in boot-9
Andy Wingo [Mon, 28 Dec 2009 10:44:06 +0000 (11:44 +0100)]
(syntax foo) -> #'foo in boot-9

* module/ice-9/boot-9.scm: Change instances of (syntax foo) to use the
  reader macro #'.

14 years agoIncorrect indexing into character name list
Michael Gran [Mon, 28 Dec 2009 02:44:29 +0000 (18:44 -0800)]
Incorrect indexing into character name list

When converting a character into a character name, an incorrect
character name could theoretically have been returned.

* libguile/chars.c (scm_i_charname): used wrong index into
  scm_alt_charnames

14 years agoAutomatic manual updates following libguile docstring changes
Neil Jerram [Sun, 27 Dec 2009 23:24:09 +0000 (23:24 +0000)]
manual updates following libguile docstring changes

Affecting the following procedures:

* doc/ref/api-compound.texi (Uniform Numeric Vectors):
  uniform-array-read!

* doc/ref/api-data.texi (Complex): make-rectangular, string=?,
  string<?, string<=?, string>?, string>=?, string-ci=?, string-ci<?,
  string-ci<=?, string-ci>?, string-ci>=?, string-append/shared

* doc/ref/api-evaluation.texi (Reader Extensions): read-hash-extend

* doc/ref/api-procedures.texi (Procedures with Setters): procedure,
  macro?, macro-type

* doc/ref/api-undocumented.texi: module-import-interface,
  %method-more-specific?

* doc/ref/new-docstrings.texi: uniform-array->bytevector,
  %start-stack, guardian-destroyed?, guardian-greedy?,
  destroy-guardian!, gc-dump, gc-disable, gc-enable,
  make-generalized-vector, set-primitive-generic!, nl-langinfo,
  %warn-autocompilation-enabled, make-syncase-macro,
  make-extended-syncase-macro, syncase-macro-type,
  syncase-macro-binding, memoize-expression, unmemoize-expression,
  memoized-expression-typecode, memoized-expression-data,
  memoized-typecode, memoize-variable-access!, module-local-variable,
  module-variable, eval-closure-module, module-transformer,
  module-public-interface, define!, module-reverse-lookup, cddr,
  make-promise, %get-stack-size, %string-dump, %symbol-dump,
  string-bytes-per-char, uniform-vector-element-type,
  uniform-vector-element-size, canonicalize-path, getrlimit, setrlimit

* doc/maint/guile.texi: Corresponding tracking updates.

14 years agoDoc for getsid
Neil Jerram [Sun, 27 Dec 2009 18:44:41 +0000 (18:44 +0000)]
Doc for getsid

* NEWS: Note new getsid primitive.

* doc/ref/posix.texi (Processes): Document getsid.

14 years agoAdd support for getsid
Neil Jerram [Sun, 27 Dec 2009 16:59:54 +0000 (16:59 +0000)]
Add support for getsid

* configure.ac: Check availability of getsid() C library call.

* libguile/posix.c (scm_getsid): New primitive.

* libguile/posix.h: Declaration for new primitive.

14 years agoSupport for Unicode general categories
Julian Graham [Thu, 24 Dec 2009 05:25:19 +0000 (00:25 -0500)]
Support for Unicode general categories

* libguile/chars.c, libguile/chars.h (scm_char_general_category): New function.
* test-suite/tests/chars.test: Unit tests for `char-general-category'.
* doc/ref/api-data.texi (Characters): Documentation for
  `char-general-category'.

14 years agoimplement up, down, frame, and bindings in the repl
Andy Wingo [Thu, 24 Dec 2009 13:20:41 +0000 (14:20 +0100)]
implement up, down, frame, and bindings in the repl

* module/system/vm/debug.scm (debugger-repl): Implement up, down, frame,
  and bindings using the new command infrastructure.

14 years agorewrite debugger command loop
Andy Wingo [Thu, 24 Dec 2009 07:28:59 +0000 (08:28 +0100)]
rewrite debugger command loop

* module/system/vm/debug.scm: Rewrite the command loop to have better
  introspection and argument handling.

14 years agokeyword arg errors throw to 'keyword-argument-error
Andy Wingo [Wed, 23 Dec 2009 21:59:12 +0000 (22:59 +0100)]
keyword arg errors throw to 'keyword-argument-error

* libguile/vm-engine.c (VM_NAME): Keyword arg errors are now thrown to
  'keyword-argument-error.

* libguile/vm.c: Define sym_keyword_argument_error, and statically
  allocate some other symbols.

* module/ice-9/optargs.scm (parse-lambda-case): Throw to
  'keyword-argument-error in kwarg error cases.

* module/ice-9/psyntax.scm (build-lambda-case): Remove a couple
  workarounds for the old memoizer. Throw to 'wrong-number-of-args if
  the lambda-case fails to parse.

* module/ice-9/psyntax-pp.scm: Regenerated.

* test-suite/tests/optargs.test: Update expected exceptions.

14 years agoimplement a silly debugger
Andy Wingo [Tue, 22 Dec 2009 22:38:06 +0000 (23:38 +0100)]
implement a silly debugger

* module/system/vm/debug.scm: Implement the skeleton of a debugger. Not
  very useful yet.

* module/system/repl/repl.scm (call-with-backtrace): Have the pre-unwind
  hook drop the user into the debugger. Hopefully we can have something
  better within a couple weeks.

14 years agofix warning-caught bug in boot-9
Andy Wingo [Tue, 22 Dec 2009 21:52:48 +0000 (22:52 +0100)]
fix warning-caught bug in boot-9

* module/ice-9/boot-9.scm: Fix bug caught by warnings.

14 years agoComplete support for version information in Guile's `module' form.
Julian Graham [Mon, 21 Dec 2009 23:33:12 +0000 (00:33 +0100)]
Complete support for version information in Guile's `module' form.

* module/ice-9/boot-9.scm (try-load-module, try-module-autoload): Check
  for version argument and use `find-versioned-module' if present.
* module/ice-9/boot-9.scm (find-versioned-module, version-matches?)
  (module-version, set-module-version!, version-matches?): New
  functions.
* module/ice-9/boot-9.scm (module-type, make-module, resolve-module)
  (try-load-module, process-define-module, make-autoload-interface)
  (compile-interface-spec): Add awareness and checking of version
  information.
* doc/ref/api-modules.texi (R6RS Version References): New subsubsection.
  (General Information about Modules): Explain differences in search
  process when version references are used.
  (Using Guile Modules) (Creating Guile Modules): Document `#:version'
  keyword.

14 years agoSupport for renaming bindings on module export.
Julian Graham [Thu, 10 Dec 2009 05:29:11 +0000 (00:29 -0500)]
Support for renaming bindings on module export.

* module/ice-9/boot-9.scm (module-export!, module-replace!)
  (module-re-export!): Allow members of export list to be pairs, mapping
  internal names to external ones.

* doc/ref/api-modules.texi (Creating Guile Modules): Update
  documentation for `#:export', `#:export-syntax', `#:replace',
  `#:re-export', `#:re-export-syntax', `export', and `re-export' to
  reflect new format for arguments.

14 years agoImproved support for Unicode title case in Guile's string and character APIs.
Julian Graham [Tue, 22 Dec 2009 05:19:56 +0000 (00:19 -0500)]
Improved support for Unicode title case in Guile's string and character APIs.

* doc/ref/api-data.texi (Characters): Documentation for `char-titlecase'.
* doc/ref/api-i18n.texi (Character Case Mapping): Documentation for
  `char-locale-titlecase' and `string-locale-titlecase'.

* libguile/chars.c, libguile/chars.h (scm_char_titlecase, scm_c_titlecase): New
  functions.

* libguile/i18n.c, libguile/i18n.h (chr_to_case, scm_char_locale_titlecase,
  str_to_case, scm_string_locale_titlecase): New functions.
* libguile/i18n.c (scm_char_locale_downcase, scm_char_locale_upcase,
  scm_string_locale_downcase, scm_string_locale_upcase): Refactor to share code
  via chr_to_case and str_to_case, as appropriate.
* module/ice-9/i18n.scm (char-locale-title-case, string-locale-titlecase): New
  functions.

* libguile/srfi-13.c (string_titlecase_x): Use uc_totitle instead of uc_toupper.

* test-suite/tests/chars.test: Tests for `char-titlecase'.
* test-suite/tests/i18n.test: Tests for `char-locale-titlecase' and
  `string-locale-titlecase'.
* test-suite/tests/srfi-13.test: Tests for `string-titlecase'.

14 years agountabify boot-9.scm
Andy Wingo [Mon, 21 Dec 2009 23:58:12 +0000 (00:58 +0100)]
untabify boot-9.scm

* module/ice-9/boot-9.scm: Untabify.

14 years agotracing at repl
Andy Wingo [Mon, 21 Dec 2009 22:13:05 +0000 (23:13 +0100)]
tracing at repl

* module/system/repl/command.scm (option, trace): Integrate tracing (via
  ,trace or ,tr).

14 years ago(system vm trace) sorta working
Andy Wingo [Mon, 21 Dec 2009 22:03:43 +0000 (23:03 +0100)]
(system vm trace) sorta working

* module/system/vm/trace.scm: Update to work with the current VM and its
  tracing infrastructure.

14 years agodon't take string-write mutex in read.c:read_token
Andy Wingo [Mon, 21 Dec 2009 21:12:31 +0000 (22:12 +0100)]
don't take string-write mutex in read.c:read_token

* libguile/read.c (read_token): Don't take the string-write mutex when
  reading a token into a buffer, because it's assumed that the buffer is
  fresh (not seen by other threads), and a soft port can call a
  procedure that needs the string-write mutex.

14 years agorework vm tracing
Andy Wingo [Mon, 21 Dec 2009 20:57:20 +0000 (21:57 +0100)]
rework vm tracing

* libguile/vm-engine.c (VM_NAME): Engines take the VM itself (not the
  vp), so they can pass the VM to hooks. No more hook args, we dispatch
  without them.

* libguile/vm-engine.h (RUN_HOOK): Dispatch the hook if the trace level
  is positive (instead of if the hook is there). Don't cache registers
  on return from the dispatch.

* libguile/vm.h:
* libguile/vm.c (vm_dispatch_hook): Don't bother with a dynwind; instead
  decrement the trace level when going into a hook, and if we have a
  nonlocal exit, the trace level never gets incremented again. Worse is
  better.
  (make_vm, scm_vm_trace_level, scm_set_vm_trace_level_x): New concept,
  trace level. If positive, we run the hooks, otherwise we don't. Should
  work. Removed scm_vm_trace_frame, I don't think that was the right way
  to do it.

* module/system/vm/vm.scm: Replace vm-trace-frame with vm-trace-level
  and set-vm-trace-level!; the hooks actually get the frame as an
  argument now.

14 years agoadd scm_call_n, scm_c_run_hookn
Andy Wingo [Mon, 21 Dec 2009 20:06:27 +0000 (21:06 +0100)]
add scm_call_n, scm_c_run_hookn

* libguile/eval.h:
* libguile/eval.c (scm_call_n): New function, applies a function to an
  array of args.

* libguile/hooks.h:
* libguile/hooks.c (scm_c_run_hookn): New function, runs a hook with an
  array of args.

14 years agoremove "module system quirks" from the manual
Andy Wingo [Mon, 21 Dec 2009 10:54:48 +0000 (11:54 +0100)]
remove "module system quirks" from the manual

* doc/ref/api-modules.texi (Module System Quirks): Remove this outdated
  section.

14 years agopoor man's statprof integration with the repl: ,pr
Andy Wingo [Sun, 20 Dec 2009 23:08:18 +0000 (00:08 +0100)]
poor man's statprof integration with the repl: ,pr

* module/system/repl/command.scm (profile): Add a very poor integration
  of statprof with the repl.

14 years agoadd test suites
Andy Wingo [Sun, 20 Dec 2009 22:11:34 +0000 (23:11 +0100)]
add test suites

14 years agointegrate guile-lib docs
Andy Wingo [Fri, 18 Dec 2009 12:31:02 +0000 (13:31 +0100)]
integrate guile-lib docs

14 years agotexinfo fixes
Andy Wingo [Sun, 20 Dec 2009 22:18:32 +0000 (23:18 +0100)]
texinfo fixes

* module/texinfo.scm (parser-error): Throw to 'parser-error, as ssax's
  input-parse does.
  (texi-command-depth): Fix docstring so as not to confuse emacs.
  (parse-table-args): Fix parser-error call to include port.

14 years agotweaks to statprof
Andy Wingo [Sun, 20 Dec 2009 22:17:05 +0000 (23:17 +0100)]
tweaks to statprof

* module/statprof.scm (make-call-data): Change so that call-data holds
  the proc, not its name. Remove set-call-data-name!.
  (get-call-data): Adapt caller.
  (sample-stack-procs): Always sample procedures on the stack, even
  anonymous ones.
  (profile-signal-handler): Fix stack cutting to work with compiled
  statprof.scm.
  (count-call): Always count calls, even to anonymous procedures.
  (statprof-call-data->stats): Use call-data-printable for printing the
  call data.
  (statprof-display-anomolies): Fix a couple longstanding bugs caught by
  compiler warnings.