1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-11 14:21:10 +02:00

Merge branch 'master' of git://git.savannah.gnu.org/guile into elisp

This commit is contained in:
Daniel Kraft 2009-08-04 09:37:50 +02:00
commit 157ffbd797
6 changed files with 74 additions and 73 deletions

15
NEWS
View file

@ -8,6 +8,21 @@ Please send Guile bug reports to bug-guile@gnu.org.
(During the 1.9 series, we will keep an incremental NEWS for the latest (During the 1.9 series, we will keep an incremental NEWS for the latest
prerelease, and a full NEWS corresponding to 1.8 -> 2.0.) prerelease, and a full NEWS corresponding to 1.8 -> 2.0.)
Changes in 1.9.2 (since the 1.9.1 prerelease):
** Global variables `scm_charnames' and `scm_charnums' are removed.
These variables contained the names of control characters and were
used when writing characters. While these were global, they were
never intended to be public API. They have been replaced with private
functions.
** EBCDIC support is removed.
There was an EBCDIC compile flag that altered some of the character
processing. It appeared that full EBCDIC support was never completed
and was unmaintained.
Changes in 1.9.1 (since the 1.9.0 prerelease): Changes in 1.9.1 (since the 1.9.0 prerelease):
** `scm_set_port_seek' and `scm_set_port_truncate' use the `scm_t_off' type ** `scm_set_port_seek' and `scm_set_port_truncate' use the `scm_t_off' type

View file

