mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-03 13:20:26 +02:00
* num2integral.i.c (NUM2INTEGRAL): Report an error when these
routines are passed an inexact. This change in behavior is motivated by concordance with R5RS: It is more common that a primitive doesn't want to accept an inexact for an exact.
This commit is contained in:
parent
5a7f98d1ef
commit
e45b0d385c
3 changed files with 24 additions and 10 deletions
10
NEWS
10
NEWS
|
@ -1185,13 +1185,21 @@ intended to be used in user code. You should avoid dealing with
|
||||||
bignums directly, and should deal with numbers in general (which can
|
bignums directly, and should deal with numbers in general (which can
|
||||||
be bignums).
|
be bignums).
|
||||||
|
|
||||||
|
** Change in behavior: scm_num2long, scm_num2ulong
|
||||||
|
|
||||||
|
The scm_num2[u]long functions don't any longer accept an inexact
|
||||||
|
argument. This change in behavior is motivated by concordance with
|
||||||
|
R5RS: It is more common that a primitive doesn't want to accept an
|
||||||
|
inexact for an exact.
|
||||||
|
|
||||||
** New functions: scm_short2num, scm_ushort2num, scm_int2num,
|
** New functions: scm_short2num, scm_ushort2num, scm_int2num,
|
||||||
scm_uint2num, scm_size2num, scm_ptrdiff2num, scm_num2short,
|
scm_uint2num, scm_size2num, scm_ptrdiff2num, scm_num2short,
|
||||||
scm_num2ushort, scm_num2int, scm_num2uint, scm_num2ptrdiff,
|
scm_num2ushort, scm_num2int, scm_num2uint, scm_num2ptrdiff,
|
||||||
scm_num2size.
|
scm_num2size.
|
||||||
|
|
||||||
These are conversion functions between the various ANSI C integral
|
These are conversion functions between the various ANSI C integral
|
||||||
types and Scheme numbers.
|
types and Scheme numbers. NOTE: The scm_num2xxx functions don't
|
||||||
|
accept an inexact argument.
|
||||||
|
|
||||||
** New number validation macros:
|
** New number validation macros:
|
||||||
SCM_NUM2{SIZE,PTRDIFF,SHORT,USHORT,INT,UINT}[_DEF]
|
SCM_NUM2{SIZE,PTRDIFF,SHORT,USHORT,INT,UINT}[_DEF]
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
2001-09-20 Mikael Djurfeldt <mdj@linnaeus>
|
||||||
|
|
||||||
|
* num2integral.i.c (NUM2INTEGRAL): Report an error when these
|
||||||
|
routines are passed an inexact. This change in behavior is
|
||||||
|
motivated by concordance with R5RS: It is more common that a
|
||||||
|
primitive doesn't want to accept an inexact for an exact.
|
||||||
|
|
||||||
2001-09-17 Dirk Herrmann <D.Herrmann@tu-bs.de>
|
2001-09-17 Dirk Herrmann <D.Herrmann@tu-bs.de>
|
||||||
|
|
||||||
The following patch partially undoes my patch from 2001-06-30,
|
The following patch partially undoes my patch from 2001-06-30,
|
||||||
|
|
|
@ -70,15 +70,14 @@ NUM2INTEGRAL (SCM num, unsigned long int pos, const char *s_caller)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
else if (SCM_REALP (num))
|
else if (SCM_REALP (num))
|
||||||
{ /* inexact */
|
/* Temporary special treatment of this case since behavior has changed */
|
||||||
|
scm_error (scm_arg_type_key,
|
||||||
double u = SCM_REAL_VALUE (num);
|
s_caller,
|
||||||
ITYPE res = u;
|
(pos == 0) ? "Wrong type (inexact) argument: ~S"
|
||||||
if ((double) res == u)
|
: "Wrong type (inexact) argument in position ~A: ~S",
|
||||||
return res;
|
(pos == 0) ? scm_list_1 (num)
|
||||||
else
|
: scm_list_2 (SCM_MAKINUM (pos), num),
|
||||||
scm_out_of_range (s_caller, num);
|
SCM_BOOL_F);
|
||||||
}
|
|
||||||
else
|
else
|
||||||
scm_wrong_type_arg (s_caller, pos, num);
|
scm_wrong_type_arg (s_caller, pos, num);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue