bpt/guile.git
14 years agocallees now check their args, cons rest list, reserve locals
Andy Wingo [Mon, 28 Sep 2009 00:25:39 +0000 (20:25 -0400)]
callees now check their args, cons rest list, reserve locals

* gdbinit: Ignore SIGPWR and SIGXCPU, which the BDW GC seems to use.

* libguile/vm-engine.h (FETCH_WIDTH): Remove unused macro.
  (INIT_ARGS, INIT_FRAME): Remove; callees now check their args and
  reserve space for their locals.

* libguile/vm-engine.c:
* libguile/vm-i-system.c: Turn on callee arg checking and local
  reservation. Seems to work!

14 years agocallees reserve their own local vars
Andy Wingo [Sun, 27 Sep 2009 23:50:06 +0000 (19:50 -0400)]
callees reserve their own local vars

* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump.
* libguile/vm-i-system.c (reserve-locals): New instruction, to reserve
  space for local vars. Other ops renumbered.

* module/language/tree-il/compile-glil.scm (flatten-lambda): Emit
  reserve-locals instructions as necessary.

* test-suite/tests/tree-il.test: Update to expect reserve-locals as
  appropriate.

14 years agoruntime and debugging support for callee-parsed procedure args
Andy Wingo [Sun, 27 Sep 2009 23:25:58 +0000 (19:25 -0400)]
runtime and debugging support for callee-parsed procedure args

* libguile/objcodes.h: Bump for metadata format change.

* libguile/frames.h: Rework so we don't frob the program's nargs, nlocs,
  etc at runtime. Instead we don't really know what's a local var, an
  argument, or an intermediate value. It's a little unfortunate, but
  this will allow for case-lambda, and eventually for good polymorphic
  generic dispatch; and the nlocs etc can be heuristically
  reconstructed. Such a reconstruction would be better done at the
  Scheme level, though.
  (SCM_FRAME_STACK_ADDRESS): New macro, the pointer to the base of the
  stack elements (not counting the program).
  (SCM_FRAME_UPPER_ADDRESS): Repurpose to be the address of the last
  element in the bookkeeping part of the stack -- i.e. to point to the
  return address.

* libguile/vm-engine.h:
* libguile/vm-i-system.c: Adapt to removal of stack_base. Though we
  still detect stack-smashing underflow, we don't do so as precisely as
  we did before, because now we only detect overwriting of the frame
  metadata.

* libguile/vm-engine.c (vm_engine): Remove the stack_base variable. It
  is unnecessary, and difficult to keep track of in the face of
  case-lambda. Also fix miscommented "ra" and "mvra" pushes. Push the
  vp->ip as the first ra...
* libguile/vm-i-system.c (halt): ...because here we can restore the
  vp->ip instead of setting ip to 0. Allows us to introspect ips all
  down the stack, including in recursive VM invocations.

* libguile/frames.h:
* libguile/frames.c (scm_vm_frame_stack): Removed, because it's getting
  more difficult to tell what's an argument and what's a temporary stack
  element.
  (scm_vm_frame_num_locals): New accessor.
  (scm_vm_frame_instruction_pointer): New accessor.
  (scm_vm_frame_arguments): Defer to an implementation in Scheme.
  (scm_vm_frame_num_locals scm_vm_frame_local_ref)
  (scm_vm_frame_local_set_x): Since we can get not-yet-active frames on
  the stack now, with our current calling convention, we have to add a
  heuristic here to jump over those frames -- because frames have
  pointers in them, not Scheme values.

* libguile/programs.h:
* libguile/programs.c (scm_program_arity): Remove, in favor of..
  (scm_program_arities): ...this, which a list of arities, in a new
  format, occupying a slot in the metadata.

* module/language/assembly/decompile-bytecode.scm (decode-load-program):
  Fix mv-call decompilation.

* module/system/vm/frame.scm (vm-frame-bindings, vm-frame-binding-ref)
  (vm-frame-binding-set!): New functions, to access bindings by name in
  a frame.
  (vm-frame-arguments): Function now implemented in Scheme. Commented
  fairly extensively.

* module/system/vm/program.scm (program-bindings-by-index)
  (program-bindings-for-ip): New accessors, parsing the program bindings
  metadata into something more useful.
  (program-arities, program-arguments): In a case-lambda world, we have
  to assume that programs can have multiple arities. But it's tough to
  detect this algorithmically; instead we're going to require that the
  program metadata include information about the arities, and the parts
  of the program that that metadata applies to.
  (program-lambda-list): New accessor.
  (write-program): Show multiple arities.

* module/language/glil/compile-assembly.scm (glil->assembly): Add
  "arities" to the state of the compiler, and add arities entries as
  appropriate.

14 years agosteps on the way to have the callee check the number of arguments
Andy Wingo [Sun, 27 Sep 2009 22:16:56 +0000 (18:16 -0400)]
steps on the way to have the callee check the number of arguments

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

* libguile/vm-i-system.c (assert-nargs-ee, assert-nargs-ge)
  (push-rest-list): New instructions, which for now don't actually do
  anything. Renumber the rest of the ops in this file.

* module/language/glil.scm (<glil-arity>): New GLIL type, an entity that
  checks the number of args for a block, optionally consing a rest list,
  and either branching or erroring if the arity doesn't match.

* module/language/glil/compile-assembly.scm (glil->assembly): Compile
  <glil-arity> to assembly. Some of these VM ops are not implemented --
  notably the branching case.

* module/language/tree-il/compile-glil.scm (flatten-lambda): Emit
  <glil-arity>.

* test-suite/tests/tree-il.test: Update.

14 years agoCompile Guile modules with `-Wunbound-variable'.
Ludovic Courtès [Thu, 22 Oct 2009 20:58:03 +0000 (22:58 +0200)]
Compile Guile modules with `-Wunbound-variable'.

* am/guilec (.scm.go): Compile with `-Wunbound-variable'.

14 years agoFix typos leading to unbound variable references.
Ludovic Courtès [Thu, 22 Oct 2009 20:42:45 +0000 (22:42 +0200)]
Fix typos leading to unbound variable references.

* module/ice-9/session.scm (help): Fix unbound reference to `env'.

* module/system/vm/program.scm (program-property): Fix typo.

* module/system/vm/frame.scm: Add missing `#:use-module (system vm
  objcode)'.

* module/system/repl/command.scm (guile:load): New.
  (load): Use either `primitive-load' or `load'.

* module/srfi/srfi-18.scm (thread-sleep!): Fix typo.

* module/srfi/srfi-19.scm: Use `(ice-9 rdelim)'.
  (date->broken-down-time, priv:year-day, priv:char->int): Fix typo.
  (time-*->time-*, time-*->time-*!): Fix reference to unbound variable
  `caller'.

* module/oop/goops.scm (bound-check-get): Fix typo.

* module/language/glil/compile-assembly.scm (glil->assembly): Fix typo.

* module/language/glil.scm (parse-glil): Fix typo.

* module/language/ecmascript/base.scm (object->value/string,
  object->value/number, ->number): Fix typos.

* module/language/assembly/disassemble.scm (disassemble-free-vars): Fix
  typo.

14 years agoAdjust `unbound-variable' GOOPS heuristic for `goops.scm'.
Ludovic Courtès [Thu, 22 Oct 2009 20:33:53 +0000 (22:33 +0200)]
Adjust `unbound-variable' GOOPS heuristic for `goops.scm'.

* module/language/tree-il/analyze.scm (goops-toplevel-definition): Add
  ENV argument.  Deal with GOOPS macros expanded within `goops.scm'.
  (report-possibly-unbound-variables): Adjust.

14 years agoFix bytecode disassembler.
Ludovic Courtès [Thu, 22 Oct 2009 20:29:22 +0000 (22:29 +0200)]
Fix bytecode disassembler.

* module/language/assembly/decompile-bytecode.scm (decode-load-program):
  Add missing argument to `ensure-label'.

