* tool/transcode-tblgen.rb: record infos and BYTE_LOOKUPs as index of
word_array to avoid relocation. * transcode.c (transcode_restartable0): add word_array to get infos and BYTE_LOOKUPs. * transcode_data.h (BYTE_LOOKUP_INFO): change return type to uintptr_t. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19045 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
3b090adf7c
commit
6058eeaf03
11
ChangeLog
11
ChangeLog
@ -1,3 +1,14 @@
|
|||||||
|
Tue Sep 2 03:04:33 2008 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
|
* tool/transcode-tblgen.rb: record infos and BYTE_LOOKUPs as index of
|
||||||
|
word_array to avoid relocation.
|
||||||
|
|
||||||
|
* transcode.c (transcode_restartable0): add word_array to get infos
|
||||||
|
and BYTE_LOOKUPs.
|
||||||
|
|
||||||
|
* transcode_data.h (BYTE_LOOKUP_INFO): change return type to
|
||||||
|
uintptr_t.
|
||||||
|
|
||||||
Tue Sep 2 02:48:30 2008 Tanaka Akira <akr@fsij.org>
|
Tue Sep 2 02:48:30 2008 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
* tool/transcode-tblgen.rb: don't need to cast offsets array.
|
* tool/transcode-tblgen.rb: don't need to cast offsets array.
|
||||||
|
@ -358,7 +358,7 @@ End
|
|||||||
|
|
||||||
size = words_code[/\[\d+\]/][1...-1].to_i
|
size = words_code[/\[\d+\]/][1...-1].to_i
|
||||||
words_code.sub!(/^(\};\n\z)/) {
|
words_code.sub!(/^(\};\n\z)/) {
|
||||||
"\#define #{infos_name} (((uintptr_t)word_array)+sizeof(uintptr_t)*#{size})\n" +
|
"\#define #{infos_name} (sizeof(uintptr_t)*#{size})\n" +
|
||||||
format_infos(infos) + "\n" +
|
format_infos(infos) + "\n" +
|
||||||
$1
|
$1
|
||||||
}
|
}
|
||||||
@ -368,7 +368,7 @@ End
|
|||||||
|
|
||||||
size = words_code[/\[\d+\]/][1...-1].to_i
|
size = words_code[/\[\d+\]/][1...-1].to_i
|
||||||
words_code.sub!(/^(\};\n\z)/) {
|
words_code.sub!(/^(\};\n\z)/) {
|
||||||
"\#define #{name} ((uintptr_t)(word_array+#{size}))\n" +
|
"\#define #{name} (sizeof(uintptr_t)*#{size})\n" +
|
||||||
<<"End" + "\n" + $1
|
<<"End" + "\n" + $1
|
||||||
#{offsets_name},
|
#{offsets_name},
|
||||||
#{infos_name},
|
#{infos_name},
|
||||||
|
@ -480,7 +480,7 @@ transcode_restartable0(const unsigned char **in_pos, unsigned char **out_pos,
|
|||||||
while (1) {
|
while (1) {
|
||||||
inchar_start = in_p;
|
inchar_start = in_p;
|
||||||
tc->recognized_len = 0;
|
tc->recognized_len = 0;
|
||||||
next_table = tr->conv_tree_start;
|
next_table = ((uintptr_t)tr->word_array) + tr->conv_tree_start;
|
||||||
|
|
||||||
SUSPEND_OUTPUT_FOLLOWED_BY_INPUT(24);
|
SUSPEND_OUTPUT_FOLLOWED_BY_INPUT(24);
|
||||||
|
|
||||||
@ -498,7 +498,8 @@ transcode_restartable0(const unsigned char **in_pos, unsigned char **out_pos,
|
|||||||
next_info = INVALID;
|
next_info = INVALID;
|
||||||
else {
|
else {
|
||||||
unsigned int next_offset = BL_BASE(next_table)[2+next_byte-BL_BASE(next_table)[0]];
|
unsigned int next_offset = BL_BASE(next_table)[2+next_byte-BL_BASE(next_table)[0]];
|
||||||
next_info = (VALUE)BYTE_LOOKUP_INFO(next_table)[next_offset];
|
#define BL_INFO(next_table) ((const struct byte_lookup *const *)(((uintptr_t)tr->word_array) + BYTE_LOOKUP_INFO(next_table)))
|
||||||
|
next_info = (VALUE)BL_INFO(next_table)[next_offset];
|
||||||
}
|
}
|
||||||
follow_info:
|
follow_info:
|
||||||
switch (next_info & 0x1F) {
|
switch (next_info & 0x1F) {
|
||||||
@ -514,7 +515,7 @@ transcode_restartable0(const unsigned char **in_pos, unsigned char **out_pos,
|
|||||||
SUSPEND(econv_source_buffer_empty, 5);
|
SUSPEND(econv_source_buffer_empty, 5);
|
||||||
}
|
}
|
||||||
next_byte = (unsigned char)*in_p++;
|
next_byte = (unsigned char)*in_p++;
|
||||||
next_table = next_info;
|
next_table = ((uintptr_t)tr->word_array) + next_info;
|
||||||
goto follow_byte;
|
goto follow_byte;
|
||||||
case ZERObt: /* drop input */
|
case ZERObt: /* drop input */
|
||||||
continue;
|
continue;
|
||||||
|
@ -19,7 +19,7 @@ typedef unsigned char base_element;
|
|||||||
typedef uintptr_t BYTE_LOOKUP[2];
|
typedef uintptr_t BYTE_LOOKUP[2];
|
||||||
|
|
||||||
#define BYTE_LOOKUP_BASE(bl) (((uintptr_t *)(bl))[0])
|
#define BYTE_LOOKUP_BASE(bl) (((uintptr_t *)(bl))[0])
|
||||||
#define BYTE_LOOKUP_INFO(bl) ((const struct byte_lookup *const *)(((uintptr_t *)(bl))[1]))
|
#define BYTE_LOOKUP_INFO(bl) (((uintptr_t *)(bl))[1])
|
||||||
|
|
||||||
#ifndef PType
|
#ifndef PType
|
||||||
/* data file needs to treat this as a pointer, to remove warnings */
|
/* data file needs to treat this as a pointer, to remove warnings */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user