1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* transcode_data.h (BYTE_LOOKUP): change to uintptr_t array.

(BYTE_LOOKUP_BASE): follow the type change.
  (BYTE_LOOKUP_INFO): ditto.
  (PType): ditto.
  (rb_transcoding): ditto.

* tool/transcode-tblgen.rb: follow the type change.

* transcode.c: ditto.

* enc/trans/newline.trans: ditto.

* enc/trans/iso2022.trans: ditto.

* enc/trans/utf_16_32.trans: ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19038 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
akr 2008-09-01 16:22:49 +00:00
parent 2ae7b0328e
commit 752e053a1d
7 changed files with 54 additions and 37 deletions

View file

@ -1,3 +1,21 @@
Tue Sep 2 01:19:15 2008 Tanaka Akira <akr@fsij.org>
* transcode_data.h (BYTE_LOOKUP): change to uintptr_t array.
(BYTE_LOOKUP_BASE): follow the type change.
(BYTE_LOOKUP_INFO): ditto.
(PType): ditto.
(rb_transcoding): ditto.
* tool/transcode-tblgen.rb: follow the type change.
* transcode.c: ditto.
* enc/trans/newline.trans: ditto.
* enc/trans/iso2022.trans: ditto.
* enc/trans/utf_16_32.trans: ditto.
Mon Sep 1 23:32:46 2008 Tanaka Akira <akr@fsij.org>
* transcode_data.h (BYTE_LOOKUP_BASE): abstract accessor for

View file