14 years agoSRFI-88: Call `read-set!' at compile time and run time.
Ludovic Courtès [Thu, 22 Oct 2009 17:05:59 +0000 (19:05 +0200)]
SRFI-88: Call `read-set!' at compile time and run time.

* module/srfi/srfi-88.scm: Call `read-set!' both at compile time and run
  time.

14 years agoRemove obsolete `save-stack' case.
Ludovic Courtès [Wed, 21 Oct 2009 22:51:53 +0000 (00:51 +0200)]
Remove obsolete `save-stack' case.

* module/ice-9/boot-9.scm (save-stack): Remove obsolete `tk-stack' case.

14 years agoHave `-Wunbound-variable' account for GOOPS top-level definitions.
Ludovic Courtès [Wed, 21 Oct 2009 22:37:36 +0000 (00:37 +0200)]
Have `-Wunbound-variable' account for GOOPS top-level definitions.

* module/language/tree-il/analyze.scm (goops-toplevel-definition): New
  procedure.
  (report-possibly-unbound-variables): Check for GOOPS top-level
  definitions.

* test-suite/tests/tree-il.test ("warnings")["GOOPS definitions are
  visible"]: New test.

14 years agoAdd a `guile-2' SRFI-0 feature.
Ludovic Courtès [Wed, 21 Oct 2009 21:41:56 +0000 (23:41 +0200)]
Add a `guile-2' SRFI-0 feature.

* doc/ref/srfi-modules.texi (SRFI-0): Mention the `guile-2' feature.

* module/ice-9/boot-9.scm (%cond-expand-features): Add `guile-2'.

14 years agoUse proper types for hash/assoc functions in `hashtab.h'.
Ludovic Courtès [Mon, 19 Oct 2009 22:10:18 +0000 (00:10 +0200)]
Use proper types for hash/assoc functions in `hashtab.h'.

Partly fixes bug #23681 ("Function declarators with empty parentheses
should not be used").

* libguile/goops.c (scm_wrap_component): Cast `scm_sloppy_assq'.

* libguile/hashtab.c (scm_hash_fn_get_handle): Update to take functions
  of type `scm_t_hash_fn' and `scm_t_assoc_fn'.  Update callers.
  (scm_ihashx): Change to match `scm_t_hash_fn'.
  (scm_sloppy_assx): Change to match `scm_t_assoc_fn'.

* libguile/hashtab.h (scm_t_hash_fn, scm_t_assoc_fn): New types.
  (scm_t_hashtable)[hash_fn]: Change to `scm_t_hash_fn'.
  (scm_i_rehash, scm_hash_fn_get_handle, scm_hash_fn_create_handle_x,
  scm_hash_fn_ref, scm_hash_fn_set_x, scm_hash_fn_remove_x): Change to
  take `scm_t_hash_fn' and `scm_t_assoc_fn' parameters.

* libguile/srcprop.h (scm_whash_get_handle, scm_whash_create_handle,
  scm_whash_lookup): Implement in terms of `scm_hashq_*' instead of
  `scm_hash_fn_*'.

* libguile/struct.c (scm_struct_ihashq): Change to match
  `scm_t_hash_fn'.
  (scm_struct_create_handle): Cast `scm_sloppy_assq'.

* libguile/struct.h (scm_struct_ihashq): Update, make internal.

14 years agoFix typo in psyntax.scm related to syntax-violation reporting.
Julian Graham [Sun, 18 Oct 2009 21:56:13 +0000 (17:56 -0400)]
Fix typo in psyntax.scm related to syntax-violation reporting.

* module/ice-9/psyntax.scm (chi-macro): Replace `s' with `(wrap-subst w)'.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
14 years agoAdd support for R6RS/SRFI-30 nested block comments.
Ludovic Courtès [Mon, 19 Oct 2009 20:38:34 +0000 (22:38 +0200)]
Add support for R6RS/SRFI-30 nested block comments.

Suggested by Andreas Rottmann <a.rottmann@gmx.at>.

* libguile/read.c (flush_ws, scm_read_sharp): Add support for
  R6RS/SRFI-30 block comments.
  (scm_read_r6rs_block_comment): New function.

* test-suite/tests/reader.test (exception:unterminated-block-comment):
  Adjust to match both block comment styles.
  ("reading")["R6RS/SRFI-30 block comment", "R6RS/SRFI-30 nested block
  comment", "R6RS/SRFI-30 block comment syntax overridden"]: New tests.
  ("exceptions")["R6RS/SRFI-30 unterminated nested block comment"]: New
  test.

* doc/ref/api-evaluation.texi (Block Comments): Mention SRFI-30/R6RS
  block comments.

* doc/ref/srfi-modules.texi (SRFI-30): New node.

14 years agocomment fixups to tree-il/compile-glil.scm
Andy Wingo [Sun, 27 Sep 2009 19:57:06 +0000 (15:57 -0400)]
comment fixups to tree-il/compile-glil.scm

* module/language/tree-il/compile-glil.scm: Remove some outdated
  comments.

14 years agojumps encoded using 24 bits, not 19; blocks no longer aligned
Andy Wingo [Thu, 17 Sep 2009 12:58:31 +0000 (14:58 +0200)]
jumps encoded using 24 bits, not 19; blocks no longer aligned

* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump.
* libguile/vm-i-system.c (FETCH_OFFSET, BR): Labels are no longer 8-byte
  aligned; instead, jumps are encoded into 3 bytes instead of 2.
  (br, br-if, br-if-not, br-if-eq, br-if-not-eq, br-if-null)
  (br-if-not-null, mv-call): Adapt for new length of br instructions (3
  bytes instead of 2).

* libguile/vm.c (really_make_boot_program): Adapt hand-coded bytecode
  for new offset regime.

* module/language/assembly.scm (align-block): No alignment necessary.

* module/language/assembly/compile-bytecode.scm (write-bytecode): Write
  out breaks as 24-bit relative jumps.
* module/language/assembly/decompile-bytecode.scm (decode-load-program):
  Decompile break instructions.

14 years agocompilation enviroments are always modules; simplifications & refactorings
Andy Wingo [Fri, 16 Oct 2009 13:27:10 +0000 (15:27 +0200)]
compilation enviroments are always modules; simplifications & refactorings

* module/ice-9/boot-9.scm (make-fresh-user-module): New public function,
  makes an anonymous beautified module.

* module/language/objcode/spec.scm: We used to have some things in here
  that allowed lexical variable names and values to be a part of the
  environment, but no more. Now an environment is just a module. If you
  want to "inject" free variables into code, just use lambda.

* module/language/scheme/compile-tree-il.scm (compile-tree-il): Same
  here. Also, rely on the fact that an environment *will* be a module --
  because (system base compile) guarantees that for us.

* module/language/scheme/spec.scm (scheme): In the reader, rely on the
  environment being a module. Define a #:make-default-environment
  handler, which returns a beautified module, augmented with a fresh
  definition for current-reader, so that side effects to current-reader
  are restricted to the compilation unit.

* module/language/tree-il/analyze.scm
  (report-possibly-unbound-variables):
* module/language/tree-il/compile-glil.scm (compile-glil):
* module/language/tree-il/optimize.scm (optimize!): The environment will
  be a module.

* module/system/base/language.scm (<language>): New field,
  `make-default-environment'. Defaults to `make-fresh-user-module'.
  (default-environment): New accessor, returns a default environment for
  a language.

* module/system/repl/common.scm (repl-compile): Always compile relative
  to the current module, because a module is always acceptable as an
  environment.

* module/system/base/compile.scm (compile-file, compile-and-load): Both
  of these have a new keyword argument, #:env. For `compile-file', it
  defaults to the default environment of the source language, and for
  `compile-and-load', to the current module.
  (read-and-compile): If there are no expressions read, pass the joiner
  its default environment (via `default-environment joint').

14 years agono more *compilation-environment* fluid
Andy Wingo [Fri, 16 Oct 2009 12:04:42 +0000 (14:04 +0200)]
no more *compilation-environment* fluid

* module/system/base/compile.scm (current-compilation-environment):
  Remove, as the only thing that needed it (language readers) now get
  the environment as an argument.
  (read-and-compile, compile): Rework for no *compilation-environment*,
  and default the environment using the define* mechanism.

* module/language/tree-il/analyze.scm (env-module): Hack around the lack
  of a current compilation module. Will fix this in the next commit so
  that the environment is always valid.

14 years agolanguage-readers receive environment as an arg
Andy Wingo [Fri, 16 Oct 2009 11:39:24 +0000 (13:39 +0200)]
language-readers receive environment as an arg

* module/language/assembly/spec.scm:
* module/language/brainfuck/spec.scm:
* module/language/bytecode/spec.scm:
* module/language/ecmascript/spec.scm:
* module/language/glil/spec.scm:
* module/language/scheme/spec.scm:
* module/language/tree-il/spec.scm: Language-readers now take two
  arguments: the port and the environment. This should allow for
  compile-environment-specific reader behavior.

* module/system/base/compile.scm (read-and-compile):
* module/system/repl/common.scm (repl-read): Pass the environment to the
  language-reader.

* module/system/repl/repl.scm (meta-reader, prompting-meta-read):
* module/system/repl/command.scm (define-meta-command): Use the second
  argument to repl-reader, so we avoid frobbing current-reader.

14 years agorepl-reader accepts optional "read" argument
Andy Wingo [Fri, 16 Oct 2009 11:30:52 +0000 (13:30 +0200)]
repl-reader accepts optional "read" argument

* module/ice-9/boot-9.scm (repl-reader): Accept an optional second
  argument, the reader to use. If it is given, use it instead of
  dereferencing the current-reader fluid.

* guile-readline/ice-9/readline.scm (activate-readline): Make our
  replacement definition of repl-reader compatible with boot-9.

14 years agoremove GHIL, Elisp, and R5RS languages
Andy Wingo [Fri, 16 Oct 2009 10:19:43 +0000 (12:19 +0200)]
remove GHIL, Elisp, and R5RS languages

GHIL is obsolete, and it's about time we got rid of it. Elisp and R5RS
were unmodified since their import from Guile-VM, so we ditch them too.

R5RS compilation is supported via compiling Scheme within an R5RS
environment.

Elisp will be supported when we merge in Daniel's work.

14 years agobitvector tweaks
Andy Wingo [Fri, 16 Oct 2009 09:59:30 +0000 (11:59 +0200)]
bitvector tweaks

* libguile/arrays.c (scm_from_contiguous_typed_array):
* libguile/bytevectors.c (scm_uniform_array_to_bytevector): Error if the
  uniform element size is more than 8 bits, but not divisible by 8 --
  because our math could overflow in that case.

* module/ice-9/deprecated.scm (#\y): Indeed, #* is the valid bitvector
  syntax :)

14 years agoImprove TLS detection for systems with compiler support but no libc support.
Ludovic Courtès [Thu, 15 Oct 2009 21:52:00 +0000 (23:52 +0200)]
Improve TLS detection for systems with compiler support but no libc support.

* acinclude.m4 (GUILE_THREAD_LOCAL_STORAGE): Use `AC_LINK_IFELSE'
  instead of `AC_COMPILE_IFELSE'.

14 years agoBump version number for 1.9.4.
Ludovic Courtès [Thu, 15 Oct 2009 21:31:57 +0000 (23:31 +0200)]
Bump version number for 1.9.4.

* GUILE-VERSION (GUILE_MICRO_VERSION): Increment.

14 years agoFix compilation of literal bitvectors.
Ludovic Courtès [Thu, 15 Oct 2009 21:29:50 +0000 (23:29 +0200)]
Fix compilation of literal bitvectors.

* libguile/arrays.c (scm_from_contiguous_typed_array): Fix BYTE_LEN
  sanity check for bitvectors.

* test-suite/tests/unif.test ("syntax")["bitvector is self-evaluating"]:
  New test.

* module/ice-9/deprecated.scm (#\y): Fix deprecation comment: `#*' is
  not a read syntax.

14 years agoFix segfault for `(uniform-array->bytevector (bitvector))'.
Ludovic Courtès [Thu, 15 Oct 2009 21:24:19 +0000 (23:24 +0200)]
Fix segfault for `(uniform-array->bytevector (bitvector))'.

* libguile/bytevectors.c (scm_uniform_array_to_bytevector): Fix BYTE_LEN
  computation for bitvectors.

* test-suite/tests/bytevectors.test ("uniform-array->bytevector"): New
  test prefix.

14 years agoFix `gitlog-to-changelog' on NixOS.
Ludovic Courtès [Thu, 15 Oct 2009 19:55:54 +0000 (21:55 +0200)]
Fix `gitlog-to-changelog' on NixOS.

14 years agoDocument the interaction of the "compilee" with the compiler's current module.
Ludovic Courtès [Thu, 15 Oct 2009 19:29:42 +0000 (21:29 +0200)]
Document the interaction of the "compilee" with the compiler's current module.

This is a followup to 87c595c757b7db84ffdcfda96f736ab235e674a8 ("Compile
in a fresh module by default.") and
f65e2b1ec5ae1962e57322ac3085ab4d44025694 ("Honor and confine
expansion-time side-effects to `current-reader'.").

* doc/ref/api-evaluation.texi (Loading): Explain how to change
  `current-reader' in a compiler-friendly way.

* doc/ref/compiler.texi (The Scheme Compiler): Explain use of a fresh
  compilation module and separate `current-reader' fluid.

* test-suite/tests/compiler.test ("current-reader")["with eval-when"]:
  New test.

14 years agoFix REPL environment for languages other than scheme.
Ludovic Courtès [Thu, 15 Oct 2009 18:51:16 +0000 (20:51 +0200)]
Fix REPL environment for languages other than scheme.

* module/system/repl/common.scm (repl-compile): Use `#:env #f' for
  languages other than scheme.

14 years agosignedness fix fix fix
Andy Wingo [Thu, 15 Oct 2009 15:39:34 +0000 (17:39 +0200)]
signedness fix fix fix

* libguile/inline.h: Fix signedness fix fix.

14 years ago`load' autocompiles -- in the current module.
Andy Wingo [Thu, 15 Oct 2009 13:48:14 +0000 (15:48 +0200)]
`load' autocompiles -- in the current module.

* module/ice-9/boot-9.scm (load): Pull `autocompiled-file-name' inside
  `load', and make it autocompile in the current module. Should fix
  Julian's issue noted in
  http://article.gmane.org/gmane.lisp.guile.devel/9483.

14 years agoupdate NEWS for 1.9.4
Andy Wingo [Thu, 15 Oct 2009 13:45:03 +0000 (15:45 +0200)]
update NEWS for 1.9.4

14 years agofix scm_array_handle_ref signedness fix
Andy Wingo [Thu, 15 Oct 2009 13:44:45 +0000 (15:44 +0200)]
fix scm_array_handle_ref signedness fix

* libguile/inline.h: Fix signedness fix.

14 years agoadd back support for #y bitvector read syntax
Andy Wingo [Thu, 15 Oct 2009 13:05:36 +0000 (15:05 +0200)]
add back support for #y bitvector read syntax

* module/ice-9/deprecated.scm (#\y): Add deprecated support for
  #y(1 0 1 ...) bitvectors.

14 years agoUse pointer-less memory for `scm_gc_strdup ()'.
Ludovic Courtès [Wed, 14 Oct 2009 23:32:36 +0000 (01:32 +0200)]
Use pointer-less memory for `scm_gc_strdup ()'.

* libguile/gc-malloc.c (scm_gc_strndup): Use `GC_MALLOC_ATOMIC ()'
  instead of `GC_MALLOC ()'.

14 years agoRestore signature of `scm_primitive_load_path ()' as found in 1.8.
Ludovic Courtès [Wed, 14 Oct 2009 23:05:32 +0000 (01:05 +0200)]
Restore signature of `scm_primitive_load_path ()' as found in 1.8.

The incompatibility was introduced by
0fb81f95b0222c5ba49efd3e36cf797df54c0863 ("add exception_on_error
optional arg to primitive-load-path").

* libguile/load.c (scm_primitive_load_path): Change to take 1 rest
  argument.  Interpret the argument as either a file name (C-level
  backward compatibility with 1.8) or an actual argument list.
  (scm_c_primitive_load_path): Update caller.

* libguile/load.h (scm_primitive_load_path): Update accordingly.

* doc/ref/api-evaluation.texi (Loading): Update documentation of
  `primitive-load-path' and `scm_primitive_load_path ()'.

14 years agoUse GC-managed memory for port->encoding.
Ludovic Courtès [Wed, 14 Oct 2009 22:56:56 +0000 (00:56 +0200)]
Use GC-managed memory for port->encoding.

* libguile/ports.c (scm_new_port_table_entry): Use `scm_gc_strdup ()'
  instead of `strdup ()' for `entry->encoding'.
  (scm_i_set_port_encoding_x): Likewise.  Remove free(3) call.
  (scm_i_remove_port): Don't explicitly free memory.
  (scm_unget_byte): Remove outdated and misleading comment.

14 years agoFix signed/unsigned mismatch in `scm_array_handle_{ref,set} ()'.
Ludovic Courtès [Wed, 14 Oct 2009 21:20:54 +0000 (23:20 +0200)]
Fix signed/unsigned mismatch in `scm_array_handle_{ref,set} ()'.

* libguile/inline.h (scm_array_handle_ref, scm_array_handle_set): Cast
  `h->base' so that it matches the signedness of `p'.

14 years agoFlush output before forking, to make test output consistent and avoid
Ken Raeburn [Tue, 13 Oct 2009 15:45:34 +0000 (11:45 -0400)]
Flush output before forking, to make test output consistent and avoid
duplication.

* test-suite/tests/socket.test: Before calling primitive-fork, call
  force-output on the current output and error ports.

14 years agoadd $libir to the ltdl path, not $pkglibdir; add extensionsdir
Andy Wingo [Tue, 13 Oct 2009 09:31:02 +0000 (11:31 +0200)]
add $libir to the ltdl path, not $pkglibdir; add extensionsdir

* libguile/Makefile.am (libpath.h): Fix SCM_LIB_DIR to point to the
  libdir, not pkglibdir. Add SCM_EXTENSIONS_DIR, for a dir to put in the
  dynamic-link search path that's not managed by ldconfig or the like;
  and put this dir in the "extensionsdir" key of %guile-build-info.

* libguile/dynl.c (sysdep_dynl_init): Rename the installed-libdir
  environment var to GUILE_SYSTEM_EXTENSIONS_PATH (from
  GUILE_SYSTEM_LTDL_PATH). Also add SCM_EXTENSIONS_DIR to the ltdl
  search path in the default case.
* meta/uninstalled-env.in: Adapt override to match.

* meta/guile-2.0.pc.in: Add extensionsdir, so you can pkg-config
  --variable=extensionsdir guile-2.0.

14 years agoModify regexp.test to work better with mac/darwin
Michael Gran [Mon, 12 Oct 2009 13:55:25 +0000 (06:55 -0700)]
Modify regexp.test to work better with mac/darwin

* test-suite/tests/regexp.test (set-latin-1): also add .ISO8859-1 as a
  possible extension for latin-1 locales.  Use set-latin-1 exclusively
  to set the locale for tests.

14 years agoRevert changes that gather thread-specific local language
Michael Gran [Fri, 9 Oct 2009 14:06:14 +0000 (07:06 -0700)]
Revert changes that gather thread-specific local language

The method used was not portable.  However, the underlying problem
still exists: the uc_locale_language used by libunistring does not
work with thread-specific locale_t locales.

* libguile/i18n.c (locale_language): avoid unpacking semi-opaque type
  locale_t.

* test-suite/tests/i18n.test: set Turkish string and char locale upcase
  and downcase tests to throw untested

14 years agoAdjust to match changes in libgc's CVS (pre-7.2).
Ludovic Courtès [Fri, 9 Oct 2009 12:42:07 +0000 (14:42 +0200)]
Adjust to match changes in libgc's CVS (pre-7.2).

In libgc CVS the `GC_do_blocking ()' declaration is now public but it
uses a slightly different signature for its first argument.

* configure.ac: Check for `GC_fn_type'.

* libguile/threads.c (GC_fn_type)[HAVE_GC_DO_BLOCKING &&
  !HAVE_GC_FN_TYPE]: New typedef.
  (scm_without_guile): Explicitly cast `without_guile_trampoline' to
  `GC_fn_type'.  This is because the upstream definition currently
  looks like `typedef void * (extern *GC_fn_type)(void *);', which
  isn't compatible.

14 years agoUse TLS when available for `SCM_I_CURRENT_THREAD'.
Ludovic Courtès [Fri, 2 Oct 2009 14:32:34 +0000 (16:32 +0200)]
Use TLS when available for `SCM_I_CURRENT_THREAD'.

* acinclude.m4 (GUILE_THREAD_LOCAL_STORAGE): New macro.

* configure.ac: Use it.

* libguile/__scm.h (SCM_THREAD_LOCAL): New macro.

* libguile/gen-scmconfig.c (main): Define `SCM_HAVE_THREAD_STORAGE_CLASS'.

* libguile/gen-scmconfig.h.in (SCM_I_GSC_HAVE_THREAD_STORAGE_CLASS):
  New.

* libguile/threads.c
  (scm_i_current_thread)[SCM_HAVE_THREAD_STORAGE_CLASS]: New.
  (SET_CURRENT_THREAD): New macro.
  (guilify_self_1, on_thread_exit, init_thread_key): Use it.

* libguile/threads.h
  (scm_i_current_thread)[SCM_HAVE_THREAD_STORAGE_CLASS]: New
  declaration.
  (SCM_I_CURRENT_THREAD)[SCM_HAVE_THREAD_STORAGE_CLASS]: New macro.
  (init_thread_key_once, init_thread_key): Conditionalize on
  `!defined SCM_HAVE_THREAD_STORAGE_CLASS'.
  (scm_i_init_thread_for_guile): Update accordingly.

14 years agoArrange so that `SCM_I_CURRENT_THREAD' is not accessed outside of libguile.
Ludovic Courtès [Fri, 2 Oct 2009 13:28:29 +0000 (15:28 +0200)]
Arrange so that `SCM_I_CURRENT_THREAD' is not accessed outside of libguile.

* libguile/__scm.h (scm_async_tick): New declaration.
  (SCM_ASYNC_TICK)[!BUILDING_LIBGUILE]: Use `scm_async_tick ()'.

* libguile/async.c (scm_critical_section_start,
  scm_critical_section_end, scm_async_tick): New functions.

* libguile/async.h (scm_i_critical_section_mutex): Made internal.
  (scm_critical_section_start, scm_critical_section_end): New
  declarations.
  (SCM_CRITICAL_SECTION_START,
  SCM_CRITICAL_SECTION_END)[!BUILDING_LIBGUILE]: Use the same-named
  function (lower-case).

* libguile/stackchk.h (SCM_STACK_OVERFLOW_P): Conditionalize on
  `BUILDING_LIBGUILE'.

* libguile/threads.h (SCM_I_CURRENT_THREAD, scm_i_dynwinds,
  scm_i_set_dynwinds, scm_i_last_debug_frame,
  scm_i_set_last_debug_frame): Conditionalize on `BUILDING_LIBGUILE'.

14 years agoDeprecate `scm_mask_ints'.
Ludovic Courtès [Fri, 2 Oct 2009 13:02:52 +0000 (15:02 +0200)]
Deprecate `scm_mask_ints'.

* libguile/async.h (scm_mask_ints): Remove.

* libguile/deprecated.c (scm_i_mask_ints): New.

* libguile/deprecated.h (scm_mask_ints): New macro.
  (scm_i_mask_ints): New declaration.

14 years agoRevert "Change dynwind flag enums to #defines, for greater portability"
Neil Jerram [Wed, 7 Oct 2009 21:14:38 +0000 (22:14 +0100)]
Revert "Change dynwind flag enums to #defines, for greater portability"

This reverts commit b25aa0b9373d2798469e0fe999cd915e8beedc4f.

14 years agoFix typo in `scm_array_p_2 ()'.
Ludovic Courtès [Tue, 6 Oct 2009 21:40:30 +0000 (23:40 +0200)]
Fix typo in `scm_array_p_2 ()'.

* libguile/generalized-arrays.c (scm_array_p_2)[FUNC_NAME]: Fix.

14 years agoAdd compiler warning for possibly unbound variables.
Ludovic Courtès [Tue, 6 Oct 2009 21:39:56 +0000 (23:39 +0200)]
Add compiler warning for possibly unbound variables.

* module/language/tree-il/analyze.scm (<toplevel-info>): New record
  type.
  (env-module, report-possibly-unbound-variables): New procedures.

* module/language/tree-il/compile-glil.scm (%warning-passes): Add
  `unbound-variable'.

* module/system/base/message.scm (%warning-types): Likewise.

* test-suite/tests/tree-il.test (read-and-compile, %opts-w-unbound):
  New.
  ("warnings")["unbound variable"]: New test prefix.

14 years agotree-il: Pass the environment to warning passes.
Ludovic Courtès [Tue, 6 Oct 2009 21:36:53 +0000 (23:36 +0200)]
tree-il: Pass the environment to warning passes.

* module/language/tree-il/analyze.scm (report-unused-variables): Taken a
  new parameter, ENV.

* module/language/tree-il/compile-glil.scm (compile-glil): Pass E to
  individual warning passes.

14 years agoChange dynwind flag enums to #defines, for greater portability
Neil Jerram [Fri, 2 Oct 2009 21:18:52 +0000 (22:18 +0100)]
Change dynwind flag enums to #defines, for greater portability

Thanks to Inge Gutheil for raising this problem.

* doc/ref/api-control.texi (Dynamic Wind): Remove doc for
  scm_t_dynwind_flags, and change uses of scm_t_dynwind_flags to int.
  Mention possible flags inside doc for scm_dynwind_begin instead.
  Similarly for scm_t_wind_flags.  In this case the doc on possible
  flags is moved to after the four functions that can use them.

* libguile/dynwind.c (scm_dynwind_begin): Change scm_t_dynwind_flags
  to int.
  (scm_dynwind_unwind_handler): Change scm_t_wind_flags to int.
  (scm_dynwind_rewind_handler): Ditto.
  (scm_dynwind_unwind_handler_with_scm): Ditto.
  (scm_dynwind_rewind_handler_with_scm): Ditto.

* libguile/dynwind.h (SCM_F_DYNWIND_REWINDABLE): Use #define instead
  of typedef enum.
  (SCM_F_WIND_EXPLICITLY): Ditto.
  (function declarations): Change scm_t_dynwind_flags and
  scm_t_wind_flags to int.

* test-suite/standalone/test-unwind.c (check_cont_body): Change
  scm_t_dynwind_flags to int.

14 years agoUse `SCM_DEPRECATED' in declarations of deprecated functions/variables.
Ludovic Courtès [Fri, 2 Oct 2009 12:48:22 +0000 (14:48 +0200)]
Use `SCM_DEPRECATED' in declarations of deprecated functions/variables.

* libguile/deprecated.c (SCM_BUILDING_DEPRECATED_CODE): New macro.

* libguile/async.c (SCM_BUILDING_DEPRECATED_CODE): Likewise.

* libguile/macros.c (SCM_BUILDING_DEPRECATED_CODE): Likewise.

* libguile/async.h, libguile/deprecated.h, libguile/eval.h,
  libguile/gc.h, libguile/gc.h, libguile/macros.h, libguile/ports.h,
  libguile/srfi-4.h, libguile/strings.h: Change declarations of
  deprecated functions and variables to use `SCM_DEPRECATED' instead of
  `SCM_API'.

14 years agoAdd `SCM_DEPRECATED' macro to declare deprecated C functions/variables.
Ludovic Courtès [Fri, 2 Oct 2009 12:34:51 +0000 (14:34 +0200)]
Add `SCM_DEPRECATED' macro to declare deprecated C functions/variables.

* libguile/__scm.h (SCM_DEPRECATED): New macro.

14 years agoFix the argument list of gsubr stack frames.
Ludovic Courtès [Fri, 2 Oct 2009 08:26:30 +0000 (10:26 +0200)]
Fix the argument list of gsubr stack frames.

This fixes a bug introduced in e20d7001c3f7150400169fecb0bf0eefdf122fe2
and reported by Neil.

* libguile/eval.i.c (CEVAL)[DEVAL]: Don't duplicate ARG1 in
  `debug.info->a.args' for gsubr stack frames.
  (scm_apply): Likewise.

* test-suite/tests/eval.test ("stacks")["arguments of a gsubr stack
  frame"]: New test.

14 years agoFix doc for inet-ntop: always produces a string
Neil Jerram [Thu, 1 Oct 2009 22:38:57 +0000 (23:38 +0100)]
Fix doc for inet-ntop: always produces a string

Thanks to Scott McPeak for reporting this.

* libguile/socket.c (scm_inet_ntop): In docstring, add quotes around
  IPv6 address (+ reflow a bit).

* doc/ref/posix.texi (Network Address Conversion): Corresponding
  change.

* doc/maint/guile.texi: Corresponding change.

14 years agoFix handling of IPv6 addresses
Neil Jerram [Thu, 1 Oct 2009 22:27:59 +0000 (23:27 +0100)]
Fix handling of IPv6 addresses

Thanks to Scott McPeak for reporting this and providing a patch.

* libguile/socket.c (scm_to_ipv6): When address is the wrong type,
  provide more information in the exception message.

  (scm_to_sockaddr): scm_to_ipv6 expects just an address, not the
  whole vector.

* test-suite/tests/socket.test ("AF_INET6/SOCK_STREAM"): New set of
  tests.

14 years agoFix incorrect doc mentions of INADDR_LOCALHOST
Neil Jerram [Thu, 1 Oct 2009 21:27:07 +0000 (22:27 +0100)]
Fix incorrect doc mentions of INADDR_LOCALHOST

Thanks to Scott McPeak for reporting this.

* doc/ref/posix.texi (Network Sockets and Communication): Change
  INADDR_LOCALHOST to INADDR_LOOPBACK.

14 years agoAdd define-module to signals.test
Neil Jerram [Thu, 1 Oct 2009 20:56:49 +0000 (21:56 +0100)]
Add define-module to signals.test

* test-suite/tests/signals.test (test-suite): Add define-module form.

14 years agoChange signals.test to LGPLv3+
Neil Jerram [Thu, 1 Oct 2009 20:54:49 +0000 (21:54 +0100)]
Change signals.test to LGPLv3+

* test-suite/tests/signals.test: Update licence statement.

14 years agoRemove unused environments code and tests
Neil Jerram [Wed, 30 Sep 2009 22:06:02 +0000 (23:06 +0100)]
Remove unused environments code and tests

* libguile/environments.c, libguile/environments.h,
  test-suite/tests/environments.nottest: Deleted.

14 years agoFix spurious `throw from within critical section' errors
Neil Jerram [Tue, 10 Mar 2009 23:55:31 +0000 (23:55 +0000)]
Fix spurious `throw from within critical section' errors

The crux of this problem was that the thread doing a throw, and so
checking scm_i_critical_section_level, was different from the thread
that was in a critical section.

* libguile/async.h (scm_i_critical_section_level): Removed, replaced
  by per-thread critical_section_level.
  (SCM_CRITICAL_SECTION_START, SCM_CRITICAL_SECTION_END): Use
  per-thread critical_section_level.

* libguile/continuations.c (scm_dynthrow): Check per-thread
  critical_section_level.

* libguile/threads.c (guilify_self_1): Init per-thread
  critical_section_level.
  (scm_i_critical_section_level): Removed.

* libguile/threads.h (scm_i_thread): New critical_section_level field.

* libguile/throw.c (scm_ithrow): Check per-thread critical_section_level.

14 years agoAvoid throw from critical section, given invalid sigaction call
Neil Jerram [Thu, 5 Mar 2009 20:03:33 +0000 (20:03 +0000)]
Avoid throw from critical section, given invalid sigaction call

* libguile/scmsigs.c (scm_sigaction_for_thread): Exit critical section
  before raising out-of-range error.

* test-suite/Makefile.am (SCM_TESTS): Add signals.test.

* test-suite/tests/signals.test: New file.

14 years agoMake `weaks.test' slightly more robust.
Ludovic Courtès [Mon, 28 Sep 2009 21:27:53 +0000 (23:27 +0200)]
Make `weaks.test' slightly more robust.

* test-suite/tests/weaks.test (global-weak): Use `string-copy' on all
  the keys, in case one of them is retained in `scm_source_whash' or
  similar.

14 years agoImprove description of `scm_set_smob_mark ()'.
Ludovic Courtès [Mon, 28 Sep 2009 21:21:47 +0000 (23:21 +0200)]
Improve description of `scm_set_smob_mark ()'.

* doc/ref/api-smobs.texi (Smobs): Improve description of
  `scm_set_smob_mark ()'.  Mention malloc(3) regions.

14 years agoRemove unneeded SMOB/port mark/free procedures.
Ludovic Courtès [Fri, 25 Sep 2009 11:45:16 +0000 (13:45 +0200)]
Remove unneeded SMOB/port mark/free procedures.

* libguile/arrays.c (array_mark, array_free): Remove.
  (scm_init_arrays): Adjust accordingly.

* libguile/bitvectors.c (bitvector_free): Remove.
  (scm_c_make_bitvector): Use `scm_gc_malloc_pointerless ()'.
  (scm_init_bitvectors): Adjust accordingly.

* libguile/strports.c (scm_make_stptob): Remove `scm_set_port_mark ()'
  call.

* libguile/vports.c (scm_make_sfptob): Likewise.

14 years agoRemove default port/SMOB finalizers.
Ludovic Courtès [Fri, 25 Sep 2009 10:29:02 +0000 (12:29 +0200)]
Remove default port/SMOB finalizers.

* libguile/ports.c (scm_port_free0): Remove.
  (scm_make_port_type): Set `free' to NULL.

* libguile/smob.c (scm_make_smob_type): Leave `free' to NULL.
  (scm_smob_free): Remove.

* libguile/smob.h (scm_smob_free): Remove.

* libguile/deprecated.c (scm_smob_free): New.

* libguile/deprecated.h (scm_smob_free): New declaration.

14 years agoClean meta/guile-config
Neil Jerram [Fri, 25 Sep 2009 23:51:50 +0000 (00:51 +0100)]
Clean meta/guile-config

* meta/Makefile.am (CLEANFILES): New, containing guile-config.

14 years agoDon't include guile-config and guile-tools in distribution
Neil Jerram [Fri, 25 Sep 2009 21:45:17 +0000 (22:45 +0100)]
Don't include guile-config and guile-tools in distribution

They need to be regenerated, with the correct prefix, when configure
and make run.

* meta/Makefile.am (EXTRA_DIST): Remove bin_SCRIPTS.

14 years agoFix make distcheck by looking for guile-config in $(srcdir)
Neil Jerram [Fri, 25 Sep 2009 19:18:34 +0000 (20:18 +0100)]
Fix make distcheck by looking for guile-config in $(srcdir)

make distcheck is currently failing for me with:

In file included from /usr/local/include/libguile/threads.h:35,
                 from /usr/local/include/libguile/async.h:28,
                 from /usr/local/include/libguile.h:37,
                 from ../../examples/box/box.c:22:
/usr/local/include/libguile/pthread-threads.h:33:31: error: libguile/boehm-gc.h: No such file or directory
In file included from /usr/local/include/libguile.h:93,
                 from ../../examples/box/box.c:22:

- which is because it's picking up a load of installed headers,
instead of those in the _inst tree

- which is because there is no output from the preceding guile-config
invocation:

PATH=/home/neil/SW/Guile/ovnight/guile-master-20090924/_inst/bin:$PATH PKG_CONFIG_PATH=/home/neil/SW/Guile/ovnight/guile-master-20090924/_inst/lib/pkgconfig /home/neil/SW/Guile/ovnight/guile-master-20090924/_inst/bin/guile-config compile

- which is because .../_inst/bin/guile-config is empty

- which is because the rule in meta/Makefile.am that generates
guile-config is missing $(srcdir), and so doesn't find
guile-config.in.

* meta/Makefile.am (guile-config): Look for guile-config.in in
  $(srcdir).

14 years agoMissing free in nl-langinfo
Michael Gran [Fri, 25 Sep 2009 14:47:56 +0000 (07:47 -0700)]
Missing free in nl-langinfo

This is a regression.

* libguile/i18n.c (scm_nl_langinfo): free c_result

14 years agoFix encoding of strings returned by nl-langinfo
Michael Gran [Fri, 25 Sep 2009 14:27:11 +0000 (07:27 -0700)]
Fix encoding of strings returned by nl-langinfo

Strings returned by nl-langinfo were always being encoded using the
global setlocale and not the scm_t_locale passed to the function.

* libguile/i18n.c (scm_nl_langinfo): fix encoding of strings

14 years agoLanguage-specific case-conversion doesn't honor locale
Michael Gran [Thu, 24 Sep 2009 15:07:38 +0000 (08:07 -0700)]
Language-specific case-conversion doesn't honor locale

Libunistring uses a function uc_locale_language to extract the
current language from the locale information.  It does this by calling
setlocale.  This makes incompatible with Guile functions that use the
locale_t thread-specific locale API, because the values returned by the
call to setlocale ignore the locale set by uselocale.

As a workaround, this patch extracts the language from the locale_t
structure's __names field.

A more complete solution is needed.  Perhaps that solution would test
that the __names field exists in the configure step and revert to
!USE_GNU_LOCALE_API in that case.

* libguile/i18n.c (locale_language): new function that performs the
  same job as uc_locale_language but is compatible with uselocale
  (u32_locale_casecoll, u32_locale_tocase): replace uc_locale_language
  with locale_language

14 years agoTests for locale-specific case conversion
Michael Gran [Thu, 24 Sep 2009 15:10:03 +0000 (08:10 -0700)]
Tests for locale-specific case conversion

* test-suite/tests/i18n.test: add tests for case conversion of Turkish
  letters 'i' to verify that the language is being honored.

14 years agoTry to adjust i18n for strict aliasing
Michael Gran [Thu, 24 Sep 2009 14:50:49 +0000 (07:50 -0700)]
Try to adjust i18n for strict aliasing

* libguile/i18n.c (u32_locale_tocase, scm_char_locale_downcase)
  (scm_char_locale_upcase, scm_string_locale_downcase)
  (scm_string_locale_upcase): use the scm_t_uint32 type for buffers
  that are used primarily for libunistring and not for Guile strings.

14 years agoMove "-z relro" out of $LDFLAGS so it's not in `guile-2.0.pc'.
Ludovic Courtès [Wed, 23 Sep 2009 22:04:37 +0000 (00:04 +0200)]
Move "-z relro" out of $LDFLAGS so it's not in `guile-2.0.pc'.

* acinclude.m4 (GUILE_GNU_LD_RELRO): Substitute `GNU_LD_FLAGS'.

* libguile/Makefile.am (libguile_la_LDFLAGS): Add $(GNU_LD_FLAGS).

* srfi/Makefile.am (AM_LDFLAGS): New.

14 years agoHave `guile-config' close over `pkg-config' and $(pkgconfigdir).
Ludovic Courtès [Wed, 23 Sep 2009 20:45:07 +0000 (22:45 +0200)]
Have `guile-config' close over `pkg-config' and $(pkgconfigdir).

* meta/Makefile.am (guile-config): New target.
  (EXTRA_DIST): Add `guile-config.in'.

* meta/guile-config.in: New, formerly `guile-config'.  Use the right
  installed `guile', with the right $PKG_CONFIG_PATH.  Disable
  auto-compilation.
  (%pkg-config-program): New variable.
  (pkg-config): Use it.

14 years agoPartially revert e5f5113c21f396705d7479a570c96690135c9d36.
Ludovic Courtès [Wed, 23 Sep 2009 20:13:09 +0000 (22:13 +0200)]
Partially revert e5f5113c21f396705d7479a570c96690135c9d36.

The intent is to maintain the readability of `pmatch' invocations.

* module/language/assembly/disassemble.scm (disassemble-load-program):
  Don't use wildcards in `pmatch' invocations, even when the matched
  elements are unused.

* module/language/glil/decompile-assembly.scm (decompile-toplevel,
  decompile-load-program): Likewise.

* module/system/xref.scm (program-callee-rev-vars): Likewise.

* module/language/assembly.scm (byte-length): Likewise.

* module/language/tree-il/compile-glil.scm (flatten): Likewise.

14 years agoReinstate backward-compatible `scm_array_p ()'.
Ludovic Courtès [Wed, 23 Sep 2009 20:04:55 +0000 (22:04 +0200)]
Reinstate backward-compatible `scm_array_p ()'.

* libguile/generalized-arrays.c (scm_array_p_2): New, formerly
  `scm_array_p ()'.
  (scm_array_p): Add second argument, for compatibility with 1.8 and
  earlier and to match what the doc says and what `SCM_VALIDATE_ARRAY'
  expects.

* libguile/generalized-arrays.h (scm_array_p_2): New.
  (scm_array_p): Adjust.

14 years agoModify char and string locale upcase and downcase for Unicode
Michael Gran [Wed, 23 Sep 2009 04:08:29 +0000 (21:08 -0700)]
Modify char and string locale upcase and downcase for Unicode

* libguile/i18n.c (u32_locale_tocase): new helper function
  (scm_char_locale_downcase, scm_char_locale_upcase): add capability
  for UCS-4 characters.
  (scm_string_locale_downcase, scm_string_locale_upcase): modify for
  the new scheme strings.

14 years agoManual link from `Guile Initialization' to `Initialization'
Neil Jerram [Tue, 22 Sep 2009 00:03:43 +0000 (01:03 +0100)]
Manual link from `Guile Initialization' to `Initialization'

Thanks to Dale Smith for suggesting this.

* doc/ref/libguile-linking.texi: Add ref to full doc of Guile
  initialisation functions.

14 years agoChanges so that benchmark-guile runs successfully
Neil Jerram [Mon, 21 Sep 2009 23:30:44 +0000 (00:30 +0100)]
Changes so that benchmark-guile runs successfully

* benchmark-suite/benchmarks/bytevectors.bm: Add "coding: latin1"
  comment where Guile will find it.

* benchmark-suite/benchmarks/chars.bm: Ditto.

* benchmark-suite/benchmarks/srfi-13.bm: Ditto.

* benchmark-suite/benchmarks/read.bm ("read"): Divide numbers of
  iterations by 10, so that the benchmarks complete within a few
  minutes.

* benchmark-suite/lib.scm (benchmark): Use `run-benchmark' in macro
  definition, not `,run-benchmark'.

* benchmark-suite/benchmarks/0-reference.bm,
  benchmark-suite/benchmarks/continuations.bm,
  benchmark-suite/benchmarks/if.bm,
  benchmark-suite/benchmarks/logand.bm: Add define-module.

* benchmark-suite/results/neil-arudy: New file, containing benchmark
  results from my computer.

14 years agoGDS usability: operation without a mouse
Neil Jerram [Mon, 21 Sep 2009 23:00:59 +0000 (00:00 +0100)]
GDS usability: operation without a mouse

Derek Peschel provided this patch and described it as follows.

"Most of the time I use Terminal in OS X, rather than xterm.  I also don't
bother with the GUI versions of Emacs.  So unfortunately I have no mouse
support in Emacs.  Also the system I'm testing Guile on thinks my terminal
doesn't support color and I haven't fixed it yet.  The attached patch makes
GDS more usable for me.

"With no mouse, the "[click here to show error stack]" design is very
inconvenient.  You added a C-M (return) binding at some point.  I copied
that, but I also changed the message to show it.  And I made the return
work when the cursor is after the right bracket."

* emacs/gds-scheme.el (gds-display-results): Make "click here" message
  more helpful for people without mice.  Also extend text properties
  so that a RET key press works at the end of that line.

14 years agoTypo fixes
Neil Jerram [Sat, 19 Sep 2009 00:23:09 +0000 (01:23 +0100)]
Typo fixes

14 years agoFix GDB in Emacs incantation
Neil Jerram [Sat, 19 Sep 2009 00:20:31 +0000 (01:20 +0100)]
Fix GDB in Emacs incantation

14 years agoTests for record types
Michael Gran [Mon, 21 Sep 2009 03:59:05 +0000 (20:59 -0700)]
Tests for record types

* test-suite/tests/records.test: new tests

14 years agoMore tests for strings
Michael Gran [Mon, 21 Sep 2009 03:58:08 +0000 (20:58 -0700)]
More tests for strings

* test-suite/tests/vectors.test: test make-vector and interactions between
  strings and vectors

* test-suite/tests/strings.test: test string-null?, string? and backslash
  escapes

* test-suite/tests/srfi-13.test: test null input strings in string-any and
  string-every

14 years agoRemove unused variables in system/language.
Ludovic Courtès [Sun, 20 Sep 2009 22:35:19 +0000 (00:35 +0200)]
Remove unused variables in system/language.

* module/language/assembly.scm (byte-length): Don't match unused
  record slots.

* module/language/tree-il.scm (tree-il->scheme, post-order!,
  pre-order!): Likewise.

* module/language/tree-il/analyze.scm (analyze-lexicals): Likewise.

* module/language/tree-il/compile-glil.scm (flatten): Likewise.

* module/language/assembly/disassemble.scm (disassemble-load-program):
  Don't match unused list elements.

* module/language/glil/decompile-assembly.scm (decompile-toplevel,
  decompile-load-program): Likewise.

* module/system/xref.scm (program-callee-rev-vars): Likewise.

* module/language/assembly/compile-bytecode.scm
  (write-bytecode)[write-sized-loader]: Remove.

* module/language/assembly/decompile-bytecode.scm (decode-load-program):
  Factorize `pad' variables.

* module/language/ecmascript/base.scm (object->value/string,
  object->value/number)[v]: Remove.

* module/language/ecmascript/tokenize.scm (read-slash)[c0]: Remove.

* module/language/objcode/spec.scm (decompile-value)[nargs]: Remove.

* module/system/repl/command.scm (time)[vms-start, vms-end]: Remove.

* module/system/repl/repl.scm (prompting-meta-read): Use `prompt'.

14 years agoRemove unused variables in ice-9/goops/srfi/scripts.
Ludovic Courtès [Sun, 20 Sep 2009 22:10:28 +0000 (00:10 +0200)]
Remove unused variables in ice-9/goops/srfi/scripts.

* module/ice-9/boot-9.scm (scm-style-repl)[-abort]: Remove.

* module/oop/goops.scm (class)[slot-defs]: Remove.
  (compute-slot-accessors)[name]: Remove.
  (compute-get-n-set)[env]: Remove.

* module/oop/goops/active-slot.scm (compute-get-n-set)[env, name]:
  Remove.

* module/oop/goops/dispatch.scm (cache-try-hash!)[max-misses]: Remove.

* module/oop/goops/save.scm (make-mapper)[dims]: Remove.

* module/scripts/autofrisk.scm (>>checks)[prog]: Remove.

* module/srfi/srfi-19.scm (priv:read-directives)[ireaderf, eireader4]:
  Remove.

14 years agoHonor and confine expansion-time side-effects to `current-reader'.
Ludovic Courtès [Mon, 17 Aug 2009 20:28:54 +0000 (22:28 +0200)]
Honor and confine expansion-time side-effects to `current-reader'.

* module/language/scheme/spec.scm (scheme)[#:reader]: Honor the
  compilation environment's `current-reader'.

* module/system/base/compile.scm (*compilation-environment*): New
  fluid.
  (current-compilation-environment): New procedure.
  (make-compilation-module): Provide a fresh `current-reader' fluid.
  (read-and-compile): Set `*compilation-environment*' appropriately.
  (compile): Likewise.

* test-suite/tests/compiler.test (read-and-compile): New.
  ("current-reader"): New test prefix.

14 years agoFix copyright in `(srfi srfi-4 gnu)'.
Ludovic Courtès [Sun, 20 Sep 2009 20:29:28 +0000 (22:29 +0200)]
Fix copyright in `(srfi srfi-4 gnu)'.

14 years agoCompile in a fresh module by default.
Ludovic Courtès [Fri, 14 Aug 2009 17:30:14 +0000 (19:30 +0200)]
Compile in a fresh module by default.

* module/system/base/compile.scm (make-compilation-module,
  language-default-environment): New procedures.
  (read-and-compile, compile): Have ENV default to
  `(language-default-environment from)'.
  (compile-and-load): Compile in `(current-module)'.

* module/system/repl/common.scm (repl-compile): Explicitly compile in
  the current module so that macro definitions are visible.

* libguile/load.c (kw_env): New variable.
  (do_try_autocompile): Call `compile-file' with `#:env (current-module)'.

* test-suite/tests/compiler.test ("psyntax")["compile uses a fresh module by
  default", "compile-time definitions are isolated"]: New tests.
  ["compile in current module"]: Specify `#:env (current-module)'.
  ["redefinition"]: Adjust.

* test-suite/tests/bytevectors.test (c&e): Explicitly compile in the
  current module so that its imports are visible.

14 years agofix bitvectors after the array handle refactoring
Andy Wingo [Thu, 17 Sep 2009 11:52:09 +0000 (13:52 +0200)]
fix bitvectors after the array handle refactoring

* libguile/uniform.h (scm_array_handle_uniform_element_bit_size): New
  public accessor.

* libguile/uniform.c (scm_array_handle_uniform_element_size): Better
  errors in non-byte-aligned arrays.
  (scm_uniform_vector_element_type, scm_uniform_vector_element_size)
  (scm_c_uniform_vector_ref, scm_c_uniform_vector_set_x):
  (scm_uniform_vector_to_list): Don't require byte-aligned access.

* libguile/bytevectors.c (scm_uniform_array_to_bytevector):
* libguile/arrays.c (scm_from_contiguous_typed_array):  Fix for
  uniform arrays whose element size is not a multiple of the byte size.

14 years agofix thinko in api-memory.texi
Andy Wingo [Thu, 17 Sep 2009 10:24:28 +0000 (12:24 +0200)]
fix thinko in api-memory.texi

14 years agoi18n: Remove non-local exists from `u32_locale_casecoll ()'.
Ludovic Courtès [Fri, 18 Sep 2009 10:58:54 +0000 (12:58 +0200)]
i18n: Remove non-local exists from `u32_locale_casecoll ()'.

* libguile/i18n.c (u32_locale_casecoll): Add RESULT argument.  Return
  zero or ERRNO.
  (compare_u32_strings_ci): Adjust accordingly.

14 years agoi18n: Always use locale-dependent string collation.
Ludovic Courtès [Fri, 18 Sep 2009 10:32:09 +0000 (12:32 +0200)]
i18n: Always use locale-dependent string collation.

* libguile/i18n.c (compare_u32_strings, compare_u32_strings_ci): Always
  use locale-dependent string collation.

* test-suite/tests/i18n.test: Recoded in UTF-8.
  (%french-utf8-locale-name): New.
  (under-locale-or-unresolved): New.  Don't catch errors on GNU systems.
  (under-french-locale-or-unresolved): Use it.
  (under-french-utf8-locale-or-unresolved): New.
  ("text collation (French)")["string-locale-ci=? (2 args, wide
  strings)", "string-locale-ci=? (3 args, wide strings)",
  "string-locale-ci<>? (wide strings)", "string-locale-ci<>? (wide and
  narrow strings)", "char-locale-ci<>? (wide)"]: New tests.

14 years agoi18n: Avoid needless heap allocation.
Ludovic Courtès [Fri, 18 Sep 2009 10:21:22 +0000 (12:21 +0200)]
i18n: Avoid needless heap allocation.

* libguile/i18n.c (SCM_STRING_TO_U32_BUF): Allocate buffers on the stack
  rather on the heap.
  (SCM_U32_BUF_FREE): Remove.  Callers updated.

14 years agoi18n: Simplify `RUN_IN_LOCALE_SECTION' (GNU version).
Ludovic Courtès [Fri, 18 Sep 2009 10:15:26 +0000 (12:15 +0200)]
i18n: Simplify `RUN_IN_LOCALE_SECTION' (GNU version).

* libguile/i18n.c (RUN_IN_LOCALE_SECTION)[USE_GNU_LOCALE_API]: Remove
  extraneous uselocale(3) call.

14 years agoAdd the `%host-type' global variable.
Ludovic Courtès [Fri, 18 Sep 2009 09:40:03 +0000 (11:40 +0200)]
Add the `%host-type' global variable.

* configure.ac: Define `HOST_TYPE'.

* libguile/load.c (sys_host_type): New variable.

* doc/ref/api-options.texi (Build Config): Document `%host-type'.

14 years agoAdapt i18n string and char comparison funcs for Unicode
Michael Gran [Thu, 17 Sep 2009 15:14:08 +0000 (08:14 -0700)]
Adapt i18n string and char comparison funcs for Unicode

* libguile/i18n.c (RUN_IN_LOCALE_SECTION) [USE_GNU_LOCALE_API]: new
  macro for this define.  Should work the same as the !USE_GNU_LOCAL_API
  version
  (SCM_STRING_TO_U32_BUF, SCM_U32_BUF_FREE): helper macros
  (compare_u32_strings, compare_u32_strings_ci): new functions that
  compare scheme strings in the presence of the locale
  (u32_locale_casecoll): new helper function for compare_u32_strings_ci
  (compare_strings, compare_strings_ci): removed and replaced by
  compare_u32_strings and compare_u32_strings_ci
  (scm_string_locale_lt, scm_string_locale_gt, scm_string_locale_ci_lt)
  (scm_string_locale_ci_gt, scm_string_locale_ci_eq): modified to
  use new compare_u32_strings and compare_u32_strings_ci comparison
  functions
  (scm_char_locale_lt, scm_char_locale_gt, scm_char_locale_ci_lt)
  (scm_char_locale_ci_gt, scm_char_locale_ci_eq): modified to use
  new compare_u32_strings and compare_u32_strings_ci comparison
  functions