diff options
-rw-r--r-- | .gitignore | 4 | ||||
-rw-r--r-- | GUILE-VERSION | 6 | ||||
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | doc/example-smob/Makefile | 4 | ||||
-rw-r--r-- | doc/guile.1 | 2 | ||||
-rw-r--r-- | doc/ref/libguile-concepts.texi | 24 | ||||
-rw-r--r-- | doc/ref/srfi-modules.texi | 4 | ||||
-rw-r--r-- | doc/ref/vm.texi | 8 | ||||
-rw-r--r-- | libguile/bytevectors.c | 29 | ||||
-rw-r--r-- | libguile/bytevectors.h | 10 | ||||
-rw-r--r-- | libguile/foreign.c | 4 | ||||
-rw-r--r-- | libguile/objcodes.c | 7 | ||||
-rw-r--r-- | libguile/r6rs-ports.c | 10 | ||||
-rw-r--r-- | libguile/srfi-4.c | 5 | ||||
-rw-r--r-- | libguile/strings.c | 2 | ||||
-rw-r--r-- | libguile/vm.c | 3 | ||||
-rw-r--r-- | meta/Makefile.am | 6 | ||||
-rw-r--r-- | meta/guile-2.2-uninstalled.pc.in (renamed from meta/guile-2.0-uninstalled.pc.in) | 0 | ||||
-rw-r--r-- | meta/guile-2.2.pc.in (renamed from meta/guile-2.0.pc.in) | 0 | ||||
-rwxr-xr-x | meta/guile-config.in | 4 | ||||
-rw-r--r-- | test-suite/tests/srfi-4.test | 1 |
21 files changed, 79 insertions, 58 deletions
diff --git a/.gitignore b/.gitignore index a0eeeca76..62b74477e 100644 --- a/.gitignore +++ b/.gitignore @@ -66,8 +66,8 @@ guile-procedures.txt guile-config/guile-config *.go TAGS -/meta/guile-2.0.pc -/meta/guile-2.0-uninstalled.pc +/meta/guile-2.2.pc +/meta/guile-2.2-uninstalled.pc gdb-pre-inst-guile cscope.out cscope.files diff --git a/GUILE-VERSION b/GUILE-VERSION index cbbe90948..e95f7eb7c 100644 --- a/GUILE-VERSION +++ b/GUILE-VERSION @@ -2,10 +2,10 @@ # Note: `GUILE_VERSION' is defined in `configure.ac' using `git-version-gen'. GUILE_MAJOR_VERSION=2 -GUILE_MINOR_VERSION=0 -GUILE_MICRO_VERSION=1 +GUILE_MINOR_VERSION=1 +GUILE_MICRO_VERSION=0 -GUILE_EFFECTIVE_VERSION=2.0 +GUILE_EFFECTIVE_VERSION=2.2 # All of the shared lib versioning info. Right now, for this to work diff --git a/configure.ac b/configure.ac index 146b77b00..83e148733 100644 --- a/configure.ac +++ b/configure.ac @@ -1715,8 +1715,8 @@ AC_CONFIG_FILES([ module/Makefile ]) -AC_CONFIG_FILES([meta/guile-2.0.pc]) -AC_CONFIG_FILES([meta/guile-2.0-uninstalled.pc]) +AC_CONFIG_FILES([meta/guile-2.2.pc]) +AC_CONFIG_FILES([meta/guile-2.2-uninstalled.pc]) AC_CONFIG_FILES([doc/ref/effective-version.texi]) GUILE_CONFIG_SCRIPT([check-guile]) diff --git a/doc/example-smob/Makefile b/doc/example-smob/Makefile index 3736dc01f..d368d7b21 100644 --- a/doc/example-smob/Makefile +++ b/doc/example-smob/Makefile @@ -1,5 +1,5 @@ -CFLAGS = `pkg-config guile-2.0 --cflags` -LIBS = `pkg-config guile-2.0 --libs` +CFLAGS = `pkg-config guile-2.2 --cflags` +LIBS = `pkg-config guile-2.2 --libs` O_FILES = image-type.o myguile.o diff --git a/doc/guile.1 b/doc/guile.1 index e36c2aac7..5d8b4e158 100644 --- a/doc/guile.1 +++ b/doc/guile.1 @@ -4,7 +4,7 @@ .\" groff -man -Tascii foo.1 .\" .\" title section date source manual -.TH GUILE 1 "2011-03-04" GNU "GNU Guile 2.0" +.TH GUILE 1 "2011-03-04" GNU "GNU Guile 2.2" . .SH NAME guile \- The GNU Project Extension Language diff --git a/doc/ref/libguile-concepts.texi b/doc/ref/libguile-concepts.texi index 6ebeb6363..915054c53 100644 --- a/doc/ref/libguile-concepts.texi +++ b/doc/ref/libguile-concepts.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Guile Reference Manual. -@c Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003, 2004, 2005, 2010 +@c Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003, 2004, 2005, 2010, 2011 @c Free Software Foundation, Inc. @c See the file guile.texi for copying conditions. @@ -449,16 +449,18 @@ that are stored in local variables. When a thread puts itself into guile mode for the first time, it gets a Scheme representation and is listed by @code{all-threads}, for example. -Threads in guile mode can block (e.g., do blocking I/O) without causing any -problems@footnote{In Guile 1.8, a thread blocking in guile mode would prevent -garbage collection to occur. Thus, threads had to leave guile mode whenever -they could block. This is no longer needed with Guile 2.0.}; temporarily -leaving guile mode with @code{scm_without_guile} before blocking slightly -improves GC performance, though. For some common blocking operations, Guile -provides convenience functions. For example, if you want to lock a pthread -mutex while in guile mode, you might want to use @code{scm_pthread_mutex_lock} -which is just like @code{pthread_mutex_lock} except that it leaves guile mode -while blocking. +Threads in guile mode can block (e.g., do blocking I/O) without causing +any problems@footnote{In Guile 1.8, a thread blocking in guile mode +would prevent garbage collection to occur. Thus, threads had to leave +guile mode whenever they could block. This is no longer needed with +Guile 2.@var{x}.}; temporarily leaving guile mode with +@code{scm_without_guile} before blocking slightly improves GC +performance, though. For some common blocking operations, Guile +provides convenience functions. For example, if you want to lock a +pthread mutex while in guile mode, you might want to use +@code{scm_pthread_mutex_lock} which is just like +@code{pthread_mutex_lock} except that it leaves guile mode while +blocking. All libguile functions are (intended to be) robust in the face of diff --git a/doc/ref/srfi-modules.texi b/doc/ref/srfi-modules.texi index a5b9740f3..0517fc427 100644 --- a/doc/ref/srfi-modules.texi +++ b/doc/ref/srfi-modules.texi @@ -171,8 +171,8 @@ how to load it with the Guile mechanism. @cindex @code{guile-2} SRFI-0 feature @cindex portability between 2.0 and older versions Likewise, testing the @code{guile-2} feature allows code to be portable -between Guile 2.0 and previous versions of Guile. For instance, it -makes it possible to write code that accounts for Guile 2.0's compiler, +between Guile 2.@var{x} and previous versions of Guile. For instance, it +makes it possible to write code that accounts for Guile 2.@var{x}'s compiler, yet be correctly interpreted on 1.8 and earlier versions: @example diff --git a/doc/ref/vm.texi b/doc/ref/vm.texi index 0a1425026..cf4e135ec 100644 --- a/doc/ref/vm.texi +++ b/doc/ref/vm.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Guile Reference Manual. -@c Copyright (C) 2008,2009,2010 +@c Copyright (C) 2008,2009,2010,2011 @c Free Software Foundation, Inc. @c See the file guile.texi for copying conditions. @@ -79,9 +79,9 @@ but it is not normally used at runtime.) The upside of implementing the interpreter in Scheme is that we preserve tail calls and multiple-value handling between interpreted and compiled -code. The downside is that the interpreter in Guile 2.0 is slower than -the interpreter in 1.8. We hope the that the compiler's speed makes up -for the loss! +code. The downside is that the interpreter in Guile 2.@var{x} is slower +than the interpreter in 1.8. We hope the that the compiler's speed makes +up for the loss! Also note that this decision to implement a bytecode compiler does not preclude native compilation. We can compile from bytecode to native diff --git a/libguile/bytevectors.c b/libguile/bytevectors.c index a969e3bb4..4ca3c4e25 100644 --- a/libguile/bytevectors.c +++ b/libguile/bytevectors.c @@ -193,6 +193,9 @@ SCM_SET_BYTEVECTOR_FLAGS ((bv), \ (hint) \ | (SCM_BYTEVECTOR_CONTIGUOUS_P (bv) << 8UL)) +#define SCM_BYTEVECTOR_SET_PARENT(_bv, _parent) \ + SCM_SET_CELL_OBJECT_3 ((_bv), (_parent)) + #define SCM_BYTEVECTOR_TYPE_SIZE(var) \ (scm_i_array_element_type_sizes[SCM_BYTEVECTOR_ELEMENT_TYPE (var)]/8) #define SCM_BYTEVECTOR_TYPED_LENGTH(var) \ @@ -233,6 +236,7 @@ make_bytevector (size_t len, scm_t_array_element_type element_type) SCM_BYTEVECTOR_SET_CONTENTS (ret, contents); SCM_BYTEVECTOR_SET_CONTIGUOUS_P (ret, 1); SCM_BYTEVECTOR_SET_ELEMENT_TYPE (ret, element_type); + SCM_BYTEVECTOR_SET_PARENT (ret, SCM_BOOL_F); } return ret; @@ -262,6 +266,7 @@ make_bytevector_from_buffer (size_t len, void *contents, SCM_BYTEVECTOR_SET_CONTENTS (ret, contents); SCM_BYTEVECTOR_SET_CONTIGUOUS_P (ret, 0); SCM_BYTEVECTOR_SET_ELEMENT_TYPE (ret, element_type); + SCM_BYTEVECTOR_SET_PARENT (ret, SCM_BOOL_F); } return ret; @@ -282,19 +287,31 @@ scm_i_make_typed_bytevector (size_t len, scm_t_array_element_type element_type) return make_bytevector (len, element_type); } -/* Return a bytevector of size LEN made up of CONTENTS. The area pointed to - by CONTENTS must have been allocated using `scm_gc_malloc ()'. */ +/* Return a bytevector of size LEN made up of CONTENTS. The area + pointed to by CONTENTS must be protected from GC somehow: either + because it was allocated using `scm_gc_malloc ()', or because it is + part of PARENT. */ SCM -scm_c_take_bytevector (signed char *contents, size_t len) +scm_c_take_bytevector (signed char *contents, size_t len, SCM parent) { - return make_bytevector_from_buffer (len, contents, SCM_ARRAY_ELEMENT_TYPE_VU8); + SCM ret; + + ret = make_bytevector_from_buffer (len, contents, SCM_ARRAY_ELEMENT_TYPE_VU8); + SCM_BYTEVECTOR_SET_PARENT (ret, parent); + + return ret; } SCM scm_c_take_typed_bytevector (signed char *contents, size_t len, - scm_t_array_element_type element_type) + scm_t_array_element_type element_type, SCM parent) { - return make_bytevector_from_buffer (len, contents, element_type); + SCM ret; + + ret = make_bytevector_from_buffer (len, contents, element_type); + SCM_BYTEVECTOR_SET_PARENT (ret, parent); + + return ret; } /* Shrink BV to C_NEW_LEN (which is assumed to be smaller than its current diff --git a/libguile/bytevectors.h b/libguile/bytevectors.h index 431b7dddd..4b775f244 100644 --- a/libguile/bytevectors.h +++ b/libguile/bytevectors.h @@ -1,7 +1,7 @@ #ifndef SCM_BYTEVECTORS_H #define SCM_BYTEVECTORS_H -/* Copyright (C) 2009 Free Software Foundation, Inc. +/* Copyright (C) 2009, 2011 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -28,12 +28,14 @@ /* The size in words of the bytevector header (type tag and flags, length, and pointer to the underlying buffer). */ -#define SCM_BYTEVECTOR_HEADER_SIZE 3U +#define SCM_BYTEVECTOR_HEADER_SIZE 4U #define SCM_BYTEVECTOR_LENGTH(_bv) \ ((size_t) SCM_CELL_WORD_1 (_bv)) #define SCM_BYTEVECTOR_CONTENTS(_bv) \ ((signed char *) SCM_CELL_WORD_2 (_bv)) +#define SCM_BYTEVECTOR_PARENT(_bv) \ + (SCM_CELL_OBJECT_3 (_bv)) SCM_API SCM scm_endianness_big; @@ -132,13 +134,13 @@ SCM_API SCM scm_utf32_to_string (SCM, SCM); SCM_INTERNAL SCM scm_i_make_typed_bytevector (size_t, scm_t_array_element_type); SCM_INTERNAL SCM scm_c_take_typed_bytevector (signed char *, size_t, - scm_t_array_element_type); + scm_t_array_element_type, SCM); SCM_INTERNAL void scm_bootstrap_bytevectors (void); SCM_INTERNAL void scm_init_bytevectors (void); SCM_INTERNAL SCM scm_i_native_endianness; -SCM_INTERNAL SCM scm_c_take_bytevector (signed char *, size_t); +SCM_INTERNAL SCM scm_c_take_bytevector (signed char *, size_t, SCM); SCM_INTERNAL int scm_i_print_bytevector (SCM, SCM, scm_print_state *); diff --git a/libguile/foreign.c b/libguile/foreign.c index 68e0efab5..e82a8c581 100644 --- a/libguile/foreign.c +++ b/libguile/foreign.c @@ -269,8 +269,8 @@ SCM_DEFINE (scm_pointer_to_bytevector, "pointer->bytevector", 2, 2, 0, blen = scm_to_size_t (len); - ret = scm_c_take_typed_bytevector (ptr + boffset, blen, btype); - register_weak_reference (ret, pointer); + ret = scm_c_take_typed_bytevector (ptr + boffset, blen, btype, pointer); + return ret; } #undef FUNC_NAME diff --git a/libguile/objcodes.c b/libguile/objcodes.c index 448badafb..bfa13bca9 100644 --- a/libguile/objcodes.c +++ b/libguile/objcodes.c @@ -308,17 +308,14 @@ SCM_DEFINE (scm_objcode_to_bytecode, "objcode->bytecode", 1, 0, 0, "") #define FUNC_NAME s_scm_objcode_to_bytecode { - scm_t_int8 *s8vector; scm_t_uint32 len; SCM_VALIDATE_OBJCODE (1, objcode); len = sizeof (struct scm_objcode) + SCM_OBJCODE_TOTAL_LEN (objcode); - s8vector = scm_malloc (len); - memcpy (s8vector, SCM_OBJCODE_DATA (objcode), len); - - return scm_c_take_bytevector (s8vector, len); + return scm_c_take_bytevector ((scm_t_int8*)SCM_OBJCODE_DATA (objcode), + len, objcode); } #undef FUNC_NAME diff --git a/libguile/r6rs-ports.c b/libguile/r6rs-ports.c index f45dfc1da..015e0b526 100644 --- a/libguile/r6rs-ports.c +++ b/libguile/r6rs-ports.c @@ -618,7 +618,8 @@ SCM_DEFINE (scm_get_bytevector_some, "get-bytevector-some", 1, 0, 0, c_len = (unsigned) c_total; } - result = scm_c_take_bytevector ((signed char *) c_bv, c_len); + result = scm_c_take_bytevector ((signed char *) c_bv, c_len, + SCM_BOOL_F); } return result; @@ -677,7 +678,8 @@ SCM_DEFINE (scm_get_bytevector_all, "get-bytevector-all", 1, 0, 0, c_len = (unsigned) c_total; } - result = scm_c_take_bytevector ((signed char *) c_bv, c_len); + result = scm_c_take_bytevector ((signed char *) c_bv, c_len, + SCM_BOOL_F); } return result; @@ -919,7 +921,7 @@ SCM_SMOB_APPLY (bytevector_output_port_procedure, bop_buffer_init (buf); if (result_buf.len == 0) - bv = scm_c_take_bytevector (NULL, 0); + bv = scm_c_take_bytevector (NULL, 0, SCM_BOOL_F); else { if (result_buf.total_len > result_buf.len) @@ -930,7 +932,7 @@ SCM_SMOB_APPLY (bytevector_output_port_procedure, SCM_GC_BOP); bv = scm_c_take_bytevector ((signed char *) result_buf.buffer, - result_buf.len); + result_buf.len, SCM_BOOL_F); } return bv; diff --git a/libguile/srfi-4.c b/libguile/srfi-4.c index af8126d03..ff0c414d7 100644 --- a/libguile/srfi-4.c +++ b/libguile/srfi-4.c @@ -1,6 +1,6 @@ /* srfi-4.c --- Uniform numeric vector datatypes. * - * Copyright (C) 2001, 2004, 2006, 2009, 2010 Free Software Foundation, Inc. + * Copyright (C) 2001, 2004, 2006, 2009, 2010, 2011 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -113,7 +113,8 @@ #define DEFINE_SRFI_4_C_FUNCS(TAG, tag, ctype, width) \ SCM scm_take_##tag##vector (ctype *data, size_t n) \ { \ - return scm_c_take_typed_bytevector ((scm_t_int8*)data, n, ETYPE (TAG)); \ + return scm_c_take_typed_bytevector ((scm_t_int8*)data, n, ETYPE (TAG), \ + SCM_BOOL_F); \ } \ const ctype* scm_array_handle_##tag##_elements (scm_t_array_handle *h) \ { \ diff --git a/libguile/strings.c b/libguile/strings.c index bf637041c..628dffd01 100644 --- a/libguile/strings.c +++ b/libguile/strings.c @@ -1489,7 +1489,7 @@ scm_from_stringn (const char *str, size_t len, const char *encoding, buf = scm_gc_malloc_pointerless (len, "bytevector"); memcpy (buf, str, len); - bv = scm_c_take_bytevector (buf, len); + bv = scm_c_take_bytevector (buf, len, SCM_BOOL_F); scm_decoding_error (__func__, errno, "input locale conversion error", bv); diff --git a/libguile/vm.c b/libguile/vm.c index e8f8ddf01..e9d96194c 100644 --- a/libguile/vm.c +++ b/libguile/vm.c @@ -390,7 +390,8 @@ really_make_boot_program (long nargs) bp->metalen = 0; u8vec = scm_c_take_bytevector ((scm_t_int8*)bp, - sizeof (struct scm_objcode) + sizeof (text)); + sizeof (struct scm_objcode) + sizeof (text), + SCM_BOOL_F); ret = scm_make_program (scm_bytecode_to_objcode (u8vec), SCM_BOOL_F, SCM_BOOL_F); SCM_SET_CELL_WORD_0 (ret, SCM_CELL_WORD_0 (ret) | SCM_F_PROGRAM_IS_BOOT); diff --git a/meta/Makefile.am b/meta/Makefile.am index fe4aeb419..6bc623efd 100644 --- a/meta/Makefile.am +++ b/meta/Makefile.am @@ -1,7 +1,7 @@ ## Process this file with Automake to create Makefile.in ## Jim Blandy <jimb@red-bean.com> --- September 1997 ## -## Copyright (C) 1998, 1999, 2001, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +## Copyright (C) 1998, 1999, 2001, 2006, 2007, 2008, 2009, 2011 Free Software Foundation, Inc. ## ## This file is part of GUILE. ## @@ -23,11 +23,11 @@ bin_SCRIPTS = guile-config guile-tools EXTRA_DIST= \ guile.m4 ChangeLog-2008 \ - guile-2.0.pc.in guile-2.0-uninstalled.pc.in \ + guile-2.2.pc.in guile-2.2-uninstalled.pc.in \ guile-tools.in guile-config.in pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = guile-2.0.pc +pkgconfig_DATA = guile-2.2.pc ## FIXME: in the future there will be direct automake support for ## doing this. When that happens, switch over. diff --git a/meta/guile-2.0-uninstalled.pc.in b/meta/guile-2.2-uninstalled.pc.in index 6d8c36b18..6d8c36b18 100644 --- a/meta/guile-2.0-uninstalled.pc.in +++ b/meta/guile-2.2-uninstalled.pc.in diff --git a/meta/guile-2.0.pc.in b/meta/guile-2.2.pc.in index ecca778e1..ecca778e1 100644 --- a/meta/guile-2.0.pc.in +++ b/meta/guile-2.2.pc.in diff --git a/meta/guile-config.in b/meta/guile-config.in index 0226f685e..b3e4c3d94 100755 --- a/meta/guile-config.in +++ b/meta/guile-config.in @@ -8,7 +8,7 @@ exec "@installed_guile@" -e main -s $0 "$@" ;;;; guile-config --- utility for linking programs with Guile ;;;; Jim Blandy <jim@red-bean.com> --- September 1997 ;;;; -;;;; Copyright (C) 1998, 2001, 2004, 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +;;;; Copyright (C) 1998, 2001, 2004, 2005, 2006, 2008, 2009, 2011 Free Software Foundation, Inc. ;;;; ;;;; This library is free software; you can redistribute it and/or ;;;; modify it under the terms of the GNU Lesser General Public @@ -77,7 +77,7 @@ exec "@installed_guile@" -e main -s $0 "$@" (dle " " p " --help - show usage info (this message)") (dle " " p " --help SUBCOMMAND - show help for SUBCOMMAND"))) -(define guile-module "guile-2.0") +(define guile-module "guile-2.2") (define (pkg-config . args) (let* ((real-args (cons %pkg-config-program args)) diff --git a/test-suite/tests/srfi-4.test b/test-suite/tests/srfi-4.test index fca065d55..3a0710222 100644 --- a/test-suite/tests/srfi-4.test +++ b/test-suite/tests/srfi-4.test @@ -477,4 +477,3 @@ (pass-if "+inf.0, -inf.0, +nan.0 in c64vector" (c64vector? #c64(+inf.0 -inf.0 +nan.0)))) - |