aboutsummaryrefslogtreecommitdiffstats
path: root/transcode.c
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-09-01 18:06:28 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-09-01 18:06:28 +0000
commit6058eeaf0360cd5e56106db1f360a7edf3c91f1a (patch)
treeff1f9409bc8036390b592f1172fc3bae3ee79898 /transcode.c
parent3b090adf7c3e95997630e36074f621cc3fbc96f9 (diff)
downloadruby-6058eeaf0360cd5e56106db1f360a7edf3c91f1a.tar.gz
* 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
Diffstat (limited to 'transcode.c')
-rw-r--r--transcode.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/transcode.c b/transcode.c
index bc1597e5b0..add97c9695 100644
--- a/transcode.c
+++ b/transcode.c
@@ -480,7 +480,7 @@ transcode_restartable0(const unsigned char **in_pos, unsigned char **out_pos,
while (1) {
inchar_start = in_p;
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);
@@ -498,7 +498,8 @@ transcode_restartable0(const unsigned char **in_pos, unsigned char **out_pos,
next_info = INVALID;
else {
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:
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);
}
next_byte = (unsigned char)*in_p++;
- next_table = next_info;
+ next_table = ((uintptr_t)tr->word_array) + next_info;
goto follow_byte;
case ZERObt: /* drop input */
continue;