@ -33,7 +33,7 @@ fun_si_iso2022jp_to_eucjp(rb_transcoding* t, const unsigned char* s, size_t l)
if (t->stateful[0] == 0)
return (VALUE)NOMAP;
else if (0x21 <= s[0] && s[0] <= 0x7e)
return (VALUE)&iso2022jp_to_eucjp_jisx0208_rest;
return (VALUE)iso2022jp_to_eucjp_jisx0208_rest;
else
return (VALUE)INVALID;
}
@ -69,7 +69,7 @@ fun_so_iso2022jp_to_eucjp(rb_transcoding* t, const unsigned char* s, size_t l, u
static const rb_transcoder
rb_ISO_2022_JP_to_EUC_JP = {
"ISO-2022-JP", "EUC-JP", &iso2022jp_to_eucjp,
"ISO-2022-JP", "EUC-JP", iso2022jp_to_eucjp,
1, /* input_unit_length */
3, /* max_input */
3, /* max_output */
@ -141,7 +141,7 @@ finish_eucjp_to_iso2022jp(rb_transcoding *t, unsigned char *o)
static const rb_transcoder
rb_EUC_JP_to_ISO_2022_JP = {
"EUC-JP", "ISO-2022-JP", &eucjp_to_iso2022jp,
"EUC-JP", "ISO-2022-JP", eucjp_to_iso2022jp,
1, /* input_unit_length */
3, /* max_input */
5, /* max_output */

View file

@ -54,7 +54,7 @@ fun_so_universal_newline(rb_transcoding* t, const unsigned char* s, size_t l, un
static const rb_transcoder
rb_universal_newline = {
"universal_newline", "", &universal_newline,
"universal_newline", "", universal_newline,
1, /* input_unit_length */
1, /* max_input */
1, /* max_output */
@ -64,7 +64,7 @@ rb_universal_newline = {
static const rb_transcoder
rb_crlf_newline = {
"", "crlf_newline", &crlf_newline,
"", "crlf_newline", crlf_newline,
1, /* input_unit_length */
1, /* max_input */
2, /* max_output */
@ -74,7 +74,7 @@ rb_crlf_newline = {
static const rb_transcoder
rb_cr_newline = {
"", "cr_newline", &cr_newline,
"", "cr_newline", cr_newline,
1, /* input_unit_length */
1, /* max_input */
1, /* max_output */

View file

@ -261,82 +261,82 @@ fun_so_to_utf_32le(rb_transcoding* t, const unsigned char* s, size_t l, unsigned
static const rb_transcoder
rb_from_UTF_16BE = {
"UTF-16BE", "UTF-8", &from_UTF_16BE,
"UTF-16BE", "UTF-8", from_UTF_16BE,
2, /* input_unit_length */
4, /* max_input */
4, /* max_output */
stateless_converter, /* stateful_type */
NULL, NULL, NULL, &fun_so_from_utf_16be
NULL, NULL, NULL, fun_so_from_utf_16be
};
static const rb_transcoder
rb_to_UTF_16BE = {
"UTF-8", "UTF-16BE", &to_UTF_16BE,
"UTF-8", "UTF-16BE", to_UTF_16BE,
1, /* input_unit_length */
4, /* max_input */
4, /* max_output */
stateless_converter, /* stateful_type */
NULL, NULL, NULL, &fun_so_to_utf_16be
NULL, NULL, NULL, fun_so_to_utf_16be
};
static const rb_transcoder
rb_from_UTF_16LE = {
"UTF-16LE", "UTF-8", &from_UTF_16LE,
"UTF-16LE", "UTF-8", from_UTF_16LE,
2, /* input_unit_length */
4, /* max_input */
4, /* max_output */
stateless_converter, /* stateful_type */
NULL, NULL, NULL, &fun_so_from_utf_16le
NULL, NULL, NULL, fun_so_from_utf_16le
};
static const rb_transcoder
rb_to_UTF_16LE = {
"UTF-8", "UTF-16LE", &to_UTF_16BE,
"UTF-8", "UTF-16LE", to_UTF_16BE,
1, /* input_unit_length */
4, /* max_input */
4, /* max_output */
stateless_converter, /* stateful_type */
NULL, NULL, NULL, &fun_so_to_utf_16le
NULL, NULL, NULL, fun_so_to_utf_16le
};
static const rb_transcoder
rb_from_UTF_32BE = {
"UTF-32BE", "UTF-8", &from_UTF_32BE,
"UTF-32BE", "UTF-8", from_UTF_32BE,
4, /* input_unit_length */
4, /* max_input */
4, /* max_output */
stateless_converter, /* stateful_type */
NULL, NULL, NULL, &fun_so_from_utf_32be
NULL, NULL, NULL, fun_so_from_utf_32be
};
static const rb_transcoder
rb_to_UTF_32BE = {
"UTF-8", "UTF-32BE", &to_UTF_16BE,
"UTF-8", "UTF-32BE", to_UTF_16BE,
1, /* input_unit_length */
4, /* max_input */
4, /* max_output */
stateless_converter, /* stateful_type */
NULL, NULL, NULL, &fun_so_to_utf_32be
NULL, NULL, NULL, fun_so_to_utf_32be
};
static const rb_transcoder
rb_from_UTF_32LE = {
"UTF-32LE", "UTF-8", &from_UTF_32LE,
"UTF-32LE", "UTF-8", from_UTF_32LE,
4, /* input_unit_length */
4, /* max_input */
4, /* max_output */
stateless_converter, /* stateful_type */
NULL, NULL, NULL, &fun_so_from_utf_32le
NULL, NULL, NULL, fun_so_from_utf_32le
};
static const rb_transcoder
rb_to_UTF_32LE = {
"UTF-8", "UTF-32LE", &to_UTF_16BE,
"UTF-8", "UTF-32LE", to_UTF_16BE,
1, /* input_unit_length */
4, /* max_input */
4, /* max_output */
stateless_converter, /* stateful_type */
NULL, NULL, NULL, &fun_so_to_utf_32le
NULL, NULL, NULL, fun_so_to_utf_32le
};
void

View file

@ -273,7 +273,7 @@ class ActionMap
"o3(0x#$1,0x#$2,0x#$3)"
when /\A([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])\z/i
"o4(0x#$1,0x#$2,0x#$3,0x#$4)"
when /\A&/ # pointer to BYTE_LOOKUP structure
when /\A\/\*BYTE_LOOKUP\*\// # pointer to BYTE_LOOKUP structure
info.to_s
else
raise "unexpected action: #{info.inspect}"
@ -347,8 +347,9 @@ End
else
infos_name = "#{name}_infos"
infos_code = <<"End"
static const struct byte_lookup* const
static const uintptr_t
#{infos_name}[#{infos.length}] = #{format_infos(infos)};
\#define #{infos_name} ((uintptr_t)#{infos_name})
End
InfosMemo[infos] = infos_name
end
@ -356,9 +357,10 @@ End
r = infos_code + <<"End"
static const BYTE_LOOKUP
#{name} = {
#{offsets_name},
(uintptr_t)#{offsets_name},
#{infos_name}
};
\#define #{name} ((uintptr_t)#{name})
End
words_code << r
@ -380,7 +382,7 @@ End
else
name_hint2 = nil
name_hint2 = "#{name_hint}_#{'%02X' % byte}" if name_hint
table[byte] = "&" + rest.generate_node(bytes_code, words_code, name_hint2, rest_valid_encoding)
table[byte] = "/*BYTE_LOOKUP*/" + rest.generate_node(bytes_code, words_code, name_hint2, rest_valid_encoding)
end
}
@ -572,7 +574,7 @@ def transcode_tblgen(from, to, map)
transcoder_code = <<"End"
static const rb_transcoder
#{transcoder_name} = {
#{c_esc from}, #{c_esc to}, &#{real_tree_name},
#{c_esc from}, #{c_esc to}, #{real_tree_name},
#{input_unit_length}, /* input_unit_length */
#{max_input}, /* max_input */
#{max_output}, /* max_output */

View file

@ -513,7 +513,7 @@ transcode_restartable0(const unsigned char **in_pos, unsigned char **out_pos,
SUSPEND(econv_source_buffer_empty, 5);
}
next_byte = (unsigned char)*in_p++;
next_table = (const BYTE_LOOKUP *)next_info;
next_table = next_info;
goto follow_byte;
case ZERObt: /* drop input */
continue;

View file

@ -16,17 +16,14 @@
typedef unsigned char base_element;
typedef struct byte_lookup {
const base_element *base;
const struct byte_lookup *const *info;
} BYTE_LOOKUP;
typedef uintptr_t BYTE_LOOKUP[2];
#define BYTE_LOOKUP_BASE(bl) ((bl)->base)
#define BYTE_LOOKUP_INFO(bl) ((bl)->info)
#define BYTE_LOOKUP_BASE(bl) ((const base_element *)(((uintptr_t *)(bl))[0]))
#define BYTE_LOOKUP_INFO(bl) ((const struct byte_lookup *const *)(((uintptr_t *)(bl))[1]))
#ifndef PType
/* data file needs to treat this as a pointer, to remove warnings */
#define PType (const BYTE_LOOKUP *)
#define PType (uintptr_t)
#endif
#define NOMAP (PType 0x01) /* single byte direct map */
@ -76,7 +73,7 @@ typedef struct rb_transcoding {
int flags;
int resume_position;
const BYTE_LOOKUP *next_table;
uintptr_t next_table;
VALUE next_info;
unsigned char next_byte;
@ -109,7 +106,7 @@ typedef struct rb_transcoding {
struct rb_transcoder {
const char *from_encoding;
const char *to_encoding;
const BYTE_LOOKUP *conv_tree_start;
uintptr_t conv_tree_start;
int input_unit_length;
int max_input;
int max_output;