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!
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.
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.
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.
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'.
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.
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.
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'.
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.
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.
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.
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'.
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.
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>
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.
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.
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.
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').
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.
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.
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.
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.
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 :)
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'.
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.
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.
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.
Ludovic Courtès [Thu, 15 Oct 2009 19:55:54 +0000 (21:55 +0200)]
Fix `gitlog-to-changelog' on NixOS.
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.
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.
Andy Wingo [Thu, 15 Oct 2009 15:39:34 +0000 (17:39 +0200)]
signedness fix fix fix
* libguile/inline.h: Fix signedness fix fix.
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.
Andy Wingo [Thu, 15 Oct 2009 13:45:03 +0000 (15:45 +0200)]
update NEWS for 1.9.4
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.
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.
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 ()'.
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 ()'.
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.
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'.
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.
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.
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.
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
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.
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.
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'.
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.
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.
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.
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.
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.
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.
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'.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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).
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
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
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Neil Jerram [Sat, 19 Sep 2009 00:23:09 +0000 (01:23 +0100)]
Typo fixes
Neil Jerram [Sat, 19 Sep 2009 00:20:31 +0000 (01:20 +0100)]
Fix GDB in Emacs incantation
Michael Gran [Mon, 21 Sep 2009 03:59:05 +0000 (20:59 -0700)]
Tests for record types
* test-suite/tests/records.test: new tests
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
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'.
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.
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.
Ludovic Courtès [Sun, 20 Sep 2009 20:29:28 +0000 (22:29 +0200)]
Fix copyright in `(srfi srfi-4 gnu)'.
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.
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.
Andy Wingo [Thu, 17 Sep 2009 10:24:28 +0000 (12:24 +0200)]
fix thinko in api-memory.texi
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.
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.
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.
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.
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'.
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