@ -312,51 +312,45 @@ scm_c_downcase (scm_t_wchar c)
extensions for control characters, and leftover Guile extensions. extensions for control characters, and leftover Guile extensions.
They are listed in order of precedence. */ They are listed in order of precedence. */
const char *const scm_r5rs_charnames[] = static const char *const scm_r5rs_charnames[] = {
{ "space", "newline"
"space", "newline" };
};
const scm_t_uint32 const scm_r5rs_charnums[] = static const scm_t_uint32 const scm_r5rs_charnums[] = {
{ 0x20, 0x0A
0x20, 0x0A };
};
const int scm_n_r5rs_charnames = sizeof (scm_r5rs_charnames) / sizeof (char *); #define SCM_N_R5RS_CHARNAMES (sizeof (scm_r5rs_charnames) / sizeof (char *))
/* The abbreviated names for control characters. */ /* The abbreviated names for control characters. */
const char *const scm_C0_control_charnames[] = static const char *const scm_C0_control_charnames[] = {
{ /* C0 controls */
/* C0 controls */ "nul", "soh", "stx", "etx", "eot", "enq", "ack", "bel",
"nul", "soh", "stx", "etx", "eot", "enq", "ack", "bel", "bs", "ht", "lf", "vt", "ff", "cr", "so", "si",
"bs", "ht", "lf", "vt", "ff", "cr", "so", "si", "dle", "dc1", "dc2", "dc3", "dc4", "nak", "syn", "etb",
"dle", "dc1", "dc2", "dc3", "dc4", "nak", "syn", "etb", "can", "em", "sub", "esc", "fs", "gs", "rs", "us",
"can", "em", "sub", "esc", "fs", "gs", "rs", "us", "sp", "del"
"sp", "del" };
};
const scm_t_uint32 const scm_C0_control_charnums[] = static const scm_t_uint32 const scm_C0_control_charnums[] = {
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x7f
0x20, 0x7f };
};
int scm_n_C0_control_charnames = sizeof (scm_C0_control_charnames) / sizeof (char *); #define SCM_N_C0_CONTROL_CHARNAMES (sizeof (scm_C0_control_charnames) / sizeof (char *))
const char *const scm_alt_charnames[] = static const char *const scm_alt_charnames[] = {
{ "null", "backspace", "tab", "nl", "newline", "np", "page", "return",
"null", "backspace", "tab", "nl", "newline", "np", "page", "return", };
};
const scm_t_uint32 const scm_alt_charnums[] =
{
0x00, 0x08, 0x09, 0x0a, 0x0a, 0x0c, 0x0c, 0x0d
};
const int scm_n_alt_charnames = sizeof (scm_alt_charnames) / sizeof (char *); static const scm_t_uint32 const scm_alt_charnums[] = {
0x00, 0x08, 0x09, 0x0a, 0x0a, 0x0c, 0x0c, 0x0d
};
#define SCM_N_ALT_CHARNAMES (sizeof (scm_alt_charnames) / sizeof (char *))
/* Returns the string charname for a character if it exists, or NULL /* Returns the string charname for a character if it exists, or NULL
otherwise. */ otherwise. */
@ -366,15 +360,15 @@ scm_i_charname (SCM chr)
int c; int c;
scm_t_uint32 i = SCM_CHAR (chr); scm_t_uint32 i = SCM_CHAR (chr);
for (c = 0; c < scm_n_r5rs_charnames; c++) for (c = 0; c < SCM_N_R5RS_CHARNAMES; c++)
if (scm_r5rs_charnums[c] == i) if (scm_r5rs_charnums[c] == i)
return scm_r5rs_charnames[c]; return scm_r5rs_charnames[c];
for (c = 0; c < scm_n_C0_control_charnames; c++) for (c = 0; c < SCM_N_C0_CONTROL_CHARNAMES; c++)
if (scm_C0_control_charnums[c] == i) if (scm_C0_control_charnums[c] == i)
return scm_C0_control_charnames[c]; return scm_C0_control_charnames[c];
for (c = 0; c < scm_n_alt_charnames; c++) for (c = 0; c < SCM_N_ALT_CHARNAMES; c++)
if (scm_alt_charnums[c] == i) if (scm_alt_charnums[c] == i)
return scm_alt_charnames[i]; return scm_alt_charnames[i];
@ -389,23 +383,23 @@ scm_i_charname_to_char (const char *charname, size_t charname_len)
/* The R5RS charnames. These are supposed to be case /* The R5RS charnames. These are supposed to be case
insensitive. */ insensitive. */
for (c = 0; c < scm_n_r5rs_charnames; c++) for (c = 0; c < SCM_N_R5RS_CHARNAMES; c++)
if ((strlen (scm_r5rs_charnames[c]) == charname_len) if ((strlen (scm_r5rs_charnames[c]) == charname_len)
&& (!strncasecmp (scm_r5rs_charnames[c], charname, charname_len))) && (!strncasecmp (scm_r5rs_charnames[c], charname, charname_len)))
return SCM_MAKE_CHAR (scm_r5rs_charnums[c]); return SCM_MAKE_CHAR (scm_r5rs_charnums[c]);
/* Then come the controls. These are not case sensitive. */ /* Then come the controls. These are not case sensitive. */
for (c = 0; c < scm_n_C0_control_charnames; c++) for (c = 0; c < SCM_N_C0_CONTROL_CHARNAMES; c++)
if ((strlen (scm_C0_control_charnames[c]) == charname_len) if ((strlen (scm_C0_control_charnames[c]) == charname_len)
&& (!strncasecmp (scm_C0_control_charnames[c], charname, charname_len))) && (!strncasecmp (scm_C0_control_charnames[c], charname, charname_len)))
return SCM_MAKE_CHAR (scm_C0_control_charnums[c]); return SCM_MAKE_CHAR (scm_C0_control_charnums[c]);
/* Lastly are some old names carried over for compatibility. */ /* Lastly are some old names carried over for compatibility. */
for (c = 0; c < scm_n_alt_charnames; c++) for (c = 0; c < SCM_N_ALT_CHARNAMES; c++)
if ((strlen (scm_alt_charnames[c]) == charname_len) if ((strlen (scm_alt_charnames[c]) == charname_len)
&& (!strncasecmp (scm_alt_charnames[c], charname, charname_len))) && (!strncasecmp (scm_alt_charnames[c], charname, charname_len)))
return SCM_MAKE_CHAR (scm_alt_charnums[c]); return SCM_MAKE_CHAR (scm_alt_charnums[c]);
return SCM_BOOL_F; return SCM_BOOL_F;
} }

