From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: ludovic.courtes@laas.fr (Ludovic =?iso-8859-1?Q?Court=E8s?=) Newsgroups: gmane.lisp.guile.devel Subject: Re: Exposing `scm_i_mem2number ()' Date: Thu, 16 Feb 2006 14:35:36 +0100 Organization: LAAS-CNRS Message-ID: <87zmkrfmtz.fsf@laas.fr> References: <87d5holin9.fsf@laas.fr> <874q30z3nr.fsf@zagadka.de> NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable X-Trace: sea.gmane.org 1140116504 5036 80.91.229.2 (16 Feb 2006 19:01:44 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Thu, 16 Feb 2006 19:01:44 +0000 (UTC) Cc: guile-devel@gnu.org Original-X-From: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Thu Feb 16 20:01:43 2006 Return-path: Envelope-to: guile-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1F9oNW-0003dt-6c for guile-devel@m.gmane.org; Thu, 16 Feb 2006 20:01:22 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1F9oBX-0006L7-BW for guile-devel@m.gmane.org; Thu, 16 Feb 2006 13:48:59 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1F9jw8-0008UL-Rw for guile-devel@gnu.org; Thu, 16 Feb 2006 09:16:49 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1F9jp9-0006LN-GC for guile-devel@gnu.org; Thu, 16 Feb 2006 09:09:44 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1F9jIp-0006jo-T1 for guile-devel@gnu.org; Thu, 16 Feb 2006 08:36:13 -0500 Original-Received: from [140.93.0.15] (helo=laas.laas.fr) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA:32) (Exim 4.52) id 1F9jNx-0006Oi-TW for guile-devel@gnu.org; Thu, 16 Feb 2006 08:41:30 -0500 Original-Received: by laas.laas.fr (8.13.1/8.13.4) with SMTP id k1GDa6rE008047; Thu, 16 Feb 2006 14:36:09 +0100 (CET) Original-To: Marius Vollmer X-URL: http://www.laas.fr/~lcourtes/ X-Revolutionary-Date: 28 =?iso-8859-1?Q?Pluvi=F4se?= an 214 de la =?iso-8859-1?Q?R=E9volution?= X-PGP-Key-ID: 0xEB1F5364 X-PGP-Key: http://www.laas.fr/~lcourtes/ludovic.asc X-PGP-Fingerprint: 821D 815D 902A 7EAB 5CEE D120 7FBA 3D4F EB1F 5364 X-OS: powerpc-unknown-linux-gnu Mail-Followup-To: Marius Vollmer , guile-devel@gnu.org In-Reply-To: <874q30z3nr.fsf@zagadka.de> (Marius Vollmer's message of "Wed, 15 Feb 2006 23:57:12 +0200") User-Agent: Gnus/5.110004 (No Gnus v0.4) Emacs/21.4 (gnu/linux) X-Spam-Score: 0 () X-Scanned-By: MIMEDefang at CNRS-LAAS X-MIME-Autoconverted: from 8bit to quoted-printable by laas.laas.fr id k1GDa6rE008047 X-BeenThere: guile-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Developers list for Guile, the GNU extensibility library" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Errors-To: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.devel:5723 Archived-At: Hello, Marius Vollmer writes: > I'd make it the number of octets, to remain in sync with > scm_from_locale_stringn, etc. Right. Below is a patch that does this. > But, what about scm_string_to_number (scm_from_locale_string (...))? > Isn't that good enough? Using the C variant, you can save the creation and bookkeeping of two Scheme objects[*]. Since we do have the C variant anyway, I think it's better to expose it if doing so does not preclude future changes in the implementation. Thanks, Ludovic. [*] On that topic, see also: http://lists.gnu.org/archive/html/guile-devel/2005-12/msg00093.html . libguile/ 2006-02-16 Ludovic Court=E8s * numbers.c (scm_i_mem2number): Renamed to `scm_c_locale_string_to_number ()'. Updated callers. =20 * numbers.h: Updated function declaration. * print.c: Updated callers. * read.c: Likewise. doc/ref/ 2006-02-16 Ludovic Court=E8s * api-data.texi (Conversion): Documented `scm_c_locale_string_to_number ()'. --- orig/doc/ref/api-data.texi +++ mod/doc/ref/api-data.texi @@ -1031,6 +1031,12 @@ @code{string->number} returns @code{#f}. @end deffn =20 +@deffn {C Function} scm_c_locale_string_to_number (string, len, radix) +Like @code{scm_string_to_number ()}, return a number (a Scheme object) +whose representation is expressed by the given C string @var{string} +of size @var{len} octets (@var{string} does not need to be +null-terminated). @var{radix} must be of type @code{unsigned int}. +@end deffn =20 @node Complex @subsubsection Complex Number Operations --- orig/libguile/numbers.c +++ mod/libguile/numbers.c @@ -2937,7 +2937,8 @@ enum t_radix {NO_RADIX=3D0, DUAL=3D2, OCT=3D8, DEC=3D10, HEX=3D16}; =20 SCM -scm_i_mem2number (const char* mem, size_t len, unsigned int default_radi= x) +scm_c_locale_string_to_number (const char* mem, size_t len, + unsigned int default_radix) { unsigned int idx =3D 0; unsigned int radix =3D NO_RADIX; @@ -3043,9 +3044,9 @@ else base =3D scm_to_unsigned_integer (radix, 2, INT_MAX); =20 - answer =3D scm_i_mem2number (scm_i_string_chars (string), - scm_i_string_length (string), - base); + answer =3D scm_c_locale_string_to_number (scm_i_string_chars (string), + scm_i_string_length (string), + base); scm_remember_upto_here_1 (string); return answer; } --- orig/libguile/numbers.h +++ mod/libguile/numbers.h @@ -215,7 +215,8 @@ SCM_API int scm_print_real (SCM sexp, SCM port, scm_print_state *pstate)= ; SCM_API int scm_print_complex (SCM sexp, SCM port, scm_print_state *psta= te); SCM_API int scm_bigprint (SCM exp, SCM port, scm_print_state *pstate); -SCM_API SCM scm_i_mem2number (const char *mem, size_t len, unsigned int = radix); +SCM_API SCM scm_c_locale_string_to_number (const char *mem, size_t len, + unsigned int radix); SCM_API SCM scm_string_to_number (SCM str, SCM radix); SCM_API SCM scm_bigequal (SCM x, SCM y); SCM_API SCM scm_real_equalp (SCM x, SCM y); --- orig/libguile/print.c +++ mod/libguile/print.c @@ -327,7 +327,7 @@ if (len =3D=3D 0 || str[0] =3D=3D '\'' || str[0] =3D=3D '`' || str[0] = =3D=3D ',' || quote_keywordish_symbol (str, len) || (str[0] =3D=3D '.' && len =3D=3D 1) - || scm_is_true (scm_i_mem2number(str, len, 10))) + || scm_is_true (scm_c_locale_string_to_number (str, len, 10))) { scm_lfwrite ("#{", 2, port); weird =3D 1; --- orig/libguile/read.c +++ mod/libguile/read.c @@ -506,7 +506,8 @@ * does only consist of octal digits. Finally, it should be * checked whether the resulting fixnum is in the range of * characters. */ - p =3D scm_i_mem2number (scm_i_string_chars (*tok_buf), j, 8); + p =3D scm_c_locale_string_to_number (scm_i_string_chars (*tok_buf= ), + j, 8); if (SCM_I_INUMP (p)) return SCM_MAKE_CHAR (SCM_I_INUM (p)); } @@ -644,7 +645,7 @@ /* Shortcut: Detected symbol '+ or '- */ goto tok; =20 - p =3D scm_i_mem2number (scm_i_string_chars (*tok_buf), j, 10); + p =3D scm_c_locale_string_to_number (scm_i_string_chars (*tok_buf)= , j, 10); if (scm_is_true (p)) return p; if (c =3D=3D '#') _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://lists.gnu.org/mailman/listinfo/guile-devel