View file

@ -24,28 +24,23 @@
#include "libguile/__scm.h" #include "libguile/__scm.h"
#include "libguile/numbers.h"
/* Immediate Characters /* Immediate Characters
*/ */
#ifndef SCM_WCHAR_DEFINED
typedef scm_t_int32 scm_t_wchar;
#define SCM_WCHAR_DEFINED
#endif
#define SCM_CHARP(x) (SCM_ITAG8(x) == scm_tc8_char) #define SCM_CHARP(x) (SCM_ITAG8(x) == scm_tc8_char)
#define SCM_CHAR(x) ((scm_t_wchar)SCM_ITAG8_DATA(x)) #define SCM_CHAR(x) ((scm_t_wchar)SCM_ITAG8_DATA(x))
#define SCM_MAKE_CHAR(x) ({scm_t_int32 _x = (x); \ #define SCM_MAKE_CHAR(x) \
_x < 0 \ (x < 0 \
? SCM_MAKE_ITAG8((scm_t_bits)(unsigned char)_x, scm_tc8_char) \ ? SCM_MAKE_ITAG8 ((scm_t_bits) (unsigned char) x, scm_tc8_char) \
: SCM_MAKE_ITAG8((scm_t_bits)_x, scm_tc8_char);}) : SCM_MAKE_ITAG8 ((scm_t_bits) x, scm_tc8_char))
#define SCM_CODEPOINT_MAX (0x10ffff) #define SCM_CODEPOINT_MAX (0x10ffff)
#define SCM_IS_UNICODE_CHAR(c) \ #define SCM_IS_UNICODE_CHAR(c) \
((scm_t_wchar)(c)<=0xd7ff || \ ((scm_t_wchar) (c) <= 0xd7ff \
((scm_t_wchar)(c)>=0xe000 && (scm_t_wchar)(c)<=SCM_CODEPOINT_MAX)) || ((scm_t_wchar) (c) >= 0xe000 && (scm_t_wchar) (c) <= SCM_CODEPOINT_MAX))

View file

@ -174,10 +174,7 @@ typedef struct scm_t_complex
double imag; double imag;
} scm_t_complex; } scm_t_complex;
#ifndef SCM_WCHAR_DEFINED
typedef scm_t_int32 scm_t_wchar; typedef scm_t_int32 scm_t_wchar;
#define SCM_WCHAR_DEFINED
#endif

View file

@ -454,22 +454,16 @@ iprin1 (SCM exp, SCM port, scm_print_state *pstate)
/* Print the character if is graphic character. */ /* Print the character if is graphic character. */
{ {
if (i<256) if (i<256)
{ /* Character is graphic. Print it. */
/* Character is graphic. Print it. */ scm_putc (i, port);
scm_putc (i, port);
}
else else
{ /* Character is graphic but unrepresentable in
/* Character is graphic but unrepresentable in this port's encoding. */
this port's encoding. */ scm_intprint (i, 8, port);
scm_intprint (i, 8, port);
}
} }
else else
{ /* Character is a non-graphical character. */
/* Character is a non-graphical character. */ scm_intprint (i, 8, port);
scm_intprint (i, 8, port);
}
} }
else else
scm_putc (i, port); scm_putc (i, port);

View file

@ -177,7 +177,13 @@ VM_DEFINE_INSTRUCTION (15, make_uint64, "make-uint64", 8, 0, 1)
VM_DEFINE_INSTRUCTION (16, make_char8, "make-char8", 1, 0, 1) VM_DEFINE_INSTRUCTION (16, make_char8, "make-char8", 1, 0, 1)
{ {
PUSH (SCM_MAKE_CHAR (FETCH ())); scm_t_uint8 v = 0;
v = FETCH ();
PUSH (SCM_MAKE_CHAR (v));
/* Don't simplify this to PUSH (SCM_MAKE_CHAR (FETCH ())). The
contents of SCM_MAKE_CHAR may be evaluated more than once,
resulting in a double fetch. */
NEXT; NEXT;
} }